diff --git a/alliance/src/rdsgds/Makefile.am b/alliance/src/rdsgds/Makefile.am new file mode 100644 index 00000000..af437a64 --- /dev/null +++ b/alliance/src/rdsgds/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = src diff --git a/alliance/src/rdsgds/Makefile.in b/alliance/src/rdsgds/Makefile.in new file mode 100644 index 00000000..22d9fb00 --- /dev/null +++ b/alliance/src/rdsgds/Makefile.in @@ -0,0 +1,318 @@ +# Makefile.in generated automatically by automake 1.4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = . + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +CC = @CC@ +INCLUDES = @INCLUDES@ +LDFLAGS = @LDFLAGS@ +RANLIB = @RANLIB@ + +SUBDIRS = src +mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs +CONFIG_CLEAN_FILES = +DIST_COMMON = Makefile.am Makefile.in configure configure.in + + +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP_ENV = --best +all: all-redirect +.SUFFIXES: +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck +$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) + cd $(srcdir) && $(AUTOCONF) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. + +@SET_MAKE@ + +all-recursive install-data-recursive install-exec-recursive \ +installdirs-recursive install-recursive uninstall-recursive \ +check-recursive installcheck-recursive info-recursive dvi-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ + rev="$$subdir $$rev"; \ + test "$$subdir" = "." && dot_seen=yes; \ + done; \ + test "$$dot_seen" = "no" && rev=". $$rev"; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + -rm -rf $(distdir) + GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz + mkdir $(distdir)/=build + mkdir $(distdir)/=inst + dc_install_base=`cd $(distdir)/=inst && pwd`; \ + cd $(distdir)/=build \ + && ../configure --srcdir=.. --prefix=$$dc_install_base \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) dist + -rm -rf $(distdir) + @banner="$(distdir).tar.gz is ready for distribution"; \ + dashes=`echo "$$banner" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + echo "$$dashes" +dist: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +dist-all: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +distdir: $(DISTFILES) + -rm -rf $(distdir) + mkdir $(distdir) + -chmod 777 $(distdir) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + for subdir in $(SUBDIRS); do \ + if test "$$subdir" = .; then :; else \ + test -d $(distdir)/$$subdir \ + || mkdir $(distdir)/$$subdir \ + || exit 1; \ + chmod 777 $(distdir)/$$subdir; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \ + || exit 1; \ + fi; \ + done +info-am: +info: info-recursive +dvi-am: +dvi: dvi-recursive +check-am: all-am +check: check-recursive +installcheck-am: +installcheck: installcheck-recursive +install-exec-am: +install-exec: install-exec-recursive + +install-data-am: +install-data: install-data-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-recursive +uninstall-am: +uninstall: uninstall-recursive +all-am: Makefile +all-redirect: all-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: installdirs-recursive +installdirs-am: + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-tags mostlyclean-generic + +mostlyclean: mostlyclean-recursive + +clean-am: clean-tags clean-generic mostlyclean-am + +clean: clean-recursive + +distclean-am: distclean-tags distclean-generic clean-am + +distclean: distclean-recursive + -rm -f config.status + +maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ + distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-recursive + -rm -f config.status + +.PHONY: install-data-recursive uninstall-data-recursive \ +install-exec-recursive uninstall-exec-recursive installdirs-recursive \ +uninstalldirs-recursive all-recursive check-recursive \ +installcheck-recursive info-recursive dvi-recursive \ +mostlyclean-recursive distclean-recursive clean-recursive \ +maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ +dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ +install-exec install-data-am install-data install-am install \ +uninstall-am uninstall all-redirect all-am all installdirs-am \ +installdirs mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/alliance/src/rdsgds/configure b/alliance/src/rdsgds/configure new file mode 100755 index 00000000..fe437ae2 --- /dev/null +++ b/alliance/src/rdsgds/configure @@ -0,0 +1,1634 @@ +#! /bin/sh + +# Guess values for system-dependent variables and create Makefiles. +# Generated automatically using autoconf version 2.13 +# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Defaults: +ac_help= +ac_default_prefix=/usr/local +# Any additions from configure.in: + +# Initialize some variables set by options. +# The variables have the same names as the options, with +# dashes changed to underlines. +build=NONE +cache_file=./config.cache +exec_prefix=NONE +host=NONE +no_create= +nonopt=NONE +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +target=NONE +verbose= +x_includes=NONE +x_libraries=NONE +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +# Initialize some other variables. +subdirs= +MFLAGS= MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} +# Maximum number of lines to put in a shell here document. +ac_max_here_lines=12 + +ac_prev= +for ac_option +do + + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + case "$ac_option" in + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case "$ac_option" in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir="$ac_optarg" ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build="$ac_optarg" ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file="$ac_optarg" ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir="$ac_optarg" ;; + + -disable-* | --disable-*) + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; + + -enable-* | --enable-*) + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "enable_${ac_feature}='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix="$ac_optarg" ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he) + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM + run sed PROGRAM on installed program names +EOF + cat << EOF +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi + exit 0 ;; + + -host | --host | --hos | --ho) + ac_prev=host ;; + -host=* | --host=* | --hos=* | --ho=*) + host="$ac_optarg" ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir="$ac_optarg" ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir="$ac_optarg" ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir="$ac_optarg" ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir="$ac_optarg" ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir="$ac_optarg" ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir="$ac_optarg" ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir="$ac_optarg" ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix="$ac_optarg" ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix="$ac_optarg" ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix="$ac_optarg" ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name="$ac_optarg" ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir="$ac_optarg" ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir="$ac_optarg" ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site="$ac_optarg" ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir="$ac_optarg" ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir="$ac_optarg" ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target="$ac_optarg" ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.13" + exit 0 ;; + + -with-* | --with-*) + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "with_${ac_package}='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`echo $ac_option|sed -e 's/-*without-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + eval "with_${ac_package}=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes="$ac_optarg" ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries="$ac_optarg" ;; + + -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + ;; + + *) + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" + ;; + + esac +done + +if test -n "$ac_prev"; then + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } +fi + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 6 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>./config.log + +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg +do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; + esac +done + +# NLS nuisances. +# Only set these to C if already set. These must not be set unconditionally +# because not all systems understand e.g. LANG=C (notably SCO). +# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! +# Non-C LC_CTYPE values break the ctype check. +if test "${LANG+set}" = set; then LANG=C; export LANG; fi +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi +if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo > confdefs.h + +# A filename unique to this package, relative to the directory that +# configure is in, which we can look for to find out if srcdir is correct. +ac_unique_file=src/gds_swap.c + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + else + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + fi +fi +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` + +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + echo "loading site script $ac_site_file" + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file +else + echo "creating cache $cache_file" + > $cache_file +fi + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +ac_exeext= +ac_objext=o +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + + +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } +fi +ac_config_guess=$ac_aux_dir/config.guess +ac_config_sub=$ac_aux_dir/config.sub +ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# ./install, which can be erroneously created by make from ./install.sh. +echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +echo "configure:556: checking for a BSD compatible install" >&5 +if test -z "$INSTALL"; then +if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" + for ac_dir in $PATH; do + # Account for people who put trailing slashes in PATH elements. + case "$ac_dir/" in + /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi + fi + done + ;; + esac + done + IFS="$ac_save_IFS" + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL="$ac_cv_path_install" + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL="$ac_install_sh" + fi +fi +echo "$ac_t""$INSTALL" 1>&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 +echo "configure:609: checking whether build environment is sane" >&5 +# Just in case +sleep 1 +echo timestamp > conftestfile +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftestfile` + fi + if test "$*" != "X $srcdir/configure conftestfile" \ + && test "$*" != "X conftestfile $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { echo "configure: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" 1>&2; exit 1; } + fi + + test "$2" = conftestfile + ) +then + # Ok. + : +else + { echo "configure: error: newly created file is older than distributed files! +Check your system clock" 1>&2; exit 1; } +fi +rm -f conftest* +echo "$ac_t""yes" 1>&6 +if test "$program_transform_name" = s,x,x,; then + program_transform_name= +else + # Double any \ or $. echo might interpret backslashes. + cat <<\EOF_SED > conftestsed +s,\\,\\\\,g; s,\$,$$,g +EOF_SED + program_transform_name="`echo $program_transform_name|sed -f conftestsed`" + rm -f conftestsed +fi +test "$program_prefix" != NONE && + program_transform_name="s,^,${program_prefix},; $program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" + +# sed with no file args requires a program. +test "$program_transform_name" = "" && program_transform_name="s,x,x," + +echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 +echo "configure:666: checking whether ${MAKE-make} sets \${MAKE}" >&5 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftestmake <<\EOF +all: + @echo 'ac_maketemp="${MAKE}"' +EOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftestmake +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$ac_t""yes" 1>&6 + SET_MAKE= +else + echo "$ac_t""no" 1>&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + + +PACKAGE=rdsgds + +VERSION=2.1 + +if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then + { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } +fi +cat >> confdefs.h <> confdefs.h <&6 +echo "configure:712: checking for working aclocal" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (aclocal --version) < /dev/null > /dev/null 2>&1; then + ACLOCAL=aclocal + echo "$ac_t""found" 1>&6 +else + ACLOCAL="$missing_dir/missing aclocal" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 +echo "configure:725: checking for working autoconf" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (autoconf --version) < /dev/null > /dev/null 2>&1; then + AUTOCONF=autoconf + echo "$ac_t""found" 1>&6 +else + AUTOCONF="$missing_dir/missing autoconf" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working automake""... $ac_c" 1>&6 +echo "configure:738: checking for working automake" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (automake --version) < /dev/null > /dev/null 2>&1; then + AUTOMAKE=automake + echo "$ac_t""found" 1>&6 +else + AUTOMAKE="$missing_dir/missing automake" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 +echo "configure:751: checking for working autoheader" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (autoheader --version) < /dev/null > /dev/null 2>&1; then + AUTOHEADER=autoheader + echo "$ac_t""found" 1>&6 +else + AUTOHEADER="$missing_dir/missing autoheader" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 +echo "configure:764: checking for working makeinfo" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (makeinfo --version) < /dev/null > /dev/null 2>&1; then + MAKEINFO=makeinfo + echo "$ac_t""found" 1>&6 +else + MAKEINFO="$missing_dir/missing makeinfo" + echo "$ac_t""missing" 1>&6 +fi + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# ./install, which can be erroneously created by make from ./install.sh. +echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +echo "configure:789: checking for a BSD compatible install" >&5 +if test -z "$INSTALL"; then +if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" + for ac_dir in $PATH; do + # Account for people who put trailing slashes in PATH elements. + case "$ac_dir/" in + /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi + fi + done + ;; + esac + done + IFS="$ac_save_IFS" + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL="$ac_cv_path_install" + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL="$ac_install_sh" + fi +fi +echo "$ac_t""$INSTALL" 1>&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +# Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:844: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:874: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_prog_rejected=no + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + break + fi + done + IFS="$ac_save_ifs" +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + set dummy "$ac_dir/$ac_word" "$@" + shift + ac_cv_prog_CC="$@" + fi +fi +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + if test -z "$CC"; then + case "`uname -s`" in + *win32* | *WIN32*) + # Extract the first word of "cl", so it can be a program name with args. +set dummy cl; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:925: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="cl" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + ;; + esac + fi + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } +fi + +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:957: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +cat > conftest.$ac_ext << EOF + +#line 968 "configure" +#include "confdefs.h" + +main(){return(0);} +EOF +if { (eval echo configure:973: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cc_cross=no + else + ac_cv_prog_cc_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cc_works=no +fi +rm -fr conftest* +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 +if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:999: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 +cross_compiling=$ac_cv_prog_cc_cross + +echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +echo "configure:1004: checking whether we are using GNU C" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes +else + ac_cv_prog_gcc=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gcc" 1>&6 + +if test $ac_cv_prog_gcc = yes; then + GCC=yes +else + GCC= +fi + +ac_test_CFLAGS="${CFLAGS+set}" +ac_save_CFLAGS="$CFLAGS" +CFLAGS= +echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +echo "configure:1032: checking whether ${CC-cc} accepts -g" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.c +if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then + ac_cv_prog_cc_g=yes +else + ac_cv_prog_cc_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS="$ac_save_CFLAGS" +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi + +echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 +echo "configure:1064: checking how to run the C preprocessor" >&5 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then +if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # This must be in double quotes, not single quotes, because CPP may get + # substituted into the Makefile and "${CC-cc}" will confuse make. + CPP="${CC-cc} -E" + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1085: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -E -traditional-cpp" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1102: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -nologo -E" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1119: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP=/lib/cpp +fi +rm -f conftest* +fi +rm -f conftest* +fi +rm -f conftest* + ac_cv_prog_CPP="$CPP" +fi + CPP="$ac_cv_prog_CPP" +else + ac_cv_prog_CPP="$CPP" +fi +echo "$ac_t""$CPP" 1>&6 + +echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 +echo "configure:1144: checking for ANSI C header files" >&5 +if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +#include +#include +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1157: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + ac_cv_header_stdc=yes +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "memchr" >/dev/null 2>&1; then + : +else + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "free" >/dev/null 2>&1; then + : +else + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. +if test "$cross_compiling" = yes; then + : +else + cat > conftest.$ac_ext < +#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int main () { int i; for (i = 0; i < 256; i++) +if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); +exit (0); } + +EOF +if { (eval echo configure:1224: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + : +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_header_stdc=no +fi +rm -fr conftest* +fi + +fi +fi + +echo "$ac_t""$ac_cv_header_stdc" 1>&6 +if test $ac_cv_header_stdc = yes; then + cat >> confdefs.h <<\EOF +#define STDC_HEADERS 1 +EOF + +fi + +echo $ac_n "checking for working const""... $ac_c" 1>&6 +echo "configure:1248: checking for working const" >&5 +if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <j = 5; +} +{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; +} + +; return 0; } +EOF +if { (eval echo configure:1302: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_const=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_c_const=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_c_const" 1>&6 +if test $ac_cv_c_const = no; then + cat >> confdefs.h <<\EOF +#define const +EOF + +fi + +# Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1325: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RANLIB="ranlib" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" +fi +fi +RANLIB="$ac_cv_prog_RANLIB" +if test -n "$RANLIB"; then + echo "$ac_t""$RANLIB" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + +INCLUDES=-I${ALLIANCE_TOP}/include +LDFLAGS=-L${ALLIANCE_TOP}/lib + + + + +trap '' 1 2 15 +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Any assignment to VPATH causes Sun make to only execute +# the first set of double-colon rules, so remove it if not needed. +# If there is a colon in the path, we need to keep it. +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' +fi + +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +cat > conftest.defs <<\EOF +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g +s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g +s%\[%\\&%g +s%\]%\\&%g +s%\$%$$%g +EOF +DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` +rm -f conftest.defs + + +# Without the "./", some shells look in PATH for config.status. +: ${CONFIG_STATUS=./config.status} + +echo creating $CONFIG_STATUS +rm -f $CONFIG_STATUS +cat > $CONFIG_STATUS </dev/null | sed 1q`: +# +# $0 $ac_configure_args +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option +do + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.13" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=$srcdir +ac_given_INSTALL="$INSTALL" + +trap 'rm -fr `echo " +Makefile +src/Makefile +" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +EOF +cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF +$ac_vpsub +$extrasub +s%@SHELL@%$SHELL%g +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@FFLAGS@%$FFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g +s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g +s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g +s%@INSTALL_DATA@%$INSTALL_DATA%g +s%@PACKAGE@%$PACKAGE%g +s%@VERSION@%$VERSION%g +s%@ACLOCAL@%$ACLOCAL%g +s%@AUTOCONF@%$AUTOCONF%g +s%@AUTOMAKE@%$AUTOMAKE%g +s%@AUTOHEADER@%$AUTOHEADER%g +s%@MAKEINFO@%$MAKEINFO%g +s%@SET_MAKE@%$SET_MAKE%g +s%@CC@%$CC%g +s%@CPP@%$CPP%g +s%@RANLIB@%$RANLIB%g +s%@INCLUDES@%$INCLUDES%g + +CEOF +EOF + +cat >> $CONFIG_STATUS <<\EOF + +# Split the substitutions into bite-sized pieces for seds with +# small command number limits, like on Digital OSF/1 and HP-UX. +ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. +ac_file=1 # Number of current file. +ac_beg=1 # First line for current file. +ac_end=$ac_max_sed_cmds # Line after last line for current file. +ac_more_lines=: +ac_sed_cmds="" +while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file + else + sed "${ac_end}q" conftest.subs > conftest.s$ac_file + fi + if test ! -s conftest.s$ac_file; then + ac_more_lines=false + rm -f conftest.s$ac_file + else + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f conftest.s$ac_file" + else + ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" + fi + ac_file=`expr $ac_file + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_cmds` + fi +done +if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat +fi +EOF + +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + case "$ac_given_INSTALL" in + [/$]*) INSTALL="$ac_given_INSTALL" ;; + *) INSTALL="$ac_dots$ac_given_INSTALL" ;; + esac + + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +s%@INSTALL@%$INSTALL%g +" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file +fi; done +rm -f conftest.s* + +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF + +exit 0 +EOF +chmod +x $CONFIG_STATUS +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 + diff --git a/alliance/src/rdsgds/configure.in b/alliance/src/rdsgds/configure.in new file mode 100644 index 00000000..7ea73c67 --- /dev/null +++ b/alliance/src/rdsgds/configure.in @@ -0,0 +1,51 @@ +dnl +dnl This file is part of the Alliance CAD System +dnl Copyright (C) Laboratoire LIP6 - Département ASIM +dnl Universite Pierre et Marie Curie +dnl +dnl Home page : http://www-asim.lip6.fr/alliance/ +dnl E-mail support : mailto:alliance-support@asim.lip6.fr +dnl +dnl This library is free software; you can redistribute it and/or modify it +dnl under the terms of the GNU Library General Public License as published +dnl by the Free Software Foundation; either version 2 of the License, or (at +dnl your option) any later version. +dnl +dnl Alliance VLSI CAD System is distributed in the hope that it will be +dnl useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +dnl Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License along +dnl with the GNU C Library; see the file COPYING. If not, write to the Free +dnl Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +dnl +dnl Purpose : Auto stuffing Alliance +dnl Almost ten years since I wrote this stuff, I just can't +dnl believe it +dnl Date : 01/02/2002 +dnl Author : Frederic Petrot +dnl $Id: configure.in,v 1.1 2002/03/13 13:37:57 fred Exp $ +dnl +dnl + +AC_INIT(src/gds_swap.c) +AM_INIT_AUTOMAKE(rdsgds, 2.1) +AC_PROG_INSTALL +AC_PROG_CC +AC_HEADER_STDC +AC_C_CONST +AC_PROG_RANLIB + +changequote(,)dnl +INCLUDES=-I${ALLIANCE_TOP}/include +LDFLAGS=-L${ALLIANCE_TOP}/lib +changequote([,])dnl + +AC_SUBST(INCLUDES) +AC_SUBST(LDFLAGS) + +AC_OUTPUT([ +Makefile +src/Makefile +]) diff --git a/alliance/src/rdsgds/src/Makefile.am b/alliance/src/rdsgds/src/Makefile.am new file mode 100644 index 00000000..3e0a33fd --- /dev/null +++ b/alliance/src/rdsgds/src/Makefile.am @@ -0,0 +1,2 @@ +lib_LIBRARIES = libRgs.a +libRgs_a_SOURCES = gds_drive.h gds_parse.c gds_swap.h gds.h gds_error.c gds_parse.h rgs.h gds_drive.c gds_error.h gds_swap.c diff --git a/alliance/src/rdsgds/src/Makefile.in b/alliance/src/rdsgds/src/Makefile.in new file mode 100644 index 00000000..51c94e88 --- /dev/null +++ b/alliance/src/rdsgds/src/Makefile.in @@ -0,0 +1,318 @@ +# Makefile.in generated automatically by automake 1.4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +CC = @CC@ +INCLUDES = @INCLUDES@ +LDFLAGS = @LDFLAGS@ +RANLIB = @RANLIB@ + +lib_LIBRARIES = libRgs.a +libRgs_a_SOURCES = gds_drive.h gds_parse.c gds_swap.h gds.h gds_error.c gds_parse.h rgs.h gds_drive.c gds_error.h gds_swap.c +mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs +CONFIG_CLEAN_FILES = +LIBRARIES = $(lib_LIBRARIES) + + +DEFS = @DEFS@ -I. -I$(srcdir) +CPPFLAGS = @CPPFLAGS@ +LIBS = @LIBS@ +libRgs_a_LIBADD = +libRgs_a_OBJECTS = gds_parse.o gds_error.o gds_drive.o gds_swap.o +AR = ar +CFLAGS = @CFLAGS@ +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ +DIST_COMMON = Makefile.am Makefile.in + + +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP_ENV = --best +DEP_FILES = .deps/gds_drive.P .deps/gds_error.P .deps/gds_parse.P \ +.deps/gds_swap.P +SOURCES = $(libRgs_a_SOURCES) +OBJECTS = $(libRgs_a_OBJECTS) + +all: all-redirect +.SUFFIXES: +.SUFFIXES: .S .c .o .s +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +mostlyclean-libLIBRARIES: + +clean-libLIBRARIES: + -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES) + +distclean-libLIBRARIES: + +maintainer-clean-libLIBRARIES: + +install-libLIBRARIES: $(lib_LIBRARIES) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(libdir) + @list='$(lib_LIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(INSTALL_DATA) $$p $(DESTDIR)$(libdir)/$$p"; \ + $(INSTALL_DATA) $$p $(DESTDIR)$(libdir)/$$p; \ + else :; fi; \ + done + @$(POST_INSTALL) + @list='$(lib_LIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(RANLIB) $(DESTDIR)$(libdir)/$$p"; \ + $(RANLIB) $(DESTDIR)$(libdir)/$$p; \ + else :; fi; \ + done + +uninstall-libLIBRARIES: + @$(NORMAL_UNINSTALL) + list='$(lib_LIBRARIES)'; for p in $$list; do \ + rm -f $(DESTDIR)$(libdir)/$$p; \ + done + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +libRgs.a: $(libRgs_a_OBJECTS) $(libRgs_a_DEPENDENCIES) + -rm -f libRgs.a + $(AR) cru libRgs.a $(libRgs_a_OBJECTS) $(libRgs_a_LIBADD) + $(RANLIB) libRgs.a + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = src + +distdir: $(DISTFILES) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(top_distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign src/Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + +DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) + +-include $(DEP_FILES) + +mostlyclean-depend: + +clean-depend: + +distclean-depend: + -rm -rf .deps + +maintainer-clean-depend: + +%.o: %.c + @echo '$(COMPILE) -c $<'; \ + $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-cp .deps/$(*F).pp .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm .deps/$(*F).pp + +%.lo: %.c + @echo '$(LTCOMPILE) -c $<'; \ + $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ + < .deps/$(*F).pp > .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm -f .deps/$(*F).pp +info-am: +info: info-am +dvi-am: +dvi: dvi-am +check-am: all-am +check: check-am +installcheck-am: +installcheck: installcheck-am +install-exec-am: install-libLIBRARIES +install-exec: install-exec-am + +install-data-am: +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: uninstall-libLIBRARIES +uninstall: uninstall-am +all-am: Makefile $(LIBRARIES) +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: + $(mkinstalldirs) $(DESTDIR)$(libdir) + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-libLIBRARIES mostlyclean-compile \ + mostlyclean-tags mostlyclean-depend mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-libLIBRARIES clean-compile clean-tags clean-depend \ + clean-generic mostlyclean-am + +clean: clean-am + +distclean-am: distclean-libLIBRARIES distclean-compile distclean-tags \ + distclean-depend distclean-generic clean-am + +distclean: distclean-am + +maintainer-clean-am: maintainer-clean-libLIBRARIES \ + maintainer-clean-compile maintainer-clean-tags \ + maintainer-clean-depend maintainer-clean-generic \ + distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + +.PHONY: mostlyclean-libLIBRARIES distclean-libLIBRARIES \ +clean-libLIBRARIES maintainer-clean-libLIBRARIES uninstall-libLIBRARIES \ +install-libLIBRARIES mostlyclean-compile distclean-compile \ +clean-compile maintainer-clean-compile tags mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir \ +mostlyclean-depend distclean-depend clean-depend \ +maintainer-clean-depend info-am info dvi-am dvi check check-am \ +installcheck-am installcheck install-exec-am install-exec \ +install-data-am install-data install-am install uninstall-am uninstall \ +all-redirect all-am all installdirs mostlyclean-generic \ +distclean-generic clean-generic maintainer-clean-generic clean \ +mostlyclean distclean maintainer-clean + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/alliance/src/rdsgds/src/gds.h b/alliance/src/rdsgds/src/gds.h new file mode 100644 index 00000000..60e7856c --- /dev/null +++ b/alliance/src/rdsgds/src/gds.h @@ -0,0 +1,226 @@ +#ifndef __P +# if defined(__STDC__) || defined(__GNUC__) +# define __P(x) x +# else +# define __P(x) () +# endif +#endif +/*------------------------------------------------------------\ +| | +| Tool : RDSGDS | +| | +| File : gds.h | +| | +| Authors : Pierre Vittet | +| Modified by Jacomme Ludovic | +| Date : 04/07/93 | +| | +\------------------------------------------------------------*/ + +# ifndef RDSGDS_GDS +# define RDSGDS_GDS + +/*------------------------------------------------------------\ +| | +| Constants | +| | +\------------------------------------------------------------*/ + +/********* +* +* Voici la LISTE DES CODES GDSII correspondant aux differents types d'enregistrement. +* +* Un fichier GDSII est compose d'enregistrements de taille variable. Au debut de chacun +* de ces enregistrements, on trouve invariablement : +* - 2 octets indiquant la taille de l'enregistrement (ces 2 octets compris). +* - un code GDS egalement sur 2 octets (ou le 1er octet des deux donne le type +* de l'enregistrement et le 2eme precise le type des donnees contenues dans cet +* enregistrement). +* +***/ + +#define HEADER 0x0002 +#define BGNLIB 0x0102 +#define LIBNAME 0x0206 +#define UNITS 0x0305 +#define ENDLIB 0x0400 +#define BGNSTR 0x0502 +#define STRNAME 0x0606 +#define ENDSTR 0x0700 +#define BOUNDARY 0x0800 +#define PATH 0x0900 +#define SREF 0x0A00 +#define AREF 0x0B00 +#define TEXT 0x0C00 +#define LAYER0 0x0D02 +#define DATATYPE 0x0E02 +#define WIDTH 0x0F03 +#define XY 0x1003 +#define ENDEL 0x1100 +#define SNAME 0x1206 +#define COLROW 0x1302 +#define TEXTNODE 0x1400 +#define NODE 0x1500 +#define TEXTTYPE 0x1602 +#define PRESENTATION 0x1701 + +#define STRING 0x1906 +#define STRANS 0x1A01 +#define MAG 0x1B05 +#define ANGLE 0x1C05 + +#define REFLIBS 0x1F06 +#define FONTS 0x2006 +#define PATHTYPE 0x2102 +#define GENERATIONS 0x2202 +#define ATTRTABLE 0x2306 +#define STYPTABLE 0x2406 +#define STRTYPE 0x2502 +#define ELFLAGS 0x2601 +#define ELKEY 0x2703 + +#define NODETYPE 0x2A02 +#define PROPATTR 0x2B02 +#define PROPVALUE 0x2C06 +#define BOX 0x2D00 +#define BOXTYPE 0x2E02 +#define PLEX 0x2F03 +#define BGNEXTN 0x3003 +#define ENDEXTN 0x3103 +#define TAPENUM 0x3202 +#define TAPECODE 0x3302 +#define STRCLASS 0x3401 + +#define FORMAT 0x3602 +#define MASK 0x3706 +#define ENDMASKS 0x3800 + + +/*********** +* +* Autres constantes utilisees par le format GDS +* Les valeurs hexa etant a masquer dans les champs qui les necessitent +* +***/ + +#define LGPROP 126 /* maximum length of the string value associated with the attribute */ + +/* reserved attribute numbers */ +#define PUSRINT 126 /* user integer property */ +#define PUSRSTR 127 /* user string or CSD property */ + +#define LGSTRNAME 32 /* maximum length of a "structure"'s name */ +#define LGSTRING 512 /* maximum length of a character string for text presentation */ + +/* text presentation flags */ +#define THPRES 0x0003 /* horizontal presentation */ +#define THLEFT 0x0000 /* left */ +#define THCENT 0x0001 /* center */ +#define THRIGHT 0x0002 /* right */ +#define TVPRES 0x000C /* vertical presentation */ +#define TVTOP 0x0000 /* top */ +#define TVMID 0x0004 /* middle */ +#define TVBOT 0x0008 /* bottom */ +#define TFONT 0x0030 /* ---- type of font ---- */ +#define TFONT0 0x0000 /* font 0 */ +#define TFONT1 0x0010 /* font 1 */ +#define TFONT2 0x0020 /* font 2 */ +#define TFONT3 0x0030 /* font 3 */ + +/* graphic presentation flags */ +#define GABSANG 0x0002 /* absolute angle */ +#define GABSMAG 0x0004 /* absolute magnification */ +#define GREFLECT 0x8000 /* reflection over the X-axis applied before */ + /* angular rotation */ + +/* element flags */ +#define ETEMPL 0x0001 /* TEMPLATE data */ +#define EXTERN 0x0002 /* EXTERNAL data */ + +/* pathtype flags */ +#define PSQRFLH 0 /* square-ended path that ends flush with its endpoints */ +#define PRND 1 /* round-ended paths */ +#define PSQRHW 2 /* square-ended path that ends half-width beyond its endpoints */ +#define PVSQR 4 /* STICKS products : path with variable square-ended */ + /* extensions */ + +/* Calma flags : internal use with STICKS products */ +#define NOCALMA 0x0000 /* Stream tapes produced by non-Calma progams */ + +/* Autres constantes existant : nombre maximale de valeurs possibles */ +#define NLAYER 64 /* The value of the layer must be in the range of 0 to 63. */ +#define NDATATYPE 64 /* The value of the datatype must be in the range of 0 to 63. */ +#define NTEXTTYPE 64 /* The value of the texttype must be in the range of 0 to 63. */ +#define NNODETYPE 64 /* The value of the nodetype must be in the range of 0 to 63. */ +#define NBOXTYPE 64 /* The value of the boxtype must be in the range of 0 to 63. */ + +#define LGNAME 12 /* max length of library's name, according to CDOS file name conventions */ +#define LGLIBNAME 44 /* max length of each reference library's name */ +#define NFONTS 4 /* maximum authorized number of textfonts definitions */ +#define LGFONTNAME 44 /* names, each name is 44 (maximum) characters long */ +#define LGATTRNAME 44 /* max length of attribute definition file's name */ + +/* format type values */ +#define FARC 0 /* ARCHIVE format */ +#define FILT 1 /* FILTERED format */ + +/*------------------------------------------------------------\ +| | +| Macro | +| | +\------------------------------------------------------------*/ + +# define CheckPhysicalGridAligned(c) ((c) % RDS_PHYSICAL_GRID) + +/*------------------------------------------------------------\ +| | +| Types | +| | +\------------------------------------------------------------*/ + +#ifndef ushort +#define ushort unsigned short +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef TRUE +#define TRUE 1 +#endif + +#define type_i unsigned short +#define type_l unsigned short +#define type_c unsigned short + +typedef struct { /* enregistrement de la date et de l'heure */ + short year; /* annee */ + short month; /* mois */ + short day; /* jour */ + short hour; /* heure */ + short min; /* minutes */ + short sec; /* secondes */ +} date_type; + +typedef struct { /* en-tete de l'enregistrement contient les infos : */ + short size; /* longueur de l'enregistrement */ + short gdscode; /* record type & data type */ +} hinfo_type; + +typedef double unit_type; /* database unit type */ +typedef double angle_type; /* angular rotation factor type */ +typedef double mag_type; /* magnification factor type */ + +/*------------------------------------------------------------\ +| | +| Variables | +| | +\------------------------------------------------------------*/ +/*------------------------------------------------------------\ +| | +| Functions | +| | +\------------------------------------------------------------*/ + +# endif diff --git a/alliance/src/rdsgds/src/gds_drive.c b/alliance/src/rdsgds/src/gds_drive.c new file mode 100644 index 00000000..aec28287 --- /dev/null +++ b/alliance/src/rdsgds/src/gds_drive.c @@ -0,0 +1,685 @@ +/*------------------------------------------------------------\ +| | +| Tool : RDSGDS | +| | +| File : gds_drive.c | +| | +| Authors : Pierre Vittet | +| Modified by Jacomme Ludovic | +| Date : 04/07/93 | +| | +\------------------------------------------------------------*/ +/*------------------------------------------------------------\ +| | +| Include Files | +| | +\------------------------------------------------------------*/ + +# include +# include +# include +# include +# include +# include + + +# include +# include +# include +# include +# include +# include +# include +# include + +# include "gds.h" +# include "gds_error.h" +# include "gds_drive.h" +# include "gds_swap.h" + +/*------------------------------------------------------------\ +| | +| Constants | +| | +\------------------------------------------------------------*/ +/*------------------------------------------------------------\ +| | +| Macros | +| | +\------------------------------------------------------------*/ + +#define controle(a) \ + if (a != numb) { \ + pv_init_error(); \ + pv_error.v_error = ENOSPACE; \ + (void)fclose(fp); \ + pv_give_error("controle"); \ + EXIT(1); } + +#define entete(a,b) \ + infobuf.size = sizeof(hinfo_type) + b/sizeof(char); \ + infobuf.gdscode = a; \ + if (islittle()) { \ + infobuf.size = swaps(infobuf.size); \ + infobuf.gdscode = swaps(infobuf.gdscode); \ + } \ + numb = fwrite((char *)&infobuf, sizeof(hinfo_type), 1, fp); \ + controle(1) + +#define cadre numb = fwrite(&CADRE, sizeof(char), 1, fp); controle(1) + +/*------------------------------------------------------------\ +| | +| Types | +| | +\------------------------------------------------------------*/ +/*------------------------------------------------------------\ +| | +| Variables | +| | +\------------------------------------------------------------*/ + +/* variables globales mais internes au fichier */ + +char CADRE = '\0'; /* pour recommencer a ecrire sur un octet pair, on cadre avec le */ + /* caractere nul en comblant l'octet impair. */ + +/*------------------------------------------------------------\ +| | +| Functions | +| | +\------------------------------------------------------------*/ +/*********** +* +* Preliminaires sur les nombres flottants en GDS2. +* +* Un flottant gds est represente par : +* - 1 bit de signe | ces 8 bits occupent le 1er octet +* - 7 bits d'exposant biaise a 64 | +* - 24 ou 56 bits de mantisse selon la precision (les 3,7 octets suivants) +* +* SEEEEEEE MMMMMMMM MMMMMMMM MMMMMMMM +* SEEEEEEE MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM +* +* L'exposant doit etre diminue de 64 pour avoir sa valeur reelle. +* Decrit sur 7 bits, cela implique que l'exposant reel est compris entre -64 +* et +63 inclus. +* Il s'applique a une puissance de 16. +* +* Donc la valeur absolue du flottant correspondant a ce format est egal a : +* +* mantisse * (16 ^ [exposant -64]) +* +* La mantisse est telle que 1/16 <= mantisse < 1 (du fait de la base 16). +* +* En consequence de quoi, la valeur absolue d'un flottant GDS est comprise +* entre +* 1/16.16^(-64) et ~16^63 +* donc entre +* 5.397605347e-79 et 7.237005577e75 +* +* A ce domaine, il faut ajouter la valeur 0 qui se represente par "tout a zero" +* +***/ +/*********** +* +* DOUBLE_TO_GDSREAL +* +* Cette fonction prend un nombre flottant et le traduit dans un format propre +* aux reels des fichiers GDS2. +* +* ENTREE : nombre flottant a traduire +* precision voulue 1 : simple precision +* 2 : double precision +* +* RETOUR : pointeur sur une chaine de caracteres contenant la traduction. +* NULL si manque de place memoire. +* depassement de capacite du reel GDS +* +* REMARQUE : Cette chaine sera sur 4 ou 8 octets et ne sera pas terminee +* par un '\0'. +* +**/ +static char * + pv_double_to_gdsreal( value, precision ) +double value; +short precision; +{ + register int i; + char buffer[56], *pt; + + pt = (char *)calloc((unsigned)precision * 4, sizeof(char)); + if (pt == (char *)NULL) { + pv_init_error(); + pv_error.v_error = ENOMEM; + pv_give_error("double_to_gdsreal"); + return((char *)NULL); + } + if (value == 0) return(pt); /* la valeur 0 est representee par une zone remplie de 0 */ + + /* On commence par s'occuper du signe du nombre. */ + *pt = (value > 0)? '\0' : '\300'; + value = fabs(value); + + /* on va chercher la valeur de l'exposant du nombre exprime en base 16. */ + i = 0; + while (value >= 1.0) { /* si le nombre correspond a une puissance positive de 16 */ + value /= 16.0; + i++; + } + while (value < 0.0625) {/* si le nombre correspond a une puissance negative de 16 */ + value *= 16.0; + i--; + } + if (i > 63) { /* On prevoit les cas d'overflow. */ + pv_init_error(); + pv_error.v_error = EOVERFL; + pv_error.v_textp = "La valeur absolue du nombre est trop grande pour etre traduite en GDS.\nLa limite est : 7.23 E+75"; + free(pt); + pv_give_error("double_to_gdsreal"); + return((char *)NULL); + } else if (i < -64) { /* et d'underflow. */ + pv_init_error(); + pv_error.v_error = EOVERFL; + pv_error.v_textp = "La valeur absolue du nombre est trop petite pour etre traduite en GDS.\nLa limite est : 5.4 E-79"; + free(pt); + pv_give_error("double_to_gdsreal"); + return((char *)NULL); + } + + i += 64; /* On biaise l'exposant a 64. Ici, on est sur que 0 <= exp <= 127 (donc sur 7 bits) */ + *pt |= (char)i; /* On vient d'ecrire le signe et la valeur de l'exposant biaise a 64 */ + + /* On va maintenant decomposer, bit a bit, la mantisse dans un tableau de caracteres. */ + for (i = 0; i < ( 24 + 32*(precision-1) ); i++) { + value *= 2; + if (value >= 1) { + buffer[i] = '\1'; + value -= 1; + } else buffer[i] = '\0'; + } /* Puis on replace tous ces bits au sein de quelques octets (3 ou 7 selon la precision) */ + for (i = 0; i < ( 24 + 32*(precision-1) ); i++) + pt[1+i/8] |= buffer[i] << (7 - i%8); + + return(pt); +} + +/*********** +* +* ECRIT_GDSREAL +* +* Cette fonction est utilisee pour afficher a l'ecran ce a quoi ressemble un reel au format GDS2. +* Elle ne sert en fait a rien si ce n'est a verifier ce que rend la fonction double_to_gdsreal. +* +****/ + +# if 0 +static void + pv_ecrit_gdsreal( value_str, size ) +char *value_str; +short size; +{ + register int i, j, k; + char buffer[65]; + char buffer2[72]; + + k = 0; + for (i = 0; i < size; i++) + for (j = 7; j >= 0; j--) /* Pour chaque bit de l'octet */ + + buffer[k++] = (((value_str[i] >> j) & 0x0001) != 0) ? '1' : '0'; /* Stocker sa valeur dans le tableau */ + + for (i = 0, j = 0; i < size*8; i++) { + if ( (i != 0) && (i%8 == 0) ) buffer2[j++] = ' '; + buffer2[j] = buffer[i]; + j++; + } + buffer2[j] = '\0'; + return; +} +# endif + +/*********** +* +* RDS_TO_GDS_SYM +* +* Cette fonction prend la definition d'une symetrie en RDS et la transpose en +* son equivalent en GDS. En fait, il s'agit aussi d'une scission, le format +* GDS separant clairement la notion de reflection et la rotation. +* +* ENTREE : la symetrie RDS +* adresse du flag pour memoriser si il y a reflection autour de l'axe +* des abcisses +* adresse de stockage de l'angle de rotation +* +* RETOUR : aucun +* +***/ +static void + pv_rds_to_gds_sym( rds_sym, refx_p, angle_p ) +char rds_sym; +short *refx_p; +double *angle_p; +{ + switch (rds_sym) { + case RDS_NOSYM : + *refx_p = 0; + *angle_p = 0.0; + break; + case RDS_ROT_P : + *refx_p = 0; + *angle_p = 90.0; + break; + case RDS_SYMXY : + *refx_p = 0; + *angle_p = 180.0; + break; + case RDS_ROT_M : + *refx_p = 0; + *angle_p = 270.0; + break; + case RDS_SYM_X : + *refx_p = 1; + *angle_p = 180.0; + break; + case RDS_SY_RM : + *refx_p = 1; + *angle_p = 270.0; + break; + case RDS_SYM_Y : + *refx_p = 1; + *angle_p = 0.0; + break; + case RDS_SY_RP : + *refx_p = 1; + *angle_p = 90.0; + } +} + + + +/*********** +* +* SAUVE_RECTANGLE +* +***/ +static int + pv_sauve_rectangle( rect, fp, layer ) +rdsrec_list *rect; +FILE *fp; +short layer; +{ +register int numb; +hinfo_type infobuf; +short datatype = 0; +int bool = FALSE; +coord_t tab[6]; /* last one reserved for text */ + + /* A connectors is written using a specific layer from now on: + * this implies a simple change of layer */ + if ((IsRdsConExter(rect) || IsRdsRefCon (rect)) && !IsRdsVia(rect)) + layer = GET_GDS_CONNECTOR_LAYER(layer); + else + layer = GET_GDS_LAYER(layer); + + tab[0].X = rect->X; + tab[0].Y = rect->Y; + tab[1].X = rect->X; + tab[1].Y = rect->Y + rect->DY; + tab[2].X = rect->X + rect->DX; + tab[2].Y = rect->Y + rect->DY; + tab[3].X = rect->X + rect->DX; + tab[3].Y = rect->Y; + tab[4].X = rect->X; + tab[4].Y = rect->Y; + tab[5].X = rect->X + (rect->DX >> 2); + tab[5].Y = rect->Y + (rect->DY >> 2); + + entete(BOUNDARY, 0); + + entete(LAYER0, sizeof(short)); + if (islittle()) { + layer = swaps(layer); + datatype = swaps(datatype); + tab[0].X = swapl(tab[0].X); + tab[0].Y = swapl(tab[0].Y); + tab[1].X = swapl(tab[1].X); + tab[1].Y = swapl(tab[1].Y); + tab[2].X = swapl(tab[2].X); + tab[2].Y = swapl(tab[2].Y); + tab[3].X = swapl(tab[3].X); + tab[3].Y = swapl(tab[3].Y); + tab[4].X = swapl(tab[4].X); + tab[4].Y = swapl(tab[4].Y); + tab[5].X = swapl(tab[5].X); + tab[5].Y = swapl(tab[5].Y); + } + numb = fwrite((char *)&layer, sizeof(short), 1, fp); + controle(1); + + entete(DATATYPE, sizeof(short)); + numb = fwrite((char *)&datatype, sizeof(short), 1, fp); + controle(1); + + entete(XY, 5 * sizeof(coord_t)); + numb = fwrite((char *)tab, sizeof(coord_t), 5, fp); + controle(5); + + entete(ENDEL, 0); + /* If the rectangle contains some text, even if it is not a connector, + we drive the text: nodes should be sufficients. + Frederic Petrot: 10/04/96 */ + if (rect->NAME != NULL) { + entete(TEXT, 0); + + entete(LAYER0, sizeof(short)); + numb = fwrite((char *)&layer, sizeof(short), 1, fp); + controle(1); + + /* TEXTTYPE values is set to 0, who cares */ + + entete(TEXTTYPE, sizeof(short)); + layer = 0x00; + numb = fwrite((char *)&layer, sizeof(short), 1, fp); + controle(1); + + entete(XY, sizeof(coord_t)); + numb = fwrite((char *)&tab[5], sizeof(coord_t), 1, fp); + controle(1); + + numb = strlen(rect->NAME); + if ((numb % 2) != 0) { + numb += 1; + bool = TRUE; + } + + entete(STRING, numb * sizeof(char)); + if (fputs(rect->NAME, fp) < 0) { + pv_init_error(); + pv_error.v_error = ENOSPACE; + (void)fclose(fp); + pv_give_error("text_string"); + return(-1); + } + if (bool) cadre; + + entete(ENDEL, 0); + } + return 0; +} + +/*********** +* +* SAUVE_INSTANCE +* +***/ +static int + pv_sauve_instance( inst, fp ) +rdsins_list *inst; +FILE *fp; +{ + register int numb; + hinfo_type infobuf; + int bool = FALSE; + char *gds_angle; + short ref_x_axis; + double rds_angle; + ushort strans; + + entete(SREF, 0); + + numb = strlen(inst->FIGNAME); + if ( (numb % 2) != 0 ) {/* Si la longueur du nom est impaire, on la rend paire */ + numb += 1; /* car chaque enregistrement doit comporter un nombre */ + bool = TRUE; /* pair de caracteres dans un fichier GDS. */ + } + entete(SNAME, numb * sizeof(char)); + if (fputs(inst->FIGNAME, fp) < 0 ) { + pv_init_error(); + pv_error.v_error = ENOSPACE; + (void)fclose(fp); + pv_give_error("sauve_instance"); + return(-1); + } + if (bool) cadre; + + pv_rds_to_gds_sym(inst->TRANSF, &ref_x_axis, &rds_angle); + if (ref_x_axis || rds_angle) { + strans = (ref_x_axis != 0) ? GREFLECT : 0; + entete(STRANS, sizeof(ushort)); + if (islittle()) + strans = swaps(strans); + numb = fwrite((char *)&strans, sizeof(ushort), 1, fp); + controle(1); + } + + if (rds_angle) { + entete(ANGLE, sizeof(angle_type)); + gds_angle = pv_double_to_gdsreal(rds_angle, 2); + if (gds_angle == (char *)NULL) { + (void)fclose(fp); + return(-1); + } + numb = fwrite(gds_angle, sizeof(angle_type), 1, fp); + free(gds_angle); + controle(1); + } + + entete(XY, sizeof(coord_t)); + if (islittle()) { + long X = swapl(inst->X); + long Y = swapl(inst->Y); + + numb = fwrite((char *)&X, sizeof(long), 1, fp); + controle(1); + numb = fwrite((char *)&Y, sizeof(long), 1, fp); + controle(1); + } else { + numb = fwrite((char *)&inst->X, sizeof(long), 1, fp); + controle(1); + numb = fwrite((char *)&inst->Y, sizeof(long), 1, fp); + controle(1); + } + + entete(ENDEL, 0); + return(0); +} + +/**************** +* +* SAUVE_MODELE +* +**********/ +static int + pv_sauve_modele( modele, fp, date ) +rdsfig_list *modele; +FILE *fp; +date_type *date; +{ + register int numb, i; + register rdsrec_list *rect; + register rdsins_list *inst = modele->INSTANCE; + hinfo_type infobuf; + int bool = FALSE; + + entete(BGNSTR, 2 * sizeof(date_type)); + numb = fwrite((char *)&date, sizeof(date_type), 1, fp); + controle(1); + numb = fwrite((char *)&date, sizeof(date_type), 1, fp); + controle(1); + + numb = strlen(modele->NAME); + if ( (numb % 2) != 0 ) { /* Si la longueur du nom est impaire, on la rend paire */ + numb += 1; /* car chaque enregistrement doit comporter un nombre */ + bool = TRUE; /* pair de caracteres dans un fichier GDS. */ + } + entete(STRNAME, numb * sizeof(char)); + if ( fputs(modele->NAME, fp) < 0 ) { + pv_init_error(); + pv_error.v_error = ENOSPACE; + (void)fclose(fp); + pv_give_error("sauve_modele"); + return(-1); + } + if (bool) cadre; + + for (i = 0; i < RDS_MAX_LAYER; i++) { + /* layer to be driven : + Layers that the user does not want, or need, to drive in GDS are + supposed to be set to -1, illegal GDS layer number. */ + if (GET_GDS_LAYER(i) != RDS_GDS_LAYER_EMPTY) { + if (modele->LAYERTAB[i]) { + rect = modele->LAYERTAB[i]; + while (rect) { + if (pv_sauve_rectangle(rect, fp, i) < 0) return -1; + rect = rect->NEXT; + } + } + } + } + + while (inst) { + if (pv_sauve_instance(inst, fp) < 0) return -1; + inst = inst->NEXT; + } + + entete(ENDSTR, 0); + + return 0; /* tout s'est bien passe pendant la sauvegarde sur disque de la structure. */ +} + + +/*------------------------------------------------------------\ +| | +| gdssaverdsfig | +| | +\------------------------------------------------------------*/ + + void gdssaverdsfig( Figure ) + + rdsfig_list *Figure; + { +int bool = FALSE; +register int numb; +register FILE *fp; +hinfo_type infobuf; +short version = 3; +date_type date; +struct tm *p; +time_t t; +char *u_unit, *m_unit; +ptype_list *model_list; + + pv_warning = 1; /* 1 valeur par defaut, envoi de messages. */ +/* +* recherche d'un modele RDS dans la liste et retour de son pointeur, +* pointeur sur la figure pere a sauver; son nom servira a creer +* le nom de la librairie GDS (nom interne) +*/ + model_list = (ptype_list *)reverse((chain_list *)getrdsmodellist(Figure)); + + if ( (fp = mbkfopen(Figure->NAME, "gds", "w")) == NULL ) { + pv_init_error(); + pv_error.v_error = ENOFILE; + pv_error.v_textp = Figure->NAME; + pv_give_error("savegds"); + EXIT(1); + } + + tzset(); + if (time(&t) == (time_t)-1) { /* recuperation de la date GMT du jour */ + (void)fclose(fp); + pv_init_error(); + pv_error.v_error = ECLOCK; + pv_give_error("savegds"); + EXIT(1); + } + p = localtime(&t); /* decompactage de la date GMT en date locale */ + if (p == (struct tm *)NULL) { + (void)fclose(fp); + pv_init_error(); + pv_error.v_error = ENOMEM; + pv_give_error("savegds"); + EXIT(1); + } + if (islittle()) { + date.year = swaps(p->tm_year); + date.month = swaps(p->tm_mon); + date.day = swaps(p->tm_mday); + date.hour = swaps(p->tm_hour); + date.min = swaps(p->tm_min); + date.sec = swaps(p->tm_sec); + version = swaps(version); + } else { + date.year = p->tm_year; + date.month = p->tm_mon; + date.day = p->tm_mday; + date.hour = p->tm_hour; + date.min = p->tm_min; + date.sec = p->tm_sec; + } + + entete(HEADER, sizeof(short)); + numb = fwrite((char *)&version, sizeof(short), 1, fp); + controle(1); + + entete(BGNLIB, 2 * sizeof(date_type)); + numb = fwrite((char *)&date, sizeof(date_type), 1, fp); + controle(1); + numb = fwrite((char *)&date, sizeof(date_type), 1, fp); + controle(1); + + numb = strlen(Figure->NAME); + if ((numb % 2) != 0) {/* Si la longueur du nom est impaire, on la rend paire */ + numb += 1; /* car chaque enregistrement doit comporter un nombre */ + bool = TRUE; /* pair de caracteres dans un fichier GDS. */ + } + entete(LIBNAME, numb * sizeof(char)); + if ( fputs(Figure->NAME, fp) < 0 ) { + pv_init_error(); + pv_error.v_error = ENOSPACE; + (void)fclose(fp); + pv_give_error("savegds"); + EXIT(1); + } + if (bool) + cadre; + + entete(UNITS, 2 * sizeof(unit_type)); + /* who cares about user defined unit ? */ + u_unit = pv_double_to_gdsreal(1.0 / RDS_UNIT, 2); + /* cas d'underflow, d'overflow ou de manque d'espace memoire */ + if (u_unit == (char *)NULL) { + (void)fclose(fp); + EXIT(1); + } + numb = fwrite(u_unit, sizeof(unit_type), 1, fp); + free(u_unit); + controle(1); + m_unit = pv_double_to_gdsreal( 1.0e-6 / RDS_UNIT, 2); + + /* cas d'underflow, d'overflow ou de manque d'espace memoire */ + if (m_unit == (char *)NULL) { + (void)fclose(fp); + EXIT(1); + } + numb = fwrite(m_unit, sizeof(unit_type), 1, fp); + free(m_unit); + controle(1); + + while (model_list) { + if (pv_sauve_modele((rdsfig_list *)model_list->DATA, fp, &date) < 0) + EXIT(1); + model_list = model_list->NEXT; + } + + entete(ENDLIB, 0); + + if (fclose(fp) < 0) { + pv_init_error(); + pv_error.v_error = EIO; + pv_error.v_textp = "Probleme a la fermeture du fichier."; + pv_give_error("savegds"); + EXIT(1); + } +} diff --git a/alliance/src/rdsgds/src/gds_drive.h b/alliance/src/rdsgds/src/gds_drive.h new file mode 100644 index 00000000..dc38f7ff --- /dev/null +++ b/alliance/src/rdsgds/src/gds_drive.h @@ -0,0 +1,49 @@ +#ifndef __P +# if defined(__STDC__) || defined(__GNUC__) +# define __P(x) x +# else +# define __P(x) () +# endif +#endif +/*------------------------------------------------------------\ +| | +| Tool : RDSGDS | +| | +| File : gds_drive.h | +| | +| Authors : Pierre Vittet | +| Modified by Jacomme Ludovic | +| Date : 04/07/93 | +| | +\------------------------------------------------------------*/ + +# ifndef RDSGDS_DRIVE +# define RDSGDS_DRIVE + +/*------------------------------------------------------------\ +| | +| Constants | +| | +\------------------------------------------------------------*/ +/*------------------------------------------------------------\ +| | +| Macro | +| | +\------------------------------------------------------------*/ +/*------------------------------------------------------------\ +| | +| Types | +| | +\------------------------------------------------------------*/ +/*------------------------------------------------------------\ +| | +| Variables | +| | +\------------------------------------------------------------*/ +/*------------------------------------------------------------\ +| | +| Functions | +| | +\------------------------------------------------------------*/ + +# endif diff --git a/alliance/src/rdsgds/src/gds_error.c b/alliance/src/rdsgds/src/gds_error.c new file mode 100644 index 00000000..312aa041 --- /dev/null +++ b/alliance/src/rdsgds/src/gds_error.c @@ -0,0 +1,257 @@ +/*------------------------------------------------------------\ +| | +| Tool : RDSGDS | +| | +| File : gds_error.c | +| | +| Authors : Pierre Vittet | +| Modified by Jacomme Ludovic | +| Date : 04/07/93 | +| | +\------------------------------------------------------------*/ +/*------------------------------------------------------------\ +| | +| Include Files | +| | +\------------------------------------------------------------*/ + +# include +# include +# include "gds.h" +# include "gds_error.h" + +/*------------------------------------------------------------\ +| | +| Constants | +| | +\------------------------------------------------------------*/ +/*------------------------------------------------------------\ +| | +| Types | +| | +\------------------------------------------------------------*/ +/*------------------------------------------------------------\ +| | +| Variables | +| | +\------------------------------------------------------------*/ + + int pv_warning; /* indicateur d'envoi d'avertissement. */ + struct var pv_error; + +/*------------------------------------------------------------\ +| | +| Functions | +| | +\------------------------------------------------------------*/ + +/********* + * + * GIVE_ERROR + * + * Cette fonction utilise la variable pv_error (struct var) et sert a imprimer + * un message d'erreur sur stderr si le programmeur le desire. Son but est + * d'essayer de documenter de la facon la plus claire possible une erreur. + * + * ENTREE : message a afficher + * + * RETOUR : le numero d'erreur + * 0 si il n'y avait pas d'erreur au depart + * + ***/ + +int pv_give_error ( message ) +char *message; +{ + register int error_num = pv_error.v_error; + + if (!error_num) + return(0); /* s'il n'y a pas eu d'erreur, on sort immediatement */ + + switch (error_num) { + case ENOMEM : + (void)fprintf(stderr, "%s : Memoire insuffisante !\n", message); + break; + case EIO : + (void)fprintf(stderr, "%s : Erreur d'entree/sortie !\n", message); + break; + case EFTRUNC : + (void)fprintf(stderr, "%s : Fin de fichier prematuree !\n", message); + break; + case ENOFILE : + (void)fprintf(stderr, "%s : Je n'arrive pas a ouvrir le fichier %s !\n", message, pv_error.v_textp); + pv_error.v_textp = (char *)NULL; /* etant donne que textp sert a donner le nom du fichier, on evite de */ + break; /* le re-imprimer par la suite. */ + case ENOSPACE : + (void)fprintf(stderr, "%s : Il n'y a plus de place sur le disque !\n", message); + break; + case ECLOCK : + (void)fprintf(stderr, "%s : Probleme de lecture de l'horloge interne !\n", message); + break; + case EOVERFL : + (void)fprintf(stderr, "%s : Depassement de capacite !\n", message); + break; + case ENOMODEL : + (void)fprintf(stderr, "%s : Modele inconnu de la base RDS !\n", message); + break; + case ENOCODE : + (void)fprintf(stderr, "%s : Le fichier n'est pas au format voulu !\n", message); + break; + case ENORELE : + (void)fprintf(stderr, "%s : Le fichier correspond a une version trop recente du format !\n", message); + (void)fprintf(stderr, "Il est grand temps de mettre a jour le programme.\n"); + break; + case ENODONE : + (void)fprintf(stderr, "%s : La fonction %s n'est pas terminee.", message, pv_error.v_textp); + (void)fprintf(stderr, "Il faudrait peut-etre la finir...\n"); + pv_error.v_textp = (char *)NULL; + break; + case ENOTHER : + break; + default : + (void)fprintf(stderr, "%s : Erreur non documentee...\n", message); + (void)fprintf(stderr, "Il faudrait peut-etre mettre a jour les messages d'erreur !\n"); + break; + } + if (pv_error.v_textp) /* si il y a un texte supplementaire, */ + (void)fprintf(stderr, "%s\n", pv_error.v_textp); /* on l'imprime. */ + + pv_init_error(); /* une fois qu'on a utilise le contenu de pv_error, on la re-initialise. */ + EXIT(1); + return(error_num); +} + +/********* +* +* INIT_V +* +* La fonction est utilisee pour remettre a zero chaque champ de la variable +* pv_error. +* +***/ + +void pv_init_error() +{ + pv_error.v_error = 0; + pv_error.v_textp = (char *)NULL; +} + +/********* +* +* SET_V_ERROR + +* +* Cette fonction, appelee depuis la macro traitebool, ne sert qu'a positionner +* le champs v_error de la variable v, interne au fichier. +* +***/ + +void + pv_set_pv_error( error_number ) +int error_number; +{ + pv_init_error(); + switch (error_number) { + case TRUNCERR : /* Ici, pas d'erreur d'E/S mais le fichier */ + pv_error.v_error = EFTRUNC; /* n'est pas complet. Voir pv_error */ + break; + case NOMEMORY : + pv_error.v_error = ENOMEM; + break; + case IOERR : + pv_error.v_error = EIO; + break; + case CODEINCONNU : + pv_error.v_error = ENOCODE; + break; + case ATTRTABLERR : + pv_error.v_error = ENOTHER; + pv_error.v_textp = "Erreur sur ATTRTABLE"; + break; + case BGNSTRERR : + pv_error.v_error = ENOTHER; + pv_error.v_textp = "Erreur sur BGNSTR"; + break; + case STRTYPERR : + case STYPTABLERR : + case TEXTNODERR : + pv_error.v_error = ENORELE; + break; + case MASKERR : + pv_error.v_error = ENOTHER; + pv_error.v_textp = "Erreur sur MASK"; + break; + case BOUNDARYERR : + pv_error.v_error = ENOTHER; + pv_error.v_textp = "Erreur sur BOUNDARY"; + break; + case PATHERR : + pv_error.v_error = ENOTHER; + pv_error.v_textp = "Erreur sur PATH"; + break; + case SREFERR : + pv_error.v_error = ENOTHER; + pv_error.v_textp = "Erreur sur SREF"; + break; + case AREFERR : + pv_error.v_error = ENOTHER; + pv_error.v_textp = "Erreur sur AREF"; + break; + case TEXTERR : + pv_error.v_error = ENOTHER; + pv_error.v_textp = "Erreur sur AREF"; + break; + case NODERR : + pv_error.v_error = ENOTHER; + pv_error.v_textp = "Erreur sur NODE"; + break; + case BOXERR : + pv_error.v_error = ENOTHER; + pv_error.v_textp = "Erreur sur BOX"; + break; + case REFLIBSERR : + pv_error.v_error = ENOTHER; + pv_error.v_textp = "Erreur sur REFLIBS"; + break; + case FONTSERR : + pv_error.v_error = ENOTHER; + pv_error.v_textp = "Erreur sur FONTS"; + break; + case STRNAMERR : + pv_error.v_error = ENOTHER; + pv_error.v_textp = "Erreur sur STRNAMERR"; + break; + case FALSE : + case TRUE : + break; /* Ici, rien a faire, v_error a du etre positionne */ + default : + pv_error.v_error = error_number; + break; + } +} + +/*********** +* +* EMET_WARNING +* +* Cette fonction est utilisee pour envoyer des messages d'avertissement a la +* console sur la sortie standard stderr. Ces messages ont pour but de donner +* a l'utilisateur des indications lorsque le parser de GDS se trouve en face +* de problemes insurmontables de traduction mais non bloquants. Par exemple, +* un cas typique est celui ou un objet GDS ne trouve pas d'equivalent dans +* le contexte RDS (i.e. un "path" ou l'equivalent d'un fil) ou encore si une +* operation geometrique est appliquee a un objet mais n'existe pas en RDS. +* +***/ +void + pv_emet_warning( Name, texte1, texte2 ) +char *Name, *texte1, *texte2; +{ + if (pv_warning) + { + if (texte2) + (void)fprintf(stderr, "%s : %s %s.\n", Name, texte1, texte2); + else + (void)fprintf(stderr, "%s : %s.\n", Name, texte1); + } +} diff --git a/alliance/src/rdsgds/src/gds_error.h b/alliance/src/rdsgds/src/gds_error.h new file mode 100644 index 00000000..bed3e79b --- /dev/null +++ b/alliance/src/rdsgds/src/gds_error.h @@ -0,0 +1,135 @@ +#ifndef __P +# if defined(__STDC__) || defined(__GNUC__) +# define __P(x) x +# else +# define __P(x) () +# endif +#endif +/*------------------------------------------------------------\ +| | +| Tool : RDSGDS | +| | +| File : gds_error.h | +| | +| Authors : Pierre Vittet | +| Modified by Jacomme Ludovic | +| Date : 04/07/93 | +| | +\------------------------------------------------------------*/ + +# ifndef RDSGDS_ERROR +# define RDSGDS_ERROR + +/*------------------------------------------------------------\ +| | +| Constants | +| | +\------------------------------------------------------------*/ + +/* erreurs generales */ + +#define ENOMEM 1 /* No enough core. */ +#define EIO 2 /* IO error. */ +#define EFTRUNC 3 /* The file is teuncated somewhere. */ +#define ENOFILE 4 /* Cannot open file. */ +#define ENOSPACE 5 /* No more space on disk. */ +#define ECLOCK 6 /* Cannot read internal clock well. */ +#define EOVERFL 7 /* Overflow or underflow. */ +#define ENOMODEL 8 /* Unknown model in Rds. */ +#define ENODONE 99 + +/* Programme en cours de finition... Cela permet de definir par exemple l'en-tete d'une */ +/* fonction et de ne pas faire son corps. C'est utile si on doit fabriquer une librai- */ +/* rie et que l'on est en retard : n'importe qui peut quand meme inclure cette fonction */ +/* dans un executable, il ne se passera rien lors de son appel. Il suffit simplement de */ +/* recompiler lorsque la librairie est terminee. */ + +/* erreurs specifiques aux parser/driver */ + +#define ENOCODE 101 /* Le code rencontre n'est pas reconnu. + */ +#define ENORELE 102 /* Le code existe bien mais correspond a une version trop recente du format d +e stockage */ + /* (GDS2, CIF...), dans la version avec laquelle on travaille, ce code etait +envisage */ + /* mais pas encore implemente. + */ +#define ENOTHER 255 /* Any other (wierd !) error. */ + +/********* +* +* Voici la liste des valeurs que peut prendre la variable "error" dans toutes +* les fonctions de lecture qui vont suivre. +* Remarque : "error" correspond a "a" dans la macro traitebool et a "c" dans la macro +* setbool (bien qu'elle y prenne, dans la pratique, toujours la valeur TRUNCERR). +* +***/ + +#define TRUNCERR TRUE + 2 /* Comme ca, on est sur que c'est different de */ +#define NOMEMORY TRUE + 3 /* la valeur qui peut avoir ete definie pour */ +#define IOERR TRUE + 4 /* TRUE */ +#define CODEINCONNU TRUE + 5 +#define ATTRTABLERR TRUE + 6 +#define BGNSTRERR TRUE + 7 +#define STYPTABLERR TRUE + 8 +#define MASKERR TRUE + 9 +#define STRTYPERR TRUE + 10 +#define BOUNDARYERR TRUE + 11 +#define PATHERR TRUE + 12 +#define SREFERR TRUE + 13 +#define AREFERR TRUE + 14 +#define TEXTERR TRUE + 15 +#define NODERR TRUE + 16 +#define BOXERR TRUE + 17 +#define REFLIBSERR TRUE + 18 +#define FONTSERR TRUE + 19 +#define TEXTNODERR TRUE + 20 +#define STRNAMERR TRUE + 21 + +/*------------------------------------------------------------\ +| | +| Macro | +| | +\------------------------------------------------------------*/ + +/*------------------------------------------------------------\ +| | +| Types | +| | +\------------------------------------------------------------*/ + +/********* +* +* STRUCT VAR +* +* Cette structure est utilisee pour contenir certaines variables du programme. +* +***/ + +struct var { + short v_error; /* code d'erreur */ + char *v_textp; /* pointeur vers un texte quelconque. */ + /* Peut, par exemple, etre utilise pour completer un message d'erreur */ +}; + +/*------------------------------------------------------------\ +| | +| Variables | +| | +\------------------------------------------------------------*/ + + extern int pv_warning; + extern struct var pv_error; + +/*------------------------------------------------------------\ +| | +| Functions | +| | +\------------------------------------------------------------*/ + + extern int pv_give_error __P((char *message)); + extern void pv_init_error __P(()); + extern void pv_set_pv_error __P((int error_number)); + extern void pv_emet_warning __P((char *Name, char *texte1, char *texte2)); + +# endif diff --git a/alliance/src/rdsgds/src/gds_parse.c b/alliance/src/rdsgds/src/gds_parse.c new file mode 100644 index 00000000..d8d74128 --- /dev/null +++ b/alliance/src/rdsgds/src/gds_parse.c @@ -0,0 +1,1159 @@ +/*------------------------------------------------------------\ +| | +| Tool : RDSGDS | +| | +| File : gds_parse.c | +| | +| Authors : Pierre Vittet | +| Modified by Jacomme Ludovic | +| Date : 04/07/93 | +| Modified by Frederic Petrot: | +| now reads text and is endiannes independant | +| Date : 05/04/96 | +| | +\------------------------------------------------------------*/ +/*------------------------------------------------------------\ +| | +| Include Files | +| | +\------------------------------------------------------------*/ + +# include +# include +# include +# include + +# include +# include +# include +# include +# include +# include +# include +# include + +# include "gds.h" +# include "gds_error.h" +# include "gds_parse.h" +# include "gds_swap.h" + +/*------------------------------------------------------------\ +| | +| Constants | +| | +\------------------------------------------------------------*/ +/*------------------------------------------------------------\ +| | +| Types | +| | +\------------------------------------------------------------*/ +/*------------------------------------------------------------\ +| | +| Variables | +| | +\------------------------------------------------------------*/ + +static double pv_scale; /* facteur d'echelle pour la correspondance*/ + /* des coordonnees entre GDS et RDS. */ +static rdsfig_list *pv_model; /* modele en cours d'elaboration. */ +static int ErrNo; + +static node_list *HEAD_NODE; /* text list in the GDS file */ + +/*------------------------------------------------------------\ +| | +| Functions | +| | +\------------------------------------------------------------*/ + +/* These functions are moreorless verbatim copies of the CIF ones, written by + Ludovic Jacomme. + I've made slight modification for GDS adaptation. + Fred */ + +/*------------------------------------------------------------\ +| | +| Gds Add Node | +| | +\------------------------------------------------------------*/ + + static node_list *GdsAddNode( Name, X, Y, Layer ) + + char *Name; + long X; + long Y; + char Layer; + { + node_list *Node; + + Node = (node_list *)rdsalloc( sizeof(node_list), RDS_ALLOC_HEAP ); + + Node->NEXT = HEAD_NODE; + Node->NAME = Name; + Node->X = X; + Node->Y = Y; + Node->LAYER = Layer; + HEAD_NODE = Node; + + return( Node ); + } + +/*------------------------------------------------------------\ +| | +| Gds Free Node | +| | +\------------------------------------------------------------*/ + + static void GdsFreeNode() + { + node_list *Scan; + node_list *Del; + + Scan = HEAD_NODE; + + while ( Scan != (node_list *)NULL ) + { + Del = Scan; + Scan = Scan->NEXT; + + rdsfreeheap( Del, sizeof( node_list ) ); + } + + HEAD_NODE = (node_list *)NULL; + } + +/*------------------------------------------------------------\ +| | +| Gds Get Rectangle | +| | +\------------------------------------------------------------*/ + + static rdsrec_list *GdsGetRectangle( Figure, X, Y, Layer ) + + rdsfig_list *Figure; + long X; + long Y; + char Layer; + { + rdsrec_list *Scan; + + for ( Scan = Figure->LAYERTAB[ (int)Layer ]; + Scan != (rdsrec_list * )NULL; + Scan = Scan->NEXT) + { + if ( ( X >= Scan->X ) && + ( Y >= Scan->Y ) && + ( X <= Scan->X + Scan->DX ) && + ( Y <= Scan->Y + Scan->DY ) ) + { + return Scan; + } + } + + return ( (rdsrec_list * )NULL ); + } + + +/******************************************************************************* +* * +* REMARQUE IMPORTANTE : * +* * +* Tous les reels, simple ou double precision, dans un fichier GDS sont * +* exprimes en base 16. Ne pas oublier d'en tenir compte lors de l'uti- * +* lisation de variables de ce type. * +* * +*******************************************************************************/ +/*********** +* +* Preliminaires sur les nombres flottants en GDS2. +* +* Un flottant gds est represente par : +* - 1 bit de signe | ces 8 bits occupent le 1er octet +* - 7 bits d'exposant biaise a 64 | +* - 24 ou 56 bits de mantisse selon la precision (les 3,7 octets suivants) +* +* SEEEEEEE MMMMMMMM MMMMMMMM MMMMMMMM +* SEEEEEEE MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM +* +* L'exposant doit etre diminue de 64 pour avoir sa valeur reelle. +* Decrit sur 7 bits, cela implique que l'exposant reel est compris entre -64 +* et +63 inclus. +* Il s'applique a une puissance de 16. +* +* Donc la valeur absolue du flottant correspondant a ce format est egal a : +* +* mantisse * (16 ^ [exposant -64]) +* +* La mantisse est telle que 1/16 <= mantisse < 1 (du fait de la base 16). +* +* En consequence de quoi, la valeur absolue d'un flottant GDS est comprise +* entre +* 1/16.16^(-64) et ~16^63 +* donc entre +* 5.397605347e-79 et 7.237005577e75 +* +* A ce domaine, il faut ajouter la valeur 0 qui se represente par "tout a zero" +* +***/ + +/* +* POW, a replacement for -lm function +*/ +static double + mypow(n, exposant) +double n, exposant; +{ + int i; + double res; + + res = 1.0; + if (exposant > 0) + for (i = 0; i < exposant; i++) + res *= n; + else for (i = 0; i < -exposant; i++) + res /= n; + return (res); +} + +/*********** +* +* GDSREAL_TO_DOUBLE +* +* Cette fonction prend un nombre flottant exprime, en logique GDS2, sur 4 ou 8 +* octets (ce qui correspond a simple ou double precision) et retourne un nombre +* flottant en double precision ("long float") propre a l'ordinateur. +* +* ENTREE : pointeur sur la chaine de caracteres contenant le flottant +* taille de la chaine (4 ou 8) +* +* RETOUR : nombre flottant correspondant +* +**/ +static double + pv_gdsreal_to_double(value_str,size) +char *value_str; +short size; +{ + register int i, j, k; + short signe; + short exposant = 0; + double mantisse = 0; + char buffer[64]; + + /* On va commencer par mettre tous les bits du gdsreal dans un */ + k = 0; /* tableau de caracteres ou chaque caractere represente un bit. */ + for (i = 0; i < size; i++) /* Pour les 4 (ou 8) octets */ + for (j = 7; j >= 0; j--)/* Pour chaque bit de l'octet */ + buffer[k++] = (((value_str[i] >> j) & 0x0001) != 0) ? '1' : '0'; /* Stocker sa valeur dans le tableau */ + + signe = (buffer[0] == '0') ? 1 : -1; + for (i = 1; i < 8; i++) + if (buffer[i] != '0') /* sous-entendu == '1' */ + exposant += 1 << (7-i); + exposant -= 64; /* pour oter le biaisage */ + for (i = 8; i < k; i++) + if (buffer[i] != '0') /* sous-entendu == '1' */ + mantisse += mypow(2.0, 7.0-i); + + return(signe * mantisse * mypow(16.0,(double)exposant)); +} + +/*********** +* +* APPROXIMATION +* +* Cette fonction est utilisee pour savoir si une valeur est l'approximation +* d'une autre valeur a Epsilon pres. Elle sera surtout utilisee pour savoir +* si un un nombre flottant, qui a ete passe d'une representation a l'autre, +* est egale a un autre nombre (generalement une constante) dans un test. Il +* serait en effet dommage qu'un nombre, initialement a 1, prenne une autre +* valeur, meme tres proche (1.000001), lors du tranfert et qu'on ne puisse +* plus constater son egalite a 1, ce qui nous induirait en erreur. +* +***/ + +#define EPSILON 1.0e-3 /* definition de l'approximation permise */ + +static int + pv_approximation(val1, val2) +double val1, val2; +{ + if (val1 < val2 - EPSILON) return 0; + if (val1 > val2 + EPSILON) return 0; + return 1; +} + +#undef EPSILON + +/*********** +* +* GENERE_NOM +* +* Cette fonction genere un nom unique a partir d'un motif de caracteres passe +* comme parametre. +* +* ENTREE : motif de caracteres +* +* RETOUR : pointeur sur le nom genere +* NULL si manque d'espace memoire +* +***/ + +static char *pv_genere_nom(motif) +char *motif; +{ + static int suffixe = 0; + register char *pt; + + /* 10 is the length of the biggest integer in ascii on a 32 bit machine */ + pt = (char *)mbkalloc((strlen(motif) + 1 + 10) * sizeof(char)); + (void)sprintf(pt, "%s_%d", motif, suffixe); + suffixe++; + return(pt); +} + + +/*********** +* +* GDS_TO_RDS_SYM +* +* Cette fonction prend certaines operations de transformation graphique GDS +* appliquees aux instances et retourne leur equivalent dans la logique RDS. +* +* ENTREE : flag indiquant si il y a une reflection par rapport a l'axe des x +* (symetrie en y) appliquee avant une eventuelle rotation. +* angle de rotation +* +* SORTIE : caractere indiquant l'operation correspondante en RDS +* -1 si operation inconnue. (Souvent si angle non droit) +* +* REMARQUE : Etant donne que l'angle est passe comme un flottant et qu'il +* est caste dans un long afin d'etre traduit en RDS (RDS ne traite +* que les angles droits ou plats donc entiers), on va admettre que +* cette transformation peut introduire des erreurs dans une valeur +* d'angle qui serait au depart entiere (on ne parle pas evidemment +* d'angles non entiers qui ne peuvent que perdre en precision). On +* regardera si l'angle obtenu est un multiple de 90' a EPSILON pres +* +***/ + +#define EPSILON 1L + +static int + pv_gds_to_rds_sym(ref_x_axis, angle) +short ref_x_axis; +double angle; +{ + long ang; + + ang = (long)angle; + ang %= 360; /* On ramene l'angle a des valeurs comprises entre 0 et 360' */ + /* On augmente l'angle de EPSILON afin d'avoir le resultat du modulo compris */ + if (((ang + EPSILON) % 90) > (2 * EPSILON)) + return(-1); /* entre 0 et 2 x EPSILON pour des angles multiples de 90 a EPSILON pres */ + switch ((ang + EPSILON) / 90) { + case 0 : /* Apres avoir determine si l'angle etait a peu pres multiple de 90, on fixe */ + case 4 : ang = 0;/* sa valeur au multiple le plus proche. */ + break; + case 1 : ang = 90; + break; + case 2 : ang = 180; + break; + case 3 : ang = 270; + break; + } + if (ref_x_axis) + switch (ang) { + case 0 : return(RDS_SYM_Y); + case 90 : return(RDS_SY_RP); + case 180 : return(RDS_SYM_X); + case 270 : return(RDS_SY_RM); + } else switch (ang) { + case 0 : return(RDS_NOSYM); + case 90 : return(RDS_ROT_P); + case 180 : return(RDS_SYMXY); + case 270 : return(RDS_ROT_M); + } + return(-1); /* aucune raison d'arriver ici. */ +} + +#undef EPSILON +/************************** +* +* This make the conversion between a gds layer and an internal rds layer +* based upon the specified technological file. +* +**************/ +static int + pv_gdslayer_to_symb(layer) +int layer; +{ +int rds_layer; +char texte[8]; + + if (layer != -1) + for (rds_layer = 0; rds_layer < RDS_MAX_LAYER; rds_layer++) { + if (GET_GDS_LAYER(rds_layer) == layer + || GET_GDS_CONNECTOR_LAYER(rds_layer) == layer) + return rds_layer; + } + (void)sprintf(texte, "%d", layer); + pv_emet_warning(pv_model->NAME, "Unknown GDS layer in technology file :", texte); + return -1; +} + +/********* +* +* Un decalage de 3 a droite equivaut a une division par 8. +* Sert a determiner le nombre de paires de coordonnees (x,y) a partir du nombre +* d'octets elles occupent (chaque paire occupe 8 octets i.e. 2 entiers longs). +* +***/ +#define NSHIFT 3 /* LOG2(sizeof(coord_t))*/ + +#define TRASHSIZE 4096 /* taille de la zone ou on va mettre tout ce qui ne nous interesse pas */ + + +/*********** +* +* MACRO LECTUREx +* +* Ces macros sont utilisees pour effectuer et controler la lecture du fichier GDS. +* +* Si error passe a TRUNCERR, c'est que la fin du fichier est arrivee prematurement : +* on n'a pas pu lire autant d'octets qu'il en etait prevu par t +* +* 0 <= retour < t ==> error = TRUNCERR +* +* remarque : par contre, si retour < 0 c'est qu'il y a eu une erreur d'E/S. +* +***/ + +#define lecture1(z,t) \ + if (t > 0) \ + retour = fread((char *)z, 1, t, fp); \ + if (retour == 0) { \ + if (ErrNo == 0) \ + error = TRUNCERR; \ + break; \ + } \ + +#define lecture2(z,t) \ + if (t > 0) \ + retour = fread((char *)z, 1, t, fp); \ + if ((retour == 0) && (ErrNo == 0)) \ + error = TRUNCERR; \ + +/********* +* +* MACRO TRAITEBOOL +* +* La macro suivante permet d'appeler la fonction pv_set_pv_error avec le bon parametre. +* +* Si a est different de 0, c'est qu'il y a eu une erreur autre que d'E/S. a contient +* alors le numero d'erreur. +* Si a = 0 et ErrNo != 0 ==> erreur d'E/S +* Si a = 0 et ErrNo = 0 ==> on a atteint la fin de fichier prematurement et ceci +* alors qu'on se trouvait dans la partie "controle" de la boucle WHILE (donc "a" +* n'a pas encore pu etre positionne a la valeur TRUNCERR) +* +* SI a != 0 ALORS pv_set_pv_error(a) +* SINON SI ErrNo != 0 ALORS pv_set_pv_error(IOERR) +* SINON pv_set_pv_error(TRUNCERR) +* +***/ + +#define traitebool(a) if (a != 0) pv_set_pv_error(a) ; else if (ErrNo != 0) pv_set_pv_error(IOERR) ; else pv_set_pv_error(TRUNCERR) + +/*********** +* +* SKIP_STRUCTURE +* +* Cette fonction est utilisee pour passer tout le code correspondant a un modele +* loin, a l'endroit ou commence la structure (modele en RDS) suivante. +* +* ENTREE : pointeur de fichier ouvert +* +* RETOUR : 0 si tout va bien +* -1 sinon +* +***/ + +static int + pv_skip_structure(fp) +FILE *fp; +{ + register int retour; + hinfo_type infobuf; + int error = FALSE; + char poubelle[TRASHSIZE]; + static char texte[64]; + + while ((retour = fread((char *)&infobuf, sizeof(hinfo_type), 1, fp)) == 1) { + if (islittle()) { + infobuf.gdscode = swaps(infobuf.gdscode); + infobuf.size = swaps(infobuf.size); + } + switch (infobuf.gdscode) { + case TEXT : + case BOUNDARY : + case PATH : + case SREF : + case AREF : + case LAYER0 : + case DATATYPE : + case WIDTH : + case XY : + case ENDEL : + case SNAME : + case COLROW : + case NODE : + case TEXTTYPE : + case PRESENTATION: + case STRING : + case STRANS : + case MAG : + case ANGLE : + case PATHTYPE : + case ELFLAGS : + case ELKEY : + case NODETYPE : + case PROPATTR : + case PROPVALUE : + case BOX : + case BOXTYPE : + case PLEX : + case BGNEXTN : + case ENDEXTN : + lecture2(poubelle, infobuf.size - sizeof(hinfo_type)); + break; + case ENDSTR : + return(0); + default : + pv_init_error(); + pv_error.v_error = ENOCODE; + error = TRUE; + break; + } /* fin du SWITCH */ + + /* on eu une erreur, donc on sort du while prematurement */ + if ((retour < 1) || error) break; + + } /* fin du WHILE */ + + traitebool(error); + sprintf(texte, "skip_structure(dernier code = %04X)", infobuf.gdscode); + pv_give_error(texte); + return(-1); +} + + +/*********** +* +* EVITE_ELEMENT +* +* Cette fonction passe un "element" GDS qui n'a pas son equivalent dans la BD rds. +* +* Retour : -1 si on a eu une erreur +* 0 si tout s'est bien passe +* +***/ + +static int + pv_evite_element(fp, type_element) +FILE *fp; +int type_element; +{ + register int retour; + hinfo_type infobuf; + int error = FALSE; + char poubelle[TRASHSIZE]; + char *texte; + static char *name[] = { + "Illegal type name!", + "Unable to parse aref (array of subcells)", + "Unable to parse box (regular geometry)", + "Unable to parse node (electrical net)", + "Unable to parse path (wire)", + "Unable to parse text (documentation)", + }; + + switch (type_element) { + case AREF : texte = name[1]; + break; + case BOX : texte = name[2]; + break; + case NODE : texte = name[3]; + break; + case PATH : texte = name[4]; + break; + case TEXT : texte = name[5]; + break; + default : texte = name[0]; + break; + } + + pv_emet_warning(pv_model->NAME, texte,(char *)NULL); + + while ((retour = fread((char *)&infobuf, sizeof(hinfo_type), 1, fp)) == 1) { + if (islittle()) { + infobuf.gdscode = swaps(infobuf.gdscode); + infobuf.size = swaps(infobuf.size); + } + switch (infobuf.gdscode) { + case TEXTTYPE : + case BOXTYPE : + case PATHTYPE : + case DATATYPE : + case NODETYPE : + case PRESENTATION: + case WIDTH : + case STRANS : + case MAG : + case ANGLE : + case STRING : + case BGNEXTN : + case ENDEXTN : + case LAYER0 : + case ELFLAGS : + case PLEX : + case XY : + case SNAME : + case COLROW : + case ELKEY : + case PROPATTR : + case PROPVALUE : + lecture2(poubelle, infobuf.size - sizeof(hinfo_type)); + break; + case ENDEL : + return(0); + default : + pv_init_error(); + pv_error.v_error = ENOCODE; + error = TRUE; + break; + } /* fin du SWITCH */ + + /* on eu une erreur, donc on sort du while prematurement */ + if ((retour < 1) || error) break; + + } /* fin du WHILE */ + traitebool(error); + pv_give_error("evite_element"); + return(-1); +} + + +/********* +* +* CONSTRUIT_RECTANGLE +* +* Cette fonction reconstitue un polygone (boundary) decrivant une partie du +* modele. De plus, elle debite ce polygone en rectangles, en ayant verifie +* au prealable que celui-ci est bien un polygone rectangle (sans fil a 45'). +* +* Retour : -2 si on a eu une erreur bloquante +* -1 si le polygone n'etait pas rectangle (erreur non bloquante) +* 0 si tout s'est bien passe +* +***/ + +static int + pv_construit_rectangle(fp) +FILE *fp; +{ + hinfo_type infobuf; + int retour; + int taille; + char poubelle[TRASHSIZE], texte[64]; + coord_t *coord_tab, *new_coord_tab; + unsigned coord_nb, new_coord_nb; + short gds_layer; + char rds_layer = 0; + int i, FLAG = 0; + int error = FALSE; + + while ((retour = fread((char *)&infobuf, sizeof(hinfo_type), 1, fp)) == 1) { + if (islittle()) { + infobuf.gdscode = swaps(infobuf.gdscode); + infobuf.size = swaps(infobuf.size); + } + switch (infobuf.gdscode) { + case LAYER0 : + lecture1(&gds_layer, sizeof(short)); + if (islittle()) + gds_layer = swaps(gds_layer); + rds_layer = pv_gdslayer_to_symb(gds_layer); + if (rds_layer == (char)-1) FLAG = -1; + break; + case XY : + taille = infobuf.size - sizeof(hinfo_type); + if (FLAG == -1) { + lecture2(poubelle, taille); + break; + } + coord_nb = taille >> NSHIFT; + coord_tab = (coord_t *)mbkalloc(coord_nb * sizeof(coord_t)); + lecture1(coord_tab, taille); + if (islittle()) { + int i; + + for (i = 0; i < coord_nb; i++) { + coord_tab[i].X = swapl(coord_tab[i].X); + coord_tab[i].Y = swapl(coord_tab[i].Y); + } + } + if ((coord_nb < 5) || (ispolyrec(coord_tab, coord_nb) == 0)) { + sprintf(texte, "(%ld, %ld", coord_tab[0].X, coord_tab[0].Y); + for (i = 1; i < coord_nb; i++) + sprintf(&texte[strlen(texte)], ", %ld, %ld", coord_tab[i].X, coord_tab[i].Y); + strcat(texte, ")"); + pv_emet_warning(pv_model->NAME, "Non rectangle polygon here", texte); + FLAG = -1; + free((char *)coord_tab); + break; + } + + poly2diag(coord_tab, coord_nb, pv_scale, &new_coord_tab, &new_coord_nb); + if (new_coord_tab == (coord_t *)NULL) { + pv_init_error(); + pv_error.v_error = ENOMEM; + pv_error.v_textp = "(poly2diag)"; + pv_give_error("construit_rectangle"); + error = TRUE; + free((char *)coord_tab); + break; + } + free((char *)coord_tab); + diag2rec(pv_model, rds_layer, new_coord_tab, new_coord_nb); + if (pv_model->LAYERTAB[(int)rds_layer] == (rdsrec_list *)NULL) { + pv_init_error(); + pv_error.v_error = ENOMEM; + pv_error.v_textp = "(diag2rec)"; + pv_give_error("construit_rectangle"); + error = TRUE; + } + free((char *)new_coord_tab); + break; + case ELKEY : + case PROPATTR : + case PROPVALUE : + case ELFLAGS : + case DATATYPE : + case PLEX : + lecture2(poubelle, infobuf.size - sizeof(hinfo_type)); + break; + case ENDEL : + return(FLAG); + default : + pv_init_error(); + pv_error.v_error = ENOCODE; + error = TRUE; + break; + } /* fin du SWITCH */ + + /* on eu une erreur, donc on sort du while prematurement */ + if ((retour < 1) || error) break; + } /* fin du WHILE */ + + traitebool(error); + pv_give_error("fin_construit_rectangle"); + return(-2); +} + +/*********** +* +* CONSTRUIT_INSTANCE +* +* Cette fonction reconstitue une instance (sref) decrivant une partie du modele. +* +* Retour : -2 si on a eu une erreur bloquante +* -1 si presence de loupe, (erreur non bloquante) +* 0 si tout s'est bien passe +* +***/ +static int + pv_construit_instance(fp) +FILE *fp; +{ +hinfo_type infobuf; +int retour; +int error = FALSE; +char nom_modele[33]; +char *nom_instance = (char *)0; +char gds_real[sizeof(mag_type)]; +short ref_x_axis, abs_mag, abs_ang; +ushort strans; +double mag, angle; +long x, y; +char sym; +char poubelle[TRASHSIZE]; +int FLAG = 0; + + + angle = ref_x_axis = abs_mag = abs_ang = 0; + while ((retour = fread((char *)&infobuf, sizeof(hinfo_type), 1, fp)) == 1) { + if (islittle()) { + infobuf.gdscode = swaps(infobuf.gdscode); + infobuf.size = swaps(infobuf.size); + } + switch (infobuf.gdscode) { + case XY : + lecture1(&x, sizeof(long)); + if (islittle()) + x = swapl(x); + x = (long)(pv_scale * (double)x); + lecture1(&y, sizeof(long)); + if (islittle()) + y = swapl(y); + y = (long)(pv_scale * (double)y); + break; + case STRANS : + lecture1(&strans, sizeof(ushort)); + if (islittle()) + strans = swaps(strans); + ref_x_axis = strans & GREFLECT; + abs_mag = strans & GABSMAG; + abs_ang = strans & GABSANG; + if (abs_mag | abs_ang) { + pv_emet_warning(pv_model->NAME, "Unable to cope with magnification or absolute angle on",nom_modele); + FLAG = -1; + } + break; + case MAG : + lecture1(gds_real, sizeof(mag_type)); + if (FLAG == 0) { + mag = pv_gdsreal_to_double(gds_real, sizeof(mag_type)); + if (pv_approximation(mag,1.0) == 0) { + pv_emet_warning(pv_model->NAME, + "Cannot apply maginification to", + nom_modele); + FLAG = -1; + } + } + break; + case ANGLE : + lecture1(gds_real, sizeof(angle_type)); + if (FLAG == 0) + angle = pv_gdsreal_to_double(gds_real, sizeof(angle_type)); + break; + case SNAME : + lecture1(nom_modele, infobuf.size - sizeof(hinfo_type)); + nom_modele[retour] = '\0'; + nom_instance = pv_genere_nom(nom_modele); + break; + case ELFLAGS : + case PLEX : + case ELKEY : + case PROPATTR : + case PROPVALUE : + lecture2(poubelle, infobuf.size - sizeof(hinfo_type)); + break; + case ENDEL : + if (FLAG == 0) { + sym = pv_gds_to_rds_sym(ref_x_axis, angle); + if (sym == -1) { + pv_emet_warning(pv_model->NAME, + "Unknown geometric operation applied to", + nom_modele); + free(nom_instance); + return(-1); + } + if ((CheckPhysicalGridAligned(x) + | CheckPhysicalGridAligned(x)) != 0) { + pv_emet_warning(pv_model->NAME, + "Gds Instance not aligned on grid", NULL); + pv_model->INSTANCE = addrdsins(pv_model, nom_modele, + nom_instance, sym, + RfmRoundLow(x), RfmRoundLow(y)); + } else + pv_model->INSTANCE = addrdsins(pv_model, nom_modele, nom_instance, sym, x, y); + } + free(nom_instance); + return(FLAG); + default : + pv_init_error(); + pv_error.v_error = ENOCODE; + error = TRUE; + break; + } + + /* on eu une erreur, donc on sort du while prematurement */ + if ((retour < 1) || error) break; + } /* fin du WHILE */ + + traitebool(error); + pv_give_error("construit_instance"); + return(-2); +} +/******************************* + * + * Done the 23/09/93 in order to read the texts of GDS files + * This is a copy of one of the other function, with slight + * modifications for reading text. + * Author: Frederic Petrot + ***********************/ +static int + pv_read_text(fp) +FILE *fp; +{ + hinfo_type infobuf; + int retour; + int taille; + coord_t *coord_tab = (coord_t *)0; + unsigned coord_nb; + short gds_layer; + char rds_layer = 0; + int FLAG = 0, XYFLAG = 0; + int error = FALSE; + char string[512]; + char poubelle[TRASHSIZE]; + + *string = '\0'; /* has a string been found ? */ + while ((retour = fread((char *)&infobuf, sizeof(hinfo_type), 1, fp)) == 1) { + if (islittle()) { + infobuf.gdscode = swaps(infobuf.gdscode); + infobuf.size = swaps(infobuf.size); + } + switch (infobuf.gdscode) { + case LAYER0 : + lecture1(&gds_layer, sizeof(short)); + if (islittle()) + gds_layer = swaps(gds_layer); + rds_layer = pv_gdslayer_to_symb(gds_layer); + if (rds_layer == (char)-1) FLAG = -1; + break; + case XY : + taille = infobuf.size - sizeof(hinfo_type); + if (FLAG == -1) { + lecture2(poubelle, taille); + break; + } + coord_nb = taille >> NSHIFT; + if (XYFLAG || coord_nb > 1) { + pv_emet_warning(pv_model->NAME, + "More than one XY for a TEXT entry", + (char *)NULL); + break; + } + coord_tab = (coord_t *)mbkalloc(coord_nb * sizeof(coord_t)); + lecture1(coord_tab, taille); + if (islittle()) { + coord_tab[0].X = swapl(coord_tab[0].X); + coord_tab[0].Y = swapl(coord_tab[0].Y); + } + coord_tab[0].X = (long)(pv_scale * (double)coord_tab[0].X); + coord_tab[0].Y = (long)(pv_scale * (double)coord_tab[0].Y); + XYFLAG = 1; + break; + case TEXTTYPE : + case ELFLAGS : + case PLEX : + case PRESENTATION: + case PATHTYPE : + case WIDTH : + case STRANS : + case MAG : + case ANGLE : + lecture2(poubelle, infobuf.size - sizeof(hinfo_type)); + break; + case ENDEL : + /* Run thru the rectangles to attach them a name if needed + Fred */ + if (FLAG == 0 && *string != '\0') + GdsAddNode(namealloc(string), + coord_tab[0].X, coord_tab[0].Y, rds_layer); + return FLAG; + case STRING : + lecture1(string, infobuf.size - sizeof(hinfo_type)); + string[infobuf.size - sizeof(hinfo_type)] = '\0'; + break; + default : + pv_init_error(); + pv_error.v_error = ENOCODE; + error = TRUE; + break; + } /* fin du SWITCH */ + + /* on eu une erreur, donc on sort du while prematurement */ + /* if ( (retour < 1) || error) break; */ + } /* fin du WHILE */ + + /* traitebool(error); + pv_give_error("fin_lit_texte"); + return(-2); */ + return 0; +} + +rdsfig_list *gdsloadrdsfig(Figure, Name, Mode) +rdsfig_list *Figure; +char *Name; +char Mode; +{ +register int retour; +hinfo_type infobuf; +FILE *fp; +int flag = 0; +int error = FALSE; +char poubelle[TRASHSIZE]; +char gds_real[sizeof(unit_type)]; +char nom_modele[33]; +node_list *ScanNode; +rdsrec_list *Rec; + + + Figure->MODE = 'L'; + + pv_model = (rdsfig_list *)NULL; + pv_warning = 1; /* 1 valeur par defaut, envoi de messages. */ + + if ((fp = mbkfopen(Name, "gds", "r")) == (FILE *)NULL) { + pv_init_error(); + pv_error.v_error = ENOFILE; + pv_error.v_textp = Name; + pv_give_error("loadgds"); + return(NULL); + } + + ErrNo = 0; /* pour etre sur d'avoir zero au depart */ + pv_init_error(); /* remise a zero de v */ + + while ((retour = fread((char *)&infobuf, sizeof(hinfo_type), 1, fp)) == 1) { + if (islittle()) { + infobuf.gdscode = swaps(infobuf.gdscode); + infobuf.size = swaps(infobuf.size); + } + switch (infobuf.gdscode) { + case UNITS : + lecture1(poubelle, sizeof(unit_type)); + lecture1(gds_real, sizeof(unit_type)); + pv_scale = pv_gdsreal_to_double(gds_real,sizeof(unit_type)) + * RDS_UNIT * MICRONS_IN_METER; + break; + case STRNAME : + lecture1(nom_modele, infobuf.size - sizeof(hinfo_type)); + nom_modele[retour] = '\0'; + if (namealloc(nom_modele) == Figure->NAME) + pv_model = Figure; + else + pv_model = addrdsfig(nom_modele, Figure->SIZE); + break; + case SREF : + switch (pv_construit_instance(fp)) { + case 0 : /* deroulement normal */ + break; + case -1 : /* erreur non bloquante.*/ + if (flag != -1) flag = -2; + pv_emet_warning(pv_model->NAME, + "This model will not be included into the data structure", + (char *)NULL); + delrdsfig(pv_model->NAME); + if (pv_skip_structure(fp) < 0) error = SREFERR; + break; + case -2 : + default : + error = SREFERR; + break; + } + break; + case BOUNDARY : + switch (pv_construit_rectangle(fp)) { + case 0 : /* deroulement normal */ + break; + case -1 : /* erreur non bloquante. */ + if (flag != -1) flag = -2; + pv_emet_warning(pv_model->NAME, + "This model will not be included into the data structure", + (char *)NULL); + delrdsfig(pv_model->NAME); + if (pv_skip_structure(fp) < 0) error = BOUNDARYERR; + break; + case -2 : + default : + flag = -1; + error = BOUNDARYERR; + break; + } + break; + case AREF : + case TEXT : /* Well, this is added from the top of my head. + Fred, 23/09/93 */ + pv_read_text(fp); + error = 0; + break; + + case NODE : + case BOX : + case PATH : + if (flag == 0) flag = -3; +/* on ne peut positionner ce flag que si il n'y a pas eu d'erreur plus grave avant */ + if (pv_evite_element(fp, infobuf.gdscode) < 0) + error = PATHERR; + break; + case BGNSTR : + case REFLIBS : + case FONTS : + case ATTRTABLE : + case STRCLASS : + case GENERATIONS: + case FORMAT : + case MASK : + case HEADER : + case BGNLIB : + case LIBNAME : + lecture2(poubelle, infobuf.size - sizeof(hinfo_type)); + break; + case ENDSTR : /* On a rien a faire, on peut passer a la structure suivante. */ + break; + case ENDMASKS : /* il n'y a rien a faire */ + break; + case ENDLIB : /* tout s'est bien passe */ + (void)fclose(fp); + /*********************** + * Name the rectangles that deserve it. + *****************************************/ + for ( ScanNode = HEAD_NODE; + ScanNode != (node_list *)NULL; + ScanNode = ScanNode->NEXT ) + { + Rec = GdsGetRectangle( Figure, ScanNode->X, ScanNode->Y, + ScanNode->LAYER ); + if ( Rec == (rdsrec_list *)NULL ) + { + + sprintf(poubelle, "X: %ld, Y: %ld, Rds Layer: %d Name: %s", + ScanNode->X, ScanNode->Y, + ScanNode->LAYER, ScanNode->NAME); + pv_emet_warning(Figure->NAME, "Unconnected node :", + poubelle); + } + else Rec->NAME = ScanNode->NAME; + } + GdsFreeNode(); + + applyrdsmode(Figure, Mode); + return(Figure); /* Avant retournait flag ! */ + case TEXTNODE : /* not yet released */ + error = TEXTNODERR; + break; + case STYPTABLE : /* unreleased feature */ + error = STYPTABLERR; + break; + case STRTYPE : /* unreleased feature */ + error = STRTYPERR; + break; + default : + error = CODEINCONNU; + break; + } /* fin du SWITCH */ + + /* on eu une erreur, donc on sort du while prematurement */ + if ((retour < 1) || error) break; + + } /* fin du WHILE */ + + (void)fclose(fp); /* Si on arrive jusqu'ici, c'est qu'on a eu */ + traitebool(error); /* un probleme quelconque dans le traitement */ + pv_give_error("loadgds");/* du fichier GDS. */ + return (rdsfig_list *)NULL; +} diff --git a/alliance/src/rdsgds/src/gds_parse.h b/alliance/src/rdsgds/src/gds_parse.h new file mode 100644 index 00000000..e2961ca5 --- /dev/null +++ b/alliance/src/rdsgds/src/gds_parse.h @@ -0,0 +1,69 @@ +#ifndef __P +# if defined(__STDC__) || defined(__GNUC__) +# define __P(x) x +# else +# define __P(x) () +# endif +#endif +/*------------------------------------------------------------\ +| | +| Tool : RDSGDS | +| | +| File : gds_parse.h | +| | +| Authors : Pierre Vittet | +| Modified by Jacomme Ludovic | +| Date : 04/07/93 | +| | +\------------------------------------------------------------*/ + +# ifndef RDSGDS_PARSE +# define RDSGDS_PARSE + +/*------------------------------------------------------------\ +| | +| Constants | +| | +\------------------------------------------------------------*/ + +/* conversion to meters : + GDS internally defines a unit, let says GDS_UNIT, that is so that + GDS_UNIT is defined in meters. + RDS defines its unit so that RDS_UNIT_PARAM is defined in microns. + So RDS_UNIT_PARAM * MICRONS_IN_METER is given in meters, and : + Xgds * GDS_UNIT = Xrds / (RDS_UNIT * MICRONS_IN_METER). */ + +#define MICRONS_IN_METER 1000000 + +/*------------------------------------------------------------\ +| | +| Macro | +| | +\------------------------------------------------------------*/ +/*------------------------------------------------------------\ +| | +| Types | +| | +\------------------------------------------------------------*/ + typedef struct node_list + { + struct node_list *NEXT; + char *NAME; + char LAYER; + long X; + long Y; + + } node_list; + +/*------------------------------------------------------------\ +| | +| Variables | +| | +\------------------------------------------------------------*/ +/*------------------------------------------------------------\ +| | +| Functions | +| | +\------------------------------------------------------------*/ + +# endif diff --git a/alliance/src/rdsgds/src/gds_swap.c b/alliance/src/rdsgds/src/gds_swap.c new file mode 100644 index 00000000..41620663 --- /dev/null +++ b/alliance/src/rdsgds/src/gds_swap.c @@ -0,0 +1,99 @@ +/* This file is moreorless a verbatim copy of the swaptype file issued from + the tool Pwet. + Author: Frederic Petrot */ + +#include "gds_swap.h" + +/* return 0 for big-endian, 1 for little-endian */ +#ifdef __STDC__ +int islittle(void) +#else +int islittle() +#endif +{ + int x = 0x00000001; + + return *(char *)&x; +} + +/* I assume that I know the sizeof all relevant types... + Clean implementations would loop on the sizeof. */ + +#ifdef __STDC__ +char swapc(char k) +#else +char swapc(k) +char k; +#endif +{ +char t; + + t = k; + return t; +} + +#ifdef __STDC__ +short swaps(short s) +#else +short swaps(s) +short s; +#endif +{ +short t; + + *((char *)&t + 1) = *(char *)&s; + *(char *)&t = *((char *)&s + 1); + return t; +} + +#ifdef __STDC__ +int swapi(int i) +#else +int swapi(i) +int i; +#endif +{ +int t; + + *((char *)&t + 3) = *(char *)&i; + *((char *)&t + 2) = *((char *)&i + 1); + *((char *)&t + 1) = *((char *)&i + 2); + *(char *)&t = *((char *)&i + 3); + return t; +} + +#ifdef __STDC__ +long swapl(long l) +#else +long swapl(l) +long l; +#endif +{ +long t; + + *((char *)&t + 3) = *(char *)&l; + *((char *)&t + 2) = *((char *)&l + 1); + *((char *)&t + 1) = *((char *)&l + 2); + *(char *)&t = *((char *)&l + 3); + return t; +} + +#ifdef __STDC__ +double swapd(double d) +#else +double swapd(d) +double d; +#endif +{ +double t; + + *((char *)&t + 7) = *((char *)&d + 0); + *((char *)&t + 6) = *((char *)&d + 1); + *((char *)&t + 5) = *((char *)&d + 2); + *((char *)&t + 4) = *((char *)&d + 3); + *((char *)&t + 3) = *((char *)&d + 4); + *((char *)&t + 2) = *((char *)&d + 5); + *((char *)&t + 1) = *((char *)&d + 6); + *((char *)&t + 0) = *((char *)&d + 7); + return t; +} diff --git a/alliance/src/rdsgds/src/gds_swap.h b/alliance/src/rdsgds/src/gds_swap.h new file mode 100644 index 00000000..67076e10 --- /dev/null +++ b/alliance/src/rdsgds/src/gds_swap.h @@ -0,0 +1,22 @@ +#ifndef __P +# if defined(__STDC__) || defined(__GNUC__) +# define __P(x) x +# else +# define __P(x) () +# endif +#endif +#ifdef __STDC__ +int islittle(void); +char swapc(char); +short swaps(short); +int swapi(int); +long swapl(long); +double swapd(double); +#else + extern int islittle __P(()); + extern char swapc __P(()); + extern short swaps __P(()); + extern int swapi __P(()); + extern long swapl __P(()); + extern double swapd __P(()); +#endif diff --git a/alliance/src/rdsgds/src/rgs.h b/alliance/src/rdsgds/src/rgs.h new file mode 100644 index 00000000..27532cb5 --- /dev/null +++ b/alliance/src/rdsgds/src/rgs.h @@ -0,0 +1,47 @@ +#ifndef __P +# if defined(__STDC__) || defined(__GNUC__) +# define __P(x) x +# else +# define __P(x) () +# endif +#endif +/*------------------------------------------------------------\ +| | +| Tool : RGS | +| | +| File : rgs113.h | +| | +| Authors : Jacomme Ludovic | +| | +| Date : 27.06.95 | +| | +\------------------------------------------------------------*/ + +# ifndef RGS_113_H +# define RGS_113_H + +/*------------------------------------------------------------\ +| | +| Constants | +| | +\------------------------------------------------------------*/ +/*------------------------------------------------------------\ +| | +| Types | +| | +\------------------------------------------------------------*/ +/*------------------------------------------------------------\ +| | +| Global Variables | +| | +\------------------------------------------------------------*/ +/*------------------------------------------------------------\ +| | +| Functions | +| | +\------------------------------------------------------------*/ + + extern rdsfig_list * gdsloadrdsfig __P((rdsfig_list *Figure, char *Name, char Mode)); + extern void gdssaverdsfig __P((rdsfig_list *Figure)); + +# endif