merge
This commit is contained in:
		
						commit
						779c6b0148
					
				
							
								
								
									
										92
									
								
								Global.cpp
									
									
									
									
									
								
							
							
						
						
									
										92
									
								
								Global.cpp
									
									
									
									
									
								
							| @ -33,98 +33,6 @@ namespace jet { | |||||||
|       sessions.erase(sessionId); |       sessions.erase(sessionId); | ||||||
|    } |    } | ||||||
|           |           | ||||||
|    coreutils::MString Global::processModifier(coreutils::MString &value, coreutils::MString &modifier) { |  | ||||||
|       if(modifier == "") |  | ||||||
| 	return value; |  | ||||||
|       if(modifier == "tobinary") |  | ||||||
| 	return value.toBinary(); |  | ||||||
|       else if(modifier == "frombinary") |  | ||||||
| 	return value.fromBinary(); |  | ||||||
|       else if(modifier == "tohex") |  | ||||||
| 	return value.toHex(); |  | ||||||
|       else if(modifier == "fromhex") |  | ||||||
| 	return value.fromHex();       |  | ||||||
|       else if(modifier == "tobase64") |  | ||||||
| 	return value.toBase64(); |  | ||||||
|       else if(modifier == "frombase64") |  | ||||||
| 	return value.fromBase64(); |  | ||||||
|       else if(modifier == "toupper") |  | ||||||
| 	return value.toUpper(); |  | ||||||
|       else if(modifier == "tolower") |  | ||||||
| 	return value.toLower(); |  | ||||||
|       else if(modifier == "tocgi") |  | ||||||
| 	return value.toCGI(); |  | ||||||
|       else if(modifier == "fromcgi") |  | ||||||
| 	return value.fromCGI(); |  | ||||||
|       throw coreutils::Exception("modifier not valid."); |  | ||||||
|    } |  | ||||||
|     |  | ||||||
|    coreutils::MString Global::getVariable(coreutils::ZString &variable, |  | ||||||
| 					  std::map<coreutils::MString, coreutils::MString> &lvariables, |  | ||||||
| 					  std::map<coreutils::MString, coreutils::MString> &keywords) { |  | ||||||
|       if(variable.ifNext("$[")) { |  | ||||||
| 	 coreutils::MString name; |  | ||||||
| 	 coreutils::MString modifier; |  | ||||||
| 	 if(variable.ifNext("!")) { |  | ||||||
| 	    renderVariableName(variable, name, modifier, lvariables, keywords); |  | ||||||
| 	    return variables[name]; |  | ||||||
| 	 } else if(variable.ifNext("%")) { |  | ||||||
| 	    renderVariableName(variable, name, modifier, lvariables, keywords); |  | ||||||
| 	    return keywords[name]; |  | ||||||
| 	 } else if(variable.ifNext(":")) { |  | ||||||
| 	    renderVariableName(variable, name, modifier, lvariables, keywords); |  | ||||||
| 	    if(name.find(":") == -1) { |  | ||||||
| 	       name << ":0"; |  | ||||||
| 	    }	 |  | ||||||
| 	    return processModifier(cgiVariables[name], modifier); |  | ||||||
| 	 } if(variable.ifNext("@")) { |  | ||||||
| 	    // TODO: should only allow session variables. Allow substitution.
 |  | ||||||
| 	 } if(variable.ifNext("%")) { |  | ||||||
| 	    renderVariableName(variable, name, modifier, lvariables, keywords); |  | ||||||
| 	    return getenv(name.c_str()); |  | ||||||
| 	 } else { |  | ||||||
| 	    renderVariableName(variable, name, modifier, lvariables, keywords); |  | ||||||
| 	    name.split("."); |  | ||||||
| 	    if(name.getList().size() == 1) { |  | ||||||
| 	       if(variables.find(name[0]) == variables.end()) |  | ||||||
| 		 throw coreutils::Exception("global variable is not initialized."); |  | ||||||
| 	       return processModifier(variables[name[0]], modifier); |  | ||||||
| 	    }	     |  | ||||||
| 	    return getSessionVariable(name); |  | ||||||
| 	 } |  | ||||||
| 	 throw coreutils::Exception("expected variable name or type designator.");	  |  | ||||||
|       } if(variable.ifNext("#[")) { |  | ||||||
| 	 coreutils::MString name; |  | ||||||
| 	 coreutils::MString modifier; |  | ||||||
| 	 renderVariableName(variable, name, modifier, lvariables, keywords); |  | ||||||
| 	 if(lvariables.find(name) == lvariables.end()) |  | ||||||
| 	   throw coreutils::Exception("local variable is not initialized."); |  | ||||||
| 	 return lvariables[name];	  |  | ||||||
|       } |  | ||||||
|       throw coreutils::Exception("Expecting a variable initializer ('$[' or '#[')."); |  | ||||||
|    } |  | ||||||
| 
 |  | ||||||
|    void Global::renderVariableName(coreutils::ZString &variable, |  | ||||||
| 				   coreutils::MString &name, coreutils::MString &modifier, |  | ||||||
| 				   std::map<coreutils::MString, coreutils::MString> &lvariables, |  | ||||||
| 				   std::map<coreutils::MString, coreutils::MString> &keywords) { |  | ||||||
|       while(!variable.ifNext("]")) {	        |  | ||||||
| 	 name << variable.getTokenInclude("?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-"); |  | ||||||
| 	 if(variable.ifNext(";")) {	    |  | ||||||
| 	    renderVariableName(variable, modifier, modifier, lvariables, keywords); |  | ||||||
| 	    return; |  | ||||||
| 	 } else if(variable.ifNext(":")) { |  | ||||||
| 	    name << ":"; |  | ||||||
| 	 } else if(variable.startsWith("$[") || variable.startsWith("#[")) { |  | ||||||
| 	    name << getVariable(variable, lvariables, keywords); |  | ||||||
| 	 } else if(variable.ifNext("]")) |  | ||||||
| 	   return; |  | ||||||
| 	 else if(!variable.ifNextInclude("?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-"))  |  | ||||||
| 	   throw coreutils::Exception("invalid variable name.");	  |  | ||||||
|       }	     |  | ||||||
|       return; |  | ||||||
|    } |  | ||||||
|        |  | ||||||
|    __mysql * Global::getSession(coreutils::MString sessionId) { |    __mysql * Global::getSession(coreutils::MString sessionId) { | ||||||
|       if(sessions.find(sessionId) == sessions.end()) |       if(sessions.find(sessionId) == sessions.end()) | ||||||
| 	throw coreutils::Exception("requested session is not available."); | 	throw coreutils::Exception("requested session is not available."); | ||||||
|  | |||||||
							
								
								
									
										9
									
								
								Global.h
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								Global.h
									
									
									
									
									
								
							| @ -18,15 +18,6 @@ namespace  jet { | |||||||
|       bool sessionExists(coreutils::MString sessionId); |       bool sessionExists(coreutils::MString sessionId); | ||||||
|       void addSession(coreutils::MString sessionId, __mysql *mysql); |       void addSession(coreutils::MString sessionId, __mysql *mysql); | ||||||
|       void removeSession(coreutils::MString sessionId); |       void removeSession(coreutils::MString sessionId); | ||||||
|       coreutils::MString processModifier(coreutils::MString &value, coreutils::MString &modifier); |  | ||||||
|       coreutils::MString getVariable(coreutils::ZString &variable, |  | ||||||
| 				     std::map<coreutils::MString, coreutils::MString> &lvariables, |  | ||||||
| 				     std::map<coreutils::MString, coreutils::MString> &keywords); |  | ||||||
|       void renderVariableName(coreutils::ZString &variable, |  | ||||||
| 			      coreutils::MString &name, |  | ||||||
| 			      coreutils::MString &modifier, |  | ||||||
| 			      std::map<coreutils::MString, coreutils::MString> &lvariables, |  | ||||||
| 			      std::map<coreutils::MString, coreutils::MString> &keywords); |  | ||||||
|       __mysql * getSession(coreutils::MString sessionId); |       __mysql * getSession(coreutils::MString sessionId); | ||||||
|       coreutils::ZString getSessionVariable(coreutils::MString &splitName); |       coreutils::ZString getSessionVariable(coreutils::MString &splitName); | ||||||
|       void outputHeaders(); |       void outputHeaders(); | ||||||
|  | |||||||
							
								
								
									
										55
									
								
								JetCore.aux
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								JetCore.aux
									
									
									
									
									
								
							| @ -5,13 +5,15 @@ | |||||||
| \@writefile{toc}{\contentsline {chapter}{\numberline {2}Tags and Attributes}{7}{}\protected@file@percent } | \@writefile{toc}{\contentsline {chapter}{\numberline {2}Tags and Attributes}{7}{}\protected@file@percent } | ||||||
| \@writefile{lof}{\addvspace {10\p@ }} | \@writefile{lof}{\addvspace {10\p@ }} | ||||||
| \@writefile{lot}{\addvspace {10\p@ }} | \@writefile{lot}{\addvspace {10\p@ }} | ||||||
|  | \@writefile{toc}{\contentsline {section}{\numberline {2.1}User Defined Tags and Tag Liraries}{7}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {chapter}{\numberline {3}Variables and Variable Types}{9}{}\protected@file@percent } | \@writefile{toc}{\contentsline {chapter}{\numberline {3}Variables and Variable Types}{9}{}\protected@file@percent } | ||||||
| \@writefile{lof}{\addvspace {10\p@ }} | \@writefile{lof}{\addvspace {10\p@ }} | ||||||
| \@writefile{lot}{\addvspace {10\p@ }} | \@writefile{lot}{\addvspace {10\p@ }} | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {3.1}Global Variables}{9}{}\protected@file@percent } | \@writefile{toc}{\contentsline {section}{\numberline {3.1}Global Variables}{9}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {3.2}Local Variables}{9}{}\protected@file@percent } | \@writefile{toc}{\contentsline {section}{\numberline {3.2}Local Variables}{9}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {3.3}Environment Variables}{9}{}\protected@file@percent } | \@writefile{toc}{\contentsline {section}{\numberline {3.3}Keyword Variables}{10}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {3.4}CGI Variables}{9}{}\protected@file@percent } | \@writefile{toc}{\contentsline {section}{\numberline {3.4}Environment Variables}{10}{}\protected@file@percent } | ||||||
|  | \@writefile{toc}{\contentsline {section}{\numberline {3.5}CGI Variables}{10}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {chapter}{\numberline {4}Expressions}{11}{}\protected@file@percent } | \@writefile{toc}{\contentsline {chapter}{\numberline {4}Expressions}{11}{}\protected@file@percent } | ||||||
| \@writefile{lof}{\addvspace {10\p@ }} | \@writefile{lof}{\addvspace {10\p@ }} | ||||||
| \@writefile{lot}{\addvspace {10\p@ }} | \@writefile{lot}{\addvspace {10\p@ }} | ||||||
| @ -19,9 +21,12 @@ | |||||||
| \@writefile{toc}{\contentsline {subsection}{\numberline {4.1.1}Arithmentic Operators}{11}{}\protected@file@percent } | \@writefile{toc}{\contentsline {subsection}{\numberline {4.1.1}Arithmentic Operators}{11}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {subsection}{\numberline {4.1.2}Boolean Operators}{11}{}\protected@file@percent } | \@writefile{toc}{\contentsline {subsection}{\numberline {4.1.2}Boolean Operators}{11}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {4.2}Function Reference}{11}{}\protected@file@percent } | \@writefile{toc}{\contentsline {section}{\numberline {4.2}Function Reference}{11}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {subsection}{\numberline {4.2.1}left(string, number-of-characters)}{11}{}\protected@file@percent } | \@writefile{toc}{\contentsline {subsection}{\numberline {4.2.1}concat}{11}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {subsection}{\numberline {4.2.2}random()}{11}{}\protected@file@percent } | \@writefile{toc}{\contentsline {subsection}{\numberline {4.2.2}integer}{11}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {subsection}{\numberline {4.2.3}substring(string, start-position, number-of-characters}{11}{}\protected@file@percent } | \@writefile{toc}{\contentsline {subsection}{\numberline {4.2.3}left}{11}{}\protected@file@percent } | ||||||
|  | \@writefile{toc}{\contentsline {subsection}{\numberline {4.2.4}random}{11}{}\protected@file@percent } | ||||||
|  | \@writefile{toc}{\contentsline {subsection}{\numberline {4.2.5}round}{11}{}\protected@file@percent } | ||||||
|  | \@writefile{toc}{\contentsline {subsection}{\numberline {4.2.6}substring}{12}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {chapter}{\numberline {5}Common Gateway Interface Features}{13}{}\protected@file@percent } | \@writefile{toc}{\contentsline {chapter}{\numberline {5}Common Gateway Interface Features}{13}{}\protected@file@percent } | ||||||
| \@writefile{lof}{\addvspace {10\p@ }} | \@writefile{lof}{\addvspace {10\p@ }} | ||||||
| \@writefile{lot}{\addvspace {10\p@ }} | \@writefile{lot}{\addvspace {10\p@ }} | ||||||
| @ -30,21 +35,25 @@ | |||||||
| \@writefile{lot}{\addvspace {10\p@ }} | \@writefile{lot}{\addvspace {10\p@ }} | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {6.1}call}{15}{}\protected@file@percent } | \@writefile{toc}{\contentsline {section}{\numberline {6.1}call}{15}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {6.2}comment}{15}{}\protected@file@percent } | \@writefile{toc}{\contentsline {section}{\numberline {6.2}comment}{15}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {6.3}for}{15}{}\protected@file@percent } | \@writefile{toc}{\contentsline {section}{\numberline {6.3}cookie}{15}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {6.4}header}{15}{}\protected@file@percent } | \@writefile{toc}{\contentsline {section}{\numberline {6.4}dump}{16}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {6.5}if/else}{16}{}\protected@file@percent } | \@writefile{toc}{\contentsline {section}{\numberline {6.5}expr}{16}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {6.6}ifrow/else}{16}{}\protected@file@percent } | \@writefile{toc}{\contentsline {section}{\numberline {6.6}for}{16}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {6.7}jet}{16}{}\protected@file@percent } | \@writefile{toc}{\contentsline {section}{\numberline {6.7}header}{16}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {6.8}mysql}{16}{}\protected@file@percent } | \@writefile{toc}{\contentsline {section}{\numberline {6.8}if/else}{16}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {6.9}read}{16}{}\protected@file@percent } | \@writefile{toc}{\contentsline {section}{\numberline {6.9}ifrow/else}{16}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {6.10}set}{16}{}\protected@file@percent } | \@writefile{toc}{\contentsline {section}{\numberline {6.10}include}{17}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {6.11}sql}{16}{}\protected@file@percent } | \@writefile{toc}{\contentsline {section}{\numberline {6.11}jet}{17}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {6.12}stream}{16}{}\protected@file@percent } | \@writefile{toc}{\contentsline {section}{\numberline {6.12}mysql}{17}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {6.13}system}{17}{}\protected@file@percent } | \@writefile{toc}{\contentsline {section}{\numberline {6.13}read}{17}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {6.14}tag}{17}{}\protected@file@percent } | \@writefile{toc}{\contentsline {section}{\numberline {6.14}set}{17}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {6.15}until}{17}{}\protected@file@percent } | \@writefile{toc}{\contentsline {section}{\numberline {6.15}sql}{18}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {6.16}while}{17}{}\protected@file@percent } | \@writefile{toc}{\contentsline {section}{\numberline {6.16}stream}{18}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {6.17}whiledir}{17}{}\protected@file@percent } | \@writefile{toc}{\contentsline {section}{\numberline {6.17}system}{18}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {6.18}whilerow}{17}{}\protected@file@percent } | \@writefile{toc}{\contentsline {section}{\numberline {6.18}tag}{18}{}\protected@file@percent } | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {6.19}write}{18}{}\protected@file@percent } | \@writefile{toc}{\contentsline {section}{\numberline {6.19}until}{18}{}\protected@file@percent } | ||||||
| \gdef \@abspage@last{18} | \@writefile{toc}{\contentsline {section}{\numberline {6.20}while}{19}{}\protected@file@percent } | ||||||
|  | \@writefile{toc}{\contentsline {section}{\numberline {6.21}whiledir}{19}{}\protected@file@percent } | ||||||
|  | \@writefile{toc}{\contentsline {section}{\numberline {6.22}whilerow}{19}{}\protected@file@percent } | ||||||
|  | \@writefile{toc}{\contentsline {section}{\numberline {6.23}write}{19}{}\protected@file@percent } | ||||||
|  | \gdef \@abspage@last{19} | ||||||
|  | |||||||
							
								
								
									
										127
									
								
								JetCore.log
									
									
									
									
									
								
							
							
						
						
									
										127
									
								
								JetCore.log
									
									
									
									
									
								
							| @ -1,17 +1,122 @@ | |||||||
| This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/Debian) (preloaded format=pdfetex 2024.11.17)  24 NOV 2024 10:04 | This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/Debian) (preloaded format=pdflatex 2024.12.23)  6 JAN 2025 08:49 | ||||||
| entering extended mode | entering extended mode | ||||||
|  restricted \write18 enabled. |  restricted \write18 enabled. | ||||||
|  file:line:error style messages enabled. |  | ||||||
|  %&-line parsing enabled. |  %&-line parsing enabled. | ||||||
| **\input ./JetCore.txt | **JetCore.txt | ||||||
| (./JetCore.txt | (./JetCore.txt | ||||||
| ./JetCore.txt:1: Undefined control sequence. | LaTeX2e <2023-11-01> patch level 1 | ||||||
| l.1 \documentclass | L3 programming layer <2024-01-22> | ||||||
|                   {book} | (/usr/share/texlive/texmf-dist/tex/latex/base/book.cls | ||||||
| ?  | Document Class: book 2023/05/17 v1.4n Standard LaTeX document class | ||||||
| ./JetCore.txt:1: Emergency stop. | (/usr/share/texlive/texmf-dist/tex/latex/base/bk10.clo | ||||||
| l.1  | File: bk10.clo 2023/05/17 v1.4n Standard LaTeX file (size option) | ||||||
|  | ) | ||||||
|  | \c@part=\count187 | ||||||
|  | \c@chapter=\count188 | ||||||
|  | \c@section=\count189 | ||||||
|  | \c@subsection=\count190 | ||||||
|  | \c@subsubsection=\count191 | ||||||
|  | \c@paragraph=\count192 | ||||||
|  | \c@subparagraph=\count193 | ||||||
|  | \c@figure=\count194 | ||||||
|  | \c@table=\count195 | ||||||
|  | \abovecaptionskip=\skip48 | ||||||
|  | \belowcaptionskip=\skip49 | ||||||
|  | \bibindent=\dimen140 | ||||||
|  | ) | ||||||
|  | (/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def | ||||||
|  | File: l3backend-pdftex.def 2024-01-04 L3 backend support: PDF output (pdfTeX) | ||||||
|  | \l__color_backend_stack_int=\count196 | ||||||
|  | \l__pdf_internal_box=\box51 | ||||||
|  | ) | ||||||
|  | (./JetCore.aux) | ||||||
|  | \openout1 = `JetCore.aux'. | ||||||
| 
 | 
 | ||||||
| End of file on the terminal! | LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 7. | ||||||
|  | LaTeX Font Info:    ... okay on input line 7. | ||||||
|  | LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 7. | ||||||
|  | LaTeX Font Info:    ... okay on input line 7. | ||||||
|  | LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 7. | ||||||
|  | LaTeX Font Info:    ... okay on input line 7. | ||||||
|  | LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 7. | ||||||
|  | LaTeX Font Info:    ... okay on input line 7. | ||||||
|  | LaTeX Font Info:    Checking defaults for TS1/cmr/m/n on input line 7. | ||||||
|  | LaTeX Font Info:    ... okay on input line 7. | ||||||
|  | LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 7. | ||||||
|  | LaTeX Font Info:    ... okay on input line 7. | ||||||
|  | LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 7. | ||||||
|  | LaTeX Font Info:    ... okay on input line 7. | ||||||
|  | LaTeX Font Info:    External font `cmex10' loaded for size | ||||||
|  | (Font)              <12> on input line 9. | ||||||
|  | LaTeX Font Info:    External font `cmex10' loaded for size | ||||||
|  | (Font)              <8> on input line 9. | ||||||
|  | LaTeX Font Info:    External font `cmex10' loaded for size | ||||||
|  | (Font)              <6> on input line 9. | ||||||
|  |  [1 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | {/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] [2 | ||||||
|  | 
 | ||||||
|  | ] | ||||||
|  | (./JetCore.toc | ||||||
|  | LaTeX Font Info:    External font `cmex10' loaded for size | ||||||
|  | (Font)              <7> on input line 3. | ||||||
|  | LaTeX Font Info:    External font `cmex10' loaded for size | ||||||
|  | (Font)              <5> on input line 3. | ||||||
|  |  [3]) | ||||||
|  | \tf@toc=\write3 | ||||||
|  | \openout3 = `JetCore.toc'. | ||||||
|  | 
 | ||||||
|  |  [4] | ||||||
|  | Chapter 1. | ||||||
|  | [5 | ||||||
|  | 
 | ||||||
|  | ] [6 | ||||||
|  | 
 | ||||||
|  | ] | ||||||
|  | Chapter 2. | ||||||
|  | [7] [8 | ||||||
|  | 
 | ||||||
|  | ] | ||||||
|  | Chapter 3. | ||||||
|  | [9{/usr/share/texmf/fonts/enc/dvips/cm-super/cm-super-ts1.enc}] [10] | ||||||
|  | Chapter 4. | ||||||
|  | [11 | ||||||
|  | 
 | ||||||
|  | ] [12] | ||||||
|  | Chapter 5. | ||||||
|  | [13 | ||||||
|  | 
 | ||||||
|  | ] [14 | ||||||
|  | 
 | ||||||
|  | ] | ||||||
|  | Chapter 6. | ||||||
|  | [15] [16] [17] [18] [19] (./JetCore.aux) | ||||||
|  |  *********** | ||||||
|  | LaTeX2e <2023-11-01> patch level 1 | ||||||
|  | L3 programming layer <2024-01-22> | ||||||
|  |  *********** | ||||||
|  |  )  | ||||||
|  | Here is how much of TeX's memory you used: | ||||||
|  |  508 strings out of 474222 | ||||||
|  |  9280 string characters out of 5748732 | ||||||
|  |  1932975 words of memory out of 5000000 | ||||||
|  |  22826 multiletter control sequences out of 15000+600000 | ||||||
|  |  564392 words of font info for 57 fonts, out of 8000000 for 9000 | ||||||
|  |  1141 hyphenation exceptions out of 8191 | ||||||
|  |  35i,6n,50p,159b,189s stack positions out of 10000i,1000n,20000p,200000b,200000s | ||||||
|  | </usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb></us | ||||||
|  | r/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx12.pfb></usr/shar | ||||||
|  | e/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/share/texli | ||||||
|  | ve/texmf-dist/fonts/type1/public/amsfonts/cm/cmr12.pfb></usr/share/texlive/texm | ||||||
|  | f-dist/fonts/type1/public/amsfonts/cm/cmr17.pfb></usr/share/texlive/texmf-dist/ | ||||||
|  | fonts/type1/public/amsfonts/cm/cmsl10.pfb></usr/share/texlive/texmf-dist/fonts/ | ||||||
|  | type1/public/amsfonts/cm/cmtt10.pfb></usr/share/texmf/fonts/type1/public/cm-sup | ||||||
|  | er/sfrm1000.pfb> | ||||||
|  | Output written on JetCore.pdf (19 pages, 131622 bytes). | ||||||
|  | PDF statistics: | ||||||
|  |  107 PDF objects out of 1000 (max. 8388607) | ||||||
|  |  69 compressed objects within 1 object stream | ||||||
|  |  0 named destinations out of 1000 (max. 500000) | ||||||
|  |  1 words of extra memory for PDF output out of 10000 (max. 10000000) | ||||||
| 
 | 
 | ||||||
| ./JetCore.txt:1:  ==> Fatal error occurred, no output PDF file produced! |  | ||||||
|  | |||||||
							
								
								
									
										
											BIN
										
									
								
								JetCore.pdf
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								JetCore.pdf
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										53
									
								
								JetCore.toc
									
									
									
									
									
								
							
							
						
						
									
										53
									
								
								JetCore.toc
									
									
									
									
									
								
							| @ -1,36 +1,45 @@ | |||||||
| \contentsline {chapter}{\numberline {1}Introduction}{5}{}% | \contentsline {chapter}{\numberline {1}Introduction}{5}{}% | ||||||
| \contentsline {chapter}{\numberline {2}Tags and Attributes}{7}{}% | \contentsline {chapter}{\numberline {2}Tags and Attributes}{7}{}% | ||||||
|  | \contentsline {section}{\numberline {2.1}User Defined Tags and Tag Liraries}{7}{}% | ||||||
| \contentsline {chapter}{\numberline {3}Variables and Variable Types}{9}{}% | \contentsline {chapter}{\numberline {3}Variables and Variable Types}{9}{}% | ||||||
| \contentsline {section}{\numberline {3.1}Global Variables}{9}{}% | \contentsline {section}{\numberline {3.1}Global Variables}{9}{}% | ||||||
| \contentsline {section}{\numberline {3.2}Local Variables}{9}{}% | \contentsline {section}{\numberline {3.2}Local Variables}{9}{}% | ||||||
| \contentsline {section}{\numberline {3.3}Environment Variables}{9}{}% | \contentsline {section}{\numberline {3.3}Keyword Variables}{10}{}% | ||||||
| \contentsline {section}{\numberline {3.4}CGI Variables}{9}{}% | \contentsline {section}{\numberline {3.4}Environment Variables}{10}{}% | ||||||
|  | \contentsline {section}{\numberline {3.5}CGI Variables}{10}{}% | ||||||
| \contentsline {chapter}{\numberline {4}Expressions}{11}{}% | \contentsline {chapter}{\numberline {4}Expressions}{11}{}% | ||||||
| \contentsline {section}{\numberline {4.1}Operators}{11}{}% | \contentsline {section}{\numberline {4.1}Operators}{11}{}% | ||||||
| \contentsline {subsection}{\numberline {4.1.1}Arithmentic Operators}{11}{}% | \contentsline {subsection}{\numberline {4.1.1}Arithmentic Operators}{11}{}% | ||||||
| \contentsline {subsection}{\numberline {4.1.2}Boolean Operators}{11}{}% | \contentsline {subsection}{\numberline {4.1.2}Boolean Operators}{11}{}% | ||||||
| \contentsline {section}{\numberline {4.2}Function Reference}{11}{}% | \contentsline {section}{\numberline {4.2}Function Reference}{11}{}% | ||||||
| \contentsline {subsection}{\numberline {4.2.1}left(string, number-of-characters)}{11}{}% | \contentsline {subsection}{\numberline {4.2.1}concat}{11}{}% | ||||||
| \contentsline {subsection}{\numberline {4.2.2}random()}{11}{}% | \contentsline {subsection}{\numberline {4.2.2}integer}{11}{}% | ||||||
| \contentsline {subsection}{\numberline {4.2.3}substring(string, start-position, number-of-characters}{11}{}% | \contentsline {subsection}{\numberline {4.2.3}left}{11}{}% | ||||||
|  | \contentsline {subsection}{\numberline {4.2.4}random}{11}{}% | ||||||
|  | \contentsline {subsection}{\numberline {4.2.5}round}{11}{}% | ||||||
|  | \contentsline {subsection}{\numberline {4.2.6}substring}{12}{}% | ||||||
| \contentsline {chapter}{\numberline {5}Common Gateway Interface Features}{13}{}% | \contentsline {chapter}{\numberline {5}Common Gateway Interface Features}{13}{}% | ||||||
| \contentsline {chapter}{\numberline {6}Tag Reference}{15}{}% | \contentsline {chapter}{\numberline {6}Tag Reference}{15}{}% | ||||||
| \contentsline {section}{\numberline {6.1}call}{15}{}% | \contentsline {section}{\numberline {6.1}call}{15}{}% | ||||||
| \contentsline {section}{\numberline {6.2}comment}{15}{}% | \contentsline {section}{\numberline {6.2}comment}{15}{}% | ||||||
| \contentsline {section}{\numberline {6.3}for}{15}{}% | \contentsline {section}{\numberline {6.3}cookie}{15}{}% | ||||||
| \contentsline {section}{\numberline {6.4}header}{15}{}% | \contentsline {section}{\numberline {6.4}dump}{16}{}% | ||||||
| \contentsline {section}{\numberline {6.5}if/else}{16}{}% | \contentsline {section}{\numberline {6.5}expr}{16}{}% | ||||||
| \contentsline {section}{\numberline {6.6}ifrow/else}{16}{}% | \contentsline {section}{\numberline {6.6}for}{16}{}% | ||||||
| \contentsline {section}{\numberline {6.7}jet}{16}{}% | \contentsline {section}{\numberline {6.7}header}{16}{}% | ||||||
| \contentsline {section}{\numberline {6.8}mysql}{16}{}% | \contentsline {section}{\numberline {6.8}if/else}{16}{}% | ||||||
| \contentsline {section}{\numberline {6.9}read}{16}{}% | \contentsline {section}{\numberline {6.9}ifrow/else}{16}{}% | ||||||
| \contentsline {section}{\numberline {6.10}set}{16}{}% | \contentsline {section}{\numberline {6.10}include}{17}{}% | ||||||
| \contentsline {section}{\numberline {6.11}sql}{16}{}% | \contentsline {section}{\numberline {6.11}jet}{17}{}% | ||||||
| \contentsline {section}{\numberline {6.12}stream}{16}{}% | \contentsline {section}{\numberline {6.12}mysql}{17}{}% | ||||||
| \contentsline {section}{\numberline {6.13}system}{17}{}% | \contentsline {section}{\numberline {6.13}read}{17}{}% | ||||||
| \contentsline {section}{\numberline {6.14}tag}{17}{}% | \contentsline {section}{\numberline {6.14}set}{17}{}% | ||||||
| \contentsline {section}{\numberline {6.15}until}{17}{}% | \contentsline {section}{\numberline {6.15}sql}{18}{}% | ||||||
| \contentsline {section}{\numberline {6.16}while}{17}{}% | \contentsline {section}{\numberline {6.16}stream}{18}{}% | ||||||
| \contentsline {section}{\numberline {6.17}whiledir}{17}{}% | \contentsline {section}{\numberline {6.17}system}{18}{}% | ||||||
| \contentsline {section}{\numberline {6.18}whilerow}{17}{}% | \contentsline {section}{\numberline {6.18}tag}{18}{}% | ||||||
| \contentsline {section}{\numberline {6.19}write}{18}{}% | \contentsline {section}{\numberline {6.19}until}{18}{}% | ||||||
|  | \contentsline {section}{\numberline {6.20}while}{19}{}% | ||||||
|  | \contentsline {section}{\numberline {6.21}whiledir}{19}{}% | ||||||
|  | \contentsline {section}{\numberline {6.22}whilerow}{19}{}% | ||||||
|  | \contentsline {section}{\numberline {6.23}write}{19}{}% | ||||||
|  | |||||||
							
								
								
									
										26
									
								
								JetCore.txt
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								JetCore.txt
									
									
									
									
									
								
							| @ -1,4 +1,5 @@ | |||||||
| \documentclass{book} | \documentclass{book} | ||||||
|  | 
 | ||||||
| \title{JET Extension Tags} | \title{JET Extension Tags} | ||||||
| \author{Bradford Matthew Arant Sr.} | \author{Bradford Matthew Arant Sr.} | ||||||
| \date{\today} | \date{\today} | ||||||
| @ -28,8 +29,8 @@ to perform the desired function and affect the output. | |||||||
| Tag attributes are used to pass parameters into the operations and | Tag attributes are used to pass parameters into the operations and | ||||||
| functionality for each tag.  | functionality for each tag.  | ||||||
| 
 | 
 | ||||||
| Outputting a database from mysql may be performed using the <mysql> tag | Outputting a database from mysql may be performed using the \<mysql\> tag | ||||||
| in combination with the <ifrow>, <whilerow> and <sql> tags.   | in combination with the \<ifrow\>, \<whilerow\> and \<sql\> tags.   | ||||||
| 
 | 
 | ||||||
| \section{User Defined Tags and Tag Liraries} | \section{User Defined Tags and Tag Liraries} | ||||||
| 
 | 
 | ||||||
| @ -42,7 +43,7 @@ tag process as a local variable for that container. | |||||||
| 
 | 
 | ||||||
| Tag definitions can also be defined as scoped or unscoped, as follows: | Tag definitions can also be defined as scoped or unscoped, as follows: | ||||||
| 
 | 
 | ||||||
| scoped - local variables using the #[n] format can be scoped to just | scoped - local variables using the \#[n] format can be scoped to just | ||||||
| your tag contents. Access to local variables where your tag is being | your tag contents. Access to local variables where your tag is being | ||||||
| used must use the 'parent' scope option to retrieve variables from the | used must use the 'parent' scope option to retrieve variables from the | ||||||
| parent. | parent. | ||||||
| @ -81,6 +82,9 @@ specifying the scope of global. | |||||||
| 
 | 
 | ||||||
| \item Local -  | \item Local -  | ||||||
| 
 | 
 | ||||||
|  | \item Keyword - within a tag's container we may access the keyword | ||||||
|  | values specified on the containing tag. | ||||||
|  | 
 | ||||||
| \end{itemize} | \end{itemize} | ||||||
| 
 | 
 | ||||||
| \section{Global Variables} | \section{Global Variables} | ||||||
| @ -88,11 +92,27 @@ specifying the scope of global. | |||||||
| Global variables are available to all logic once the values have been | Global variables are available to all logic once the values have been | ||||||
| set. | set. | ||||||
| 
 | 
 | ||||||
|  | Global variables are accessed throughout the procedure with the | ||||||
|  | \$[name] syntax. | ||||||
|  | 
 | ||||||
| Global is the default if the scope is | Global is the default if the scope is | ||||||
| not specified for any function that writes to a variable. | not specified for any function that writes to a variable. | ||||||
| 
 | 
 | ||||||
| \section{Local Variables} | \section{Local Variables} | ||||||
| 
 | 
 | ||||||
|  | Local variables are established using the set tag and specifying a | ||||||
|  | scope of local. Local variables are typically only available within | ||||||
|  | the container where they are defined. Some containers may not be | ||||||
|  | capable of storing local variables (i.e. set tag) and are inheriting | ||||||
|  | the local scope from their parent tag. | ||||||
|  | 
 | ||||||
|  | \section{Keyword Variables} | ||||||
|  | 
 | ||||||
|  | Keyword variables are set when they are specified on a containing tag. | ||||||
|  | Within the container you can access the variable using the syntax | ||||||
|  | \$[\%name].  | ||||||
|  | 
 | ||||||
|  | The variable retrieved is not processed for variable resolution.  | ||||||
| 
 | 
 | ||||||
| \section{Environment Variables} | \section{Environment Variables} | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,22 +0,0 @@ | |||||||
| #include "KeywordValue.h" |  | ||||||
| #include <iostream> |  | ||||||
| 
 |  | ||||||
| namespace jet { |  | ||||||
| 
 |  | ||||||
|    KeywordValue::KeywordValue(coreutils::ZString data, |  | ||||||
| 			      Global &global, |  | ||||||
| 			      std::map<coreutils::MString, coreutils::MString> &variables, |  | ||||||
| 			      std::map<coreutils::MString, coreutils::MString> &keywords) : MString() { |  | ||||||
|       while(!data.eod()) { |  | ||||||
| 	 if(data.startsWith("$[") || data.startsWith("#[")) { |  | ||||||
| 	    write(global.getVariable(data, variables, keywords)); |  | ||||||
| 	 } else { |  | ||||||
| 	    write(data.charAt(0)); |  | ||||||
| 	    data.nextChar(); |  | ||||||
| 	 }	  |  | ||||||
|       } |  | ||||||
|    } |  | ||||||
| 
 |  | ||||||
|    KeywordValue::~KeywordValue() {} |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,24 +0,0 @@ | |||||||
| #ifndef __KeywordValue_h__ |  | ||||||
| #define __KeywordValue_h__ |  | ||||||
| 
 |  | ||||||
| #include "MString.h" |  | ||||||
| #include "Global.h" |  | ||||||
| 
 |  | ||||||
| namespace  jet { |  | ||||||
| 
 |  | ||||||
|    ///
 |  | ||||||
|    /// KeywordValue will read the data ZString and convert any variable references.
 |  | ||||||
|    ///
 |  | ||||||
|     |  | ||||||
|    class KeywordValue : public coreutils::MString { |  | ||||||
| 
 |  | ||||||
|     public: |  | ||||||
|       KeywordValue(coreutils::ZString data, Global &global, |  | ||||||
| 		   std::map<coreutils::MString, coreutils::MString> &variables, |  | ||||||
| 		   std::map<coreutils::MString, coreutils::MString> &keywords); |  | ||||||
|       virtual ~KeywordValue(); |  | ||||||
|    }; |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #endif |  | ||||||
							
								
								
									
										58
									
								
								Operand.cpp
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								Operand.cpp
									
									
									
									
									
								
							| @ -6,24 +6,21 @@ | |||||||
| 
 | 
 | ||||||
| namespace jet { | namespace jet { | ||||||
| 
 | 
 | ||||||
|    Operand::Operand(coreutils::ZString &in, |    Operand::Operand(coreutils::ZString &in, Tag &tag) { | ||||||
| 		    Global &global, |  | ||||||
| 		    std::map<coreutils::MString, coreutils::MString> &lvariables, |  | ||||||
| 		    std::map<coreutils::MString, coreutils::MString> &keywords) { |  | ||||||
| 
 | 
 | ||||||
|       doubleValue = 0; |       doubleValue = 0; | ||||||
|        |        | ||||||
|       in.skipWhitespace(); |       in.skipWhitespace(); | ||||||
| 
 | 
 | ||||||
|       if(in.startsWith("$[") || in.startsWith("#[")) { |       if(in.startsWith("$[") || in.startsWith("#[")) { | ||||||
| 	 string = global.getVariable(in, lvariables, keywords); | 	 string = tag.getVariable(in); | ||||||
| 	 doubleValue = string.asDouble(); | 	 doubleValue = string.asDouble(); | ||||||
| 	 isNumber = string.eod(); | 	 isNumber = string.eod(); | ||||||
| 	 string.reset(); | 	 string.reset(); | ||||||
| 	 if((string == "false") || (string == "true")) | 	 if((string == "false") || (string == "true")) | ||||||
| 	   boolean = true;	  | 	   boolean = true;	  | ||||||
|       } else if(in.ifNext("(")) { |       } else if(in.ifNext("(")) { | ||||||
| 	 Operand op(in, global, lvariables, keywords); | 	 Operand op(in, tag); | ||||||
| 	 string = op.string; | 	 string = op.string; | ||||||
| 	 doubleValue = op.doubleValue; | 	 doubleValue = op.doubleValue; | ||||||
| 	 if(!in.ifNext(")"))  | 	 if(!in.ifNext(")"))  | ||||||
| @ -31,15 +28,15 @@ namespace jet { | |||||||
|       } else if(in.ifNextIgnoreCase("SUBSTRING")) { |       } else if(in.ifNextIgnoreCase("SUBSTRING")) { | ||||||
| 	 if(!in.ifNext("(")) | 	 if(!in.ifNext("(")) | ||||||
| 	   throw coreutils::Exception("Expecting ( for SUBSTRING parameters."); | 	   throw coreutils::Exception("Expecting ( for SUBSTRING parameters."); | ||||||
| 	 Operand parm1(in, global, lvariables, keywords); | 	 Operand parm1(in, tag); | ||||||
| 	 if(!in.ifNext(",")) | 	 if(!in.ifNext(",")) | ||||||
| 	   throw coreutils::Exception("Expecting , in SUBSTRING expression."); | 	   throw coreutils::Exception("Expecting , in SUBSTRING expression."); | ||||||
| 	 Operand parm2(in, global, lvariables, keywords); | 	 Operand parm2(in, tag); | ||||||
| 	 if(in.ifNext(")")) { | 	 if(in.ifNext(")")) { | ||||||
| 	    string = parm1.string.substring(parm2.string.asInteger()); | 	    string = parm1.string.substring(parm2.string.asInteger()); | ||||||
| 	 } else if(!in.ifNext(",")) | 	 } else if(!in.ifNext(",")) | ||||||
| 	   throw coreutils::Exception("Expecting , in SUBSTRING expression."); | 	   throw coreutils::Exception("Expecting , in SUBSTRING expression."); | ||||||
| 	 Operand parm3(in, global, lvariables, keywords); | 	 Operand parm3(in, tag); | ||||||
| 	 if(in.ifNext(")")) { | 	 if(in.ifNext(")")) { | ||||||
| 	    string = parm1.string.substring(parm2.string.asInteger(), parm3.string.asInteger()); | 	    string = parm1.string.substring(parm2.string.asInteger(), parm3.string.asInteger()); | ||||||
| 	 } else | 	 } else | ||||||
| @ -47,10 +44,10 @@ namespace jet { | |||||||
|       } else if(in.ifNextIgnoreCase("LEFT")) { |       } else if(in.ifNextIgnoreCase("LEFT")) { | ||||||
| 	 if(!in.ifNext("(")) | 	 if(!in.ifNext("(")) | ||||||
| 	   throw coreutils::Exception("Expecting ( for LEFT parameters."); | 	   throw coreutils::Exception("Expecting ( for LEFT parameters."); | ||||||
| 	 Operand parm1(in, global, lvariables, keywords); | 	 Operand parm1(in, tag); | ||||||
| 	 if(!in.ifNext(",")) | 	 if(!in.ifNext(",")) | ||||||
| 	   throw coreutils::Exception("Expecting , in LEFT expression."); | 	   throw coreutils::Exception("Expecting , in LEFT expression."); | ||||||
| 	 Operand parm2(in, global, lvariables, keywords); | 	 Operand parm2(in, tag); | ||||||
| 	 if(in.ifNext(")")) { | 	 if(in.ifNext(")")) { | ||||||
| 	    string = parm1.string.substring(0, parm2.string.asInteger()); | 	    string = parm1.string.substring(0, parm2.string.asInteger()); | ||||||
| 	 } else | 	 } else | ||||||
| @ -58,16 +55,29 @@ namespace jet { | |||||||
|       } else if(in.ifNextIgnoreCase("EXPR")) { |       } else if(in.ifNextIgnoreCase("EXPR")) { | ||||||
| 	 if(!in.ifNext("(")) | 	 if(!in.ifNext("(")) | ||||||
| 	   throw coreutils::Exception("Expecting ( for EXPR parameters."); | 	   throw coreutils::Exception("Expecting ( for EXPR parameters."); | ||||||
| 	 Operand parm1(in, global, lvariables, keywords); | 	 Operand parm1(in, tag); | ||||||
| 	 if(in.ifNext(")")) { | 	 if(in.ifNext(")")) { | ||||||
| 	    Operand op(parm1.string, global, lvariables, keywords); | 	    Operand op(parm1.string, tag); | ||||||
| 	    string = op.string; | 	    string = op.string; | ||||||
| 	    isNumber = op.isNumber; | 	    isNumber = op.isNumber; | ||||||
| 	    boolean = op.boolean;	     | 	    boolean = op.boolean;	     | ||||||
| 	 } else | 	 } else | ||||||
| 	   throw coreutils::Exception("Expecting ) at end of EXPR expression.");	 	  | 	   throw coreutils::Exception("Expecting ) at end of EXPR expression.");	 	  | ||||||
|       } else if(in.ifNextIgnoreCase("RIGHT")) { |       } else if(in.ifNextIgnoreCase("RIGHT")) { | ||||||
| 	  | 	 if(!in.ifNext("(")) | ||||||
|  | 	   throw coreutils::Exception("Expecting ( for RIGHT parameters."); | ||||||
|  | 	 Operand parm1(in, tag); | ||||||
|  | 	 if(!in.ifNext(",")) | ||||||
|  | 	   throw coreutils::Exception("Expecting , in RIGHT expression."); | ||||||
|  | 	 Operand parm2(in, tag); | ||||||
|  | 	 if(in.ifNext(")")) { | ||||||
|  | 	    int len = parm1.string.getLength(); | ||||||
|  | 	    int start = len - parm2.string.asInteger(); | ||||||
|  | 	    std::cout << "len: " << len << "; start: " << start << ";" << std::endl; | ||||||
|  | 	    string = parm1.string.substring(0, parm2.string.asInteger()); | ||||||
|  | 	    std::cout << "string: " << string << std::endl; | ||||||
|  | 	 } else | ||||||
|  | 	   throw coreutils::Exception("Expecting ) at end of RIGHT expression.");	 	  | ||||||
|       } else if(in.ifNextIgnoreCase("TRIM")) { |       } else if(in.ifNextIgnoreCase("TRIM")) { | ||||||
| 	  | 	  | ||||||
|       } else if(in.ifNextIgnoreCase("TOUPPER")) { |       } else if(in.ifNextIgnoreCase("TOUPPER")) { | ||||||
| @ -108,7 +118,7 @@ namespace jet { | |||||||
|       in.skipWhitespace(); |       in.skipWhitespace(); | ||||||
|        |        | ||||||
|       if(in.ifNext("!=") || in.ifNext("<>")) { |       if(in.ifNext("!=") || in.ifNext("<>")) { | ||||||
| 	 Operand op(in, global, lvariables, keywords); | 	 Operand op(in, tag); | ||||||
| 	 if(isNumber && op.isNumber) { | 	 if(isNumber && op.isNumber) { | ||||||
| 	    if(doubleValue != op.doubleValue) { | 	    if(doubleValue != op.doubleValue) { | ||||||
| 	       boolean = true; | 	       boolean = true; | ||||||
| @ -132,7 +142,7 @@ namespace jet { | |||||||
| 	 }	    | 	 }	    | ||||||
|       }       |       }       | ||||||
|       if(in.ifNext("<=")) { |       if(in.ifNext("<=")) { | ||||||
| 	 Operand op(in, global, lvariables, keywords); | 	 Operand op(in, tag); | ||||||
| 	 if(isNumber && op.isNumber) { | 	 if(isNumber && op.isNumber) { | ||||||
| 	    if(doubleValue <= op.doubleValue) { | 	    if(doubleValue <= op.doubleValue) { | ||||||
| 	       boolean = true; | 	       boolean = true; | ||||||
| @ -156,7 +166,7 @@ namespace jet { | |||||||
| 	 }	    | 	 }	    | ||||||
|       }             |       }             | ||||||
|       if(in.ifNext(">=")) { |       if(in.ifNext(">=")) { | ||||||
| 	 Operand op(in, global, lvariables, keywords); | 	 Operand op(in, tag); | ||||||
| 	 if(isNumber && op.isNumber) { | 	 if(isNumber && op.isNumber) { | ||||||
| 	    if(doubleValue >= op.doubleValue) { | 	    if(doubleValue >= op.doubleValue) { | ||||||
| 	       boolean = true; | 	       boolean = true; | ||||||
| @ -180,7 +190,7 @@ namespace jet { | |||||||
| 	 }	    | 	 }	    | ||||||
|       }       |       }       | ||||||
|       if(in.ifNext("=")) { |       if(in.ifNext("=")) { | ||||||
| 	 Operand op(in, global, lvariables, keywords); | 	 Operand op(in, tag); | ||||||
| 	 if(isNumber && op.isNumber) { | 	 if(isNumber && op.isNumber) { | ||||||
| 	    if(doubleValue == op.doubleValue) { | 	    if(doubleValue == op.doubleValue) { | ||||||
| 	       boolean = true; | 	       boolean = true; | ||||||
| @ -204,7 +214,7 @@ namespace jet { | |||||||
| 	 }	    | 	 }	    | ||||||
|       }       |       }       | ||||||
|       if(in.ifNext("<")) { |       if(in.ifNext("<")) { | ||||||
| 	 Operand op(in, global, lvariables, keywords); | 	 Operand op(in, tag); | ||||||
| 	 if(isNumber && op.isNumber) { | 	 if(isNumber && op.isNumber) { | ||||||
| 	    if(doubleValue < op.doubleValue) { | 	    if(doubleValue < op.doubleValue) { | ||||||
| 	       boolean = true; | 	       boolean = true; | ||||||
| @ -228,7 +238,7 @@ namespace jet { | |||||||
| 	 }	    | 	 }	    | ||||||
|       }       |       }       | ||||||
|       if(in.ifNext(">")) { |       if(in.ifNext(">")) { | ||||||
| 	 Operand op(in, global, lvariables, keywords); | 	 Operand op(in, tag); | ||||||
| 	 if(isNumber && op.isNumber) { | 	 if(isNumber && op.isNumber) { | ||||||
| 	    if(doubleValue > op.doubleValue) { | 	    if(doubleValue > op.doubleValue) { | ||||||
| 	       boolean = true; | 	       boolean = true; | ||||||
| @ -253,7 +263,7 @@ namespace jet { | |||||||
|       } |       } | ||||||
|       if(in.ifNext("+")) { |       if(in.ifNext("+")) { | ||||||
| 	 if(isNumber) {	       | 	 if(isNumber) {	       | ||||||
| 	    Operand op(in, global, lvariables, keywords); | 	    Operand op(in, tag); | ||||||
| 	    if(op.isNumber) { | 	    if(op.isNumber) { | ||||||
| 	       doubleValue += op.doubleValue; | 	       doubleValue += op.doubleValue; | ||||||
| 	       string = std::format("{:.12f}", doubleValue);	        | 	       string = std::format("{:.12f}", doubleValue);	        | ||||||
| @ -264,7 +274,7 @@ namespace jet { | |||||||
| 	   throw coreutils::Exception("operand is not a number.");	  | 	   throw coreutils::Exception("operand is not a number.");	  | ||||||
|       } else if(in.ifNext("-")) { |       } else if(in.ifNext("-")) { | ||||||
| 	 if(isNumber) {	       | 	 if(isNumber) {	       | ||||||
| 	    Operand op(in, global, lvariables, keywords); | 	    Operand op(in, tag); | ||||||
| 	    if(op.isNumber) { | 	    if(op.isNumber) { | ||||||
| 	       doubleValue -= op.doubleValue; | 	       doubleValue -= op.doubleValue; | ||||||
| 	       string = std::format("{:.12f}", doubleValue);	        | 	       string = std::format("{:.12f}", doubleValue);	        | ||||||
| @ -275,7 +285,7 @@ namespace jet { | |||||||
| 	   throw coreutils::Exception("operand is not a number.");	  | 	   throw coreutils::Exception("operand is not a number.");	  | ||||||
|       } else if(in.ifNext("*")) { |       } else if(in.ifNext("*")) { | ||||||
| 	 if(isNumber) {	       | 	 if(isNumber) {	       | ||||||
| 	    Operand op(in, global, lvariables, keywords); | 	    Operand op(in, tag); | ||||||
| 	    if(op.isNumber) { | 	    if(op.isNumber) { | ||||||
| 	       doubleValue *= op.doubleValue; | 	       doubleValue *= op.doubleValue; | ||||||
| 	       string = std::format("{:.12f}", doubleValue);	        | 	       string = std::format("{:.12f}", doubleValue);	        | ||||||
| @ -286,7 +296,7 @@ namespace jet { | |||||||
| 	   throw coreutils::Exception("operand is not a number.");	  | 	   throw coreutils::Exception("operand is not a number.");	  | ||||||
|       } else if(in.ifNext("/")) { |       } else if(in.ifNext("/")) { | ||||||
| 	 if(isNumber) {	       | 	 if(isNumber) {	       | ||||||
| 	    Operand op(in, global, lvariables, keywords); | 	    Operand op(in, tag); | ||||||
| 	    if(op.isNumber) { | 	    if(op.isNumber) { | ||||||
| 	       doubleValue /= op.doubleValue; | 	       doubleValue /= op.doubleValue; | ||||||
| 	       string = std::format("{:.12f}", doubleValue);	        | 	       string = std::format("{:.12f}", doubleValue);	        | ||||||
|  | |||||||
| @ -2,6 +2,7 @@ | |||||||
| #define __Operand_h__ | #define __Operand_h__ | ||||||
| 
 | 
 | ||||||
| #include "MString.h" | #include "MString.h" | ||||||
|  | #include "Tag.h" | ||||||
| #include "Global.h" | #include "Global.h" | ||||||
| 
 | 
 | ||||||
| namespace jet { | namespace jet { | ||||||
| @ -9,10 +10,7 @@ namespace jet { | |||||||
|    class Operand { |    class Operand { | ||||||
| 
 | 
 | ||||||
|     public: |     public: | ||||||
|       Operand(coreutils::ZString &in, |       Operand(coreutils::ZString &in, Tag &tag); | ||||||
| 	      Global &global, |  | ||||||
| 	      std::map<coreutils::MString, coreutils::MString> &lvariables, |  | ||||||
| 	      std::map<coreutils::MString, coreutils::MString> &keywords); |  | ||||||
| 
 | 
 | ||||||
|       bool isNumber; |       bool isNumber; | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										13
									
								
								TODO.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								TODO.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | 
 | ||||||
|  | 1) Allow keyword variables to be resolved with a ';resolve' modifier. | ||||||
|  | 2) Only allow stream tag in CGI mode. | ||||||
|  | 3) Create a method to upload a file directly to a file name to bypass | ||||||
|  | buffering on large files. | ||||||
|  | 4) Allow the cookie tag only if CGI mode selected. | ||||||
|  | 5) Call tag is acting wierd. Look at testcall.jet. | ||||||
|  | 6) Create a tag for uploading of URL data to a specific file instead | ||||||
|  | of buffering in an internal variable. Use <upload />. See testcgi.jet | ||||||
|  | 7) For CGI image and other mime type fields you should be able to get | ||||||
|  | file name and content length from variable. $[data(filename)] and | ||||||
|  | $[data(length)] possibly. | ||||||
|  | 8)  | ||||||
							
								
								
									
										154
									
								
								Tag.cpp
									
									
									
									
									
								
							
							
						
						
									
										154
									
								
								Tag.cpp
									
									
									
									
									
								
							| @ -1,6 +1,5 @@ | |||||||
| #include "Tag.h" | #include "Tag.h" | ||||||
| #include "Exception.h" | #include "Exception.h" | ||||||
| #include "KeywordValue.h" |  | ||||||
| #include "Global.h" | #include "Global.h" | ||||||
| #include "__mysql.h" | #include "__mysql.h" | ||||||
| #include "__sql.h" | #include "__sql.h" | ||||||
| @ -25,6 +24,7 @@ | |||||||
| #include "__dotag.h" | #include "__dotag.h" | ||||||
| #include "__stream.h" | #include "__stream.h" | ||||||
| #include "__dump.h" | #include "__dump.h" | ||||||
|  | #include "Operand.h" | ||||||
| #include <iostream> | #include <iostream> | ||||||
| 
 | 
 | ||||||
| namespace jet { | namespace jet { | ||||||
| @ -110,8 +110,19 @@ namespace jet { | |||||||
| 	copyContainer(container, parentOut); | 	copyContainer(container, parentOut); | ||||||
|    } |    } | ||||||
|     |     | ||||||
|    void Tag::resolveKeyword(coreutils::ZString keyword) { |    coreutils::MString Tag::resolveKeyword(coreutils::ZString keyword) { | ||||||
|       keywords[keyword] = KeywordValue(keywords[keyword], global, parent->local->variables, parent->keywords);       |       coreutils::MString resolved; | ||||||
|  |       keywords[keyword].reset(); | ||||||
|  |       while(!keywords[keyword].eod()) { | ||||||
|  | 	 if(keywords[keyword].startsWith("$[") || keywords[keyword].startsWith("#[")) { | ||||||
|  | 	    resolved.write(getVariable(keywords[keyword])); | ||||||
|  | 	 } else { | ||||||
|  | 	    resolved.write(keywords[keyword].charAt(0)); | ||||||
|  | 	    keywords[keyword].nextChar(); | ||||||
|  | 	 }	  | ||||||
|  |       } | ||||||
|  |       keywords[keyword].reset(); | ||||||
|  |       return resolved; | ||||||
|    }    |    }    | ||||||
| 
 | 
 | ||||||
|    void Tag::processContainer(coreutils::ZString &container) { |    void Tag::processContainer(coreutils::ZString &container) { | ||||||
| @ -206,7 +217,7 @@ namespace jet { | |||||||
| 	    }   | 	    }   | ||||||
| 	 } else if(in.startsWith("$[") || in.startsWith("#[")) { | 	 } else if(in.startsWith("$[") || in.startsWith("#[")) { | ||||||
| 	    global.errorCursor = in.getCursor(); | 	    global.errorCursor = in.getCursor(); | ||||||
| 	    out.write(global.getVariable(in, local->variables, keywords)); | 	    out.write(getVariable(in, true)); | ||||||
| 	 } else { | 	 } else { | ||||||
| 	    out.write(in.nextChar()); | 	    out.write(in.nextChar()); | ||||||
| 	 }	  | 	 }	  | ||||||
| @ -366,4 +377,139 @@ namespace jet { | |||||||
|       } |       } | ||||||
|       return false; |       return false; | ||||||
|    } |    } | ||||||
|  | 
 | ||||||
|  |    coreutils::MString Tag::getVariable(coreutils::ZString &variable, bool inContainer) { | ||||||
|  |       if(variable.ifNext("$[")) { | ||||||
|  | 	 coreutils::MString name; | ||||||
|  | 	 coreutils::MString modifier; | ||||||
|  | 	 if(variable.ifNext("!")) { | ||||||
|  | 	    renderVariableName(variable, name, modifier); | ||||||
|  | 	    return global.variables[name]; | ||||||
|  | 	 } else if(variable.ifNext("%")) { | ||||||
|  | 	    renderVariableName(variable, name, modifier); | ||||||
|  | 	    if(inContainer) | ||||||
|  | 	      return keywords[name]; | ||||||
|  | 	    else | ||||||
|  | 	      return parent->keywords[name]; | ||||||
|  | 	 } else if(variable.ifNext(":")) { | ||||||
|  | 	    renderVariableName(variable, name, modifier); | ||||||
|  | 	    if(name.find(":") == -1) { | ||||||
|  | 	       name << ":0"; | ||||||
|  | 	    } | ||||||
|  | 	    return processModifier(global.cgiVariables[name], modifier); | ||||||
|  | 	 } else	if(variable.ifNext("@")) { | ||||||
|  | 	    // TODO: should only allow session variables. Allow substitution.
 | ||||||
|  | 	 } else if(variable.ifNext("%")) { | ||||||
|  | 	    renderVariableName(variable, name, modifier); | ||||||
|  | 	    return getenv(name.c_str()); | ||||||
|  | 	 } else { | ||||||
|  | 	    renderVariableName(variable, name, modifier); | ||||||
|  | 	    name.split("."); | ||||||
|  | 	    if(name.getList().size() == 1) { | ||||||
|  | 	       if(global.variables.find(name[0]) == global.variables.end()) | ||||||
|  | 		 throw coreutils::Exception("global variable is not initialized."); | ||||||
|  | 	       return processModifier(global.variables[name[0]], modifier); | ||||||
|  | 	    } | ||||||
|  | 	    return global.getSessionVariable(name); | ||||||
|  | 	 } | ||||||
|  | 	 throw coreutils::Exception("expected variable name or type designator."); | ||||||
|  |       } else if(variable.ifNext("#[")) { | ||||||
|  | 	 coreutils::MString name; | ||||||
|  | 	 coreutils::MString modifier; | ||||||
|  | 	 renderVariableName(variable, name, modifier); | ||||||
|  | 	 if(local->variables.find(name) == local->variables.end()) | ||||||
|  | 	   throw coreutils::Exception("local variable is not initialized."); | ||||||
|  | 	 return local->variables[name]; | ||||||
|  |       } | ||||||
|  |       throw coreutils::Exception("Expecting a variable initializer ('$[' or '#[')."); | ||||||
|  |    } | ||||||
|  | 
 | ||||||
|  |    void Tag::renderVariableName(coreutils::ZString &variable, coreutils::MString &name, coreutils::MString &modifier) { | ||||||
|  |       while(!variable.ifNext("]")) { | ||||||
|  | 	 name << variable.getTokenInclude("?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-"); | ||||||
|  | 	 if(variable.ifNext(";")) { | ||||||
|  | 	    renderVariableName(variable, modifier, modifier); | ||||||
|  | 	    return; | ||||||
|  | 	 } else if(variable.ifNext(":")) { | ||||||
|  | 	    name << ":"; | ||||||
|  | 	 } else if(variable.startsWith("$[") || variable.startsWith("#[")) { | ||||||
|  | 	    name << getVariable(variable); | ||||||
|  | 	 } else if(variable.ifNext("]")) | ||||||
|  | 	      return; | ||||||
|  | 	 else if(!variable.ifNextInclude("?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-")) | ||||||
|  | 	   throw coreutils::Exception("invalid variable name."); | ||||||
|  |       }       | ||||||
|  |       return; | ||||||
|  |    } | ||||||
|  | 
 | ||||||
|  |    void Tag::storeVariable(coreutils::ZString variable, coreutils::MString value, coreutils::ZString scope) { | ||||||
|  |       if((scope == "global") || (scope == "")) | ||||||
|  | 	global.variables[variable] = value; | ||||||
|  |       else if(scope == "local") | ||||||
|  | 	local->variables[variable] = value; | ||||||
|  |       else if(scope == "parent") | ||||||
|  | 	local->parent->variables[variable] = value; | ||||||
|  |    } | ||||||
|  |        | ||||||
|  |    void Tag::storeVariable(coreutils::ZString variable) { | ||||||
|  |       if(keywordDefined("expr")) { | ||||||
|  | 	 if(!keywordDefined("scope") || (resolveKeyword("scope") == "global")) | ||||||
|  | 	   global.variables[variable] = Operand(keywords["expr"], *this).string; | ||||||
|  | 	 else if(resolveKeyword("scope") == "local") | ||||||
|  | 	   local->variables[variable] = Operand(keywords["expr"], *this).string; | ||||||
|  | 	 else if(resolveKeyword("scope") == "parent") | ||||||
|  | 	   local->parent->variables[variable] = Operand(keywords["expr"], *this).string; | ||||||
|  |       } else if(hasContainer) { | ||||||
|  | 	 processContainer(container); | ||||||
|  | 	 if(evaluate) { | ||||||
|  | 	    if(!keywordDefined("scope") || (resolveKeyword("scope") == "global")) | ||||||
|  | 	      global.variables[variable] = out; | ||||||
|  | 	    else if(resolveKeyword("scope") == "local") | ||||||
|  | 	      local->variables[variable] = out; | ||||||
|  | 	    else if(resolveKeyword("scope") == "parent") | ||||||
|  | 	      local->parent->variables[variable] = out; | ||||||
|  | 	 } else { | ||||||
|  | 	    if(!keywordDefined("scope") || (resolveKeyword("scope") == "global")) | ||||||
|  | 	      global.variables[variable] = container; | ||||||
|  | 	    else if(resolveKeyword("scope") == "local") | ||||||
|  | 	      local->variables[variable] = container; | ||||||
|  | 	    else if(resolveKeyword("scope") == "parent") | ||||||
|  | 	      local->parent->variables[variable] = container; | ||||||
|  | 	 }	  | ||||||
|  |       } else { | ||||||
|  | 	 if(!keywordDefined("scope") || (resolveKeyword("scope") == "global")) | ||||||
|  | 	   global.variables[variable] = resolveKeyword("value"); | ||||||
|  | 	 else if(resolveKeyword("scope") == "local") | ||||||
|  | 	   local->variables[variable] = resolveKeyword("value"); | ||||||
|  | 	 else if(resolveKeyword("scope") == "parent") | ||||||
|  | 	   local->parent->variables[variable] = resolveKeyword("value"); | ||||||
|  |       } | ||||||
|  |    } | ||||||
|  | 
 | ||||||
|  |    coreutils::MString Tag::processModifier(coreutils::MString &value, coreutils::MString &modifier) { | ||||||
|  |       if(modifier == "") | ||||||
|  | 	return value; | ||||||
|  |       if(modifier == "tobinary") | ||||||
|  | 	return value.toBinary(); | ||||||
|  |       else if(modifier == "frombinary") | ||||||
|  | 	return value.fromBinary(); | ||||||
|  |       else if(modifier == "tohex") | ||||||
|  | 	return value.toHex(); | ||||||
|  |       else if(modifier == "fromhex") | ||||||
|  | 	return value.fromHex(); | ||||||
|  |       else if(modifier == "tobase64") | ||||||
|  | 	return value.toBase64(); | ||||||
|  |       else if(modifier == "frombase64") | ||||||
|  | 	return value.fromBase64(); | ||||||
|  |       else if(modifier == "toupper") | ||||||
|  | 	return value.toUpper(); | ||||||
|  |       else if(modifier == "tolower") | ||||||
|  | 	return value.toLower(); | ||||||
|  |       else if(modifier == "tocgi") | ||||||
|  | 	return value.toCGI(); | ||||||
|  |       else if(modifier == "fromcgi") | ||||||
|  | 	return value.fromCGI(); | ||||||
|  |       throw coreutils::Exception("modifier not valid."); | ||||||
|  |    } | ||||||
|  |     | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										12
									
								
								Tag.h
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								Tag.h
									
									
									
									
									
								
							| @ -14,12 +14,15 @@ namespace jet { | |||||||
|       Tag(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent = NULL, Tag *local = NULL, coreutils::ZString splitTagName = ""); |       Tag(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent = NULL, Tag *local = NULL, coreutils::ZString splitTagName = ""); | ||||||
|       virtual ~Tag(); |       virtual ~Tag(); | ||||||
| 
 | 
 | ||||||
|       void resolveKeyword(coreutils::ZString keyword); |       coreutils::MString getVariable(coreutils::ZString &variable, bool inContainer = false); | ||||||
|  | 
 | ||||||
|  |       coreutils::MString resolveKeyword(coreutils::ZString keyword); | ||||||
|       std::map<coreutils::MString, coreutils::MString> variables; |       std::map<coreutils::MString, coreutils::MString> variables; | ||||||
|       std::map<coreutils::MString, coreutils::MString> keywords; |       std::map<coreutils::MString, coreutils::MString> keywords; | ||||||
|       coreutils::ZString name; |       coreutils::ZString name; | ||||||
|       coreutils::ZString container; |       coreutils::ZString container; | ||||||
|       coreutils::ZString container2; |       coreutils::ZString container2; | ||||||
|  |       Global &global; | ||||||
|       Tag *parent; |       Tag *parent; | ||||||
|       Tag *local; |       Tag *local; | ||||||
| 
 | 
 | ||||||
| @ -31,8 +34,6 @@ namespace jet { | |||||||
|       void processContainer(coreutils::ZString &container); |       void processContainer(coreutils::ZString &container); | ||||||
|       void copyContainer(coreutils::ZString &in, coreutils::MString &out); |       void copyContainer(coreutils::ZString &in, coreutils::MString &out); | ||||||
| 
 | 
 | ||||||
|       Global &global; |  | ||||||
| 
 |  | ||||||
|       coreutils::MString &parentOut; |       coreutils::MString &parentOut; | ||||||
|       coreutils::MString out; |       coreutils::MString out; | ||||||
|       coreutils::MString containerOut; |       coreutils::MString containerOut; | ||||||
| @ -43,6 +44,10 @@ namespace jet { | |||||||
|       bool trimLines = false; |       bool trimLines = false; | ||||||
|       bool cleanWhitespace = false; |       bool cleanWhitespace = false; | ||||||
| 
 | 
 | ||||||
|  |       void renderVariableName(coreutils::ZString &variable, coreutils::MString &name, coreutils::MString &modifier); | ||||||
|  |       void storeVariable(coreutils::ZString variable, coreutils::MString value, coreutils::ZString scope); | ||||||
|  |       void storeVariable(coreutils::ZString variable); | ||||||
|  |        | ||||||
|     private: |     private: | ||||||
|       bool containerOnly = false; |       bool containerOnly = false; | ||||||
|       coreutils::ZString splitTagName; |       coreutils::ZString splitTagName; | ||||||
| @ -57,6 +62,7 @@ namespace jet { | |||||||
|       bool ifEndTagName(coreutils::ZString &in); |       bool ifEndTagName(coreutils::ZString &in); | ||||||
|       bool ifSplitTagName(coreutils::ZString &in); |       bool ifSplitTagName(coreutils::ZString &in); | ||||||
|        |        | ||||||
|  |       coreutils::MString processModifier(coreutils::MString &value, coreutils::MString &modifier); | ||||||
|    }; |    }; | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										27
									
								
								__call.cpp
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								__call.cpp
									
									
									
									
									
								
							| @ -14,16 +14,14 @@ namespace jet { | |||||||
| 	throw coreutils::Exception("call tag cannot have a container.");	 | 	throw coreutils::Exception("call tag cannot have a container.");	 | ||||||
|       if(!keywordDefined("pgm")) |       if(!keywordDefined("pgm")) | ||||||
| 	throw coreutils::Exception("pgm keyword must be specified."); | 	throw coreutils::Exception("pgm keyword must be specified."); | ||||||
|       resolveKeyword("pgm"); |  | ||||||
|       for(ix = 0; ix <= 50; ++ix) |       for(ix = 0; ix <= 50; ++ix) | ||||||
| 	argv[ix] = NULL; | 	argv[ix] = NULL; | ||||||
|       argv[0] = keywords["pgm"].c_str(); // TODO: Need to peel off the program name only and pass as argv[0].
 |       argv[0] = resolveKeyword("pgm").c_str(); // TODO: Need to peel off the program name only and pass as argv[0].
 | ||||||
|       for(ix = 1; ix <= 50; ++ix) {     |       for(ix = 1; ix <= 50; ++ix) {     | ||||||
| 	 coreutils::MString arg("arg"); | 	 coreutils::MString arg("arg"); | ||||||
| 	 arg << ix; | 	 arg << ix; | ||||||
| 	 if(keywordDefined(arg)) {	       | 	 if(keywordDefined(arg)) {	       | ||||||
| 	   resolveKeyword(arg); | 	   argv[ix] = resolveKeyword(arg).c_str(); | ||||||
| 	   argv[ix] = keywords[arg].c_str(); |  | ||||||
| 	 } else | 	 } else | ||||||
| 	   break; | 	   break; | ||||||
|       } |       } | ||||||
| @ -33,8 +31,7 @@ namespace jet { | |||||||
| 	 close(fdo[0]); | 	 close(fdo[0]); | ||||||
| 	 dup2(fdo[1], 1); | 	 dup2(fdo[1], 1); | ||||||
| 	 if(keywordDefined("input")) { | 	 if(keywordDefined("input")) { | ||||||
| 	    resolveKeyword("input"); | 	    coreutils::MString input(resolveKeyword("input")); | ||||||
| 	    coreutils::ZString input(variables["input"]); |  | ||||||
| 	    pipe(fdi); | 	    pipe(fdi); | ||||||
| 	    if(fork() == 0) { | 	    if(fork() == 0) { | ||||||
| 	       close(fdi[0]); | 	       close(fdi[0]); | ||||||
| @ -45,28 +42,20 @@ namespace jet { | |||||||
| 	    close(fdi[1]); | 	    close(fdi[1]); | ||||||
| 	    dup2(fdi[0], 0); | 	    dup2(fdi[0], 0); | ||||||
| 	 } | 	 } | ||||||
| 	 rc = execvpe(variables["pgm"].c_str(), argv, global.envp); | 	 rc = execvpe(resolveKeyword("pgm").c_str(), argv, global.envp); | ||||||
| 	 close(fdo[1]); | 	 close(fdo[1]); | ||||||
| 	 exit(errno); | 	 exit(errno); | ||||||
|       } |       } | ||||||
|       close(fdo[1]); |       close(fdo[1]); | ||||||
|       if(keywordDefined("name")) { |       if(keywordDefined("name")) { | ||||||
| 	 resolveKeyword("name"); | 	 coreutils::MString value; | ||||||
| 	 if(!keywordDefined("scope") || (keywords["scope"] == "global")) | 	 value.read(fdo[0]); | ||||||
| 	   global.variables[keywords["name"]].read(fdo[0]); | 	 storeVariable(resolveKeyword("name"), value, resolveKeyword("scope")); | ||||||
| 	 else if(keywords["scope"] == "local")  |  | ||||||
| 	   this->local->variables[keywords["name"]].read(fdo[0]); |  | ||||||
| 	 else if(keywords["scope"] == "parent") |  | ||||||
| 	   this->local->parent->local->variables[keywords["name"]].read(fdo[0]); |  | ||||||
| 	 else |  | ||||||
| 	   throw coreutils::Exception("scope value is not valid."); |  | ||||||
| 	  |  | ||||||
|       } else  |       } else  | ||||||
| 	out.read(fdo[0]);                | 	out.read(fdo[0]);                | ||||||
|       waitpid(pid, &status, 0); |       waitpid(pid, &status, 0); | ||||||
|       if(keywordDefined("error")) {	    |       if(keywordDefined("error")) {	    | ||||||
| 	 resolveKeyword("error"); | 	 global.variables[resolveKeyword("error")] = (status >> 8 & 255); | ||||||
| 	 global.variables[keywords["error"]] = (status >> 8 & 255); |  | ||||||
|       }       |       }       | ||||||
|    } |    } | ||||||
|     |     | ||||||
|  | |||||||
							
								
								
									
										10
									
								
								__cookie.cpp
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								__cookie.cpp
									
									
									
									
									
								
							| @ -18,21 +18,19 @@ namespace jet { | |||||||
| 	throw coreutils::Exception("header tag cannot have both expr and value."); | 	throw coreutils::Exception("header tag cannot have both expr and value."); | ||||||
|       if(!keywordDefined("expr") && !keywordDefined("value") && !hasContainer) |       if(!keywordDefined("expr") && !keywordDefined("value") && !hasContainer) | ||||||
| 	throw coreutils::Exception("header tag must have a value, expr or a container."); | 	throw coreutils::Exception("header tag must have a value, expr or a container."); | ||||||
|       resolveKeyword("name"); |  | ||||||
|       if(keywordDefined("expr")) { |       if(keywordDefined("expr")) { | ||||||
| 	 if(keywordDefined("eval")) | 	 if(keywordDefined("eval")) | ||||||
| 	   throw coreutils::Exception("Cannot use eval with expr.");	  | 	   throw coreutils::Exception("Cannot use eval with expr.");	  | ||||||
| 	 global.headers[keywords["name"]] = Operand(keywords["expr"], global, parent->variables, keywords).string;	     | 	 global.headers[keywords[resolveKeyword("name")]] = Operand(keywords["expr"], *this).string;	     | ||||||
|       } else if(hasContainer) { |       } else if(hasContainer) { | ||||||
| 	 processContainer(container); | 	 processContainer(container); | ||||||
| 	 if(evaluate) { | 	 if(evaluate) { | ||||||
| 	    global.headers[keywords["name"]] = out;	        | 	    global.headers[keywords[resolveKeyword("name")]] = out;	        | ||||||
| 	 } else {	    | 	 } else {	    | ||||||
| 	    global.headers[keywords["name"]] = container; | 	    global.headers[keywords[resolveKeyword("name")]] = container; | ||||||
| 	 }	     | 	 }	     | ||||||
|       } else { |       } else { | ||||||
| 	 resolveKeyword("value"); | 	 global.headers[keywords["Set-Cookie"]] = keywords[resolveKeyword("value")]; | ||||||
| 	 global.headers[keywords["Set-Cookie"]] = keywords["value"]; |  | ||||||
|       }       |       }       | ||||||
|    }       |    }       | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										29
									
								
								__for.cpp
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								__for.cpp
									
									
									
									
									
								
							| @ -8,28 +8,23 @@ namespace jet { | |||||||
|       double counter = 0.0f;    |       double counter = 0.0f;    | ||||||
|       bool nameDefined = keywordDefined("name"); |       bool nameDefined = keywordDefined("name"); | ||||||
|       if(keywordDefined("start")) { |       if(keywordDefined("start")) { | ||||||
| 	 resolveKeyword("start"); | 	 counter = resolveKeyword("start").asDouble(); | ||||||
| 	 counter = keywords["start"].asDouble(); |  | ||||||
| 	 keywords["start"].reset(); | 	 keywords["start"].reset(); | ||||||
|       } |       } | ||||||
|       if(keywordDefined("end"))  |       if(!keywordDefined("end"))  | ||||||
| 	resolveKeyword("end"); |  | ||||||
|       else |  | ||||||
| 	throw coreutils::Exception("for tag requires end keyword."); | 	throw coreutils::Exception("for tag requires end keyword."); | ||||||
|       if(keywordDefined("step"))  |       if(!keywordDefined("step"))  | ||||||
| 	resolveKeyword("step"); |  | ||||||
|       else |  | ||||||
| 	throw coreutils::Exception("for tag requires step keyword."); | 	throw coreutils::Exception("for tag requires step keyword."); | ||||||
|       for(double ix = counter; ix <= variables["end"].asDouble(); ix += variables["step"].asDouble()) { |       for(double ix = counter; ix <= resolveKeyword("end").asDouble(); ix += resolveKeyword("step").asDouble()) { | ||||||
| 	 keywords["end"].reset(); | 	 resolveKeyword("end").reset(); | ||||||
| 	 keywords["step"].reset();	  | 	 resolveKeyword("step").reset();	  | ||||||
| 	 if(nameDefined) { | 	 if(nameDefined) { | ||||||
| 	    if(!keywordDefined("scope") || (keywords["scope"] == "global")) | 	    if(!keywordDefined("scope") || (resolveKeyword("scope") == "global")) | ||||||
| 	      global.variables[keywords["name"]] = ix; | 	      global.variables[resolveKeyword("name")] = ix; | ||||||
| 	    else if(keywords["scope"] == "local") | 	    else if(resolveKeyword("scope") == "local") | ||||||
| 	      this->local->variables[keywords["name"]] = ix; | 	      this->local->variables[resolveKeyword("name")] = ix; | ||||||
| 	    else if(keywords["scope"] == "parent") | 	    else if(resolveKeyword("scope") == "parent") | ||||||
| 	      parent->local->variables[keywords["name"]] = ix; | 	      parent->local->variables[resolveKeyword("name")] = ix; | ||||||
| 	    else | 	    else | ||||||
| 	      throw coreutils::Exception("scope value is not valid."); | 	      throw coreutils::Exception("scope value is not valid."); | ||||||
| 	 }	  | 	 }	  | ||||||
|  | |||||||
							
								
								
									
										14
									
								
								__header.cpp
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								__header.cpp
									
									
									
									
									
								
							| @ -17,21 +17,19 @@ namespace jet { | |||||||
| 	throw coreutils::Exception("header tag cannot have both expr and value."); | 	throw coreutils::Exception("header tag cannot have both expr and value."); | ||||||
|       if(!keywordDefined("expr") && !keywordDefined("value") && !hasContainer) |       if(!keywordDefined("expr") && !keywordDefined("value") && !hasContainer) | ||||||
| 	throw coreutils::Exception("header tag must have a value, expr or a container."); | 	throw coreutils::Exception("header tag must have a value, expr or a container."); | ||||||
|       resolveKeyword("name"); |  | ||||||
|       if(keywordDefined("expr")) { |       if(keywordDefined("expr")) { | ||||||
| 	 if(keywordDefined("eval")) | 	 if(keywordDefined("eval")) | ||||||
| 	   throw coreutils::Exception("Cannot use eval with expr.");	  | 	   throw coreutils::Exception("Cannot use eval with expr.");	  | ||||||
| 	 global.headers[keywords["name"]] = Operand(keywords["expr"], global, parent->variables, keywords).string;	     | 	 global.headers[keywords[resolveKeyword("name")]] = Operand(keywords["expr"], *this).string;	     | ||||||
|       } else if(hasContainer) { |       } else if(hasContainer) { | ||||||
| 	 processContainer(container); | 	 processContainer(container); | ||||||
| 	 if(evaluate) { | 	 if(evaluate) { | ||||||
| 	    global.headers[keywords["name"]] = out;	        | 	    global.headers[keywords[resolveKeyword("name")]] = out;	        | ||||||
| 	 } else {	    | 	 } else {	    | ||||||
| 	    global.headers[keywords["name"]] = container; | 	    global.headers[keywords[resolveKeyword("name")]] = container; | ||||||
| 	 }	     | 	 }	     | ||||||
|       } else { |       } else  | ||||||
| 	 resolveKeyword("value"); | 	global.headers[keywords[resolveKeyword("name")]] = keywords[resolveKeyword("value")]; | ||||||
| 	 global.headers[keywords["name"]] = keywords["value"]; |       | ||||||
|       }       |  | ||||||
|    }       |    }       | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										30
									
								
								__if.cpp
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								__if.cpp
									
									
									
									
									
								
							| @ -9,7 +9,6 @@ namespace jet { | |||||||
|       coreutils::MString result; |       coreutils::MString result; | ||||||
|       bool booleanResult = false; |       bool booleanResult = false; | ||||||
|       if(keywordDefined("value1")) { |       if(keywordDefined("value1")) { | ||||||
| 	 resolveKeyword("value1"); |  | ||||||
| 	 if(keywordDefined("expr")) | 	 if(keywordDefined("expr")) | ||||||
| 	   throw coreutils::Exception("Either value1 or expr can be specified but not both."); | 	   throw coreutils::Exception("Either value1 or expr can be specified but not both."); | ||||||
| 	 if(keywordDefined("value2")) { | 	 if(keywordDefined("value2")) { | ||||||
| @ -17,24 +16,31 @@ namespace jet { | |||||||
| 	      throw coreutils::Exception("type expected if value1 and value2 specified."); | 	      throw coreutils::Exception("type expected if value1 and value2 specified."); | ||||||
| 	 } else | 	 } else | ||||||
| 	   throw coreutils::Exception("value2 required if value1 specified."); | 	   throw coreutils::Exception("value2 required if value1 specified."); | ||||||
| 	 resolveKeyword("value2"); | 	 coreutils::MString type = resolveKeyword("type"); | ||||||
| 	 resolveKeyword("type"); | 	 if((type != "eq") && | ||||||
| 	 int rc = keywords["value1"].compare(keywords["value2"]); | 	    (type != "ne") && | ||||||
| 	 if(((keywords["type"] == "eq") && (rc == 0)) || | 	    (type != "lt") && | ||||||
| 	    ((keywords["type"] == "ne") && (rc != 0)) || | 	    (type != "le") && | ||||||
| 	    ((keywords["type"] == "lt") && (rc == -1)) ||  | 	    (type != "gt") && | ||||||
| 	    ((keywords["type"] == "le") && (rc != 1)) || | 	    (type != "ge")) | ||||||
| 	    ((keywords["type"] == "gt") && (rc == 1)) || | 	   throw coreutils::Exception("type value must be 'eq','ne','lt','le','gt','ge'.");	    | ||||||
| 	    ((keywords["type"] == "ge") && (rc != -1))) | 	 int rc = resolveKeyword("value1").compare(resolveKeyword("value2")); | ||||||
|  | 	 std::cout << "if: " << resolveKeyword("value1") << " " << type << " " << resolveKeyword("value2") << ":" << rc << std::endl; | ||||||
|  | 	 if(((type == "eq") && (rc == 0)) || | ||||||
|  | 	    ((type == "ne") && (rc != 0)) || | ||||||
|  | 	    ((type == "lt") && (rc == -1)) ||  | ||||||
|  | 	    ((type == "le") && (rc != 1)) || | ||||||
|  | 	    ((type == "gt") && (rc == 1)) || | ||||||
|  | 	    ((type == "ge") && (rc != -1))) | ||||||
| 	   booleanResult = true; | 	   booleanResult = true; | ||||||
| 	 else | 	 else | ||||||
| 	   throw coreutils::Exception("type value must be 'eq','ne','lt','le','gt','ge'."); | 	   booleanResult = false; | ||||||
|       } else if(keywordDefined("expr")) { |       } else if(keywordDefined("expr")) { | ||||||
| 	 if(keywordDefined("value2")) | 	 if(keywordDefined("value2")) | ||||||
| 	   throw coreutils::Exception("value2 should not be specified with expr."); | 	   throw coreutils::Exception("value2 should not be specified with expr."); | ||||||
| 	 if(keywordDefined("type")) | 	 if(keywordDefined("type")) | ||||||
| 	   throw coreutils::Exception("type should not be specified with expr."); | 	   throw coreutils::Exception("type should not be specified with expr."); | ||||||
| 	 booleanResult = Operand(keywords["expr"], global, parent->variables, keywords).boolean; | 	 booleanResult = Operand(keywords["expr"], *this).boolean; | ||||||
|       } |       } | ||||||
|       if(booleanResult)  |       if(booleanResult)  | ||||||
| 	processContainer(container); | 	processContainer(container); | ||||||
|  | |||||||
| @ -11,10 +11,9 @@ namespace jet { | |||||||
|       output = false; |       output = false; | ||||||
|       if(!hasContainer) |       if(!hasContainer) | ||||||
| 	throw coreutils::Exception("ifrow tag must have a container.");	 | 	throw coreutils::Exception("ifrow tag must have a container.");	 | ||||||
|       if(!global.sessionExists(keywords["sessionid"])) |       if(!global.sessionExists(keywords[resolveKeyword("sessionid")])) | ||||||
| 	throw coreutils::Exception("sessionid does not exist."); | 	throw coreutils::Exception("sessionid does not exist."); | ||||||
|       resolveKeyword("sessionid"); |       if(global.getSession(keywords[resolveKeyword("sessionid")])->hasRow())  | ||||||
|       if(global.getSession(keywords["sessionid"])->hasRow())  |  | ||||||
| 	processContainer(container); | 	processContainer(container); | ||||||
|       else |       else | ||||||
| 	processContainer(container2); | 	processContainer(container2); | ||||||
|  | |||||||
| @ -10,8 +10,7 @@ namespace jet { | |||||||
|       if(hasContainer) |       if(hasContainer) | ||||||
| 	throw coreutils::Exception("include tag should not have a container."); | 	throw coreutils::Exception("include tag should not have a container."); | ||||||
|       hasContainer = true; |       hasContainer = true; | ||||||
|       resolveKeyword("file"); |       coreutils::File file(keywords[resolveKeyword("file")]); | ||||||
|       coreutils::File file(keywords["file"]); |  | ||||||
|       file.read(); |       file.read(); | ||||||
|       container = file.asZString(); |       container = file.asZString(); | ||||||
|       try {	    |       try {	    | ||||||
|  | |||||||
| @ -6,9 +6,7 @@ | |||||||
| namespace jet { | namespace jet { | ||||||
|     |     | ||||||
|    __jet::__jet(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent, Tag *local) : Tag(in, parentOut, global, parent, this) { |    __jet::__jet(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent, Tag *local) : Tag(in, parentOut, global, parent, this) { | ||||||
|       if(keywordDefined("cgi")) |       if(keywordDefined("cgi") && (keywords[resolveKeyword("cgi")] == "true")) {	  | ||||||
| 	resolveKeyword("cgi"); |  | ||||||
|       if(keywords["cgi"] == "true") {	  |  | ||||||
| 	 coreutils::ZString requestMethod(getenv("REQUEST_METHOD")); | 	 coreutils::ZString requestMethod(getenv("REQUEST_METHOD")); | ||||||
| 	 if(requestMethod == "POST") { | 	 if(requestMethod == "POST") { | ||||||
| 	    coreutils::ZString contentLength(getenv("CONTENT_LENGTH")); | 	    coreutils::ZString contentLength(getenv("CONTENT_LENGTH")); | ||||||
|  | |||||||
							
								
								
									
										14
									
								
								__mysql.cpp
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								__mysql.cpp
									
									
									
									
									
								
							| @ -15,18 +15,16 @@ namespace jet { | |||||||
|       if(!keywordDefined("password")) |       if(!keywordDefined("password")) | ||||||
| 	throw coreutils::Exception("password must be specified for mysql tag."); | 	throw coreutils::Exception("password must be specified for mysql tag."); | ||||||
|              |              | ||||||
|       resolveKeyword("host"); |       sessionId = keywords[resolveKeyword("sessionid")]; | ||||||
|       resolveKeyword("database"); |  | ||||||
|       resolveKeyword("user"); |  | ||||||
|       resolveKeyword("password"); |  | ||||||
|       resolveKeyword("sessionid"); |  | ||||||
|              |  | ||||||
|       sessionId = keywords["sessionid"]; |  | ||||||
|        |        | ||||||
|       global.addSession(sessionId, this); |       global.addSession(sessionId, this); | ||||||
|        |        | ||||||
|       mysql = mysql_init(NULL); |       mysql = mysql_init(NULL); | ||||||
|       mysql = mysql_real_connect(mysql, keywords["host"].c_str(), keywords["user"].c_str(), keywords["password"].c_str(), keywords["database"].c_str(), 0, NULL, 0);             |       mysql = mysql_real_connect(mysql, | ||||||
|  | 				 keywords[resolveKeyword("host")].c_str(), | ||||||
|  | 				 keywords[resolveKeyword("user")].c_str(), | ||||||
|  | 				 keywords[resolveKeyword("password")].c_str(), | ||||||
|  | 				 keywords[resolveKeyword("database")].c_str(), 0, NULL, 0);             | ||||||
|        |        | ||||||
|       if(!mysql) |       if(!mysql) | ||||||
| 	throw coreutils::Exception("database and host parameters are not valid."); | 	throw coreutils::Exception("database and host parameters are not valid."); | ||||||
|  | |||||||
| @ -13,12 +13,10 @@ namespace jet { | |||||||
| 	throw coreutils::Exception("name keyword must be specified."); | 	throw coreutils::Exception("name keyword must be specified."); | ||||||
|       if(hasContainer) |       if(hasContainer) | ||||||
| 	throw coreutils::Exception("read tag does not have a container."); | 	throw coreutils::Exception("read tag does not have a container."); | ||||||
|       resolveKeyword("file"); |       fd = open(resolveKeyword("file").c_str(), O_RDONLY); | ||||||
|       resolveKeyword("name"); |  | ||||||
|       fd = open(keywords["file"].c_str(), O_RDONLY); |  | ||||||
|       if(fd < 0) |       if(fd < 0) | ||||||
| 	throw coreutils::Exception("file name is not found."); | 	throw coreutils::Exception("file name is not found."); | ||||||
|       global.variables[keywords["name"]].read(fd); |       global.variables[resolveKeyword("name")].read(fd); | ||||||
|       close(fd);       |       close(fd);       | ||||||
|    } |    } | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										39
									
								
								__set.cpp
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								__set.cpp
									
									
									
									
									
								
							| @ -1,7 +1,5 @@ | |||||||
| #include "__set.h" | #include "__set.h" | ||||||
| #include "Exception.h" | #include "Exception.h" | ||||||
| #include "Operand.h" |  | ||||||
| #include "KeywordValue.h" |  | ||||||
| #include <iostream> | #include <iostream> | ||||||
| 
 | 
 | ||||||
| namespace jet { | namespace jet { | ||||||
| @ -21,41 +19,8 @@ namespace jet { | |||||||
|       if(keywordDefined("expr") && keywordDefined("eval")) |       if(keywordDefined("expr") && keywordDefined("eval")) | ||||||
| 	throw coreutils::Exception("Cannot use eval with expr."); | 	throw coreutils::Exception("Cannot use eval with expr."); | ||||||
| 
 | 
 | ||||||
|       resolveKeyword("name");  |       storeVariable(resolveKeyword("name")); | ||||||
|        |  | ||||||
|       if(keywordDefined("expr")) { |  | ||||||
| 	 if(!keywordDefined("scope") || (keywords["scope"] == "global"))  |  | ||||||
| 	   global.variables[keywords["name"]] = Operand(keywords["expr"], global, parent->variables, keywords).string;	  |  | ||||||
| 	 else if(keywords["scope"] == "local") |  | ||||||
| 	   local->variables[keywords["name"]] = Operand(keywords["expr"], global, parent->variables, keywords).string; |  | ||||||
| 	 else if(keywords["scope"] == "parent") |  | ||||||
| 	   local->parent->variables[keywords["name"]] = Operand(keywords["expr"], global, parent->variables, keywords).string; |  | ||||||
|       } else if(hasContainer) { |  | ||||||
| 	 processContainer(container); |  | ||||||
| 	 if(evaluate) { |  | ||||||
| 	    if(!keywordDefined("scope") || (keywords["scope"] == "global"))  |  | ||||||
| 	      global.variables[keywords["name"]] = out;	        |  | ||||||
| 	    else if(keywords["scope"] == "local") |  | ||||||
| 	      local->variables[keywords["name"]] = out;	     |  | ||||||
| 	    else if(keywords["scope"] == "parent") |  | ||||||
| 	      local->parent->variables[keywords["name"]] = out;	     |  | ||||||
| 	 } else { |  | ||||||
| 	    if(!keywordDefined("scope") || (keywords["scope"] == "global"))  |  | ||||||
| 	      global.variables[keywords["name"]] = container;	        |  | ||||||
| 	    else if(keywords["scope"] == "local") |  | ||||||
| 	      local->variables[keywords["name"]] = container;	     |  | ||||||
| 	    else if(keywords["scope"] == "parent") |  | ||||||
| 	      local->parent->variables[keywords["name"]] = container;	     |  | ||||||
| 	 }	     |  | ||||||
|       } else { |  | ||||||
| 	 resolveKeyword("value"); |  | ||||||
| 	 if(!keywordDefined("scope") || (keywords["scope"] == "global"))  |  | ||||||
| 	   global.variables[keywords["name"]] = keywords["value"];	        |  | ||||||
| 	 else if(keywords["scope"] == "local") |  | ||||||
| 	   local->variables[keywords["name"]] = keywords["value"];	     |  | ||||||
| 	 else if(keywords["scope"] == "parent") |  | ||||||
| 	   local->parent->variables[keywords["name"]] = keywords["value"];	     |  | ||||||
|       } |  | ||||||
|             |             | ||||||
|    } |    } | ||||||
|  |     | ||||||
| } | } | ||||||
|  | |||||||
| @ -15,9 +15,8 @@ namespace jet { | |||||||
| 	throw coreutils::Exception("sql tag must have a container.");	 | 	throw coreutils::Exception("sql tag must have a container.");	 | ||||||
|       if(!global.sessionExists(keywords["sessionid"])) |       if(!global.sessionExists(keywords["sessionid"])) | ||||||
| 	throw coreutils::Exception("sessionid does not exist."); | 	throw coreutils::Exception("sessionid does not exist."); | ||||||
|       resolveKeyword("sessionid"); |  | ||||||
|       processContainer(container); |       processContainer(container); | ||||||
|       global.getSession(keywords["sessionid"])->query(out); |       global.getSession(keywords[resolveKeyword("sessionid")])->query(out); | ||||||
|    } |    } | ||||||
|     |     | ||||||
| } | } | ||||||
|  | |||||||
| @ -20,7 +20,7 @@ namespace jet { | |||||||
| 	 dup2(fdo[1], 1); | 	 dup2(fdo[1], 1); | ||||||
| 	 if(keywordDefined("input")) { | 	 if(keywordDefined("input")) { | ||||||
| 	    resolveKeyword("input"); | 	    resolveKeyword("input"); | ||||||
| 	    coreutils::ZString input(keywords["input"]); | 	    coreutils::ZString input(keywords[resolveKeyword("input")]); | ||||||
| 	    pipe(fdi); | 	    pipe(fdi); | ||||||
| 	    if(fork() == 0) { | 	    if(fork() == 0) { | ||||||
| 	       close(fdi[0]); | 	       close(fdi[0]); | ||||||
| @ -31,13 +31,13 @@ namespace jet { | |||||||
| 	    close(fdi[1]); | 	    close(fdi[1]); | ||||||
| 	    dup2(fdi[0], 0); | 	    dup2(fdi[0], 0); | ||||||
| 	 } | 	 } | ||||||
| 	 system(keywords["cmd"].c_str()); | 	 system(keywords[resolveKeyword("cmd")].c_str()); | ||||||
| 	 close(fdo[1]); | 	 close(fdo[1]); | ||||||
| 	 exit(errno); | 	 exit(errno); | ||||||
|       } |       } | ||||||
|       close(fdo[1]); |       close(fdo[1]); | ||||||
|       if(keywordDefined("name"))  |       if(keywordDefined("name"))  | ||||||
| 	global.variables[keywords["name"]].read(fdo[0]); 	  | 	global.variables[keywords[resolveKeyword("name")]].read(fdo[0]); 	  | ||||||
|       else  |       else  | ||||||
| 	out.read(fdo[0]);                | 	out.read(fdo[0]);                | ||||||
|       waitpid(pid, &status, 0); |       waitpid(pid, &status, 0); | ||||||
|  | |||||||
							
								
								
									
										30
									
								
								__until.cpp
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								__until.cpp
									
									
									
									
									
								
							| @ -21,13 +21,13 @@ namespace jet { | |||||||
| 	 if(!keywordDefined("type"))  | 	 if(!keywordDefined("type"))  | ||||||
| 	   throw coreutils::Exception("type expected if value1 and value2 specified."); | 	   throw coreutils::Exception("type expected if value1 and value2 specified."); | ||||||
| 	  | 	  | ||||||
| 	 int rc = keywords["value1"].compare(keywords["value2"]); | 	 int rc = keywords[resolveKeyword("value1")].compare(keywords[resolveKeyword("value2")]); | ||||||
| 	 if(((keywords["type"] == "eq") && (rc == 0)) || | 	 if(((keywords[resolveKeyword("type")] == "eq") && (rc == 0)) || | ||||||
| 	    ((keywords["type"] == "ne") && (rc != 0)) || | 	    ((keywords[resolveKeyword("type")] == "ne") && (rc != 0)) || | ||||||
| 	    ((keywords["type"] == "lt") && (rc == -1)) || | 	    ((keywords[resolveKeyword("type")] == "lt") && (rc == -1)) || | ||||||
| 	    ((keywords["type"] == "le") && (rc != 1)) || | 	    ((keywords[resolveKeyword("type")] == "le") && (rc != 1)) || | ||||||
| 	    ((keywords["type"] == "gt") && (rc == 1)) || | 	    ((keywords[resolveKeyword("type")] == "gt") && (rc == 1)) || | ||||||
| 	    ((keywords["type"] == "ge") && (rc != -1))) | 	    ((keywords[resolveKeyword("type")] == "ge") && (rc != -1))) | ||||||
| 	   booleanResult = true; | 	   booleanResult = true; | ||||||
| 	 else | 	 else | ||||||
| 	   throw coreutils::Exception("type value must be 'eq','ne','lt','le','gt','ge'."); | 	   throw coreutils::Exception("type value must be 'eq','ne','lt','le','gt','ge'."); | ||||||
| @ -47,16 +47,16 @@ namespace jet { | |||||||
| 	    keywords["expr"].reset(); | 	    keywords["expr"].reset(); | ||||||
| 	    keywords["expr"] = exprSaved; | 	    keywords["expr"] = exprSaved; | ||||||
| 	    resolveKeyword("expr"); | 	    resolveKeyword("expr"); | ||||||
| 	    booleanResult = Operand(keywords["expr"], global, parent->variables, keywords).boolean; | 	    booleanResult = Operand(keywords["expr"], *this).boolean; | ||||||
| 	 } else { | 	 } else { | ||||||
| 	    booleanResult = false; | 	    booleanResult = false; | ||||||
| 	    int rc = keywords["value1"].compare(keywords["value2"]); | 	    int rc = keywords[resolveKeyword("value1")].compare(keywords[resolveKeyword("value2")]); | ||||||
| 	    if(((keywords["type"] == "eq") && (rc == 0)) || | 	    if(((keywords[resolveKeyword("type")] == "eq") && (rc == 0)) || | ||||||
| 	       ((keywords["type"] == "ne") && (rc != 0)) || | 	       ((keywords[resolveKeyword("type")] == "ne") && (rc != 0)) || | ||||||
| 	       ((keywords["type"] == "lt") && (rc == -1)) || | 	       ((keywords[resolveKeyword("type")] == "lt") && (rc == -1)) || | ||||||
| 	       ((keywords["type"] == "le") && (rc != 1)) || | 	       ((keywords[resolveKeyword("type")] == "le") && (rc != 1)) || | ||||||
| 	       ((keywords["type"] == "gt") && (rc == 1)) || | 	       ((keywords[resolveKeyword("type")] == "gt") && (rc == 1)) || | ||||||
| 	       ((keywords["type"] == "ge") && (rc != -1))) | 	       ((keywords[resolveKeyword("type")] == "ge") && (rc != -1))) | ||||||
| 	      booleanResult = true;   | 	      booleanResult = true;   | ||||||
| 	 }	  | 	 }	  | ||||||
|       } while(booleanResult); |       } while(booleanResult); | ||||||
|  | |||||||
							
								
								
									
										32
									
								
								__while.cpp
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								__while.cpp
									
									
									
									
									
								
							| @ -21,13 +21,13 @@ namespace jet { | |||||||
| 	 if(!keywordDefined("type"))  | 	 if(!keywordDefined("type"))  | ||||||
| 	   throw coreutils::Exception("type expected if value1 and value2 specified."); | 	   throw coreutils::Exception("type expected if value1 and value2 specified."); | ||||||
| 	  | 	  | ||||||
| 	 int rc = keywords["value1"].compare(keywords["value2"]); | 	 int rc = keywords[resolveKeyword("value1")].compare(keywords[resolveKeyword("value2")]); | ||||||
| 	 if(((keywords["type"] == "eq") && (rc == 0)) || | 	 if(((keywords[resolveKeyword("type")] == "eq") && (rc == 0)) || | ||||||
| 	    ((keywords["type"] == "ne") && (rc != 0)) || | 	    ((keywords[resolveKeyword("type")] == "ne") && (rc != 0)) || | ||||||
| 	    ((keywords["type"] == "lt") && (rc == -1)) || | 	    ((keywords[resolveKeyword("type")] == "lt") && (rc == -1)) || | ||||||
| 	    ((keywords["type"] == "le") && (rc != 1)) || | 	    ((keywords[resolveKeyword("type")] == "le") && (rc != 1)) || | ||||||
| 	    ((keywords["type"] == "gt") && (rc == 1)) || | 	    ((keywords[resolveKeyword("type")] == "gt") && (rc == 1)) || | ||||||
| 	    ((keywords["type"] == "ge") && (rc != -1))) | 	    ((keywords[resolveKeyword("type")] == "ge") && (rc != -1))) | ||||||
| 	   booleanResult = true; | 	   booleanResult = true; | ||||||
| 	 else | 	 else | ||||||
| 	   throw coreutils::Exception("type value must be 'eq','ne','lt','le','gt','ge'."); | 	   throw coreutils::Exception("type value must be 'eq','ne','lt','le','gt','ge'."); | ||||||
| @ -39,7 +39,7 @@ namespace jet { | |||||||
| 	   throw coreutils::Exception("type should not be specified with expr."); | 	   throw coreutils::Exception("type should not be specified with expr."); | ||||||
| 	 exprMethod = true; | 	 exprMethod = true; | ||||||
| 	 exprSaved = keywords["expr"]; | 	 exprSaved = keywords["expr"]; | ||||||
| 	 booleanResult = Operand(keywords["expr"], global, parent->variables, keywords).boolean; | 	 booleanResult = Operand(keywords["expr"], *this).boolean; | ||||||
|       } |       } | ||||||
|       while(booleanResult) { |       while(booleanResult) { | ||||||
| 	 processContainer(container); | 	 processContainer(container); | ||||||
| @ -47,16 +47,16 @@ namespace jet { | |||||||
| 	 if(exprMethod) { | 	 if(exprMethod) { | ||||||
| 	    keywords["expr"].reset(); | 	    keywords["expr"].reset(); | ||||||
| 	    keywords["expr"] = exprSaved; | 	    keywords["expr"] = exprSaved; | ||||||
| 	    booleanResult = Operand(keywords["expr"], global, parent->variables, keywords).boolean; | 	    booleanResult = Operand(keywords["expr"], *this).boolean; | ||||||
| 	 } else { | 	 } else { | ||||||
| 	    booleanResult = false; | 	    booleanResult = false; | ||||||
| 	    int rc = keywords["value1"].compare(keywords["value2"]); | 	    int rc = keywords[resolveKeyword("value1")].compare(keywords[resolveKeyword("value2")]); | ||||||
| 	    if(((keywords["type"] == "eq") && (rc == 0)) || | 	    if(((keywords[resolveKeyword("type")] == "eq") && (rc == 0)) || | ||||||
| 	       ((keywords["type"] == "ne") && (rc != 0)) || | 	       ((keywords[resolveKeyword("type")] == "ne") && (rc != 0)) || | ||||||
| 	       ((keywords["type"] == "lt") && (rc == -1)) || | 	       ((keywords[resolveKeyword("type")] == "lt") && (rc == -1)) || | ||||||
| 	       ((keywords["type"] == "le") && (rc != 1)) || | 	       ((keywords[resolveKeyword("type")] == "le") && (rc != 1)) || | ||||||
| 	       ((keywords["type"] == "gt") && (rc == 1)) || | 	       ((keywords[resolveKeyword("type")] == "gt") && (rc == 1)) || | ||||||
| 	       ((keywords["type"] == "ge") && (rc != -1))) | 	       ((keywords[resolveKeyword("type")] == "ge") && (rc != -1))) | ||||||
| 	      booleanResult = true;   | 	      booleanResult = true;   | ||||||
| 	 }	  | 	 }	  | ||||||
|       } |       } | ||||||
|  | |||||||
| @ -11,43 +11,29 @@ namespace jet { | |||||||
|    __whiledir::__whiledir(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent, Tag *local) : Tag(in, parentOut, global, parent, this) { |    __whiledir::__whiledir(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent, Tag *local) : Tag(in, parentOut, global, parent, this) { | ||||||
|       if(!keywordDefined("path")) |       if(!keywordDefined("path")) | ||||||
| 	throw coreutils::Exception("whiledir tag must specify a path."); | 	throw coreutils::Exception("whiledir tag must specify a path."); | ||||||
|       resolveKeyword("path"); |       if(keywordDefined("sort") && (resolveKeyword("sort") == "true")) { | ||||||
|       resolveKeyword("sort"); |  | ||||||
|       if(keywordDefined("sort") && (keywords["sort"] == "true")) { |  | ||||||
| 	 std::vector<std::filesystem::directory_entry> entries; | 	 std::vector<std::filesystem::directory_entry> entries; | ||||||
| 	 for(auto const &entry : std::filesystem::directory_iterator(variables["path"].str()))  | 	 for(auto const &entry : std::filesystem::directory_iterator(resolveKeyword("path").str()))  | ||||||
| 	   entries.push_back(entry); | 	   entries.push_back(entry); | ||||||
| 	 std::sort(entries.begin(), entries.end(), [](const auto &a, const auto &b) { return a.path() < b.path(); }); | 	 std::sort(entries.begin(), entries.end(), [](const auto &a, const auto &b) { return a.path() < b.path(); }); | ||||||
| 	 for(const auto &entry : entries) { | 	 for(const auto &entry : entries) { | ||||||
| 	    if(keywordDefined("fullpath")) {		  | 	    if(keywordDefined("fullpath"))  | ||||||
| 	       resolveKeyword("fullpath"); | 	      global.variables[resolveKeyword("fullpath")] = entry.path(); | ||||||
| 	       global.variables[keywords["fullpath"]] = entry.path(); | 	    if(keywordDefined("filename"))  | ||||||
| 	    }	     | 	      global.variables[resolveKeyword("filename")] = entry.path().filename(); | ||||||
| 	    if(keywordDefined("filename")) { | 	    if(keywordDefined("filenamenoextension"))  | ||||||
| 	       resolveKeyword("filename"); | 	      global.variables[resolveKeyword("filenamenoextension")] = entry.path().stem(); | ||||||
| 	       global.variables[keywords["filename"]] = entry.path().filename(); |  | ||||||
| 	    }	     |  | ||||||
| 	    if(keywordDefined("filenamenoextension")) { |  | ||||||
| 	       resolveKeyword("filenamenoextension"); |  | ||||||
| 	       global.variables[keywords["filenamenoextension"]] = entry.path().stem(); |  | ||||||
| 	    }	     |  | ||||||
| 	    processContainer(container); | 	    processContainer(container); | ||||||
| 	    container.reset();	     | 	    container.reset();	     | ||||||
| 	 }	  | 	 }	  | ||||||
|       } else {	  |       } else {	  | ||||||
| 	 for(auto const &entry : std::filesystem::directory_iterator(variables["path"].str())) { | 	 for(auto const &entry : std::filesystem::directory_iterator(variables[resolveKeyword("path")].str())) { | ||||||
| 	    if(keywordDefined("fullpath")) { | 	    if(keywordDefined("fullpath"))  | ||||||
| 		resolveKeyword("fullpath");  | 	      global.variables[resolveKeyword("fullpath")] = entry.path(); | ||||||
| 	       global.variables[keywords["fullpath"]] = entry.path(); | 	    if(keywordDefined("filename"))  | ||||||
| 	    }	     | 	      global.variables[resolveKeyword("filename")] = entry.path().filename(); | ||||||
| 	    if(keywordDefined("filename")) { | 	    if(keywordDefined("filenamenoextension"))  | ||||||
| 	       resolveKeyword("filename"); | 	      global.variables[resolveKeyword("filenamenoextension")] = entry.path().stem(); | ||||||
| 	       global.variables[keywords["filename"]] = entry.path().filename(); |  | ||||||
| 	    }	     |  | ||||||
| 	    if(keywordDefined("filenamenoextension")) { |  | ||||||
| 	       resolveKeyword("filenamenoextension"); |  | ||||||
| 	       global.variables[keywords["filenamenoextension"]] = entry.path().stem(); |  | ||||||
| 	    }	     |  | ||||||
| 	    processContainer(container); | 	    processContainer(container); | ||||||
| 	    container.reset(); | 	    container.reset(); | ||||||
| 	 } | 	 } | ||||||
|  | |||||||
							
								
								
									
										10
									
								
								__write.cpp
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								__write.cpp
									
									
									
									
									
								
							| @ -14,7 +14,6 @@ namespace jet { | |||||||
|       processContainer(container); |       processContainer(container); | ||||||
|       if(!keywordDefined("file")) |       if(!keywordDefined("file")) | ||||||
| 	throw coreutils::Exception("write tag must have file defined."); | 	throw coreutils::Exception("write tag must have file defined."); | ||||||
|       resolveKeyword("file"); |  | ||||||
|       if(!keywordDefined("expr") && keywordDefined("value") && hasContainer) |       if(!keywordDefined("expr") && keywordDefined("value") && hasContainer) | ||||||
| 	throw coreutils::Exception("write tag cannot have both value and a container."); | 	throw coreutils::Exception("write tag cannot have both value and a container."); | ||||||
|       if(keywordDefined("expr") && !keywordDefined("value") && hasContainer) |       if(keywordDefined("expr") && !keywordDefined("value") && hasContainer) | ||||||
| @ -25,20 +24,19 @@ namespace jet { | |||||||
| 	throw coreutils::Exception("write tag must have a value, expr or a container."); | 	throw coreutils::Exception("write tag must have a value, expr or a container."); | ||||||
|       if(!keywordDefined("mode")) |       if(!keywordDefined("mode")) | ||||||
| 	throw coreutils::Exception("write tag must have a mode keyword."); | 	throw coreutils::Exception("write tag must have a mode keyword."); | ||||||
|       resolveKeyword("mode"); |       if(keywords[resolveKeyword("mode")] == "append")  | ||||||
|       if(keywords["mode"] == "append")  |  | ||||||
| 	mode = O_APPEND; | 	mode = O_APPEND; | ||||||
|       else if(keywords["mode"] == "overwrite") |       else if(keywords[resolveKeyword("mode")] == "overwrite") | ||||||
| 	mode = O_TRUNC; | 	mode = O_TRUNC; | ||||||
|       else |       else | ||||||
| 	throw coreutils::Exception("mode keyword must be 'overwrite' or 'append'."); | 	throw coreutils::Exception("mode keyword must be 'overwrite' or 'append'."); | ||||||
|       int fd = open(keywords["file"].c_str(), mode, 0644); // TODO: Need to add O_CREAT and AUTH flags.
 |       int fd = open(keywords[resolveKeyword("file")].c_str(), mode, 0644); // TODO: Need to add O_CREAT and AUTH flags.
 | ||||||
|       if(hasContainer && !evaluate) |       if(hasContainer && !evaluate) | ||||||
| 	len = write(fd, container.getData(), container.getLength()); | 	len = write(fd, container.getData(), container.getLength()); | ||||||
|       else if(hasContainer && evaluate) |       else if(hasContainer && evaluate) | ||||||
| 	len = write(fd, out.getData(), out.getLength()); | 	len = write(fd, out.getData(), out.getLength()); | ||||||
|       else if(!hasContainer && keywordDefined("value")) |       else if(!hasContainer && keywordDefined("value")) | ||||||
| 	len = write(fd, variables["value"].getData(), keywords["value"].getLength()); | 	len = write(fd, variables[resolveKeyword("value")].getData(), keywords[resolveKeyword("value")].getLength()); | ||||||
|       else if(!hasContainer && keywordDefined("expr")) |       else if(!hasContainer && keywordDefined("expr")) | ||||||
| 	len = write(fd, keywords["expr"].getData(), keywords["expr"].getLength());             | 	len = write(fd, keywords["expr"].getData(), keywords["expr"].getLength());             | ||||||
|       close(fd);       |       close(fd);       | ||||||
|  | |||||||
| @ -3,6 +3,9 @@ | |||||||
| <set name="abc" value="abcdefg" /> | <set name="abc" value="abcdefg" /> | ||||||
| <call pgm="cat" error="error" input="$[abc]xyz" name="test1" /> | <call pgm="cat" error="error" input="$[abc]xyz" name="test1" /> | ||||||
| test1=$[test1] | test1=$[test1] | ||||||
| name1=#[localname] | name1=$[%name1] | ||||||
| error=$[error] | error=$[error] | ||||||
|  | <call error="rc" pgm="/usr/bin/ls" arg1="-al" /> | ||||||
|  | $[rc] | ||||||
|  | 
 | ||||||
| </jet> | </jet> | ||||||
|  | |||||||
| @ -6,4 +6,6 @@ $[test2]=10 | |||||||
| <set name="numbers">0123456789</set> | <set name="numbers">0123456789</set> | ||||||
| <set name="lefty" expr="left($[numbers],5)" /> | <set name="lefty" expr="left($[numbers],5)" /> | ||||||
| $[lefty]=01234 | $[lefty]=01234 | ||||||
|  | <set name="righty" expr="right($[numbers],5)" /> | ||||||
|  | $[righty]=56789 | ||||||
| </jet> | </jet> | ||||||
|  | |||||||
| @ -40,9 +40,9 @@ | |||||||
|  <set name="noeval" eval="no">this is the value store in $[%name1].</set> |  <set name="noeval" eval="no">this is the value store in $[%name1].</set> | ||||||
|  <set name="thename" eval="yes">this is the value store in $[%name1].</set> |  <set name="thename" eval="yes">this is the value store in $[%name1].</set> | ||||||
|  <set name="newname" scope="global">another container value</set> |  <set name="newname" scope="global">another container value</set> | ||||||
|  <comment><include file="./testinclude.jet" /> |  <include file="./testinclude.jet" /> | ||||||
|  include: $[include] |  include: $[include] | ||||||
|  localvar='#[localvar]'</comment> |  localvar='#[localvar]' | ||||||
|  >>>$[noeval]<<< |  >>>$[noeval]<<< | ||||||
|  >>>$[thename]<<< |  >>>$[thename]<<< | ||||||
|  <set name="iz" value="data" /> |  <set name="iz" value="data" /> | ||||||
|  | |||||||
| @ -1,4 +1,5 @@ | |||||||
| #!../jet-2.0 | #!../jet-2.0 | ||||||
|  | <upload name="imagefiledata" path="images/%name" /> | ||||||
| <jet cgi="true"> | <jet cgi="true"> | ||||||
| $[:name] | $[:name] | ||||||
| $[:name:1] | $[:name:1] | ||||||
|  | |||||||
							
								
								
									
										117
									
								
								tmp.aux
									
									
									
									
									
								
							
							
						
						
									
										117
									
								
								tmp.aux
									
									
									
									
									
								
							| @ -1,117 +0,0 @@ | |||||||
| \relax  |  | ||||||
| \providecommand\hyper@newdestlabel[2]{} |  | ||||||
| \providecommand\HyField@AuxAddToFields[1]{} |  | ||||||
| \providecommand\HyField@AuxAddToCoFields[2]{} |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.1}\_\_call.cpp}{3}{section.0.1}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore call.cpp}{3}{lstlisting.0.-1}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.2}\_\_call.h}{5}{section.0.2}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore call.h}{5}{lstlisting.0.-2}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.3}\_\_comment.cpp}{6}{section.0.3}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore comment.cpp}{6}{lstlisting.0.-3}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.4}\_\_comment.h}{7}{section.0.4}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore comment.h}{7}{lstlisting.0.-4}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.5}\_\_dotag.cpp}{8}{section.0.5}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore dotag.cpp}{8}{lstlisting.0.-5}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.6}\_\_dotag.h}{9}{section.0.6}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore dotag.h}{9}{lstlisting.0.-6}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.7}\_\_dump.cpp}{10}{section.0.7}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore dump.cpp}{10}{lstlisting.0.-7}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.8}\_\_dump.h}{11}{section.0.8}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore dump.h}{11}{lstlisting.0.-8}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.9}\_\_for.cpp}{12}{section.0.9}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore for.cpp}{12}{lstlisting.0.-9}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.10}\_\_for.cpp~}{13}{section.0.10}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore for.cpp~}{13}{lstlisting.0.-10}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.11}\_\_for.h}{14}{section.0.11}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore for.h}{14}{lstlisting.0.-11}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.12}Global.cpp}{15}{section.0.12}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{Global.cpp}{15}{lstlisting.0.-12}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.13}Global.h}{19}{section.0.13}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{Global.h}{19}{lstlisting.0.-13}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.14}\_\_header.cpp}{20}{section.0.14}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore header.cpp}{20}{lstlisting.0.-14}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.15}\_\_header.h}{21}{section.0.15}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore header.h}{21}{lstlisting.0.-15}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.16}\_\_if.cpp}{22}{section.0.16}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore if.cpp}{22}{lstlisting.0.-16}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.17}\_\_if.h}{23}{section.0.17}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore if.h}{23}{lstlisting.0.-17}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.18}\_\_ifrow.cpp}{24}{section.0.18}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore ifrow.cpp}{24}{lstlisting.0.-18}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.19}\_\_ifrow.h}{25}{section.0.19}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore ifrow.h}{25}{lstlisting.0.-19}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.20}\_\_include.cpp}{26}{section.0.20}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore include.cpp}{26}{lstlisting.0.-20}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.21}\_\_include.h}{27}{section.0.21}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore include.h}{27}{lstlisting.0.-21}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.22}jet-2.0.cpp}{28}{section.0.22}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{jet\textendash 2.0.cpp}{28}{lstlisting.0.-22}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.23}\_\_jet.cpp}{29}{section.0.23}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore jet.cpp}{29}{lstlisting.0.-23}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.24}\_\_jet.h}{30}{section.0.24}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore jet.h}{30}{lstlisting.0.-24}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.25}KeywordValue.cpp}{31}{section.0.25}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{KeywordValue.cpp}{31}{lstlisting.0.-25}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.26}KeywordValue.h}{32}{section.0.26}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{KeywordValue.h}{32}{lstlisting.0.-26}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.27}Modifiers.cpp}{33}{section.0.27}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{Modifiers.cpp}{33}{lstlisting.0.-27}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.28}Modifiers.h}{36}{section.0.28}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{Modifiers.h}{36}{lstlisting.0.-28}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.29}\_\_mysql.cpp}{37}{section.0.29}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore mysql.cpp}{37}{lstlisting.0.-29}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.30}\_\_mysql.h}{39}{section.0.30}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore mysql.h}{39}{lstlisting.0.-30}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.31}Operand.cpp}{40}{section.0.31}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{Operand.cpp}{40}{lstlisting.0.-31}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.32}Operand.h}{46}{section.0.32}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{Operand.h}{46}{lstlisting.0.-32}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.33}\_\_read.cpp}{47}{section.0.33}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore read.cpp}{47}{lstlisting.0.-33}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.34}\_\_read.h}{48}{section.0.34}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore read.h}{48}{lstlisting.0.-34}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.35}\_\_set.cpp}{49}{section.0.35}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore set.cpp}{49}{lstlisting.0.-35}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.36}\_\_set.h}{51}{section.0.36}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore set.h}{51}{lstlisting.0.-36}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.37}\_\_sql.cpp}{52}{section.0.37}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore sql.cpp}{52}{lstlisting.0.-37}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.38}\_\_sql.h}{53}{section.0.38}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore sql.h}{53}{lstlisting.0.-38}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.39}\_\_stream.cpp}{54}{section.0.39}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore stream.cpp}{54}{lstlisting.0.-39}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.40}\_\_stream.h}{55}{section.0.40}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore stream.h}{55}{lstlisting.0.-40}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.41}\_\_system.cpp}{56}{section.0.41}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore system.cpp}{56}{lstlisting.0.-41}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.42}\_\_system.h}{57}{section.0.42}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore system.h}{57}{lstlisting.0.-42}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.43}\_\_tag.cpp}{58}{section.0.43}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore tag.cpp}{58}{lstlisting.0.-43}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.44}Tag.cpp}{59}{section.0.44}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{Tag.cpp}{59}{lstlisting.0.-44}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.45}\_\_tag.h}{66}{section.0.45}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore tag.h}{66}{lstlisting.0.-45}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.46}Tag.h}{67}{section.0.46}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{Tag.h}{67}{lstlisting.0.-46}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.47}\_\_until.cpp}{69}{section.0.47}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore until.cpp}{69}{lstlisting.0.-47}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.48}\_\_until.h}{71}{section.0.48}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore until.h}{71}{lstlisting.0.-48}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.49}\_\_while.cpp}{72}{section.0.49}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore while.cpp}{72}{lstlisting.0.-49}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.50}\_\_whiledir.cpp}{74}{section.0.50}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore whiledir.cpp}{74}{lstlisting.0.-50}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.51}\_\_whiledir.h}{76}{section.0.51}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore whiledir.h}{76}{lstlisting.0.-51}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.52}\_\_while.h}{77}{section.0.52}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore while.h}{77}{lstlisting.0.-52}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.53}\_\_whilerow.cpp}{78}{section.0.53}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore whilerow.cpp}{78}{lstlisting.0.-53}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.54}\_\_whilerow.h}{79}{section.0.54}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore whilerow.h}{79}{lstlisting.0.-54}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.55}\_\_write.cpp}{80}{section.0.55}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore write.cpp}{80}{lstlisting.0.-55}\protected@file@percent } |  | ||||||
| \@writefile{toc}{\contentsline {section}{\numberline {0.56}\_\_write.h}{82}{section.0.56}\protected@file@percent } |  | ||||||
| \@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore write.h}{82}{lstlisting.0.-56}\protected@file@percent } |  | ||||||
| \gdef \@abspage@last{82} |  | ||||||
							
								
								
									
										376
									
								
								tmp.log
									
									
									
									
									
								
							
							
						
						
									
										376
									
								
								tmp.log
									
									
									
									
									
								
							| @ -1,376 +0,0 @@ | |||||||
| This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/Debian) (preloaded format=pdflatex 2024.11.17)  29 NOV 2024 21:03 |  | ||||||
| entering extended mode |  | ||||||
|  restricted \write18 enabled. |  | ||||||
|  %&-line parsing enabled. |  | ||||||
| **/tmp/tmp.FH1AorYcF9 -output-directory . |  | ||||||
| (/tmp/tmp.FH1AorYcF9 |  | ||||||
| LaTeX2e <2023-11-01> patch level 1 |  | ||||||
| L3 programming layer <2024-01-22> |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/base/book.cls |  | ||||||
| Document Class: book 2023/05/17 v1.4n Standard LaTeX document class |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/base/bk10.clo |  | ||||||
| File: bk10.clo 2023/05/17 v1.4n Standard LaTeX file (size option) |  | ||||||
| ) |  | ||||||
| \c@part=\count187 |  | ||||||
| \c@chapter=\count188 |  | ||||||
| \c@section=\count189 |  | ||||||
| \c@subsection=\count190 |  | ||||||
| \c@subsubsection=\count191 |  | ||||||
| \c@paragraph=\count192 |  | ||||||
| \c@subparagraph=\count193 |  | ||||||
| \c@figure=\count194 |  | ||||||
| \c@table=\count195 |  | ||||||
| \abovecaptionskip=\skip48 |  | ||||||
| \belowcaptionskip=\skip49 |  | ||||||
| \bibindent=\dimen140 |  | ||||||
| ) |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/listings/listings.sty |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty |  | ||||||
| Package: keyval 2022/05/29 v1.15 key=value parser (DPC) |  | ||||||
| \KV@toks@=\toks17 |  | ||||||
| ) |  | ||||||
| \lst@mode=\count196 |  | ||||||
| \lst@gtempboxa=\box51 |  | ||||||
| \lst@token=\toks18 |  | ||||||
| \lst@length=\count197 |  | ||||||
| \lst@currlwidth=\dimen141 |  | ||||||
| \lst@column=\count198 |  | ||||||
| \lst@pos=\count199 |  | ||||||
| \lst@lostspace=\dimen142 |  | ||||||
| \lst@width=\dimen143 |  | ||||||
| \lst@newlines=\count266 |  | ||||||
| \lst@lineno=\count267 |  | ||||||
| \lst@maxwidth=\dimen144 |  | ||||||
| 
 |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/listings/lstmisc.sty |  | ||||||
| File: lstmisc.sty 2023/02/27 1.9 (Carsten Heinz) |  | ||||||
| \c@lstnumber=\count268 |  | ||||||
| \lst@skipnumbers=\count269 |  | ||||||
| \lst@framebox=\box52 |  | ||||||
| ) |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/listings/listings.cfg |  | ||||||
| File: listings.cfg 2023/02/27 1.9 listings configuration |  | ||||||
| )) |  | ||||||
| Package: listings 2023/02/27 1.9 (Carsten Heinz) |  | ||||||
| 
 |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/graphics/color.sty |  | ||||||
| Package: color 2022/01/06 v1.3d Standard LaTeX Color (DPC) |  | ||||||
| 
 |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg |  | ||||||
| File: color.cfg 2016/01/02 v1.6 sample color configuration |  | ||||||
| ) |  | ||||||
| Package color Info: Driver file: pdftex.def on input line 149. |  | ||||||
| 
 |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def |  | ||||||
| File: pdftex.def 2022/09/22 v1.2b Graphics/color driver for pdftex |  | ||||||
| ) |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/graphics/dvipsnam.def |  | ||||||
| File: dvipsnam.def 2016/06/17 v3.0m Driver-dependent file (DPC,SPQR) |  | ||||||
| ) |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/graphics/mathcolor.ltx)) |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty |  | ||||||
| Package: hyperref 2024-01-20 v7.01h Hypertext links for LaTeX |  | ||||||
| 
 |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty |  | ||||||
| Package: iftex 2022/02/03 v1.0f TeX engine tests |  | ||||||
| ) |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty |  | ||||||
| Package: kvsetkeys 2022-10-05 v1.19 Key value parser (HO) |  | ||||||
| ) |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty |  | ||||||
| Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO) |  | ||||||
| ) |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty |  | ||||||
| Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO) |  | ||||||
| 
 |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty |  | ||||||
| Package: ltxcmds 2023-12-04 v1.26 LaTeX kernel commands for general use (HO) |  | ||||||
| ) |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty |  | ||||||
| Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty |  | ||||||
| Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO) |  | ||||||
| ) |  | ||||||
| Package pdftexcmds Info: \pdf@primitive is available. |  | ||||||
| Package pdftexcmds Info: \pdf@ifprimitive is available. |  | ||||||
| Package pdftexcmds Info: \pdfdraftmode found. |  | ||||||
| )) |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty |  | ||||||
| Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO) |  | ||||||
| ) |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty |  | ||||||
| Package: auxhook 2019-12-17 v1.6 Hooks for auxiliary files (HO) |  | ||||||
| ) |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty |  | ||||||
| Package: nameref 2023-11-26 v2.56 Cross-referencing by name of section |  | ||||||
| 
 |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty |  | ||||||
| Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO) |  | ||||||
| ) |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty |  | ||||||
| Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO) |  | ||||||
| 
 |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty |  | ||||||
| Package: kvoptions 2022-06-15 v3.15 Key value format for package options (HO) |  | ||||||
| )) |  | ||||||
| \c@section@level=\count270 |  | ||||||
| ) |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/etoolbox/etoolbox.sty |  | ||||||
| Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW) |  | ||||||
| \etb@tempcnta=\count271 |  | ||||||
| ) |  | ||||||
| \@linkdim=\dimen145 |  | ||||||
| \Hy@linkcounter=\count272 |  | ||||||
| \Hy@pagecounter=\count273 |  | ||||||
| 
 |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def |  | ||||||
| File: pd1enc.def 2024-01-20 v7.01h Hyperref: PDFDocEncoding definition (HO) |  | ||||||
| Now handling font encoding PD1 ... |  | ||||||
| ... no UTF-8 mapping file for font encoding PD1 |  | ||||||
| ) |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty |  | ||||||
| Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO) |  | ||||||
| ) |  | ||||||
| \Hy@SavedSpaceFactor=\count274 |  | ||||||
| 
 |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def |  | ||||||
| File: puenc.def 2024-01-20 v7.01h Hyperref: PDF Unicode definition (HO) |  | ||||||
| Now handling font encoding PU ... |  | ||||||
| ... no UTF-8 mapping file for font encoding PU |  | ||||||
| ) |  | ||||||
| Package hyperref Info: Option `colorlinks' set `true' on input line 4062. |  | ||||||
| Package hyperref Info: Hyper figures OFF on input line 4179. |  | ||||||
| Package hyperref Info: Link nesting OFF on input line 4184. |  | ||||||
| Package hyperref Info: Hyper index ON on input line 4187. |  | ||||||
| Package hyperref Info: Plain pages OFF on input line 4194. |  | ||||||
| Package hyperref Info: Backreferencing OFF on input line 4199. |  | ||||||
| Package hyperref Info: Implicit mode ON; LaTeX internals redefined. |  | ||||||
| Package hyperref Info: Bookmarks ON on input line 4446. |  | ||||||
| \c@Hy@tempcnt=\count275 |  | ||||||
| 
 |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/url/url.sty |  | ||||||
| \Urlmuskip=\muskip16 |  | ||||||
| Package: url 2013/09/16  ver 3.4  Verb mode for urls, etc. |  | ||||||
| ) |  | ||||||
| LaTeX Info: Redefining \url on input line 4784. |  | ||||||
| \XeTeXLinkMargin=\dimen146 |  | ||||||
| 
 |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty |  | ||||||
| Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO) |  | ||||||
| 
 |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty |  | ||||||
| Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO |  | ||||||
| ) |  | ||||||
| )) |  | ||||||
| \Fld@menulength=\count276 |  | ||||||
| \Field@Width=\dimen147 |  | ||||||
| \Fld@charsize=\dimen148 |  | ||||||
| Package hyperref Info: Hyper figures OFF on input line 6063. |  | ||||||
| Package hyperref Info: Link nesting OFF on input line 6068. |  | ||||||
| Package hyperref Info: Hyper index ON on input line 6071. |  | ||||||
| Package hyperref Info: backreferencing OFF on input line 6078. |  | ||||||
| Package hyperref Info: Link coloring ON on input line 6081. |  | ||||||
| Package hyperref Info: Link coloring with OCG OFF on input line 6088. |  | ||||||
| Package hyperref Info: PDF/A mode OFF on input line 6093. |  | ||||||
| 
 |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/base/atbegshi-ltx.sty |  | ||||||
| Package: atbegshi-ltx 2021/01/10 v1.0c Emulation of the original atbegshi |  | ||||||
| package with kernel methods |  | ||||||
| ) |  | ||||||
| \Hy@abspage=\count277 |  | ||||||
| \c@Item=\count278 |  | ||||||
| \c@Hfootnote=\count279 |  | ||||||
| ) |  | ||||||
| Package hyperref Info: Driver (autodetected): hpdftex. |  | ||||||
| 
 |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def |  | ||||||
| File: hpdftex.def 2024-01-20 v7.01h Hyperref driver for pdfTeX |  | ||||||
| 
 |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/base/atveryend-ltx.sty |  | ||||||
| Package: atveryend-ltx 2020/08/19 v1.0a Emulation of the original atveryend pac |  | ||||||
| kage |  | ||||||
| with kernel methods |  | ||||||
| ) |  | ||||||
| \Fld@listcount=\count280 |  | ||||||
| \c@bookmark@seq@number=\count281 |  | ||||||
| 
 |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty |  | ||||||
| Package: rerunfilecheck 2022-07-10 v1.10 Rerun checks for auxiliary files (HO) |  | ||||||
| 
 |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty |  | ||||||
| Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO) |  | ||||||
| ) |  | ||||||
| Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2 |  | ||||||
| 85. |  | ||||||
| ) |  | ||||||
| \Hy@SectionHShift=\skip50 |  | ||||||
| ) |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def |  | ||||||
| File: l3backend-pdftex.def 2024-01-04 L3 backend support: PDF output (pdfTeX) |  | ||||||
| \l__color_backend_stack_int=\count282 |  | ||||||
| \l__pdf_internal_box=\box53 |  | ||||||
| ) |  | ||||||
| (./tmp.aux) |  | ||||||
| \openout1 = `tmp.aux'. |  | ||||||
| 
 |  | ||||||
| LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 17. |  | ||||||
| LaTeX Font Info:    ... okay on input line 17. |  | ||||||
| LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 17. |  | ||||||
| LaTeX Font Info:    ... okay on input line 17. |  | ||||||
| LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 17. |  | ||||||
| LaTeX Font Info:    ... okay on input line 17. |  | ||||||
| LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 17. |  | ||||||
| LaTeX Font Info:    ... okay on input line 17. |  | ||||||
| LaTeX Font Info:    Checking defaults for TS1/cmr/m/n on input line 17. |  | ||||||
| LaTeX Font Info:    ... okay on input line 17. |  | ||||||
| LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 17. |  | ||||||
| LaTeX Font Info:    ... okay on input line 17. |  | ||||||
| LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 17. |  | ||||||
| LaTeX Font Info:    ... okay on input line 17. |  | ||||||
| LaTeX Font Info:    Checking defaults for PD1/pdf/m/n on input line 17. |  | ||||||
| LaTeX Font Info:    ... okay on input line 17. |  | ||||||
| LaTeX Font Info:    Checking defaults for PU/pdf/m/n on input line 17. |  | ||||||
| LaTeX Font Info:    ... okay on input line 17. |  | ||||||
| \c@lstlisting=\count283 |  | ||||||
|  (/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii |  | ||||||
| [Loading MPS to PDF converter (version 2006.09.02).] |  | ||||||
| \scratchcounter=\count284 |  | ||||||
| \scratchdimen=\dimen149 |  | ||||||
| \scratchbox=\box54 |  | ||||||
| \nofMPsegments=\count285 |  | ||||||
| \nofMParguments=\count286 |  | ||||||
| \everyMPshowfont=\toks19 |  | ||||||
| \MPscratchCnt=\count287 |  | ||||||
| \MPscratchDim=\dimen150 |  | ||||||
| \MPnumerator=\count288 |  | ||||||
| \makeMPintoPDFobject=\count289 |  | ||||||
| \everyMPtoPDFconversion=\toks20 |  | ||||||
| ) |  | ||||||
| Package hyperref Info: Link coloring ON on input line 17. |  | ||||||
|  (./tmp.out) (./tmp.out) |  | ||||||
| \@outlinefile=\write3 |  | ||||||
| \openout3 = `tmp.out'. |  | ||||||
| 
 |  | ||||||
|  (./tmp.toc |  | ||||||
| LaTeX Font Info:    External font `cmex10' loaded for size |  | ||||||
| (Font)              <7> on input line 1. |  | ||||||
| LaTeX Font Info:    External font `cmex10' loaded for size |  | ||||||
| (Font)              <5> on input line 1. |  | ||||||
|  [1 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| {/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}]) |  | ||||||
| \tf@toc=\write4 |  | ||||||
| \openout4 = `tmp.toc'. |  | ||||||
| 
 |  | ||||||
|  [2] |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/listings/lstlang1.sty |  | ||||||
| File: lstlang1.sty 2023/02/27 1.9 listings language file |  | ||||||
| ) |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/listings/lstlang1.sty |  | ||||||
| File: lstlang1.sty 2023/02/27 1.9 listings language file |  | ||||||
| ) |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/listings/lstmisc.sty |  | ||||||
| File: lstmisc.sty 2023/02/27 1.9 (Carsten Heinz) |  | ||||||
| ) |  | ||||||
| Package hyperref Info: bookmark level for unknown lstlisting defaults to 0 on i |  | ||||||
| nput line 22. |  | ||||||
|  (./__call.cpp |  | ||||||
| LaTeX Font Info:    Font shape `OT1/cmtt/bx/n' in size <8> not available |  | ||||||
| (Font)              Font shape `OT1/cmtt/m/n' tried instead on input line 1. |  | ||||||
| 
 |  | ||||||
| [3]) [4] (./__call.h) [5] (./__comment.cpp) [6] (./__comment.h) [7] |  | ||||||
| (./__dotag.cpp) [8] (./__dotag.h) [9] (./__dump.cpp) [10] (./__dump.h) [11] |  | ||||||
| (./__for.cpp) [12] (./__for.cpp~) [13] (./__for.h) [14] (./Global.cpp [15] |  | ||||||
| LaTeX Font Info:    Trying to load font information for TS1+cmtt on input line  |  | ||||||
| 63. |  | ||||||
| 
 |  | ||||||
| (/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmtt.fd |  | ||||||
| File: ts1cmtt.fd 2023/04/13 v2.5m Standard LaTeX font definitions |  | ||||||
| ) |  | ||||||
| Underfull \vbox (badness 10000) has occurred while \output is active [] |  | ||||||
| 
 |  | ||||||
|  [16{/usr/share/texmf/fonts/enc/dvips/cm-super/cm-super-ts1.enc}] |  | ||||||
| Underfull \vbox (badness 10000) has occurred while \output is active [] |  | ||||||
| 
 |  | ||||||
|  [17]) |  | ||||||
| [18] (./Global.h) [19] (./__header.cpp) [20] (./__header.h) [21] (./__if.cpp) |  | ||||||
| [22] (./__if.h) [23] (./__ifrow.cpp) [24] (./__ifrow.h) [25] (./__include.cpp) |  | ||||||
| [26] (./__include.h) [27] (./jet-2.0.cpp) [28] (./__jet.cpp) [29] (./__jet.h) |  | ||||||
| [30] (./KeywordValue.cpp) [31] (./KeywordValue.h) [32] (./Modifiers.cpp |  | ||||||
| [33] |  | ||||||
| Underfull \vbox (badness 10000) has occurred while \output is active [] |  | ||||||
| 
 |  | ||||||
|  [34]) |  | ||||||
| [35] (./Modifiers.h) [36] (./__mysql.cpp [37]) [38] (./__mysql.h) [39] |  | ||||||
| (./Operand.cpp [40] |  | ||||||
| Underfull \vbox (badness 10000) has occurred while \output is active [] |  | ||||||
| 
 |  | ||||||
|  [41] |  | ||||||
| Underfull \vbox (badness 10000) has occurred while \output is active [] |  | ||||||
| 
 |  | ||||||
|  [42] |  | ||||||
| Underfull \vbox (badness 10000) has occurred while \output is active [] |  | ||||||
| 
 |  | ||||||
|  [43] |  | ||||||
| Underfull \vbox (badness 10000) has occurred while \output is active [] |  | ||||||
| 
 |  | ||||||
|  [44]) |  | ||||||
| [45] (./Operand.h) [46] (./__read.cpp) [47] (./__read.h) [48] (./__set.cpp |  | ||||||
| [49]) [50] (./__set.h) [51] (./__sql.cpp) [52] (./__sql.h) [53] (./__stream.cpp |  | ||||||
| ) [54] (./__stream.h) [55] (./__system.cpp) [56] (./__system.h) [57] |  | ||||||
| (./__tag.cpp) [58] (./Tag.cpp [59] |  | ||||||
| Overfull \hbox (25.20828pt too wide) in paragraph at lines 53--54 |  | ||||||
| [][][][]  |  | ||||||
|  [] |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Underfull \vbox (badness 10000) has occurred while \output is active [] |  | ||||||
| 
 |  | ||||||
|  [60] |  | ||||||
| Underfull \vbox (badness 10000) has occurred while \output is active [] |  | ||||||
| 
 |  | ||||||
|  [61] |  | ||||||
| Underfull \vbox (badness 10000) has occurred while \output is active [] |  | ||||||
| 
 |  | ||||||
|  [62] |  | ||||||
| Underfull \vbox (badness 10000) has occurred while \output is active [] |  | ||||||
| 
 |  | ||||||
|  [63] |  | ||||||
| Underfull \vbox (badness 10000) has occurred while \output is active [] |  | ||||||
| 
 |  | ||||||
|  [64]) |  | ||||||
| [65] (./__tag.h) [66] (./Tag.h [67]) [68] (./__until.cpp [69]) [70] |  | ||||||
| (./__until.h) [71] (./__while.cpp [72]) [73] (./__whiledir.cpp [74]) [75] |  | ||||||
| (./__whiledir.h) [76] (./__while.h) [77] (./__whilerow.cpp) [78] |  | ||||||
| (./__whilerow.h) [79] (./__write.cpp [80]) [81] (./__write.h) [82] (./tmp.aux) |  | ||||||
|  *********** |  | ||||||
| LaTeX2e <2023-11-01> patch level 1 |  | ||||||
| L3 programming layer <2024-01-22> |  | ||||||
|  *********** |  | ||||||
| Package rerunfilecheck Info: File `tmp.out' has not changed. |  | ||||||
| (rerunfilecheck)             Checksum: 656ADDF09DF2171BE729518C28B77DA0;5682. |  | ||||||
|  )  |  | ||||||
| Here is how much of TeX's memory you used: |  | ||||||
|  13837 strings out of 474222 |  | ||||||
|  208746 string characters out of 5748732 |  | ||||||
|  2316975 words of memory out of 5000000 |  | ||||||
|  33087 multiletter control sequences out of 15000+600000 |  | ||||||
|  560565 words of font info for 45 fonts, out of 8000000 for 9000 |  | ||||||
|  1141 hyphenation exceptions out of 8191 |  | ||||||
|  75i,7n,79p,455b,2210s stack positions out of 10000i,1000n,20000p,200000b,200000s |  | ||||||
| </usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx12.pfb></us |  | ||||||
| r/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmitt10.pfb></usr/sha |  | ||||||
| re/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/share/texl |  | ||||||
| ive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsl10.pfb></usr/share/texlive/te |  | ||||||
| xmf-dist/fonts/type1/public/amsfonts/cm/cmtt8.pfb></usr/share/texmf/fonts/type1 |  | ||||||
| /public/cm-super/sftt0800.pfb> |  | ||||||
| Output written on tmp.pdf (82 pages, 284714 bytes). |  | ||||||
| PDF statistics: |  | ||||||
|  3904 PDF objects out of 4296 (max. 8388607) |  | ||||||
|  3770 compressed objects within 38 object streams |  | ||||||
|  2782 named destinations out of 2984 (max. 500000) |  | ||||||
|  449 words of extra memory for PDF output out of 10000 (max. 10000000) |  | ||||||
| 
 |  | ||||||
							
								
								
									
										56
									
								
								tmp.out
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								tmp.out
									
									
									
									
									
								
							| @ -1,56 +0,0 @@ | |||||||
| \BOOKMARK [1][-]{section.0.1}{\376\377\000\137\000\137\000c\000a\000l\000l\000.\000c\000p\000p}{}% 1 |  | ||||||
| \BOOKMARK [1][-]{section.0.2}{\376\377\000\137\000\137\000c\000a\000l\000l\000.\000h}{}% 2 |  | ||||||
| \BOOKMARK [1][-]{section.0.3}{\376\377\000\137\000\137\000c\000o\000m\000m\000e\000n\000t\000.\000c\000p\000p}{}% 3 |  | ||||||
| \BOOKMARK [1][-]{section.0.4}{\376\377\000\137\000\137\000c\000o\000m\000m\000e\000n\000t\000.\000h}{}% 4 |  | ||||||
| \BOOKMARK [1][-]{section.0.5}{\376\377\000\137\000\137\000d\000o\000t\000a\000g\000.\000c\000p\000p}{}% 5 |  | ||||||
| \BOOKMARK [1][-]{section.0.6}{\376\377\000\137\000\137\000d\000o\000t\000a\000g\000.\000h}{}% 6 |  | ||||||
| \BOOKMARK [1][-]{section.0.7}{\376\377\000\137\000\137\000d\000u\000m\000p\000.\000c\000p\000p}{}% 7 |  | ||||||
| \BOOKMARK [1][-]{section.0.8}{\376\377\000\137\000\137\000d\000u\000m\000p\000.\000h}{}% 8 |  | ||||||
| \BOOKMARK [1][-]{section.0.9}{\376\377\000\137\000\137\000f\000o\000r\000.\000c\000p\000p}{}% 9 |  | ||||||
| \BOOKMARK [1][-]{section.0.10}{\376\377\000\137\000\137\000f\000o\000r\000.\000c\000p\000p\000\040}{}% 10 |  | ||||||
| \BOOKMARK [1][-]{section.0.11}{\376\377\000\137\000\137\000f\000o\000r\000.\000h}{}% 11 |  | ||||||
| \BOOKMARK [1][-]{section.0.12}{\376\377\000G\000l\000o\000b\000a\000l\000.\000c\000p\000p}{}% 12 |  | ||||||
| \BOOKMARK [1][-]{section.0.13}{\376\377\000G\000l\000o\000b\000a\000l\000.\000h}{}% 13 |  | ||||||
| \BOOKMARK [1][-]{section.0.14}{\376\377\000\137\000\137\000h\000e\000a\000d\000e\000r\000.\000c\000p\000p}{}% 14 |  | ||||||
| \BOOKMARK [1][-]{section.0.15}{\376\377\000\137\000\137\000h\000e\000a\000d\000e\000r\000.\000h}{}% 15 |  | ||||||
| \BOOKMARK [1][-]{section.0.16}{\376\377\000\137\000\137\000i\000f\000.\000c\000p\000p}{}% 16 |  | ||||||
| \BOOKMARK [1][-]{section.0.17}{\376\377\000\137\000\137\000i\000f\000.\000h}{}% 17 |  | ||||||
| \BOOKMARK [1][-]{section.0.18}{\376\377\000\137\000\137\000i\000f\000r\000o\000w\000.\000c\000p\000p}{}% 18 |  | ||||||
| \BOOKMARK [1][-]{section.0.19}{\376\377\000\137\000\137\000i\000f\000r\000o\000w\000.\000h}{}% 19 |  | ||||||
| \BOOKMARK [1][-]{section.0.20}{\376\377\000\137\000\137\000i\000n\000c\000l\000u\000d\000e\000.\000c\000p\000p}{}% 20 |  | ||||||
| \BOOKMARK [1][-]{section.0.21}{\376\377\000\137\000\137\000i\000n\000c\000l\000u\000d\000e\000.\000h}{}% 21 |  | ||||||
| \BOOKMARK [1][-]{section.0.22}{\376\377\000j\000e\000t\000-\0002\000.\0000\000.\000c\000p\000p}{}% 22 |  | ||||||
| \BOOKMARK [1][-]{section.0.23}{\376\377\000\137\000\137\000j\000e\000t\000.\000c\000p\000p}{}% 23 |  | ||||||
| \BOOKMARK [1][-]{section.0.24}{\376\377\000\137\000\137\000j\000e\000t\000.\000h}{}% 24 |  | ||||||
| \BOOKMARK [1][-]{section.0.25}{\376\377\000K\000e\000y\000w\000o\000r\000d\000V\000a\000l\000u\000e\000.\000c\000p\000p}{}% 25 |  | ||||||
| \BOOKMARK [1][-]{section.0.26}{\376\377\000K\000e\000y\000w\000o\000r\000d\000V\000a\000l\000u\000e\000.\000h}{}% 26 |  | ||||||
| \BOOKMARK [1][-]{section.0.27}{\376\377\000M\000o\000d\000i\000f\000i\000e\000r\000s\000.\000c\000p\000p}{}% 27 |  | ||||||
| \BOOKMARK [1][-]{section.0.28}{\376\377\000M\000o\000d\000i\000f\000i\000e\000r\000s\000.\000h}{}% 28 |  | ||||||
| \BOOKMARK [1][-]{section.0.29}{\376\377\000\137\000\137\000m\000y\000s\000q\000l\000.\000c\000p\000p}{}% 29 |  | ||||||
| \BOOKMARK [1][-]{section.0.30}{\376\377\000\137\000\137\000m\000y\000s\000q\000l\000.\000h}{}% 30 |  | ||||||
| \BOOKMARK [1][-]{section.0.31}{\376\377\000O\000p\000e\000r\000a\000n\000d\000.\000c\000p\000p}{}% 31 |  | ||||||
| \BOOKMARK [1][-]{section.0.32}{\376\377\000O\000p\000e\000r\000a\000n\000d\000.\000h}{}% 32 |  | ||||||
| \BOOKMARK [1][-]{section.0.33}{\376\377\000\137\000\137\000r\000e\000a\000d\000.\000c\000p\000p}{}% 33 |  | ||||||
| \BOOKMARK [1][-]{section.0.34}{\376\377\000\137\000\137\000r\000e\000a\000d\000.\000h}{}% 34 |  | ||||||
| \BOOKMARK [1][-]{section.0.35}{\376\377\000\137\000\137\000s\000e\000t\000.\000c\000p\000p}{}% 35 |  | ||||||
| \BOOKMARK [1][-]{section.0.36}{\376\377\000\137\000\137\000s\000e\000t\000.\000h}{}% 36 |  | ||||||
| \BOOKMARK [1][-]{section.0.37}{\376\377\000\137\000\137\000s\000q\000l\000.\000c\000p\000p}{}% 37 |  | ||||||
| \BOOKMARK [1][-]{section.0.38}{\376\377\000\137\000\137\000s\000q\000l\000.\000h}{}% 38 |  | ||||||
| \BOOKMARK [1][-]{section.0.39}{\376\377\000\137\000\137\000s\000t\000r\000e\000a\000m\000.\000c\000p\000p}{}% 39 |  | ||||||
| \BOOKMARK [1][-]{section.0.40}{\376\377\000\137\000\137\000s\000t\000r\000e\000a\000m\000.\000h}{}% 40 |  | ||||||
| \BOOKMARK [1][-]{section.0.41}{\376\377\000\137\000\137\000s\000y\000s\000t\000e\000m\000.\000c\000p\000p}{}% 41 |  | ||||||
| \BOOKMARK [1][-]{section.0.42}{\376\377\000\137\000\137\000s\000y\000s\000t\000e\000m\000.\000h}{}% 42 |  | ||||||
| \BOOKMARK [1][-]{section.0.43}{\376\377\000\137\000\137\000t\000a\000g\000.\000c\000p\000p}{}% 43 |  | ||||||
| \BOOKMARK [1][-]{section.0.44}{\376\377\000T\000a\000g\000.\000c\000p\000p}{}% 44 |  | ||||||
| \BOOKMARK [1][-]{section.0.45}{\376\377\000\137\000\137\000t\000a\000g\000.\000h}{}% 45 |  | ||||||
| \BOOKMARK [1][-]{section.0.46}{\376\377\000T\000a\000g\000.\000h}{}% 46 |  | ||||||
| \BOOKMARK [1][-]{section.0.47}{\376\377\000\137\000\137\000u\000n\000t\000i\000l\000.\000c\000p\000p}{}% 47 |  | ||||||
| \BOOKMARK [1][-]{section.0.48}{\376\377\000\137\000\137\000u\000n\000t\000i\000l\000.\000h}{}% 48 |  | ||||||
| \BOOKMARK [1][-]{section.0.49}{\376\377\000\137\000\137\000w\000h\000i\000l\000e\000.\000c\000p\000p}{}% 49 |  | ||||||
| \BOOKMARK [1][-]{section.0.50}{\376\377\000\137\000\137\000w\000h\000i\000l\000e\000d\000i\000r\000.\000c\000p\000p}{}% 50 |  | ||||||
| \BOOKMARK [1][-]{section.0.51}{\376\377\000\137\000\137\000w\000h\000i\000l\000e\000d\000i\000r\000.\000h}{}% 51 |  | ||||||
| \BOOKMARK [1][-]{section.0.52}{\376\377\000\137\000\137\000w\000h\000i\000l\000e\000.\000h}{}% 52 |  | ||||||
| \BOOKMARK [1][-]{section.0.53}{\376\377\000\137\000\137\000w\000h\000i\000l\000e\000r\000o\000w\000.\000c\000p\000p}{}% 53 |  | ||||||
| \BOOKMARK [1][-]{section.0.54}{\376\377\000\137\000\137\000w\000h\000i\000l\000e\000r\000o\000w\000.\000h}{}% 54 |  | ||||||
| \BOOKMARK [1][-]{section.0.55}{\376\377\000\137\000\137\000w\000r\000i\000t\000e\000.\000c\000p\000p}{}% 55 |  | ||||||
| \BOOKMARK [1][-]{section.0.56}{\376\377\000\137\000\137\000w\000r\000i\000t\000e\000.\000h}{}% 56 |  | ||||||
							
								
								
									
										56
									
								
								tmp.toc
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								tmp.toc
									
									
									
									
									
								
							| @ -1,56 +0,0 @@ | |||||||
| \contentsline {section}{\numberline {0.1}\_\_call.cpp}{3}{section.0.1}% |  | ||||||
| \contentsline {section}{\numberline {0.2}\_\_call.h}{5}{section.0.2}% |  | ||||||
| \contentsline {section}{\numberline {0.3}\_\_comment.cpp}{6}{section.0.3}% |  | ||||||
| \contentsline {section}{\numberline {0.4}\_\_comment.h}{7}{section.0.4}% |  | ||||||
| \contentsline {section}{\numberline {0.5}\_\_dotag.cpp}{8}{section.0.5}% |  | ||||||
| \contentsline {section}{\numberline {0.6}\_\_dotag.h}{9}{section.0.6}% |  | ||||||
| \contentsline {section}{\numberline {0.7}\_\_dump.cpp}{10}{section.0.7}% |  | ||||||
| \contentsline {section}{\numberline {0.8}\_\_dump.h}{11}{section.0.8}% |  | ||||||
| \contentsline {section}{\numberline {0.9}\_\_for.cpp}{12}{section.0.9}% |  | ||||||
| \contentsline {section}{\numberline {0.10}\_\_for.cpp~}{13}{section.0.10}% |  | ||||||
| \contentsline {section}{\numberline {0.11}\_\_for.h}{14}{section.0.11}% |  | ||||||
| \contentsline {section}{\numberline {0.12}Global.cpp}{15}{section.0.12}% |  | ||||||
| \contentsline {section}{\numberline {0.13}Global.h}{19}{section.0.13}% |  | ||||||
| \contentsline {section}{\numberline {0.14}\_\_header.cpp}{20}{section.0.14}% |  | ||||||
| \contentsline {section}{\numberline {0.15}\_\_header.h}{21}{section.0.15}% |  | ||||||
| \contentsline {section}{\numberline {0.16}\_\_if.cpp}{22}{section.0.16}% |  | ||||||
| \contentsline {section}{\numberline {0.17}\_\_if.h}{23}{section.0.17}% |  | ||||||
| \contentsline {section}{\numberline {0.18}\_\_ifrow.cpp}{24}{section.0.18}% |  | ||||||
| \contentsline {section}{\numberline {0.19}\_\_ifrow.h}{25}{section.0.19}% |  | ||||||
| \contentsline {section}{\numberline {0.20}\_\_include.cpp}{26}{section.0.20}% |  | ||||||
| \contentsline {section}{\numberline {0.21}\_\_include.h}{27}{section.0.21}% |  | ||||||
| \contentsline {section}{\numberline {0.22}jet-2.0.cpp}{28}{section.0.22}% |  | ||||||
| \contentsline {section}{\numberline {0.23}\_\_jet.cpp}{29}{section.0.23}% |  | ||||||
| \contentsline {section}{\numberline {0.24}\_\_jet.h}{30}{section.0.24}% |  | ||||||
| \contentsline {section}{\numberline {0.25}KeywordValue.cpp}{31}{section.0.25}% |  | ||||||
| \contentsline {section}{\numberline {0.26}KeywordValue.h}{32}{section.0.26}% |  | ||||||
| \contentsline {section}{\numberline {0.27}Modifiers.cpp}{33}{section.0.27}% |  | ||||||
| \contentsline {section}{\numberline {0.28}Modifiers.h}{36}{section.0.28}% |  | ||||||
| \contentsline {section}{\numberline {0.29}\_\_mysql.cpp}{37}{section.0.29}% |  | ||||||
| \contentsline {section}{\numberline {0.30}\_\_mysql.h}{39}{section.0.30}% |  | ||||||
| \contentsline {section}{\numberline {0.31}Operand.cpp}{40}{section.0.31}% |  | ||||||
| \contentsline {section}{\numberline {0.32}Operand.h}{46}{section.0.32}% |  | ||||||
| \contentsline {section}{\numberline {0.33}\_\_read.cpp}{47}{section.0.33}% |  | ||||||
| \contentsline {section}{\numberline {0.34}\_\_read.h}{48}{section.0.34}% |  | ||||||
| \contentsline {section}{\numberline {0.35}\_\_set.cpp}{49}{section.0.35}% |  | ||||||
| \contentsline {section}{\numberline {0.36}\_\_set.h}{51}{section.0.36}% |  | ||||||
| \contentsline {section}{\numberline {0.37}\_\_sql.cpp}{52}{section.0.37}% |  | ||||||
| \contentsline {section}{\numberline {0.38}\_\_sql.h}{53}{section.0.38}% |  | ||||||
| \contentsline {section}{\numberline {0.39}\_\_stream.cpp}{54}{section.0.39}% |  | ||||||
| \contentsline {section}{\numberline {0.40}\_\_stream.h}{55}{section.0.40}% |  | ||||||
| \contentsline {section}{\numberline {0.41}\_\_system.cpp}{56}{section.0.41}% |  | ||||||
| \contentsline {section}{\numberline {0.42}\_\_system.h}{57}{section.0.42}% |  | ||||||
| \contentsline {section}{\numberline {0.43}\_\_tag.cpp}{58}{section.0.43}% |  | ||||||
| \contentsline {section}{\numberline {0.44}Tag.cpp}{59}{section.0.44}% |  | ||||||
| \contentsline {section}{\numberline {0.45}\_\_tag.h}{66}{section.0.45}% |  | ||||||
| \contentsline {section}{\numberline {0.46}Tag.h}{67}{section.0.46}% |  | ||||||
| \contentsline {section}{\numberline {0.47}\_\_until.cpp}{69}{section.0.47}% |  | ||||||
| \contentsline {section}{\numberline {0.48}\_\_until.h}{71}{section.0.48}% |  | ||||||
| \contentsline {section}{\numberline {0.49}\_\_while.cpp}{72}{section.0.49}% |  | ||||||
| \contentsline {section}{\numberline {0.50}\_\_whiledir.cpp}{74}{section.0.50}% |  | ||||||
| \contentsline {section}{\numberline {0.51}\_\_whiledir.h}{76}{section.0.51}% |  | ||||||
| \contentsline {section}{\numberline {0.52}\_\_while.h}{77}{section.0.52}% |  | ||||||
| \contentsline {section}{\numberline {0.53}\_\_whilerow.cpp}{78}{section.0.53}% |  | ||||||
| \contentsline {section}{\numberline {0.54}\_\_whilerow.h}{79}{section.0.54}% |  | ||||||
| \contentsline {section}{\numberline {0.55}\_\_write.cpp}{80}{section.0.55}% |  | ||||||
| \contentsline {section}{\numberline {0.56}\_\_write.h}{82}{section.0.56}% |  | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 brad Arant
						brad Arant