filter_tildes.c
author viric@llimona
Sun, 17 Feb 2008 22:27:55 +0100
changeset 88 a7f546938313
parent 79 7d316733d4b1
permissions -rw-r--r--
Adding port number on the ethernet protocol.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
79
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
     1
/*
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
     2
    Terminal Mixer - multi-point multi-user access to terminal applications
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
     3
    Copyright (C) 2007  LluĂ­s Batlle i Rossell
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
     4
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
     5
    Please find the license in the provided COPYING file.
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
     6
*/
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
     7
#include <stdlib.h>
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
     8
#include <string.h>
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
     9
#include "filter.h"
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    10
#include "main.h"
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    11
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    12
struct FTildes
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    13
{
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    14
    struct FFilter base;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    15
};
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    16
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    17
static void ftildes_reset(struct FFilter *ff)
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    18
{
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    19
    ff->matched = 0;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    20
}
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    21
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    22
static int ftildes_function(struct FFilter *ff, unsigned char c)
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    23
{
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    24
    struct FTildes *fs = (struct FTildes *) ff;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    25
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    26
    dump_line("ftildes: base.matched: %i\n", fs->base.matched);
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    27
    switch(fs->base.matched)
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    28
    {
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    29
        case 0:
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    30
            if (c == '~')
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    31
                fs->base.matched++;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    32
            else
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    33
                fs->base.matched = 0;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    34
            break;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    35
        case 1:
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    36
            if (c == '~')
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    37
                fs->base.matched++;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    38
            else
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    39
                fs->base.matched = 0;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    40
            break;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    41
        case 2:
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    42
            if (c == '.')
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    43
            {
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    44
                fs->base.matched++;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    45
                return 1;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    46
            }
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    47
            else if (c == '~')
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    48
            {
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    49
                fs->base.matched++;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    50
                return 1;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    51
            } else
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    52
                fs->base.matched = 0;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    53
            break;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    54
        default:
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    55
            fs->base.matched = 0;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    56
    }
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    57
    return 0;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    58
}
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    59
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    60
struct FFilter *new_ftildes(char *p)
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    61
{
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    62
    struct FTildes *fs;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    63
    fs = (struct FTildes *) malloc(sizeof(*fs));
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    64
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    65
    fs->base.matched = 0;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    66
    fs->base.function = ftildes_function;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    67
    fs->base.reset = ftildes_reset;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    68
    fs->base.callback = 0;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    69
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    70
    return (struct FFilter *) fs;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    71
}
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    72
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    73
struct FFilter *new_ftildes_len(char *p, int len)
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    74
{
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    75
    struct FTildes *fs;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    76
    fs = (struct FTildes *) malloc(sizeof(*fs));
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    77
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    78
    fs->base.matched = 0;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    79
    fs->base.function = ftildes_function;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    80
    fs->base.reset = ftildes_reset;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    81
    fs->base.callback = 0;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    82
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    83
    return (struct FFilter *) fs;
7d316733d4b1 Added filterdes.
viric@llimona
parents:
diff changeset
    84
}