commands.c
changeset 0 068428edee47
equal deleted inserted replaced
-1:000000000000 0:068428edee47
       
     1 #include "commands.h"
       
     2 #include "substdio.h"
       
     3 #include "stralloc.h"
       
     4 #include "str.h"
       
     5 #include "case.h"
       
     6 
       
     7 static stralloc cmd = {0};
       
     8 
       
     9 int commands(ss,c)
       
    10 substdio *ss;
       
    11 struct commands *c;
       
    12 {
       
    13   int i;
       
    14   char *arg;
       
    15 
       
    16   for (;;) {
       
    17     if (!stralloc_copys(&cmd,"")) return -1;
       
    18 
       
    19     for (;;) {
       
    20       if (!stralloc_readyplus(&cmd,1)) return -1;
       
    21       i = substdio_get(ss,cmd.s + cmd.len,1);
       
    22       if (i != 1) return i;
       
    23       if (cmd.s[cmd.len] == '\n') break;
       
    24       ++cmd.len;
       
    25     }
       
    26 
       
    27     if (cmd.len > 0) if (cmd.s[cmd.len - 1] == '\r') --cmd.len;
       
    28 
       
    29     cmd.s[cmd.len] = 0;
       
    30 
       
    31     i = str_chr(cmd.s,' ');
       
    32     arg = cmd.s + i;
       
    33     while (*arg == ' ') ++arg;
       
    34     cmd.s[i] = 0;
       
    35 
       
    36     for (i = 0;c[i].text;++i) if (case_equals(c[i].text,cmd.s)) break;
       
    37     c[i].fun(arg);
       
    38     if (c[i].flush) c[i].flush();
       
    39   }
       
    40 }