diff --git a/jtag/ChangeLog b/jtag/ChangeLog index 3790fb6f..2efa02e3 100644 --- a/jtag/ChangeLog +++ b/jtag/ChangeLog @@ -1,3 +1,15 @@ +2003-02-17 Marcel Telka + + * configure.ac (AC_CHECK_FUNCS): Added getdelim and getline. + (AC_CONFIG_FILES): Added src/lib/Makefile. + * src/Makefile.am (SUBDIRS): Added lib. + (jtag_DEPENDENCIES): Added libjtaglib.a. + (jtag_LDADD): Ditto. + * src/jtag.c: Added portable getline() declaration. + * src/lib/Makefile.am: New file. + * src/lib/getdelim.c: Ditto. + * src/lib/getline.c: Ditto. + 2003-02-16 Marcel Telka * src/jtag.c (jtag_creae_jtagdir): New function (Alessandro Zummo). diff --git a/jtag/TODO b/jtag/TODO index 7d208e08..6c6d9e32 100644 --- a/jtag/TODO +++ b/jtag/TODO @@ -5,3 +5,4 @@ $Id$ * Support for display the result of a boundary scan formated according to the CPU definitions (e.g. MA[0-26] = 0x00001c00). * Remove direct relation between JTAG instruction and data register (e.g. ARM7TDMI). * Configurable big endian vs. little endian access. +* SVF player. diff --git a/jtag/configure.ac b/jtag/configure.ac index a8219aeb..e88b8213 100644 --- a/jtag/configure.ac +++ b/jtag/configure.ac @@ -36,6 +36,7 @@ AC_CONFIG_FILES( data/Makefile include/Makefile src/Makefile + src/lib/Makefile src/tap/Makefile src/part/Makefile ) @@ -55,6 +56,7 @@ AC_ARG_WITH(include, OPENWINCE_INC="-I$openwince_inc -I$openwince_inc/device" AC_SEARCH_LIBS([ioperm], [ioperm]) +AC_CHECK_FUNCS(getline getdelim) CFLAGS="$CFLAGS -Wall" diff --git a/jtag/src/Makefile.am b/jtag/src/Makefile.am index a1eb79df..b90b1d55 100644 --- a/jtag/src/Makefile.am +++ b/jtag/src/Makefile.am @@ -22,6 +22,7 @@ # SUBDIRS = \ + lib \ tap \ part @@ -43,8 +44,8 @@ jtag_SOURCES = \ flash-amd.c \ help.c -jtag_DEPENDENCIES = tap/libtap.a part/libpart.a +jtag_DEPENDENCIES = lib/libjtaglib.a tap/libtap.a part/libpart.a -jtag_LDADD = -lreadline -lncurses -Ltap -ltap -Lpart -lpart +jtag_LDADD = -lreadline -lncurses -Ltap -ltap -Lpart -lpart -Llib -ljtaglib INCLUDES = -I$(top_srcdir)/include $(OPENWINCE_INC) -DJTAG_DATA_DIR=\"$(pkgdatadir)\" diff --git a/jtag/src/jtag.c b/jtag/src/jtag.c index 6f552050..f66f4950 100644 --- a/jtag/src/jtag.c +++ b/jtag/src/jtag.c @@ -40,6 +40,10 @@ #include "detect.h" #include "bus.h" +#ifndef HAVE_GETLINE +ssize_t getline( char **lineptr, size_t *n, FILE *stream ); +#endif + cable_driver_t *cable = NULL; parts *ps = NULL; bus_driver_t *bus_driver = NULL; @@ -697,7 +701,7 @@ jtag_parse_file( const char *filename ) FILE *f; int go = 1; char *line = NULL; - int n; + int n = 0; f = fopen( filename, "r" ); if (!f) { diff --git a/jtag/src/lib/.cvsignore b/jtag/src/lib/.cvsignore new file mode 100644 index 00000000..e9955884 --- /dev/null +++ b/jtag/src/lib/.cvsignore @@ -0,0 +1,3 @@ +.deps +Makefile +Makefile.in diff --git a/jtag/src/lib/Makefile.am b/jtag/src/lib/Makefile.am new file mode 100644 index 00000000..107c179f --- /dev/null +++ b/jtag/src/lib/Makefile.am @@ -0,0 +1,28 @@ +# +# $Id$ +# +# Copyright (C) 2003 ETC s.r.o. +# +# This program 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 2 +# of the License, 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; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. +# +# Written by Marcel Telka , 2003. +# + +noinst_LIBRARIES = libjtaglib.a + +libjtaglib_a_SOURCES = \ + getdelim.c \ + getline.c diff --git a/jtag/src/lib/getdelim.c b/jtag/src/lib/getdelim.c new file mode 100644 index 00000000..7167b093 --- /dev/null +++ b/jtag/src/lib/getdelim.c @@ -0,0 +1,92 @@ +/* + * $Id$ + * + * Copyright (C) 2003 ETC s.r.o. + * + * This program 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 2 + * of the License, 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; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + * + * Written by Marcel Telka , 2003. + * + */ + +#include +#include + +#ifdef HAVE_CONFIG_H +#include +#endif + +#ifndef HAVE_GETDELIM + +#define GETDELIM_BUFFER 128 + +ssize_t +getdelim( char **lineptr, size_t *n, int delimiter, FILE *stream ) +{ + char *p; + int c; + size_t len = 0; + + if (!lineptr || !n || (!*lineptr && *n)) + return -1; + + /* allocate initial buffer */ + if (!*lineptr || !*n) { + char *np; + np = realloc( *lineptr, GETDELIM_BUFFER ); + if (!np) + return -1; + *n = GETDELIM_BUFFER; + *lineptr = np; + } + + p = *lineptr; + + /* read characters from stream */ + while ((c = fgetc( stream )) != EOF) { + if (len >= *n) { + char *np = realloc( *lineptr, *n * 2 ); + if (!np) + return -1; + p = np + (p - *lineptr); + *lineptr = np; + *n *= 2; + } + *p++ = (char) c; + len++; + if (delimiter == c) + break; + } + + /* end of file without any bytes read */ + if ((c == EOF) && (len == 0)) + return -1; + + /* trailing '\0' */ + if (len >= *n) { + char *np = realloc( *lineptr, *n + 1 ); + if (!np) + return -1; + p = np + (p - *lineptr); + *lineptr = np; + *n += 1; + } + *p = '\0'; + + return len; +} + +#endif /* HAVE_GETDELIM */ diff --git a/jtag/src/lib/getline.c b/jtag/src/lib/getline.c new file mode 100644 index 00000000..7d56f520 --- /dev/null +++ b/jtag/src/lib/getline.c @@ -0,0 +1,43 @@ +/* + * $Id$ + * + * Copyright (C) 2003 ETC s.r.o. + * + * This program 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 2 + * of the License, 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; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + * + * Written by Marcel Telka , 2003. + * + */ + +#include + +#ifdef HAVE_CONFIG_H +#include +#endif + +#ifndef HAVE_GETLINE + +#ifndef HAVE_GETDELIM +ssize_t getdelim( char **lineptr, size_t *n, int delimiter, FILE *stream ); +#endif /* HAVE_GETDELIM */ + +ssize_t +getline( char **lineptr, size_t *n, FILE *stream ) +{ + return getdelim( lineptr, n, '\n', stream ); +} + +#endif /* HAVE_GETLINE */