cmdopts.diff
author Myhailo Danylenko <isbear@ukrpost.net>
Sat, 07 Nov 2015 17:39:49 +0200
changeset 88 0a87df8ad9c1
parent 87 78238d26911a
permissions -rw-r--r--
Refresh queue for new mcabber
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
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
     2
# Parent 7a77fde8f7eea66ad121440646e1ffb63ad82749
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
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
    43
diff -r 7a77fde8f7ee 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
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
    45
+++ b/mcabber/doc/HOWTO_commands.mdwn	Thu Aug 22 00:44:41 2013 +0300
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: -->
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1024
diff -r 7a77fde8f7ee mcabber/doc/help/cs/hlp_buffer.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1025
--- a/mcabber/doc/help/cs/hlp_buffer.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1026
+++ b/mcabber/doc/help/cs/hlp_buffer.txt	Thu Aug 22 00:44:41 2013 +0300
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%.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1036
diff -r 7a77fde8f7ee mcabber/doc/help/cs/hlp_del.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1037
--- a/mcabber/doc/help/cs/hlp_del.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1038
+++ b/mcabber/doc/help/cs/hlp_del.txt	Thu Aug 22 00:44:41 2013 +0300
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.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1045
diff -r 7a77fde8f7ee mcabber/doc/help/cs/hlp_move.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1046
--- a/mcabber/doc/help/cs/hlp_move.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1047
+++ b/mcabber/doc/help/cs/hlp_move.txt	Thu Aug 22 00:44:41 2013 +0300
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.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1056
diff -r 7a77fde8f7ee mcabber/doc/help/cs/hlp_rename.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1057
--- a/mcabber/doc/help/cs/hlp_rename.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1058
+++ b/mcabber/doc/help/cs/hlp_rename.txt	Thu Aug 22 00:44:41 2013 +0300
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.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1068
diff -r 7a77fde8f7ee mcabber/doc/help/de/hlp_buffer.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1069
--- a/mcabber/doc/help/de/hlp_buffer.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1070
+++ b/mcabber/doc/help/de/hlp_buffer.txt	Thu Aug 22 00:44:41 2013 +0300
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
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1080
diff -r 7a77fde8f7ee mcabber/doc/help/de/hlp_del.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1081
--- a/mcabber/doc/help/de/hlp_del.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1082
+++ b/mcabber/doc/help/de/hlp_del.txt	Thu Aug 22 00:44:41 2013 +0300
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.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1089
diff -r 7a77fde8f7ee mcabber/doc/help/de/hlp_move.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1090
--- a/mcabber/doc/help/de/hlp_move.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1091
+++ b/mcabber/doc/help/de/hlp_move.txt	Thu Aug 22 00:44:41 2013 +0300
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.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1101
diff -r 7a77fde8f7ee mcabber/doc/help/de/hlp_rename.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1102
--- a/mcabber/doc/help/de/hlp_rename.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1103
+++ b/mcabber/doc/help/de/hlp_rename.txt	Thu Aug 22 00:44:41 2013 +0300
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.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1113
diff -r 7a77fde8f7ee mcabber/doc/help/en/hlp_buffer.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1114
--- a/mcabber/doc/help/en/hlp_buffer.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1115
+++ b/mcabber/doc/help/en/hlp_buffer.txt	Thu Aug 22 00:44:41 2013 +0300
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
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1125
diff -r 7a77fde8f7ee mcabber/doc/help/en/hlp_del.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1126
--- a/mcabber/doc/help/en/hlp_del.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1127
+++ b/mcabber/doc/help/en/hlp_del.txt	Thu Aug 22 00:44:41 2013 +0300
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.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1135
diff -r 7a77fde8f7ee mcabber/doc/help/en/hlp_move.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1136
--- a/mcabber/doc/help/en/hlp_move.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1137
+++ b/mcabber/doc/help/en/hlp_move.txt	Thu Aug 22 00:44:41 2013 +0300
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.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1146
diff -r 7a77fde8f7ee mcabber/doc/help/en/hlp_rename.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1147
--- a/mcabber/doc/help/en/hlp_rename.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1148
+++ b/mcabber/doc/help/en/hlp_rename.txt	Thu Aug 22 00:44:41 2013 +0300
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.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1158
diff -r 7a77fde8f7ee mcabber/doc/help/fr/hlp_buffer.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1159
--- a/mcabber/doc/help/fr/hlp_buffer.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1160
+++ b/mcabber/doc/help/fr/hlp_buffer.txt	Thu Aug 22 00:44:41 2013 +0300
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
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1170
diff -r 7a77fde8f7ee mcabber/doc/help/fr/hlp_del.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1171
--- a/mcabber/doc/help/fr/hlp_del.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1172
+++ b/mcabber/doc/help/fr/hlp_del.txt	Thu Aug 22 00:44:41 2013 +0300
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.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1179
diff -r 7a77fde8f7ee mcabber/doc/help/fr/hlp_move.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1180
--- a/mcabber/doc/help/fr/hlp_move.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1181
+++ b/mcabber/doc/help/fr/hlp_move.txt	Thu Aug 22 00:44:41 2013 +0300
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.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1190
diff -r 7a77fde8f7ee mcabber/doc/help/fr/hlp_rename.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1191
--- a/mcabber/doc/help/fr/hlp_rename.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1192
+++ b/mcabber/doc/help/fr/hlp_rename.txt	Thu Aug 22 00:44:41 2013 +0300
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.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1202
diff -r 7a77fde8f7ee mcabber/doc/help/it/hlp_buffer.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1203
--- a/mcabber/doc/help/it/hlp_buffer.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1204
+++ b/mcabber/doc/help/it/hlp_buffer.txt	Thu Aug 22 00:44:41 2013 +0300
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
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1214
diff -r 7a77fde8f7ee mcabber/doc/help/it/hlp_del.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1215
--- a/mcabber/doc/help/it/hlp_del.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1216
+++ b/mcabber/doc/help/it/hlp_del.txt	Thu Aug 22 00:44:41 2013 +0300
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.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1223
diff -r 7a77fde8f7ee mcabber/doc/help/it/hlp_move.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1224
--- a/mcabber/doc/help/it/hlp_move.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1225
+++ b/mcabber/doc/help/it/hlp_move.txt	Thu Aug 22 00:44:41 2013 +0300
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.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1234
diff -r 7a77fde8f7ee mcabber/doc/help/it/hlp_rename.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1235
--- a/mcabber/doc/help/it/hlp_rename.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1236
+++ b/mcabber/doc/help/it/hlp_rename.txt	Thu Aug 22 00:44:41 2013 +0300
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.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1246
diff -r 7a77fde8f7ee mcabber/doc/help/nl/hlp_buffer.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1247
--- a/mcabber/doc/help/nl/hlp_buffer.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1248
+++ b/mcabber/doc/help/nl/hlp_buffer.txt	Thu Aug 22 00:44:41 2013 +0300
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
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1258
diff -r 7a77fde8f7ee mcabber/doc/help/nl/hlp_del.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1259
--- a/mcabber/doc/help/nl/hlp_del.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1260
+++ b/mcabber/doc/help/nl/hlp_del.txt	Thu Aug 22 00:44:41 2013 +0300
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.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1267
diff -r 7a77fde8f7ee mcabber/doc/help/nl/hlp_move.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1268
--- a/mcabber/doc/help/nl/hlp_move.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1269
+++ b/mcabber/doc/help/nl/hlp_move.txt	Thu Aug 22 00:44:41 2013 +0300
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.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1278
diff -r 7a77fde8f7ee mcabber/doc/help/nl/hlp_rename.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1279
--- a/mcabber/doc/help/nl/hlp_rename.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1280
+++ b/mcabber/doc/help/nl/hlp_rename.txt	Thu Aug 22 00:44:41 2013 +0300
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.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1290
diff -r 7a77fde8f7ee mcabber/doc/help/pl/hlp_del.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1291
--- a/mcabber/doc/help/pl/hlp_del.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1292
+++ b/mcabber/doc/help/pl/hlp_del.txt	Thu Aug 22 00:44:41 2013 +0300
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.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1299
diff -r 7a77fde8f7ee mcabber/doc/help/pl/hlp_move.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1300
--- a/mcabber/doc/help/pl/hlp_move.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1301
+++ b/mcabber/doc/help/pl/hlp_move.txt	Thu Aug 22 00:44:41 2013 +0300
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.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1310
diff -r 7a77fde8f7ee mcabber/doc/help/pl/hlp_rename.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1311
--- a/mcabber/doc/help/pl/hlp_rename.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1312
+++ b/mcabber/doc/help/pl/hlp_rename.txt	Thu Aug 22 00:44:41 2013 +0300
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.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1322
diff -r 7a77fde8f7ee mcabber/doc/help/ru/hlp_buffer.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1323
--- a/mcabber/doc/help/ru/hlp_buffer.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1324
+++ b/mcabber/doc/help/ru/hlp_buffer.txt	Thu Aug 22 00:44:41 2013 +0300
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 в текущем буфере (истории переписки)
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1334
diff -r 7a77fde8f7ee mcabber/doc/help/ru/hlp_del.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1335
--- a/mcabber/doc/help/ru/hlp_del.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1336
+++ b/mcabber/doc/help/ru/hlp_del.txt	Thu Aug 22 00:44:41 2013 +0300
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) из списка контактов, отключает уведомления о его статусе и отключает уведомление пользователя о вашем статусе.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1344
diff -r 7a77fde8f7ee mcabber/doc/help/ru/hlp_move.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1345
--- a/mcabber/doc/help/ru/hlp_move.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1346
+++ b/mcabber/doc/help/ru/hlp_move.txt	Thu Aug 22 00:44:41 2013 +0300
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
 
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1356
diff -r 7a77fde8f7ee mcabber/doc/help/ru/hlp_rename.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1357
--- a/mcabber/doc/help/ru/hlp_rename.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1358
+++ b/mcabber/doc/help/ru/hlp_rename.txt	Thu Aug 22 00:44:41 2013 +0300
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.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1368
diff -r 7a77fde8f7ee mcabber/doc/help/uk/hlp_buffer.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1369
--- a/mcabber/doc/help/uk/hlp_buffer.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1370
+++ b/mcabber/doc/help/uk/hlp_buffer.txt	Thu Aug 22 00:44:41 2013 +0300
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
  Перейти до вказаної у процентах позиції.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1380
diff -r 7a77fde8f7ee mcabber/doc/help/uk/hlp_del.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1381
--- a/mcabber/doc/help/uk/hlp_del.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1382
+++ b/mcabber/doc/help/uk/hlp_del.txt	Thu Aug 22 00:44:41 2013 +0300
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) зі списку. Також відписатися від його сповіщень про статус і відписати його від ваших.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1390
diff -r 7a77fde8f7ee mcabber/doc/help/uk/hlp_move.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1391
--- a/mcabber/doc/help/uk/hlp_move.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1392
+++ b/mcabber/doc/help/uk/hlp_move.txt	Thu Aug 22 00:44:41 2013 +0300
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", щоб перейти до нового місця контакту контакту.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1402
diff -r 7a77fde8f7ee mcabber/doc/help/uk/hlp_rename.txt
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1403
--- a/mcabber/doc/help/uk/hlp_rename.txt	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1404
+++ b/mcabber/doc/help/uk/hlp_rename.txt	Thu Aug 22 00:44:41 2013 +0300
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 дозволяють перейменовувати об’єкти, відмінні від поточного.
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1413
diff -r 7a77fde8f7ee mcabber/mcabber/commands.c
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1414
--- a/mcabber/mcabber/commands.c	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1415
+++ b/mcabber/mcabber/commands.c	Thu Aug 22 00:44:41 2013 +0300
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>
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  1425
@@ -43,512 +43,680 @@
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);
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  1456
+static void room_bookmark (gpointer bud, char *arg);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  1457
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  1458
+#define BUILTIN_COUNT 18
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  1459
+static cmdopts_t def_roster,     // 1
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  1460
+                 def_color,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1461
+                 def_status,
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1462
+                 def_status_to,
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  1463
+                 def_add,        // 5
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1464
+                 def_del,
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1465
+                 def_group,
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1466
+                 def_say,
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  1467
+                 def_msay,
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  1468
+                 def_say_to,     // 10
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1469
+                 def_buffer,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1470
+                 def_clear,
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  1471
+                 def_info,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1472
+                 def_rename,
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1473
+                 def_move,       // 15
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1474
+                 def_set,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1475
+                 def_alias,
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  1476
+                 def_bind;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  1477
+#if 0
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1478
+                 def_connect,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1479
+                 def_disconnect,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1480
+                 def_rawxml,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1481
+                 def_room,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1482
+                 def_authorization,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1483
+                 def_version,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1484
+                 def_request,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1485
+                 def_event,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1486
+                 def_help,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1487
+                 def_pgp,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1488
+                 def_iline,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1489
+                 def_screen_refresh,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1490
+                 def_chat_disable,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1491
+                 def_source,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1492
+                 def_otr,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1493
+                 def_otrpolicy,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1494
+                 def_echo,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1495
+                 def_module,
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1496
+                 def_exit;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1497
 #endif
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1498
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1499
-// Return value container for the following functions
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1500
-static int retval_for_cmds;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1501
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1502
-// Commands callbacks
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1503
-static void do_roster(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1504
-static void do_status(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1505
-static void do_status_to(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1506
-static void do_add(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1507
-static void do_del(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1508
-static void do_group(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1509
-static void do_say(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1510
-static void do_msay(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1511
-static void do_say_to(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1512
-static void do_buffer(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1513
-static void do_clear(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1514
-static void do_info(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1515
-static void do_rename(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1516
-static void do_move(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1517
-static void do_set(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1518
-static void do_alias(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1519
-static void do_bind(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1520
-static void do_connect(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1521
-static void do_disconnect(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1522
-static void do_rawxml(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1523
-static void do_room(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1524
-static void do_authorization(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1525
-static void do_version(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1526
-static void do_request(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1527
-static void do_event(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1528
-static void do_help(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1529
-static void do_pgp(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1530
-static void do_iline(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1531
-static void do_screen_refresh(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1532
-static void do_chat_disable(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1533
-static void do_source(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1534
-static void do_color(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1535
-static void do_otr(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1536
-static void do_otrpolicy(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1537
-static void do_echo(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1538
-static void do_module(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1539
-static void do_exit(char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1540
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1541
-static void room_bookmark(gpointer bud, char *arg);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1542
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1543
-// Global variable for the commands list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1544
-static GSList *Commands;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1545
-static GSList *safe_commands;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1546
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1547
-#ifdef MODULES_ENABLE
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1548
-#include "modules.h"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1549
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1550
-gpointer cmd_del(gpointer id)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1551
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1552
+//  Main commands mechanics
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1553
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1554
+// Functions to parse mcabber command line and execute commands accordingly.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1555
+// Allows to define commands and remove definitions.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1556
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1557
+cmdopts_t **cmd_list  = NULL; // command structs list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1558
+gsize       cmd_count = 0;    // number of commands (one less than memory allocated)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1559
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1560
+// private
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1561
+void cmd_init (void)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1562
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1563
-  GSList *sl_cmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1564
-  if (!id) return NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1565
-  for (sl_cmd = Commands; sl_cmd; sl_cmd = sl_cmd->next)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1566
-    if (sl_cmd -> data == id) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1567
-      cmd *command = (cmd *) sl_cmd->data;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1568
-      gpointer userdata = command->userdata;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1569
-      Commands = g_slist_delete_link(Commands, sl_cmd);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1570
-      compl_del_category_word(COMPL_CMD, command->name);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1571
-      g_slice_free(cmd, command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1572
-      return userdata;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1573
+  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
  1574
+
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1575
+  cmd_list[0]  = &def_roster;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1576
+  cmd_list[1]  = &def_color;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1577
+  cmd_list[2]  = &def_status;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1578
+  cmd_list[3]  = &def_status_to;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1579
+  cmd_list[4]  = &def_add;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1580
+  cmd_list[5]  = &def_del;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1581
+  cmd_list[6]  = &def_group;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1582
+  cmd_list[7]  = &def_say;
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  1583
+  cmd_list[8]  = &def_msay;
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1584
+  cmd_list[9]  = &def_say_to;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1585
+  cmd_list[10] = &def_buffer;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1586
+  cmd_list[11] = &def_clear;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1587
+  cmd_list[12] = &def_info;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1588
+  cmd_list[13] = &def_rename;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1589
+  cmd_list[14] = &def_move;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1590
+  cmd_list[15] = &def_set;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1591
+  cmd_list[16] = &def_alias;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1592
+  cmd_list[17] = &def_bind;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  1593
+#if 0
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1594
+  cmd_list[18] = &def_connect;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1595
+  cmd_list[19] = &def_disconnect;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1596
+  cmd_list[20] = &def_rawxml;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1597
+  cmd_list[21] = &def_room;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1598
+  cmd_list[22] = &def_authorization;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1599
+  cmd_list[23] = &def_version;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1600
+  cmd_list[24] = &def_request;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1601
+  cmd_list[25] = &def_event;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1602
+  cmd_list[26] = &def_help;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1603
+  cmd_list[27] = &def_pgp;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1604
+  cmd_list[28] = &def_iline;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1605
+  cmd_list[29] = &def_screen_refresh;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1606
+  cmd_list[30] = &def_chat_disable;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1607
+  cmd_list[31] = &def_source;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1608
+  cmd_list[32] = &def_otr;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1609
+  cmd_list[33] = &def_otrpolicy;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1610
+  cmd_list[34] = &def_echo;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1611
+  cmd_list[35] = &def_module;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  1612
+  cmd_list[36] = &def_exit;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1613
+#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1614
+  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
  1615
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1616
+  cmd_count = BUILTIN_COUNT;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1617
+}
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
+// private
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1620
+void cmd_uninit (void)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1621
+{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1622
+  g_free (cmd_list);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1623
+  cmd_list  = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1624
+  cmd_count = 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1625
+}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1626
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1627
+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
  1628
+{
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1629
+  size_t max = -1;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1630
+  if (command -> opts) {
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1631
+    const cmdopt_t *opt;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1632
+    for (opt = command -> opts; opt -> shortopt != 0; opt ++)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1633
+      if (opt -> arg.pos > max)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1634
+        max = opt -> arg.pos;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1635
+  }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1636
+  if (command -> args) {
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1637
+    const cmdarg_t *arg;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1638
+    for (arg = command -> args; arg -> name != NULL; arg ++)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1639
+      if (arg -> pos > max)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1640
+        max = arg -> pos;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1641
+  }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1642
+  if (command -> cmds) {
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1643
+    const cmdopts_t *scmd;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1644
+    for (scmd = command -> cmds; scmd -> name != NULL; scmd ++) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1645
+      size_t cnt = cmdopts_count_values (scmd);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1646
+      if (cnt > max)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1647
+        max = cnt;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1648
     }
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
+  return max;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1651
+}
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1652
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1653
+void cmd_define (cmdopts_t *command)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1654
+{
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1655
+  size_t n;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1656
+  // we update value count even for existing commands - user may
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1657
+  // have screwed something up in struct.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1658
+  command -> valno = cmdopts_count_values (command) + 1;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1659
+  // check if command already exists
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1660
+  for (n = cmd_count; n > 0; n --)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1661
+    if (cmd_list[n-1] == command) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1662
+      // raise it's priority
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1663
+      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
  1664
+      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
  1665
+      return;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1666
+    }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1667
+  // register new command
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1668
+  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
  1669
+  cmd_list[cmd_count]   = command;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1670
+  cmd_list[cmd_count+1] = NULL;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1671
+  cmd_count ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1672
+}
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
+void cmd_undef (cmdopts_t *command)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1675
+{
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1676
+  size_t num = 0;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1677
+  while (num < cmd_count) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1678
+    if (cmd_list[num] == command) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1679
+      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
  1680
+      cmd_list = g_renew (cmdopts_t *, cmd_list, cmd_count);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1681
+      cmd_count --;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1682
+      return;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1683
+    }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1684
+    num ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1685
+  }
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1686
+}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1687
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1688
+//  error cmdopts_parse_argument ( startptr, endptr, flags )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1689
+// Parses next argument according to flags and finishes it with zero.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1690
+// Updates current/end pointers. Parsed string MUST be writable.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1691
+// String may shrink in size (quotation/escapes), thus endpointer is also
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1692
+// updated.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1693
+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
  1694
+{
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1695
+  gchar *p = *pr;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1696
+  gchar *e = *er;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1697
+  const char *error = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1698
+  gboolean   quotes = FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1699
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1700
+  if ((flags & cmdarg_catchall) && (flags & cmdarg_plain)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1701
+    *pr = e;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1702
+    return NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1703
+  }
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
+  while (p <= e && error != NULL) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1706
+    if (p == e && quotes) { // end of line in quotes
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1707
+      error = "Unfinished quoted argument.";
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1708
+    } else if ((*p == ' ' && (!quotes) && !(flags & cmdarg_catchall)) || p == e) { // argument ended
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1709
+      if (*p != '\0') {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1710
+        *p = '\0';
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1711
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1712
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1713
+      break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1714
+    } else if (*p == '\\' && !(flags & cmdarg_plain)) { // next char escape
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1715
+      g_memmove(p, p+1, e-(p+1)+1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1716
+      e --;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1717
+      if (p == e) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1718
+        error = "Escape at the end of line.";
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1719
+      } else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1720
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1721
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1722
+    } else if (*p == '"' && !(flags & cmdarg_plain)) { // quotation start/end
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1723
+      g_memmove(p, p+1, e-(p+1)+1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1724
+      e --;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1725
+      quotes = !quotes;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1726
+    } else { // still argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1727
+      p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1728
+    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1729
+  }
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
+  *pr = p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1732
+  *er = e;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1733
+  return error;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1734
+}
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1735
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1736
+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
  1737
+{
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1738
+  cmdarg_value_t *values;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1739
+  size_t         n = command -> valno;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1740
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1741
+  if (n == 0)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1742
+    return NULL;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1743
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1744
+  values = g_slice_alloc (sizeof(cmdarg_value_t) * n);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1745
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1746
+  while (n > 0) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1747
+    n --;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1748
+    values[n].src       = NULL;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1749
+    values[n].flags     = cmdval_default;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1750
+    values[n].value.arg = NULL;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1751
+  }
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
+  return values;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1754
+}
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1755
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1756
+//  error cmdopts_parse_internal ( startptr, endptr, commanddef )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1757
+// Parses command arguments according to command definition.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1758
+// Parsed string MUST be writable. Regardless of success or error, input
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1759
+// string should be considered corrupted by parsing process.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1760
+// 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
  1761
+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
  1762
+{
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1763
+  enum {             // Parser state transitions:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1764
+    in_space,        // -> in_space, in_optstart, in_argstart
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1765
+    in_optstart,     // -> in_shortoptend, in_longoptstart, in_argstart ("-")
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1766
+    in_shortoptend,  // -> in_space, in_argstart, error
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1767
+    in_longoptstart, // -> in_longopt, in_space, in_argstart ("---")
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1768
+    in_longopt,      // -> in_longopt, in_space, error
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1769
+    in_argstart,     // -> in_space, error
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1770
+  } state = in_argstart;         // current parser state
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1771
+  gchar    *p            = *pr;  // current pointer
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1772
+  gchar    *e            = *er;  // end of line pointer
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1773
+  gchar    *s;                   // start of current object pointer
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1774
+  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
  1775
+  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
  1776
+  size_t   argno        = 0;     // number of current positional argument
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1777
+  gchar    *error       = NULL;  // error message to return
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1778
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1779
+  // prepare: set default values for arguments and unset some fields
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1780
+  if (error == NULL) {
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1781
+    size_t n;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1782
+    if (command -> opts) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1783
+      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
  1784
+        const cmdopt_t *opt = command -> opts + n;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1785
+        cmdarg_value_t *val = values + opt -> arg.pos;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1786
+        // do not overwrite already specified values
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1787
+        if (val -> src == NULL || !(val -> flags & cmdval_visited)) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1788
+          if (opt -> arg.flags & cmdarg_switch) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1789
+            val -> value.swc = 0;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1790
+          } else {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1791
+            val -> value.roarg = opt -> arg.defval; // XXX ro
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1792
+          }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1793
+          val -> src = &(opt -> arg);
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1794
+        }
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1795
+      }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1796
+    }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1797
+    if (command -> args) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1798
+      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
  1799
+        const cmdarg_t *arg = command -> args + n;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1800
+        cmdarg_value_t *val = values + arg -> pos;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1801
+        // do not overwrite already specified values
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1802
+        if (val -> src == NULL || !(val -> flags & cmdval_visited)) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1803
+          val -> value.roarg = arg -> defval; // XXX ro
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1804
+          val -> src         = arg;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1805
+        }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1806
+      }
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
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1810
+  // general environment checking
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1811
+  if (command -> check) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1812
+    if ((error = command -> check (command, values))) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1813
+      gchar *err = error;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1814
+      error = g_strdup_printf("%s: %s", command -> name, err);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1815
+      g_free (err);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1816
+    }
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
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1819
+  // we allow parser to do one extra run on final '\0'
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1820
+  while (p <= e && error == NULL) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1821
+    if (state == in_space) { // space between args/options
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1822
+      if (*p == ' ' || p == e) { // still space
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1823
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1824
+      } else if (*p == '-' && !opts_ended) { // option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1825
+        state = in_optstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1826
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1827
+      } else { // argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1828
+        if (!option) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1829
+          opts_ended = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1830
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1831
+        s = p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1832
+        state = in_argstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1833
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1834
+    } else if (state == in_optstart) { // long/short option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1835
+      if (*p == ' ' || p == e) { // argument '-'
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1836
+        opts_ended = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1837
+        s = p = p - 1;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1838
+        state = in_argstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1839
+      } else if (*p == '-') { // long option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1840
+        state = in_longoptstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1841
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1842
+      } else { // short option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1843
+        s = p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1844
+        state = in_shortoptend;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1845
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1846
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1847
+    } else if (state == in_shortoptend) { // short option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1848
+      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
  1849
+        size_t n;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1850
+        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
  1851
+          if (command -> opts[n].shortopt == *s) {
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1852
+            option = command -> opts + n;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1853
+            break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1854
+          }
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
+        if (option != NULL) { // option is known
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1857
+          if (option -> arg.flags & cmdarg_switch) { // it is switch
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1858
+            cmdarg_value_t *val = values + option -> arg.pos;
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1859
+            if (val -> src != &(option -> arg)) {
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1860
+              val -> value.swc = 1;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1861
+              val -> src       = &(option -> arg);
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1862
+            } else {
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1863
+              val -> value.swc ++;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1864
+            }
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1865
+            val -> flags |= cmdval_visited;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1866
+            option = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1867
+          } else if (p == e) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1868
+            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
  1869
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1870
+          state = in_space;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1871
+          p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1872
+        } else { // option is unknown
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1873
+          error = g_strdup_printf ("%s: Unknown option -%c.", command -> name, *s);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1874
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1875
+      } else { // short option not ended
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1876
+        // consider it argument (to allow -autojoin)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1877
+        opts_ended = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1878
+        s = p = p - 2;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1879
+        state = in_argstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1880
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1881
+    } else if (state == in_longoptstart) { // long option initialization
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1882
+      if (*p == ' ' || p == e) { // end of options '--'
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1883
+        opts_ended = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1884
+        state = in_space;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1885
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1886
+      } else if (*p == '-') { // argument, starting with '---'
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1887
+        opts_ended = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1888
+        s = p = p - 2;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1889
+        state = in_argstart;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1890
+      } else { // it is long option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1891
+        s = p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1892
+        state = in_longopt;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1893
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1894
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1895
+    } else if (state == in_longopt) { // long option name
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1896
+      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
  1897
+        size_t n;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1898
+        *p = '\0';
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1899
+        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
  1900
+          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
  1901
+            option = command -> opts + n;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1902
+            break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1903
+          }
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
+        if (option != NULL) { // option is known
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1906
+          if (option -> arg.flags & cmdarg_switch) { // it is switch
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1907
+            cmdarg_value_t *val = values + option -> arg.pos;
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1908
+            if (val -> src != &(option -> arg)) {
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1909
+              val -> value.swc = 1;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1910
+              val -> src       = &(option -> arg);
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1911
+            } else {
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1912
+              val -> value.swc ++;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1913
+            }
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1914
+            val -> flags |= cmdval_visited;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1915
+            option = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1916
+          } else if (p == e) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1917
+            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
  1918
+          }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1919
+          state = in_space;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1920
+          p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1921
+        } else { // option is unknown
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1922
+          error = g_strdup_printf ("%s: Unknown option --%s.", command -> name, option -> longopt);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1923
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1924
+      } else { // still long option
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1925
+        p ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1926
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1927
+    } 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
  1928
+      const char     *err;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1929
+      const cmdarg_t *arg;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1930
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1931
+      if (option) { // option argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1932
+        arg = &(option -> arg);
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1933
+      } 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
  1934
+        break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1935
+      } else { // normal aurgument
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  1936
+        arg = command -> args + argno;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1937
+      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1938
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1939
+      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
  1940
+        if (!option) {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1941
+          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
  1942
+        } else if (option -> longopt) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1943
+          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
  1944
+        } else {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1945
+          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
  1946
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1947
+      } else {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1948
+        cmdarg_value_t *val = values + arg -> pos;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1949
+        val -> value.arg = s;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1950
+        val -> src       = arg;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1951
+        val -> flags    |= cmdval_visited;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1952
+        if (option) { // option argument
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1953
+          option = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1954
+        } else { // normal argument
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  1955
+          if (arg -> flags & cmdarg_subcmd) { // subcommand
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1956
+            const cmdopts_t *subcmd;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1957
+            for (subcmd = command -> cmds; subcmd -> name != NULL; subcmd ++)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1958
+              if (!strcmp (s, subcmd -> name))
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1959
+                break;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1960
+            if (subcmd -> name != NULL) { // found subcommand
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1961
+              gchar *err;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1962
+              val -> value.cmd = subcmd;
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1963
+              if ((err = cmdopts_parse_internal (&p, &e, subcmd, values))) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1964
+                error = g_strdup_printf("%s %s", command -> name, err);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1965
+                g_free (err);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1966
+              }
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1967
+            } else if (arg -> flags & cmdarg_required) { // unknown subcommand
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1968
+              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
  1969
+            } else { // XXX warning message?
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  1970
+              val -> value.cmd = NULL;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1971
+            }
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
+          argno ++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1974
+        }
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
+      state = in_space;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1977
+    }
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
+  *pr = p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1981
+  *er = e;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  1982
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1983
+  return error;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1984
+}
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
+// value types:      type               check                 required
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1987
+// - switch          no effect          toboolean()           no effect?
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1988
+// - option          check              call checker          fatal check error
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1989
+// - argument        check              call checker          fatal check error
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1990
+// - 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
  1991
+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
  1992
+{
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1993
+  size_t n = command -> valno;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1994
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1995
+  if (n == 0)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1996
+    return NULL;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1997
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1998
+  // XXX reverse order?
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  1999
+  while (n > 0) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2000
+    cmdarg_value_t *val = values + n - 1;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2001
+    n --;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2002
+    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
  2003
+      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
  2004
+        if ((val -> src -> flags & cmdarg_required) && (val -> value.cmd == NULL))
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2005
+          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
  2006
+      } 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
  2007
+        if (val -> src -> flags & cmdarg_check)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2008
+          val -> value.swc %= 2;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2009
+      } 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
  2010
+        gchar *err;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2011
+        if ((err = val -> src -> type -> check (val))) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2012
+          // FIXME option name
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2013
+          if (val -> src -> flags & cmdarg_required) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2014
+            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
  2015
+            g_free (err);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2016
+            return error;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2017
+          } else {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2018
+            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
  2019
+            g_free (err);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2020
+          }
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
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2026
   return NULL;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2027
 }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2028
-#endif
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2029
-
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2030
-//  cmd_add()
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2031
-// 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
  2032
-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
  2033
-                 guint flags_row2, void (*f)(char*), gpointer userdata)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2034
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2035
+//  cmdopts_free ( commanddef )
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2036
+// Free various parser data, used in parsing process
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  2037
+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
  2038
 {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2039
-  cmd *n_cmd = g_slice_new0(cmd);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2040
-  strncpy(n_cmd->name, name, 32-1);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2041
-  n_cmd->help = help;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2042
-  n_cmd->completion_flags[0] = flags_row1;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2043
-  n_cmd->completion_flags[1] = flags_row2;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2044
-  n_cmd->func = f;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2045
-  n_cmd->userdata = userdata;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2046
-  Commands = g_slist_prepend(Commands, n_cmd);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2047
-  // Add to completion CMD category
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2048
-  compl_add_category_word(COMPL_CMD, name);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2049
-  return n_cmd;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2050
+  size_t n = command -> valno;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2051
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2052
+  if (n == 0)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2053
+    return;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2054
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2055
+  while (n > 0) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2056
+    cmdarg_value_t *val = values + n - 1;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2057
+    n --;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2058
+    if ((val -> flags & cmdval_freeme) &&
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2059
+        val -> src && val -> src -> type &&
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2060
+        val -> src -> type -> free) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2061
+      val -> src -> type -> free (val);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2062
+    }
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
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2065
+  g_slice_free1 (sizeof(cmdarg_value_t) * n, values);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2066
 }
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
-//  cmd_set_safe(name, safe)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2069
-// Sets if command can be used in startup configuration file.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2070
-gboolean cmd_set_safe(const gchar *name, gboolean safe)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2071
+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
  2072
 {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2073
-  GSList *sel;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2074
-  if (!name)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2075
-    return FALSE;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2076
-  for (sel = safe_commands; sel; sel = sel->next)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2077
-    if (!strcmp((const char *)sel->data, name)) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2078
-      if (safe)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2079
-        return FALSE;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2080
-      else {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2081
-        g_free(sel->data);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2082
-        safe_commands = g_slist_delete_link(safe_commands, sel);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2083
-      }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2084
+  gchar *s = commandline;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2085
+  gchar *p, *e;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2086
+  gchar *freeme = NULL;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2087
+  const char *err;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2088
+  gchar      *error;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2089
+  cmdopts_t  *command = NULL;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2090
+  const char *alias   = NULL;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2091
+  cmdarg_value_t *values;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2092
+  size_t n;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2093
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2094
+  // skip command indicator and spaces at the beginning
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2095
+  while (*s == COMMAND_CHAR || *s == ' ')
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2096
+    s ++;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2097
+  p = s;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2098
+  e = s + strlen (s);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2099
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2100
+  // separate first word - command name
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2101
+  if ((err = cmdopts_parse_argument (&p, &e, cmdarg_default))) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2102
+    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
  2103
+    return cmd_result_syntax_error;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2104
+  }
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
+  // check for quit command
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2107
+  if (!strcmp (s, "quit")) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2108
+    return cmd_result_quit;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2109
+  }
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
+  // check if we're in verbatim mode
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2112
+  if ((flags & cmdexe_check_verbatim) && scr_get_multimode () == 2) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2113
+    if (strcmp (s, "msay")) { // it is not msay
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2114
+      return cmd_result_verbatim;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2115
     }
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2116
-  if (safe)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2117
-    safe_commands = g_slist_append(safe_commands, g_strdup(name));
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2118
-  else
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2119
-    return FALSE;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2120
-  return TRUE;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2121
+  }
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
+  // check and expand alias
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2124
+  if ((alias = settings_get (SETTINGS_TYPE_ALIAS, s))) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2125
+    freeme = s = g_strdup_printf ("%s %s", alias, p);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2126
+    p = s;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2127
+    e = s + strlen (s);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2128
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2129
+    if ((err = cmdopts_parse_argument (&p, &e, cmdarg_default))) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2130
+      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
  2131
+      g_free (freeme);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2132
+      return cmd_result_syntax_error;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2133
+    }
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
+    // check for quit command again
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2136
+    if (!strcmp (s, "quit")) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2137
+      g_free (freeme);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2138
+      return cmd_result_quit;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2139
+    }
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
+  // find command with this name (reverse - see cmd_define())
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2143
+  for (n = cmd_count; n > 0; n --) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2144
+    if (!strcmp (s, cmd_list[n-1] -> name)) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2145
+      command = cmd_list[n-1];
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2146
+      break;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2147
+    }
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
+  if (command == NULL) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2150
+    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
  2151
+    g_free (freeme);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2152
+    return cmd_result_not_found;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2153
+  }
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
+  // check safety
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2156
+  if ((flags & cmdexe_check_safe) && !(command -> flags & cmd_safe)) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2157
+    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
  2158
+    g_free (freeme);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2159
+    return cmd_result_not_found;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2160
+  }
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
+  // allocate dynamic storage for arguments
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2163
+  values = cmdopts_allocate_values (command);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2164
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2165
+  // parse command line
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2166
+  if ((error = cmdopts_parse_internal (&p, &e, command, values))) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2167
+    scr_log_print (LPRINT_NORMAL, "%s", error);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2168
+    g_free (error);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2169
+    cmdopts_free_values (command, values);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2170
+    g_free (freeme);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2171
+    return cmd_result_syntax_error;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2172
+  }
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
+  // do type checking on arguments
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2175
+  if ((error = cmdopts_check_values (command, values))) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2176
+    scr_log_print (LPRINT_NORMAL, "%s: %s", command -> name, error);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2177
+    g_free (error);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2178
+    cmdopts_free_values (command, values);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2179
+    g_free (freeme);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2180
+    return cmd_result_value_error;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2181
+  }
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
+  // execute command handler
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2184
+  if (command -> handle) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2185
+    if ((error = command -> handle (command, values))) {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2186
+      scr_log_print (LPRINT_NORMAL, "%s: %s", command -> name, error);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2187
+      g_free (error);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2188
+      cmdopts_free_values (command, values);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2189
+      g_free (freeme);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2190
+      return cmd_result_runtime_error;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2191
+    }
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
+  // free resources
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2195
+  cmdopts_free_values (command, values);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2196
+  g_free (freeme);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2197
+  return cmd_result_ok;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2198
 }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2199
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2200
-//  cmd_is_safe(name)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2201
-// Returns if command is safe or not
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2202
-gboolean cmd_is_safe(const gchar *name)
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2203
+//  process_line(line)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2204
+// 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
  2205
+// and it is sent to the currently selected buddy.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2206
+// 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
  2207
+// error codes.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2208
+cmd_result_t process_line(const char *line)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2209
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2210
-  GSList *sel;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2211
-  if (!name)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2212
-    return FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2213
-  for (sel = safe_commands; sel; sel = sel->next)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2214
-    if (!strcmp((const char *)sel->data, name))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2215
-      return TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2216
-  return FALSE;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2217
-}
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2218
-
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2219
-//  cmd_init()
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2220
-// Commands table initialization
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2221
-// !!!
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2222
-// After changing commands names and it arguments names here, you must change
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2223
-// ones in init_bindings()!
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2224
-//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2225
-void cmd_init(void)
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2226
-{
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2227
-  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
  2228
-  cmd_add("alias", "Add an alias", 0, 0, &do_alias, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2229
-  cmd_add("authorization", "Manage subscription authorizations",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2230
-          COMPL_AUTH, COMPL_JID, &do_authorization, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2231
-  cmd_add("bind", "Add an key binding", 0, 0, &do_bind, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2232
-  cmd_add("buffer", "Manipulate current buddy's buffer (chat window)",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2233
-          COMPL_BUFFER, 0, &do_buffer, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2234
-  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
  2235
-  cmd_add("clear", "Clear the dialog window", 0, 0, &do_clear, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2236
-  cmd_add("color", "Set coloring options", COMPL_COLOR, 0, &do_color, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2237
-  cmd_add("connect", "Connect to the server", 0, 0, &do_connect, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2238
-  cmd_add("del", "Delete the current buddy", 0, 0, &do_del, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2239
-  cmd_add("disconnect", "Disconnect from server", 0, 0, &do_disconnect, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2240
-  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
  2241
-  cmd_add("event", "Process an event", COMPL_EVENTSID, COMPL_EVENTS, &do_event,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2242
-          NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2243
-  cmd_add("exit",  "Exit mcabber", 0, 0, &do_exit, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2244
-  cmd_add("group", "Change group display settings",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2245
-          COMPL_GROUP, COMPL_GROUPNAME, &do_group, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2246
-  cmd_add("help", "Display some help", COMPL_CMD, 0, &do_help, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2247
-  cmd_add("iline", "Manipulate input buffer", 0, 0, &do_iline, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2248
-  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
  2249
-  cmd_add("module", "Manipulations with modules", COMPL_MODULE, 0, &do_module,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2250
-          NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2251
-  cmd_add("move", "Move the current buddy to another group", COMPL_GROUPNAME,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2252
-          0, &do_move, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2253
-  cmd_add("msay", "Send a multi-lines message to the selected buddy",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2254
-          COMPL_MULTILINE, 0, &do_msay, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2255
-  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
  2256
-  cmd_add("otrpolicy", "Manage OTR policies", COMPL_JID, COMPL_OTRPOLICY,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2257
-          &do_otrpolicy, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2258
-  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
  2259
-  cmd_add("quit", "Exit the software", 0, 0, NULL, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2260
-  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
  2261
-  cmd_add("rename", "Rename the current buddy", 0, 0, &do_rename, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2262
-  cmd_add("request", "Send a Jabber IQ request", COMPL_REQUEST, COMPL_JID,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2263
-          &do_request, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2264
-  cmd_add("room", "MUC actions command", COMPL_ROOM, 0, &do_room, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2265
-  cmd_add("roster", "Manipulate the roster/buddylist", COMPL_ROSTER, 0,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2266
-          &do_roster, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2267
-  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
  2268
-  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
  2269
-          &do_say_to, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2270
-  cmd_add("screen_refresh", "Redraw mcabber screen", 0, 0, &do_screen_refresh,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2271
-          NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2272
-  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
  2273
-  cmd_add("source", "Read a configuration file", 0, 0, &do_source, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2274
-  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
  2275
-          NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2276
-  cmd_add("status_to", "Show or set your status for one recipient",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2277
-          COMPL_JID, COMPL_STATUS, &do_status_to, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2278
-  cmd_add("version", "Show mcabber version", 0, 0, &do_version, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2279
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2280
-  cmd_set_safe("set", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2281
-  cmd_set_safe("bind", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2282
-  cmd_set_safe("alias", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2283
-  cmd_set_safe("pgp", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2284
-  cmd_set_safe("source", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2285
-  cmd_set_safe("status", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2286
-  cmd_set_safe("color", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2287
-  cmd_set_safe("otrpolicy", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2288
-  cmd_set_safe("module", TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2289
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2290
-  // Status category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2291
-  compl_add_category_word(COMPL_STATUS, "online");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2292
-  compl_add_category_word(COMPL_STATUS, "avail");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2293
-#ifdef WITH_DEPRECATED_STATUS_INVISIBLE
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2294
-  compl_add_category_word(COMPL_STATUS, "invisible");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2295
-#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2296
-  compl_add_category_word(COMPL_STATUS, "free");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2297
-  compl_add_category_word(COMPL_STATUS, "dnd");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2298
-  compl_add_category_word(COMPL_STATUS, "notavail");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2299
-  compl_add_category_word(COMPL_STATUS, "away");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2300
-  compl_add_category_word(COMPL_STATUS, "offline");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2301
-  compl_add_category_word(COMPL_STATUS, "message");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2302
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2303
-  // Roster category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2304
-  compl_add_category_word(COMPL_ROSTER, "bottom");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2305
-  compl_add_category_word(COMPL_ROSTER, "top");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2306
-  compl_add_category_word(COMPL_ROSTER, "up");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2307
-  compl_add_category_word(COMPL_ROSTER, "down");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2308
-  compl_add_category_word(COMPL_ROSTER, "group_prev");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2309
-  compl_add_category_word(COMPL_ROSTER, "group_next");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2310
-  compl_add_category_word(COMPL_ROSTER, "hide");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2311
-  compl_add_category_word(COMPL_ROSTER, "show");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2312
-  compl_add_category_word(COMPL_ROSTER, "toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2313
-  compl_add_category_word(COMPL_ROSTER, "display");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2314
-  compl_add_category_word(COMPL_ROSTER, "hide_offline");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2315
-  compl_add_category_word(COMPL_ROSTER, "show_offline");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2316
-  compl_add_category_word(COMPL_ROSTER, "toggle_offline");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2317
-  compl_add_category_word(COMPL_ROSTER, "item_lock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2318
-  compl_add_category_word(COMPL_ROSTER, "item_unlock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2319
-  compl_add_category_word(COMPL_ROSTER, "item_toggle_lock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2320
-  compl_add_category_word(COMPL_ROSTER, "alternate");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2321
-  compl_add_category_word(COMPL_ROSTER, "search");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2322
-  compl_add_category_word(COMPL_ROSTER, "unread_first");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2323
-  compl_add_category_word(COMPL_ROSTER, "unread_next");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2324
-  compl_add_category_word(COMPL_ROSTER, "note");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2325
-  compl_add_category_word(COMPL_ROSTER, "resource_lock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2326
-  compl_add_category_word(COMPL_ROSTER, "resource_unlock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2327
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2328
-  // Buffer category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2329
-  compl_add_category_word(COMPL_BUFFER, "clear");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2330
-  compl_add_category_word(COMPL_BUFFER, "bottom");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2331
-  compl_add_category_word(COMPL_BUFFER, "top");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2332
-  compl_add_category_word(COMPL_BUFFER, "up");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2333
-  compl_add_category_word(COMPL_BUFFER, "down");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2334
-  compl_add_category_word(COMPL_BUFFER, "search_backward");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2335
-  compl_add_category_word(COMPL_BUFFER, "search_forward");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2336
-  compl_add_category_word(COMPL_BUFFER, "readmark");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2337
-  compl_add_category_word(COMPL_BUFFER, "date");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2338
-  compl_add_category_word(COMPL_BUFFER, "%");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2339
-  compl_add_category_word(COMPL_BUFFER, "purge");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2340
-  compl_add_category_word(COMPL_BUFFER, "close");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2341
-  compl_add_category_word(COMPL_BUFFER, "close_all");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2342
-  compl_add_category_word(COMPL_BUFFER, "scroll_lock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2343
-  compl_add_category_word(COMPL_BUFFER, "scroll_unlock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2344
-  compl_add_category_word(COMPL_BUFFER, "scroll_toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2345
-  compl_add_category_word(COMPL_BUFFER, "list");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2346
-  compl_add_category_word(COMPL_BUFFER, "save");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2347
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2348
-  // Group category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2349
-  compl_add_category_word(COMPL_GROUP, "fold");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2350
-  compl_add_category_word(COMPL_GROUP, "unfold");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2351
-  compl_add_category_word(COMPL_GROUP, "toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2352
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2353
-  // Multi-line (msay) category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2354
-  compl_add_category_word(COMPL_MULTILINE, "abort");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2355
-  compl_add_category_word(COMPL_MULTILINE, "begin");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2356
-  compl_add_category_word(COMPL_MULTILINE, "send");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2357
-  compl_add_category_word(COMPL_MULTILINE, "send_to");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2358
-  compl_add_category_word(COMPL_MULTILINE, "toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2359
-  compl_add_category_word(COMPL_MULTILINE, "toggle_verbatim");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2360
-  compl_add_category_word(COMPL_MULTILINE, "verbatim");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2361
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2362
-  // Room category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2363
-  compl_add_category_word(COMPL_ROOM, "affil");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2364
-  compl_add_category_word(COMPL_ROOM, "ban");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2365
-  compl_add_category_word(COMPL_ROOM, "bookmark");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2366
-  compl_add_category_word(COMPL_ROOM, "destroy");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2367
-  compl_add_category_word(COMPL_ROOM, "invite");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2368
-  compl_add_category_word(COMPL_ROOM, "join");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2369
-  compl_add_category_word(COMPL_ROOM, "kick");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2370
-  compl_add_category_word(COMPL_ROOM, "leave");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2371
-  compl_add_category_word(COMPL_ROOM, "names");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2372
-  compl_add_category_word(COMPL_ROOM, "nick");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2373
-  compl_add_category_word(COMPL_ROOM, "privmsg");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2374
-  compl_add_category_word(COMPL_ROOM, "remove");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2375
-  compl_add_category_word(COMPL_ROOM, "role");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2376
-  compl_add_category_word(COMPL_ROOM, "setopt");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2377
-  compl_add_category_word(COMPL_ROOM, "topic");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2378
-  compl_add_category_word(COMPL_ROOM, "unban");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2379
-  compl_add_category_word(COMPL_ROOM, "unlock");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2380
-  compl_add_category_word(COMPL_ROOM, "whois");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2381
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2382
-  // Authorization category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2383
-  compl_add_category_word(COMPL_AUTH, "allow");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2384
-  compl_add_category_word(COMPL_AUTH, "cancel");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2385
-  compl_add_category_word(COMPL_AUTH, "request");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2386
-  compl_add_category_word(COMPL_AUTH, "request_unsubscribe");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2387
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2388
-  // Request (query) category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2389
-  compl_add_category_word(COMPL_REQUEST, "last");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2390
-  compl_add_category_word(COMPL_REQUEST, "ping");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2391
-  compl_add_category_word(COMPL_REQUEST, "time");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2392
-  compl_add_category_word(COMPL_REQUEST, "vcard");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2393
-  compl_add_category_word(COMPL_REQUEST, "version");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2394
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2395
-  // Events category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2396
-  compl_add_category_word(COMPL_EVENTS, "accept");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2397
-  compl_add_category_word(COMPL_EVENTS, "ignore");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2398
-  compl_add_category_word(COMPL_EVENTS, "reject");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2399
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2400
-  // PGP category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2401
-  compl_add_category_word(COMPL_PGP, "disable");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2402
-  compl_add_category_word(COMPL_PGP, "enable");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2403
-  compl_add_category_word(COMPL_PGP, "force");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2404
-  compl_add_category_word(COMPL_PGP, "info");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2405
-  compl_add_category_word(COMPL_PGP, "setkey");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2406
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2407
-  // OTR category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2408
-  compl_add_category_word(COMPL_OTR, "start");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2409
-  compl_add_category_word(COMPL_OTR, "stop");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2410
-  compl_add_category_word(COMPL_OTR, "fingerprint");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2411
-  compl_add_category_word(COMPL_OTR, "smpq");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2412
-  compl_add_category_word(COMPL_OTR, "smpr");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2413
-  compl_add_category_word(COMPL_OTR, "smpa");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2414
-  compl_add_category_word(COMPL_OTR, "info");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2415
-  compl_add_category_word(COMPL_OTR, "key");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2416
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2417
-  // OTR Policy category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2418
-  compl_add_category_word(COMPL_OTRPOLICY, "plain");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2419
-  compl_add_category_word(COMPL_OTRPOLICY, "manual");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2420
-  compl_add_category_word(COMPL_OTRPOLICY, "opportunistic");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2421
-  compl_add_category_word(COMPL_OTRPOLICY, "always");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2422
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2423
-  // Color category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2424
-  compl_add_category_word(COMPL_COLOR, "roster");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2425
-  compl_add_category_word(COMPL_COLOR, "muc");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2426
-  compl_add_category_word(COMPL_COLOR, "mucnick");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2427
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2428
-#ifdef MODULES_ENABLE
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2429
-  // Module category
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2430
-  compl_add_category_word(COMPL_MODULE, "info");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2431
-  compl_add_category_word(COMPL_MODULE, "list");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2432
-  compl_add_category_word(COMPL_MODULE, "load");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2433
-  compl_add_category_word(COMPL_MODULE, "unload");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2434
-#endif
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2435
-}
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2436
-
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2437
-//  expandalias(line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2438
-// 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
  2439
-// If no alias is found, returns line
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2440
-// Note: if the returned pointer is different from line, the caller should
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2441
-//       g_free() the pointer after use
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2442
-char *expandalias(const char *line)
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2443
-{
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2444
-  const char *p1, *p2;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2445
-  char *word;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2446
-  const gchar *value;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2447
-  char *newline = (char*)line;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2448
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2449
-  // Ignore leading COMMAND_CHAR
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2450
-  for (p1 = line ; *p1 == COMMAND_CHAR ; p1++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2451
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2452
-  // Locate the end of the word
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2453
-  for (p2 = p1 ; *p2 && (*p2 != ' ') ; p2++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2454
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2455
-  // Extract the word and look for an alias in the list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2456
-  word = g_strndup(p1, p2-p1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2457
-  value = settings_get(SETTINGS_TYPE_ALIAS, (const char*)word);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2458
-  g_free(word);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2459
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2460
-  if (value)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2461
-    newline = g_strdup_printf("%c%s%s", COMMAND_CHAR, value, p2);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2462
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2463
-  return newline;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2464
-}
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
-//  cmd_get
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2467
-// Finds command in the command list structure.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2468
-// 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
  2469
-cmd *cmd_get(const char *command)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2470
-{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2471
-  const char *p1, *p2;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2472
-  char *com;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2473
-  GSList *sl_com;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2474
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2475
-  // Ignore leading COMMAND_CHAR
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2476
-  for (p1 = command ; *p1 == COMMAND_CHAR ; p1++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2477
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2478
-  // Locate the end of the command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2479
-  for (p2 = p1 ; *p2 && (*p2 != ' ') ; p2++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2480
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2481
-  // Copy the clean command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2482
-  com = g_strndup(p1, p2-p1);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2483
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2484
-  // Look for command in the list
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2485
-  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
  2486
-    if (!strcasecmp(com, ((cmd*)sl_com->data)->name))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2487
-      break;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2488
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2489
-  g_free(com);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2490
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2491
-  if (sl_com)       // Command has been found.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2492
-    return (cmd*)sl_com->data;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2493
-  return NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2494
-}
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
-//  process_command(line, iscmd)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2497
-// Process a command line.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2498
-// 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
  2499
-// it is intended to be used for key bindings.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2500
-// 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
  2501
-int process_command(const char *line, guint iscmd)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2502
-{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2503
-  char *p;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2504
-  char *xpline;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2505
-  cmd *curcmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2506
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2507
-  if (!line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2508
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2509
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2510
-  // We do alias expansion here
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2511
-  if (iscmd || scr_get_multimode() != 2)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2512
-    xpline = expandalias(line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2513
-  else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2514
-    xpline = (char*)line; // No expansion in verbatim multi-line mode
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2515
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2516
-  // We want to use a copy
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2517
-  if (xpline == line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2518
-    xpline = g_strdup(line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2519
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2520
-  // Remove trailing spaces:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2521
-  for (p=xpline ; *p ; p++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2522
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2523
-  for (p-- ; p>xpline && (*p == ' ') ; p--)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2524
-    *p = 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2525
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2526
-  // Command "quit"?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2527
-  if ((iscmd || scr_get_multimode() != 2)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2528
-      && (!strncasecmp(xpline, mkcmdstr("quit"), strlen(mkcmdstr("quit"))))) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2529
-    if (!xpline[5] || xpline[5] == ' ') {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2530
-      g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2531
-      return 255;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2532
-    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2533
-  } else if (iscmd && !strncasecmp(xpline, "quit", 4) &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2534
-             (!xpline[4] || xpline[4] == ' ')) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2535
-    // 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
  2536
-    // character (usually '/').
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2537
-    g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2538
-    return 255;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2539
-  }
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
-  // 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
  2542
-  if (!iscmd && scr_get_multimode() == 2
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2543
-      && (strncasecmp(xpline, mkcmdstr("msay "), strlen(mkcmdstr("msay "))))) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2544
-    // It isn't an /msay command
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  2545
-    scr_append_multiline(xpline);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2546
-    g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2547
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2548
-  }
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
-  // Commands handling
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2551
-  curcmd = cmd_get(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2552
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2553
-  if (!curcmd) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2554
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized command.  "
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2555
-                 "Please see the manual for a list of known commands.");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2556
-    g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2557
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2558
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2559
-  if (!curcmd->func) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2560
-    scr_LogPrint(LPRINT_NORMAL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2561
-                 "This functionality is not yet implemented, sorry.");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2562
-    g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2563
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2564
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2565
-  // Lets go to the command parameters
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2566
-  for (p = xpline+1; *p && (*p != ' ') ; p++)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2567
-    ;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2568
-  // Skip spaces
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2569
-  while (*p && (*p == ' '))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2570
-    p++;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2571
-  // Call command-specific function
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2572
-  retval_for_cmds = 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2573
-#ifdef MODULES_ENABLE
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2574
-  if (curcmd->userdata)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2575
-    (*(void (*)(char *p, gpointer u))curcmd->func)(p, curcmd->userdata);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2576
-  else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2577
-    (*curcmd->func)(p);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2578
-#else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2579
-  (*curcmd->func)(p);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2580
-#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2581
-  g_free(xpline);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2582
-  return retval_for_cmds;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2583
-}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2584
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2585
-//  process_line(line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2586
-// Process a command/message line.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2587
-// 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
  2588
-// currently selected buddy.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2589
-// Return 255 if the line is the /quit command, or 0.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2590
-int process_line(const char *line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2591
-{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2592
+  gchar *utf8;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2593
+  int retval;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2594
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2595
   if (!*line) { // User only pressed enter
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2596
     if (scr_get_multimode()) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2597
       scr_append_multiline("");
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2598
@@ -556,141 +724,706 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2599
     }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2600
     if (current_buddy) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2601
       if (buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_GROUP)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2602
-        do_group("toggle");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2603
+        group_cmd (BUDDATA(current_buddy), scmd_group_toggle);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2604
       else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2605
         // Enter chat mode
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2606
         scr_set_chatmode(TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2607
         scr_show_buddy_window();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2608
       }
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
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2611
+    return cmd_result_input;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  2612
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  2613
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2614
-  if (*line != COMMAND_CHAR) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2615
-    // This isn't a command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2616
+  utf8 = to_utf8(line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2617
+  if (*line != COMMAND_CHAR) { // input line
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  2618
     if (scr_get_multimode())
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  2619
-      scr_append_multiline(line);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  2620
+      scr_append_multiline(utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  2621
     else
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  2622
-      say_cmd((char*)line, 0);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2623
-    return 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2624
-  }
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
-  /* It is _probably_ a command -- except for verbatim multi-line mode */
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2627
-  return process_command(line, FALSE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2628
-}
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
-// Helper routine for buffer item_{lock,unlock,toggle_lock}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2631
-// "lock" values: 1=lock 0=unlock -1=invert
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2632
-static void roster_buddylock(char *bjid, int lock)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2633
-{
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2634
-  gpointer bud = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2635
-  bool may_need_refresh = FALSE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2636
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2637
-  // Allow special jid "" or "." (current buddy)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2638
-  if (bjid && (!*bjid || !strcmp(bjid, ".")))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2639
-    bjid = NULL;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2640
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2641
-  if (bjid) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2642
-    // The JID has been specified.  Quick check...
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2643
-    if (check_jid_syntax(bjid)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2644
-      scr_LogPrint(LPRINT_NORMAL|LPRINT_NOTUTF8,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2645
-                   "<%s> is not a valid Jabber ID.", bjid);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2646
-    } else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2647
-      // Find the buddy
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2648
-      GSList *roster_elt;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2649
-      roster_elt = roster_find(bjid, jidsearch,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2650
-                               ROSTER_TYPE_USER|ROSTER_TYPE_ROOM);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2651
-      if (roster_elt)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2652
-        bud = roster_elt->data;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2653
-      else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2654
-        scr_LogPrint(LPRINT_NORMAL, "This jid isn't in the roster.");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2655
-      may_need_refresh = TRUE;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2656
-    }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2657
-  } else {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2658
-    // Use the current buddy
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2659
-    if (current_buddy)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2660
-      bud = BUDDATA(current_buddy);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2661
-  }
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
-  // Update the ROSTER_FLAG_USRLOCK flag
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2664
-  if (bud) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2665
-    if (lock == -1)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2666
-      lock = !(buddy_getflags(bud) & ROSTER_FLAG_USRLOCK);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2667
-    buddy_setflags(bud, ROSTER_FLAG_USRLOCK, lock);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2668
-    if (may_need_refresh) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2669
-      buddylist_build();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2670
-      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
  2671
+      say_cmd(utf8, msgtype_not_set);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2672
+    retval = 0;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2673
+  } else { // command or verbatim multiline message
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2674
+    retval = cmd_execute (utf8, cmdexe_check_verbatim);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2675
+    if (retval == cmd_result_verbatim) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2676
+      g_free(utf8); // buffer has been corrupted by parser
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2677
+      utf8 = to_utf8(line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2678
+      scr_append_multiline(utf8);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2679
+      retval = cmd_result_input;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2680
     }
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  2681
   }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2682
+  g_free(utf8);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2683
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2684
+  return retval;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2685
 }
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  2686
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2687
-static void roster_resourcelock(char *jidres, gboolean lock) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2688
-  gpointer bud = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2689
-  char *resource = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2690
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2691
-  if (!jidres) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2692
-    if (lock) return;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2693
-    jidres = ".";
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2694
-  }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2695
-
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2696
-  if (jidres[0] == '.' &&
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2697
-      (jidres[1] == '\0' || jidres[1] == JID_RESOURCE_SEPARATOR)) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2698
-    //Special jid: . or ./resource
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2699
-    switch (jidres[1]) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2700
-      case JID_RESOURCE_SEPARATOR:
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2701
-        resource = jidres+2;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2702
-      case '\0':
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2703
-        if (current_buddy)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2704
-          bud = BUDDATA(current_buddy);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2705
-    }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2706
-  } else {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2707
-    char *tmp;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2708
-    if (!check_jid_syntax(jidres) &&
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2709
-        (tmp = strchr(jidres, JID_RESOURCE_SEPARATOR))) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2710
-      //Any other valid full jid
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2711
-      *tmp = '\0'; // for roster search by bare jid;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2712
-      resource = tmp+1;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2713
-      GSList *roster_elt;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2714
-      roster_elt = roster_find(jidres, jidsearch,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2715
-          ROSTER_TYPE_USER|ROSTER_TYPE_AGENT);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2716
-      if (roster_elt)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2717
-        bud = roster_elt->data;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2718
-      *tmp = JID_RESOURCE_SEPARATOR;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2719
-    }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2720
-    if (!bud) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2721
-      //Resource for current buddy
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2722
-      if (current_buddy)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2723
-        bud = BUDDATA(current_buddy);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2724
-      resource = jidres;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2725
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2726
+//  Standard types
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2727
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2728
+// This section contains standard argument type definitions, used in built-in
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2729
+// mcabber commands.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2730
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2731
+
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2732
+// TODO: move to separate file? (and variations with 'required')
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2733
+// + cmdarg_type_buddy        - in roster, with specified types, resource/activeresource/group -> bud + (resource)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2734
+// + cmdarg_type_resource     - in roster, with specified types, have resource -> bud + resource
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2735
+// + cmdarg_type_bjid         - any bjid -> bjid
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2736
+// + cmdarg_type_fjid         - any fjid -> fjid
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2737
+// + cmdarg_type_charset      - string -> string
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2738
+// + cmdarg_type_uint         - string -> unsigned long
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2739
+// + cmdarg_type_sint         - string -> signed long (unused)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2740
+// + cmdarg_type_nonspace     - strip, space only -> null
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2741
+// * cmdarg_type_bjidmask
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2742
+// + cmdarg_type_color
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2743
+// + cmdarg_type_string2enum
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2744
+// * 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
  2745
+// + cmdarg_type_filename    - expand, convert encoding
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2746
+// + cmdarg_type_date        - YYYYMMDDTHHMMSS -> time_t
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2747
+// * cmdarg_type_assignment  - string -> key + value
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2748
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2749
+//
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2750
+//  command environment checkers
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2751
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2752
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  2753
+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
  2754
+{
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2755
+  if (!xmpp_is_online())
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2756
+    return g_strdup ("You are not connected!");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2757
+  return NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2758
+}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2759
+
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2760
+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
  2761
+{
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2762
+  if (!current_buddy)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2763
+    return g_strdup ("No selected buddy!");
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2764
+  return NULL;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2765
+}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2766
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2767
+//
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2768
+//  generic value destructors
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2769
+//
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2770
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2771
+void cmdarg_free_gfree (cmdarg_value_t *arg)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2772
+{
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2773
+  g_free (arg -> value.arg);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2774
+}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  2775
+
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2776
+//
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2777
+//  string -> stripspace string
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2778
+//
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2779
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2780
+// Strips leading and trailing spaces, checks if anything left.
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2781
+// defvalue: no trailing spaces.
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2782
+gchar *cmdarg_check_nonspace (cmdarg_value_t *arg)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2783
+{
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2784
+  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
  2785
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2786
+  if (val) {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2787
+    while (isspace (*val))
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2788
+      val ++;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2789
+    if (*val) { // valid arg
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2790
+      arg -> value.arg = val;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2791
+      while (*val)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2792
+        val ++;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2793
+      while (isspace (*val))
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2794
+        val --;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2795
+      val ++;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2796
+      if (*val)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2797
+        *val = '\0';
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2798
+      return NULL;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2799
     }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  2800
   }
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2801
-  
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2802
-  if (bud && buddy_gettype(bud) & (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT)) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2803
-    if (lock) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2804
-      GSList *resources, *p_res;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2805
-      gboolean found = FALSE;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2806
-      resources = buddy_getresources(bud);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2807
-      for (p_res = resources ; p_res ; p_res = g_slist_next(p_res)) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2808
-        if (!g_strcmp0((char*)p_res->data, resource))
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2809
-          found = TRUE;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2810
-        g_free(p_res->data);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2811
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2812
+  // error
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2813
+  arg -> value.arg = NULL;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2814
+  return g_strdup ("Non-space value required.");
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2815
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2816
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2817
+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
  2818
+  cmdarg_check_nonspace,
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2819
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2820
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2821
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2822
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2823
+//
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2824
+//  roster name/jid -> bud + resource
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2825
+//
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2826
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2827
+// chkdata: cmdarg_roster_t
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2828
+// returns: value.rjid
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2829
+// defvalue: no "user@[/res]", no "jid/resource"
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2830
+// XXX: activeres/group stuff can easily go to separate checkers
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2831
+//
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2832
+// Flags:
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2833
+//  - name
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2834
+//  - activeres
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2835
+//  - getgroup
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2836
+//
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2837
+// name:
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2838
+//  1. .    -> bud
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2839
+//  1. name -> bud
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2840
+//  2. bud  -> bud/activeres
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2841
+//  2. bud  -> groupbud
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2842
+// jid:
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2843
+//  1. user@[/res]    -> jid[/res]
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2844
+//  2. jid[/res]      -> checkjid[/res]
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2845
+//  3. checkjid[/res] -> bud[/res]
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2846
+//  3. .[/res]        -> bud[/res]
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2847
+//  4. bud            -> groupbud
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2848
+//  4. bud            -> bud/activeres
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2849
+//  4. bud/res        -> bud/checkres
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2850
+gchar *cmdarg_check_buddy (cmdarg_value_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2851
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2852
+  gchar    *error    = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2853
+  gpointer bud       = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2854
+  char     *resource = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2855
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2856
+  if (!(error = cmdarg_check_nonspace(arg))) {
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  2857
+    char  *fjid = arg -> value.arg;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2858
+    const cmdarg_roster_t flags = (guint) arg -> src -> chkdata;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2859
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2860
+    // it is name
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2861
+    if (flags & cmdarg_roster_name) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2862
+      if (!(fjid[0] == '.' && fjid[1] == '\0')) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2863
+        GSList *found = roster_find (fjid, namesearch, flags & cmdarg_roster_mask);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2864
+        if (found) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2865
+          bud = found->data;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2866
+        } else {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2867
+          error = g_strdup_printf ("Name \"%s\" is not in the roster.", fjid);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2868
+        }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2869
       }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2870
-      g_slist_free(resources);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2871
-      if (!found) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2872
-        scr_LogPrint(LPRINT_NORMAL, "No such resource <%s>...", jidres);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2873
-        return;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2874
+    } else if (fjid[0] == '.' && (fjid[1] == JID_RESOURCE_SEPARATOR || fjid[1] == '\0')) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2875
+      // current buddy/jid
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2876
+      if (fjid[1] == JID_RESOURCE_SEPARATOR)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2877
+        resource = fjid+2;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2878
+    } else { // plain jid
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2879
+      const char *server = settings_opt_get ("default_server");
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2880
+      gchar      *freeme = NULL;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2881
+      // exand @-expression
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2882
+      if (server != NULL) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2883
+        char *domain = strchr (fjid, JID_DOMAIN_SEPARATOR);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2884
+        if (domain && (domain[1] == JID_RESOURCE_SEPARATOR || domain[1] == '\0')) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2885
+          if (domain[1] == JID_RESOURCE_SEPARATOR)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2886
+            // use resource from original value
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2887
+            resource = domain + 2;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2888
+          *domain  = '\0';
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2889
+          freeme = fjid = g_strdup_printf ("%s" JID_DOMAIN_SEPARATORSTR "%s%s", fjid, server, domain + 1);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2890
+        }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2891
+      }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2892
+      if (!check_jid_syntax (fjid)) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2893
+        // jid is valid - search for buddy
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2894
+        GSList *found;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2895
+        char   *res = strchr (fjid, JID_RESOURCE_SEPARATOR);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2896
+        if (res != NULL) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2897
+          *res = '\0';
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2898
+          if (resource == NULL) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2899
+            resource = res + 1;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2900
+          }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2901
+        }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2902
+        found = roster_find (fjid, jidsearch, flags & cmdarg_roster_mask);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2903
+        if (found) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2904
+          bud = found->data;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2905
+        } else {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2906
+          error = g_strdup_printf ("Jid <%s> is not in the roster.", fjid);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2907
+        }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2908
+      } else {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2909
+        error = g_strdup_printf ("<%s> is not a valid jid.", fjid);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2910
+      }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2911
+      g_free (freeme);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2912
+    }
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2913
+  }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2914
+  // fjid should not be used anymore!
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2915
+  if (error == NULL) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2916
+    if (bud == NULL) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2917
+      // it is current buddy
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2918
+      if (!current_buddy)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2919
+        error = g_strdup ("No buddy selected.");
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2920
+      else if (buddy_gettype (BUDDATA(current_buddy)) & (flags & cmdarg_roster_mask))
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2921
+        bud = BUDDATA(current_buddy);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2922
+      else // TODO: improve message
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2923
+        error = g_strdup("Currently selected buddy is of wrong type.");
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2924
+    }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2925
+    if (error == NULL) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2926
+      if (resource == NULL) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2927
+        // no resource given - set active resource
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2928
+        if (flags & cmdarg_roster_getgroup) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2929
+          bud = buddy_getgroup (bud);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2930
+        } else if (error == NULL && (flags & cmdarg_roster_activeres)) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2931
+          resource = buddy_getactiveresource (bud);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2932
+        }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2933
+      } else {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2934
+        // check resource presence
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2935
+        GSList *resources, *p_res;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2936
+        gboolean found = FALSE;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2937
+        resources = buddy_getresources (bud);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2938
+        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
  2939
+          if (!g_strcmp0 ((char*)p_res->data, resource))
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2940
+            found = TRUE;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2941
+          g_free (p_res->data);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2942
+        }
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2943
+        g_slist_free (resources);
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2944
+        if (!found) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2945
+          error = g_strdup_printf ("No such resource <%s" JID_RESOURCE_SEPARATORSTR "%s>...", buddy_getjid(bud), resource);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2946
+        }
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2947
+      }
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2948
+    }
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2949
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2950
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2951
+  if (error) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2952
+    arg -> value.rjid.bud      = NULL;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2953
+    arg -> value.rjid.resource = NULL;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2954
+  } else {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2955
+    arg -> value.rjid.bud      = bud;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2956
+    arg -> value.rjid.resource = resource;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2957
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2958
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2959
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2960
+
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2961
+const cmdarg_type_t cmdarg_type_buddy = {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2962
+  cmdarg_check_buddy,
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2963
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2964
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2965
+};
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2966
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2967
+//
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2968
+//  fjid -> fjid
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2969
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2970
+
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2971
+// chkdata: 0 or types for current buddy checking.
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2972
+// returns: expanded fjid in value.arg.
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2973
+// defvalue: no "user@" or "user@/res".
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2974
+// freeing: sometimes g_free.
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2975
+// Recognizes as current "." and "./res".
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2976
+// Expands "user@" and "user@/res", using default_server.
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2977
+gchar *cmdarg_check_fjid (cmdarg_value_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2978
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2979
+  gchar *error = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2980
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  2981
+  if (!(error = cmdarg_check_nonspace(arg))) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2982
+    const char *fjid = arg -> value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2983
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2984
+    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
  2985
+      const char *jid;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2986
+      const cmdarg_roster_t types = (cmdarg_roster_t) (arg -> src -> userdata);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2987
+      if (!current_buddy) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2988
+        error = g_strdup_printf ("No buddy selected.");
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2989
+      } else if ((types != 0) && !(buddy_gettype(BUDDATA(current_buddy)) & (types & cmdarg_roster_mask))) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2990
+        error = g_strdup ("Current buddy is of wrong type.");
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2991
+      } else if (!(jid = buddy_getjid(BUDDATA(current_buddy)))) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2992
+        error = g_strdup_printf ("Current buddy have no jid.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2993
+      } 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
  2994
+        arg -> value.roarg = jid;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  2995
+      } else {
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2996
+        arg -> value.arg = g_strdup_printf ("%s" JID_RESOURCE_SEPARATORSTR "%s",
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  2997
+                                            jid, fjid + 2);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  2998
+        arg -> flags    |= cmdval_freeme;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  2999
       }
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3000
     } else {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3001
-      resource = NULL;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3002
+      const char *server = settings_opt_get ("default_server");
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3003
+      if (server != NULL) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3004
+        const char *end;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3005
+        if ((end = strchr (fjid, JID_DOMAIN_SEPARATOR))) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3006
+          end ++;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3007
+          if (*end == '\0' || *end == JID_RESOURCE_SEPARATOR) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3008
+            *(end - 1) = '\0';
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3009
+            arg -> value.arg = g_strdup_printf ("%s" JID_DOMAIN_SEPARATORSTR 
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3010
+                                                "%s%s", fjid, server, end);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3011
+            arg -> flags    |= cmdval_freeme;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3012
+          }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3013
+        }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3014
+      }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3015
+      if (check_jid_syntax(fjid))
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3016
+        error = g_strdup_printf ("Jid <%s> is invalid.", fjid);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3017
     }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3018
-    buddy_setactiveresource(bud, resource);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3019
-    scr_update_chat_status(TRUE);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3020
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3021
+
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3022
+  if (error) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3023
+    if (arg -> flags & cmdval_freeme)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3024
+      g_free (arg -> value.arg);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3025
+    arg -> value.arg = NULL;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3026
+  }
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3027
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3028
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3029
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3030
+const cmdarg_type_t cmdarg_type_fjid = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3031
+  cmdarg_check_fjid,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3032
+  cmdarg_free_gfree,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3033
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3034
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3035
+
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3036
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3037
+//  fjid -> bjid
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
+
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3040
+// chkdata: 0 or types for current buddy checking.
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3041
+// returns: expanded bjid in value.arg.
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3042
+// defvalue: no "user@", "user@/res" or "jid/res".
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3043
+// freeing: sometimes g_free.
78
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).
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3045
+// Expands "user@" and "user@/res", using default_server.
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3046
+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
  3047
+{
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3048
+  gchar *error = NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3049
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3050
+  if (!(error = cmdarg_check_fjid(arg))) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3051
+    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
  3052
+    if (res != NULL)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3053
+      *res = '\0';
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3054
+  }
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
+  if (error)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3057
+    arg -> value.arg = NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3058
+  return error;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3059
+}
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
+const cmdarg_type_t cmdarg_type_bjid = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3062
+  cmdarg_check_bjid,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3063
+  cmdarg_free_gfree,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3064
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3065
+};
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3066
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3067
+//
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3068
+//  string -> unsigned long
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
+
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3071
+// chkdata: 0 or maximum value.
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3072
+// returns: unsigned long in value.uint.
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3073
+gchar *cmdarg_check_uint (cmdarg_value_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3074
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3075
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3076
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3077
+  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
  3078
+    char *s = arg -> value.arg;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3079
+    char *e = s;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3080
+    unsigned long m = (unsigned long) (arg -> src -> chkdata);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3081
+    unsigned long n = strtoul (s, &e, 0);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3082
+    if (*e != '\0')
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3083
+      error = g_strdup_printf ("Invalid number \"%s\".", s);
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3084
+    else if (m > 0 && n > m)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3085
+      error = g_strdup_printf ("Value %lu is too big (max %lu).", n, m);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3086
+    else
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3087
+      arg -> value.uint = n;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3088
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3089
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3090
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3091
+    arg -> value.uint = 0;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3092
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3093
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3094
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3095
+const cmdarg_type_t cmdarg_type_uint = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3096
+  cmdarg_check_uint,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3097
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3098
+  NULL,
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
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3101
+//
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3102
+//  string -> signed long
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3103
+//
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3104
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3105
+// chkdata: 0 or maximum/minimum +/- value.
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3106
+// returns: long in value.sint.
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3107
+gchar *cmdarg_check_sint (cmdarg_value_t *arg)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3108
+{
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3109
+  gchar *error;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3110
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3111
+  if (!(error = cmdarg_check_nonspace(arg))) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3112
+    char *s = arg -> value.arg;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3113
+    char *e = s;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3114
+    long m  = (long) (arg -> src -> chkdata);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3115
+    long n  = strtol (s, &e, 0);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3116
+    if (*e != '\0')
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3117
+      error = g_strdup_printf ("Invalid number \"%s\".", s);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3118
+    else if (m > 0 && n > m)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3119
+      error = g_strdup_printf ("Value %lu is too big (max %lu).", n, m);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3120
+    else if (m > 0 && n < -m)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3121
+      error = g_strdup_printf ("Value %lu is too small (min %lu).", n, -m);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3122
+    else
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3123
+      arg -> value.sint = n;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3124
+  }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3125
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3126
+  if (error)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3127
+    arg -> value.sint = 0;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3128
+  return error;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3129
+}
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3130
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3131
+const cmdarg_type_t cmdarg_type_sint = {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3132
+  cmdarg_check_sint,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3133
+  NULL,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3134
+  NULL,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3135
+};
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3136
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3137
+//
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3138
+//  string -> set of valid chars
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3139
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3140
+
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3141
+// chkdata: string of valid characters.
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3142
+// returns: stripped of invalid characters value in value.arg.
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3143
+// Expands "*" to full set of valid characters.
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3144
+// defvalue: no invalid characters.
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3145
+// XXX:
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3146
+//  * check duplicated characters - string2flags?
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3147
+//  * sort & canonicalize - string2enum?
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3148
+gchar *cmdarg_check_charset (cmdarg_value_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3149
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3150
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3151
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3152
+  if (!(error = cmdarg_check_nonspace(arg)) && arg -> value.arg) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3153
+    const char *valid = arg -> src -> chkdata;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3154
+    if (!strcmp(arg -> value.arg, "*")) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3155
+      arg -> value.roarg = valid;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3156
+    } else {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3157
+      gchar *p = arg -> value.arg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3158
+      gchar *e = p + strlen (p);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3159
+      while (p < e) {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3160
+        if (strchr (valid, *p)) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3161
+          p ++;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3162
+        } else if (arg -> flags & cmdarg_required) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3163
+          // this is valid use of flag in checker
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3164
+          arg -> value.arg = NULL;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3165
+          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
  3166
+        } else {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3167
+          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
  3168
+          g_memmove (p, p+1, e-p-1);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3169
+          e --;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3170
+        }
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3171
+      }
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3172
+      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
  3173
+        arg -> value.arg = NULL;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3174
+    }
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3175
+  }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3176
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3177
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3178
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3179
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3180
+const cmdarg_type_t cmdarg_type_charset = {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3181
+  cmdarg_check_charset,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3182
+  NULL,
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3183
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3184
+};
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
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3187
+//  string -> enum
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3188
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3189
+
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3190
+// chkdata: array of string2enum_t structs.
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3191
+// returns: corresponding value in value.uint.
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3192
+// errvalue: terminator (NULL) entry value.
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3193
+// XXX: print list of values on required error?
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3194
+gchar *cmdarg_check_string2enum (cmdarg_value_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3195
+{
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3196
+  gchar *error = cmdarg_check_nonspace(arg);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3197
+  const string2enum_t *list;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3198
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3199
+  for (list = arg -> src -> chkdata; list -> name != NULL; list ++) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3200
+    if (error == NULL) {
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3201
+      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
  3202
+        arg -> value.uint = list -> value;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3203
+        return NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3204
+      }
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3205
+    }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3206
+  }
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3207
+
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3208
+  // error or not found
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3209
+  if (!error)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3210
+    error = g_strdup_printf ("Value \"%s\" is invalid.", arg -> value.arg);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3211
+  arg -> value.uint = list -> value;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3212
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3213
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3214
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3215
+const cmdarg_type_t cmdarg_type_string2enum = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3216
+  cmdarg_check_string2enum,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3217
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3218
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3219
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3220
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3221
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3222
+//  string -> color name
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3223
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3224
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3225
+static const string2enum_t s2e_color[] = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3226
+  { "default", -1 },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3227
+  { "black",   1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3228
+  { "red",     1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3229
+  { "green",   1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3230
+  { "yellow",  1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3231
+  { "blue",    1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3232
+  { "magenta", 1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3233
+  { "white",   1  },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3234
+  { NULL,      0  },
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
+
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3237
+// returns: color name in value.arg.
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3238
+// errvalue: NULL.
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3239
+// Recognizes "-" for reset, prefix "bright", standard names and numerical values.
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3240
+// XXX: can generate ccolor, but that needs access to ncurses internals.
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3241
+gchar *cmdarg_check_color (cmdarg_value_t *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3242
+{
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3243
+  gchar *error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3244
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3245
+  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
  3246
+    char *color = arg -> value.arg;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3247
+    // reset color
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3248
+    if (!strcmp(color, "-")) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3249
+      return NULL;
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
+    // allow "bright" prefix
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3252
+    if (!strncmp(color, "bright", 6))
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3253
+      color += 6;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3254
+    { // check names
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3255
+      const string2enum_t *list;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3256
+      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
  3257
+        if (!strcmp (list -> name, color))
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3258
+          return NULL;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3259
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3260
+    { // 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
  3261
+      char *e = color;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3262
+      long n  = strtol(color, &e, 0);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3263
+      if (*e != '\0' || n < 0 || n > 256)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3264
+        error = g_strdup_printf ("Invalid color \"%s\".", arg -> value.arg);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3265
+    }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3266
+  }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3267
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3268
+  if (error)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3269
+    arg -> value.arg = NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3270
+  return error;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3271
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3272
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3273
+const cmdarg_type_t cmdarg_type_color = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3274
+  cmdarg_check_color,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3275
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3276
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3277
+};
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3278
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3279
+//
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3280
+//  filename -> expanded local + utf8 filename
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
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3283
+// Recognizes "~/" as $HOME.
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3284
+// returns: utf8 + local fs names in value.fname.
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3285
+// freeing: always, double-gfree.
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3286
+// errvalue: NULL + NULL.
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3287
+// XXX:
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3288
+//  * Should we convert filename at all?
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3289
+//    - it needs extra "big" type in values
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3290
+//    - it is not convenient to pass to function
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3291
+//    - utf8 version needs to be always freed
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3292
+//    - saves a bit of generic code, though.
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3293
+//  * We can use g_filename_display_basename() to get name back,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3294
+//    but then we need absolute filename, and re-conversion... :(
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3295
+//    - we can provide display_basename
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3296
+//  * Can avoid g_freeing if filename does not need expansion
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3297
+gchar *cmdarg_check_filename (cmdarg_value_t *value)
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
+  gchar  *error;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3300
+  GError *err   = NULL;
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
+  if ((error = cmdarg_check_nonspace(value)))
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3303
+    return error;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3304
+
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3305
+/* make path absolute
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3306
+  gchar *name     = value -> value.arg;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3307
+  gchar *absolute = NULL;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3308
+  if (name[0] == '~' && name[1] == '/') {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3309
+    const char *home = getenv ("HOME");
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3310
+    if (home)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3311
+      name = absolute = g_strdup_printf ("%s%s", home, name + 1);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3312
+    else
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3313
+      return g_strdup ("Unable to expand filename - $HOME not set!");
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3314
+  } else if (!g_path_is_absolute (name)) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3315
+    gchar *cwd = g_get_current_dir ();
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3316
+    name = absolute = g_strdup_printf ("%s" G_DIR_SEPARATOR_S "%s",
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3317
+                                                 cwd, name);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3318
+    g_free (cwd);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3319
+  }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3320
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3321
+  value -> value.fname.display = g_filename_display_basename (name);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3322
+  g_free (absolute);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3323
+*/
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3324
+
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3325
+  value -> value.fname.utf8  = expand_filename (value -> value.arg);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3326
+  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
  3327
+                                                          -1, NULL, NULL, &err);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3328
+  if (err) {
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3329
+    g_free (value -> value.fname.utf8);
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3330
+    value -> value.fname.utf8 = NULL;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3331
+    error = g_strdup_printf ("Filename charset conversion error: %s",
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3332
+                                                                err -> message);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3333
+    g_error_free (err);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3334
+  } else {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3335
+    value -> flags |= cmdval_freeme;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3336
+  }
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3337
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3338
+  return error;
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
+void cmdarg_free_fname (cmdarg_value_t *value)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3342
+{
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3343
+  g_free (value -> value.fname.utf8);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3344
+  g_free (value -> value.fname.local);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3345
+}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3346
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3347
+const cmdarg_type_t cmdarg_type_filename = {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3348
+  cmdarg_check_color,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3349
+  cmdarg_free_fname,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3350
+  NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3351
+};
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3352
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3353
+//
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3354
+//  ISO-8601 date -> epoch
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3355
+//
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3356
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3357
+// Converts "YYYYMMDD[(.|T)HH[:]MM[:]SS[.SSS][(+|-)HH:MM]" to epoch.
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3358
+// returns: epoch in value.time.
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3359
+// errvalue: 0.
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3360
+gchar *cmdarg_check_date (cmdarg_value_t *value)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3361
+{
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3362
+  gchar  *error;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3363
+  time_t epoch = 0;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3364
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3365
+  if (!(error = cmdarg_check_nonspace (value))) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3366
+    epoch = from_iso8601 (value -> value.arg, 0);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3367
+    if (!epoch)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3368
+      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
  3369
+  }
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3370
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3371
+  value -> value.time = epoch;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3372
+  return error;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3373
+}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3374
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3375
+const cmdarg_type_t cmdarg_type_date = {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3376
+  cmdarg_check_date,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3377
+  NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3378
+  NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3379
+};
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3380
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  3381
+//
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3382
+//  Command definitions
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3383
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3384
+// This section contains definitions for built-in mcabber commands.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3385
+// If you add a definition here, that should be automatically loaded,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3386
+// you also have to add it to cmd_init().
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
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3389
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3390
+//  /roster
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3391
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3392
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3393
+// Helper routine for /roster item_{lock,unlock,toggle_lock}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3394
+// "lock" values: 1=lock 0=unlock -1=invert
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3395
+static void roster_buddylock(gpointer bud, int lock)
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
+  // Update the ROSTER_FLAG_USRLOCK flag
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3398
+  if (lock == -1)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3399
+    lock = !(buddy_getflags(bud) & ROSTER_FLAG_USRLOCK);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3400
+  buddy_setflags(bud, ROSTER_FLAG_USRLOCK, lock);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3401
+  if ((!current_buddy) || bud == BUDDATA(current_buddy)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3402
+    buddylist_build();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3403
+    update_roster = TRUE;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3404
   }
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3405
 }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3406
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3407
 //  display_and_free_note(note, winId)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3408
 // Display the note information in the winId buffer, and free note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3409
 // (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
  3410
-// display the note jid too)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3411
+// display the note jid too).
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3412
 static void display_and_free_note(struct annotation *note, const char *winId)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3413
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3414
   gchar tbuf[128];
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3415
@@ -755,41 +1488,15 @@
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3416
   g_slist_free(notes);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3417
 }
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3418
 
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3419
-static void roster_note(char *arg)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3420
+static void roster_note(gpointer bud, gboolean reset, gchar *note)
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3421
 {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3422
-  const char *bjid;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3423
-  guint type;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3424
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3425
-  if (!current_buddy)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3426
-    return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3427
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3428
-  bjid = buddy_getjid(BUDDATA(current_buddy));
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3429
-  type = buddy_gettype(BUDDATA(current_buddy));
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3430
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3431
-  if (!bjid && type == ROSTER_TYPE_SPECIAL && !arg) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3432
-    // We're in the status window (the only special buffer currently)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3433
-    // Let's display all server notes
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3434
-    display_all_annotations();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3435
-    return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3436
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3437
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3438
-  if (!bjid || (type != ROSTER_TYPE_USER &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3439
-               type != ROSTER_TYPE_ROOM &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3440
-               type != ROSTER_TYPE_AGENT)) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3441
-    scr_LogPrint(LPRINT_NORMAL, "This item can't have a note.");
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3442
-    return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3443
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3444
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3445
-  if (arg && *arg) {  // Set a note
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3446
-    gchar *msg, *notetxt;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3447
-    msg = to_utf8(arg);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3448
-    if (!strcmp(msg, "-"))
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3449
-      notetxt = NULL; // delete note
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3450
-    else
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3451
-      notetxt = msg;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3452
-    xmpp_set_storage_rosternotes(bjid, notetxt);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3453
-    g_free(msg);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3454
-  } else {      // Display a note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3455
+  const char *bjid = buddy_getjid(bud);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3456
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3457
+  if (note) // set note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3458
+    xmpp_set_storage_rosternotes(bjid, note);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3459
+  else if (reset) // delete note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3460
+    xmpp_set_storage_rosternotes(bjid, NULL);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3461
+  else { // display a note
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3462
     struct annotation *note = xmpp_get_storage_rosternotes(bjid, FALSE);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3463
     if (note) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3464
       display_and_free_note(note, bjid);
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3465
@@ -800,484 +1507,661 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3466
   }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3467
 }
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3468
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3469
-//  roster_updown(updown, nitems)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3470
-// updown: -1=up, +1=down
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3471
-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
  3472
+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
  3473
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3474
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3475
+  scmd_roster_bottom, scmd_roster_top, scmd_roster_up, scmd_roster_down,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3476
+  scmd_roster_group_prev, scmd_roster_group_next,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3477
+  scmd_roster_alternate,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3478
+  scmd_roster_unread_first, scmd_roster_unread_next,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3479
+  scmd_roster_search,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3480
+  scmd_roster_display,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3481
+  scmd_roster_hide_offline, scmd_roster_show_offline, scmd_roster_toggle_offline,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3482
+  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
  3483
+  scmd_roster_note, scmd_roster_notes,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3484
+  scmd_roster_resource_lock, scmd_roster_resource_unlock,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3485
+  scmd_roster_hide, scmd_roster_show, scmd_roster_toggle,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3486
+} scmd_roster_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3487
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3488
+typedef enum {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3489
+  pos_roster_scmd         = 0,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3490
+  pos_roster_up_n         = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3491
+  pos_roster_down_n       = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3492
+  pos_roster_search_name  = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3493
+  pos_roster_display_mask = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3494
+  pos_roster_itemlock_jid = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3495
+  pos_roster_note_jid     = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3496
+  pos_roster_note_rst     = 2,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3497
+  pos_roster_note_text    = 3,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3498
+  pos_roster_reslock_jid  = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3499
+} pos_roster_t;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3500
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3501
+#define SCMD_ROSTER(NAME, ARGS...) \
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3502
+    { #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
  3503
+static cmdopts_t def_roster = {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3504
+  "roster",
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3505
+  cmd_default,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3506
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3507
+  do_roster,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3508
+  NULL,
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  3509
+  (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
  3510
+  (cmdopts_t[25]){
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3511
+    SCMD_ROSTER(bottom, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3512
+    SCMD_ROSTER(top,    NULL),
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3513
+    SCMD_ROSTER(up,   (cmdarg_t[2]){{"n", pos_roster_up_n, cmdarg_chreq, "1", &cmdarg_type_uint, (gpointer)0},{NULL}}),
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3514
+    SCMD_ROSTER(down, (cmdarg_t[2]){{"n", pos_roster_down_n, cmdarg_chreq, "1", &cmdarg_type_uint (gpointer)0},{NULL}}),
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3515
+    SCMD_ROSTER(group_prev, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3516
+    SCMD_ROSTER(group_next, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3517
+    SCMD_ROSTER(alternate, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3518
+    SCMD_ROSTER(unread_first, NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3519
+    SCMD_ROSTER(unread_next,  NULL),
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3520
+    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
  3521
+    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
  3522
+    SCMD_ROSTER(hide_offline,   NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3523
+    SCMD_ROSTER(show_offline,   NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3524
+    SCMD_ROSTER(toggle_offline, NULL),
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3525
+    SCMD_ROSTER(item_lock,        (cmdarg_t[2]){{"jid", pos_roster_itemlock_jid, cmdarg_chreq, ".", &cmdarg_type_buddy, (gpointer)cmdarg_roster_entity},{NULL}}),
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3526
+    SCMD_ROSTER(item_unlock,      (cmdarg_t[2]){{"jid", pos_roster_itemlock_jid, cmdarg_chreq, ".", &cmdarg_type_buddy, (gpointer)cmdarg_roster_entity},{NULL}}),
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3527
+    SCMD_ROSTER(item_toggle_lock, (cmdarg_t[2]){{"jid", pos_roster_itemlock_jid, cmdarg_chreq, ".", &cmdarg_type_buddy, (gpointer)cmdarg_roster_entity},{NULL}}),
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3528
+    { "note", cmd_default, NULL, NULL,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3529
+      (cmdopt_t[3]){
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3530
+        {'r', "reset", {"reset", pos_roster_note_rst, cmdarg_switch, NULL, NULL, NULL}},
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3531
+        {'j', "jid",   {"jid",   pos_roster_note_jid, cmdarg_chreq, ".", &cmdarg_type_buddy, (gpointer)cmdarg_roster_entity}},
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3532
+        {0}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3533
+      },
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3534
+      (cmdarg_t[2]){
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3535
+        {"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
  3536
+        {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3537
+      },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3538
+      NULL, (gpointer)scmd_roster_note
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3539
+    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3540
+    SCMD_ROSTER(notes, NULL),
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3541
+    SCMD_ROSTER(resource_lock,   (cmdarg_t[2]){{"resource|fjid", pos_roster_reslock_jid, cmdarg_chreq, NULL, &cmdarg_type_buddy, (gpointer)cmdarg_roster_buddy},{NULL}}),
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3542
+    SCMD_ROSTER(resource_unlock, (cmdarg_t[2]){{"jid", pos_roster_reslock_jid, cmdarg_chreq, ".", &cmdarg_type_buddy, (gpointer)cmdarg_roster_buddy},{NULL}}),
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3543
+    SCMD_ROSTER(hide,   NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3544
+    SCMD_ROSTER(show,   NULL),
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3545
+    SCMD_ROSTER(toggle, NULL),
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3546
+    {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3547
+  },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3548
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3549
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3550
+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
  3551
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3552
-  int nbitems;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3553
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3554
-  if (!nitems || !*nitems)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3555
-    nbitems = 1;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3556
-  else
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3557
-    nbitems = strtol(nitems, NULL, 10);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3558
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3559
-  if (nbitems > 0)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3560
-    scr_roster_up_down(updown, nbitems);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3561
-}
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3562
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3563
-/* Commands callback functions */
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3564
-/* All these do_*() functions will be called with a "arg" parameter */
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3565
-/* (with arg not null)                                              */
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3566
-
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3567
-static void do_roster(char *arg)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3568
-{
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3569
-  char **paramlst;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3570
-  char *subcmd;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3571
-
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3572
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3573
-  subcmd = *paramlst;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3574
-  arg = *(paramlst+1);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3575
-
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3576
-  if (!subcmd || !*subcmd) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3577
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3578
-    free_arg_lst(paramlst);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3579
-    return;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3580
-  }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3581
-
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3582
-  if (!strcasecmp(subcmd, "top")) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3583
+  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
  3584
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3585
+  if (subcmd == scmd_roster_bottom) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3586
+    scr_roster_bottom();
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3587
+    update_roster = TRUE;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3588
+  } else if (subcmd == scmd_roster_top) {
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3589
     scr_roster_top();
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3590
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3591
-  } else if (!strcasecmp(subcmd, "bottom")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3592
-    scr_roster_bottom();
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3593
+  } else if (subcmd == scmd_roster_up) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3594
+    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
  3595
+  } else if (subcmd == scmd_roster_down) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3596
+    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
  3597
+  } else if (subcmd == scmd_roster_group_prev) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3598
+    scr_roster_prev_group();
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3599
+  } else if (subcmd == scmd_roster_group_next) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3600
+    scr_roster_next_group();
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3601
+  } else if (subcmd == scmd_roster_alternate) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3602
+    scr_roster_jump_alternate();
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3603
+  } else if (subcmd == scmd_roster_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);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3605
+  } else if (subcmd == scmd_roster_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);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3607
+  } else if (subcmd == scmd_roster_search) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3608
+    scr_roster_search(values[pos_roster_search_name].value.arg);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3609
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3610
-  } else if (!strcasecmp(subcmd, "hide")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3611
-    scr_roster_visibility(0);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3612
-  } else if (!strcasecmp(subcmd, "show")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3613
-    scr_roster_visibility(1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3614
-  } else if (!strcasecmp(subcmd, "toggle")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3615
-    scr_roster_visibility(-1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3616
-  } else if (!strcasecmp(subcmd, "hide_offline")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3617
+  } else if (subcmd == scmd_roster_display) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3618
+    scr_roster_display(values[pos_roster_display_mask].value.arg);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3619
+  } else if (subcmd == scmd_roster_hide_offline) {
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3620
     buddylist_set_hide_offline_buddies(TRUE);
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3621
-    if (current_buddy)
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3622
+    if (current_buddy) // XXX
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3623
       buddylist_build();
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3624
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3625
-  } else if (!strcasecmp(subcmd, "show_offline")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3626
+  } else if (subcmd == scmd_roster_show_offline) {
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3627
     buddylist_set_hide_offline_buddies(FALSE);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3628
     buddylist_build();
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3629
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3630
-  } else if (!strcasecmp(subcmd, "toggle_offline")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3631
+  } else if (subcmd == scmd_roster_toggle_offline) {
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3632
     buddylist_set_hide_offline_buddies(-1);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3633
     buddylist_build();
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3634
     update_roster = TRUE;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3635
-  } else if (!strcasecmp(subcmd, "display")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3636
-    scr_roster_display(arg);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3637
-  } else if (!strcasecmp(subcmd, "item_lock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3638
-    roster_buddylock(arg, 1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3639
-  } else if (!strcasecmp(subcmd, "item_unlock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3640
-    roster_buddylock(arg, 0);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3641
-  } else if (!strcasecmp(subcmd, "item_toggle_lock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3642
-    roster_buddylock(arg, -1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3643
-  } else if (!strcasecmp(subcmd, "unread_first")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3644
-    scr_roster_unread_message(0);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3645
-  } else if (!strcasecmp(subcmd, "unread_next")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3646
-    scr_roster_unread_message(1);
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3647
-  } else if (!strcasecmp(subcmd, "alternate")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3648
-    scr_roster_jump_alternate();
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3649
-  } else if (!strncasecmp(subcmd, "search", 6)) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3650
-    strip_arg_special_chars(arg);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3651
-    if (!arg || !*arg) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3652
-      scr_LogPrint(LPRINT_NORMAL, "What name or JID are you looking for?");
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3653
-      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
  3654
-      return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3655
-    }
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3656
-    scr_roster_search(arg);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3657
-    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
  3658
-  } else if (!strcasecmp(subcmd, "up")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3659
-    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
  3660
-  } else if (!strcasecmp(subcmd, "down")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3661
-    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
  3662
-  } else if (!strcasecmp(subcmd, "group_prev")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3663
-    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
  3664
-  } else if (!strcasecmp(subcmd, "group_next")) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3665
-    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
  3666
-  } else if (!strcasecmp(subcmd, "note")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3667
-    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
  3668
-  } else if (!strcasecmp(subcmd, "resource_lock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3669
-    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
  3670
-  } else if (!strcasecmp(subcmd, "resource_unlock")) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3671
-    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
  3672
-  } else
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3673
-    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
  3674
-  free_arg_lst(paramlst);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3675
+  } else if (subcmd == scmd_roster_item_lock) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3676
+    roster_buddylock(values[pos_roster_itemlock_jid].value.rjid.bud, 1);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3677
+  } else if (subcmd == scmd_roster_item_unlock) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3678
+    roster_buddylock(values[pos_roster_itemlock_jid].value.rjid.bud, 0);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3679
+  } else if (subcmd == scmd_roster_item_toggle_lock) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3680
+    roster_buddylock(values[pos_roster_itemlock_jid].value.rjid.bud, -1);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3681
+  } else if (subcmd == scmd_roster_note) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3682
+    roster_note(values[pos_roster_note_jid].value.rjid.bud,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3683
+                values[pos_roster_note_rst].value.swc,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3684
+                values[pos_roster_note_text].value.arg);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3685
+  } else if (subcmd == scmd_roster_notes) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3686
+    display_all_annotations();
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3687
+  } else if (subcmd == scmd_roster_resource_lock) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3688
+    buddy_setactiveresource(values[pos_roster_reslock_jid].value.rjid.bud,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3689
+                            values[pos_roster_reslock_jid].value.rjid.resource);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3690
+    scr_update_chat_status(TRUE);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3691
+  } else if (subcmd == scmd_roster_resource_unlock) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3692
+    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
  3693
+    scr_update_chat_status(TRUE);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3694
+  } else if (subcmd == scmd_roster_hide) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3695
+    scr_roster_visibility(0);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3696
+  } else if (subcmd == scmd_roster_show) {
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3697
+    scr_roster_visibility(1);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3698
+  } else { // scmd_roster_toggle
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  3699
+    scr_roster_visibility(-1);
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3700
+  }
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3701
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3702
+  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
  3703
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  3704
 
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3705
-void do_color(char *arg)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3706
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3707
+//  /color
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3708
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3709
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3710
+// custom argument types
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3711
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3712
+// statusmask + "clear"
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3713
+// Needs status char set in chkdata.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3714
+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
  3715
 {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3716
-  char **paramlst;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3717
-  char *subcmd;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3718
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3719
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3720
-  subcmd = *paramlst;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3721
-  arg = *(paramlst+1);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3722
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3723
-  if (!subcmd || !*subcmd) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3724
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3725
-    free_arg_lst(paramlst);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3726
-    return;
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3727
-  }
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3728
-
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3729
-  if (!strcasecmp(subcmd, "roster")) {
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3730
-    char *status, *wildcard, *color;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3731
-    char **arglist = split_arg(arg, 3, 0);
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3732
-
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3733
-    status = *arglist;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3734
-    wildcard = to_utf8(arglist[1]);
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3735
-    color = arglist[2];
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3736
-
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3737
-    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
  3738
+  if (!g_strcmp0 (arg -> value.arg, "clear"))
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3739
+    return NULL;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3740
+  else
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3741
+    return cmdarg_check_charset (arg);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3742
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3743
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3744
+static const cmdarg_type_t cmdarg_type_color_statusmask = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3745
+  cmdarg_check_color_statusmask,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3746
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3747
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3748
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3749
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3750
+// bjid + "*"
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3751
+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
  3752
+{
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3753
+  if (!g_strcmp0 (arg -> value.arg, "*"))
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3754
+    return NULL;
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3755
+  else
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3756
+    return cmdarg_check_bjid (arg);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3757
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3758
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3759
+static const cmdarg_type_t cmdarg_type_color_roomjid = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3760
+  cmdarg_check_color_roomjid,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3761
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3762
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3763
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3764
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3765
+// 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
  3766
+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
  3767
+  cmdarg_check_nonspace,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3768
+  NULL,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3769
+  NULL,
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3770
+};
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3771
+
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3772
+// TODO: completion, based on current room nicks
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3773
+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
  3774
+  cmdarg_check_nonspace,
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3775
+  NULL,
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3776
+  NULL,
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3777
+};
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3778
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3779
+// command
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3780
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3781
+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
  3782
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3783
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3784
+  scmd_color_roster,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3785
+  scmd_color_mucnick,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3786
+  scmd_color_muc,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3787
+} scmd_color_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3788
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3789
+typedef enum {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3790
+  pos_color_scmd          = 0,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3791
+  pos_color_roster_status = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3792
+  pos_color_roster_jid    = 2,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3793
+  pos_color_roster_color  = 3,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3794
+  pos_color_muc_room      = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3795
+  pos_color_muc_mode      = 2,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3796
+  pos_color_nick_nick     = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3797
+  pos_color_nick_color    = 2,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3798
+} pos_color_t;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3799
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3800
+static const string2enum_t s2e_color_muc[] = {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3801
+  { "on",     MC_ALL    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3802
+  { "off",    MC_OFF    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3803
+  { "preset", MC_PRESET },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3804
+  { "-",      MC_REMOVE },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3805
+  { NULL,     0         },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3806
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3807
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3808
+static cmdopts_t def_color = {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3809
+  "color",
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3810
+  cmd_safe,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3811
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3812
+  do_color,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3813
+  NULL,
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  3814
+  (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
  3815
+  (cmdopts_t[4]){
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3816
+    {"roster", cmd_default, NULL, NULL, NULL, (cmdarg_t[4]){
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  3817
+        { "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
  3818
+        { "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
  3819
+        { "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
  3820
+        {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3821
+      }, NULL, (gpointer)scmd_color_roster},
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3822
+    {"muc", cmd_default, NULL, NULL, NULL, (cmdarg_t[3]){
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  3823
+        { "roomjid",         pos_color_muc_room, cmdarg_chreq, NULL, &cmdarg_type_color_roomjid, (gpointer)cmdarg_roster_room },
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3824
+        { "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
  3825
+        {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3826
+      }, NULL, (gpointer)scmd_color_muc},
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3827
+    {"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
  3828
+        { "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
  3829
+        { "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
  3830
+        {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3831
+      }, NULL, (gpointer)scmd_color_mucnick},
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3832
+    {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3833
+  },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3834
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3835
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3836
+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
  3837
+{
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3838
+  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
  3839
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3840
+  if (subcmd == scmd_color_roster) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3841
+    const gchar *status   = values[pos_color_roster_status].value.arg;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3842
+    const gchar *wildcard = values[pos_color_roster_jid].value.arg;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3843
+    const gchar *color    = values[pos_color_roster_color].value.arg;
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3844
+    if (!strcmp(status, "clear")) { // Not a color command, clear all
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3845
       scr_roster_clear_color();
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3846
       update_roster = TRUE;
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3847
     } else {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3848
-      if (!status || !*status || !wildcard || !*wildcard || !color || !*color) {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3849
-        scr_LogPrint(LPRINT_NORMAL, "Missing argument");
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  3850
+      if ((!wildcard) || (!color)) {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3851
+        // freaking "clear" :(
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3852
+        return g_strdup ("Missing argument.");
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3853
       } else {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3854
         update_roster = scr_roster_color(status, wildcard, color) ||
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3855
                         update_roster;
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3856
       }
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3857
     }
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3858
-    free_arg_lst(arglist);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3859
-    g_free(wildcard);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3860
-  } else if (!strcasecmp(subcmd, "muc")) {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3861
-    char **arglist = split_arg(arg, 2, 0);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3862
-    char *free_muc = to_utf8(*arglist);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3863
-    const char *muc = free_muc, *mode = arglist[1];
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3864
-    if (!muc || !*muc)
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3865
-      scr_LogPrint(LPRINT_NORMAL, "What MUC?");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3866
-    else {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3867
-      if (!strcmp(muc, "."))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3868
-        if (!(muc = CURRENT_JID))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3869
-          scr_LogPrint(LPRINT_NORMAL, "No JID selected");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3870
-      if (muc) {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3871
-        if (check_jid_syntax(muc) && strcmp(muc, "*"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3872
-          scr_LogPrint(LPRINT_NORMAL, "Not a JID");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3873
-        else {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3874
-          if (!mode || !*mode || !strcasecmp(mode, "on"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3875
-            scr_muc_color(muc, MC_ALL);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3876
-          else if (!strcasecmp(mode, "preset"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3877
-            scr_muc_color(muc, MC_PRESET);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3878
-          else if (!strcasecmp(mode, "off"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3879
-            scr_muc_color(muc, MC_OFF);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3880
-          else if (!strcmp(mode, "-"))
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3881
-            scr_muc_color(muc, MC_REMOVE);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3882
-          else
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3883
-            scr_LogPrint(LPRINT_NORMAL, "Unknown coloring mode");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3884
-        }
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3885
-      }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3886
-    }
67
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3887
-    free_arg_lst(arglist);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3888
-    g_free(free_muc);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3889
-  } else if (!strcasecmp(subcmd, "mucnick")) {
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3890
-    char **arglist = split_arg(arg, 2, 0);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3891
-    const char *nick = *arglist, *color = arglist[1];
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3892
-    if (!nick || !*nick || !color || !*color)
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3893
-      scr_LogPrint(LPRINT_NORMAL, "Missing argument");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3894
-    else
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3895
-      scr_muc_nick_color(nick, color);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3896
-    free_arg_lst(arglist);
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3897
-  } else
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3898
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
a2f3afbc4000 [cmdopts] convert /color
Myhailo Danylenko <isbear@ukrpost.net>
parents: 66
diff changeset
  3899
-  free_arg_lst(paramlst);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3900
+  } else if (subcmd == scmd_color_muc) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3901
+    scr_muc_color ( values[pos_color_muc_room].value.arg,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3902
+                    values[pos_color_muc_mode].value.uint );
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3903
+  } else { // scmd_color_mucnick
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3904
+    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
  3905
+                        values[pos_color_nick_color].value.arg );
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3906
+  }
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3907
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3908
+  return NULL;
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3909
 }
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  3910
 
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  3911
-//  cmd_setstatus(recipient, arg)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3912
-// 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
  3913
-// - 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
  3914
-// - 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
  3915
-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
  3916
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3917
+//  /status
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3918
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3919
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3920
+// custom type
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3921
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3922
+// needs corresponding s2e in chkdata
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3923
+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
  3924
 {
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3925
-  char **paramlst;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3926
-  char *status;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3927
-  char *msg;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3928
-  enum imstatus st;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3929
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3930
-  if (!xmpp_is_online())
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3931
-    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
  3932
-  // 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
  3933
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3934
-  // 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
  3935
-  // (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
  3936
-  // unexpected...
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3937
-  if (!recipient)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3938
-    scr_check_auto_away(TRUE);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3939
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3940
-  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
  3941
-  status = *paramlst;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3942
-  msg = *(paramlst+1);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3943
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3944
-  if (!status) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3945
-    free_arg_lst(paramlst);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3946
-    return;
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  3947
+  if (!g_strcmp0(arg -> value.arg, "message")) {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3948
+    arg -> value.uint = xmpp_getstatus(); // Preserve current status
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3949
+    return NULL;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3950
   }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3951
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3952
-  if      (!strcasecmp(status, IMSTATUS_OFFLINE))       st = offline;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3953
-  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
  3954
-  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
  3955
-  else if (!strcasecmp(status, IMSTATUS_AWAY))          st = away;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3956
+  return cmdarg_check_string2enum (arg);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3957
+}
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3958
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3959
+static const cmdarg_type_t cmdarg_type_status_status = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3960
+  cmdarg_check_status_status,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3961
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3962
+  NULL,
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3963
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3964
+
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  3965
+// command
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  3966
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  3967
+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
  3968
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3969
+typedef enum {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3970
+  pos_status_status  = 0,
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  3971
+  pos_status_jid     = 1,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  3972
+  pos_status_message = 2,
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  3973
+} pos_status_t;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3974
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3975
+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
  3976
+  { "away",      away        },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3977
+  { "offline",   offline     },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3978
+  { "online",    available   },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3979
+  { "avail",     available   },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3980
+  { "notavail",  notavail    },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3981
+  { "dnd",       dontdisturb },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  3982
+  { "free",      freeforchat },
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3983
 #ifdef WITH_DEPRECATED_STATUS_INVISIBLE
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3984
-  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
  3985
+  { "invisible", invisible   },
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3986
 #endif
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3987
-  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
  3988
-  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
  3989
-  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
  3990
-  else if (!strcasecmp(status, "message")) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3991
-    if (!msg || !*msg) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3992
-      // 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
  3993
-      scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3994
-      free_arg_lst(paramlst);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3995
-      return;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3996
-    }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3997
-    st = xmpp_getstatus();  // Preserve current status
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3998
-  } else {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  3999
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized status!");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4000
-    free_arg_lst(paramlst);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4001
-    return;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4002
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4003
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4004
-  // Use provided message
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4005
-  if (msg && !*msg) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4006
-    msg = NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4007
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4008
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4009
-  // 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
  4010
-  if (recipient && !msg)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4011
-    msg = "";
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4012
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4013
-  xmpp_setstatus(st, recipient, msg, FALSE);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4014
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4015
-  free_arg_lst(paramlst);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4016
-}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4017
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4018
-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
  4019
+  // XXX ugly
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4020
+  { "show",      imstatus_size},
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4021
+  { NULL,        0           },
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4022
+};
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4023
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4024
+static cmdopts_t def_status = {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4025
+  "status",
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4026
+  cmd_safe,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4027
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4028
+  do_status,
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4029
+  (cmdopt_t[2]){
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4030
+    { 't', "to",
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4031
+           { "jid", pos_status_jid, cmdarg_default, NULL, &cmdarg_type_fjid }, (gpointer)cmdarg_roster_entity },
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4032
+    {0}
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4033
+  },
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4034
+  (cmdarg_t[3]){
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4035
+    { "status",  pos_status_status,  cmdarg_chreq, "show",
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4036
+                 &cmdarg_type_status_status, (gpointer)s2e_status2 },
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4037
+    { "message", pos_status_message, cmdarg_eol,   NULL,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4038
+                 &cmdarg_type_nonspace },
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4039
+    {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4040
+  },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4041
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4042
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4043
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4044
+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
  4045
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4046
-  if (!*arg) {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4047
+  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
  4048
     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
  4049
     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
  4050
                  imstatus2char[xmpp_getstatus()],
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4051
                  (sm ? sm : ""));
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4052
-    return;
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4053
+  } else {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4054
+    if (!xmpp_is_online())
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4055
+      scr_LogPrint(LPRINT_NORMAL, "You are currently not connected...");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4056
+    scr_check_auto_away(TRUE);
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4057
+    xmpp_setstatus(values[pos_status_status].value.uint,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4058
+                   values[pos_status_jid].value.arg,
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4059
+                   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
  4060
   }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4061
-  arg = to_utf8(arg);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4062
-  cmd_setstatus(NULL, arg);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4063
-  g_free(arg);
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4064
+  return NULL;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4065
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4066
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4067
-static void do_status_to(char *arg)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4068
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4069
+//  /status_to
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4070
+//
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4071
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4072
+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
  4073
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4074
+typedef enum {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4075
+  pos_statusto_jid     = 0,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4076
+  pos_statusto_status  = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4077
+  pos_statusto_message = 2,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4078
+} pos_statusto_t;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4079
+
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4080
+// no "show" here
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4081
+static const string2enum_t s2e_status[] = {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4082
+  { "away",      away        },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4083
+  { "offline",   offline     },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4084
+  { "online",    available   },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4085
+  { "avail",     available   },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4086
+  { "notavail",  notavail    },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4087
+  { "dnd",       dontdisturb },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4088
+  { "free",      freeforchat },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4089
+#ifdef WITH_DEPRECATED_STATUS_INVISIBLE
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4090
+  { "invisible", invisible   },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4091
+#endif
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4092
+  { NULL,        0           },
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4093
+};
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4094
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4095
+static cmdopts_t def_status_to = {
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4096
+  "status_to",
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4097
+  cmd_default,
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4098
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4099
+  do_status_to,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4100
+  NULL,
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4101
+  (cmdarg_t[4]){
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4102
+    {"jid",     pos_statusto_jid,     cmdarg_chreq, NULL, &cmdarg_type_fjid, (gpointer)cmdarg_roster_entity},
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4103
+    {"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
  4104
+    {"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
  4105
+    {NULL}
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4106
+  },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4107
+  NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4108
+};
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4109
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4110
+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
  4111
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4112
-  char **paramlst;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4113
-  char *fjid, *st, *msg;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4114
-  char *jid_utf8 = NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4115
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4116
-  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
  4117
-  fjid = *paramlst;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4118
-  st = *(paramlst+1);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4119
-  msg = *(paramlst+2);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4120
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4121
-  if (!fjid || !st) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4122
-    scr_LogPrint(LPRINT_NORMAL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4123
-                 "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
  4124
-    free_arg_lst(paramlst);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4125
-    return;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4126
+  const char *fjid, *stname, *msg;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4127
+  enum imstatus st;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4128
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4129
+  fjid = values[pos_statusto_jid].value.arg;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4130
+  st   = values[pos_statusto_status].value.uint;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4131
+  msg  = values[pos_statusto_message].value.arg;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4132
+
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4133
+  { // get status name
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4134
+    const string2enum_t *list;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4135
+    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
  4136
+      if (list -> value == st) {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4137
+        stname = list -> name;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4138
+        break;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4139
+      }
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4140
   }
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
-  // Allow things like /status_to "" away
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4143
-  if (!*fjid || !strcmp(fjid, "."))
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4144
-    fjid = NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4145
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4146
-  if (fjid) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4147
-    // The JID has been specified.  Quick check...
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4148
-    if (check_jid_syntax(fjid)) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4149
-      scr_LogPrint(LPRINT_NORMAL|LPRINT_NOTUTF8,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4150
-                   "<%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
  4151
-      fjid = NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4152
-    } else {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4153
-      // Convert jid to lowercase
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4154
-      char *p = fjid;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4155
-      for ( ; *p && *p != JID_RESOURCE_SEPARATOR; p++)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4156
-        *p = tolower(*p);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4157
-      fjid = jid_utf8 = to_utf8(fjid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4158
-    }
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  4159
+  // prevent default status message
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4160
+  msg = msg ? msg : "";
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4161
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4162
+  scr_log_print (LPRINT_LOGNORM, 
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4163
+                 "Sending to <%s> /status %s %s", fjid, stname, msg);
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4164
+  if (!xmpp_is_online())
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4165
+    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
  4166
+  xmpp_setstatus(st, fjid, msg, FALSE);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4167
+
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  4168
+  return NULL;
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4169
+}
78
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
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4172
+//  /add
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4173
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4174
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4175
+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
  4176
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4177
+typedef enum {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4178
+  pos_add_jid  = 0,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4179
+  pos_add_name = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4180
+} pos_add_t;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4181
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4182
+static cmdopts_t def_add = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4183
+  "add",
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4184
+  cmd_default,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4185
+  cmd_check_online,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4186
+  do_add,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4187
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4188
+  (cmdarg_t[3]){
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4189
+    { "jid",  pos_add_jid,  cmdarg_chreq,   ".",  &cmdarg_type_bjid, (gpointer)cmdarg_roster_entity },
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4190
+    { "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
  4191
+    {NULL}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4192
+  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4193
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4194
+};
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4195
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4196
+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
  4197
+{
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4198
+  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
  4199
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4200
+  // XXX
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4201
+  //mc_strtolower(jid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4202
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4203
+  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
  4204
+  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
  4205
+                 jid);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4206
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4207
+  return NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4208
+}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4209
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4210
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4211
+//  /del
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4212
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4213
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4214
+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
  4215
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4216
+typedef enum {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4217
+  pos_del_jid    = 0,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4218
+  pos_del_dryrun = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4219
+} pos_del_t;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4220
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4221
+static cmdopts_t def_del = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4222
+  "del",
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4223
+  cmd_default,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4224
+  cmd_check_online,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4225
+  do_del,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4226
+  (cmdopt_t[2]){
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4227
+    { 'n', "dryrun",
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4228
+      { "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
  4229
+    {0}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4230
+  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4231
+  (cmdarg_t[2]){
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4232
+    { "jid", pos_del_jid, cmdarg_chreq, ".", &cmdarg_type_buddy, (gpointer)cmdarg_roster_entity },
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4233
+    {NULL}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4234
+  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4235
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4236
+};
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4237
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4238
+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
  4239
+{
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4240
+  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
  4241
+  const char *jid  = buddy_getjid (buddy);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4242
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4243
+  if (buddy_gettype(buddy) & ROSTER_TYPE_ROOM)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4244
+    // This is a chatroom
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4245
+    if (buddy_getinsideroom(buddy))
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4246
+      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
  4247
+                              jid);
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4248
+
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4249
+  scr_log_print (LPRINT_LOGNORM, "Removing <%s>...", jid);
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4250
+
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4251
+  if (values[pos_del_dryrun].value.swc) {
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4252
+    scr_log_print (LPRINT_LOGNORM, "... not really.");
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4253
   } else {
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4254
-    // Add the current buddy
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4255
-    if (current_buddy)
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4256
-      fjid = (char*)buddy_getjid(BUDDATA(current_buddy));
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4257
-    if (!fjid)
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4258
-      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
  4259
+    // Close the buffer
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4260
+    scr_buffer_purge(1, jid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4261
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4262
+    xmpp_delbuddy(jid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4263
+    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
  4264
   }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4265
 
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4266
-  if (fjid) {
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4267
-    char *cmdline;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4268
-    if (!msg)
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4269
-      msg = "";
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4270
-    msg = to_utf8(msg);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4271
-    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
  4272
-    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
  4273
-    cmd_setstatus(fjid, cmdline);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4274
-    g_free(msg);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4275
-    g_free(cmdline);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4276
-    g_free(jid_utf8);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4277
-  }
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4278
-  free_arg_lst(paramlst);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4279
+  return NULL;
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4280
 }
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4281
 
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4282
-static void do_add(char *arg)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4283
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4284
+//  /group
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4285
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4286
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4287
+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
  4288
 {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4289
-  char **paramlst;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4290
-  char *id, *nick;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4291
-  char *jid_utf8 = NULL;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4292
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4293
-  if (!xmpp_is_online()) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4294
-    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
  4295
-    return;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4296
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4297
-
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4298
-  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
  4299
-  id = *paramlst;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4300
-  nick = *(paramlst+1);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4301
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4302
-  if (!id)
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4303
-    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
  4304
-  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
  4305
-    id = NULL;
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4306
-
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4307
-  if (id) {
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4308
-    // 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
  4309
-    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
  4310
-      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
  4311
-                   "<%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
  4312
-      id = NULL;
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4313
-    } else {
69
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4314
-      mc_strtolower(id);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  4315
-      id = jid_utf8 = to_utf8(id);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4316
-    }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4317
-  } else {
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4318
-    // Add the current buddy
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4319
-    if (current_buddy)
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4320
-      id = (char*)buddy_getjid(BUDDATA(current_buddy));
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4321
-    if (!id)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4322
-      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
  4323
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4324
-
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4325
-  if (nick)
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4326
-    nick = to_utf8(nick);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4327
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4328
-  if (id) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4329
-    // 2nd parameter = optional nickname
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4330
-    xmpp_addbuddy(id, nick, NULL);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4331
-    scr_LogPrint(LPRINT_LOGNORM, "Sent presence notification request to <%s>.",
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4332
-                 id);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4333
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4334
-
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4335
-  g_free(jid_utf8);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4336
-  g_free(nick);
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4337
-  free_arg_lst(paramlst);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4338
-}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4339
-
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4340
-static void do_del(char *arg)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4341
-{
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4342
-  const char *bjid;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4343
-
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4344
-  if (*arg) {
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4345
-    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
  4346
-                 "the currently-selected buddy will be deleted.");
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4347
-    return;
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  4348
-  }
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4349
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4350
-  if (!current_buddy)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4351
-    return;
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4352
-  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
  4353
-  if (!bjid)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4354
-    return;
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4355
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4356
-  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
  4357
-    // 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
  4358
-    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
  4359
-      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
  4360
-      return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4361
-    }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4362
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4363
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4364
-  // 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
  4365
-  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
  4366
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4367
-  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
  4368
-  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
  4369
-  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
  4370
-}
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4371
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4372
-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
  4373
-{
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4374
-  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
  4375
-  guint leave_buddywindow;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4376
-  char **paramlst;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4377
-  char *subcmd;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4378
-  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
  4379
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4380
-  if (!*arg) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4381
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4382
-    return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4383
-  }
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4384
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4385
-  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
  4386
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4387
-
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4388
-  paramlst = split_arg(arg, 2, 0); // subcmd, [arg]
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4389
-  subcmd = *paramlst;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4390
-  arg = *(paramlst+1);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4391
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4392
-  if (!subcmd || !*subcmd)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4393
-    goto do_group_return;   // Should not happen
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4394
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4395
-  if (!strcasecmp(subcmd, "expand") || !strcasecmp(subcmd, "unfold"))
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4396
-    group_state = group_unfold;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4397
-  else if (!strcasecmp(subcmd, "shrink") || !strcasecmp(subcmd, "fold"))
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4398
-    group_state = group_fold;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4399
-  else if (!strcasecmp(subcmd, "toggle"))
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4400
-    group_state = group_toggle;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4401
-  else {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4402
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4403
-    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
  4404
-  }
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4405
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4406
-  if (arg && *arg) {
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4407
-    GSList *roster_elt;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4408
-    char *group_utf8 = to_utf8(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4409
-    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
  4410
-    g_free(group_utf8);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4411
-    if (roster_elt)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4412
-      group = buddy_getgroup(roster_elt->data);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4413
-  } else {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4414
-    group = buddy_getgroup(BUDDATA(current_buddy));
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4415
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4416
-  if (!group) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4417
-    scr_LogPrint(LPRINT_NORMAL, "Group not found.");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4418
-    goto do_group_return;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4419
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4420
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4421
   // 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
  4422
   // 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
  4423
   // chat window.
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4424
-  leave_buddywindow = (group != BUDDATA(current_buddy) &&
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4425
-                       group == buddy_getgroup(BUDDATA(current_buddy)));
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4426
-
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4427
-  if (!(buddy_gettype(group) & ROSTER_TYPE_GROUP)) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4428
-    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
  4429
-    goto do_group_return;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4430
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4431
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4432
-  if (group_state != group_unfold && leave_buddywindow)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4433
+  if (action != scmd_group_unfold &&
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4434
+      ((!current_buddy) ||
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4435
+       (group != BUDDATA(current_buddy) &&
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4436
+        group == buddy_getgroup(BUDDATA(current_buddy)))))
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4437
     scr_roster_prev_group();
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4438
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4439
-  buddy_hide_group(group, group_state);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4440
+  buddy_hide_group(group, action);
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
   buddylist_build();
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4443
   update_roster = TRUE;
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  4444
-
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4445
-do_group_return:
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4446
-  free_arg_lst(paramlst);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4447
 }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4448
 
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4449
+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
  4450
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4451
+typedef enum {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4452
+  pos_group_group  = 0,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4453
+  pos_group_action = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4454
+} pos_group_t;
78
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
+static const string2enum_t s2e_group_scmd[] = {
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4457
+  { "expand", scmd_group_unfold },
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4458
+  { "unfold", scmd_group_unfold },
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4459
+  { "shrink", scmd_group_fold   },
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4460
+  { "fold",   scmd_group_fold   },
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4461
+  { "toggle", scmd_group_toggle },
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4462
+  { NULL,     0                 },
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4463
+};
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4464
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4465
+#define SCMD_GROUP(NAME, REALNAME) \
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4466
+    { #NAME, cmd_default, NULL, NULL, NULL, NULL, NULL, \
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4467
+             (gpointer)scmd_group_##REALNAME }
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4468
+static cmdopts_t def_group = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4469
+  "group",
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4470
+  cmd_default,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4471
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4472
+  do_group,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4473
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4474
+  (cmdarg_t[3]){
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4475
+    { "subcommand", pos_group_action, cmdarg_chreq,              NULL,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4476
+                    &cmdarg_type_string2enum, (gpointer)s2e_group_scmd },
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4477
+    { "group",      pos_group_group,  cmdarg_chreq | cmdarg_eol, ".",
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4478
+                    &cmdarg_type_buddy, (gpointer)cmdarg_roster_grouponly },
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4479
+    {NULL}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4480
+  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4481
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4482
+};
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4483
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4484
+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
  4485
+{
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4486
+  //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
  4487
+  //  return g_strdup("Command needs selected buddy.");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4488
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4489
+  group_cmd (values[pos_group_group].value.rjid.bud,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4490
+             values[pos_group_action].value.uint);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4491
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4492
+  return NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4493
+}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4494
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4495
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4496
+//  /say
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4497
+//
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  4498
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4499
+// FIXME: remove excessive checks, simplify this all. Uses:
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4500
+// send_message_to():
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4501
+// - send_message()
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4502
+// - /msay send_to
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4503
+// - /say_to
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4504
+// - /room privmsg
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4505
+// send_message():
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4506
+// - say_cmd()
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4507
+// - /msay send
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4508
+// say_cmd():
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4509
+// - process_line()
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4510
+// - /say
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4511
+// 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
  4512
+// say_cmd().
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4513
+// 
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4514
+// say_cmd() does:
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4515
+// - scr_set_chatmode(TRUE);
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4516
+// - scr_show_buddy_window();
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4517
+// - check current buddy presence and type
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4518
+// - buddy_setflags(bud, ROSTER_FLAG_LOCK, TRUE);
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4519
+// send_message() does:
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4520
+// - 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
  4521
+// - determines active resource of current buddy
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4522
+// send_message_to() does:
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4523
+// - checks online
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4524
+// - checks jid presence
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4525
+// - checks message presence
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4526
+// - checks syntax of jid
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4527
+// - converts message type
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4528
+// - extracts bare jid (for hook)
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4529
+// - jumps to window if not quiet
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4530
+// - unsets resource (for hook)
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4531
+// - prepares message for hook
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4532
+// - sends message
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4533
+// - checks for encryption error
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4534
+// - calls hook
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4535
+// 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
  4536
+// 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
  4537
+// 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
  4538
+// 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
  4539
+// Add '--to' and '--subject' to commands.
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4540
+
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4541
 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
  4542
-                           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
  4543
+                           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
  4544
 {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4545
   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
  4546
   char *hmsg;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4547
@@ -1285,6 +2169,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4548
   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
  4549
   int isroom;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4550
   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
  4551
+  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
  4552
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4553
   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
  4554
     scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4555
@@ -1299,11 +2184,15 @@
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4556
     return 1;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4557
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4558
   if (check_jid_syntax((char*)fjid)) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4559
-    scr_LogPrint(LPRINT_NORMAL|LPRINT_NOTUTF8,
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4560
-                 "<%s> is not a valid Jabber ID.", fjid);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4561
+    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
  4562
     return 1;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4563
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4564
 
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4565
+  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
  4566
+    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
  4567
+  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
  4568
+    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
  4569
+
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4570
   // 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
  4571
   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
  4572
   if (rp)
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4573
@@ -1351,213 +2240,221 @@
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4574
   return retval;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4575
 }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4576
 
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4577
-//  send_message(msg, subj, type_overwrite)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4578
-// Write the message in the buddy's window and send the message on
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4579
-// the network.
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4580
-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
  4581
-                         LmMessageSubType type_overwrite)
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4582
+static void say_cmd(char *arg)
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4583
 {
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4584
-  const char *bjid;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4585
-  char *jid;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4586
-  const char *activeres;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4587
-
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4588
+  // it is current buddy
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4589
   if (!current_buddy) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4590
-    scr_LogPrint(LPRINT_NORMAL, "No buddy is currently selected.");
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4591
+    scr_log_print (LPRINT_NORMAL, "No buddy selected.");
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4592
+    return;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4593
+  } else if (!(buddy_gettype (BUDDATA(current_buddy)) & cmdarg_roster_entity)) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4594
+    scr_log_print (LPRINT_NORMAL, "Currently selected buddy is of wrong type.");
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4595
     return;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4596
   }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4597
 
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4598
-  bjid = CURRENT_JID;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4599
-  if (!bjid) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4600
-    scr_LogPrint(LPRINT_NORMAL, "No buddy is currently selected.");
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4601
-    return;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4602
-  }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4603
-
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4604
-  activeres = buddy_getactiveresource(BUDDATA(current_buddy));
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4605
-  if (activeres)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4606
-    jid = g_strdup_printf("%s/%s", bjid, activeres);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4607
-  else
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4608
-    jid = g_strdup(bjid);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4609
-
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4610
-  send_message_to(jid, msg, subj, type_overwrite, FALSE);
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4611
-  g_free(jid);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4612
-}
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4613
-
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4614
-static LmMessageSubType scan_mtype(char **arg)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4615
-{
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4616
-  // Try splitting it
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4617
-  char **parlist = split_arg(*arg, 2, 1);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4618
-  LmMessageSubType result = LM_MESSAGE_SUB_TYPE_NOT_SET;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4619
-  // Is it a good parameter?
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4620
-  if (parlist && *parlist) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4621
-    if (!strcmp("-n", *parlist)) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4622
-      result = LM_MESSAGE_SUB_TYPE_NORMAL;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4623
-    } else if (!strcmp("-h", *parlist)) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4624
-      result = LM_MESSAGE_SUB_TYPE_HEADLINE;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4625
-    }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4626
-    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
  4627
-      *arg += strlen(*arg) - (parlist[1] ? strlen(parlist[1]) : 0);
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
-  // Anything found? -> skip it
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4630
-  free_arg_lst(parlist);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4631
-  return result;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4632
-}
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4633
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4634
-void say_cmd(char *arg, int parse_flags)
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4635
-{
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4636
-  gpointer bud;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4637
-  LmMessageSubType msgtype = LM_MESSAGE_SUB_TYPE_NOT_SET;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4638
-
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4639
   scr_set_chatmode(TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4640
   scr_show_buddy_window();
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4641
 
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4642
-  if (!current_buddy) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4643
-    scr_LogPrint(LPRINT_NORMAL,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4644
-                 "Whom are you talking to?  Please select a buddy.");
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4645
-    return;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4646
+  buddy_setflags(bud, ROSTER_FLAG_LOCK, TRUE);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4647
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4648
+  const char *resource = buddy_getactiveresource (BUDDATA(current_buddy));
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4649
+  const char *jid      = buddy_getjid (BUDDATA(current_buddy));
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4650
+  gchar      *fjid     = g_strdup_printf ("%s" JID_RESOURCE_SEPARATORSTR "%s", jid, resource);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4651
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4652
+  send_message_to (fjid, arg, NULL, msgtype_not_set, FALSE);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4653
+  g_free (fjid);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4654
+}
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4655
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4656
+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
  4657
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4658
+typedef enum {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4659
+  pos_say_msg     = 0,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4660
+  pos_say_msgtype = 1,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4661
+} pos_say_t;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4662
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4663
+static cmdopts_t def_say = {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4664
+  "say",
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4665
+  cmd_default,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4666
+  NULL,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4667
+  do_say,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4668
+  (cmdopt_t[4]){
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4669
+    { '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
  4670
+                                     NULL, (gpointer)msgtype_normal}},
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4671
+    { '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
  4672
+                                     NULL, (gpointer)msgtype_headline } },
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4673
+    { '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
  4674
+                                     NULL, (gpointer)msgtype_not_set } },
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4675
+    {0}
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4676
+  },
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4677
+  (cmdarg_t[2]){
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4678
+    { "message", pos_say_msg, cmdarg_eol | cmdarg_chreq, NULL,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4679
+                                     &cmdarg_type_nonspace },
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4680
+    {NULL}
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4681
+  },
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4682
+  NULL,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4683
+};
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4684
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4685
+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
  4686
+{
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4687
+  say_cmd(values[pos_say_msg].value.arg,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4688
+          (msgtype_t) (values[pos_say_msgtype].src -> userdata));
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  4689
+  return NULL;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4690
+}
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4691
+
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4692
+//
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4693
+//  /msay
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4694
+//
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4695
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4696
+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
  4697
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4698
+typedef enum {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4699
+  scmd_msay_begin, scmd_msay_verbatim,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4700
+  scmd_msay_send, scmd_msay_send_to,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4701
+  scmd_msay_toggle, scmd_msay_toggle_verbatim,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4702
+  scmd_msay_abort,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4703
+} scmd_msay_t;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4704
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4705
+typedef enum {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4706
+  pos_msay_scmd    = 0,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4707
+  pos_msay_subject = 1,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4708
+  pos_msay_jid     = 1,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4709
+  pos_msay_msgtype = 2,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4710
+} pos_msay_t;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4711
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4712
+static cmdopts_t def_msay = {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4713
+  "msay",
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4714
+  cmd_default,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4715
+  NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4716
+  do_msay,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4717
+  NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4718
+  (cmdarg_t[2]){
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4719
+    { "subcommand", pos_msay_scmd, cmdarg_subcmd|cmdarg_chreq, NULL, NULL },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4720
+    {NULL},
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4721
+  },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4722
+  (cmdopts_t[8]){
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4723
+    { "begin", cmd_default, NULL, NULL, NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4724
+      (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
  4725
+      NULL, (gpointer)scmd_msay_begin },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4726
+    { "verbatim", cmd_default, NULL, NULL, NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4727
+      (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
  4728
+      NULL, (gpointer)scmd_msay_verbatim },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4729
+    { "send", cmd_default, NULL, NULL,
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4730
+      (cmdopt_t[4]){
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4731
+        {'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
  4732
+        {'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
  4733
+        {'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
  4734
+        {0}
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4735
+      },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4736
+      NULL, NULL, (gpointer)scmd_msay_send, 0 },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4737
+    { "send_to", cmd_default, NULL, NULL,
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4738
+      (cmdopt_t[4]){
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4739
+        {'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
  4740
+        {'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
  4741
+        {'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
  4742
+        {0}
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4743
+      },
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4744
+      (cmdarg_t[2]){{"jid", pos_msay_jid, cmdarg_chreq, NULL, &cmdarg_type_fjid, (gpointer)cmdarg_roster_entity}, {NULL}}, 
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4745
+      NULL, (gpointer)scmd_msay_send_to },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4746
+    { "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
  4747
+    { "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
  4748
+    { "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
  4749
+  },
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4750
+};
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4751
+
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4752
+static gchar *do_msay (const cmdopts_t *command, cmdarg_value_t *values)
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4753
+{
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4754
+  const char  *msg;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4755
+  scmd_msay_t subcmd = (scmd_msay_t) (values[pos_msay_scmd].src -> userdata);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4756
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4757
+  if (subcmd == scmd_msay_toggle) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4758
+    if (scr_get_multimode())
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4759
+      subcmd = scmd_msay_send;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4760
+    else
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4761
+      subcmd = scmd_msay_begin;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4762
+  } else if (subcmd == scmd_msay_toggle_verbatim) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4763
+    if (scr_get_multimode())
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4764
+      subcmd = scmd_msay_send;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4765
+    else
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4766
+      subcmd = scmd_msay_verbatim;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4767
   }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4768
 
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4769
-  bud = BUDDATA(current_buddy);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4770
-  if (!(buddy_gettype(bud) &
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4771
-        (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM))) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4772
-    scr_LogPrint(LPRINT_NORMAL, "This is not a user.");
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4773
-    return;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4774
-  }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4775
-
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4776
-  buddy_setflags(bud, ROSTER_FLAG_LOCK, TRUE);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4777
-  if (parse_flags)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4778
-    msgtype = scan_mtype(&arg);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4779
-  arg = to_utf8(arg);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4780
-  send_message(arg, NULL, msgtype);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4781
-  g_free(arg);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4782
-}
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4783
-
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4784
-static void do_say(char *arg) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4785
-  say_cmd(arg, 1);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4786
-}
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4787
-
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4788
-static void do_msay(char *arg)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4789
-{
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4790
-  /* Parameters: begin verbatim abort send send_to */
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4791
-  char **paramlst;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4792
-  char *subcmd;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4793
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4794
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4795
-  subcmd = *paramlst;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4796
-  arg = *(paramlst+1);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4797
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4798
-  if (!subcmd || !*subcmd) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4799
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4800
-    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
  4801
-                 "the /msay command.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4802
-    scr_LogPrint(LPRINT_NORMAL, "(Use \"%s begin\" to enter "
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4803
-                 "multi-line mode...)", mkcmdstr("msay"));
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4804
-    goto do_msay_return;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4805
-  }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4806
-
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4807
-  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
  4808
-    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
  4809
-      subcmd = "send";
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4810
-    else
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4811
-      subcmd = "begin";
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4812
-  } 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
  4813
-    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
  4814
-      subcmd = "send";
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4815
-    else
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4816
-      subcmd = "verbatim";
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4817
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4818
-
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4819
-  if (!strcasecmp(subcmd, "abort")) {
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4820
+  if (subcmd == scmd_msay_abort) {
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4821
     if (scr_get_multimode())
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4822
       scr_LogPrint(LPRINT_NORMAL, "Leaving multi-line message mode.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4823
     scr_set_multimode(FALSE, NULL);
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4824
-    goto do_msay_return;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4825
-  } else if ((!strcasecmp(subcmd, "begin")) ||
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4826
-             (!strcasecmp(subcmd, "verbatim"))) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4827
-    bool verbat;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4828
-    gchar *subj_utf8 = to_utf8(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4829
-    if (!strcasecmp(subcmd, "verbatim")) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4830
-      scr_set_multimode(2, subj_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4831
-      verbat = TRUE;
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4832
+    return NULL;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4833
+  } else if (subcmd == scmd_msay_begin || subcmd == scmd_msay_verbatim) {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4834
+    gchar *subject = values[pos_msay_subject].value.arg;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4835
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4836
+    if (subcmd == scmd_msay_verbatim) {
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4837
+      scr_set_multimode(2, subject);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4838
     } else {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4839
-      scr_set_multimode(1, subj_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4840
-      verbat = FALSE;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4841
+      scr_set_multimode(1, subject);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4842
     }
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
     scr_LogPrint(LPRINT_NORMAL, "Entered %smulti-line message mode.",
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4845
-                 verbat ? "VERBATIM " : "");
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4846
+                 subcmd == scmd_msay_verbatim ? "VERBATIM " : "");
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4847
     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
  4848
                  "when your message is ready.", mkcmdstr("msay"));
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4849
-    if (verbat)
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4850
+    if (subcmd == scmd_msay_verbatim)
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4851
       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
  4852
                    mkcmdstr("msay"));
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4853
-    g_free(subj_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4854
-    goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4855
-  } else if (strcasecmp(subcmd, "send") && strcasecmp(subcmd, "send_to")) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4856
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4857
-    goto do_msay_return;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4858
+    return NULL;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4859
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4860
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4861
-  /* send/send_to command */
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4862
+  /* scmd_msay_send or scmd_msay_send_to */
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4863
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4864
   if (!scr_get_multimode()) {
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4865
-    scr_LogPrint(LPRINT_NORMAL, "No message to send.  "
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4866
+    return g_strdup_printf ("No message to send.  "
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4867
                  "Use \"%s begin\" first.", mkcmdstr("msay"));
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4868
-    goto do_msay_return;
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4869
   }
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4870
 
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4871
   scr_set_chatmode(TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4872
   scr_show_buddy_window();
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4873
 
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4874
-  if (!strcasecmp(subcmd, "send_to")) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4875
-    int err = FALSE;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4876
-    gchar *msg_utf8;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4877
-    LmMessageSubType msg_type = scan_mtype(&arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4878
-    // 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
  4879
-    // 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
  4880
-    arg = to_utf8(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4881
-    msg_utf8 = to_utf8(scr_get_multiline());
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4882
-    if (msg_utf8) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4883
-      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
  4884
-                            FALSE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4885
-      g_free(msg_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4886
-    }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4887
-    g_free(arg);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4888
-    if (err)
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4889
-      goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4890
-  } else { // Send to currently selected buddy
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4891
-    gpointer bud;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4892
-    gchar *msg_utf8;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4893
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4894
-    if (!current_buddy) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4895
-      scr_LogPrint(LPRINT_NORMAL, "Whom are you talking to?");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4896
-      goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4897
-    }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4898
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4899
-    bud = BUDDATA(current_buddy);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4900
-    if (!(buddy_gettype(bud) &
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4901
-          (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM))) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4902
-      scr_LogPrint(LPRINT_NORMAL, "This is not a user.");
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4903
-      goto do_msay_return;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4904
-    }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4905
-
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4906
-    buddy_setflags(bud, ROSTER_FLAG_LOCK, TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4907
-    msg_utf8 = to_utf8(scr_get_multiline());
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4908
-    if (msg_utf8) {
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4909
-      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
  4910
-      g_free(msg_utf8);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4911
+  if ((msg = scr_get_multiline())) {
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4912
+    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
  4913
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4914
+    if (subcmd == scmd_msay_send_to) {
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4915
+      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
  4916
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4917
+      // 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
  4918
+      // 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
  4919
+      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
  4920
+                          msg_type, FALSE))
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4921
+        return NULL;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4922
+    } else { // Send to currently selected buddy
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4923
+      gpointer bud;
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4924
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4925
+      if (!current_buddy) {
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4926
+        return g_strdup ("Whom are you talking to?");
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4927
+      }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4928
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4929
+      bud = BUDDATA(current_buddy);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4930
+      if (!(buddy_gettype(bud) &
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4931
+            (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM))) {
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4932
+        return g_strdup ("This is not a user.");
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4933
+      }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4934
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4935
+      buddy_setflags(bud, ROSTER_FLAG_LOCK, TRUE);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4936
+      send_message(msg, scr_get_multimode_subj(), msg_type);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4937
     }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4938
   }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4939
+
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4940
   scr_set_multimode(FALSE, NULL);
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4941
   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
  4942
-do_msay_return:
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4943
-  free_arg_lst(paramlst);
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4944
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4945
+  return NULL;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4946
 }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4947
 
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4948
+//
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4949
+//  /say_to
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4950
+//
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4951
+
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  4952
 //  load_message_from_file(filename)
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4953
 // Read the whole content of a file.
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  4954
 // 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
  4955
 // use.
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  4956
-char *load_message_from_file(const char *filename)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  4957
+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
  4958
 {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  4959
   FILE *fd;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  4960
   struct stat buf;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4961
@@ -1566,7 +2463,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4962
   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
  4963
   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
  4964
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4965
-  fd = fopen(filename, "r");
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  4966
+  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
  4967
 
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  4968
   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
  4969
     scr_LogPrint(LPRINT_LOGNORM, "Cannot open message file (%s)", filename);
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  4970
@@ -1632,273 +2529,287 @@
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4971
   return msgbuf_utf8;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4972
 }
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4973
 
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4974
-static void do_say_to(char *arg)
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4975
+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
  4976
+
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4977
+typedef enum {
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4978
+  pos_sayto_jid     = 0,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4979
+  pos_sayto_msg     = 1,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4980
+  pos_sayto_msgtype = 2,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4981
+  pos_sayto_quiet   = 3,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4982
+  pos_sayto_esc     = 4,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4983
+  pos_sayto_file    = 5,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4984
+} pos_sayto_t;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4985
+
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  4986
+static cmdopts_t def_say_to = {
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4987
+  "say_to",
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4988
+  cmd_default,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4989
+  cmd_check_online,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4990
+  do_say_to,
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4991
+  (cmdopt_t[7]){
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4992
+    {'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
  4993
+    {'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
  4994
+    {'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
  4995
+    {'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
  4996
+    {'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
  4997
+    {'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
  4998
+    {0}
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  4999
+  },
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5000
+  (cmdarg_t[3]){
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5001
+    {"jid",     pos_sayto_jid, cmdarg_chreq, ".",  &cmdarg_type_fjid, (gpointer)cmdarg_roster_entity},
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5002
+    {"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
  5003
+    {NULL}
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5004
+  },
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5005
+  NULL,
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
+
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5008
+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
  5009
 {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5010
-  char **paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5011
-  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
  5012
-  char *msg;
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5013
-  char *unescaped_msg = NULL;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5014
-  char *uncompletedfjid = NULL;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5015
-  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
  5016
-  LmMessageSubType msg_type = LM_MESSAGE_SUB_TYPE_NOT_SET;
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5017
-  bool quiet = FALSE;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5018
-  bool eval = FALSE;
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5019
-
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5020
-  if (!xmpp_is_online()) {
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5021
-    scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5022
-    return;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5023
-  }
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5024
-
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5025
-  msg_type = scan_mtype(&arg);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5026
-  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
  5027
-
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5028
-  if (!*paramlst) {  // No parameter?
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5029
-    scr_LogPrint(LPRINT_NORMAL, "Please specify a Jabber ID.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5030
-    free_arg_lst(paramlst);
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5031
-    return;
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5032
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5033
-
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5034
-  // Check for an option parameter
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5035
-  while (*paramlst) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5036
-    if (!strcmp(*paramlst, "-q")) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5037
-      char **oldparamlst = paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5038
-      paramlst = split_arg(*(oldparamlst+1), 2, 1); // jid, message
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5039
-      free_arg_lst(oldparamlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5040
-      quiet = TRUE;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5041
-    } else if (!strcmp(*paramlst, "-e")) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5042
-      char **oldparamlst = paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5043
-      paramlst = split_arg(*(oldparamlst+1), 2, 1); // jid, message
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5044
-      free_arg_lst(oldparamlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5045
-      eval = TRUE;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5046
-    } else if (!strcmp(*paramlst, "-f")) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5047
-      char **oldparamlst = paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5048
-      paramlst = split_arg(*(oldparamlst+1), 2, 1); // filename, jid
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5049
-      free_arg_lst(oldparamlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5050
-      if (!*paramlst) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5051
-        scr_LogPrint(LPRINT_NORMAL, "Wrong usage.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5052
-        free_arg_lst(paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5053
-        return;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5054
-      }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5055
-      file = g_strdup(*paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5056
-      // One more parameter shift...
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5057
-      oldparamlst = paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5058
-      paramlst = split_arg(*(oldparamlst+1), 2, 1); // jid, nothing
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5059
-      free_arg_lst(oldparamlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5060
-    } else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5061
-      break;
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  5062
-  }
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  5063
-
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5064
-  if (!*paramlst) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5065
-    scr_LogPrint(LPRINT_NORMAL, "Wrong usage.");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5066
-    free_arg_lst(paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5067
-    return;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5068
-  }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5069
-
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5070
-  fjid = *paramlst;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5071
-  msg = *(paramlst+1);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5072
-
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5073
-  if (fjid[0] == '.') {
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5074
-    const gchar *cjid = (current_buddy ? CURRENT_JID : NULL);
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5075
-    if (fjid[1] == '\0') {
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5076
-      fjid = g_strdup(cjid);
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5077
-    } else if (fjid[1] == JID_RESOURCE_SEPARATOR) {
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5078
-      char *res_utf8 = to_utf8(fjid+2);
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5079
-      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
  5080
-      g_free(res_utf8);
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5081
-    } else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5082
-      fjid = to_utf8(fjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5083
-  } else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5084
-    fjid = to_utf8(fjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5085
-
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5086
+  char *fjid, *msg, *file;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5087
+  gchar *freeme  = NULL; // fjid
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5088
+  gchar *freeme2 = NULL; // msg
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5089
+  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
  5090
+
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5091
+  fjid = values[pos_sayto_jid].value.arg;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5092
+  msg  = values[pos_sayto_msg].value.arg;
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5093
+  file = values[pos_sayto_file].value.fname.utf8;
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5094
+
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5095
+  // 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
  5096
   if (!strchr(fjid, JID_DOMAIN_SEPARATOR)) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5097
     const gchar *append_server = settings_opt_get("default_server");
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5098
     if (append_server) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5099
       gchar *res = strchr(fjid, JID_RESOURCE_SEPARATOR);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5100
-      uncompletedfjid = fjid;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5101
       if (res) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5102
         *res++ = '\0';
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5103
         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
  5104
                                JID_RESOURCE_SEPARATOR, res);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5105
       } else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5106
         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
  5107
+      g_free(freeme);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5108
+      freeme = fjid;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5109
     }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5110
   }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5111
 
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5112
-  if (check_jid_syntax(fjid)) {
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5113
-    scr_LogPrint(LPRINT_NORMAL, "Please specify a valid Jabber ID.");
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5114
-    free_arg_lst(paramlst);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5115
-    g_free(uncompletedfjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5116
-    g_free(fjid);
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5117
-    return;
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5118
-  }
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5119
-
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5120
-  if (!file) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5121
-    msg_utf8 = to_utf8(msg);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5122
-    if (eval) {
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5123
-      unescaped_msg = ut_unescape_tabs_cr(msg_utf8);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5124
+  if (file == NULL) {
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5125
+    if (values[pos_sayto_esc].value.swc) {
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5126
+      freeme2 = ut_unescape_tabs_cr(msg);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5127
       // We must not free() if the original string was returned
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5128
-      if (unescaped_msg == msg_utf8)
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5129
-        unescaped_msg = NULL;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5130
+      if (freeme2 == msg)
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5131
+        freeme2 = NULL;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5132
+      else
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5133
+        msg = freeme2;
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5134
     }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5135
-    msg = (unescaped_msg ? unescaped_msg : msg_utf8);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5136
   } else {
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5137
-    char *filename_xp;
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5138
     if (msg)
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5139
       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
  5140
-    filename_xp = expand_filename(file);
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5141
-    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
  5142
-    g_free(filename_xp);
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5143
-    g_free(file);
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5144
+    freeme2 = msg = load_message_from_file(file,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5145
+                                           values[pos_sayto_file].value.fname.local);
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5146
   }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5147
 
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5148
-  send_message_to(fjid, msg, NULL, msg_type, quiet);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5149
-
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5150
-  g_free(uncompletedfjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5151
-  g_free(fjid);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5152
-  g_free(msg_utf8);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5153
-  g_free(unescaped_msg);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5154
-  free_arg_lst(paramlst);
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5155
+  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
  5156
+
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5157
+  g_free(freeme);
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5158
+  g_free(freeme2);
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5159
+
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  5160
+  return NULL;
65
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5161
 }
7e44adeed9a7 Fixes to cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 64
diff changeset
  5162
 
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5163
-//  buffer_updown(updown, nblines)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5164
-// updown: -1=up, +1=down
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5165
-inline static void buffer_updown(int updown, char *nlines)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5166
+//
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5167
+//  /buffer
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5168
+//
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5169
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5170
+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
  5171
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5172
+typedef enum {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5173
+  scmd_buffer_close, scmd_buffer_close_all,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5174
+  scmd_buffer_clear, scmd_buffer_purge,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5175
+  scmd_buffer_list,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5176
+  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
  5177
+  scmd_buffer_date, scmd_buffer_percent, scmd_buffer_readmark,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5178
+  scmd_buffer_search_backward, scmd_buffer_search_forward,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5179
+  scmd_buffer_scroll_lock, scmd_buffer_scroll_unlock,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5180
+  scmd_buffer_scroll_toggle,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5181
+  scmd_buffer_save,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5182
+} scmd_buffer_t;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5183
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5184
+typedef enum {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5185
+  pos_buffer_scmd      = 0,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5186
+  pos_buffer_jid       = 1,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5187
+  pos_buffer_n         = 1,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5188
+  pos_buffer_date      = 1,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5189
+  pos_buffer_percent   = 1,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5190
+  pos_buffer_text      = 1,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5191
+  pos_buffer_file      = 1,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5192
+} pos_buffer_t;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5193
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5194
+static cmdopts_t def_buffer = {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5195
+  "buffer",
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5196
+  cmd_default,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5197
+  cmd_check_current_buddy,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5198
+  do_buffer,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5199
+  NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5200
+  (cmdarg_t[2]){
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5201
+    { "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
  5202
+    {NULL},
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5203
+  },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5204
+  (cmdopts_t[19]){
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5205
+    { "close", cmd_default, NULL, NULL, NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5206
+      (cmdarg_t[2]){
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5207
+        { "jid", pos_buffer_jid, cmdarg_required, NULL, &cmdarg_type_roster_bjid, (gpointer)cmdarg_roster_buffer },
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5208
+        {NULL}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5209
+      },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5210
+      NULL, (gpointer)scmd_buffer_close },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5211
+    { "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
  5212
+    { "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
  5213
+    { "purge", cmd_default, NULL, NULL, NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5214
+      (cmdarg_t[2]){
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5215
+        { "jid", pos_buffer_jid, cmdarg_required, NULL, &cmdarg_type_roster_bjid, (gpointer)cmdarg_roster_buffer },
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5216
+        {0}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5217
+      },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5218
+      NULL, (gpointer)scmd_buffer_purge },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5219
+    { "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
  5220
+    { "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
  5221
+    { "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
  5222
+    { "up", cmd_default, NULL, NULL, NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5223
+      (cmdarg_t[2]){
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5224
+        { "n", pos_buffer_n, cmdarg_chreq, "0", &cmdarg_type_uint, (gpointer)0 },
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5225
+        {NULL}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5226
+      },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5227
+      NULL, (gpointer)scmd_buffer_up },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5228
+    { "down", cmd_default, NULL, NULL, NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5229
+      (cmdarg_t[2]){
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5230
+        { "n", pos_buffer_n, cmdarg_chreq, "0", &cmdarg_type_uint, (gpointer)0 },
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5231
+        {NULL}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5232
+      },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5233
+      NULL, (gpointer)scmd_buffer_down },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5234
+    { "date", cmd_default, NULL, NULL, NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5235
+      (cmdarg_t[2]){
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5236
+        { "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
  5237
+        {NULL}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5238
+      },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5239
+      NULL, (gpointer)scmd_buffer_date },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5240
+    { "%", cmd_default, NULL, NULL, NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5241
+      (cmdarg_t[2]){
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5242
+        { "percent", pos_buffer_percent, cmdarg_chreq, "100", &cmdarg_type_uint, (gpointer)100 },
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5243
+        {NULL}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5244
+      },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5245
+      NULL, (gpointer)scmd_buffer_percent },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5246
+    { "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
  5247
+    { "search_backward", cmd_default, NULL, NULL, NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5248
+      (cmdarg_t[2]){
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5249
+        { "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
  5250
+        {NULL}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5251
+      },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5252
+      NULL, (gpointer)scmd_buffer_search_backward },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5253
+    { "search_forward", cmd_default, NULL, NULL, NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5254
+      (cmdarg_t[2]){
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5255
+        { "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
  5256
+        {NULL}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5257
+      },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5258
+      NULL, (gpointer)scmd_buffer_search_forward },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5259
+    { "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
  5260
+    { "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
  5261
+    { "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
  5262
+    { "save", cmd_default, NULL, NULL, NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5263
+      (cmdarg_t[2]){
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5264
+        { "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
  5265
+        {NULL}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5266
+      },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5267
+      NULL, (gpointer)scmd_buffer_save },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5268
+  },
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5269
+};
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5270
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5271
+// XXX % command before was able to handle %50
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5272
+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
  5273
 {
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5274
-  int nblines;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5275
-
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5276
-  if (!nlines || !*nlines)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5277
-    nblines = 0;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5278
-  else
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5279
-    nblines = strtol(nlines, NULL, 10);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5280
-
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5281
-  if (nblines >= 0)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5282
-    scr_buffer_scroll_up_down(updown, nblines);
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5283
+  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
  5284
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5285
+  if (buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_GROUP &&
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5286
+      subcmd != scmd_buffer_close_all) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5287
+    return g_strdup ("Groups have no buffer.");
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5288
+  }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5289
+
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5290
+  if (subcmd == scmd_buffer_close) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5291
+    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
  5292
+  } else if (subcmd == scmd_buffer_close_all) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5293
+    scr_buffer_purge_all(1);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5294
+  } else if (subcmd == scmd_buffer_clear) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5295
+    scr_buffer_clear();
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5296
+  } else if (subcmd == scmd_buffer_purge) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5297
+    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
  5298
+  } else if (subcmd == scmd_buffer_list) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5299
+    scr_buffer_list();
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5300
+  } else if (subcmd == scmd_buffer_top) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5301
+    scr_buffer_top_bottom(-1);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5302
+  } else if (subcmd == scmd_buffer_bottom) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5303
+    scr_buffer_top_bottom(1);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5304
+  } else if (subcmd == scmd_buffer_up) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5305
+    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
  5306
+  } else if (subcmd == scmd_buffer_down) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5307
+    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
  5308
+  } else if (subcmd == scmd_buffer_date) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5309
+    scr_buffer_date(values[pos_buffer_date].value.time);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5310
+  } else if (subcmd == scmd_buffer_percent) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5311
+    scr_buffer_percent(values[pos_buffer_percent].value.uint);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5312
+  } else if (subcmd == scmd_buffer_readmark) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5313
+    scr_buffer_jump_readmark();
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5314
+  } else if (subcmd == scmd_buffer_search_backward) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5315
+    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
  5316
+  } else if (subcmd == scmd_buffer_search_forward) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5317
+    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
  5318
+  } else if (subcmd == scmd_buffer_scroll_lock) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5319
+    scr_buffer_scroll_lock(1);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5320
+  } else if (subcmd == scmd_buffer_scroll_unlock) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5321
+    scr_buffer_scroll_lock(0);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5322
+  } else if (subcmd == scmd_buffer_scroll_toggle) {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5323
+    scr_buffer_scroll_lock(-1);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5324
+  } else { // scmd_buffer_save
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5325
+    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
  5326
+  }
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5327
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5328
+  return NULL;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5329
 }
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5330
 
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5331
-static void buffer_search(int direction, char *arg)
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5332
+//
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5333
+//  /clear
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5334
+//
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5335
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5336
+// XXX convert to real alias?
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5337
+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
  5338
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5339
+static cmdopts_t def_clear = {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5340
+  "clear",
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5341
+  cmd_default,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5342
+  cmd_check_current_buddy,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5343
+  do_clear,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5344
+  NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5345
+  NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5346
+  NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5347
+};
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5348
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5349
+// Alias for "buffer clear"
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5350
+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
  5351
 {
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5352
-  if (!arg || !*arg) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5353
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5354
-    return;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5355
-  }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5356
-
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5357
-  scr_buffer_search(direction, arg);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5358
+  scr_buffer_clear();
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5359
+  return NULL;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5360
 }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5361
 
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5362
-static void buffer_date(char *date)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5363
-{
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5364
-  time_t t;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5365
-
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5366
-  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
  5367
-    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
  5368
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5369
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5370
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5371
-  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
  5372
-
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5373
-  t = from_iso8601(date, 0);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5374
-  if (t)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5375
-    scr_buffer_date(t);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5376
-  else
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5377
-    scr_LogPrint(LPRINT_NORMAL, "The date you specified is "
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5378
-                 "not correctly formatted or invalid.");
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5379
-}
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5380
-
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5381
-static void buffer_percent(char *arg1, char *arg2)
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5382
-{
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5383
-  // 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
  5384
-  // "%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
  5385
-  // "% 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
  5386
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5387
-  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
  5388
-    scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5389
-    return;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5390
-  }
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5391
-
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5392
-  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
  5393
-    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
  5394
-    return;
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5395
-  }
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5396
-
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5397
-  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
  5398
-}
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5399
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5400
-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
  5401
-{
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5402
-  char **paramlst;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5403
-  char *subcmd;
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
-  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
  5406
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5407
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5408
-  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
  5409
-  subcmd = *paramlst;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5410
-  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
  5411
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5412
-  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
  5413
-    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
  5414
-    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
  5415
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5416
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5417
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5418
-  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
  5419
-      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
  5420
-    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
  5421
-    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
  5422
-    return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5423
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5424
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5425
-  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
  5426
-    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
  5427
-  } 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
  5428
-    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
  5429
-  } 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
  5430
-    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
  5431
-  } 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
  5432
-    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
  5433
-  } 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
  5434
-    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
  5435
-  } 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
  5436
-    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
  5437
-  } 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
  5438
-    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
  5439
-  } 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
  5440
-    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
  5441
-  } 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
  5442
-    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
  5443
-  } 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
  5444
-    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
  5445
-  } 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
  5446
-    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
  5447
-  } 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
  5448
-    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
  5449
-    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
  5450
-  } 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
  5451
-    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
  5452
-    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
  5453
-  } 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
  5454
-    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
  5455
-  } 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
  5456
-    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
  5457
-  } 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
  5458
-    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
  5459
-  } 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
  5460
-    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
  5461
-  } 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
  5462
-    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
  5463
-  } else {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5464
-    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
  5465
-  }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5466
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5467
-  free_arg_lst(paramlst);
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5468
-}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5469
-
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5470
-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
  5471
-{
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5472
-  do_buffer("clear");
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5473
-}
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5474
-
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5475
-static void do_info(char *arg)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5476
+//
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5477
+//  /info
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5478
+//
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5479
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5480
+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
  5481
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5482
+static cmdopts_t def_info = {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5483
+  "clear",
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5484
+  cmd_default,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5485
+  cmd_check_current_buddy,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5486
+  do_info,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5487
+  NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5488
+  NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5489
+  NULL,
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5490
+};
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5491
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5492
+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
  5493
 {
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5494
   gpointer bud;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5495
   const char *bjid, *name;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5496
@@ -1906,9 +2817,7 @@
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5497
   char *buffer;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5498
   enum subscr esub;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5499
 
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5500
-  if (!current_buddy)
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5501
-    return;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5502
-  bud = BUDDATA(current_buddy);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5503
+  bud    = BUDDATA(current_buddy);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5504
 
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5505
   bjid   = buddy_getjid(bud);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5506
   name   = buddy_getname(bud);
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5507
@@ -2031,95 +2940,13 @@
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5508
                                HBB_PREFIX_INFO, 0);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5509
     }
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5510
   }
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5511
+
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  5512
+  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
  5513
 }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5514
 
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5515
-// room_names() is a variation of do_info(), for chatrooms only
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5516
-static void room_names(gpointer bud, char *arg)
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5517
-{
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5518
-  const char *bjid;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5519
-  char *buffer;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5520
-  GSList *resources, *p_res;
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5521
-  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
  5522
-         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
  5523
-
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5524
-  if (*arg) {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5525
-    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
  5526
-      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
  5527
-    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
  5528
-      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
  5529
-    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
  5530
-      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
  5531
-    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
  5532
-      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
  5533
-    else {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5534
-      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
  5535
-      return;
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5536
-    }
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5537
-  }
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5538
-
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5539
-  // Enter chat mode
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5540
-  scr_set_chatmode(TRUE);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5541
-  scr_show_buddy_window();
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5542
-
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5543
-  bjid = buddy_getjid(bud);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5544
-
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5545
-  buffer = g_slice_alloc(4096);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5546
-  strncpy(buffer, "Room members:", 127);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5547
-  scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO, 0);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5548
-
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5549
-  resources = buddy_getresources(bud);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5550
-  for (p_res = resources ; p_res ; p_res = g_slist_next(p_res)) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5551
-    enum imstatus rstatus;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5552
-    const char *rst_msg;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5553
-
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5554
-    rstatus = buddy_getstatus(bud, p_res->data);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5555
-    rst_msg = buddy_getstatusmsg(bud, p_res->data);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5556
-
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5557
-    if (style == style_short) {
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5558
-      snprintf(buffer, 4095, "[%c] %s%s%s", imstatus2char[rstatus],
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5559
-               (char*)p_res->data,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5560
-               rst_msg ? " -- " : "", rst_msg ? rst_msg : "");
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5561
-      scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO, 0);
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5562
-    } else if (style == style_compact) {
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5563
-        enum imrole role = buddy_getrole(bud, p_res->data);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5564
-        enum imaffiliation affil = buddy_getaffil(bud, p_res->data);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5565
-        bool showaffil = (affil != affil_none);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5566
-
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5567
-        snprintf(buffer, 4095, "[%c] %s (%s%s%s)",
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5568
-                 imstatus2char[rstatus], (char*)p_res->data,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5569
-                 showaffil ? straffil[affil] : "\0",
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5570
-                 showaffil ? "/" : "\0",
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5571
-                 strrole[role]);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5572
-        scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO, 0);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5573
-      } else {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5574
-      // (Style "normal", "detail" or "quiet")
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5575
-      snprintf(buffer, 4095, "[%c] %s", imstatus2char[rstatus],
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5576
-               (char*)p_res->data);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5577
-      scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO, 0);
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5578
-      if (rst_msg && style != style_quiet) {
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5579
-        snprintf(buffer, 4095, "Status message: %s", rst_msg);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5580
-        scr_WriteIncomingMessage(bjid, buffer,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5581
-                                 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5582
-      }
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  5583
-      if (style == style_detail) {
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5584
-        enum imrole role = buddy_getrole(bud, p_res->data);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5585
-        enum imaffiliation affil = buddy_getaffil(bud, p_res->data);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5586
-
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5587
-        snprintf(buffer, 4095, "Role: %s", strrole[role]);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5588
-        scr_WriteIncomingMessage(bjid, buffer,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5589
-                                 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5590
-        if (affil != affil_none) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5591
-          snprintf(buffer, 4095, "Affiliat.: %s", straffil[affil]);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5592
-          scr_WriteIncomingMessage(bjid, buffer,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5593
-                                   0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5594
-        }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5595
-      }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5596
-    }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5597
-    g_free(p_res->data);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5598
-  }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5599
-  g_slist_free(resources);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5600
-  g_slice_free1(4096, buffer);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5601
-}
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5602
+//
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5603
+//  /rename
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5604
+//
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5605
 
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5606
 static void move_group_member(gpointer bud, void *groupnamedata)
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5607
 {
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5608
@@ -2128,13 +2955,13 @@
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5609
 
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5610
   groupname = (char *)groupnamedata;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5611
 
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5612
-  bjid = buddy_getjid(bud);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5613
-  name = buddy_getname(bud);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5614
-  type = buddy_gettype(bud);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5615
+  bjid   = buddy_getjid(bud);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5616
+  name   = buddy_getname(bud);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5617
+  type   = buddy_gettype(bud);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5618
   on_srv = buddy_getonserverflag(bud);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5619
 
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5620
   if (on_srv)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5621
-    xmpp_updatebuddy(bjid, name, *groupname ? groupname : NULL);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5622
+    xmpp_updatebuddy(bjid, name, groupname);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5623
   else {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5624
     buddy_setgroup(bud, (char *)groupname);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5625
     if ((type & ROSTER_TYPE_ROOM) && xmpp_is_bookmarked(bjid) &&
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5626
@@ -2143,32 +2970,52 @@
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5627
   }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5628
 }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5629
 
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5630
-static void do_rename(char *arg)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5631
+// command
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5632
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5633
+static gchar *do_rename (const cmdopts_t *command, cmdarg_value_t *values);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5634
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5635
+typedef enum {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5636
+  pos_rename_jid   = 0,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5637
+  pos_rename_name  = 1,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5638
+  pos_rename_reset = 2,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5639
+} pos_rename_t;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5640
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5641
+// XXX:
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5642
+//  * custom type for completion by existing roster entry names
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5643
+static cmdopts_t def_rename = {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5644
+  "rename",
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5645
+  cmd_default,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5646
+  NULL,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5647
+  do_rename,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5648
+  (cmdopt_t[5]){
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5649
+    { 'r', "reset", { "reset", pos_rename_reset, cmdarg_switch, NULL, NULL } },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5650
+    { 'n', "name",  { "name",  pos_rename_jid, cmdarg_chreq, ".", &cmdarg_type_roster_name, (gpointer)cmdarg_roster_normal|cmdarg_roster_name } },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5651
+    { 'g', "group", { "group", pos_rename_jid, cmdarg_chreq, ".", &cmdarg_type_roster_group } },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5652
+    { 'j', "jid",   { "jid",   pos_rename_jid, cmdarg_chreq, ".", &cmdarg_type_roster_bjid, (gpointer)cmdarg_roster_entity } },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5653
+    {0}
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5654
+  },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5655
+  (cmdarg_t[2]){
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5656
+    { "new name", pos_rename_name, cmdarg_chreq, NULL, &cmdarg_type_nonspace },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5657
+    {NULL}
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5658
+  },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5659
+  NULL,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5660
+};
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5661
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5662
+static gchar *do_rename (const cmdopts_t *command, cmdarg_value_t *values)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5663
 {
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5664
   gpointer bud;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5665
-  const char *bjid, *group;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5666
+  const char *bjid;
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5667
   guint type, on_srv;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5668
-  char *newname, *p;
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5669
-  char *name_utf8;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5670
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5671
-  if (!current_buddy)
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5672
-    return;
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5673
-  bud = BUDDATA(current_buddy);
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5674
+  char *newname = NULL;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5675
+  gboolean reset;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5676
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5677
+  bud     = values[pos_rename_jid].value.rjid.bud;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5678
+  reset   = values[pos_rename_reset].value.swc;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5679
+  newname = values[pos_rename_name].value.arg;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5680
 
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5681
   bjid   = buddy_getjid(bud);
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5682
-  group  = buddy_getgroupname(bud);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5683
+  on_srv = buddy_getonserverflag(bud);
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5684
   type   = buddy_gettype(bud);
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5685
-  on_srv = buddy_getonserverflag(bud);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5686
-
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5687
-  if (type & ROSTER_TYPE_SPECIAL) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5688
-    scr_LogPrint(LPRINT_NORMAL, "You can't rename this item.");
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5689
-    return;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5690
-  }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5691
-
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5692
-  if (!*arg && !(type & ROSTER_TYPE_GROUP)) {
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5693
-    scr_LogPrint(LPRINT_NORMAL, "Please specify a new name.");
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5694
-    return;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5695
-  }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5696
 
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5697
   //if (!(type & ROSTER_TYPE_GROUP) && !on_srv) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5698
   //  scr_LogPrint(LPRINT_NORMAL,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5699
@@ -2181,90 +3028,88 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5700
   //  }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5701
   //}
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5702
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5703
-  newname = g_strdup(arg);
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5704
-  // Remove trailing space
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5705
-  for (p = newname; *p; p++) ;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5706
-  while (p > newname && *p == ' ') *p = 0;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5707
-
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5708
-  strip_arg_special_chars(newname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5709
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5710
-  name_utf8 = to_utf8(newname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5711
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5712
   if (type & ROSTER_TYPE_GROUP) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5713
     // Rename a whole group
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5714
-    foreach_group_member(bud, &move_group_member, name_utf8);
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5715
+    foreach_group_member(bud, &move_group_member, (reset ? NULL : newname));
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5716
     // 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
  5717
     // disappear when we receive the server answer.
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5718
-    scr_roster_up_down(-1, 1);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5719
+    // XXX: we can now "disappear" arbitrary buddy/group.
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5720
+    // Probably, we need some hook, when something appears/disappears,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5721
+    // so that ui can know and react to that when it really happens, rather
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5722
+    // than doing this here.
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5723
+    //scr_roster_up_down(-1, 1);
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5724
   } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5725
     // Rename a single buddy
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5726
-    guint del_name = 0;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5727
-    if (!*newname || !strcmp(arg, "-"))
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5728
-      del_name = TRUE;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5729
     if (on_srv) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5730
-      /* 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
  5731
-       * 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
  5732
-       */
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5733
-      xmpp_updatebuddy(bjid, (del_name ? NULL : name_utf8),
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5734
+      const char *group = buddy_getgroupname(bud);
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5735
+      // 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
  5736
+      // 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
  5737
+      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
  5738
                        group && *group ? group : NULL);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5739
     } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5740
       // 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
  5741
-      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
  5742
+      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
  5743
       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
  5744
           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
  5745
         room_bookmark(bud, NULL);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5746
     }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5747
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5748
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5749
-  g_free(name_utf8);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5750
-  g_free(newname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5751
   update_roster = TRUE;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5752
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5753
+  return NULL;
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5754
 }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5755
 
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5756
-static void do_move(char *arg)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5757
+static gchar *do_move (const cmdopts_t *command, cmdarg_value_t *values);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5758
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5759
+typedef enum {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5760
+  pos_move_jid   = 0,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5761
+  pos_move_name  = 1,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5762
+} pos_move_t;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5763
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5764
+// XXX:
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5765
+//  * custom type for completion by existing roster group names
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5766
+//    (share with rename, using types in chkdata?)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5767
+static cmdopts_t def_move = {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5768
+  "move",
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5769
+  cmd_default,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5770
+  NULL,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5771
+  do_move,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5772
+  (cmdopt_t[5]){
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5773
+    { 'n', "name",  { "name",  pos_move_jid, cmdarg_chreq, ".", &cmdarg_type_roster_name, (gpointer)cmdarg_roster_entity|cmdarg_roster_name } },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5774
+    { 'j', "jid",   { "jid",   pos_move_jid, cmdarg_chreq, ".", &cmdarg_type_roster_bjid, (gpointer)cmdarg_roster_entity } },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5775
+    {0}
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5776
+  },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5777
+  (cmdarg_t[2]){
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5778
+    { "new name", pos_move_name, cmdarg_eol|cmdarg_required, NULL, &cmdarg_type_nonspace },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5779
+    {NULL}
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5780
+  },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5781
+  NULL,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5782
+};
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5783
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5784
+static gchar *do_move (const cmdopts_t *command, cmdarg_value_t *values)
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5785
 {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5786
   gpointer bud;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5787
   const char *bjid, *name, *oldgroupname;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5788
   guint type, on_srv;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5789
-  char *newgroupname, *p;
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5790
-  char *group_utf8;
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5791
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5792
-  if (!current_buddy)
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5793
-    return;
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5794
-  bud = BUDDATA(current_buddy);
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5795
-
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5796
-  bjid = buddy_getjid(bud);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5797
-  name = buddy_getname(bud);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5798
-  type = buddy_gettype(bud);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5799
-  on_srv = buddy_getonserverflag(bud);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5800
-
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5801
+  char *newgroupname;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5802
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5803
+  bud          = values[pos_move_jid].value.rjid.bud;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5804
+  newgroupname = values[pos_move_name].value.arg;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5805
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5806
+  bjid         = buddy_getjid(bud);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5807
+  name         = buddy_getname(bud);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5808
+  type         = buddy_gettype(bud);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5809
+  on_srv       = buddy_getonserverflag(bud);
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5810
   oldgroupname = buddy_getgroupname(bud);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5811
 
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5812
-  if (type & ROSTER_TYPE_GROUP) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5813
-    scr_LogPrint(LPRINT_NORMAL, "You can't move groups!");
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5814
-    return;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5815
-  }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5816
-  if (type & ROSTER_TYPE_SPECIAL) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5817
-    scr_LogPrint(LPRINT_NORMAL, "You can't move this item.");
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5818
-    return;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5819
-  }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5820
-
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5821
-  newgroupname = g_strdup(arg);
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5822
-  // Remove trailing space
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5823
-  for (p = newgroupname; *p; p++) ;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5824
-  while (p > newgroupname && *p == ' ') *p-- = 0;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5825
-
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5826
-  strip_arg_special_chars(newgroupname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5827
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5828
-  group_utf8 = to_utf8(newgroupname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5829
-  if (strcmp(oldgroupname, group_utf8)) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5830
+  if (strcmp(oldgroupname, newgroupname)) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5831
     if (on_srv) {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5832
-      xmpp_updatebuddy(bjid, name, *group_utf8 ? group_utf8 : NULL);
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5833
-      scr_roster_up_down(-1, 1);
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5834
-
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5835
-      /* 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
  5836
-       * 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
  5837
-       */
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5838
+      xmpp_updatebuddy(bjid, name, newgroupname);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5839
+      // XXX see /roster
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5840
+      //scr_roster_up_down(-1, 1);
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5841
+      // 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
  5842
+      // 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
  5843
     } else {
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5844
       // 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
  5845
       guint msgflag;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5846
@@ -2276,7 +3121,7 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5847
       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
  5848
       if (msgflag)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5849
         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
  5850
-      buddy_setgroup(bud, group_utf8);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5851
+      buddy_setgroup(bud, newgroupname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5852
       if (msgflag)
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5853
         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
  5854
       if ((type & ROSTER_TYPE_ROOM) && xmpp_is_bookmarked(bjid) &&
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5855
@@ -2285,33 +3130,160 @@
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5856
     }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5857
   }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5858
 
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5859
-  g_free(group_utf8);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5860
-  g_free(newgroupname);
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5861
   update_roster = TRUE;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5862
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5863
+  return NULL;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5864
 }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5865
 
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5866
-static void list_option_cb(char *k, char *v, void *f)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5867
+//
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5868
+//  /set
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5869
+//
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5870
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5871
+static gchar *do_set (const cmdopts_t *command, cmdarg_value_t *values);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5872
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5873
+typedef enum {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5874
+  pos_set_assignment = 0,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5875
+  pos_set_reset      = 1,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5876
+  pos_set_file       = 2,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5877
+} pos_set_t;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5878
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5879
+static cmdopts_t *def_set = {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5880
+  "set",
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5881
+  cmd_safe,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5882
+  NULL,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5883
+  do_setting,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5884
+  (cmdopt_t[3]){
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5885
+    { 'd', "dump",  { "filename", pos_set_file,  cmdarg_required, NULL, &cmdarg_type_filename } },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5886
+    { 'r', "reset", { "reset",    pos_set_reset, cmdarg_trigger,  NULL, NULL } },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5887
+    {0}
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5888
+  },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5889
+  (cmdarg_t[2]){
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5890
+    { "assignment", pos_set_assignment, cmdarg_eol|cmdarg_required, NULL, &cmdarg_type_assignment },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5891
+    {NULL}
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5892
+  },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5893
+  NULL,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5894
+  (gpointer)SETTINGS_TYPE_OPTION
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5895
+};
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5896
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5897
+static cmdopts_t *def_alias = {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5898
+  "alias",
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5899
+  cmd_safe,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5900
+  NULL,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5901
+  do_setting,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5902
+  (cmdopt_t[3]){
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5903
+    { 'd', "dump",  { "filename", pos_set_file,  cmdarg_required, NULL, &cmdarg_type_filename } },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5904
+    { 'r', "reset", { "reset",    pos_set_reset, cmdarg_trigger,  NULL, NULL } },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5905
+    {0}
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5906
+  },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5907
+  (cmdarg_t[2]){
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5908
+    { "assignment", pos_set_assignment, cmdarg_eol|cmdarg_required, NULL, &cmdarg_type_assignment },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5909
+    {NULL}
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5910
+  },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5911
+  NULL,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5912
+  (gpointer)SETTINGS_TYPE_ALIAS
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5913
+};
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5914
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5915
+static cmdopts_t *def_bind = {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5916
+  "bind",
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5917
+  cmd_safe,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5918
+  NULL,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5919
+  do_setting,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5920
+  (cmdopt_t[3]){
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5921
+    { 'd', "dump",  { "filename", pos_set_file,  cmdarg_required, NULL, &cmdarg_type_filename } },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5922
+    { 'r', "reset", { "reset",    pos_set_reset, cmdarg_trigger,  NULL, NULL } },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5923
+    {0}
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5924
+  },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5925
+  (cmdarg_t[2]){
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5926
+    { "assignment", pos_set_assignment, cmdarg_eol|cmdarg_required, NULL, &cmdarg_type_assignment },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5927
+    {NULL}
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5928
+  },
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5929
+  NULL,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5930
+  (gpointer)SETTINGS_TYPE_BINDING
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5931
+};
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5932
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5933
+static const setting_cb_t def_set_data = {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5934
+  SETTINGS_TYPE_OPTION,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5935
+  "%%-%us = [%%s]",
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5936
+  "No options found",
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5937
+  "Option %s is not set",
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5938
+  "%s = [%s]",
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5939
+  "set %%-%us = %%s",
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5940
+};
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5941
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5942
+static void settings_build_namelist_cb (char *k, char *v, void *f)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5943
 {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5944
   GSList **list = f;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5945
   *list = g_slist_insert_sorted(*list, k, (GCompareFunc)strcmp);
72
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5946
 }
99d64d6ebe89 [cmdopts] Convert /rename and /move, add params for automation
Myhailo Danylenko <isbear@ukrpost.net>
parents: 71
diff changeset
  5947
 
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5948
-static void do_set(char *arg)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5949
+static void setting_dump_to_file_cb (char *key, char *value, void *userdata)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5950
 {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5951
-  guint assign;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5952
-  gchar *option, *value;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5953
-  gchar *option_utf8;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5954
-
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5955
-  if (!*arg) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5956
-    // list all set options
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5957
-    GSList *list = NULL;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5958
-    // Get sorted list of keys
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5959
-    settings_foreach(SETTINGS_TYPE_OPTION, list_option_cb, &list);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5960
+  // foo cb = ...;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5961
+  GString *line = cb....;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5962
+  // foo file = cb....;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5963
+  g_string_printf (line, "%s %s = \"", command -> name, key);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5964
+  // unsecape value
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5965
+  key = value;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5966
+  do {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5967
+    if (*key == '"' || *key == '\\') {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5968
+      g_string_append_len (line, value, key - value);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5969
+      g_string_append_c (line, '\\');
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5970
+      value = key;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5971
+      key ++;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5972
+    } else if (*key == '\0') {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5973
+      g_string_append_len (line, value, key - value);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5974
+    } else {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5975
+      key ++;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5976
+    }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5977
+  } while (*key);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5978
+  g_string_append_c (line, '"');
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5979
+  // write the line here
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5980
+}
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5981
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5982
+// eol      = as is
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5983
+// plain    = only one word
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5984
+// catchall = backescape quotes/escapes
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5985
+// default  = quote
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5986
+static void cmdarg_unescape (
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5987
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5988
+static gchar *do_setting (const cmdopts_t *command, cmdarg_value_t *values)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5989
+{
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5990
+  gchar    *option    = values[pos_set_assignment].value.assign.key;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5991
+  gchar    *value     = values[pos_set_assignment].value.assign.value;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5992
+  gboolean assignment = values[pos_set_assignment].value.assign.assignment;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5993
+  guint    stype     = (guint)(command -> userdata);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5994
+  gboolean reset = XXX;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5995
+  const char *template = "%%-%us = [%%s]";
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5996
+  const char *msg1 = "No options found.";
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5997
+  const char *msg2 = "Option %s is not set";
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5998
+  const char *msg3 = "%s = [%s]";
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  5999
+  gchar *filename = values[pos_set_filename].value.fname.local;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6000
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6001
+    // open file here
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6002
+    GString *line = g_string_new (NULL);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6003
+    // foo cb = {..., line};
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6004
+    if (!option) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6005
+      settings_foreach(stype, settings_dump_to_file_cb, cb);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6006
+    } else {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6007
+      settings_dump_to_file_cb (option, settings_get (stype, option), cb);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6008
+    }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6009
+    g_string_free (line, TRUE);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6010
+    // close file here
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6011
+  }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6012
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6013
+  if (option == NULL) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6014
+    GSList *list  = NULL;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6015
+    
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6016
+    settings_foreach(stype, settings_build_namelist_cb, &list);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6017
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6018
     if (list) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6019
-      gsize max = 0;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6020
-      gsize maxmax = scr_gettextwidth() / 3;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6021
+      gsize  max    = 0;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6022
+      gsize  maxmax = scr_gettextwidth() / 3;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6023
       GSList *lel;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6024
-      gchar *format;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6025
+      gchar  *format;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6026
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6027
+      // Get sorted list of keys
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6028
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6029
       // Find out maximum key length
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6030
       for (lel = list; lel; lel = lel->next) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6031
         const gchar *key = lel->data;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6032
@@ -2324,50 +3296,39 @@
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6033
           }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6034
         }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6035
       }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6036
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6037
       // Print out list of options
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6038
-      format = g_strdup_printf("%%-%us = [%%s]", (unsigned)max);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6039
+      format = g_strdup_printf(template, (unsigned)max);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6040
       for (lel = list; lel; lel = lel->next) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6041
         const gchar *key = lel->data;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6042
-        scr_LogPrint(LPRINT_NORMAL, format, key, settings_opt_get(key));
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6043
+        scr_log_print(LPRINT_NORMAL, format, key, settings_get(stype, key));
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6044
       }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6045
       g_free(format);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6046
       scr_setmsgflag_if_needed(SPECIAL_BUFFER_STATUS_ID, TRUE);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6047
       scr_setattentionflag_if_needed(SPECIAL_BUFFER_STATUS_ID, TRUE,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6048
                                  ROSTER_UI_PRIO_STATUS_WIN_MESSAGE, prio_max);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6049
-    } else
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6050
-      scr_LogPrint(LPRINT_NORMAL, "No options found.");
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6051
-    return;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6052
+    } else {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6053
+      scr_log_print (LPRINT_NORMAL, "No options found.");
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6054
+    }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6055
+  } else if (value == NULL && !reset) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6056
+    const char *val = settings_opt_get(option);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6057
+    if (val)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6058
+      scr_LogPrint(LPRINT_NORMAL, "%s = [%s]", option, val);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6059
+    else
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6060
+      scr_LogPrint(LPRINT_NORMAL, "Option %s is not set", option);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6061
+  } else {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6062
+    // Update the option
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6063
+    // Maybe some options should be protected when user is connected (server,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6064
+    // username, etc.).  And we should catch some options here, too
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6065
+    // (hide_offline_buddies for ex.)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6066
+    if (!value) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6067
+      settings_del(stype, option);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6068
+    } else {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6069
+      settings_set(stype, option, value);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6070
+    }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6071
   }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6072
 
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6073
-  assign = parse_assigment(arg, &option, &value);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6074
-  if (!option) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6075
-    scr_LogPrint(LPRINT_NORMAL, "Set what option?");
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6076
-    return;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6077
-  }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6078
-  option_utf8 = to_utf8(option);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6079
-  g_free(option);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6080
-  if (!assign) {  // This is a query
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6081
-    const char *val = settings_opt_get(option_utf8);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6082
-    if (val)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6083
-      scr_LogPrint(LPRINT_NORMAL, "%s = [%s]", option_utf8, val);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6084
-    else
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6085
-      scr_LogPrint(LPRINT_NORMAL, "Option %s is not set", option_utf8);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6086
-    g_free(option_utf8);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6087
-    return;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6088
-  }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6089
-  // Update the option
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6090
-  // Maybe some options should be protected when user is connected (server,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6091
-  // username, etc.).  And we should catch some options here, too
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6092
-  // (hide_offline_buddies for ex.)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6093
-  if (!value) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6094
-    settings_del(SETTINGS_TYPE_OPTION, option_utf8);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6095
-  } else {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6096
-    gchar *value_utf8 = to_utf8(value);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6097
-    settings_set(SETTINGS_TYPE_OPTION, option_utf8, value_utf8);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6098
-    g_free(value_utf8);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6099
-    g_free(value);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6100
-  }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6101
-  g_free(option_utf8);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6102
+  return NULL;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6103
 }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6104
 
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6105
 static void dump_alias(char *k, char *v, void *param)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6106
@@ -2466,52 +3427,37 @@
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6107
   g_free(k_code);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6108
 }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6109
 
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6110
+#if 0
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6111
+
73
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6112
 static void do_rawxml(char *arg)
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6113
 {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6114
-  char **paramlst;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6115
-  char *subcmd;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6116
+  cmdopts_t options = {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6117
+    "rawxml",
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6118
+    NULL,
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6119
+    (cmdarg_t[1]){
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6120
+      { CMDOPT_REQUIRED | CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6121
+    },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6122
+    (cmdopts_t[1]){
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6123
+      { "send", NULL,
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6124
+        (cmdarg_t[1]){
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6125
+          { CMDOPT_REQUIRED | CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST,
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6126
+            { .arg = NULL } },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6127
+        },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6128
+        NULL },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6129
+    },
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6130
+  };
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6131
 
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6132
   if (!xmpp_is_online()) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6133
     scr_LogPrint(LPRINT_NORMAL, "You are not connected.");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6134
     return;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6135
   }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6136
 
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6137
-  paramlst = split_arg(arg, 2, 1); // subcmd, arg
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6138
-  subcmd = *paramlst;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6139
-  arg = *(paramlst+1);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6140
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6141
-  if (!subcmd || !*subcmd) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6142
-    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
  6143
-                 " before using /rawxml :-)");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6144
-    free_arg_lst(paramlst);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6145
+  if (cmdopts_parse(arg, &options))
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6146
     return;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6147
-  }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6148
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6149
-  if (!strcasecmp(subcmd, "send"))  {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6150
-    gchar *buffer;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6151
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6152
-    if (!subcmd || !*subcmd) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6153
-      scr_LogPrint(LPRINT_NORMAL, "Missing parameter.");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6154
-      free_arg_lst(paramlst);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6155
-      return;
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6156
-    }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6157
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6158
-    // 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
  6159
-    // 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
  6160
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6161
-    buffer = to_utf8(arg);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6162
-    if (buffer) {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6163
-      scr_LogPrint(LPRINT_NORMAL, "Sending XML string");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6164
-      lm_connection_send_raw(lconnection, buffer, NULL);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6165
-      g_free(buffer);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6166
-    } else {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6167
-      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
  6168
-    }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6169
-  } else {
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6170
-    scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6171
-  }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6172
-
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6173
-  free_arg_lst(paramlst);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6174
+
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6175
+  scr_LogPrint(LPRINT_NORMAL, "Sending XML string");
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6176
+  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
  6177
+  cmdopts_free(&options);
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6178
 }
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6179
 
feae79fcc408 [cmdopts] Convert /rawxml, fix /buffer arguments
Myhailo Danylenko <isbear@ukrpost.net>
parents: 72
diff changeset
  6180
 //  check_room_subcommand(arg, param_needed, buddy_must_be_a_room)
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6181
@@ -2815,6 +3761,8 @@
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6182
   free_arg_lst(paramlst);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6183
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6184
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6185
+#endif
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6186
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6187
 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
  6188
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6189
   gchar *roomid, *desc;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6190
@@ -2833,6 +3781,8 @@
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6191
   g_free(roomid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6192
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6193
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6194
+#if 0
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6195
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6196
 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
  6197
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6198
   if (!buddy_getinsideroom(bud)) {
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6199
@@ -2874,7 +3824,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  6200
   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
  6201
   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
  6202
   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
  6203
-  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
  6204
+  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
  6205
   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
  6206
   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
  6207
   free_arg_lst(paramlst);
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6208
@@ -3052,6 +4002,8 @@
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6209
   free_arg_lst(paramlst);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6210
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6211
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6212
+#endif
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6213
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6214
 //  cmd_room_whois(..)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6215
 // 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
  6216
 // Please note that usernick is expected in UTF-8 locale iff interactive is
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6217
@@ -3209,6 +4161,8 @@
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6218
   g_free (tmpnick);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6219
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6220
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6221
+#if 0
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6222
+
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6223
 static void display_all_bookmarks(void)
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6224
 {
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6225
   GSList *bm, *bmp;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6226
@@ -3288,8 +4242,288 @@
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6227
 #endif
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6228
 }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6229
 
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6230
+enum room_names_style_t {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6231
+  room_names_style_normal = 0,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6232
+  room_names_style_detail,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6233
+  room_names_style_short,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6234
+  room_names_style_quiet,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6235
+  room_names_style_compact,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6236
+};
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6237
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6238
+// room_names() is a variation of do_info(), for chatrooms only
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6239
+static void room_names(gpointer bud, enum room_names_style_t style)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6240
+{
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6241
+  const char *bjid;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6242
+  char *buffer;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6243
+  GSList *resources, *p_res;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6244
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6245
+  // Enter chat mode
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6246
+  scr_set_chatmode(TRUE);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6247
+  scr_show_buddy_window();
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6248
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6249
+  bjid = buddy_getjid(bud);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6250
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6251
+  buffer = g_slice_alloc(4096);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6252
+  strncpy(buffer, "Room members:", 127);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6253
+  scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO, 0);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6254
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6255
+  resources = buddy_getresources(bud);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6256
+  for (p_res = resources ; p_res ; p_res = g_slist_next(p_res)) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6257
+    enum imstatus rstatus;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6258
+    const char *rst_msg;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6259
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6260
+    rstatus = buddy_getstatus(bud, p_res->data);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6261
+    rst_msg = buddy_getstatusmsg(bud, p_res->data);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6262
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6263
+    if (style == room_names_style_short) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6264
+      snprintf(buffer, 4095, "[%c] %s%s%s", imstatus2char[rstatus],
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6265
+               (char*)p_res->data,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6266
+               rst_msg ? " -- " : "", rst_msg ? rst_msg : "");
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6267
+      scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO, 0);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6268
+    } else if (style == room_names_style_compact) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6269
+        enum imrole role = buddy_getrole(bud, p_res->data);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6270
+        enum imaffiliation affil = buddy_getaffil(bud, p_res->data);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6271
+        bool showaffil = (affil != affil_none);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6272
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6273
+        snprintf(buffer, 4095, "[%c] %s (%s%s%s)",
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6274
+                 imstatus2char[rstatus], (char*)p_res->data,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6275
+                 showaffil ? straffil[affil] : "\0",
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6276
+                 showaffil ? "/" : "\0",
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6277
+                 strrole[role]);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6278
+        scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO, 0);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6279
+      } else {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6280
+      // (Style "normal", "detail" or "quiet")
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6281
+      snprintf(buffer, 4095, "[%c] %s", imstatus2char[rstatus],
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6282
+               (char*)p_res->data);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6283
+      scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO, 0);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6284
+      if (rst_msg && style != room_names_style_quiet) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6285
+        snprintf(buffer, 4095, "Status message: %s", rst_msg);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6286
+        scr_WriteIncomingMessage(bjid, buffer,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6287
+                                 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6288
+      }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6289
+      if (style == room_names_style_detail) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6290
+        enum imrole role = buddy_getrole(bud, p_res->data);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6291
+        enum imaffiliation affil = buddy_getaffil(bud, p_res->data);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6292
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6293
+        snprintf(buffer, 4095, "Role: %s", strrole[role]);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6294
+        scr_WriteIncomingMessage(bjid, buffer,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6295
+                                 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6296
+        if (affil != affil_none) {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6297
+          snprintf(buffer, 4095, "Affiliat.: %s", straffil[affil]);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6298
+          scr_WriteIncomingMessage(bjid, buffer,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6299
+                                   0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6300
+        }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6301
+      }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6302
+    }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6303
+    g_free(p_res->data);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6304
+  }
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6305
+  g_slist_free(resources);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6306
+  g_slice_free1(4096, buffer);
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6307
+}
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6308
+
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6309
 static void do_room(char *arg)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6310
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6311
+  enum room_scmd_t {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6312
+    room_scmd_join, room_scmd_leave,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6313
+    room_scmd_names,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6314
+    room_scmd_nick,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6315
+    room_scmd_privmsg,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6316
+    room_scmd_remove,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6317
+    room_scmd_topic,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6318
+    room_scmd_unlock,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6319
+    room_scmd_destroy,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6320
+    room_scmd_whois,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6321
+    room_scmd_ban, room_scmd_unban,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6322
+    room_scmd_invite, room_scmd_kick,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6323
+    room_scmd_role, room_scmd_affil,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6324
+    room_scmd_setopt, room_scmd_bookmark,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6325
+  } subcmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6326
+  cmdopts_t options = {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6327
+    "room",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6328
+    (cmdopt_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6329
+      { CMDOPT_LAST, 'j', "jid", { .opt = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6330
+    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6331
+    (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6332
+      { CMDOPT_REQUIRED | CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6333
+    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6334
+    (cmdopts_t[18]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6335
+      { "join", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6336
+        (cmdarg_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6337
+          { 0,           { .arg = "." } },  // room jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6338
+          { 0,           { .arg = NULL } }, // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6339
+          { CMDOPT_LAST, { .arg = NULL } }, // password
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6340
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6341
+        NULL, (gpointer)room_scmd_join, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6342
+      { "leave", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6343
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6344
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6345
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6346
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6347
+        NULL, (gpointer)room_scmd_join, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6348
+      { "names",
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6349
+        (cmdopt_t[4]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6350
+          { CMDOPT_SWITCH,               'd', "detail",  { .swc = 0 } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6351
+          { CMDOPT_SWITCH,               's', "short",   { .swc = 0 } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6352
+          { CMDOPT_SWITCH,               'q', "quiet",   { .swc = 0 } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6353
+          { CMDOPT_SWITCH | CMDOPT_LAST, 'c', "compact", { .swc = 0 } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6354
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6355
+        NULL, NULL, (gpointe)room_scmd_names, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6356
+      { "nick", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6357
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6358
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6359
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6360
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6361
+        NULL, (gpointer)room_scmd_nick, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6362
+      { "privmsg", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6363
+        (cmdarg_t[2]) {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6364
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6365
+          { CMDOPT_REQUIRED, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6366
+          // message
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6367
+          { CMDOPT_REQUIRED | CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6368
+            { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6369
+        }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6370
+        NULL, (gpointer)room_scmd_privmsg, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6371
+      { "remove", NULL, NULL, NULL, (gpointer)room_scmd_remove, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6372
+      { "topic", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6373
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6374
+          // topic
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6375
+          { CMDOPT_REQUIRED | CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6376
+            { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6377
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6378
+        NULL, (gpointer)room_scmd_topic, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6379
+      { "unlock", NULL, NULL, NULL, (gpointer)room_scmd_unlock, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6380
+      { "destroy", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6381
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6382
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6383
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6384
+        NULL, (gpointer)room_scmd_destroy, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6385
+      { "whois", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6386
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6387
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6388
+          { CMDOPT_REQUIRED | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6389
+        }, NULL, (gpointer)room_scmd_whois, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6390
+      { "ban", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6391
+        (cmdarg_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6392
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6393
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6394
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6395
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6396
+        }, NULL, (gpointer)room_scmd_ban, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6397
+      { "unban", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6398
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6399
+          // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6400
+          { CMDOPT_REQUIRED | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6401
+        }, NULL, (gpointer)room_scmd_unban, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6402
+      { "invite", NULL, // XXX [-d|direct] ?
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6403
+        (cmdarg_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6404
+          // jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6405
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6406
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6407
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6408
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6409
+        NULL, (gpointer)room_scmd_invite, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6410
+      { "kick", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6411
+        (cmdarg_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6412
+          // jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6413
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6414
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6415
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6416
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6417
+        NULL, (gpointer)room_scmd_kick, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6418
+      { "role", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6419
+        (cmdarg_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6420
+          // jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6421
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6422
+          // role
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6423
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6424
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6425
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6426
+        }, NULL, (gpointer)room_scmd_role, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6427
+      { "affil", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6428
+        (cmdarg_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6429
+          // jid
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6430
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6431
+          // affiliation
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6432
+          { CMDOPT_REQUIRED,                              { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6433
+          // reason
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6434
+          { CMDOPT_CATCHALL | CMDOPT_PLAIN | CMDOPT_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6435
+        }, NULL, (gpointer)room_scmd_affil, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6436
+      // 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
  6437
+      { "setopt", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6438
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6439
+          { CMDOPT_REQUIRED | CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6440
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6441
+        (cmdopts_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6442
+          { "print_status", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6443
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6444
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6445
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6446
+            (cmdopts_t[4]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6447
+              { "default",    NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6448
+              { "none",       NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6449
+              { "in_and_out", NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6450
+              { "all",        NULL, NULL, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6451
+            }, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6452
+          { "auto_whois", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6453
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6454
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6455
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6456
+            (cmdopts_t[3]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6457
+              { "default", NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6458
+              { "off",     NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6459
+              { "on",      NULL, NULL, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6460
+            }, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6461
+          { "flag_joins", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6462
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6463
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6464
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6465
+            (cmdopts_t[4]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6466
+              { "default", NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6467
+              { "none",    NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6468
+              { "joins",   NULL, NULL, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6469
+              { "all",     NULL, NULL, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6470
+            }, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6471
+        }, (gpointer)room_scmd_setopt, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6472
+      { "bookmark", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6473
+        (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6474
+          { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6475
+        },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6476
+        (cmdopts_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6477
+          { "add", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6478
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6479
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6480
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6481
+            (cmdopts_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6482
+              { "+autojoin", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6483
+                (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6484
+                  // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6485
+                  { CMDARG_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6486
+                }, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6487
+              { "-autojoin", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6488
+                (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6489
+                  // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6490
+                  { CMDARG_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6491
+                }, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6492
+            }, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6493
+          { "del", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6494
+            (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6495
+              { CMDOPT_SUBCOMMAND | CMDOPT_LAST, { .cmd = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6496
+            },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6497
+            (cmdopts_t[2]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6498
+              { "+autojoin", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6499
+                (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6500
+                  // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6501
+                  { CMDARG_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6502
+                }, NULL, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6503
+              { "-autojoin", NULL,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6504
+                (cmdarg_t[1]){
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6505
+                  // nick
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6506
+                  { CMDARG_LAST, { .arg = NULL } },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6507
+                }, NULL, NULL, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6508
+            }, NULL, 0 },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6509
+        }, (gpointer)room_scmd_bookmark, CMDOPT_LAST },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6510
+    },
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6511
+  };
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6512
   char **paramlst;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6513
   char *subcmd;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6514
   gpointer bud;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6515
@@ -3347,7 +4581,7 @@
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  6516
       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
  6517
   } 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
  6518
     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
  6519
-      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
  6520
+      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
  6521
   } 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
  6522
     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
  6523
       room_nick(bud, arg);
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6524
@@ -4162,5 +5396,6 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6525
   }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6526
   mcabber_set_terminate_ui();
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6527
 }
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6528
+#endif
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6529
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6530
 /* vim: set expandtab cindent cinoptions=>2\:2(0 sw=2 ts=2:  For Vim users... */
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  6531
diff -r 7a77fde8f7ee mcabber/mcabber/commands.h
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  6532
--- a/mcabber/mcabber/commands.h	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  6533
+++ b/mcabber/mcabber/commands.h	Thu Aug 22 00:44:41 2013 +0300
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6534
@@ -5,32 +5,394 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6535
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6536
 #include <mcabber/config.h>
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6537
 
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6538
-// Command structure
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6539
+//
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6540
+//  DONE(?):
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6541
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6542
+// * Clustering of options/switches
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6543
+//   - with separate values - just specify the same index
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6544
+//   - 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
  6545
+// * for now we'll do without multi-options.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6546
+// * checks
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6547
+//   - argument type == public struct with name and callbacks, simple!
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6548
+//   - command checks should be just single callbacks
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6549
+//   - argument checker needs:
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6550
+//     - [in] value string (current or default)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6551
+//     - [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
  6552
+//     - [out] replacement value (not necessary string)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6553
+//       - replacement value may need freeing
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6554
+//     - [out] error string
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6555
+//       - that may need freeing
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6556
+//
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6557
+//  TODO:
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6558
+//
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6559
+// * 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
  6560
+//   - 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
  6561
+//   - maybe need separate flag for that
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6562
+// * 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
  6563
+// * Usable documentation in sources/howto
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6564
+// * Changelog entry
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6565
+// * --help
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6566
+//   - use argument type names and clarify, if needed in descriptions
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6567
+//   - command/subcommand descriptions
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6568
+//   - or maybe just do "/help foo"
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6569
+// * Add argument type field and subsystem to check values. Uses so far:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6570
+//   - fjid (handle . and ./resource, perform check_jid_syntax())
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6571
+//   - bjid (handle ., strip resource, perform check_jid_syntax())
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6572
+//   - bjid in roster/buddylist (result - buddy?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6573
+//   - name in roster/buddylist (result - buddy?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6574
+//   - group in roster (result - buddy?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6575
+//   - other non-space string (strip trailing/starting spaces)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6576
+//     - statusmask (restrictive, check symbols)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6577
+//     - jidmask (non-restrictive, compl: inform what jids match)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6578
+//     - search string (non-restrictive, compl: inform what matches, if possible)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6579
+//     - rosternote (non-restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6580
+//     - color (restrictive, semi-defined list)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6581
+//     - nick (non-restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6582
+//     - defined lists (restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6583
+//     - date (restrictive)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6584
+//     - percent (numerical, restrictive)
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6585
+//   - number (result - uint)
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6586
+//   - filename (expand_filename(), g_utf8_to_filename()?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6587
+//   - custom (maybe some helpers for constant stringlists)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6588
+//   - text message (compl: nicks in rooms, dictionary?)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6589
+// * Non-argument checks for commands/subcommands:
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6590
+//   - xmpp_is_online()
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6591
+//   - current_buddy
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6592
+// * commands:
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6593
+//   - 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
  6594
+//   - buffer close now only accepts windows with jid. additional checker, that also allows current 'status' buffer?
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6595
+// * Usable subsystem for completion, based on user-supplied completors
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6596
+// * Interface to history subsystem - command should have a way to inform, that it should not be stored in history.
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6597
+//
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6598
+//  XXX:
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6599
+//
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6600
+// * 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
  6601
+// * allow escaping in options?
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6602
+// * merge cmdopt_t and cmdarg_t?
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6603
+//   - improve the checker error messages
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6604
+//   - extra NULLs to specify in arg definition
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6605
+//   - inconvenient positioning of shortopt/longopt or argname in sequence
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6606
+//   - merge options/arguments?
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6607
+//   - describe values, not opt/args?
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6608
+// * 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
  6609
+//   - requires allocation of values always
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6610
+//   - though there's not that many commands without arguments
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6611
+// * command checker is not quite effective
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6612
+//   - I'd like to run it before allocating anything
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6613
+//   - so far only one of them
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6614
+// * 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
  6615
+//   - separate command/subcommand values and use subcommand callbacks?
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6616
+//   - 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
  6617
+//     (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
  6618
+// * type name generator callback
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6619
+//   for generic types to construct something like "foo|bar|baz"
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6620
+// * [+foo|-foo] support?
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6621
+// * Subcommands with fallback to argument?
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6622
+// * Multivalue options
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6623
+//   - list
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6624
+//     - special checker
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6625
+//     - or run checker multiple times
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6626
+//   - or run command several times
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6627
+//     - what if there are several of such arguments?
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6628
+//
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6629
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6630
+//
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6631
+//  Type predeclarations
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6632
+//
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6633
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6634
+typedef struct cmdopts_struct      cmdopts_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6635
+typedef struct cmdopt_struct       cmdopt_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6636
+typedef struct cmdarg_struct       cmdarg_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6637
+typedef struct cmdarg_type_struct  cmdarg_type_t;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6638
+typedef struct cmdarg_value_struct cmdarg_value_t;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6639
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6640
+//
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6641
+//  Callback type definitions
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6642
+//
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6643
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6644
+// Command execution environment check function.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6645
+// 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
  6646
+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
  6647
+// Command function itself.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6648
+// 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
  6649
+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
  6650
+// Should check value -> value.arg and replace, if needed.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6651
+// Can set cmdarg_freeme flag to request type destructor call.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6652
+// 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
  6653
+typedef gchar *(*cmdarg_checker_t)(cmdarg_value_t *value);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6654
+// Free resources, used in value, if needed.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6655
+typedef void (*cmdarg_destructor_t)(cmdarg_value_t *value);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6656
+// TODO Return possible completions for given argument.
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6657
+typedef void (*cmdarg_completor_t)(void);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6658
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6659
+//
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6660
+//  Data type definitions
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6661
+//
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6662
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6663
+// command description flags
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6664
+typedef enum {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6665
+  cmd_default     = 0x0000, // no flags
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6666
+  cmd_safe        = 0x0001, // command is safe to use in mcabberrc
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6667
+} cmd_flags_t;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6668
+// argument description flags
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6669
+typedef enum {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6670
+  cmdarg_default  = 0x0000, // no flags
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6671
+  cmdarg_catchall = 0x0001, // argument consumes the end of command line
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6672
+  cmdarg_plain    = 0x0002, // quotes and escapes are not processed
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6673
+  cmdarg_check    = 0x0004, // forse checker call on argument
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6674
+  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
  6675
+  cmdarg_subcmd   = 0x0010, // argument is subcommand
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6676
+  cmdarg_switch   = 0x0020, // option without argument, value is count
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6677
+  // shortcuts:
75
17cd00b2e722 [cmdopts] Struggling in chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 74
diff changeset
  6678
+  cmdarg_eol      = 0x0003, // catchall + plain
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6679
+  cmdarg_chreq    = 0x000C, // check + required
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6680
+  cmdarg_special  = 0x0030, // subcmd + switch
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6681
+  cmdarg_trigger  = 0x0024, // switch + check
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6682
+} cmdarg_flags_t;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6683
+// argument value flags (internal)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6684
+typedef enum {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6685
+  cmdval_default  = 0x0000, // no flags
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6686
+  cmdval_visited  = 0x0100, // marks initialized arguments
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6687
+  cmdval_freeme   = 0x0200, // marks argument, that needs freeing
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6688
+} cmdval_flags_t;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6689
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6690
+// command description
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6691
+struct cmdopts_struct {
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6692
+  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
  6693
+  const cmd_flags_t   flags;     // [user,req] safe
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6694
+  const cmd_checker_t check;     // [user,req] checker routine
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6695
+  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
  6696
+  const cmdopt_t      *opts;     // [user,req] options
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6697
+  const cmdarg_t      *args;     // [user,req] arguments
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6698
+  const cmdopts_t     *cmds;     // [user,req] subcommands
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6699
+  gconstpointer       userdata;  // [user]
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6700
+  size_t              valno;     // internal, number of values to allocate
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6701
+};
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6702
+// positional/option argument description
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6703
+struct cmdarg_struct {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6704
+  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
  6705
+  const size_t         pos;      // [user,req] value positional number
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6706
+  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
  6707
+  const char           *defval;  // [user,req] default value (unused for switches)
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6708
+  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
  6709
+  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
  6710
+  gconstpointer        userdata; // [user]
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6711
+};
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6712
+// option description
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6713
+struct cmdopt_struct {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6714
+  const char           shortopt; // [user,req]
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6715
+  const char           *longopt; // [user,req]
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6716
+  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
  6717
+};
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6718
+// argument type description
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6719
+struct cmdarg_type_struct {
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6720
+  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
  6721
+  cmdarg_destructor_t free;      // [user,req] free argument value
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6722
+  cmdarg_completor_t  complete;  // [user,req]
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6723
+};
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6724
+// argument value
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6725
+struct cmdarg_value_struct {
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6726
+  const cmdarg_t *src;           // source of value
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6727
+  cmdval_flags_t flags;          // visited, freeme
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6728
+  union {                        // value:
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6729
+    unsigned long   uint;        // - unsigned integer
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6730
+    long            sint;        // - signed integer
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6731
+    guint           swc;         // - switch count
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6732
+    const gchar     *roarg;      // - XXX default value
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6733
+    gchar           *arg;        // - string argument
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6734
+    const cmdopts_t *cmd;        // - subcommand
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6735
+    struct {                     // - roster jid:
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6736
+      gpointer      bud;         //   - buddy struct
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6737
+      gchar         *resource;   //   - resource (optional)
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6738
+    } rjid;                      // 
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6739
+    struct {                     // - filename
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6740
+      gchar         *utf8;       //   - in utf8
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6741
+      gchar         *local;      //   - in local FS encoding
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6742
+    } fname;                     //
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6743
+    struct {                     // - key [= [value]]
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6744
+      gchar         *key;        //   - key
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6745
+      gchar         *value;      //   - value
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6746
+      gboolean      assignment;  //   - '=' was specified
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6747
+    } assign;                    //
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6748
+    time_t          time;        // - date/time
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6749
+    gpointer        ptr;         // - anything else
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6750
+  } value;                       //
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6751
+};
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6752
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6753
+//
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6754
+//  Public functions
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6755
+//
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6756
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6757
+// add command definition
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6758
+void cmd_define (cmdopts_t *command);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6759
+// remove command definition
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6760
+void cmd_undef (cmdopts_t *command);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6761
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6762
+//  error cmdopts_parse_argument ( startptr, endptr, flags )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6763
+// Parses next argument according to flags and finishes it with zero.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6764
+// Updates current/end pointers. Parsed string MUST be writable.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6765
+// String may shrink in size (quotation/escapes), thus endpointer is also
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6766
+// updated.
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6767
+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
  6768
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6769
+// flags for cmd_execute()
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6770
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6771
+  cmdexe_default        = 0,    // no flags
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6772
+  cmdexe_check_safe     = 1<<0, // we're parsing main config file
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6773
+  cmdexe_check_verbatim = 1<<1, // check for verbatim input mode
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6774
+} cmdexe_flags_t;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6775
+// return codes for cmd_execute() and process_line()
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6776
+typedef enum {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6777
+  cmd_result_ok   = 0,       // all is ok
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6778
+  cmd_result_syntax_error,   // syntax or environment check error
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6779
+  cmd_result_value_error,    // argument value missing or type check error
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6780
+  cmd_result_not_found,      // no such command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6781
+  cmd_result_runtime_error,  // error while executing command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6782
+  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
  6783
+  cmd_result_input,          // [process_line only] line was a message
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6784
+  cmd_result_quit = 255,     // this is hard-coded "quit" command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6785
+} cmd_result_t;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6786
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6787
+//  error cmd_execute ( command, flags )
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6788
+// Checks for "quit", "msay" in verbatim mode, expands aliases, checks command
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6789
+// for safety of execution, parses command's arguments according to definition,
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6790
+// executes command function. Returns cmdexe_result_ok (0) if all was ok.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6791
+// Non-zero values mean, that command was not executed for some reason.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6792
+// 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
  6793
+cmd_result_t cmd_execute (gchar *commandline, cmdexe_flags_t flags);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6794
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6795
+//  process_line(line)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6796
+// 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
  6797
+// 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
  6798
+// local encoding to utf8.
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6799
+// 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
  6800
+// error codes.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6801
+cmd_result_t process_line(const char *line);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6802
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6803
+//
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6804
+//  Command checkers
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6805
+//
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6806
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6807
+// checks if connection is available
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6808
+gchar *cmd_check_online (const cmdopts_t *command, cmdarg_value_t *values);
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6809
+gchar *cmd_check_current_buddy (const cmdopts_t *command, cmdarg_value_t *values);
80
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6810
+
93088d0c8140 Add documentation for cmdopts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 79
diff changeset
  6811
+//
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6812
+//  Standard argument types
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6813
+//
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6814
+
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6815
+// enum for chkdata for roster/jid checkers
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6816
+typedef enum {
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6817
+  cmdarg_roster_notset    = 0x0000,
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6818
+  cmdarg_roster_user      = ROSTER_TYPE_USER,    // 0x0001
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6819
+  cmdarg_roster_group     = ROSTER_TYPE_GROUP,   // 0x0002
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6820
+  cmdarg_roster_agent     = ROSTER_TYPE_AGENT,   // 0x0004
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6821
+  cmdarg_roster_room      = ROSTER_TYPE_ROOM,    // 0x0008
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6822
+  cmdarg_roster_special   = ROSTER_TYPE_SPECIAL, // 0x0010
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6823
+  cmdarg_roster_name      = 0x0100,              // namesearch
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6824
+  cmdarg_roster_activeres = 0x0200,              // active resource
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6825
+  cmdarg_roster_getgroup  = 0x0400,              // group of buddy
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6826
+  // shortcuts:
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6827
+  cmdarg_roster_buddy     = 0x0005, // user + agent (single buddy)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6828
+  cmdarg_roster_entity    = 0x000D, // user + agent + room (xmpp entity)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6829
+  cmdarg_roster_buffer    = 0x001D, // user + agent + room + special (have buffer)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6830
+  cmdarg_roster_normal    = 0x000F, // user + group + agent + room (not special)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6831
+  cmdarg_roster_all       = 0x001F, // user + group + agent + room + special
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6832
+  cmdarg_roster_grouponly = 0x0402, // group + getgroup (search group buddy)
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6833
+  cmdarg_roster_mask      = 0x001F, // all
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6834
+} cmdarg_roster_t;
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6835
+
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6836
+// array entry for chkdata for string2enum checker
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6837
 typedef struct {
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6838
-  char name[32];
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6839
-  const char *help;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6840
-  guint completion_flags[2];
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6841
-  void (*func)(char *);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6842
-  gpointer userdata;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6843
-} cmd;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6844
+  const char *name;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6845
+  int        value;
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6846
+} string2enum_t;
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6847
 
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6848
-void cmd_init(void);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6849
-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
  6850
-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
  6851
-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
  6852
-char *expandalias(const char *line);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6853
-#ifdef MODULES_ENABLE
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6854
-gpointer cmd_del(gpointer id);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6855
-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
  6856
-                 void (*f)(char*), gpointer userdata);
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6857
-gboolean cmd_set_safe(const gchar *name, gboolean safe);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6858
+// destructor, that g_free()s value.arg
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6859
+void cmdarg_free_gfree (cmdarg_value_t *arg);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6860
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6861
+// 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
  6862
+gchar *cmdarg_check_nonspace        (cmdarg_value_t *arg);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6863
+// checks, that jid is in roster and returns buddy
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6864
+gchar *cmdarg_check_roster_bjid     (cmdarg_value_t *arg);
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6865
+// checks, that name is in roster and returns buddy
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6866
+gchar *cmdarg_check_roster_name     (cmdarg_value_t *arg);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6867
+// 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
  6868
+gchar *cmdarg_check_roster_resource (cmdarg_value_t *arg);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6869
+// checks for group with given name and returns buddy
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6870
+gchar *cmdarg_check_roster_group    (cmdarg_value_t *arg);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6871
+// checks correctness of jid syntax
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6872
+gchar *cmdarg_check_fjid            (cmdarg_value_t *arg);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6873
+// checks correctness of jid syntax, strips resource
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6874
+gchar *cmdarg_check_bjid            (cmdarg_value_t *arg);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6875
+// transforms to guint
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6876
+gchar *cmdarg_check_uint            (cmdarg_value_t *arg);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6877
+// checks, that string consists of characters from a given set
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6878
+gchar *cmdarg_check_charset         (cmdarg_value_t *arg);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6879
+// 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
  6880
+gchar *cmdarg_check_string2enum     (cmdarg_value_t *arg);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6881
+// checks mcabber color name syntax
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6882
+gchar *cmdarg_check_color           (cmdarg_value_t *arg);
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6883
+// expands filename and converts encoding
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6884
+gchar *cmdarg_check_filename        (cmdarg_value_t *arg);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6885
+// destructor, frees both names
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6886
+void cmdarg_free_fname              (cmdarg_value_t *arg);
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6887
+// converts iso-8601 date to epoch
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6888
+gchar *cmdarg_check_date            (cmdarg_value_t *arg);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6889
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6890
+// ready for use standard type descriptions
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  6891
+const cmdarg_type_t cmdarg_type_nonspace;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  6892
+const cmdarg_type_t cmdarg_type_roster_bjid;
85
93c3cc0d7891 [refresh] Add round-high-priority.diff, refresh => API 41-42
Myhailo Danylenko <isbear@ukrpost.net>
parents: 84
diff changeset
  6893
+const cmdarg_type_t cmdarg_type_roster_name;
77
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  6894
+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
  6895
+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
  6896
+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
  6897
+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
  6898
+const cmdarg_type_t cmdarg_type_uint;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6899
+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
  6900
+const cmdarg_type_t cmdarg_type_string2enum;
7197414053c9 [cmdopts] Roll some things back, fix errors
Myhailo Danylenko <isbear@ukrpost.net>
parents: 76
diff changeset
  6901
+const cmdarg_type_t cmdarg_type_color;
84
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6902
+const cmdarg_type_t cmdarg_type_filename;
6ff846816073 [cmdopts] A bit of progress
Myhailo Danylenko <isbear@ukrpost.net>
parents: 82
diff changeset
  6903
+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
  6904
+
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  6905
+//
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6906
+//  Private
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6907
+//
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6908
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6909
+void cmd_init (void);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6910
+void cmd_uninit (void);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6911
+
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6912
+#if 0
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6913
+// return highest index for value, used in command
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6914
+size_t cmdopts_count_values (const cmdopts_t *command);
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6915
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6916
+// allocate values array to store arguments
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6917
+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
  6918
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6919
+//  error cmdopts_parse_internal ( startptr, endptr, commanddef, values )
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6920
+// Parses command arguments according to command definition.
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6921
+// Parsed string MUST be writable. Regardless of success or error, input
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  6922
+// string should be considered corrupted by parsing process.
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6923
+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
  6924
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6925
+// perform type checking/conversion on parsed values
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6926
+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
  6927
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6928
+//  cmdopts_free_values ( commanddef, values )
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6929
+// Free allocated by checkers resources and values array.
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  6930
+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
  6931
+
71
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  6932
+typedef enum {
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  6933
+  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
  6934
+  msgtype_normal,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  6935
+  msgtype_headline,
2bdd3252d918 [cmdopts] Convert /buffer, merge subcmd_t and cmdopts_t, auto-print error
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
  6936
+} msgtype_t;
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6937
+
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6938
+void say_cmd(char *arg, msgtype_t msgtype);
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6939
 #endif
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  6940
-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
  6941
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  6942
 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
  6943
 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
  6944
-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
  6945
-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
  6946
 
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  6947
 #endif /* __MCABBER_COMMANDS_H__ */
70
e2ef34130809 [cmdopts] Convert /group, /say, /msay
Myhailo Danylenko <isbear@ukrpost.net>
parents: 69
diff changeset
  6948
 
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  6949
diff -r 7a77fde8f7ee mcabber/mcabber/hooks.c
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  6950
--- a/mcabber/mcabber/hooks.c	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  6951
+++ b/mcabber/mcabber/hooks.c	Thu Aug 22 00:44:41 2013 +0300
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6952
@@ -638,10 +638,9 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6953
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6954
   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
  6955
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6956
-  cmdline = from_utf8(hook_command);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6957
-  if (process_command(cmdline, TRUE) == 255)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6958
+  cmdline = g_strdup(hook_command);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6959
+  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
  6960
     mcabber_set_terminate_ui();
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6961
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6962
   g_free(cmdline);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6963
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6964
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6965
@@ -665,10 +664,9 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6966
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6967
   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
  6968
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6969
-  cmdline = from_utf8(hook_command);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6970
-  if (process_command(cmdline, TRUE) == 255)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6971
+  cmdline = g_strdup(hook_command);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6972
+  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
  6973
     mcabber_set_terminate_ui();
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6974
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6975
   g_free(cmdline);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6976
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  6977
 
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  6978
diff -r 7a77fde8f7ee mcabber/mcabber/roster.c
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  6979
--- a/mcabber/mcabber/roster.c	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  6980
+++ b/mcabber/mcabber/roster.c	Thu Aug 22 00:44:41 2013 +0300
66
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6981
@@ -1586,13 +1586,14 @@
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6982
 // Look for a buddy whose name or jid contains string.
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6983
 // 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
  6984
 // return NULL;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6985
+// Note: before this function considered its argument to be in local encoding,
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6986
+//       now argument must be in utf8.
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6987
 GList *buddy_search(char *string)
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6988
 {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6989
   GList *buddy = current_buddy;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6990
   roster *roster_usr;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6991
   if (!buddylist || !current_buddy) return NULL;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6992
   for (;;) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6993
-    gchar *jid_locale, *name_locale;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6994
     char *found = NULL;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6995
 
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6996
     buddy = g_list_next(buddy);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6997
@@ -1601,17 +1602,13 @@
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6998
 
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  6999
     roster_usr = (roster*)buddy->data;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  7000
 
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  7001
-    jid_locale = from_utf8(roster_usr->jid);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  7002
-    if (jid_locale) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  7003
-      found = strcasestr(jid_locale, string);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  7004
-      g_free(jid_locale);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  7005
+    if (roster_usr->jid) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  7006
+      found = strcasestr(roster_usr->jid, string);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  7007
       if (found)
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  7008
         return buddy;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  7009
     }
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  7010
-    name_locale = from_utf8(roster_usr->name);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  7011
-    if (name_locale) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  7012
-      found = strcasestr(name_locale, string);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  7013
-      g_free(name_locale);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  7014
+    if (roster_usr->name) {
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  7015
+      found = strcasestr(roster_usr->name, string);
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  7016
       if (found)
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  7017
         return buddy;
5616a2397c3c Convert /roster
Myhailo Danylenko <isbear@ukrpost.net>
parents: 65
diff changeset
  7018
     }
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  7019
diff -r 7a77fde8f7ee mcabber/mcabber/screen.c
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  7020
--- a/mcabber/mcabber/screen.c	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  7021
+++ b/mcabber/mcabber/screen.c	Thu Aug 22 00:44:41 2013 +0300
76
3c8b784f92c7 [cmdopts,fix-memleak] Start to clean things a bit
Myhailo Danylenko <isbear@ukrpost.net>
parents: 75
diff changeset
  7022
@@ -3630,7 +3630,7 @@
74
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  7023
 {
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  7024
   scr_check_auto_away(TRUE);
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  7025
   last_activity_buddy = current_buddy;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  7026
-  if (process_line(inputLine))
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  7027
+  if (process_line(inputLine) == cmd_result_quit)
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  7028
     return 255;
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  7029
   // Add line to history
a879ea179877 [cmdopts] Chaos
Myhailo Danylenko <isbear@ukrpost.net>
parents: 73
diff changeset
  7030
   scr_cmdhisto_addline(inputLine);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7031
@@ -3802,8 +3802,12 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7032
 void readline_send_multiline(void)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7033
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7034
   // Validate current multi-line
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7035
-  if (multimode)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7036
-    process_command(mkcmdstr("msay send"), TRUE);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7037
+  if (multimode) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7038
+    // FIXME - do it without parsing
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7039
+    gchar *cmdline = g_strdup("msay send");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7040
+    cmd_execute(cmdline, cmdexe_default);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7041
+    g_free(cmdline);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7042
+  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7043
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7044
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7045
 void readline_insert(const char *toinsert)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7046
@@ -3883,6 +3887,8 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7047
 // Initiate or continue a completion...
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7048
 static void scr_handle_tab(void)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7049
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7050
+// FIXME completion
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7051
+#if 0
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7052
   int nrow;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7053
   const char *row;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7054
   const char *cchar;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7055
@@ -3978,6 +3984,7 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7056
     if (cchar)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7057
       scr_insert_text(cchar);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7058
   }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7059
+#endif
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7060
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7061
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7062
 static void scr_cancel_current_completion(void)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7063
@@ -4098,7 +4105,9 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7064
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7065
   if (!Curses) return;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7066
   // Leave multi-line mode
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7067
-  process_command(mkcmdstr("msay abort"), TRUE);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7068
+  gchar *cmdline = g_strdup("msay abort");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7069
+  cmd_execute(cmdline, cmdexe_default);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7070
+  g_free(cmdline);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7071
   // Same as Ctrl-g, now
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7072
   scr_cancel_current_completion();
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7073
   scr_end_current_completion();
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7074
@@ -4302,10 +4311,12 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7075
   boundcmd = settings_get(SETTINGS_TYPE_BINDING, asciikey);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7076
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7077
   if (boundcmd) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7078
-    gchar *cmdline = from_utf8(boundcmd);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7079
+    gchar *cmdline = g_strdup(boundcmd);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7080
     scr_check_auto_away(TRUE);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7081
-    if (process_command(cmdline, TRUE))
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7082
+    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
  7083
+      g_free(cmdline);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7084
       return 255; // Quit
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7085
+    }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7086
     g_free(cmdline);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7087
     return 0;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7088
   }
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  7089
diff -r 7a77fde8f7ee mcabber/mcabber/settings.c
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  7090
--- a/mcabber/mcabber/settings.c	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  7091
+++ b/mcabber/mcabber/settings.c	Thu Aug 22 00:44:41 2013 +0300
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7092
@@ -183,28 +183,12 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7093
     if ((*line == '\n') || (*line == '\0') || (*line == '#'))
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7094
       continue;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7095
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7096
-    // 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
  7097
-    if (!runtime) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7098
-      const gchar *cmdend = strchr(line, ' ');
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7099
-      gchar *cmdname = NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7100
-      gboolean safe;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7101
-      if (cmdend)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7102
-        cmdname = g_strndup(line, cmdend - line);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7103
-      safe = cmd_is_safe(cmdname ? cmdname : line);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7104
-      g_free(cmdname);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7105
-      if (!safe) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7106
-        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
  7107
-                      "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
  7108
-        err++;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7109
-        continue;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7110
-      }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7111
-    }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7112
-
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7113
-    // 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
  7114
-    // and process the command
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7115
-    *(--line) = COMMAND_CHAR;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7116
-    if (process_command(line, TRUE) == 255)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7117
+    // 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
  7118
+    gchar *utf8 = to_utf8(line);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7119
+    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
  7120
+        == cmd_result_quit)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7121
       mcabber_set_terminate_ui();
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7122
+    g_free(utf8);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7123
   }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7124
   g_free(buf);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7125
   fclose(fp);
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  7126
diff -r 7a77fde8f7ee mcabber/mcabber/xmpp_iq.c
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  7127
--- a/mcabber/mcabber/xmpp_iq.c	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  7128
+++ b/mcabber/mcabber/xmpp_iq.c	Thu Aug 22 00:44:41 2013 +0300
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7129
@@ -71,20 +71,20 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7130
 struct adhoc_status {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7131
   char *name;   // the name used by adhoc
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7132
   char *description;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7133
-  char *status; // the string, used by setstus
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7134
+  enum imstatus status; // corresponding imstatus value
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7135
 };
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7136
 // 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
  7137
 const struct adhoc_status adhoc_status_list[] = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7138
-  {"offline", "Offline", "offline"},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7139
-  {"online", "Online", "avail"},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7140
-  {"chat", "Chat", "free"},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7141
-  {"dnd", "Do not disturb", "dnd"},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7142
-  {"xa", "Extended away", "notavail"},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7143
-  {"away", "Away", "away"},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7144
+  {"offline", "Offline", offline},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7145
+  {"online", "Online", available},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7146
+  {"chat", "Chat", freeforchat},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7147
+  {"dnd", "Do not disturb", dontdisturb},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7148
+  {"xa", "Extended away", notavail},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7149
+  {"away", "Away", away},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7150
 #ifdef WITH_DEPRECATED_STATUS_INVISIBLE
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7151
-  {"invisible", "Invisible", "invisible"},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7152
+  {"invisible", "Invisible", invisible},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7153
 #endif
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7154
-  {NULL, NULL, NULL},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7155
+  {NULL, NULL, imstatus_size},
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7156
 };
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7157
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7158
 static char *generate_session_id(char *prefix)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7159
@@ -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
  7160
       if (value) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  7161
         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
  7162
         if (s->name) {
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  7163
-          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
  7164
-                                         message ? message : "");
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  7165
-          cmd_setstatus(NULL, status);
1b6295674c07 [cmdopts] Convert /add and /del, fix quotes, add catchall flags
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
  7166
-          g_free(status);
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7167
+          // 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
  7168
+          // (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
  7169
+          // unexpected...
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7170
+          scr_check_auto_away(TRUE);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7171
+          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
  7172
           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
  7173
           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
  7174
                                               "Status has been changed");
87
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  7175
diff -r 7a77fde8f7ee mcabber/modules/beep/beep.c
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  7176
--- a/mcabber/modules/beep/beep.c	Sat Jul 13 21:05:39 2013 +0300
78238d26911a Update series to current dev version
Myhailo Danylenko <isbear@ukrpost.net>
parents: 85
diff changeset
  7177
+++ b/mcabber/modules/beep/beep.c	Thu Aug 22 00:44:41 2013 +0300
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7178
@@ -31,6 +31,7 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7179
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7180
 static void beep_init   (void);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7181
 static void beep_uninit (void);
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  7182
+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
  7183
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7184
 /* Module description */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7185
 module_info_t info_beep = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7186
@@ -46,9 +47,7 @@
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7187
         .next            = NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7188
 };
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7189
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7190
-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
  7191
-static gpointer beep_cmid = 0;  /* Command id */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7192
-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
  7193
+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
  7194
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7195
 /* Event handler */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7196
 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
  7197
@@ -61,20 +60,42 @@
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7198
   return HOOK_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7199
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7200
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7201
+static const string2enum_t s2e_onoff[] = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7202
+  { "on",      1  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7203
+  { "off",     0  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7204
+  { "enable",  1  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7205
+  { "disable", 0  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7206
+  { "1",       1  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7207
+  { "0",       0  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7208
+  { "show",    2  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7209
+  { NULL,      0  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7210
+};
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7211
+
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  7212
+typedef enum {
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  7213
+  pos_beep_enable = 0,
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  7214
+} pos_beep_t;
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  7215
+
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7216
+static cmdopts_t def_beep = {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7217
+  "beep",
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7218
+  cmd_default,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7219
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7220
+  do_beep,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7221
+  NULL,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7222
+  (cmdarg_t[2]){
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  7223
+    {"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
  7224
+    {NULL}
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7225
+  },
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7226
+  NULL
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7227
+};
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7228
+
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7229
 /* beep command handler */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7230
-static void do_beep(char *args)
81
8e1ccd27d60f [cmdopts] Constantize some more fields
Myhailo Danylenko <isbear@ukrpost.net>
parents: 80
diff changeset
  7231
+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
  7232
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7233
   /* Check arguments, and if recognized,
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7234
    * set mcabber option accordingly */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7235
-  if (!strcmp(args, "enable") ||
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7236
-      !strcmp(args, "on") ||
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7237
-      !strcmp(args, "yes") ||
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7238
-      !strcmp(args, "1"))
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  7239
+  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
  7240
     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
  7241
-  else if (!strcmp(args, "disable") ||
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7242
-           !strcmp(args, "off") ||
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7243
-           !strcmp(args, "no") ||
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7244
-           !strcmp(args, "0"))
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  7245
+  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
  7246
     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
  7247
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7248
   /* Output current state, either if state is
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  7249
@@ -83,19 +104,14 @@
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7250
     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
  7251
   else
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7252
     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
  7253
+  return NULL;
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7254
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7255
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7256
 /* Initialization */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7257
 static void beep_init(void)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7258
 {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7259
-  /* Create completions */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7260
-  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
  7261
-  if (beep_cid) {
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7262
-    compl_add_category_word(beep_cid, "enable");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7263
-    compl_add_category_word(beep_cid, "disable");
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7264
-  }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7265
   /* Add command */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7266
-  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
  7267
+  cmd_define(&def_beep);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7268
   /* Add handler
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7269
    * 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
  7270
    */
79
07e696e91b6f [cmdopts] Dynamically-allocated values
Myhailo Danylenko <isbear@ukrpost.net>
parents: 78
diff changeset
  7271
@@ -109,11 +125,7 @@
78
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7272
   /* Unregister event handler */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7273
   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
  7274
   /* Unregister command */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7275
-  cmd_del(beep_cmid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7276
-  /* Give back completion handle */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7277
-  if (beep_cid)
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7278
-    compl_del_category(beep_cid);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7279
+  cmd_undef(&def_beep);
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7280
 }
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7281
 
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7282
-/* The End */
ee30584c654b [cmdopts,fix-xa] Gradual conversion & error elimination
Myhailo Danylenko <isbear@ukrpost.net>
parents: 77
diff changeset
  7283
 /* vim: set et cindent cinoptions=>2\:2(0 ts=2 sw=2:  For Vim users... */