]> jfr.im git - irc/evilnet/x3.git/blobdiff - src/helpfile.c
Lots of style changes to user replies. added numeric access back
[irc/evilnet/x3.git] / src / helpfile.c
index 825943f6d020c9360522e1a85173963a5440b8e0..978a3af31168a3e0850d2feb2a37278db9b8f027 100644 (file)
@@ -261,11 +261,22 @@ const char *language_find_message(struct language *lang, const char *msgid) {
     return NULL;
 }
 
+int strlen_vis(char *str)
+{
+    int count;
+    for(count=0;*str;str++)
+        if(!iscntrl(*str))
+            count++;
+    return count;
+}
+
 void
 table_send(struct userNode *from, const char *to, unsigned int size, irc_send_func irc_send, struct helpfile_table table) {
     unsigned int ii, jj, len, nreps, reps, tot_width, pos, spaces, *max_width;
     char line[MAX_LINE_SIZE+1];
     struct handle_info *hi;
+    char *sepstr = NULL;
+    int sepsize = 0;
 
     if (IsChannelName(to) || *to == '$') {
         message_dest = NULL;
@@ -334,12 +345,14 @@ table_send(struct userNode *from, const char *to, unsigned int size, irc_send_fu
         for (pos=ii=0; ii<((table.flags & TABLE_REPEAT_HEADERS)?nreps:1); ii++) {
             for (jj=0; 1; ) {
                 len = strlen(table.contents[0][jj]);
+                //line[pos++] = '\02'; /* bold header */
                 spaces = max_width[jj] - len;
                 if (table.flags & TABLE_PAD_LEFT)
                     while (spaces--)
                         line[pos++] = ' ';
                 memcpy(line+pos, table.contents[0][jj], len);
                 pos += len;
+                //line[pos++] = '\02'; /* end bold header */
                 if (++jj == table.width)
                     break;
                 if (!(table.flags & TABLE_PAD_LEFT))
@@ -349,7 +362,13 @@ table_send(struct userNode *from, const char *to, unsigned int size, irc_send_fu
             }
         }
         line[pos] = 0;
-        irc_send(from, to, line);
+        sepsize = strlen_vis(line);
+        sepstr = malloc(sepsize + 1);
+        memset(sepstr, '-', sepsize);
+        sepstr[sepsize] = 0;
+        irc_send(from, to, sepstr); /* ----------------- */
+        irc_send(from, to, line);   /* alpha  beta   roe */
+        irc_send(from, to, sepstr); /* ----------------- */
         ii = 1;
     }
     /* Send the table. */
@@ -376,6 +395,18 @@ table_send(struct userNode *from, const char *to, unsigned int size, irc_send_fu
             line[pos++] = ' ';
         }
     }
+    if (!(table.flags & TABLE_NO_HEADERS)) {
+        /* Send end bar & free its memory */
+        if(sepsize > 5)
+        {
+           sepstr[sepsize/2-1] = 'E';
+           sepstr[sepsize/2] = 'n';
+           sepstr[sepsize/2+1]= 'd';
+        }
+        irc_send(from, to, sepstr);
+        free(sepstr);
+    }
+
     if (!(table.flags & TABLE_NO_FREE)) {
         /* Deallocate table memory (but not the string memory). */
         for (ii=0; ii<table.length; ii++)
@@ -734,6 +765,48 @@ send_help(struct userNode *dest, struct userNode *src, struct helpfile *hf, cons
     return _send_help(dest, src, hf->expand, rec->d.qstring);
 }
 
+int
+send_help_brief(struct userNode *dest, struct userNode *src, struct helpfile *hf, const char *topic)
+{
+    struct helpfile *lang_hf;
+    struct record_data *rec;
+    struct language *curr;
+
+    if (!topic)
+        topic = "<index>";
+    if (!hf) {
+        _send_help(dest, src, NULL, "HFMSG_MISSING_HELPFILE");
+        return 0;
+    }
+    for (curr = (dest->handle_info ? dest->handle_info->language : lang_C);
+         curr;
+         curr = curr->parent) {
+        lang_hf = dict_find(curr->helpfiles, hf->name, NULL);
+        if (!lang_hf)
+            continue;
+        rec = dict_find(lang_hf->db, topic, NULL);
+        if (rec && rec->type == RECDB_QSTRING)
+        {
+            char* buf;
+            int res;
+
+            buf = malloc(strlen(rec->d.qstring) + 1);
+            strcpy(buf, rec->d.qstring);
+            *strchr(buf, '\n') = 0;
+
+            res = _send_help(dest, src, hf->expand, buf);
+            free(buf);
+            return res;
+        }
+    }
+    rec = dict_find(hf->db, "<missing>", NULL);
+    if (!rec)
+        return send_message(dest, src, "MSG_TOPIC_UNKNOWN");
+    if (rec->type != RECDB_QSTRING)
+       return send_message(dest, src, "HFMSG_HELP_NOT_STRING");
+    return _send_help(dest, src, hf->expand, rec->d.qstring);
+}
+
 /* Grammar supported by this parser:
  * condition = expr | prefix expr
  * expr = atomicexpr | atomicexpr op atomicexpr