screen-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [screen-devel] [PATCH 4/4] remove unused files winmsgtok.h, winmsgto


From: Amadeusz Sławiński
Subject: Re: [screen-devel] [PATCH 4/4] remove unused files winmsgtok.h, winmsgtok.h and test
Date: Sun, 7 Feb 2016 23:37:07 +0100

Hey,

Thanks for patches, I applied most of them.

Amadeusz

On Sun, 7 Feb 2016 16:35:19 +0100
Simon Ruderich <address@hidden> wrote:

> ---
>  src/tests/test-winmsgtok.c | 110 ---------------------------
>  src/winmsgtok.c            | 119 -----------------------------
>  src/winmsgtok.h            | 182
> --------------------------------------------- 3 files changed, 411
> deletions(-) delete mode 100644 src/tests/test-winmsgtok.c
>  delete mode 100644 src/winmsgtok.c
>  delete mode 100644 src/winmsgtok.h
> 
> diff --git a/src/tests/test-winmsgtok.c b/src/tests/test-winmsgtok.c
> deleted file mode 100644
> index 13fd790..0000000
> --- a/src/tests/test-winmsgtok.c
> +++ /dev/null
> @@ -1,110 +0,0 @@
> -/* Copyright (c) 2013
> - *      Mike Gerwitz (address@hidden)
> - *
> - * This file is part of GNU screen.
> - *
> - * GNU screen is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License as published
> by
> - * the Free Software Foundation; either version 3, or (at your
> option)
> - * any later version.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program (see the file COPYING); if not, see
> - * <http://www.gnu.org/licenses>.
> - *
> - ****************************************************************
> - */
> -
> -#include "../winmsgtok.h"
> -#include "signature.h"
> -#include "macros.h"
> -
> -SIGNATURE_CHECK(wmtok_init, WinMsgTokState *, (WinMsgTokState *));
> -SIGNATURE_CHECK(wmtok_tokenize, size_t,
> -     (WinMsgTok **, char *, size_t, WinMsgTokState *));
> -SIGNATURE_CHECK(wmtok_free, void, (WinMsgTokState *));
> -
> -SIGNATURE_CHECK(wmtok_type, WinMsgTokType, (WinMsgTok *));
> -SIGNATURE_CHECK(wmtok_lexeme, char *, (char *, WinMsgTok *, size_t));
> -SIGNATURE_CHECK(wmtok_data, union WinMsgTokData, (WinMsgTok *));
> -
> -char lexbuf[256];
> -
> -#define ASSERT_TOKSTR(s, ...) { \
> -             WinMsgTokType etok[] = {__VA_ARGS__, WMTOK_END}; \
> -             _assert_tokstr(s, etok); \
> -     }
> -
> -#define ASSERT_TOK_NODATA(tok, type, lexeme) \
> -     ASSERT(wmtok_type(tok) == type); \
> -     ASSERT(STREQ(wmtok_lexeme(lexbuf, tok, sizeof(lexbuf)),
> lexeme)); -
> -#define ASSERT_TOK_P(tok, type, lexeme, data) \
> -     ASSERT_TOK_NODATA(tok, type, lexeme); \
> -     ASSERT(wmtok_data(tok).ptr == data);
> -
> -#define ASSERT_TOK(tok, type, lexeme, data) \
> -     ASSERT_TOK_NODATA(tok, type, lexeme); \
> -     ASSERT(wmtok_data(tok).ptr == data);
> -
> -/* expected values when asserting against tokens */
> -struct TokAssert {
> -     WinMsgTokType  type;
> -     char          *lexeme;
> -};
> -
> -
> -void _assert_tokstr(char *src, WinMsgTokType *expected)
> -{
> -     WinMsgTokState *st = wmtok_init(NULL);
> -     WinMsgTok dest[1024];
> -     WinMsgTok *tok = dest;
> -
> -     size_t n = wmtok_tokenize(&tok, src, sizeof(dest), st);
> -     size_t i = 0;
> -
> -     do {
> -             ASSERT(wmtok_type(tok++) == *expected);
> -     } while ((i++ < n) && (*expected++ != WMTOK_END));
> -
> -     ASSERT(n == i);
> -
> -     wmtok_free(st);
> -}
> -
> -int main(void)
> -{
> -     /* allocate state if null pointer given */
> -     {
> -             WinMsgTokState *st;
> -
> -             ASSERT_MALLOC(>0, st = wmtok_init(NULL));  
> -             ASSERT(st != NULL);
> -
> -             wmtok_free(st);
> -     }
> -
> -     /* previously allocated state given */
> -     {
> -             WinMsgTokState *st = malloc(sizeof(WinMsgTokState));
> -             ASSERT(wmtok_init(st) == st);
> -             wmtok_free(st);
> -     }
> -
> -     /* tokenizing the empty string should yield a single END
> token */
> -     {
> -             WinMsgTokState *st = wmtok_init(NULL);
> -             WinMsgTok dest[16];  /* extra in case something goes
> terribly wrong */
> -             WinMsgTok *tok = dest;
> -
> -             ASSERT(wmtok_tokenize(&tok, "", sizeof(dest), st) ==
> 1);
> -             ASSERT_TOK(tok, WMTOK_END, "", NULL);
> -
> -             wmtok_free(st);
> -     }
> -}
> diff --git a/src/winmsgtok.c b/src/winmsgtok.c
> deleted file mode 100644
> index e9b7695..0000000
> --- a/src/winmsgtok.c
> +++ /dev/null
> @@ -1,119 +0,0 @@
> -/* Copyright (c) 2013
> - *      Mike Gerwitz (address@hidden)
> - *
> - * This file is part of GNU screen.
> - *
> - * GNU screen is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License as published
> by
> - * the Free Software Foundation; either version 3, or (at your
> option)
> - * any later version.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program (see the file COPYING); if not, see
> - * <http://www.gnu.org/licenses>.
> - *
> - ****************************************************************
> - */
> -
> -#include <stdlib.h>
> -#include <string.h>
> -#include "winmsgtok.h"
> -
> -
> -static WinMsgTok *_wmtok_tok()
> -{
> -     /* TODO: this is temporary code for POC and is obviously
> bad ;) */
> -     static WinMsgTok toks[512] = {{0}};
> -     static int i = 0;
> -     WinMsgTok *p = &toks[i++];
> -
> -     return p;
> -}
> -
> -
> -/* Initialize tokenizer state. If ST is the null pointer, then a
> state will
> - * be allocated. In either case, ST must be freed using wmtok_free
> to ensure
> - * that any resources allocated by this function (both now and in the
> - * future) are properly freed. If ST was allocated outside of this
> function,
> - * it must also be freed by the caller following a call to
> wmtok_free. */ -WinMsgTokState *wmtok_init(WinMsgTokState *st)
> -{
> -     if (st == NULL) {
> -             st = malloc(sizeof(WinMsgTokState));
> -             st->_dofree = true;
> -     }
> -
> -     return st;
> -}
> -
> -/* Tokenize a source window message string, producing a token string
> into
> - * DEST. The number of tokens will not exceed LEN. A return value of
> - * (size_t)-1 indicates that additional tokens may be available, in
> which
> - * case this function may simply be called again with the same ST to
> resume
> - * lexing. */
> -size_t wmtok_tokenize(WinMsgTok **dest, char *src,
> -                      size_t len, WinMsgTokState *st)
> -{
> -     WinMsgTok **p = dest;
> -
> -     /* do not exceed LEN tokens; otherwise, we risk overflowing
> the
> -      * destination buffer */
> -     for (size_t n = 0; n < len; n++) {
> -             /* upon reaching the end of the src string, lexing
> is complete */
> -             if (*src++ == '\0') {
> -                     /* TODO: temporary code for POC */
> -                     *p = _wmtok_tok();
> -                     (*p)->lexeme.ptr = src - 1;
> -                     (*p)->lexeme.len = 1;
> -                     p++;
> -                     break;
> -             }
> -     }
> -
> -     /* actual length may differ from N */
> -     return p - dest;
> -}
> -
> -/* Free tozenkizer state and any resources allocated to it; should
> always be
> - * called after wmtok_init, even if ST was allocated independently.
> */ -void wmtok_free(WinMsgTokState *st)
> -{
> -     if (st->_dofree) {
> -             free(st);
> -     }
> -}
> -
> -/* Retrieves the type of the given token as a WMTOK_* constant. */
> -WinMsgTokType wmtok_type(WinMsgTok *tok)
> -{
> -     return tok->type;
> -}
> -
> -/* Retrieve a copy of the source string (lexeme) from which the
> token was
> - * generated. The last byte written will be the null byte and will
> overwrite
> - * the last character in the lexeme if LEN is too small. */
> -char *wmtok_lexeme(char *dest, WinMsgTok *tok, size_t len)
> -{
> -     size_t n = (tok->lexeme.len > len) ? len - 1 :
> tok->lexeme.len; -
> -     /* the lexeme points to the original string from which we
> derived the
> -      * token; make a copy to avoid hard-to-find bugs */
> -     strncpy(dest, tok->lexeme.ptr, n);
> -     dest[n] = '\0';
> -
> -     return dest;
> -}
> -
> -/* Retrieve additional data needed to propely parse the token, if
> - * applicable. The data may be of any type, so a transparent union is
> - * returned to permit multiple types; the caller is expected to know
> which
> - * type the token uses. */
> -union WinMsgTokData wmtok_data(WinMsgTok *tok)
> -{
> -     return tok->data;
> -}
> diff --git a/src/winmsgtok.h b/src/winmsgtok.h
> deleted file mode 100644
> index 438e139..0000000
> --- a/src/winmsgtok.h
> +++ /dev/null
> @@ -1,182 +0,0 @@
> -/* Copyright (c) 2013
> - *      Mike Gerwitz (address@hidden)
> - *
> - * This file is part of GNU screen.
> - *
> - * GNU screen is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License as published
> by
> - * the Free Software Foundation; either version 3, or (at your
> option)
> - * any later version.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program (see the file COPYING); if not, see
> - * <http://www.gnu.org/licenses>.
> - *
> - ****************************************************************
> - */
> -
> -/* EBNF Grammar
> - * ------------
> - * The language understood by the window message parser is
> represented here
> - * in Extended Backus-Naur Form; the lexer is structured accordingly.
> - *
> - * winmsg = expr ;
> - * expr   = { term } , end ;
> - *
> - * term = literal
> - *      | escseq ;
> - *
> - * (* a sequence of characters to be echoed *)
> - * literal = { ctrlesc | character - escchar } ;
> - *
> - * (* a control escape sequence, e.g. ^[ *)
> - * ctrlesc = '^' , ascii printable character ;
> - *
> - *
> - * (* escape sequence; e.g. %n *)
> - * escseq  = escchar , ( delimited escseq | standalone escseq ) ;
> - * standalone escseq = [ escflag ] , [ number ] , [ esclong ] ,
> - *                     ascii printable character , [ escfmt ] ;
> - * escflag = '+' | '-' | '.' | '0' ;
> - * esclong = 'L' ;
> - *
> - * (* used for certain escapes to override default format *)
> - * escfmt      = '{' , escfmt expr ;
> - * escfmt expr = { escfmt term } ;
> - * escfmt term = '}'
> - *             | term ;
> - *
> - * (* the escape character can be dynamically set; default is '%' *)
> - * escchar = ? current escape character ? ;
> - *
> - * (* delimited escape sequences are of arbitrary length *)
> - * delimited escseq = rendition
> - *                  | conditional
> - *                  | group ;
> - *
> - *
> - * (* renditions set character output settings such as color or
> weight *)
> - * rendition = '{' , rendexpr , '}' ;
> - * rendexpr  = rendpop
> - *           | [ rend attrmod ] , rend colordesc ;
> - * rendpop   = '-' ;
> - *
> - * (* attribute modifier *)
> - * rend attrmod    = rend attrchtype , ' ' , rend attrvalue ;
> - * rend attrchtype = '+' | '-' | '!' | '=' ;
> - * rend attrvalue  = 'd' | 'u' | 'b' | 'r' | 's' | 'B' ;
> - *
> - * (* color descriptor; fg and optional bg *)
> - * rend colordesc = rend colorval , [ ';' ] , [ rend colorval ] ;
> - * rend colorval  = rend colorcode
> - *                | number
> - *                | 'x' , hexnumber ;
> - * rend colorcode = 'k' | 'r' | 'g' | 'y' | 'b' | 'm' | 'c' | 'w' |
> 'd'
> - *                | 'K' | 'R' | 'G' | 'Y' | 'B' | 'M' | 'C' | 'W' |
> 'D'
> - *                | 'i' | 'I' | '.' ;
> - *
> - *
> - * (* conditional output *)
> - * conditional  = condchar , condterm ;
> - * condexpr     = { condterm } ;
> - * condelseexpr = { condelseterm } ;
> - * condterm     = condelse
> - *              | condelseterm ;
> - * condelseterm = condend
> - *              | term ;
> - * condelse     = escchar , ':' , condelseexpr ;
> - * condend      = escchar , condchar ;
> - * condchar     = '?' ;
> - *
> - *
> - * (* acts as a sub-expression with own size restrictions,
> alignment, etc *)
> - * group     = '[' , groupexpr , groupend ;
> - * groupexpr = { groupterm } ;
> - * groupterm = groupend
> - *           | ? TODO: planned feature ?
> - *           | term ;
> - * groupend  = escchar , ']' ;
> - *
> - *
> - * (* TODO: UTF-8 support is planned *)
> - * character       = { ascii character } ;
> - * ascii character = ascii control character
> - *                 | ascii printable character ;
> - *
> - * ascii control character   = ? 0x00 <= byte value <= 0x1f ?
> - * ascii printable character = ? byte value >= 0x20 ?
> - *
> - * digit  = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' |
> '9' ;
> - * number = { digit } ;
> - *
> - * hexdigit  = 'a' | 'b' | 'c' | 'd' | 'e' | 'f'
> - *           | 'A' | 'B' | 'C' | 'D' | 'E' | 'F'
> - *           | digit ;
> - * hexnumber = { hexdigit } ;
> - *
> - * end = '\0' ;
> - */
> -
> -#include <stdbool.h>
> -#include <stdint.h>
> -#include <unistd.h>
> -
> -
> -/* Token types */
> -typedef enum {
> -     WMTOK_END,        /* terminating token; end of string */
> -     WMTOK_ECHO,       /* lexeme should be echoed */
> -} WinMsgTokType;
> -
> -/* Transparent type exposing token values */
> -union WinMsgTokData {
> -     /* integers of various sorts */
> -     uint_fast8_t  uint8;
> -     uint_fast16_t uint16;
> -     uint_fast32_t uint32;
> -     uintmax_t     uintmax;
> -     intmax_t      intmax;
> -     size_t        size;
> -
> -     void *ptr;      /* pointer to separately allocated data */
> -};
> -
> -/* Window message token */
> -typedef struct {
> -     WinMsgTokType type;  /* token type */
> -
> -     /* token src string; to reduce overhead, it will point into
> the original
> -      * src string, and therefore includes a length (since it may
> not be
> -      * null-terminated) */
> -     struct {
> -             char   *ptr;  /* pointer to lexeme in src string */
> -             size_t  len;  /* length of lexeme */
> -     } lexeme;
> -
> -     /* general-purpose, pre-allocated area for a basic value;
> use the void
> -      * ptr if additional allocation is necessary */
> -     union WinMsgTokData data;
> -} WinMsgTok;
> -
> -/* Represents state and configuration options for tokenizer */
> -typedef struct {
> -     char esc;  /* escape character */
> -
> -     bool _dofree;  /* whether we allocated ourself */
> -} WinMsgTokState;
> -
> -
> -WinMsgTokState *wmtok_init(WinMsgTokState *);
> -size_t wmtok_tokenize(WinMsgTok **, char *, size_t, WinMsgTokState
> *); -void wmtok_free(WinMsgTokState *);
> -
> -/** These functions expose data from the opaque WinMsgTok type in a
> way that
> - * allows altering the structure in the future with no ill effects.
> **/ -WinMsgTokType wmtok_type(WinMsgTok *);
> -char *wmtok_lexeme(char *, WinMsgTok *, size_t);
> -union WinMsgTokData wmtok_data(WinMsgTok *);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]