From 3850634f37aba6b731d8d37af3934094c7787053 Mon Sep 17 00:00:00 2001 From: hyung-hwan Date: Sun, 23 Sep 2007 00:46:00 +0000 Subject: [PATCH] Recovered from cvs revision 2007-09-22 13:46:00 --- ase/awk/Awk.cpp | 4 +- ase/awk/Awk.hpp | 283 +++++++++++++----- ase/doc/doxyfile | 244 +++++++++++++++ .../{awk-extio.dia => awk-srcio-read.dia} | Bin .../{awk-extio.png => awk-srcio-read.png} | Bin ase/doc/imgs/awk-srcio-write.dia | Bin 0 -> 2011 bytes ase/doc/imgs/awk-srcio-write.png | Bin 0 -> 3247 bytes 7 files changed, 451 insertions(+), 80 deletions(-) create mode 100644 ase/doc/doxyfile rename ase/doc/imgs/{awk-extio.dia => awk-srcio-read.dia} (100%) rename ase/doc/imgs/{awk-extio.png => awk-srcio-read.png} (100%) create mode 100644 ase/doc/imgs/awk-srcio-write.dia create mode 100644 ase/doc/imgs/awk-srcio-write.png diff --git a/ase/awk/Awk.cpp b/ase/awk/Awk.cpp index da0e6d31..13102d2b 100644 --- a/ase/awk/Awk.cpp +++ b/ase/awk/Awk.cpp @@ -1,5 +1,5 @@ /* - * $Id: Awk.cpp,v 1.54 2007/09/07 05:40:16 bacon Exp $ + * $Id: Awk.cpp,v 1.55 2007/09/21 15:29:51 bacon Exp $ */ @@ -16,7 +16,7 @@ ASE_BEGIN_NAMESPACE(ASE) // Awk::Source ////////////////////////////////////////////////////////////////// -Awk::Source::Source (Mode mode): mode (mode) +Awk::Source::Source (Mode mode): mode (mode), handle (ASE_NULL) { } diff --git a/ase/awk/Awk.hpp b/ase/awk/Awk.hpp index 7c2a5f93..e6d1d875 100644 --- a/ase/awk/Awk.hpp +++ b/ase/awk/Awk.hpp @@ -1,5 +1,5 @@ /* - * $Id: Awk.hpp,v 1.55 2007/09/19 11:38:12 bacon Exp $ + * $Id: Awk.hpp,v 1.56 2007/09/21 15:29:51 bacon Exp $ */ #ifndef _ASE_AWK_AWK_HPP_ @@ -14,87 +14,165 @@ ASE_BEGIN_NAMESPACE(ASE) ///////////////////////////////// /** - * Provides the awk interpreter engine + * Represents the awk interpreter engine */ class Awk { public: - /** - * boolean data type - */ + /** boolean data type */ typedef ase_bool_t bool_t; - - /** - * data type that can hold any character - */ - + /** data type that can hold any character */ typedef ase_char_t char_t; - - /** - * data type that can hold any character or - * an end-of-file value - */ + /** data type that can hold any character or an end-of-file value */ typedef ase_cint_t cint_t; - typedef ase_size_t size_t; typedef ase_ssize_t ssize_t; typedef ase_long_t long_t; typedef ase_real_t real_t; - /** - * represents an internal awk value - */ + /** represents an internal awk value */ typedef ase_awk_val_t val_t; - - /** - * represents the internal hash table - */ + /** represents the internal hash table */ typedef ase_awk_map_t map_t; - - /** - * represents a key/value pair - */ + /** represents a key/value pair */ typedef ase_awk_pair_t pair_t; - - /** - * represents the external i/o operation - */ + /** represents the external i/o context */ typedef ase_awk_extio_t extio_t; - - /** - * represents the run-time instance of an awk interpreter - */ + /** represents the run-time context */ typedef ase_awk_run_t run_t; - - /** - * reprensts the underlying awk interpreter - */ + /** reprensts the underlying awk interpreter */ typedef ase_awk_t awk_t; /** - * The source class - * @see openSource + * Represents the source code I/O context for Awk::parse. + * An instance of Awk::Source is passed to Awk::openSource, + * Awk::readSource, Awk::writeSource, Awk::closeSource + * when Awk::parse calls them to read the source code and write the + * internal parse tree. It indicates the mode of the context and + * provides space for data that may be needed for the I/O operation. */ class Source { public: - /** - * Indicates the mode of the source code I/O - */ + friend class Awk; + + /** Mode of source code I/O. */ enum Mode { - READ, /**< readable I/O */ - WRITE /**< writable I/O */ + READ, /**< source code read. */ + WRITE /**< source code write. */ }; + protected: Source (Mode mode); + public: + /** + * Returns the mode of the source code I/O. + * You may call this method in Awk::openSource and + * Awk::closeSource to determine the mode as shown in + * the example below. This method always returns Source::READ + * and Source::WRITE respectively when called from + * Awk::readSource and Awk::writeSource. + * + *
+		 * int openSource (Source& io)
+		 * {
+		 * 	if (io.getMode() == Source::READ)
+		 * 	{
+		 * 		// open for reading 
+		 * 		return 1;
+		 * 	}
+		 * 	else (io.getMode() == Source::WRITE)
+		 * 	{
+		 *		// open for writing
+		 *		return 1;
+		 * 	}
+		 * 	return -1;
+		 * }
+		 *
+		 * int closeSource (Source& io)
+		 * {
+		 * 	if (io.getMode() == Source::READ)
+		 * 	{
+		 * 		// close for reading 
+		 * 		return 0;
+		 * 	}
+		 * 	else (io.getMode() == Source::WRITE)
+		 * 	{
+		 *		// close for writing
+		 *		return 0;
+		 * 	}
+		 * 	return -1;
+		 * }
+		 * 
+ * + * @return Awk::Source::READ or Awk::Source::WRITE + */ Mode getMode() const; + + /** + * Returns the value set with Source::setHandle. + * ASE_NULL is returned if it has not been set with + * Source::setHandle. You usually call this method + * from Awk::readSource, Awk::writeSource, and + * Awk::closeSource to get the value set in Awk::openSource + * as shown in the example below. + * + *
+		 * int closeSource (Source& io)
+		 * {
+		 * 	if (io.getMode() == Source::READ)
+		 * 	{
+		 * 		fclose ((FILE*)io.getHandle());
+		 * 		return 0;
+		 * 	}
+		 * 	else (io.getMode() == Source::WRITE)
+		 * 	{
+		 * 		fclose ((FILE*)io.getHandle());
+		 * 		return 0;
+		 * 	}
+		 * 	return -1;
+		 * }
+		 * 
+ * + * @return an arbitrary value of type void* set with + * Source::setHandle or ASE_NULL + */ const void* getHandle () const; + + /** + * Sets the handle value. Source::getHandle can retrieve + * the value set with Source::setHandle. You usually call + * this from Awk::openSource as shown in the example below. + * + *
+		 * int openSource (Source& io)
+		 * {
+		 * 	if (io.getMode() == Source::READ)
+		 * 	{
+		 * 		FILE* fp = fopen ("t.awk", "r");
+		 * 		if (fp == NULL) return -1;
+		 * 		io.setHandle (fp);
+		 * 		return 1;
+		 * 	}
+		 * 	else (io.getMode() == Source::WRITE)
+		 * 	{
+		 * 		FILE* fp = fopen ("t.out", "w");
+		 * 		if (fp == NULL) return -1;
+		 * 		io.setHandle (fp);
+		 *		return 1;
+		 * 	}
+		 * 	return -1;
+		 * }
+		 * 
+ * + * @param handle an arbitrary value of the type void* + */ void setHandle (void* handle); - private: + protected: Mode mode; void* handle; }; @@ -113,12 +191,12 @@ public: void setHandle (void* handle); /** - * returns the underlying extio_t handle + * Returns the underlying extio_t handle */ const extio_t* getRawExtio () const; /** - * returns the underlying run_t handle associated + * Returns the underlying run_t handle associated * with the underlying extio_t handle */ const run_t* getRawRun () const; @@ -445,7 +523,7 @@ public: // end of enum Option /** - * Run + * Represents the execution context */ class Run { @@ -470,8 +548,13 @@ public: Awk (); virtual ~Awk (); + /** Returns the error code */ ErrorCode getErrorCode () const; + + /** Returns the line of the source code where the error occurred */ size_t getErrorLine () const ; + + /** Returns the error message */ const char_t* getErrorMessage () const; protected: @@ -516,42 +599,51 @@ public: virtual int unsetAllWords (); /** - * parses the source code + * Parses the source code. + * + * Awk::parse parses the source and optionally can write the parse tree. + * @return 0 on success, -1 on error */ virtual int parse (); /** - * executes the parse tree + * Executes the parse tree. + * + * Awk::run executes the parse tree created by Awk::parse. + * @param main name of an entry point + * @param args pointer to an array of character strings + * @param nargs number of characters strings in the array + * @return 0 on success, -1 on error */ virtual int run (const char_t* main = ASE_NULL, const char_t** args = ASE_NULL, size_t nargs = 0); /** - * defines the user-defined function + * Represents a user-defined function */ typedef int (Awk::*FunctionHandler) ( Return* ret, const Argument* args, size_t nargs, const char_t* name, size_t len); /** - * adds a new user-defined function + * Adds a new user-defined function */ virtual int addFunction ( const char_t* name, size_t minArgs, size_t maxArgs, FunctionHandler handler); /** - * deletes a user-defined function + * Deletes a user-defined function */ virtual int deleteFunction (const char_t* main); /** - * enables the run-time callback + * Enables the run-time callback */ virtual void enableRunCallback (); /** - * disables the run-time callback + * Disables the run-time callback */ virtual void disableRunCallback (); @@ -565,33 +657,68 @@ protected: * source code input and output. The awk interpreter calls the * following methods when the parse method is invoked. * - * To read the source code, the interpter calls Awk::openSource with - * an Awk::Source object whose mode is set to Awk::Source::READ. - * If Awk::openSource returns 1, it calls Awk::readSource with - * the Awk::Source object subsequently until it returns 0. Finally, - * it calls Awk::closeSource with the same Awk::Source object. - * If Awk::openSource returns 0, the interpreter calls Awk::closeSource - * immediately without calling Awk::readSource. If Awk::openSource - * returns -1, Awk::closeSource is not called. If readSource returns - * -1, the source code reading is aborted and Awk::closeSource is - * called. + * To read the source code, Awk::parse calls Awk::openSource, + * Awk::readSource, and Awk::closeSource as shown in the diagram below. + * Any failures wll cause Awk::parse to return an error. * - * \image html awk-extio.png + * \image html awk-srcio-read.png * - * The interpter is able to write back the internal parse tree - * if openSource returns 1 when the mode of the Source object - * is set to Awk::Source::WRITE. Then it calls writeSource until - * it has finished writing the parse tree, and calls closeSource. + * Awk::parse is able to write back the internal parse tree by + * calling Awk::openSource, Awk::writeSource, and Awk::closeSource + * as shown in the diagram below. Any failures will cause Awk::parse + * to return an error. * + * \image html awk-srcio-write.png + * + * Awk::parse passes an instance of Awk::Source when invoking these + * methods. You can determine the context of the method by calling + * Awk::Source::getMode and inspecting its return value. You may use + * Awk::Source::getHandle and Awk::Source::setHandle to store and + * retrieve the custom information needed to complete the operation. */ /*@{*/ - /** opens the source stream. */ - virtual int openSource (Source& io) = 0; - /** closes the source stream */ - virtual int closeSource (Source& io) = 0; - /** reads from the source stream */ + /** + * Opens the source code stream. + * A subclass should override this method. It should return 1 on + * success, -1 on failure, and 0 if the opening operation + * is successful but has reached the end of the stream. + * @param io I/O context passed from Awk::parse + * @see Awk::Source::getMode, Awk::Source::setHandle + */ + virtual int openSource (Source& io) = 0; + + /** + * Closes the source code stream. + * A subclass should override this method. It should return 0 on + * success and -1 on failure. + * @param io I/O context passed from Awk::parse + * @see Awk::Source::getMode, Awk::Source::getHandle + */ + virtual int closeSource (Source& io) = 0; + + /** + * Reads from the source code stream. + * A subclass should override this method. It should return 0 when + * it has reached the end of the stream and -1 on falure. + * When it has data to return, it should read characters not longer + * than len characters, fill the buffer pointed at by buf with them, + * and return the number of the charaters read. + * @param io I/O context passed from Awk::parse + * @param buf pointer to a character buffer + * @param len number of characters in the buffer + */ virtual ssize_t readSource (Source& io, char_t* buf, size_t len) = 0; - /** writes to the source stream */ + + /** + * Writes to the source code stream. + * A subclass should override this method. It should return 0 when + * it has reachedthe end of the stream and -1 on failure. + * It should write up to len characters from the buffer pointed at + * by buf and return the number of characters written. + * @param io I/O context passed from Awk::parse + * @param buf pointer to a character buffer + * @param len size of the buffer in characters + */ virtual ssize_t writeSource (Source& io, char_t* buf, size_t len) = 0; /*@}*/ diff --git a/ase/doc/doxyfile b/ase/doc/doxyfile new file mode 100644 index 00000000..cb808de0 --- /dev/null +++ b/ase/doc/doxyfile @@ -0,0 +1,244 @@ +# Doxyfile 1.4.6 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = ase +PROJECT_NUMBER = +OUTPUT_DIRECTORY = doxy +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = YES +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = ../.. +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +BUILTIN_STL_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = YES +HIDE_UNDOC_CLASSES = YES +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = NO +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = NO +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = ../../ase +FILE_PATTERNS = *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.hxx \ + *.hpp \ + *.h++ +RECURSIVE = YES +EXCLUDE = ../net \ + ../com \ + ../stx \ + ../test/net \ + ../test/com \ + ../test/stx +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = imgs +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = NO +REFERENCES_RELATION = NO +USE_HTAGS = NO +VERBATIM_HEADERS = NO +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = NO +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 1000 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/ase/doc/imgs/awk-extio.dia b/ase/doc/imgs/awk-srcio-read.dia similarity index 100% rename from ase/doc/imgs/awk-extio.dia rename to ase/doc/imgs/awk-srcio-read.dia diff --git a/ase/doc/imgs/awk-extio.png b/ase/doc/imgs/awk-srcio-read.png similarity index 100% rename from ase/doc/imgs/awk-extio.png rename to ase/doc/imgs/awk-srcio-read.png diff --git a/ase/doc/imgs/awk-srcio-write.dia b/ase/doc/imgs/awk-srcio-write.dia new file mode 100644 index 0000000000000000000000000000000000000000..a369a5f2b9053bb560be5fbe482ce9842805993e GIT binary patch literal 2011 zcmV<12PF6(iwFP!000003+-LYZreB%-RCO=7nqexi=wDU)ud>P7BfJB0VeIH8$-4j zTT@vwBsxwu^X)@D99yzpmP92fXrK*ZU){?~ljj^#m&*GO4;xRqCt>6U{`CX`c_I;i z891)Lx}N;_{`IXf`EYaf-f``B?B6Q1Hxj$TkK*61Cu>T#?`E_8eh<9I$fiLEJa-2o zGW*Z=JbT8BW|NyMNji1l*wl{S%igsq4c*0#63MqW&YS%J*nPwN)TM`!CZni<>G86i^Ju|8B6aRl= zlUYT~$Y0&O`KZ20o0PqA^i|f-${=)Ohbz}VkHh-LOFKdVhN38}Gq7oxvaagz&?lFN zTZ|jd8#i1yZa6oZZ-bDAwoA`LE`q=#wx33&;f{2V6D@6z4Y9hkdSr3uQW`Y0|IYTJ zHVLF}Kh3sFXYML=o%)HJv#9X0cOAN(KXB@<)cYeR@Aq!xE<94!de^6exqlqSeev5# z(EE6K&(V;2tE30VAei9G>0z~V9TGJRv%F1(r*&pFYwGo)UE7XH-zt!G62h||Ntn6+ zbfjr1`+_sXIq8L9@h@4@EWNK@uwSn2kVMNZco2 zah}ToC~%yDYM#7$#99+~wWigPw<*ZO6%zbg_c~?&g`22Rdm$-hxe4Pb5+`XID_Q!It>9!7f~q3UymU303+c z@M&4d_23ob`Sv-K_u92 zRJK$4vYi6C5?$=xQZxXe!hI>%J(YHAIhMoeTFwykCg|-s>22u+k)XGc=uJTYV@(nC zHY&ZL-rJOX=`D6|A&vVcC1+;K&n2V@W~*YhyE|DH%*LD9Zhw6K{N?smuo`bxLyXk~ zrHx8y>Hw5x0Fy7Nu>clgq{fyxQz!$SGr4unr`^6JOT##>+pyS|tel@Q=m>h_O>bX6 z{`Kw0KVJmBjX-ZIjsZ*-1UC@D-7=H^38Zh3WCEPF&^LT8Sb7E)WJ99e>gMD>(qMn}T9`RSTP4CK^#}G}O(>B5~U}|Ma z8Ja|Ae0=ysS~C>Nh>QkFJ)3m=lnwN=Ay#rN%&t}P*Fx>Qkgw393xTo#k%yIl))ykP z3OSYQYTzk|Y8{FQFz5)7aYxSCh-t*gvdn6V8oG7>n_tUqu^DBBvH~f7SEMj5K?<0^ zRv!r{^xh>+S&Rfs+BKIk6i#4(Fi)Uh zOO>=#2w@8vQyp+!aFu6OV%N$f*VyVZsFr4(ZydH-g|%F1y`&Xd;Ut=X)!!9Xq1;1x zK{S%|GJDt8Wwmd7rPncvYN0WtS7}=1g$qJ@35;lq5lRo~g`QJ-!QKZdj|FB1PoOwP zv5*3EHif(2Om3yVO7p5V(;E~RYqY`|-O{XIZeo*LpyLZh$5Rp143BEz;&I^-4s|<_ zFFc+^iFH(5`hv%}7uW!f2Q$_l1vlueg3WV*o&YuhY+d){djXp{G_ZY-tA0u#P3aG5 zT6}|F!(0K4#el$MLeDaQ78ePimtP5mn)1TKy7w4LH;6u9&naY-AXz(D0Kl#&>kP*T_eP6#CdNX^4g0Mcs&Bz=HF zhPX-+V!mYzMy!((K+@x4OC+|D1RT{4LIFoF8IJ192l`jGD*&3js|VsBScXaU09(Du zGDK68b8UM`UgcIeEFLLihUg%gzwXyblpq={0izXvFEP z*Ek>gNy6yaeme$whBZRE3F+229))^)aq6wb)2Vw`#Y26{Rk1PmmZGF*SxnAi%AqCExchcgHaOn tH5J~-Q?WZS#*L-25h*q&o^^8~{XO}U$v0QIzo~q4^*=&5nXGq#0017G%ufIS literal 0 HcmV?d00001 diff --git a/ase/doc/imgs/awk-srcio-write.png b/ase/doc/imgs/awk-srcio-write.png new file mode 100644 index 0000000000000000000000000000000000000000..704c5020a90d284d158243a50cc3e8bf7f6718c5 GIT binary patch literal 3247 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 GKmQHccaU`e literal 0 HcmV?d00001