filter_string.c
author Lluís Batlle <viric@viric.name>
Thu, 20 Mar 2014 16:29:13 +0100
branchsaveflie
changeset 96 d090ddac5131
parent 53 07500c5c53cb
permissions -rw-r--r--
Fixing the build on linux, gcc linking parameters order
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
53
07500c5c53cb Adding license and web html.
viric@llimona
parents: 36
diff changeset
     1
/*
07500c5c53cb Adding license and web html.
viric@llimona
parents: 36
diff changeset
     2
    Terminal Mixer - multi-point multi-user access to terminal applications
07500c5c53cb Adding license and web html.
viric@llimona
parents: 36
diff changeset
     3
    Copyright (C) 2007  LluĂ­s Batlle i Rossell
07500c5c53cb Adding license and web html.
viric@llimona
parents: 36
diff changeset
     4
07500c5c53cb Adding license and web html.
viric@llimona
parents: 36
diff changeset
     5
    Please find the license in the provided COPYING file.
07500c5c53cb Adding license and web html.
viric@llimona
parents: 36
diff changeset
     6
*/
34
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
     7
#include <stdlib.h>
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
     8
#include <string.h>
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
     9
#include "filter.h"
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    10
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    11
struct FString
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    12
{
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    13
    struct FFilter base;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    14
    unsigned char *p;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    15
    int len;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    16
};
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    17
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    18
static void fstring_reset(struct FFilter *ff)
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    19
{
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    20
    ff->matched = 0;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    21
}
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    22
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    23
static int fstring_function(struct FFilter *ff, unsigned char c)
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    24
{
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    25
    struct FString *fs = (struct FString *) ff;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    26
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    27
    if (fs->p[fs->base.matched] == c)
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    28
        fs->base.matched++;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    29
    else
36
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
        /* A SAC */
36
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    32
        if (fs->p[0] == c)
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    33
            fs->base.matched = 1;
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    34
        else
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    35
            fs->base.matched = 0;
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    36
    }
34
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    37
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    38
    if (fs->base.matched == fs->len)
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    39
        return 1;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    40
    return 0;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    41
}
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    42
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    43
struct FFilter *new_fstring(char *p)
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    44
{
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    45
    struct FString *fs;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    46
    fs = (struct FString *) malloc(sizeof(*fs));
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    47
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    48
    fs->p = strdup(p);
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    49
    fs->len = strlen(p);
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    50
    fs->base.matched = 0;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    51
    fs->base.function = fstring_function;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    52
    fs->base.reset = fstring_reset;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    53
    fs->base.callback = 0;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    54
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    55
    return (struct FFilter *) fs;
7486e269b794 Added filter engine, xterm resize.
viric@mandarina
parents:
diff changeset
    56
}
36
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    57
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    58
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
    59
{
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    60
    struct FString *fs;
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    61
    fs = (struct FString *) malloc(sizeof(*fs));
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    62
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    63
    fs->p = strdup(p);
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    64
    fs->len = len;
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    65
    fs->base.matched = 0;
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    66
    fs->base.function = fstring_function;
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    67
    fs->base.reset = fstring_reset;
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    68
    fs->base.callback = 0;
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    69
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    70
    return (struct FFilter *) fs;
da427c23d755 Added dumps, telnet_filter, applied filters in tm, improved telnet experience.
viric@llimona
parents: 34
diff changeset
    71
}