filter_string.c
author viric@llimona
Mon, 24 Sep 2007 13:59:40 +0200
changeset 38 f1e581c862d5
parent 36 da427c23d755
child 53 07500c5c53cb
permissions -rw-r--r--
Improved help. Moving to 0.2.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
34
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
     1
#include <stdlib.h>
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
     2
#include <string.h>
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
     3
#include "filter.h"
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
     4
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
     5
struct FString
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
     6
{
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
     7
    struct FFilter base;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
     8
    unsigned char *p;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
     9
    int len;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    10
};
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    11
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    12
static void fstring_reset(struct FFilter *ff)
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    13
{
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    14
    ff->matched = 0;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    15
}
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    16
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    17
static int fstring_function(struct FFilter *ff, unsigned char c)
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    18
{
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    19
    struct FString *fs = (struct FString *) ff;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    20
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    21
    if (fs->p[fs->base.matched] == c)
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    22
        fs->base.matched++;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    23
    else
36
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    24
    {
34
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    25
        /* A SAC */
36
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    26
        if (fs->p[0] == c)
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    27
            fs->base.matched = 1;
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    28
        else
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    29
            fs->base.matched = 0;
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    30
    }
34
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    31
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    32
    if (fs->base.matched == fs->len)
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    33
        return 1;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    34
    return 0;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    35
}
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    36
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    37
struct FFilter *new_fstring(char *p)
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    38
{
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    39
    struct FString *fs;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    40
    fs = (struct FString *) malloc(sizeof(*fs));
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    41
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    42
    fs->p = strdup(p);
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    43
    fs->len = strlen(p);
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    44
    fs->base.matched = 0;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    45
    fs->base.function = fstring_function;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    46
    fs->base.reset = fstring_reset;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    47
    fs->base.callback = 0;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    48
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    49
    return (struct FFilter *) fs;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    50
}
36
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    51
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    52
struct FFilter *new_fstring_len(char *p, int len)
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    53
{
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    54
    struct FString *fs;
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    55
    fs = (struct FString *) malloc(sizeof(*fs));
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    56
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    57
    fs->p = strdup(p);
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    58
    fs->len = len;
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    59
    fs->base.matched = 0;
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    60
    fs->base.function = fstring_function;
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    61
    fs->base.reset = fstring_reset;
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    62
    fs->base.callback = 0;
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    63
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    64
    return (struct FFilter *) fs;
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    65
}