moved mod/awk/* to lib/awk/mod/*
This commit is contained in:
		| @ -1,5 +1,7 @@ | ||||
| AUTOMAKE_OPTIONS = nostdinc | ||||
|  | ||||
| SUBDIRS = . mod | ||||
|  | ||||
| AM_CPPFLAGS = \ | ||||
| 	-I$(top_builddir)/include \ | ||||
| 	-I$(top_srcdir)/include \ | ||||
|  | ||||
| @ -127,9 +127,47 @@ CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ | ||||
| SOURCES = $(libqseawk_la_SOURCES) $(libqseawkxx_la_SOURCES) | ||||
| DIST_SOURCES = $(libqseawk_la_SOURCES) \ | ||||
| 	$(am__libqseawkxx_la_SOURCES_DIST) | ||||
| RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ | ||||
| 	html-recursive info-recursive install-data-recursive \ | ||||
| 	install-dvi-recursive install-exec-recursive \ | ||||
| 	install-html-recursive install-info-recursive \ | ||||
| 	install-pdf-recursive install-ps-recursive install-recursive \ | ||||
| 	installcheck-recursive installdirs-recursive pdf-recursive \ | ||||
| 	ps-recursive uninstall-recursive | ||||
| RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\ | ||||
|   distclean-recursive maintainer-clean-recursive | ||||
| AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ | ||||
| 	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ | ||||
| 	distdir | ||||
| ETAGS = etags | ||||
| CTAGS = ctags | ||||
| DIST_SUBDIRS = $(SUBDIRS) | ||||
| DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) | ||||
| am__relativize = \ | ||||
|   dir0=`pwd`; \ | ||||
|   sed_first='s,^\([^/]*\)/.*$$,\1,'; \ | ||||
|   sed_rest='s,^[^/]*/*,,'; \ | ||||
|   sed_last='s,^.*/\([^/]*\)$$,\1,'; \ | ||||
|   sed_butlast='s,/*[^/]*$$,,'; \ | ||||
|   while test -n "$$dir1"; do \ | ||||
|     first=`echo "$$dir1" | sed -e "$$sed_first"`; \ | ||||
|     if test "$$first" != "."; then \ | ||||
|       if test "$$first" = ".."; then \ | ||||
|         dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ | ||||
|         dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ | ||||
|       else \ | ||||
|         first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ | ||||
|         if test "$$first2" = "$$first"; then \ | ||||
|           dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ | ||||
|         else \ | ||||
|           dir2="../$$dir2"; \ | ||||
|         fi; \ | ||||
|         dir0="$$dir0"/"$$first"; \ | ||||
|       fi; \ | ||||
|     fi; \ | ||||
|     dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ | ||||
|   done; \ | ||||
|   reldir="$$dir2" | ||||
| ACLOCAL = @ACLOCAL@ | ||||
| AMTAR = @AMTAR@ | ||||
| AR = @AR@ | ||||
| @ -304,6 +342,7 @@ top_build_prefix = @top_build_prefix@ | ||||
| top_builddir = @top_builddir@ | ||||
| top_srcdir = @top_srcdir@ | ||||
| AUTOMAKE_OPTIONS = nostdinc | ||||
| SUBDIRS = . mod | ||||
| AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ | ||||
| 	-I$(includedir) $(LTDLINCL) $(am__append_1) $(am__append_2) | ||||
| lib_LTLIBRARIES = libqseawk.la $(am__append_3) | ||||
| @ -313,7 +352,7 @@ libqseawk_la_LIBADD = -lqsecmn $(LIBM) $(LIBLTDL) | ||||
| @ENABLE_CXX_TRUE@libqseawkxx_la_SOURCES = Awk.cpp StdAwk.cpp | ||||
| @ENABLE_CXX_TRUE@libqseawkxx_la_LDFLAGS = -L. -L../cmn -L$(libdir) -version-info 1:0:0 -no-undefined | ||||
| @ENABLE_CXX_TRUE@libqseawkxx_la_LIBADD = -lqseawk -lqsecmnxx -lqsecmn $(LIBM) $(LIBLTDL) | ||||
| all: all-am | ||||
| all: all-recursive | ||||
|  | ||||
| .SUFFIXES: | ||||
| .SUFFIXES: .c .cpp .lo .o .obj | ||||
| @ -451,6 +490,76 @@ mostlyclean-libtool: | ||||
| clean-libtool: | ||||
| 	-rm -rf .libs _libs | ||||
|  | ||||
| # 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. | ||||
| $(RECURSIVE_TARGETS): | ||||
| 	@fail= failcom='exit 1'; \ | ||||
| 	for f in x $$MAKEFLAGS; do \ | ||||
| 	  case $$f in \ | ||||
| 	    *=* | --[!k]*);; \ | ||||
| 	    *k*) failcom='fail=yes';; \ | ||||
| 	  esac; \ | ||||
| 	done; \ | ||||
| 	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; \ | ||||
| 	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ | ||||
| 	  || eval $$failcom; \ | ||||
| 	done; \ | ||||
| 	if test "$$dot_seen" = "no"; then \ | ||||
| 	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ | ||||
| 	fi; test -z "$$fail" | ||||
|  | ||||
| $(RECURSIVE_CLEAN_TARGETS): | ||||
| 	@fail= failcom='exit 1'; \ | ||||
| 	for f in x $$MAKEFLAGS; do \ | ||||
| 	  case $$f in \ | ||||
| 	    *=* | --[!k]*);; \ | ||||
| 	    *k*) failcom='fail=yes';; \ | ||||
| 	  esac; \ | ||||
| 	done; \ | ||||
| 	dot_seen=no; \ | ||||
| 	case "$@" in \ | ||||
| 	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ | ||||
| 	  *) list='$(SUBDIRS)' ;; \ | ||||
| 	esac; \ | ||||
| 	rev=''; for subdir in $$list; do \ | ||||
| 	  if test "$$subdir" = "."; then :; else \ | ||||
| 	    rev="$$subdir $$rev"; \ | ||||
| 	  fi; \ | ||||
| 	done; \ | ||||
| 	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; \ | ||||
| 	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ | ||||
| 	  || eval $$failcom; \ | ||||
| 	done && test -z "$$fail" | ||||
| tags-recursive: | ||||
| 	list='$(SUBDIRS)'; for subdir in $$list; do \ | ||||
| 	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ | ||||
| 	done | ||||
| ctags-recursive: | ||||
| 	list='$(SUBDIRS)'; for subdir in $$list; do \ | ||||
| 	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ | ||||
| 	done | ||||
|  | ||||
| ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) | ||||
| 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ | ||||
| 	unique=`for i in $$list; do \ | ||||
| @ -461,10 +570,23 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) | ||||
| 	mkid -fID $$unique | ||||
| tags: TAGS | ||||
|  | ||||
| TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \ | ||||
| TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \ | ||||
| 		$(TAGS_FILES) $(LISP) | ||||
| 	set x; \ | ||||
| 	here=`pwd`; \ | ||||
| 	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ | ||||
| 	  include_option=--etags-include; \ | ||||
| 	  empty_fix=.; \ | ||||
| 	else \ | ||||
| 	  include_option=--include; \ | ||||
| 	  empty_fix=; \ | ||||
| 	fi; \ | ||||
| 	list='$(SUBDIRS)'; for subdir in $$list; do \ | ||||
| 	  if test "$$subdir" = .; then :; else \ | ||||
| 	    test ! -f $$subdir/TAGS || \ | ||||
| 	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ | ||||
| 	  fi; \ | ||||
| 	done; \ | ||||
| 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \ | ||||
| 	unique=`for i in $$list; do \ | ||||
| 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ | ||||
| @ -483,7 +605,7 @@ TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \ | ||||
| 	  fi; \ | ||||
| 	fi | ||||
| ctags: CTAGS | ||||
| CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \ | ||||
| CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \ | ||||
| 		$(TAGS_FILES) $(LISP) | ||||
| 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \ | ||||
| 	unique=`for i in $$list; do \ | ||||
| @ -533,22 +655,51 @@ distdir: $(DISTFILES) | ||||
| 	    || exit 1; \ | ||||
| 	  fi; \ | ||||
| 	done | ||||
| 	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ | ||||
| 	  if test "$$subdir" = .; then :; else \ | ||||
| 	    test -d "$(distdir)/$$subdir" \ | ||||
| 	    || $(MKDIR_P) "$(distdir)/$$subdir" \ | ||||
| 	    || exit 1; \ | ||||
| 	  fi; \ | ||||
| 	done | ||||
| 	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ | ||||
| 	  if test "$$subdir" = .; then :; else \ | ||||
| 	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ | ||||
| 	    $(am__relativize); \ | ||||
| 	    new_distdir=$$reldir; \ | ||||
| 	    dir1=$$subdir; dir2="$(top_distdir)"; \ | ||||
| 	    $(am__relativize); \ | ||||
| 	    new_top_distdir=$$reldir; \ | ||||
| 	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ | ||||
| 	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ | ||||
| 	    ($(am__cd) $$subdir && \ | ||||
| 	      $(MAKE) $(AM_MAKEFLAGS) \ | ||||
| 	        top_distdir="$$new_top_distdir" \ | ||||
| 	        distdir="$$new_distdir" \ | ||||
| 		am__remove_distdir=: \ | ||||
| 		am__skip_length_check=: \ | ||||
| 		am__skip_mode_fix=: \ | ||||
| 	        distdir) \ | ||||
| 	      || exit 1; \ | ||||
| 	  fi; \ | ||||
| 	done | ||||
| check-am: all-am | ||||
| check: check-am | ||||
| check: check-recursive | ||||
| all-am: Makefile $(LTLIBRARIES) | ||||
| installdirs: | ||||
| installdirs: installdirs-recursive | ||||
| installdirs-am: | ||||
| 	for dir in "$(DESTDIR)$(libdir)"; do \ | ||||
| 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \ | ||||
| 	done | ||||
| install: install-am | ||||
| install-exec: install-exec-am | ||||
| install-data: install-data-am | ||||
| uninstall: uninstall-am | ||||
| install: install-recursive | ||||
| install-exec: install-exec-recursive | ||||
| install-data: install-data-recursive | ||||
| uninstall: uninstall-recursive | ||||
|  | ||||
| install-am: all-am | ||||
| 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am | ||||
|  | ||||
| installcheck: installcheck-am | ||||
| installcheck: installcheck-recursive | ||||
| install-strip: | ||||
| 	if test -z '$(STRIP)'; then \ | ||||
| 	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ | ||||
| @ -570,92 +721,95 @@ distclean-generic: | ||||
| maintainer-clean-generic: | ||||
| 	@echo "This command is intended for maintainers to use" | ||||
| 	@echo "it deletes files that may require special tools to rebuild." | ||||
| clean: clean-am | ||||
| clean: clean-recursive | ||||
|  | ||||
| clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ | ||||
| 	mostlyclean-am | ||||
|  | ||||
| distclean: distclean-am | ||||
| distclean: distclean-recursive | ||||
| 	-rm -rf ./$(DEPDIR) | ||||
| 	-rm -f Makefile | ||||
| distclean-am: clean-am distclean-compile distclean-generic \ | ||||
| 	distclean-tags | ||||
|  | ||||
| dvi: dvi-am | ||||
| dvi: dvi-recursive | ||||
|  | ||||
| dvi-am: | ||||
|  | ||||
| html: html-am | ||||
| html: html-recursive | ||||
|  | ||||
| html-am: | ||||
|  | ||||
| info: info-am | ||||
| info: info-recursive | ||||
|  | ||||
| info-am: | ||||
|  | ||||
| install-data-am: | ||||
|  | ||||
| install-dvi: install-dvi-am | ||||
| install-dvi: install-dvi-recursive | ||||
|  | ||||
| install-dvi-am: | ||||
|  | ||||
| install-exec-am: install-libLTLIBRARIES | ||||
|  | ||||
| install-html: install-html-am | ||||
| install-html: install-html-recursive | ||||
|  | ||||
| install-html-am: | ||||
|  | ||||
| install-info: install-info-am | ||||
| install-info: install-info-recursive | ||||
|  | ||||
| install-info-am: | ||||
|  | ||||
| install-man: | ||||
|  | ||||
| install-pdf: install-pdf-am | ||||
| install-pdf: install-pdf-recursive | ||||
|  | ||||
| install-pdf-am: | ||||
|  | ||||
| install-ps: install-ps-am | ||||
| install-ps: install-ps-recursive | ||||
|  | ||||
| install-ps-am: | ||||
|  | ||||
| installcheck-am: | ||||
|  | ||||
| maintainer-clean: maintainer-clean-am | ||||
| maintainer-clean: maintainer-clean-recursive | ||||
| 	-rm -rf ./$(DEPDIR) | ||||
| 	-rm -f Makefile | ||||
| maintainer-clean-am: distclean-am maintainer-clean-generic | ||||
|  | ||||
| mostlyclean: mostlyclean-am | ||||
| mostlyclean: mostlyclean-recursive | ||||
|  | ||||
| mostlyclean-am: mostlyclean-compile mostlyclean-generic \ | ||||
| 	mostlyclean-libtool | ||||
|  | ||||
| pdf: pdf-am | ||||
| pdf: pdf-recursive | ||||
|  | ||||
| pdf-am: | ||||
|  | ||||
| ps: ps-am | ||||
| ps: ps-recursive | ||||
|  | ||||
| ps-am: | ||||
|  | ||||
| uninstall-am: uninstall-libLTLIBRARIES | ||||
|  | ||||
| .MAKE: install-am install-strip | ||||
| .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ | ||||
| 	install-am install-strip tags-recursive | ||||
|  | ||||
| .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ | ||||
| 	clean-libLTLIBRARIES clean-libtool ctags distclean \ | ||||
| 	distclean-compile distclean-generic distclean-libtool \ | ||||
| 	distclean-tags distdir dvi dvi-am html html-am info info-am \ | ||||
| 	install install-am install-data install-data-am install-dvi \ | ||||
| 	install-dvi-am install-exec install-exec-am install-html \ | ||||
| 	install-html-am install-info install-info-am \ | ||||
| 	install-libLTLIBRARIES install-man install-pdf install-pdf-am \ | ||||
| 	install-ps install-ps-am install-strip installcheck \ | ||||
| 	installcheck-am installdirs maintainer-clean \ | ||||
| 	maintainer-clean-generic mostlyclean mostlyclean-compile \ | ||||
| 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ | ||||
| 	tags uninstall uninstall-am uninstall-libLTLIBRARIES | ||||
| .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ | ||||
| 	all all-am check check-am clean clean-generic \ | ||||
| 	clean-libLTLIBRARIES clean-libtool ctags ctags-recursive \ | ||||
| 	distclean distclean-compile distclean-generic \ | ||||
| 	distclean-libtool distclean-tags distdir dvi dvi-am html \ | ||||
| 	html-am info info-am install install-am install-data \ | ||||
| 	install-data-am install-dvi install-dvi-am install-exec \ | ||||
| 	install-exec-am install-html install-html-am install-info \ | ||||
| 	install-info-am install-libLTLIBRARIES install-man install-pdf \ | ||||
| 	install-pdf-am install-ps install-ps-am install-strip \ | ||||
| 	installcheck installcheck-am installdirs installdirs-am \ | ||||
| 	maintainer-clean maintainer-clean-generic mostlyclean \ | ||||
| 	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ | ||||
| 	pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ | ||||
| 	uninstall-libLTLIBRARIES | ||||
|  | ||||
|  | ||||
| # Tell versions [3.59,3.63) of GNU make to not export all variables. | ||||
|  | ||||
							
								
								
									
										41
									
								
								qse/lib/awk/mod/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								qse/lib/awk/mod/Makefile.am
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | ||||
| AUTOMAKE_OPTIONS = nostdinc | ||||
|  | ||||
| AM_CPPFLAGS = \ | ||||
| 	-I$(top_builddir)/include \ | ||||
| 	-I$(top_srcdir)/include \ | ||||
| 	-I$(includedir) | ||||
|  | ||||
| LDFLAGS_COMMON = -L$(abs_builddir)/../../cmn -L$(abs_builddir)/../../awk -L$(libdir) -no-undefined -version-info 1:0:0 | ||||
| LIBADD_COMMON = -lqseawk -lqsecmn | ||||
|  | ||||
| moddir = $(libdir) | ||||
|  | ||||
| mod_LTLIBRARIES = libqseawk-sys.la  | ||||
| libqseawk_sys_la_SOURCES = sys.c | ||||
| libqseawk_sys_la_LDFLAGS = $(LDFLAGS_COMMON) | ||||
| libqseawk_sys_la_LIBADD = $(LIBADD_COMMON) | ||||
|  | ||||
| mod_LTLIBRARIES += libqseawk-str.la  | ||||
| libqseawk_str_la_SOURCES = str.c | ||||
| libqseawk_str_la_LDFLAGS = $(LDFLAGS_COMMON) | ||||
| libqseawk_str_la_LIBADD = $(LIBADD_COMMON) | ||||
|  | ||||
| mod_LTLIBRARIES += libqseawk-dir.la  | ||||
| libqseawk_dir_la_SOURCES = dir.c | ||||
| libqseawk_dir_la_LDFLAGS = $(LDFLAGS_COMMON) | ||||
| libqseawk_dir_la_LIBADD = $(LIBADD_COMMON) | ||||
|  | ||||
| if HAVE_LIBUCI | ||||
| mod_LTLIBRARIES += libqseawk-uci.la | ||||
| libqseawk_uci_la_SOURCES = uci.c | ||||
| libqseawk_uci_la_LDFLAGS = $(LDFLAGS_COMMON) | ||||
| libqseawk_uci_la_LIBADD = $(LIBADD_COMMON) $(UCI_LIBS) | ||||
| endif | ||||
|  | ||||
| if HAVE_C_MPI | ||||
| mod_LTLIBRARIES += libqseawk-mpi.la | ||||
| libqseawk_mpi_la_CPPFLAGS = $(AM_CPPFLAGS) $(MPI_CFLAGS) | ||||
| libqseawk_mpi_la_SOURCES = mpi.c | ||||
| libqseawk_mpi_la_LDFLAGS = $(LDFLAGS_COMMON) $(MPI_CLDFLAGS) | ||||
| libqseawk_mpi_la_LIBADD = $(LIBADD_COMMON) | ||||
| endif | ||||
							
								
								
									
										675
									
								
								qse/lib/awk/mod/Makefile.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										675
									
								
								qse/lib/awk/mod/Makefile.in
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,675 @@ | ||||
| # Makefile.in generated by automake 1.11.3 from Makefile.am. | ||||
| # @configure_input@ | ||||
|  | ||||
| # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, | ||||
| # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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. | ||||
|  | ||||
| @SET_MAKE@ | ||||
|  | ||||
| VPATH = @srcdir@ | ||||
| pkgdatadir = $(datadir)/@PACKAGE@ | ||||
| pkgincludedir = $(includedir)/@PACKAGE@ | ||||
| pkglibdir = $(libdir)/@PACKAGE@ | ||||
| pkglibexecdir = $(libexecdir)/@PACKAGE@ | ||||
| am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd | ||||
| install_sh_DATA = $(install_sh) -c -m 644 | ||||
| install_sh_PROGRAM = $(install_sh) -c | ||||
| install_sh_SCRIPT = $(install_sh) -c | ||||
| INSTALL_HEADER = $(INSTALL_DATA) | ||||
| transform = $(program_transform_name) | ||||
| NORMAL_INSTALL = : | ||||
| PRE_INSTALL = : | ||||
| POST_INSTALL = : | ||||
| NORMAL_UNINSTALL = : | ||||
| PRE_UNINSTALL = : | ||||
| POST_UNINSTALL = : | ||||
| build_triplet = @build@ | ||||
| host_triplet = @host@ | ||||
| @HAVE_LIBUCI_TRUE@am__append_1 = libqseawk-uci.la | ||||
| @HAVE_C_MPI_TRUE@am__append_2 = libqseawk-mpi.la | ||||
| subdir = lib/awk/mod | ||||
| DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in | ||||
| ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 | ||||
| am__aclocal_m4_deps = $(top_srcdir)/m4/argz.m4 \ | ||||
| 	$(top_srcdir)/m4/ax_numval.m4 $(top_srcdir)/m4/ax_pthread.m4 \ | ||||
| 	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltdl.m4 \ | ||||
| 	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ | ||||
| 	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ | ||||
| 	$(top_srcdir)/m4/lx_find_mpi.m4 $(top_srcdir)/configure.ac | ||||
| am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ | ||||
| 	$(ACLOCAL_M4) | ||||
| mkinstalldirs = $(install_sh) -d | ||||
| CONFIG_HEADER = $(top_builddir)/include/qse/config.h | ||||
| CONFIG_CLEAN_FILES = | ||||
| CONFIG_CLEAN_VPATH_FILES = | ||||
| am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; | ||||
| am__vpath_adj = case $$p in \ | ||||
|     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ | ||||
|     *) f=$$p;; \ | ||||
|   esac; | ||||
| am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; | ||||
| am__install_max = 40 | ||||
| am__nobase_strip_setup = \ | ||||
|   srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` | ||||
| am__nobase_strip = \ | ||||
|   for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" | ||||
| am__nobase_list = $(am__nobase_strip_setup); \ | ||||
|   for p in $$list; do echo "$$p $$p"; done | \ | ||||
|   sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ | ||||
|   $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ | ||||
|     if (++n[$$2] == $(am__install_max)) \ | ||||
|       { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ | ||||
|     END { for (dir in files) print dir, files[dir] }' | ||||
| am__base_list = \ | ||||
|   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ | ||||
|   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | ||||
| am__uninstall_files_from_dir = { \ | ||||
|   test -z "$$files" \ | ||||
|     || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ | ||||
|     || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ | ||||
|          $(am__cd) "$$dir" && rm -f $$files; }; \ | ||||
|   } | ||||
| am__installdirs = "$(DESTDIR)$(moddir)" | ||||
| LTLIBRARIES = $(mod_LTLIBRARIES) | ||||
| am__DEPENDENCIES_1 = | ||||
| libqseawk_dir_la_DEPENDENCIES = $(am__DEPENDENCIES_1) | ||||
| am_libqseawk_dir_la_OBJECTS = dir.lo | ||||
| libqseawk_dir_la_OBJECTS = $(am_libqseawk_dir_la_OBJECTS) | ||||
| libqseawk_dir_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ | ||||
| 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ | ||||
| 	$(libqseawk_dir_la_LDFLAGS) $(LDFLAGS) -o $@ | ||||
| @HAVE_C_MPI_TRUE@libqseawk_mpi_la_DEPENDENCIES =  \ | ||||
| @HAVE_C_MPI_TRUE@	$(am__DEPENDENCIES_1) | ||||
| am__libqseawk_mpi_la_SOURCES_DIST = mpi.c | ||||
| @HAVE_C_MPI_TRUE@am_libqseawk_mpi_la_OBJECTS =  \ | ||||
| @HAVE_C_MPI_TRUE@	libqseawk_mpi_la-mpi.lo | ||||
| libqseawk_mpi_la_OBJECTS = $(am_libqseawk_mpi_la_OBJECTS) | ||||
| libqseawk_mpi_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ | ||||
| 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ | ||||
| 	$(libqseawk_mpi_la_LDFLAGS) $(LDFLAGS) -o $@ | ||||
| @HAVE_C_MPI_TRUE@am_libqseawk_mpi_la_rpath = -rpath $(moddir) | ||||
| libqseawk_str_la_DEPENDENCIES = $(am__DEPENDENCIES_1) | ||||
| am_libqseawk_str_la_OBJECTS = str.lo | ||||
| libqseawk_str_la_OBJECTS = $(am_libqseawk_str_la_OBJECTS) | ||||
| libqseawk_str_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ | ||||
| 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ | ||||
| 	$(libqseawk_str_la_LDFLAGS) $(LDFLAGS) -o $@ | ||||
| libqseawk_sys_la_DEPENDENCIES = $(am__DEPENDENCIES_1) | ||||
| am_libqseawk_sys_la_OBJECTS = sys.lo | ||||
| libqseawk_sys_la_OBJECTS = $(am_libqseawk_sys_la_OBJECTS) | ||||
| libqseawk_sys_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ | ||||
| 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ | ||||
| 	$(libqseawk_sys_la_LDFLAGS) $(LDFLAGS) -o $@ | ||||
| @HAVE_LIBUCI_TRUE@libqseawk_uci_la_DEPENDENCIES =  \ | ||||
| @HAVE_LIBUCI_TRUE@	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) | ||||
| am__libqseawk_uci_la_SOURCES_DIST = uci.c | ||||
| @HAVE_LIBUCI_TRUE@am_libqseawk_uci_la_OBJECTS = uci.lo | ||||
| libqseawk_uci_la_OBJECTS = $(am_libqseawk_uci_la_OBJECTS) | ||||
| libqseawk_uci_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ | ||||
| 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ | ||||
| 	$(libqseawk_uci_la_LDFLAGS) $(LDFLAGS) -o $@ | ||||
| @HAVE_LIBUCI_TRUE@am_libqseawk_uci_la_rpath = -rpath $(moddir) | ||||
| DEFAULT_INCLUDES =  | ||||
| depcomp = $(SHELL) $(top_srcdir)/ac/depcomp | ||||
| am__depfiles_maybe = depfiles | ||||
| am__mv = mv -f | ||||
| COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ | ||||
| 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) | ||||
| LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ | ||||
| 	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ | ||||
| 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) | ||||
| CCLD = $(CC) | ||||
| LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ | ||||
| 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ | ||||
| 	$(LDFLAGS) -o $@ | ||||
| SOURCES = $(libqseawk_dir_la_SOURCES) $(libqseawk_mpi_la_SOURCES) \ | ||||
| 	$(libqseawk_str_la_SOURCES) $(libqseawk_sys_la_SOURCES) \ | ||||
| 	$(libqseawk_uci_la_SOURCES) | ||||
| DIST_SOURCES = $(libqseawk_dir_la_SOURCES) \ | ||||
| 	$(am__libqseawk_mpi_la_SOURCES_DIST) \ | ||||
| 	$(libqseawk_str_la_SOURCES) $(libqseawk_sys_la_SOURCES) \ | ||||
| 	$(am__libqseawk_uci_la_SOURCES_DIST) | ||||
| ETAGS = etags | ||||
| CTAGS = ctags | ||||
| DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) | ||||
| ACLOCAL = @ACLOCAL@ | ||||
| AMTAR = @AMTAR@ | ||||
| AR = @AR@ | ||||
| ARGZ_H = @ARGZ_H@ | ||||
| AUTOCONF = @AUTOCONF@ | ||||
| AUTOHEADER = @AUTOHEADER@ | ||||
| AUTOMAKE = @AUTOMAKE@ | ||||
| AWK = @AWK@ | ||||
| BUILD_MODE = @BUILD_MODE@ | ||||
| CC = @CC@ | ||||
| CCDEPMODE = @CCDEPMODE@ | ||||
| CFLAGS = @CFLAGS@ | ||||
| CHAR_MODE = @CHAR_MODE@ | ||||
| CPP = @CPP@ | ||||
| CPPFLAGS = @CPPFLAGS@ | ||||
| CXX = @CXX@ | ||||
| CXXCPP = @CXXCPP@ | ||||
| CXXDEPMODE = @CXXDEPMODE@ | ||||
| CXXFLAGS = @CXXFLAGS@ | ||||
| CYGPATH_W = @CYGPATH_W@ | ||||
| DEFS = @DEFS@ | ||||
| DEPDIR = @DEPDIR@ | ||||
| DLLTOOL = @DLLTOOL@ | ||||
| DSYMUTIL = @DSYMUTIL@ | ||||
| DUMPBIN = @DUMPBIN@ | ||||
| ECHO = @ECHO@ | ||||
| ECHO_C = @ECHO_C@ | ||||
| ECHO_N = @ECHO_N@ | ||||
| ECHO_T = @ECHO_T@ | ||||
| EGREP = @EGREP@ | ||||
| EXEEXT = @EXEEXT@ | ||||
| FGREP = @FGREP@ | ||||
| GREP = @GREP@ | ||||
| HAVE_CXX = @HAVE_CXX@ | ||||
| INCLTDL = @INCLTDL@ | ||||
| INSTALL = @INSTALL@ | ||||
| INSTALL_DATA = @INSTALL_DATA@ | ||||
| INSTALL_PROGRAM = @INSTALL_PROGRAM@ | ||||
| INSTALL_SCRIPT = @INSTALL_SCRIPT@ | ||||
| INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ | ||||
| LD = @LD@ | ||||
| LDFLAGS = @LDFLAGS@ | ||||
| LIBADD_DL = @LIBADD_DL@ | ||||
| LIBADD_DLD_LINK = @LIBADD_DLD_LINK@ | ||||
| LIBADD_DLOPEN = @LIBADD_DLOPEN@ | ||||
| LIBADD_SHL_LOAD = @LIBADD_SHL_LOAD@ | ||||
| LIBLTDL = @LIBLTDL@ | ||||
| LIBM = @LIBM@ | ||||
| LIBOBJS = @LIBOBJS@ | ||||
| LIBS = @LIBS@ | ||||
| LIBTOOL = @LIBTOOL@ | ||||
| LIBTOOL_DEPS = @LIBTOOL_DEPS@ | ||||
| LIPO = @LIPO@ | ||||
| LN_S = @LN_S@ | ||||
| LTDLDEPS = @LTDLDEPS@ | ||||
| LTDLINCL = @LTDLINCL@ | ||||
| LTDLOPEN = @LTDLOPEN@ | ||||
| LTLIBOBJS = @LTLIBOBJS@ | ||||
| LT_CONFIG_H = @LT_CONFIG_H@ | ||||
| LT_DLLOADERS = @LT_DLLOADERS@ | ||||
| LT_DLPREOPEN = @LT_DLPREOPEN@ | ||||
| MAKEINFO = @MAKEINFO@ | ||||
| MANIFEST_TOOL = @MANIFEST_TOOL@ | ||||
| MKDIR_P = @MKDIR_P@ | ||||
| MPICC = @MPICC@ | ||||
| MPI_CFLAGS = @MPI_CFLAGS@ | ||||
| MPI_CLDFLAGS = @MPI_CLDFLAGS@ | ||||
| NM = @NM@ | ||||
| NMEDIT = @NMEDIT@ | ||||
| OBJDUMP = @OBJDUMP@ | ||||
| OBJEXT = @OBJEXT@ | ||||
| OTOOL = @OTOOL@ | ||||
| OTOOL64 = @OTOOL64@ | ||||
| PACKAGE = @PACKAGE@ | ||||
| PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ | ||||
| PACKAGE_NAME = @PACKAGE_NAME@ | ||||
| PACKAGE_STRING = @PACKAGE_STRING@ | ||||
| PACKAGE_TARNAME = @PACKAGE_TARNAME@ | ||||
| PACKAGE_URL = @PACKAGE_URL@ | ||||
| PACKAGE_VERSION = @PACKAGE_VERSION@ | ||||
| PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ | ||||
| PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ | ||||
| PACKAGE_VERSION_PATCH = @PACKAGE_VERSION_PATCH@ | ||||
| PATH_SEPARATOR = @PATH_SEPARATOR@ | ||||
| PTHREAD_CC = @PTHREAD_CC@ | ||||
| PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ | ||||
| PTHREAD_LIBS = @PTHREAD_LIBS@ | ||||
| QSE_PROJECT_AUTHOR = @QSE_PROJECT_AUTHOR@ | ||||
| QSE_PROJECT_URL = @QSE_PROJECT_URL@ | ||||
| QSE_SIZEOF_CHAR = @QSE_SIZEOF_CHAR@ | ||||
| QSE_SIZEOF_DOUBLE = @QSE_SIZEOF_DOUBLE@ | ||||
| QSE_SIZEOF_FLOAT = @QSE_SIZEOF_FLOAT@ | ||||
| QSE_SIZEOF_INT = @QSE_SIZEOF_INT@ | ||||
| QSE_SIZEOF_LONG = @QSE_SIZEOF_LONG@ | ||||
| QSE_SIZEOF_LONG_DOUBLE = @QSE_SIZEOF_LONG_DOUBLE@ | ||||
| QSE_SIZEOF_LONG_LONG = @QSE_SIZEOF_LONG_LONG@ | ||||
| QSE_SIZEOF_OFF64_T = @QSE_SIZEOF_OFF64_T@ | ||||
| QSE_SIZEOF_OFF_T = @QSE_SIZEOF_OFF_T@ | ||||
| QSE_SIZEOF_SHORT = @QSE_SIZEOF_SHORT@ | ||||
| QSE_SIZEOF_VOID_P = @QSE_SIZEOF_VOID_P@ | ||||
| QSE_SIZEOF_WCHAR_T = @QSE_SIZEOF_WCHAR_T@ | ||||
| RANLIB = @RANLIB@ | ||||
| RM = @RM@ | ||||
| RMDIR = @RMDIR@ | ||||
| SED = @SED@ | ||||
| SENDFILE_LIBS = @SENDFILE_LIBS@ | ||||
| SET_MAKE = @SET_MAKE@ | ||||
| SHELL = @SHELL@ | ||||
| SOCKET_LIBS = @SOCKET_LIBS@ | ||||
| SSL_LIBS = @SSL_LIBS@ | ||||
| STRIP = @STRIP@ | ||||
| TRUE = @TRUE@ | ||||
| UCI_LIBS = @UCI_LIBS@ | ||||
| UNICOWS_LIBS = @UNICOWS_LIBS@ | ||||
| VERSION = @VERSION@ | ||||
| abs_builddir = @abs_builddir@ | ||||
| abs_srcdir = @abs_srcdir@ | ||||
| abs_top_builddir = @abs_top_builddir@ | ||||
| abs_top_srcdir = @abs_top_srcdir@ | ||||
| ac_ct_AR = @ac_ct_AR@ | ||||
| ac_ct_CC = @ac_ct_CC@ | ||||
| ac_ct_CXX = @ac_ct_CXX@ | ||||
| ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ | ||||
| am__include = @am__include@ | ||||
| am__leading_dot = @am__leading_dot@ | ||||
| am__quote = @am__quote@ | ||||
| am__tar = @am__tar@ | ||||
| am__untar = @am__untar@ | ||||
| ax_pthread_config = @ax_pthread_config@ | ||||
| bindir = @bindir@ | ||||
| build = @build@ | ||||
| build_alias = @build_alias@ | ||||
| build_cpu = @build_cpu@ | ||||
| build_os = @build_os@ | ||||
| build_vendor = @build_vendor@ | ||||
| builddir = @builddir@ | ||||
| datadir = @datadir@ | ||||
| datarootdir = @datarootdir@ | ||||
| docdir = @docdir@ | ||||
| dvidir = @dvidir@ | ||||
| exec_prefix = @exec_prefix@ | ||||
| host = @host@ | ||||
| host_alias = @host_alias@ | ||||
| host_cpu = @host_cpu@ | ||||
| host_os = @host_os@ | ||||
| host_vendor = @host_vendor@ | ||||
| htmldir = @htmldir@ | ||||
| includedir = @includedir@ | ||||
| infodir = @infodir@ | ||||
| install_sh = @install_sh@ | ||||
| libdir = @libdir@ | ||||
| libexecdir = @libexecdir@ | ||||
| localedir = @localedir@ | ||||
| localstatedir = @localstatedir@ | ||||
| ltdl_LIBOBJS = @ltdl_LIBOBJS@ | ||||
| ltdl_LTLIBOBJS = @ltdl_LTLIBOBJS@ | ||||
| mandir = @mandir@ | ||||
| mkdir_p = @mkdir_p@ | ||||
| oldincludedir = @oldincludedir@ | ||||
| pdfdir = @pdfdir@ | ||||
| prefix = @prefix@ | ||||
| program_transform_name = @program_transform_name@ | ||||
| psdir = @psdir@ | ||||
| sbindir = @sbindir@ | ||||
| sharedstatedir = @sharedstatedir@ | ||||
| srcdir = @srcdir@ | ||||
| subdirs = @subdirs@ | ||||
| sys_symbol_underscore = @sys_symbol_underscore@ | ||||
| sysconfdir = @sysconfdir@ | ||||
| target_alias = @target_alias@ | ||||
| top_build_prefix = @top_build_prefix@ | ||||
| top_builddir = @top_builddir@ | ||||
| top_srcdir = @top_srcdir@ | ||||
| AUTOMAKE_OPTIONS = nostdinc | ||||
| AM_CPPFLAGS = \ | ||||
| 	-I$(top_builddir)/include \ | ||||
| 	-I$(top_srcdir)/include \ | ||||
| 	-I$(includedir) | ||||
|  | ||||
| LDFLAGS_COMMON = -L$(abs_builddir)/../../cmn -L$(abs_builddir)/../../awk -L$(libdir) -no-undefined -version-info 1:0:0 | ||||
| LIBADD_COMMON = -lqseawk -lqsecmn | ||||
| moddir = $(libdir) | ||||
| mod_LTLIBRARIES = libqseawk-sys.la libqseawk-str.la libqseawk-dir.la \ | ||||
| 	$(am__append_1) $(am__append_2) | ||||
| libqseawk_sys_la_SOURCES = sys.c | ||||
| libqseawk_sys_la_LDFLAGS = $(LDFLAGS_COMMON) | ||||
| libqseawk_sys_la_LIBADD = $(LIBADD_COMMON) | ||||
| libqseawk_str_la_SOURCES = str.c | ||||
| libqseawk_str_la_LDFLAGS = $(LDFLAGS_COMMON) | ||||
| libqseawk_str_la_LIBADD = $(LIBADD_COMMON) | ||||
| libqseawk_dir_la_SOURCES = dir.c | ||||
| libqseawk_dir_la_LDFLAGS = $(LDFLAGS_COMMON) | ||||
| libqseawk_dir_la_LIBADD = $(LIBADD_COMMON) | ||||
| @HAVE_LIBUCI_TRUE@libqseawk_uci_la_SOURCES = uci.c | ||||
| @HAVE_LIBUCI_TRUE@libqseawk_uci_la_LDFLAGS = $(LDFLAGS_COMMON) | ||||
| @HAVE_LIBUCI_TRUE@libqseawk_uci_la_LIBADD = $(LIBADD_COMMON) $(UCI_LIBS) | ||||
| @HAVE_C_MPI_TRUE@libqseawk_mpi_la_CPPFLAGS = $(AM_CPPFLAGS) $(MPI_CFLAGS) | ||||
| @HAVE_C_MPI_TRUE@libqseawk_mpi_la_SOURCES = mpi.c | ||||
| @HAVE_C_MPI_TRUE@libqseawk_mpi_la_LDFLAGS = $(LDFLAGS_COMMON) $(MPI_CLDFLAGS) | ||||
| @HAVE_C_MPI_TRUE@libqseawk_mpi_la_LIBADD = $(LIBADD_COMMON) | ||||
| all: all-am | ||||
|  | ||||
| .SUFFIXES: | ||||
| .SUFFIXES: .c .lo .o .obj | ||||
| $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps) | ||||
| 	@for dep in $?; do \ | ||||
| 	  case '$(am__configure_deps)' in \ | ||||
| 	    *$$dep*) \ | ||||
| 	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ | ||||
| 	        && { if test -f $@; then exit 0; else break; fi; }; \ | ||||
| 	      exit 1;; \ | ||||
| 	  esac; \ | ||||
| 	done; \ | ||||
| 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/awk/mod/Makefile'; \ | ||||
| 	$(am__cd) $(top_srcdir) && \ | ||||
| 	  $(AUTOMAKE) --foreign lib/awk/mod/Makefile | ||||
| .PRECIOUS: Makefile | ||||
| Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status | ||||
| 	@case '$?' in \ | ||||
| 	  *config.status*) \ | ||||
| 	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ | ||||
| 	  *) \ | ||||
| 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ | ||||
| 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ | ||||
| 	esac; | ||||
|  | ||||
| $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) | ||||
| 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh | ||||
|  | ||||
| $(top_srcdir)/configure:  $(am__configure_deps) | ||||
| 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh | ||||
| $(ACLOCAL_M4):  $(am__aclocal_m4_deps) | ||||
| 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh | ||||
| $(am__aclocal_m4_deps): | ||||
| install-modLTLIBRARIES: $(mod_LTLIBRARIES) | ||||
| 	@$(NORMAL_INSTALL) | ||||
| 	test -z "$(moddir)" || $(MKDIR_P) "$(DESTDIR)$(moddir)" | ||||
| 	@list='$(mod_LTLIBRARIES)'; test -n "$(moddir)" || list=; \ | ||||
| 	list2=; for p in $$list; do \ | ||||
| 	  if test -f $$p; then \ | ||||
| 	    list2="$$list2 $$p"; \ | ||||
| 	  else :; fi; \ | ||||
| 	done; \ | ||||
| 	test -z "$$list2" || { \ | ||||
| 	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(moddir)'"; \ | ||||
| 	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(moddir)"; \ | ||||
| 	} | ||||
|  | ||||
| uninstall-modLTLIBRARIES: | ||||
| 	@$(NORMAL_UNINSTALL) | ||||
| 	@list='$(mod_LTLIBRARIES)'; test -n "$(moddir)" || list=; \ | ||||
| 	for p in $$list; do \ | ||||
| 	  $(am__strip_dir) \ | ||||
| 	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(moddir)/$$f'"; \ | ||||
| 	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(moddir)/$$f"; \ | ||||
| 	done | ||||
|  | ||||
| clean-modLTLIBRARIES: | ||||
| 	-test -z "$(mod_LTLIBRARIES)" || rm -f $(mod_LTLIBRARIES) | ||||
| 	@list='$(mod_LTLIBRARIES)'; for p in $$list; do \ | ||||
| 	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ | ||||
| 	  test "$$dir" != "$$p" || dir=.; \ | ||||
| 	  echo "rm -f \"$${dir}/so_locations\""; \ | ||||
| 	  rm -f "$${dir}/so_locations"; \ | ||||
| 	done | ||||
| libqseawk-dir.la: $(libqseawk_dir_la_OBJECTS) $(libqseawk_dir_la_DEPENDENCIES) $(EXTRA_libqseawk_dir_la_DEPENDENCIES)  | ||||
| 	$(libqseawk_dir_la_LINK) -rpath $(moddir) $(libqseawk_dir_la_OBJECTS) $(libqseawk_dir_la_LIBADD) $(LIBS) | ||||
| libqseawk-mpi.la: $(libqseawk_mpi_la_OBJECTS) $(libqseawk_mpi_la_DEPENDENCIES) $(EXTRA_libqseawk_mpi_la_DEPENDENCIES)  | ||||
| 	$(libqseawk_mpi_la_LINK) $(am_libqseawk_mpi_la_rpath) $(libqseawk_mpi_la_OBJECTS) $(libqseawk_mpi_la_LIBADD) $(LIBS) | ||||
| libqseawk-str.la: $(libqseawk_str_la_OBJECTS) $(libqseawk_str_la_DEPENDENCIES) $(EXTRA_libqseawk_str_la_DEPENDENCIES)  | ||||
| 	$(libqseawk_str_la_LINK) -rpath $(moddir) $(libqseawk_str_la_OBJECTS) $(libqseawk_str_la_LIBADD) $(LIBS) | ||||
| libqseawk-sys.la: $(libqseawk_sys_la_OBJECTS) $(libqseawk_sys_la_DEPENDENCIES) $(EXTRA_libqseawk_sys_la_DEPENDENCIES)  | ||||
| 	$(libqseawk_sys_la_LINK) -rpath $(moddir) $(libqseawk_sys_la_OBJECTS) $(libqseawk_sys_la_LIBADD) $(LIBS) | ||||
| libqseawk-uci.la: $(libqseawk_uci_la_OBJECTS) $(libqseawk_uci_la_DEPENDENCIES) $(EXTRA_libqseawk_uci_la_DEPENDENCIES)  | ||||
| 	$(libqseawk_uci_la_LINK) $(am_libqseawk_uci_la_rpath) $(libqseawk_uci_la_OBJECTS) $(libqseawk_uci_la_LIBADD) $(LIBS) | ||||
|  | ||||
| mostlyclean-compile: | ||||
| 	-rm -f *.$(OBJEXT) | ||||
|  | ||||
| distclean-compile: | ||||
| 	-rm -f *.tab.c | ||||
|  | ||||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dir.Plo@am__quote@ | ||||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqseawk_mpi_la-mpi.Plo@am__quote@ | ||||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str.Plo@am__quote@ | ||||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys.Plo@am__quote@ | ||||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uci.Plo@am__quote@ | ||||
|  | ||||
| .c.o: | ||||
| @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< | ||||
| @am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po | ||||
| @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ | ||||
| @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | ||||
| @am__fastdepCC_FALSE@	$(COMPILE) -c $< | ||||
|  | ||||
| .c.obj: | ||||
| @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` | ||||
| @am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po | ||||
| @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ | ||||
| @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | ||||
| @am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'` | ||||
|  | ||||
| .c.lo: | ||||
| @am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< | ||||
| @am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo | ||||
| @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ | ||||
| @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | ||||
| @am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $< | ||||
|  | ||||
| libqseawk_mpi_la-mpi.lo: mpi.c | ||||
| @am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqseawk_mpi_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libqseawk_mpi_la-mpi.lo -MD -MP -MF $(DEPDIR)/libqseawk_mpi_la-mpi.Tpo -c -o libqseawk_mpi_la-mpi.lo `test -f 'mpi.c' || echo '$(srcdir)/'`mpi.c | ||||
| @am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libqseawk_mpi_la-mpi.Tpo $(DEPDIR)/libqseawk_mpi_la-mpi.Plo | ||||
| @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mpi.c' object='libqseawk_mpi_la-mpi.lo' libtool=yes @AMDEPBACKSLASH@ | ||||
| @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | ||||
| @am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqseawk_mpi_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libqseawk_mpi_la-mpi.lo `test -f 'mpi.c' || echo '$(srcdir)/'`mpi.c | ||||
|  | ||||
| mostlyclean-libtool: | ||||
| 	-rm -f *.lo | ||||
|  | ||||
| clean-libtool: | ||||
| 	-rm -rf .libs _libs | ||||
|  | ||||
| ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) | ||||
| 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ | ||||
| 	unique=`for i in $$list; do \ | ||||
| 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ | ||||
| 	  done | \ | ||||
| 	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ | ||||
| 	      END { if (nonempty) { for (i in files) print i; }; }'`; \ | ||||
| 	mkid -fID $$unique | ||||
| tags: TAGS | ||||
|  | ||||
| TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \ | ||||
| 		$(TAGS_FILES) $(LISP) | ||||
| 	set x; \ | ||||
| 	here=`pwd`; \ | ||||
| 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \ | ||||
| 	unique=`for i in $$list; do \ | ||||
| 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ | ||||
| 	  done | \ | ||||
| 	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ | ||||
| 	      END { if (nonempty) { for (i in files) print i; }; }'`; \ | ||||
| 	shift; \ | ||||
| 	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ | ||||
| 	  test -n "$$unique" || unique=$$empty_fix; \ | ||||
| 	  if test $$# -gt 0; then \ | ||||
| 	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ | ||||
| 	      "$$@" $$unique; \ | ||||
| 	  else \ | ||||
| 	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ | ||||
| 	      $$unique; \ | ||||
| 	  fi; \ | ||||
| 	fi | ||||
| ctags: CTAGS | ||||
| CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \ | ||||
| 		$(TAGS_FILES) $(LISP) | ||||
| 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \ | ||||
| 	unique=`for i in $$list; do \ | ||||
| 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ | ||||
| 	  done | \ | ||||
| 	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ | ||||
| 	      END { if (nonempty) { for (i in files) print i; }; }'`; \ | ||||
| 	test -z "$(CTAGS_ARGS)$$unique" \ | ||||
| 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ | ||||
| 	     $$unique | ||||
|  | ||||
| GTAGS: | ||||
| 	here=`$(am__cd) $(top_builddir) && pwd` \ | ||||
| 	  && $(am__cd) $(top_srcdir) \ | ||||
| 	  && gtags -i $(GTAGS_ARGS) "$$here" | ||||
|  | ||||
| distclean-tags: | ||||
| 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags | ||||
|  | ||||
| distdir: $(DISTFILES) | ||||
| 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ | ||||
| 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ | ||||
| 	list='$(DISTFILES)'; \ | ||||
| 	  dist_files=`for file in $$list; do echo $$file; done | \ | ||||
| 	  sed -e "s|^$$srcdirstrip/||;t" \ | ||||
| 	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ | ||||
| 	case $$dist_files in \ | ||||
| 	  */*) $(MKDIR_P) `echo "$$dist_files" | \ | ||||
| 			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ | ||||
| 			   sort -u` ;; \ | ||||
| 	esac; \ | ||||
| 	for file in $$dist_files; do \ | ||||
| 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ | ||||
| 	  if test -d $$d/$$file; then \ | ||||
| 	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ | ||||
| 	    if test -d "$(distdir)/$$file"; then \ | ||||
| 	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ | ||||
| 	    fi; \ | ||||
| 	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ | ||||
| 	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ | ||||
| 	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ | ||||
| 	    fi; \ | ||||
| 	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ | ||||
| 	  else \ | ||||
| 	    test -f "$(distdir)/$$file" \ | ||||
| 	    || cp -p $$d/$$file "$(distdir)/$$file" \ | ||||
| 	    || exit 1; \ | ||||
| 	  fi; \ | ||||
| 	done | ||||
| check-am: all-am | ||||
| check: check-am | ||||
| all-am: Makefile $(LTLIBRARIES) | ||||
| installdirs: | ||||
| 	for dir in "$(DESTDIR)$(moddir)"; do \ | ||||
| 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \ | ||||
| 	done | ||||
| install: install-am | ||||
| install-exec: install-exec-am | ||||
| install-data: install-data-am | ||||
| uninstall: uninstall-am | ||||
|  | ||||
| install-am: all-am | ||||
| 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am | ||||
|  | ||||
| installcheck: installcheck-am | ||||
| install-strip: | ||||
| 	if test -z '$(STRIP)'; then \ | ||||
| 	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ | ||||
| 	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ | ||||
| 	      install; \ | ||||
| 	else \ | ||||
| 	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ | ||||
| 	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ | ||||
| 	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ | ||||
| 	fi | ||||
| mostlyclean-generic: | ||||
|  | ||||
| clean-generic: | ||||
|  | ||||
| distclean-generic: | ||||
| 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) | ||||
| 	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) | ||||
|  | ||||
| maintainer-clean-generic: | ||||
| 	@echo "This command is intended for maintainers to use" | ||||
| 	@echo "it deletes files that may require special tools to rebuild." | ||||
| clean: clean-am | ||||
|  | ||||
| clean-am: clean-generic clean-libtool clean-modLTLIBRARIES \ | ||||
| 	mostlyclean-am | ||||
|  | ||||
| distclean: distclean-am | ||||
| 	-rm -rf ./$(DEPDIR) | ||||
| 	-rm -f Makefile | ||||
| distclean-am: clean-am distclean-compile distclean-generic \ | ||||
| 	distclean-tags | ||||
|  | ||||
| dvi: dvi-am | ||||
|  | ||||
| dvi-am: | ||||
|  | ||||
| html: html-am | ||||
|  | ||||
| html-am: | ||||
|  | ||||
| info: info-am | ||||
|  | ||||
| info-am: | ||||
|  | ||||
| install-data-am: install-modLTLIBRARIES | ||||
|  | ||||
| install-dvi: install-dvi-am | ||||
|  | ||||
| install-dvi-am: | ||||
|  | ||||
| install-exec-am: | ||||
|  | ||||
| install-html: install-html-am | ||||
|  | ||||
| install-html-am: | ||||
|  | ||||
| install-info: install-info-am | ||||
|  | ||||
| install-info-am: | ||||
|  | ||||
| install-man: | ||||
|  | ||||
| install-pdf: install-pdf-am | ||||
|  | ||||
| install-pdf-am: | ||||
|  | ||||
| install-ps: install-ps-am | ||||
|  | ||||
| install-ps-am: | ||||
|  | ||||
| installcheck-am: | ||||
|  | ||||
| maintainer-clean: maintainer-clean-am | ||||
| 	-rm -rf ./$(DEPDIR) | ||||
| 	-rm -f Makefile | ||||
| maintainer-clean-am: distclean-am maintainer-clean-generic | ||||
|  | ||||
| mostlyclean: mostlyclean-am | ||||
|  | ||||
| mostlyclean-am: mostlyclean-compile mostlyclean-generic \ | ||||
| 	mostlyclean-libtool | ||||
|  | ||||
| pdf: pdf-am | ||||
|  | ||||
| pdf-am: | ||||
|  | ||||
| ps: ps-am | ||||
|  | ||||
| ps-am: | ||||
|  | ||||
| uninstall-am: uninstall-modLTLIBRARIES | ||||
|  | ||||
| .MAKE: install-am install-strip | ||||
|  | ||||
| .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ | ||||
| 	clean-libtool clean-modLTLIBRARIES ctags distclean \ | ||||
| 	distclean-compile distclean-generic distclean-libtool \ | ||||
| 	distclean-tags distdir dvi dvi-am html html-am info info-am \ | ||||
| 	install install-am install-data install-data-am install-dvi \ | ||||
| 	install-dvi-am install-exec install-exec-am install-html \ | ||||
| 	install-html-am install-info install-info-am install-man \ | ||||
| 	install-modLTLIBRARIES install-pdf install-pdf-am install-ps \ | ||||
| 	install-ps-am install-strip installcheck installcheck-am \ | ||||
| 	installdirs maintainer-clean maintainer-clean-generic \ | ||||
| 	mostlyclean mostlyclean-compile mostlyclean-generic \ | ||||
| 	mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ | ||||
| 	uninstall-am uninstall-modLTLIBRARIES | ||||
|  | ||||
|  | ||||
| # 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: | ||||
							
								
								
									
										608
									
								
								qse/lib/awk/mod/dir.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										608
									
								
								qse/lib/awk/mod/dir.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,608 @@ | ||||
| /* | ||||
|  * $Id$ | ||||
|  * | ||||
|     Copyright 2006-2012 Chung, Hyung-Hwan. | ||||
|     This file is part of QSE. | ||||
|  | ||||
|     QSE is free software: you can redistribute it and/or modify | ||||
|     it under the terms of the GNU Lesser General Public License as  | ||||
|     published by the Free Software Foundation, either version 3 of  | ||||
|     the License, or (at your option) any later version. | ||||
|  | ||||
|     QSE is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|     GNU Lesser General Public License for more details. | ||||
|  | ||||
|     You should have received a copy of the GNU Lesser General Public  | ||||
|     License along with QSE. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #include <qse/awk/awk.h> | ||||
| #include <qse/cmn/str.h> | ||||
| #include <qse/cmn/rbt.h> | ||||
| #include <qse/cmn/dir.h> | ||||
| #include "../../cmn/mem.h" | ||||
|  | ||||
| typedef struct dir_list_t dir_list_t; | ||||
| typedef struct dir_node_t dir_node_t; | ||||
|  | ||||
| enum | ||||
| { | ||||
| 	DIR_ENOERR, | ||||
| 	DIR_EOTHER, | ||||
| 	DIR_ESYSERR, | ||||
| 	DIR_ENOMEM, | ||||
| 	DIR_EINVAL, | ||||
| 	DIR_EACCES, | ||||
| 	DIR_ENOENT | ||||
| }; | ||||
|  | ||||
| struct dir_node_t | ||||
| { | ||||
| 	int id; | ||||
| 	qse_dir_t* ctx; | ||||
| 	dir_node_t* prev; | ||||
| 	dir_node_t* next; | ||||
| }; | ||||
|  | ||||
| struct dir_list_t | ||||
| { | ||||
| 	dir_node_t* head; | ||||
| 	dir_node_t* tail; | ||||
| 	dir_node_t* free; | ||||
| 	 | ||||
| 	/* mapping table to map 'id' to 'node' */ | ||||
| 	struct | ||||
| 	{ | ||||
| 		dir_node_t** tab; | ||||
| 		int capa; | ||||
| 		int high; | ||||
| 	} map; | ||||
|  | ||||
| 	int errnum; | ||||
| }; | ||||
|  | ||||
| static int dir_err_to_errnum (qse_dir_errnum_t num) | ||||
| { | ||||
| 	switch (num) | ||||
| 	{ | ||||
| 		case QSE_DIR_ESYSERR: | ||||
| 			return DIR_ESYSERR; | ||||
| 		case QSE_DIR_ENOMEM: | ||||
| 			return DIR_ENOMEM; | ||||
| 		case QSE_DIR_EINVAL: | ||||
| 			return DIR_EINVAL; | ||||
| 		case QSE_DIR_EACCES: | ||||
| 			return DIR_EACCES; | ||||
| 		case QSE_DIR_ENOENT: | ||||
| 			return DIR_ENOENT; | ||||
| 		default:	 | ||||
| 			return DIR_EOTHER; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| static int awk_err_to_errnum (qse_awk_errnum_t num) | ||||
| { | ||||
| 	switch (num) | ||||
| 	{ | ||||
| 		case QSE_AWK_ESYSERR: | ||||
| 			return DIR_ESYSERR; | ||||
| 		case QSE_AWK_ENOMEM: | ||||
| 			return DIR_ENOMEM; | ||||
| 		case QSE_AWK_EINVAL: | ||||
| 			return DIR_EINVAL; | ||||
| 		case QSE_AWK_EACCES: | ||||
| 			return DIR_EACCES; | ||||
| 		case QSE_AWK_ENOENT: | ||||
| 			return DIR_ENOENT; | ||||
| 		default:	 | ||||
| 			return DIR_EOTHER; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| static dir_node_t* new_dir_node (qse_awk_rtx_t* rtx, dir_list_t* list, const qse_char_t* path) | ||||
| { | ||||
| 	/* create a new context node and append it to the list tail */ | ||||
| 	dir_node_t* node; | ||||
| 	qse_dir_errnum_t oe; | ||||
|  | ||||
| 	node = QSE_NULL; | ||||
|  | ||||
| 	if (list->free) node = list->free; | ||||
| 	else | ||||
| 	{ | ||||
| 		node = qse_awk_rtx_callocmem (rtx, QSE_SIZEOF(*node)); | ||||
| 		if (!node)  | ||||
| 		{ | ||||
| 			list->errnum = DIR_ENOMEM; | ||||
| 			goto oops; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	node->ctx = qse_dir_open (qse_awk_rtx_getmmgr(rtx), 0, path, 0, &oe); | ||||
| 	if (!node->ctx)  | ||||
| 	{ | ||||
| 		list->errnum = dir_err_to_errnum (oe); | ||||
| 		goto oops; | ||||
| 	} | ||||
|  | ||||
| 	if (node == list->free) list->free = node->next; | ||||
| 	else | ||||
| 	{ | ||||
| 		if (list->map.high <= list->map.capa) | ||||
| 		{ | ||||
| 			int newcapa; | ||||
| 			dir_node_t** tmp; | ||||
|  | ||||
| 			newcapa = list->map.capa + 64; | ||||
| 			if (newcapa < list->map.capa) goto oops; /* overflow */ | ||||
|  | ||||
| 			tmp = (dir_node_t**) qse_awk_rtx_reallocmem ( | ||||
| 				rtx, list->map.tab, QSE_SIZEOF(*tmp) * newcapa); | ||||
| 			if (!tmp)  | ||||
| 			{ | ||||
| 				list->errnum = DIR_ENOMEM; | ||||
| 				goto oops; | ||||
| 			} | ||||
|  | ||||
| 			QSE_MEMSET (&tmp[list->map.capa], 0,  | ||||
| 				QSE_SIZEOF(*tmp) * (newcapa - list->map.capa)); | ||||
|  | ||||
| 			list->map.tab = tmp; | ||||
| 			list->map.capa = newcapa; | ||||
| 		} | ||||
|  | ||||
| 		node->id = list->map.high; | ||||
| 		QSE_ASSERT (list->map.tab[node->id] == QSE_NULL); | ||||
| 		list->map.tab[node->id] = node; | ||||
| 		list->map.high++; | ||||
| 	} | ||||
|  | ||||
| 	/* append it to the tail */ | ||||
| 	node->next = QSE_NULL; | ||||
| 	node->prev = list->tail; | ||||
| 	if (list->tail) list->tail->next = node; | ||||
| 	else list->head = node; | ||||
| 	list->tail = node; | ||||
|  | ||||
| 	return node; | ||||
|  | ||||
| oops: | ||||
| 	if (node) qse_awk_rtx_freemem (rtx, node); | ||||
| 	return QSE_NULL; | ||||
| } | ||||
|  | ||||
| static void free_dir_node (qse_awk_rtx_t* rtx, dir_list_t* list, dir_node_t* node) | ||||
| { | ||||
| 	if (node->prev) node->prev->next = node->next; | ||||
| 	if (node->next) node->next->prev = node->prev; | ||||
| 	if (list->head == node) list->head = node->next; | ||||
| 	if (list->tail == node) list->tail = node->prev; | ||||
|  | ||||
| 	list->map.tab[node->id] = QSE_NULL; | ||||
|  | ||||
| 	if (node->ctx)  | ||||
| 	{ | ||||
| 		qse_dir_close (node->ctx); | ||||
| 	} | ||||
|  | ||||
| 	if (list->map.high == node->id + 1) | ||||
| 	{ | ||||
| 		/* destroy the actual node if the node to be freed has the | ||||
| 		 * highest id */ | ||||
| 		QSE_MMGR_FREE (qse_awk_rtx_getmmgr(rtx), node); | ||||
| 		list->map.high--; | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		/* otherwise, chain the node to the free list */ | ||||
| 		node->ctx = QSE_NULL; | ||||
| 		node->next = list->free; | ||||
| 		list->free = node; | ||||
| 	} | ||||
|  | ||||
| 	/* however, i destroy the whole free list when all the nodes are | ||||
| 	 * chanined to the free list */ | ||||
| 	if (list->head == QSE_NULL)  | ||||
| 	{ | ||||
| 		qse_mmgr_t* mmgr; | ||||
| 		dir_node_t* curnode; | ||||
|  | ||||
| 		mmgr = qse_awk_rtx_getmmgr(rtx); | ||||
|  | ||||
| 		while (list->free) | ||||
| 		{ | ||||
| 			curnode = list->free; | ||||
| 			list->free = list->free->next; | ||||
| 			QSE_ASSERT (curnode->ctx == QSE_NULL); | ||||
| 			QSE_MMGR_FREE (mmgr, curnode); | ||||
| 		} | ||||
|  | ||||
| 		QSE_MMGR_FREE (mmgr, list->map.tab); | ||||
| 		list->map.high = 0; | ||||
| 		list->map.capa = 0; | ||||
| 		list->map.tab = QSE_NULL; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /* ------------------------------------------------------------------------ */ | ||||
|  | ||||
| static int close_byid (qse_awk_rtx_t* rtx, dir_list_t* list, qse_long_t id) | ||||
| { | ||||
| 	if (id >= 0 && id < list->map.high && list->map.tab[id])  | ||||
| 	{ | ||||
| 		free_dir_node (rtx, list, list->map.tab[id]); | ||||
| 		return 0; | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		list->errnum = DIR_EINVAL; | ||||
| 		return -1; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| static int reset_byid (qse_awk_rtx_t* rtx, dir_list_t* list, qse_long_t id, const qse_char_t* path) | ||||
| { | ||||
| 	if (id >= 0 && id < list->map.high && list->map.tab[id])  | ||||
| 	{ | ||||
| 		if (qse_dir_reset (list->map.tab[id]->ctx, path) <= -1) | ||||
| 		{ | ||||
| 			list->errnum = dir_err_to_errnum (qse_dir_geterrnum (list->map.tab[id]->ctx)); | ||||
| 			return -1; | ||||
| 		} | ||||
| 		return 0; | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		list->errnum = DIR_EINVAL; | ||||
| 		return -1; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| static int read_byid (qse_awk_rtx_t* rtx, dir_list_t* list, qse_long_t id, qse_awk_val_ref_t* ref)  | ||||
| { | ||||
| 	if (id >= 0 && id < list->map.high && list->map.tab[id])  | ||||
| 	{ | ||||
| 		int y; | ||||
| 		qse_dir_ent_t ent;	 | ||||
| 		qse_awk_val_t* tmp; | ||||
|  | ||||
| 		y = qse_dir_read (list->map.tab[id]->ctx, &ent); | ||||
| 		if (y <= -1)  | ||||
| 		{ | ||||
| 			list->errnum = dir_err_to_errnum (qse_dir_geterrnum (list->map.tab[id]->ctx)); | ||||
| 			return -1; | ||||
| 		} | ||||
|  | ||||
| 		if (y == 0) return 0; | ||||
|  | ||||
| 		tmp = qse_awk_rtx_makestrvalwithstr (rtx, ent.name);	 | ||||
| 		if (!tmp || qse_awk_rtx_setrefval (rtx, ref, tmp) <= -1)  | ||||
| 		{ | ||||
| 			list->errnum = awk_err_to_errnum (qse_awk_rtx_geterrnum (rtx)); | ||||
| 			if (tmp)  | ||||
| 			{ | ||||
| 				qse_awk_rtx_refupval (rtx, tmp); | ||||
| 				qse_awk_rtx_refdownval (rtx, tmp); | ||||
| 			} | ||||
| 			return -1; | ||||
| 		} | ||||
|  | ||||
| 		return 0; | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		list->errnum = DIR_EINVAL; | ||||
| 		return -1;	 | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /* ------------------------------------------------------------------------ */ | ||||
|  | ||||
| static QSE_INLINE dir_list_t* rtx_to_list (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	qse_rbt_pair_t* pair; | ||||
| 	pair = qse_rbt_search ((qse_rbt_t*)fi->mod->ctx, &rtx, QSE_SIZEOF(rtx)); | ||||
| 	QSE_ASSERT (pair != QSE_NULL); | ||||
| 	return (dir_list_t*)QSE_RBT_VPTR(pair); | ||||
| } | ||||
|  | ||||
| static int fnc_dir_errno (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	dir_list_t* list; | ||||
| 	qse_awk_val_t* retv; | ||||
|  | ||||
| 	list = rtx_to_list (rtx, fi); | ||||
|  | ||||
| 	retv = qse_awk_rtx_makeintval (rtx, list->errnum); | ||||
| 	if (retv == QSE_NULL) return -1; | ||||
|  | ||||
| 	qse_awk_rtx_setretval (rtx, retv); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static qse_char_t* errmsg[] = | ||||
| { | ||||
| 	QSE_T("no error"), | ||||
| 	QSE_T("other error"), | ||||
| 	QSE_T("system error"), | ||||
| 	QSE_T("insufficient memory"), | ||||
| 	QSE_T("invalid data"), | ||||
| 	QSE_T("access denied"), | ||||
| 	QSE_T("no entry"), | ||||
| 	QSE_T("unknown error") | ||||
| }; | ||||
|  | ||||
| static int fnc_dir_errstr (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	dir_list_t* list; | ||||
| 	qse_awk_val_t* retv; | ||||
| 	qse_long_t errnum; | ||||
|  | ||||
| 	list = rtx_to_list (rtx, fi); | ||||
|  | ||||
| 	if (qse_awk_rtx_getnargs (rtx) <= 0 || | ||||
| 	    qse_awk_rtx_valtolong (rtx, qse_awk_rtx_getarg (rtx, 0), &errnum) <= -1) | ||||
| 	{ | ||||
| 		errnum = list->errnum; | ||||
| 	} | ||||
|  | ||||
| 	if (errnum < 0 || errnum >= QSE_COUNTOF(errmsg)) errnum = QSE_COUNTOF(errmsg) - 1; | ||||
|  | ||||
| 	retv = qse_awk_rtx_makestrvalwithstr (rtx, errmsg[errnum]); | ||||
| 	if (retv == QSE_NULL) return -1; | ||||
|  | ||||
| 	qse_awk_rtx_setretval (rtx, retv); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_dir_open (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	dir_list_t* list; | ||||
| 	dir_node_t* node = QSE_NULL; | ||||
| 	qse_long_t ret; | ||||
| 	qse_char_t* path; | ||||
| 	qse_awk_val_t* retv; | ||||
|  | ||||
| 	list = rtx_to_list (rtx, fi); | ||||
|  | ||||
| 	path = qse_awk_rtx_valtostrdup (rtx, qse_awk_rtx_getarg (rtx, 0), QSE_NULL); | ||||
| 	if (path) | ||||
| 	{ | ||||
| 		node = new_dir_node (rtx, list, path); | ||||
| 		if (node) ret = node->id; | ||||
| 		else ret = -1; | ||||
| 		qse_awk_rtx_freemem (rtx, path); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		list->errnum = awk_err_to_errnum (qse_awk_rtx_geterrnum (rtx)); | ||||
| 		ret = -1; | ||||
| 	} | ||||
|  | ||||
| 	/* ret may not be a statically managed number.  | ||||
| 	 * error checking is required */ | ||||
| 	retv = qse_awk_rtx_makeintval (rtx, ret); | ||||
| 	if (retv == QSE_NULL) | ||||
| 	{ | ||||
| 		if (node) free_dir_node (rtx, list, node); | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
| 	qse_awk_rtx_setretval (rtx, retv); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_dir_close (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	dir_list_t* list; | ||||
| 	qse_long_t id; | ||||
| 	int ret; | ||||
| 	 | ||||
| 	list = rtx_to_list (rtx, fi); | ||||
|  | ||||
| 	ret = qse_awk_rtx_valtolong (rtx, qse_awk_rtx_getarg (rtx, 0), &id); | ||||
| 	if (ret <= -1) | ||||
| 	{ | ||||
| 		list->errnum = awk_err_to_errnum (qse_awk_rtx_geterrnum (rtx)); | ||||
| 		ret = -1; | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		ret = close_byid (rtx, list, id); | ||||
| 	} | ||||
|  | ||||
| 	qse_awk_rtx_setretval (rtx, qse_awk_rtx_makeintval (rtx, ret)); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_dir_reset (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	dir_list_t* list; | ||||
| 	qse_long_t id; | ||||
| 	int ret; | ||||
| 	qse_char_t* path; | ||||
| 	 | ||||
| 	list = rtx_to_list (rtx, fi); | ||||
|  | ||||
| 	ret = qse_awk_rtx_valtolong (rtx, qse_awk_rtx_getarg (rtx, 0), &id); | ||||
| 	if (ret <= -1) | ||||
| 	{ | ||||
| 		list->errnum = awk_err_to_errnum (qse_awk_rtx_geterrnum (rtx)); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		path = qse_awk_rtx_valtostrdup (rtx, qse_awk_rtx_getarg(rtx, 1), QSE_NULL); | ||||
| 		if (path) | ||||
| 		{ | ||||
| 			ret = reset_byid (rtx, list, id, path); | ||||
| 			qse_awk_rtx_freemem (rtx, path); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			list->errnum = awk_err_to_errnum (qse_awk_rtx_geterrnum (rtx)); | ||||
| 			ret = -1; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	/* no error check for qse_awk_rtx_makeintval() here since ret  | ||||
| 	 * is 0 or -1. it will never fail for those numbers */ | ||||
| 	qse_awk_rtx_setretval (rtx, qse_awk_rtx_makeintval (rtx, ret)); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_dir_read  (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	dir_list_t* list; | ||||
| 	qse_long_t id; | ||||
| 	int ret; | ||||
| 	 | ||||
| 	list = rtx_to_list (rtx, fi); | ||||
|  | ||||
| 	ret = qse_awk_rtx_valtolong (rtx, qse_awk_rtx_getarg (rtx, 0), &id); | ||||
| 	if (ret <= -1)  | ||||
| 	{ | ||||
| 		list->errnum = awk_err_to_errnum (qse_awk_rtx_geterrnum (rtx)); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		ret = read_byid (rtx, list, id, qse_awk_rtx_getarg (rtx, 1)); | ||||
| 	} | ||||
|  | ||||
| 	/* no error check for qse_awk_rtx_makeintval() here since ret  | ||||
| 	 * is 0, 1, -1. it will never fail for those numbers */ | ||||
| 	qse_awk_rtx_setretval (rtx, qse_awk_rtx_makeintval (rtx, ret)); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| /* ------------------------------------------------------------------------ */ | ||||
|  | ||||
| typedef struct fnctab_t fnctab_t; | ||||
| struct fnctab_t | ||||
| { | ||||
| 	const qse_char_t* name; | ||||
| 	qse_awk_mod_sym_fnc_t info; | ||||
| }; | ||||
|  | ||||
| static fnctab_t fnctab[] = | ||||
| { | ||||
| 	{ QSE_T("close"),       { { 1, 1, QSE_NULL    }, fnc_dir_close,      0 } }, | ||||
| 	{ QSE_T("errno"),       { { 0, 0, QSE_NULL    }, fnc_dir_errno,      0 } }, | ||||
| 	{ QSE_T("errstr"),      { { 0, 1, QSE_NULL    }, fnc_dir_errstr,     0 } }, | ||||
| 	{ QSE_T("open"),        { { 1, 1, QSE_NULL    }, fnc_dir_open,       0 } }, | ||||
| 	{ QSE_T("read"),        { { 2, 2, QSE_T("vr") }, fnc_dir_read,       0 } }, | ||||
| 	{ QSE_T("reset"),       { { 2, 2, QSE_NULL    }, fnc_dir_reset,      0 } }, | ||||
| }; | ||||
|  | ||||
| /* ------------------------------------------------------------------------ */ | ||||
|  | ||||
| static int query (qse_awk_mod_t* mod, qse_awk_t* awk, const qse_char_t* name, qse_awk_mod_sym_t* sym) | ||||
| { | ||||
| 	qse_cstr_t ea; | ||||
| 	int left, right, mid, n; | ||||
|  | ||||
| 	left = 0; right = QSE_COUNTOF(fnctab) - 1; | ||||
|  | ||||
| 	while (left <= right) | ||||
| 	{ | ||||
| 		mid = (left + right) / 2; | ||||
|  | ||||
| 		n = qse_strcmp (fnctab[mid].name, name); | ||||
| 		if (n > 0) right = mid - 1;  | ||||
| 		else if (n < 0) left = mid + 1; | ||||
| 		else | ||||
| 		{ | ||||
| 			sym->type = QSE_AWK_MOD_FNC; | ||||
| 			sym->u.fnc = fnctab[mid].info; | ||||
| 			return 0; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	ea.ptr = name; | ||||
| 	ea.len = qse_strlen(name); | ||||
| 	qse_awk_seterror (awk, QSE_AWK_ENOENT, &ea, QSE_NULL); | ||||
| 	return -1; | ||||
| } | ||||
|  | ||||
| static int init (qse_awk_mod_t* mod, qse_awk_rtx_t* rtx) | ||||
| { | ||||
| 	qse_rbt_t* rbt; | ||||
| 	dir_list_t list; | ||||
|  | ||||
| 	rbt = (qse_rbt_t*)mod->ctx; | ||||
|  | ||||
| 	QSE_MEMSET (&list, 0, QSE_SIZEOF(list)); | ||||
| 	if (qse_rbt_insert (rbt, &rtx, QSE_SIZEOF(rtx), &list, QSE_SIZEOF(list)) == QSE_NULL)  | ||||
| 	{ | ||||
| 		qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL); | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static void fini (qse_awk_mod_t* mod, qse_awk_rtx_t* rtx) | ||||
| { | ||||
| 	qse_rbt_t* rbt; | ||||
| 	qse_rbt_pair_t* pair; | ||||
| 	 | ||||
| 	rbt = (qse_rbt_t*)mod->ctx; | ||||
|  | ||||
| 	/* garbage clean-up */ | ||||
| 	pair = qse_rbt_search  (rbt, &rtx, QSE_SIZEOF(rtx)); | ||||
| 	if (pair) | ||||
| 	{ | ||||
| 		dir_list_t* list; | ||||
| 		dir_node_t* node, * next; | ||||
|  | ||||
| 		list = QSE_RBT_VPTR(pair); | ||||
| 		node = list->head; | ||||
| 		while (node) | ||||
| 		{ | ||||
| 			next = node->next; | ||||
| 			free_dir_node (rtx, list, node); | ||||
| 			node = next; | ||||
| 		} | ||||
|  | ||||
| 		qse_rbt_delete (rbt, &rtx, QSE_SIZEOF(rtx)); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| static void unload (qse_awk_mod_t* mod, qse_awk_t* awk) | ||||
| { | ||||
| 	qse_rbt_t* rbt; | ||||
|  | ||||
| 	rbt = (qse_rbt_t*)mod->ctx; | ||||
|  | ||||
| 	QSE_ASSERT (QSE_RBT_SIZE(rbt) == 0); | ||||
| 	qse_rbt_close (rbt); | ||||
| } | ||||
|  | ||||
| QSE_EXPORT int load (qse_awk_mod_t* mod, qse_awk_t* awk)  | ||||
| { | ||||
| 	qse_rbt_t* rbt; | ||||
|  | ||||
| 	mod->query = query; | ||||
| 	mod->unload = unload; | ||||
|  | ||||
| 	mod->init = init; | ||||
| 	mod->fini = fini; | ||||
|  | ||||
| 	rbt = qse_rbt_open (qse_awk_getmmgr(awk), 0, 1, 1); | ||||
| 	if (rbt == QSE_NULL)  | ||||
| 	{ | ||||
| 		qse_awk_seterrnum (awk, QSE_AWK_ENOMEM, QSE_NULL); | ||||
| 		return -1; | ||||
| 	} | ||||
| 	qse_rbt_setmancbs (rbt, qse_getrbtmancbs(QSE_RBT_MANCBS_INLINE_COPIERS)); | ||||
|  | ||||
| 	mod->ctx = rbt; | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| #if defined(__DOS__) | ||||
| /* kind of DllMain() for Causeway DLL */ | ||||
| int main (int eax) { return 0; } | ||||
| #endif | ||||
|         | ||||
							
								
								
									
										296
									
								
								qse/lib/awk/mod/mpi.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										296
									
								
								qse/lib/awk/mod/mpi.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,296 @@ | ||||
| /* | ||||
|  * $Id$ | ||||
|  * | ||||
|     Copyright 2006-2012 Chung, Hyung-Hwan. | ||||
|     This file is part of QSE. | ||||
|  | ||||
|     QSE is free software: you can redistribute it and/or modify | ||||
|     it under the terms of the GNU Lesser General Public License as  | ||||
|     published by the Free Software Foundation, either version 3 of  | ||||
|     the License, or (at your option) any later version. | ||||
|  | ||||
|     QSE is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|     GNU Lesser General Public License for more details. | ||||
|  | ||||
|     You should have received a copy of the GNU Lesser General Public  | ||||
|     License along with QSE. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #include <qse/awk/awk.h> | ||||
| #include <qse/cmn/str.h> | ||||
| #include <qse/cmn/main.h> | ||||
|  | ||||
| #if defined(HAVE_MPI) | ||||
| #    include <mpi.h> | ||||
| #else | ||||
| #    error this module needs mpi | ||||
| #endif | ||||
|  | ||||
| static int fnc_size (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	qse_awk_val_t* retv; | ||||
| 	int rank; | ||||
|  | ||||
| 	MPI_Comm_size (MPI_COMM_WORLD, &rank); | ||||
| 	retv = qse_awk_rtx_makeintval (rtx, rank); | ||||
| 	if (retv == QSE_NULL) return -1; | ||||
|  | ||||
| 	qse_awk_rtx_setretval (rtx, retv); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_rank (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	qse_awk_val_t* retv; | ||||
| 	int rank; | ||||
|  | ||||
| 	MPI_Comm_rank (MPI_COMM_WORLD, &rank); | ||||
| 	retv = qse_awk_rtx_makeintval (rtx, rank); | ||||
| 	if (retv == QSE_NULL) return -1; | ||||
|  | ||||
| 	qse_awk_rtx_setretval (rtx, retv); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_hash (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	qse_awk_val_t* retv; | ||||
| 	qse_long_t hv; | ||||
|  | ||||
| 	hv = qse_awk_rtx_hashval (rtx, qse_awk_rtx_getarg (rtx, 0)); | ||||
|  | ||||
| 	retv = qse_awk_rtx_makeintval (rtx, hv); | ||||
| 	if (retv == QSE_NULL) return -1; | ||||
|  | ||||
| 	qse_awk_rtx_setretval (rtx, retv); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_assign (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	qse_awk_val_t* retv; | ||||
| 	qse_long_t limit; | ||||
| 	int rx; | ||||
|  | ||||
| 	rx = qse_awk_rtx_valtolong (rtx, qse_awk_rtx_getarg (rtx, 0), &limit); | ||||
| 	if (rx >= 0) | ||||
| 	{ | ||||
| 		qse_awk_nrflt_t nrflt; | ||||
| 		int size, rank; | ||||
|  | ||||
| 		MPI_Comm_size (MPI_COMM_WORLD, &size); | ||||
| 		MPI_Comm_rank (MPI_COMM_WORLD, &rank); | ||||
| 		nrflt.limit = limit; | ||||
| 		nrflt.size = size; | ||||
| 		nrflt.rank = rank; | ||||
| 		qse_awk_rtx_setnrflt (rtx, &nrflt); | ||||
| 	} | ||||
|  | ||||
| 	retv = qse_awk_rtx_makeintval (rtx, rx); | ||||
| 	if (retv == QSE_NULL) return -1; | ||||
|  | ||||
| 	qse_awk_rtx_setretval (rtx, retv); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_reduce (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	qse_awk_val_t* retv; | ||||
| 	qse_long_t opidx, lv; | ||||
| 	qse_flt_t rv; | ||||
| 	int n; | ||||
|  | ||||
| 	static MPI_Op optab[] = | ||||
| 	{ | ||||
| 		MPI_MIN, | ||||
| 		MPI_MAX, | ||||
| 		MPI_SUM, | ||||
| 		MPI_PROD, | ||||
| 		MPI_LAND, | ||||
| 		MPI_LOR | ||||
| 	}; | ||||
|  | ||||
| 	if (qse_awk_rtx_valtolong (rtx, qse_awk_rtx_getarg (rtx, 1), &opidx) <= -1 || | ||||
| 	   (opidx < 0 || opidx >= QSE_COUNTOF(optab)) ||  | ||||
| 	   (n = qse_awk_rtx_valtonum (rtx, qse_awk_rtx_getarg (rtx, 0), &lv, &rv)) <= -1) goto softfail; | ||||
|  | ||||
| /* TODO: determine it to be MPI_LONG or MPI_INT, OR MPI_LONG_LONG_INT depending on the size of qse_long_t */ | ||||
| 	if (n == 0)  | ||||
| 	{ | ||||
| 		qse_long_t lout; | ||||
| 		if (MPI_Allreduce (&lv, &lout, 1, MPI_LONG_LONG_INT, optab[opidx], MPI_COMM_WORLD) != MPI_SUCCESS) goto softfail; | ||||
| 		retv = qse_awk_rtx_makeintval (rtx, lout); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		qse_flt_t fout; | ||||
| 		if (MPI_Allreduce (&rv, &fout, 1, MPI_LONG_DOUBLE, optab[opidx], MPI_COMM_WORLD) != MPI_SUCCESS) goto softfail; | ||||
| 		retv = qse_awk_rtx_makefltval (rtx, fout); | ||||
| 	} | ||||
| 	 | ||||
| 	if (retv == QSE_NULL) return -1; | ||||
| 	qse_awk_rtx_setretval (rtx, retv); | ||||
|  | ||||
| 	return 0; | ||||
|  | ||||
| softfail: | ||||
| 	/* return without setting the return value. | ||||
| 	 * this intrinsic function will return a nil value when it fails */ | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_barrier (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	int rx; | ||||
| 	qse_awk_val_t* retv; | ||||
|  | ||||
| 	rx = (MPI_Barrier (MPI_COMM_WORLD) == MPI_SUCCESS)? 0: -1; | ||||
|  | ||||
| 	retv = qse_awk_rtx_makeintval (rtx, rx); | ||||
| 	if (retv == QSE_NULL) return -1; | ||||
|  | ||||
| 	qse_awk_rtx_setretval (rtx, retv); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| /* ------------------------------------------------------------------------- */ | ||||
|  | ||||
| typedef struct fnctab_t fnctab_t; | ||||
| struct fnctab_t | ||||
| { | ||||
| 	const qse_char_t* name; | ||||
| 	qse_awk_mod_sym_fnc_t info; | ||||
| }; | ||||
|  | ||||
| typedef struct inttab_t inttab_t; | ||||
| struct inttab_t | ||||
| { | ||||
| 	const qse_char_t* name; | ||||
| 	qse_awk_mod_sym_int_t info; | ||||
| }; | ||||
|  | ||||
| static fnctab_t fnctab[] = | ||||
| { | ||||
| 	{ QSE_T("assign"),   { { 1, 1, QSE_NULL }, fnc_assign,  0 } }, | ||||
| 	{ QSE_T("barrier"),  { { 0, 0, QSE_NULL }, fnc_barrier, 0 } }, | ||||
| 	{ QSE_T("hash"),     { { 1, 1, QSE_NULL }, fnc_hash,    0 } }, | ||||
| 	{ QSE_T("rank"),     { { 0, 0, QSE_NULL }, fnc_rank,    0 } }, | ||||
| 	{ QSE_T("reduce"),   { { 2, 2, QSE_NULL }, fnc_reduce,  0 } }, | ||||
| 	{ QSE_T("size"),     { { 0, 0, QSE_NULL }, fnc_size,    0 } } | ||||
| }; | ||||
|  | ||||
| static inttab_t inttab[] = | ||||
| { | ||||
| 	{ QSE_T("REDUCE_LAND"),  { 4 } }, | ||||
| 	{ QSE_T("REDUCE_LOR"),   { 5 } }, | ||||
| 	{ QSE_T("REDUCE_MAX"),   { 1 } }, | ||||
| 	{ QSE_T("REDUCE_MIN"),   { 0 } }, | ||||
| 	{ QSE_T("REDUCE_PROD"),  { 3 } }, | ||||
| 	{ QSE_T("REDUCE_SUM"),   { 2 } } | ||||
| }; | ||||
|  | ||||
| static int query (qse_awk_mod_t* mod, qse_awk_t* awk, const qse_char_t* name, qse_awk_mod_sym_t* sym) | ||||
| { | ||||
| 	qse_cstr_t ea; | ||||
|      int left, right, mid, n; | ||||
|  | ||||
| 	left = 0; right = QSE_COUNTOF(fnctab) - 1; | ||||
|  | ||||
| 	while (left <= right) | ||||
| 	{ | ||||
| 		mid = (left + right) / 2; | ||||
|  | ||||
| 		n = qse_strcmp (fnctab[mid].name, name); | ||||
| 		if (n > 0) right = mid - 1;  | ||||
| 		else if (n < 0) left = mid + 1; | ||||
| 		else | ||||
| 		{ | ||||
| 			sym->type = QSE_AWK_MOD_FNC; | ||||
| 			sym->u.fnc = fnctab[mid].info; | ||||
| 			return 0; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	left = 0; right = QSE_COUNTOF(inttab) - 1; | ||||
| 	while (left <= right) | ||||
| 	{ | ||||
| 		mid = (left + right) / 2; | ||||
|  | ||||
| 		n = qse_strcmp (inttab[mid].name, name); | ||||
| 		if (n > 0) right = mid - 1;  | ||||
| 		else if (n < 0) left = mid + 1; | ||||
| 		else | ||||
| 		{ | ||||
| 			sym->type = QSE_AWK_MOD_INT; | ||||
| 			sym->u.in = inttab[mid].info; | ||||
| 			return 0; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	ea.ptr = name; | ||||
| 	ea.len = qse_strlen(name); | ||||
| 	qse_awk_seterror (awk, QSE_AWK_ENOENT, &ea, QSE_NULL); | ||||
| 	return -1; | ||||
| } | ||||
|  | ||||
| /* TODO: proper resource management */ | ||||
|  | ||||
| static int init (qse_awk_mod_t* mod, qse_awk_rtx_t* rtx) | ||||
| { | ||||
| 	/* TODO: anything */ | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static void fini (qse_awk_mod_t* mod, qse_awk_rtx_t* rtx) | ||||
| { | ||||
| 	/* TODO: anything */ | ||||
| } | ||||
|  | ||||
| static void unload (qse_awk_mod_t* mod, qse_awk_t* awk) | ||||
| { | ||||
| 	/* TODO: anything */ | ||||
| } | ||||
|  | ||||
| QSE_EXPORT int load (qse_awk_mod_t* mod, qse_awk_t* awk) | ||||
| { | ||||
| 	mod->query = query; | ||||
| 	mod->unload = unload; | ||||
|  | ||||
| 	mod->init = init; | ||||
| 	mod->fini = fini; | ||||
| 	/* | ||||
| 	mod->ctx... | ||||
| 	 */ | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| /* The MPI module is special in that it exports 2 extra symbols -  | ||||
|  * mpi_init and mpi_fini. These two symbols are intended to be called | ||||
|  * dynamically using dlopen() or something similar when an application | ||||
|  * intending to use mpi::xxx starts up. This way, the application doesn't | ||||
|  * have to be linked to any MPI libraries while this module is linked to | ||||
|  * an MPI library. If this module doesn't exist, it means MPI is not availble | ||||
|  * and the module wasn't built. So you can't access mpi::xxx symbols either  | ||||
|  */ | ||||
|  | ||||
| QSE_EXPORT int mpi_init (int argc, qse_achar_t* argv[]) | ||||
| { | ||||
| 	int rx; | ||||
|  | ||||
| 	if (MPI_Init (&argc, &argv) != MPI_SUCCESS) rx = -1; | ||||
| 	else | ||||
| 	{ | ||||
| 		MPI_Comm_set_errhandler (MPI_COMM_WORLD, MPI_ERRORS_RETURN); | ||||
| 		rx = 0; | ||||
| 	} | ||||
|  | ||||
| 	return rx; | ||||
| } | ||||
|  | ||||
| QSE_EXPORT void mpi_fini (void) | ||||
| { | ||||
| 	MPI_Finalize (); | ||||
| } | ||||
							
								
								
									
										178
									
								
								qse/lib/awk/mod/str.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										178
									
								
								qse/lib/awk/mod/str.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,178 @@ | ||||
| /* | ||||
|  * $Id$ | ||||
|  * | ||||
|     Copyright 2006-2012 Chung, Hyung-Hwan. | ||||
|     This file is part of QSE. | ||||
|  | ||||
|     QSE is free software: you can redistribute it and/or modify | ||||
|     it under the terms of the GNU Lesser General Public License as  | ||||
|     published by the Free Software Foundation, either version 3 of  | ||||
|     the License, or (at your option) any later version. | ||||
|  | ||||
|     QSE is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|     GNU Lesser General Public License for more details. | ||||
|  | ||||
|     You should have received a copy of the GNU Lesser General Public  | ||||
|     License along with QSE. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #include <qse/awk/awk.h> | ||||
| #include <qse/cmn/str.h> | ||||
| #include "../../cmn/mem.h" | ||||
|  | ||||
| static int fnc_normspc (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	/* normalize spaces  | ||||
| 	 * - trim leading and trailing spaces | ||||
| 	 * - replace a series of spaces to a single space | ||||
| 	 */ | ||||
| 	qse_xstr_t path; | ||||
| 	qse_awk_val_t* retv; | ||||
|  | ||||
| 	path.ptr = qse_awk_rtx_valtostrdup ( | ||||
| 		rtx, qse_awk_rtx_getarg(rtx, 0), &path.len); | ||||
| 	if (path.ptr) | ||||
| 	{ | ||||
| 		path.len = qse_strxpac (path.ptr, path.len); | ||||
| 		retv = qse_awk_rtx_makestrval (rtx, path.ptr, path.len); | ||||
| 		qse_awk_rtx_freemem (rtx, path.ptr); | ||||
| 		if (retv) qse_awk_rtx_setretval (rtx, retv); | ||||
| 	} | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int trim (qse_awk_rtx_t* rtx, int flags) | ||||
| { | ||||
| 	qse_xstr_t path; | ||||
| 	qse_char_t* npath; | ||||
| 	qse_awk_val_t* retv; | ||||
|  | ||||
| 	path.ptr = qse_awk_rtx_valtostrdup ( | ||||
| 		rtx, qse_awk_rtx_getarg(rtx, 0), &path.len); | ||||
| 	if (path.ptr) | ||||
| 	{ | ||||
| 		npath = qse_strxtrmx (path.ptr, &path.len, flags); | ||||
| 		retv = qse_awk_rtx_makestrval (rtx, npath, path.len); | ||||
| 		qse_awk_rtx_freemem (rtx, path.ptr); | ||||
| 		if (retv) qse_awk_rtx_setretval (rtx, retv); | ||||
| 	} | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_trim (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	return trim (rtx, QSE_STRTRMX_LEFT | QSE_STRTRMX_RIGHT); | ||||
| } | ||||
| static int fnc_ltrim (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	return trim (rtx, QSE_STRTRMX_LEFT); | ||||
| } | ||||
| static int fnc_rtrim (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	return trim (rtx, QSE_STRTRMX_RIGHT); | ||||
| } | ||||
|  | ||||
| typedef struct fnctab_t fnctab_t; | ||||
| struct fnctab_t | ||||
| { | ||||
| 	const qse_char_t* name; | ||||
| 	qse_awk_mod_sym_fnc_t info; | ||||
| }; | ||||
|  | ||||
| static fnctab_t fnctab[] = | ||||
| { | ||||
| 	/* keep this table sorted for binary search in query(). */ | ||||
| 	{ QSE_T("ltrim"),    { { 1, 1, QSE_NULL }, fnc_ltrim,    0  } }, | ||||
| 	{ QSE_T("normspc"),  { { 1, 1, QSE_NULL }, fnc_normspc,  0  } }, | ||||
| 	{ QSE_T("rtrim"),    { { 1, 1, QSE_NULL }, fnc_rtrim,    0  } }, | ||||
| 	{ QSE_T("trim"),     { { 1, 1, QSE_NULL }, fnc_trim,     0  } } | ||||
| }; | ||||
|  | ||||
| static int query (qse_awk_mod_t* mod, qse_awk_t* awk, const qse_char_t* name, qse_awk_mod_sym_t* sym) | ||||
| { | ||||
| 	qse_cstr_t ea; | ||||
| 	int left, right, mid, n; | ||||
|  | ||||
| 	left = 0; right = QSE_COUNTOF(fnctab) - 1; | ||||
|  | ||||
| 	while (left <= right) | ||||
| 	{ | ||||
| 		mid = (left + right) / 2; | ||||
|  | ||||
| 		n = qse_strcmp (fnctab[mid].name, name); | ||||
| 		if (n > 0) right = mid - 1;  | ||||
| 		else if (n < 0) left = mid + 1; | ||||
| 		else | ||||
| 		{ | ||||
| 			sym->type = QSE_AWK_MOD_FNC; | ||||
| 			sym->u.fnc = fnctab[mid].info; | ||||
| 			return 0; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| #if 0 | ||||
| 	left = 0; right = QSE_COUNTOF(inttab) - 1; | ||||
| 	while (left <= right) | ||||
| 	{ | ||||
| 		mid = (left + right) / 2; | ||||
|  | ||||
| 		n = qse_strcmp (inttab[mid].name, name); | ||||
| 		if (n > 0) right = mid - 1;  | ||||
| 		else if (n < 0) left = mid + 1; | ||||
| 		else | ||||
| 		{ | ||||
| 			sym->type = QSE_AWK_MOD_INT; | ||||
| 			sym->u.in = inttab[mid].info; | ||||
| 			return 0; | ||||
| 		} | ||||
|      } | ||||
| #endif | ||||
|  | ||||
| 	ea.ptr = name; | ||||
| 	ea.len = qse_strlen(name); | ||||
| 	qse_awk_seterror (awk, QSE_AWK_ENOENT, &ea, QSE_NULL); | ||||
| 	return -1; | ||||
| } | ||||
|  | ||||
| /* TODO: proper resource management */ | ||||
|  | ||||
| static int init (qse_awk_mod_t* mod, qse_awk_rtx_t* rtx) | ||||
| { | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static void fini (qse_awk_mod_t* mod, qse_awk_rtx_t* rtx) | ||||
| { | ||||
| 	/* TODO:  | ||||
| 	for (each pid for rtx) kill (pid, SIGKILL); | ||||
| 	for (each pid for rtx) waitpid (pid, QSE_NULL, 0); | ||||
| 	*/ | ||||
| } | ||||
|  | ||||
| static void unload (qse_awk_mod_t* mod, qse_awk_t* awk) | ||||
| { | ||||
| 	/* TODO: anything */ | ||||
| } | ||||
|  | ||||
| QSE_EXPORT int load (qse_awk_mod_t* mod, qse_awk_t* awk) | ||||
| { | ||||
| 	mod->query = query; | ||||
| 	mod->unload = unload; | ||||
|  | ||||
| 	mod->init = init; | ||||
| 	mod->fini = fini; | ||||
| 	/* | ||||
| 	mod->ctx... | ||||
| 	 */ | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| #if defined(__DOS__) | ||||
| /* kind of DllMain() for Causeway DLL */ | ||||
| int main (int eax) { return 0; } | ||||
| #endif | ||||
							
								
								
									
										749
									
								
								qse/lib/awk/mod/sys.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										749
									
								
								qse/lib/awk/mod/sys.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,749 @@ | ||||
| /* | ||||
|  * $Id$ | ||||
|  * | ||||
|     Copyright 2006-2012 Chung, Hyung-Hwan. | ||||
|     This file is part of QSE. | ||||
|  | ||||
|     QSE is free software: you can redistribute it and/or modify | ||||
|     it under the terms of the GNU Lesser General Public License as  | ||||
|     published by the Free Software Foundation, either version 3 of  | ||||
|     the License, or (at your option) any later version. | ||||
|  | ||||
|     QSE is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|     GNU Lesser General Public License for more details. | ||||
|  | ||||
|     You should have received a copy of the GNU Lesser General Public  | ||||
|     License along with QSE. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #include <qse/awk/awk.h> | ||||
| #include <qse/cmn/str.h> | ||||
| #include <qse/cmn/time.h> | ||||
| #include <qse/cmn/nwif.h> | ||||
| #include <qse/cmn/nwad.h> | ||||
| #include "../../cmn/mem.h" | ||||
|  | ||||
| #if defined(_WIN32) | ||||
| #	include <windows.h> | ||||
| #	include <process.h> | ||||
| #elif defined(__OS2__) | ||||
| #	define INCL_DOSPROCESS | ||||
| #	define INCL_DOSEXCEPTIONS | ||||
| #	define INCL_ERRORS | ||||
| #	include <os2.h> | ||||
| #elif defined(__DOS__) | ||||
| #	include <dos.h> | ||||
| #else | ||||
| #	include "../../cmn/syscall.h" | ||||
| #	if defined(HAVE_SYS_SYSCALL_H) | ||||
| #		include <sys/syscall.h> | ||||
| #	endif | ||||
| #endif | ||||
|  | ||||
| #include <stdlib.h> /* getenv */ | ||||
| #include <qse/cmn/stdio.h> /* qse_sprintf */ | ||||
|  | ||||
| static int fnc_fork (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	qse_long_t pid; | ||||
| 	qse_awk_val_t* retv; | ||||
|  | ||||
| #if defined(_WIN32) | ||||
| 	/* TOOD: implement this*/ | ||||
| 	pid = -1; | ||||
| 	 | ||||
| #elif defined(__OS2__) | ||||
| 	/* TOOD: implement this*/ | ||||
| 	pid = -1; | ||||
| 	 | ||||
| #elif defined(__DOS__) | ||||
| 	/* TOOD: implement this*/ | ||||
| 	pid = -1; | ||||
|  | ||||
| #else | ||||
| 	pid = fork (); | ||||
| #endif | ||||
|  | ||||
| 	retv = qse_awk_rtx_makeintval (rtx, pid); | ||||
| 	if (retv == QSE_NULL) return -1; | ||||
|  | ||||
| 	qse_awk_rtx_setretval (rtx, retv); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_wait (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	qse_long_t pid; | ||||
| 	qse_awk_val_t* retv; | ||||
| 	int rx; | ||||
|  | ||||
| /* TODO: handle more parameters */ | ||||
|  | ||||
| 	rx = qse_awk_rtx_valtolong (rtx, qse_awk_rtx_getarg (rtx, 0), &pid); | ||||
| 	if (rx >= 0) | ||||
| 	{ | ||||
| #if defined(_WIN32) | ||||
| 		/* TOOD: implement this*/ | ||||
| 		rx = -1; | ||||
| #elif defined(__OS2__) | ||||
| 		/* TOOD: implement this*/ | ||||
| 		rx = -1; | ||||
| #elif defined(__DOS__) | ||||
| 		/* TOOD: implement this*/ | ||||
| 		rx = -1; | ||||
| #else | ||||
| 		rx = waitpid (pid, QSE_NULL, 0); | ||||
| #endif | ||||
| 	} | ||||
|  | ||||
| 	retv = qse_awk_rtx_makeintval (rtx, rx); | ||||
| 	if (retv == QSE_NULL) return -1; | ||||
|  | ||||
| 	qse_awk_rtx_setretval (rtx, retv); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_kill (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	qse_long_t pid, sig; | ||||
| 	qse_awk_val_t* retv; | ||||
| 	int rx; | ||||
|  | ||||
| 	if (qse_awk_rtx_valtolong (rtx, qse_awk_rtx_getarg (rtx, 0), &pid) <= -1 || | ||||
| 	    qse_awk_rtx_valtolong (rtx, qse_awk_rtx_getarg (rtx, 1), &sig) <= -1) | ||||
| 	{ | ||||
| 		rx = -1; | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| #if defined(_WIN32) | ||||
| 		/* TOOD: implement this*/ | ||||
| 		rx = -1; | ||||
| #elif defined(__OS2__) | ||||
| 		/* TOOD: implement this*/ | ||||
| 		rx = -1; | ||||
| #elif defined(__DOS__) | ||||
| 		/* TOOD: implement this*/ | ||||
| 		rx = -1; | ||||
| #else | ||||
| 		rx = kill (pid, sig); | ||||
| #endif | ||||
| 	} | ||||
|  | ||||
| 	retv = qse_awk_rtx_makeintval (rtx, rx); | ||||
| 	if (retv == QSE_NULL) return -1; | ||||
|  | ||||
| 	qse_awk_rtx_setretval (rtx, retv); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_getpgrp (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	qse_long_t pid; | ||||
| 	qse_awk_val_t* retv; | ||||
|  | ||||
| #if defined(_WIN32) | ||||
| 	/* TOOD: implement this*/ | ||||
| 	pid = -1; | ||||
| 	 | ||||
| #elif defined(__OS2__) | ||||
| 	/* TOOD: implement this*/ | ||||
| 	pid = -1; | ||||
| 	 | ||||
| #elif defined(__DOS__) | ||||
| 	/* TOOD: implement this*/ | ||||
| 	pid = -1; | ||||
|  | ||||
| #else | ||||
| 	pid = getpgrp (); | ||||
| #endif | ||||
|  | ||||
| 	retv = qse_awk_rtx_makeintval (rtx, pid); | ||||
| 	if (retv == QSE_NULL) return -1; | ||||
|  | ||||
| 	qse_awk_rtx_setretval (rtx, retv); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_getpid (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	qse_long_t pid; | ||||
| 	qse_awk_val_t* retv; | ||||
|  | ||||
| #if defined(_WIN32) | ||||
| 	pid = GetCurrentProcessId(); | ||||
| 	 | ||||
| #elif defined(__OS2__) | ||||
| 	PTIB tib; | ||||
| 	PPIB pib; | ||||
|  | ||||
| 	pid = (DosGetInfoBlocks (&tib, &pib) == NO_ERROR)? | ||||
| 		pib->pib_ulpid: -1; | ||||
| 	 | ||||
| #elif defined(__DOS__) | ||||
| 	/* TOOD: implement this*/ | ||||
| 	pid = -1; | ||||
|  | ||||
| #else | ||||
| 	pid = getpid (); | ||||
| #endif | ||||
|  | ||||
| 	retv = qse_awk_rtx_makeintval (rtx, pid); | ||||
| 	if (retv == QSE_NULL) return -1; | ||||
|  | ||||
| 	qse_awk_rtx_setretval (rtx, retv); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_gettid (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	qse_intptr_t pid; | ||||
| 	qse_awk_val_t* retv; | ||||
|  | ||||
| #if defined(_WIN32) | ||||
| 	pid = GetCurrentThreadId(); | ||||
| 	 | ||||
| #elif defined(__OS2__) | ||||
| 	PTIB tib; | ||||
| 	PPIB pib; | ||||
|  | ||||
| 	pid = (DosGetInfoBlocks (&tib, &pib) == NO_ERROR && tib->tib_ptib2)? | ||||
| 		 tib->tib_ptib2->tib2_ultid: -1; | ||||
| 	 | ||||
| #elif defined(__DOS__) | ||||
| 	/* TOOD: implement this*/ | ||||
| 	pid = -1; | ||||
|  | ||||
| #else | ||||
| 	#if defined(SYS_gettid) && defined(QSE_SYSCALL0) | ||||
| 	QSE_SYSCALL0 (pid, SYS_gettid); | ||||
| 	#elif defined(SYS_gettid) | ||||
| 	pid = syscall (SYS_gettid); | ||||
| 	#else | ||||
| 	pid = -1; | ||||
| 	#endif | ||||
| #endif | ||||
|  | ||||
| 	retv = qse_awk_rtx_makeintval (rtx, (qse_long_t)pid); | ||||
| 	if (retv == QSE_NULL) return -1; | ||||
|  | ||||
| 	qse_awk_rtx_setretval (rtx, retv); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_getppid (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	qse_long_t pid; | ||||
| 	qse_awk_val_t* retv; | ||||
|  | ||||
| #if defined(_WIN32) | ||||
| 	/* TOOD: implement this*/ | ||||
| 	pid = -1; | ||||
| 	 | ||||
| #elif defined(__OS2__) | ||||
| 	/* TOOD: implement this*/ | ||||
| 	pid = -1; | ||||
| 	 | ||||
| #elif defined(__DOS__) | ||||
| 	/* TOOD: implement this*/ | ||||
| 	pid = -1; | ||||
|  | ||||
| #else | ||||
| 	pid = getppid (); | ||||
| #endif | ||||
|  | ||||
| 	retv = qse_awk_rtx_makeintval (rtx, pid); | ||||
| 	if (retv == QSE_NULL) return -1; | ||||
|  | ||||
| 	qse_awk_rtx_setretval (rtx, retv); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_getuid (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	qse_long_t uid; | ||||
| 	qse_awk_val_t* retv; | ||||
|  | ||||
| #if defined(_WIN32) | ||||
| 	/* TOOD: implement this*/ | ||||
| 	uid = -1; | ||||
| 	 | ||||
| #elif defined(__OS2__) | ||||
| 	/* TOOD: implement this*/ | ||||
| 	uid = -1; | ||||
| 	 | ||||
| #elif defined(__DOS__) | ||||
| 	/* TOOD: implement this*/ | ||||
| 	uid = -1; | ||||
|  | ||||
| #else | ||||
| 	uid = getuid (); | ||||
| #endif | ||||
|  | ||||
| 	retv = qse_awk_rtx_makeintval (rtx, uid); | ||||
| 	if (retv == QSE_NULL) return -1; | ||||
|  | ||||
| 	qse_awk_rtx_setretval (rtx, retv); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_getgid (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	qse_long_t gid; | ||||
| 	qse_awk_val_t* retv; | ||||
|  | ||||
| #if defined(_WIN32) | ||||
| 	/* TOOD: implement this*/ | ||||
| 	gid = -1; | ||||
| 	 | ||||
| #elif defined(__OS2__) | ||||
| 	/* TOOD: implement this*/ | ||||
| 	gid = -1; | ||||
| 	 | ||||
| #elif defined(__DOS__) | ||||
| 	/* TOOD: implement this*/ | ||||
| 	gid = -1; | ||||
|  | ||||
| #else | ||||
| 	gid = getgid (); | ||||
| #endif | ||||
|  | ||||
| 	retv = qse_awk_rtx_makeintval (rtx, gid); | ||||
| 	if (retv == QSE_NULL) return -1; | ||||
|  | ||||
| 	qse_awk_rtx_setretval (rtx, retv); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_geteuid (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	qse_long_t uid; | ||||
| 	qse_awk_val_t* retv; | ||||
|  | ||||
| #if defined(_WIN32) | ||||
| 	/* TOOD: implement this*/ | ||||
| 	uid = -1; | ||||
| 	 | ||||
| #elif defined(__OS2__) | ||||
| 	/* TOOD: implement this*/ | ||||
| 	uid = -1; | ||||
| 	 | ||||
| #elif defined(__DOS__) | ||||
| 	/* TOOD: implement this*/ | ||||
| 	uid = -1; | ||||
|  | ||||
| #else | ||||
| 	uid = geteuid (); | ||||
| #endif | ||||
|  | ||||
| 	retv = qse_awk_rtx_makeintval (rtx, uid); | ||||
| 	if (retv == QSE_NULL) return -1; | ||||
|  | ||||
| 	qse_awk_rtx_setretval (rtx, retv); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_getegid (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	qse_long_t gid; | ||||
| 	qse_awk_val_t* retv; | ||||
|  | ||||
| #if defined(_WIN32) | ||||
| 	/* TOOD: implement this*/ | ||||
| 	gid = -1; | ||||
| 	 | ||||
| #elif defined(__OS2__) | ||||
| 	/* TOOD: implement this*/ | ||||
| 	gid = -1; | ||||
| 	 | ||||
| #elif defined(__DOS__) | ||||
| 	/* TOOD: implement this*/ | ||||
| 	gid = -1; | ||||
|  | ||||
| #else | ||||
| 	gid = getegid (); | ||||
| #endif | ||||
|  | ||||
| 	retv = qse_awk_rtx_makeintval (rtx, gid); | ||||
| 	if (retv == QSE_NULL) return -1; | ||||
|  | ||||
| 	qse_awk_rtx_setretval (rtx, retv); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_sleep (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	qse_long_t lv; | ||||
| 	qse_flt_t fv; | ||||
| 	qse_awk_val_t* retv; | ||||
| 	int rx; | ||||
|  | ||||
| 	rx = qse_awk_rtx_valtonum (rtx, qse_awk_rtx_getarg (rtx, 0), &lv, &fv); | ||||
| 	if (rx == 0) | ||||
| 	{ | ||||
| #if defined(_WIN32) | ||||
| 		Sleep ((DWORD)QSE_SEC_TO_MSEC(lv)); | ||||
| 		rx = 0; | ||||
| #elif defined(__OS2__) | ||||
| 		DosSleep ((ULONG)QSE_SEC_TO_MSEC(lv)); | ||||
| 		rx = 0; | ||||
| #elif defined(__DOS__) | ||||
| 		rx = sleep (lv);	 | ||||
| #elif defined(HAVE_NANOSLEEP) | ||||
| 		struct timespec req; | ||||
| 		req.tv_sec = lv; | ||||
| 		req.tv_nsec = 0; | ||||
| 		rx = nanosleep (&req, QSE_NULL); | ||||
| #else | ||||
| 		rx = sleep (lv);	 | ||||
| #endif | ||||
| 	} | ||||
| 	else if (rx >= 1) | ||||
| 	{ | ||||
| #if defined(_WIN32) | ||||
| 		Sleep ((DWORD)QSE_SEC_TO_MSEC(fv)); | ||||
| 		rx = 0; | ||||
| #elif defined(__OS2__) | ||||
| 		DosSleep ((ULONG)QSE_SEC_TO_MSEC(fv)); | ||||
| 		rx = 0; | ||||
| #elif defined(__DOS__) | ||||
| 		/* no high-resolution sleep() is available */ | ||||
| 		rx = sleep ((qse_long_t)fv);	 | ||||
| #elif defined(HAVE_NANOSLEEP) | ||||
| 		struct timespec req; | ||||
| 		req.tv_sec = (qse_long_t)fv; | ||||
| 		req.tv_nsec = QSE_SEC_TO_NSEC(fv - req.tv_sec); | ||||
| 		rx = nanosleep (&req, QSE_NULL); | ||||
| #elif defined(HAVE_SELECT) | ||||
| 		struct timeval req; | ||||
| 		req.tv_sec = (qse_long_t)fv; | ||||
| 		req.tv_nsec = QSE_SEC_TO_USEC(fv - req.tv_sec); | ||||
| 		rx = select (0, QSE_NULL, QSE_NULL, QSE_NULL, &req); | ||||
| #else | ||||
| 		/* no high-resolution sleep() is available */ | ||||
| 		rx = sleep ((qse_long_t)fv);	 | ||||
| #endif | ||||
| 	} | ||||
|  | ||||
| 	retv = qse_awk_rtx_makeintval (rtx, rx); | ||||
| 	if (retv == QSE_NULL) return -1; | ||||
|  | ||||
| 	qse_awk_rtx_setretval (rtx, retv); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_gettime (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	qse_awk_val_t* retv; | ||||
| 	qse_ntime_t now; | ||||
|  | ||||
| 	if (qse_gettime (&now) <= -1) now.sec = 0; | ||||
|  | ||||
| 	retv = qse_awk_rtx_makeintval (rtx, now.sec); | ||||
| 	if (retv == QSE_NULL) return -1; | ||||
|  | ||||
| 	qse_awk_rtx_setretval (rtx, retv); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_settime (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	qse_awk_val_t* retv; | ||||
| 	qse_ntime_t now; | ||||
| 	int rx; | ||||
|  | ||||
| 	now.nsec = 0; | ||||
|  | ||||
| 	if (qse_awk_rtx_valtolong (rtx, qse_awk_rtx_getarg (rtx, 0), &now.sec) <= -1 || | ||||
| 	    qse_settime (&now) <= -1) rx = -1; | ||||
| 	else rx = 0; | ||||
|  | ||||
| 	retv = qse_awk_rtx_makeintval (rtx, rx); | ||||
| 	if (retv == QSE_NULL) return -1; | ||||
|  | ||||
| 	qse_awk_rtx_setretval (rtx, retv); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_getenv (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	qse_mchar_t* var; | ||||
| 	qse_size_t len; | ||||
| 	qse_awk_val_t* retv; | ||||
|  | ||||
| 	var = qse_awk_rtx_valtombsdup ( | ||||
| 		rtx, qse_awk_rtx_getarg (rtx, 0), &len); | ||||
| 	if (var) | ||||
| 	{ | ||||
| 		qse_mchar_t* val; | ||||
|  | ||||
| 		val = getenv (var);	 | ||||
| 		if (val)  | ||||
| 		{ | ||||
| 			retv = qse_awk_rtx_makestrvalwithmbs (rtx, val); | ||||
| 			if (retv == QSE_NULL) return -1; | ||||
|  | ||||
| 			qse_awk_rtx_setretval (rtx, retv); | ||||
| 		} | ||||
|  | ||||
| 		qse_awk_rtx_freemem (rtx, var); | ||||
| 	} | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int fnc_getnwifcfg (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	qse_nwifcfg_t cfg; | ||||
| 	qse_awk_rtx_valtostr_out_t out; | ||||
| 	int ret = -1; | ||||
|  | ||||
| 	out.type = QSE_AWK_RTX_VALTOSTR_CPLCPY; | ||||
| 	out.u.cplcpy.ptr = cfg.name; | ||||
| 	out.u.cplcpy.len = QSE_COUNTOF(cfg.name); | ||||
| 	if (qse_awk_rtx_valtostr (rtx, qse_awk_rtx_getarg (rtx, 0), &out) >= 0) | ||||
| 	{ | ||||
| 		qse_long_t type; | ||||
| 		int rx; | ||||
|  | ||||
| 		rx = qse_awk_rtx_valtolong (rtx, qse_awk_rtx_getarg (rtx, 1), &type); | ||||
| 		if (rx >= 0) | ||||
| 		{ | ||||
| 			cfg.type = type; | ||||
|  | ||||
| 			if (qse_getnwifcfg (&cfg) >= 0) | ||||
| 			{ | ||||
| 				/* make a map value containg configuration */	 | ||||
| 				qse_long_t index, mtu; | ||||
| 				qse_char_t addr[128]; | ||||
| 				qse_char_t mask[128]; | ||||
| 				qse_char_t ethw[32]; | ||||
| 				qse_awk_val_map_data_t md[7]; | ||||
| 				qse_awk_val_t* tmp; | ||||
|  | ||||
| 				QSE_MEMSET (md, 0, QSE_SIZEOF(md)); | ||||
|  | ||||
| 				md[0].key.ptr = QSE_T("index"); | ||||
| 				md[0].key.len = 5; | ||||
| 				md[0].type = QSE_AWK_VAL_MAP_DATA_INT; | ||||
| 				index = cfg.index; | ||||
| 				md[0].vptr = &index; | ||||
|  | ||||
| 				md[1].key.ptr = QSE_T("mtu"); | ||||
| 				md[1].key.len = 3; | ||||
| 				md[1].type = QSE_AWK_VAL_MAP_DATA_INT; | ||||
| 				mtu = cfg.mtu; | ||||
| 				md[1].vptr = &mtu; | ||||
| 		 | ||||
| 				md[2].key.ptr = QSE_T("addr"); | ||||
| 				md[2].key.len = 4; | ||||
| 				md[2].type = QSE_AWK_VAL_MAP_DATA_STR; | ||||
| 				qse_nwadtostr (&cfg.addr, addr, QSE_COUNTOF(addr), QSE_NWADTOSTR_ADDR); | ||||
| 				md[2].vptr = addr; | ||||
|  | ||||
| 				md[3].key.ptr = QSE_T("mask"); | ||||
| 				md[3].key.len = 4; | ||||
| 				md[3].type = QSE_AWK_VAL_MAP_DATA_STR; | ||||
| 				qse_nwadtostr (&cfg.mask, mask, QSE_COUNTOF(mask), QSE_NWADTOSTR_ADDR); | ||||
| 				md[3].vptr = mask; | ||||
|  | ||||
| 				md[4].key.ptr = QSE_T("ethw"); | ||||
| 				md[4].key.len = 4; | ||||
| 				md[4].type = QSE_AWK_VAL_MAP_DATA_STR; | ||||
| 				qse_sprintf (ethw, QSE_COUNTOF(ethw), QSE_T("%02X:%02X:%02X:%02X:%02X:%02X"),  | ||||
| 					cfg.ethw[0], cfg.ethw[1], cfg.ethw[2], cfg.ethw[3], cfg.ethw[4], cfg.ethw[5]); | ||||
| 				md[4].vptr = ethw; | ||||
|  | ||||
| 				if (cfg.flags & (QSE_NWIFCFG_LINKUP | QSE_NWIFCFG_LINKDOWN)) | ||||
| 				{ | ||||
| 					md[5].key.ptr = QSE_T("link"); | ||||
| 					md[5].key.len = 4; | ||||
| 					md[5].type = QSE_AWK_VAL_MAP_DATA_STR; | ||||
| 					md[5].vptr = (cfg.flags & QSE_NWIFCFG_LINKUP)? QSE_T("up"): QSE_T("down"); | ||||
| 				} | ||||
|  | ||||
| 				tmp = qse_awk_rtx_makemapvalwithdata (rtx, md); | ||||
| 				if (tmp) | ||||
| 				{ | ||||
| 					if (qse_awk_rtx_setrefval (rtx, qse_awk_rtx_getarg (rtx, 2), tmp) <= -1) | ||||
| 					{ | ||||
| 						qse_awk_rtx_refupval (rtx, tmp); | ||||
| 						qse_awk_rtx_refdownval (rtx, tmp); | ||||
| 					} | ||||
| 					else ret = 0; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	/* no error check for qse_awk_rtx_makeintval() since ret is 0 or -1 */ | ||||
| 	qse_awk_rtx_setretval (rtx, qse_awk_rtx_makeintval (rtx, ret)); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| typedef struct fnctab_t fnctab_t; | ||||
| struct fnctab_t | ||||
| { | ||||
| 	const qse_char_t* name; | ||||
| 	qse_awk_mod_sym_fnc_t info; | ||||
| }; | ||||
|  | ||||
| typedef struct inttab_t inttab_t; | ||||
| struct inttab_t | ||||
| { | ||||
| 	const qse_char_t* name; | ||||
| 	qse_awk_mod_sym_int_t info; | ||||
| }; | ||||
|  | ||||
| static fnctab_t fnctab[] = | ||||
| { | ||||
| 	/* keep this table sorted for binary search in query(). */ | ||||
|  | ||||
| 	{ QSE_T("fork"),       { { 0, 0, QSE_NULL     }, fnc_fork,       0  } }, | ||||
| 	{ QSE_T("getegid"),    { { 0, 0, QSE_NULL     }, fnc_getegid,    0  } }, | ||||
| 	{ QSE_T("getenv"),     { { 1, 1, QSE_NULL     }, fnc_getenv,     0  } }, | ||||
| 	{ QSE_T("geteuid"),    { { 0, 0, QSE_NULL     }, fnc_geteuid,    0  } }, | ||||
| 	{ QSE_T("getgid"),     { { 0, 0, QSE_NULL     }, fnc_getgid,     0  } }, | ||||
| 	{ QSE_T("getnwifcfg"), { { 3, 3, QSE_T("vvr") }, fnc_getnwifcfg, 0  } }, | ||||
| 	{ QSE_T("getpgrp"),    { { 0, 0, QSE_NULL     }, fnc_getpgrp,    0  } }, | ||||
| 	{ QSE_T("getpid"),     { { 0, 0, QSE_NULL     }, fnc_getpid,     0  } }, | ||||
| 	{ QSE_T("getppid"),    { { 0, 0, QSE_NULL     }, fnc_getppid,    0  } }, | ||||
| 	{ QSE_T("gettid"),     { { 0, 0, QSE_NULL     }, fnc_gettid,     0  } }, | ||||
| 	{ QSE_T("gettime"),    { { 0, 0, QSE_NULL     }, fnc_gettime,    0  } }, | ||||
| 	{ QSE_T("getuid"),     { { 0, 0, QSE_NULL     }, fnc_getuid,     0  } }, | ||||
| 	{ QSE_T("kill"),       { { 2, 2, QSE_NULL     }, fnc_kill,       0  } }, | ||||
| 	{ QSE_T("settime"),    { { 1, 1, QSE_NULL     }, fnc_settime,    0  } }, | ||||
| 	{ QSE_T("sleep"),      { { 1, 1, QSE_NULL     }, fnc_sleep,      0  } }, | ||||
| 	{ QSE_T("wait"),       { { 1, 1, QSE_NULL     }, fnc_wait,       0  } } | ||||
| }; | ||||
|  | ||||
| #if !defined(SIGHUP) | ||||
| #	define SIGHUP 1 | ||||
| #endif | ||||
| #if !defined(SIGINT) | ||||
| #	define SIGINT 2 | ||||
| #endif | ||||
| #if !defined(SIGQUIT) | ||||
| #	define SIGQUIT 3 | ||||
| #endif | ||||
| #if !defined(SIGABRT) | ||||
| #	define SIGABRT 6 | ||||
| #endif | ||||
| #if !defined(SIGKILL) | ||||
| #	define SIGKILL 9 | ||||
| #endif | ||||
| #if !defined(SIGSEGV) | ||||
| #	define SIGSEGV 11 | ||||
| #endif | ||||
| #if !defined(SIGALRM) | ||||
| #	define SIGALRM 14 | ||||
| #endif | ||||
| #if !defined(SIGTERM) | ||||
| #	define SIGTERM 15 | ||||
| #endif | ||||
|  | ||||
| static inttab_t inttab[] = | ||||
| { | ||||
| 	/* keep this table sorted for binary search in query(). */ | ||||
|  | ||||
| 	{ QSE_T("NWIFCFG_IN4"), { QSE_NWIFCFG_IN4 } }, | ||||
| 	{ QSE_T("NWIFCFG_IN6"), { QSE_NWIFCFG_IN6 } }, | ||||
|  | ||||
| 	{ QSE_T("SIGABRT"), { SIGABRT } }, | ||||
| 	{ QSE_T("SIGALRM"), { SIGALRM } }, | ||||
| 	{ QSE_T("SIGHUP"),  { SIGHUP } }, | ||||
| 	{ QSE_T("SIGINT"),  { SIGINT } }, | ||||
| 	{ QSE_T("SIGKILL"), { SIGKILL } }, | ||||
| 	{ QSE_T("SIGQUIT"), { SIGQUIT } }, | ||||
| 	{ QSE_T("SIGSEGV"), { SIGSEGV } }, | ||||
| 	{ QSE_T("SIGTERM"), { SIGTERM } } | ||||
|  | ||||
| /* | ||||
| 	{ QSE_T("WNOHANG"), { WNOHANG } }, | ||||
| */ | ||||
| }; | ||||
|  | ||||
| static int query (qse_awk_mod_t* mod, qse_awk_t* awk, const qse_char_t* name, qse_awk_mod_sym_t* sym) | ||||
| { | ||||
| 	qse_cstr_t ea; | ||||
| 	int left, right, mid, n; | ||||
|  | ||||
| 	left = 0; right = QSE_COUNTOF(fnctab) - 1; | ||||
|  | ||||
| 	while (left <= right) | ||||
| 	{ | ||||
| 		mid = (left + right) / 2; | ||||
|  | ||||
| 		n = qse_strcmp (fnctab[mid].name, name); | ||||
| 		if (n > 0) right = mid - 1;  | ||||
| 		else if (n < 0) left = mid + 1; | ||||
| 		else | ||||
| 		{ | ||||
| 			sym->type = QSE_AWK_MOD_FNC; | ||||
| 			sym->u.fnc = fnctab[mid].info; | ||||
| 			return 0; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	left = 0; right = QSE_COUNTOF(inttab) - 1; | ||||
| 	while (left <= right) | ||||
| 	{ | ||||
| 		mid = (left + right) / 2; | ||||
|  | ||||
| 		n = qse_strcmp (inttab[mid].name, name); | ||||
| 		if (n > 0) right = mid - 1;  | ||||
| 		else if (n < 0) left = mid + 1; | ||||
| 		else | ||||
| 		{ | ||||
| 			sym->type = QSE_AWK_MOD_INT; | ||||
| 			sym->u.in = inttab[mid].info; | ||||
| 			return 0; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	ea.ptr = name; | ||||
| 	ea.len = qse_strlen(name); | ||||
| 	qse_awk_seterror (awk, QSE_AWK_ENOENT, &ea, QSE_NULL); | ||||
| 	return -1; | ||||
| } | ||||
|  | ||||
| /* TODO: proper resource management */ | ||||
|  | ||||
| static int init (qse_awk_mod_t* mod, qse_awk_rtx_t* rtx) | ||||
| { | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static void fini (qse_awk_mod_t* mod, qse_awk_rtx_t* rtx) | ||||
| { | ||||
| 	/* TODO:  | ||||
| 	for (each pid for rtx) kill (pid, SIGKILL); | ||||
| 	for (each pid for rtx) waitpid (pid, QSE_NULL, 0); | ||||
| 	*/ | ||||
| } | ||||
|  | ||||
| static void unload (qse_awk_mod_t* mod, qse_awk_t* awk) | ||||
| { | ||||
| 	/* TODO: anything */ | ||||
| } | ||||
|  | ||||
| QSE_EXPORT int load (qse_awk_mod_t* mod, qse_awk_t* awk) | ||||
| { | ||||
| 	mod->query = query; | ||||
| 	mod->unload = unload; | ||||
|  | ||||
| 	mod->init = init; | ||||
| 	mod->fini = fini; | ||||
| 	/* | ||||
| 	mod->ctx... | ||||
| 	 */ | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| #if defined(__DOS__) | ||||
| /* kind of DllMain() for Causeway DLL */ | ||||
| int main (int eax) { return 0; } | ||||
| #endif | ||||
							
								
								
									
										1430
									
								
								qse/lib/awk/mod/uci.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1430
									
								
								qse/lib/awk/mod/uci.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user