<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://pickwiki.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Stuboy</id>
	<title>Pickwiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://pickwiki.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Stuboy"/>
	<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php/Special:Contributions/Stuboy"/>
	<updated>2026-04-28T20:21:08Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://pickwiki.org/index.php?title=URLEncode&amp;diff=2603</id>
		<title>URLEncode</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=URLEncode&amp;diff=2603"/>
		<updated>2018-07-06T06:44:12Z</updated>

		<summary type="html">&lt;p&gt;Stuboy: Simplified it&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HomePage&amp;gt;&amp;gt;SourceCode&amp;gt;&amp;gt;BasicSource&amp;gt;&amp;gt;&amp;lt;nowiki&amp;gt;URLEncode&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a function to correctly URLEncode a string.&amp;lt;br&amp;gt;&lt;br /&gt;
URL encoding of a character consists of a &amp;quot;%&amp;quot; symbol, followed by the two-digit hexadecimal representation (case-insensitive) of the ISO-Latin code point for the character.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References:&amp;lt;br&amp;gt;&lt;br /&gt;
See http://www.gbiv.com/protocols/uri/rfc/rfc3986.html#characters&amp;lt;br&amp;gt;&lt;br /&gt;
See http://www.permadi.com/tutorial/urlEncoding&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
function urlEncode(param)&lt;br /&gt;
   equ eSafeChars to &#039;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.~&#039;&lt;br /&gt;
   string = param&amp;lt;1&amp;gt;&lt;br /&gt;
   flag   = param&amp;lt;2&amp;gt; + 0&lt;br /&gt;
   nstring = &#039;&#039;&lt;br /&gt;
   max = len(string)&lt;br /&gt;
   for i = 1 to max&lt;br /&gt;
      if flag then&lt;br /&gt;
      *// decode&lt;br /&gt;
         if string[i,3] match &#039;&amp;quot;%&amp;quot;2X&#039; then&lt;br /&gt;
            nstring := oconv(string[i+1,2],&#039;my&#039;)&lt;br /&gt;
            i += 2&lt;br /&gt;
         end else&lt;br /&gt;
            nstring := string[i,1]&lt;br /&gt;
         end&lt;br /&gt;
      end else&lt;br /&gt;
      *// encode&lt;br /&gt;
         if index(eSafeChars,string[i,1],1) then&lt;br /&gt;
            nstring := string[i,1]&lt;br /&gt;
         end else&lt;br /&gt;
            nstring := &#039;%&#039;:iconv(string[i,1],&#039;my&#039;)&lt;br /&gt;
         end&lt;br /&gt;
      end&lt;br /&gt;
   next i&lt;br /&gt;
   &lt;br /&gt;
return(nstring)&lt;br /&gt;
the:end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HomePage&amp;gt;&amp;gt;SourceCode&amp;gt;&amp;gt;BasicSource&amp;gt;&amp;gt;&amp;lt;nowiki&amp;gt;URLEncode&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stuboy</name></author>
	</entry>
	<entry>
		<id>https://pickwiki.org/index.php?title=CallHTTPWithSSL&amp;diff=2604</id>
		<title>CallHTTPWithSSL</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=CallHTTPWithSSL&amp;diff=2604"/>
		<updated>2018-06-22T16:26:23Z</updated>

		<summary type="html">&lt;p&gt;Stuboy: removed annoying  &amp;amp;  from pre areas&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Priceless example!&lt;br /&gt;
&lt;br /&gt;
Managed to connect to https://www-927.ibm.com/software/data/u2/support/u2techconnect/&lt;br /&gt;
by also changing...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      X.DEPTH = 1 ;* Changed from 0 to 1 to allow signed by CA&lt;br /&gt;
      X.SERVER.OR.CLIENT = 2 ;* CLIENT&lt;br /&gt;
      X.RTN.CODE = set[[AuthenticationDepth]](X.CONTEXT, X.DEPTH, X.SERVER.OR.CLIENT)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and using the &#039;Equifax Secure Certificate Authority&#039; certificate instead of one generated by java keytool. I looked in the protocol log to discover that the equifax certificate was required:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
01/20/2004 18:14:51 SSL Certificate Verification:              &lt;br /&gt;
depth: 0                                                       &lt;br /&gt;
subject: [[/C]]=CA[[/O]]=IBM[[/CN]]=www-927.ibm.com                        &lt;br /&gt;
issuer: [[/C]]=US[[/O]]=Equifax[[/OU]]=Equifax Secure Certificate Authority&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I&#039;m on xp, so used &lt;br /&gt;
start &amp;gt; run mmc&lt;br /&gt;
file &amp;gt; add/remove snap in &amp;gt; certificates&lt;br /&gt;
certificates &amp;gt; trusted root cas &amp;gt; equifax&lt;br /&gt;
action &amp;gt; all tasks &amp;gt; export &lt;br /&gt;
&lt;br /&gt;
to get an equifax.cer certificate file instead of wendy&#039;s wsmoak_tomcat.cer, but i imagine these are available on the web somewhere - would be a lot easier if IBM included all the standard root CA files somewhere.&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
Simon Lewington&lt;br /&gt;
ud@simonl.free-online.co.uk&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fixed!  IBM said to use &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      X.USED.AS=&amp;quot;2&amp;quot; ;* Used as an issuer certificate&lt;br /&gt;
      X.FORMAT=&amp;quot;2&amp;quot; ;* DER format&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in the code below.  (Both of those used to be &amp;quot;1&amp;quot; when I started this.)&lt;br /&gt;
&lt;br /&gt;
I re-read the manual, and I still don&#039;t know enough about SSL to have figured that out.&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
Wendy Smoak&lt;br /&gt;
wsmoak@asu.edu&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Ian, yes, there&#039;s a reason.  This is a simple test but eventually I need to POST over HTTPS to a third party.  I can already do it over HTTP, but when I change to HTTPS, it breaks.  So I switched to simple test code to see if I could find the problem.&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
Wendy&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Wendy, is there are reason to do it from Basic?  (other than for fun :-)  cURL can download https&lt;br /&gt;
&lt;br /&gt;
* http://hpux.cs.utah.edu/hppd/hpux/Networking/WWW/curl-7.9.8/&lt;br /&gt;
* http://curl.haxx.se/&lt;br /&gt;
&lt;br /&gt;
you could do&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EXECUTE &amp;quot;!curl -k -o .[[/MYDIR/FNAME]] https://www.example.com&amp;quot;&lt;br /&gt;
OPEN &#039;MYDIR&#039; TO MYDIR ELSE STOP 201,&#039;MYDIR&#039;&lt;br /&gt;
READ R FROM MYDIR, &#039;FNAME&#039; ELSE STOP &#039;https get did not work&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Does anyone know where the documentation for createSecureRequest() is?  It&#039;s not in the [[UniBasic]] Extensions manual...&lt;br /&gt;
&lt;br /&gt;
Sample [[UniBasic]] code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* WENDY SMOAK&lt;br /&gt;
&lt;br /&gt;
      EQUATE CRLF TO CHAR(013):CHAR(010)&lt;br /&gt;
&lt;br /&gt;
      X.LOG.FILE = &#039;XWDS.HTTP.LOG&#039;&lt;br /&gt;
      X.LOG.ACTION = &#039;ON&#039;&lt;br /&gt;
      X.LOG.LEVEL = &#039;10&#039;&lt;br /&gt;
      X.RTN.CODE = protocolLogging(X.LOG.FILE, X.LOG.ACTION, X.LOG.LEVEL)&lt;br /&gt;
      CRT &#039;protocolLogging: &#039;:X.RTN.CODE&lt;br /&gt;
               &lt;br /&gt;
      X.RTN.CODE = createSecurityContext(X.CONTEXT, &#039;&#039;)&lt;br /&gt;
      CRT &#039;createSecurityContext: &#039;:X.RTN.CODE&lt;br /&gt;
&lt;br /&gt;
      X.CERT.PATH=&amp;quot;wsmoak_tomcat.cer&amp;quot;&lt;br /&gt;
      ;* changed next 2 lines from 1 to 2 per IBM&lt;br /&gt;
      X.USED.AS=&amp;quot;2&amp;quot; ;* Used as an issuer certificate&lt;br /&gt;
      X.FORMAT=&amp;quot;2&amp;quot; ;* DER format&lt;br /&gt;
      X.ALGORITHM=&amp;quot;1&amp;quot; ;* RSA key&lt;br /&gt;
      X.RTN.CODE = addCertificate(X.CERT.PATH, X.USED.AS, X.FORMAT, X.ALGORITHM, X.CONTEXT)&lt;br /&gt;
      CRT &#039;addCertificate: &#039;:X.RTN.CODE&lt;br /&gt;
&lt;br /&gt;
      X.DEPTH = 0&lt;br /&gt;
      X.SERVER.OR.CLIENT = 2 ;* CLIENT&lt;br /&gt;
      X.RTN.CODE = setAuthenticationDepth(X.CONTEXT, X.DEPTH, X.SERVER.OR.CLIENT)&lt;br /&gt;
      CRT &#039;setAuthenticationDepth: &#039;:X.RTN.CODE&lt;br /&gt;
&lt;br /&gt;
      X.RTN.CODE = showSecurityContext(X.CONTEXT,X.CONFIG.INFO)&lt;br /&gt;
      CRT &#039;showSecurityContext: &#039;:X.RTN.CODE&lt;br /&gt;
      SWAP @AM WITH CRLF IN X.CONFIG.INFO&lt;br /&gt;
      CRT X.CONFIG.INFO&lt;br /&gt;
&lt;br /&gt;
      URL=&amp;quot;https://your.server.here/index.html&amp;quot;&lt;br /&gt;
      HTTP.METHOD=&amp;quot;POST&amp;quot;&lt;br /&gt;
      X.RTN.CODE = createSecureRequest(URL,HTTP.METHOD,X.HANDLE,X.CONTEXT)&lt;br /&gt;
      CRT &#039;createSecureRequest: &#039;:X.RTN.CODE&lt;br /&gt;
&lt;br /&gt;
      X.RTN.CODE = submitRequest(X.HANDLE,&#039;&#039;,&#039;&#039;,X.RESPONSE.HEADERS,X.RESPONSE.DATA,X.HTTP.STATUS)&lt;br /&gt;
      CRT &#039;submitRequest: &#039;:X.RTN.CODE&lt;br /&gt;
&lt;br /&gt;
      CRT &#039;X.RESPONSE.HEADERS = &#039;:X.RESPONSE.HEADERS&lt;br /&gt;
      CRT &#039;X.RESPONSE.DATA = &#039;:X.RESPONSE.DATA&lt;br /&gt;
      CRT &#039;X.HTTP.STATUS = &#039;:X.HTTP.STATUS&lt;br /&gt;
      &lt;br /&gt;
      X.LOG.ACTION = &#039;OFF&#039;&lt;br /&gt;
      X.RTN.CODE = protocolLogging(X.LOG.FILE, X.LOG.ACTION, X.LOG.LEVEL)&lt;br /&gt;
      CRT &#039;protocolLogging: &#039;:X.RTN.CODE                                         &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Certificate&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Certificate I&#039;m using was generated and exported with &#039;keytool&#039;, which is a utility that is distributed with Sun&#039;s JDK, of which I&#039;m using version 1.4.1_02.&lt;br /&gt;
&lt;br /&gt;
http://java.sun.com/j2se/1.4.1/docs/tooldocs/solaris/keytool.html&lt;br /&gt;
&lt;br /&gt;
The web server I&#039;m using is Tomcat 4.1.24, and I followed these directions to enable SSL: http://jakarta.apache.org/tomcat/tomcat-4.1-doc/ssl-howto.html&lt;br /&gt;
&lt;br /&gt;
The original .keystore file was generated with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; keytool -genkey -alias tomcat -keyalg RSA&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then the .cer file was exported with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; keytool -export -alias tomcat -file wsmoak_tomcat.cer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stuboy</name></author>
	</entry>
	<entry>
		<id>https://pickwiki.org/index.php?title=Row2Col_II&amp;diff=2175</id>
		<title>Row2Col II</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=Row2Col_II&amp;diff=2175"/>
		<updated>2010-09-16T03:59:24Z</updated>

		<summary type="html">&lt;p&gt;Stuboy: *&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HomePage&amp;gt;&amp;gt;SourceCode&amp;gt;&amp;gt;BasicSource&amp;gt;&amp;gt;Row2Col_II&lt;br /&gt;
&lt;br /&gt;
This utility can quickly transpose a dynamic array item&#039;s fields into values, and vice versa.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 For example:&lt;br /&gt;
 &lt;br /&gt;
  0001: apple}banana}cantalope                    0001: apple}111}red}0&lt;br /&gt;
  0002: 111}222}333                  becomes      0002: banana}222}green}1&lt;br /&gt;
  0003: red}green}blue                            0003: cantalope}333}blue}0&lt;br /&gt;
  0004: 0}1}0&lt;br /&gt;
&lt;br /&gt;
i.e. 4 fields with 3 values each becomes 3 fields with 4 values each.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function Row2Col(doc)&lt;br /&gt;
   *// Stuart Boydell Sept 2010&lt;br /&gt;
   *// swap x &amp;amp; y axis of an array&lt;br /&gt;
   max    = dcount(doc,@am)&lt;br /&gt;
   newDoc = raise(doc&amp;lt;1&amp;gt;)&lt;br /&gt;
   for i = 2 to max&lt;br /&gt;
      newDoc = splice(newDoc,char(222),raise(doc&amp;lt;i&amp;gt;))&lt;br /&gt;
   next i&lt;br /&gt;
   doc = convert(char(222),@vm,newDoc)&lt;br /&gt;
return(doc)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stuboy</name></author>
	</entry>
	<entry>
		<id>https://pickwiki.org/index.php?title=Row2Col_II&amp;diff=2177</id>
		<title>Row2Col II</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=Row2Col_II&amp;diff=2177"/>
		<updated>2010-09-16T03:56:09Z</updated>

		<summary type="html">&lt;p&gt;Stuboy: *&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;function Row2Col(doc)&lt;br /&gt;
   *// swap x &amp;amp; y axis&lt;br /&gt;
   max    = dcount(doc,@am)&lt;br /&gt;
   newDoc = raise(doc&amp;lt;1&amp;gt;)&lt;br /&gt;
   for i = 2 to max&lt;br /&gt;
      newDoc = splice(newDoc,char(222),raise(doc&amp;lt;i&amp;gt;))&lt;br /&gt;
   next i&lt;br /&gt;
   doc = convert(char(222),@vm,newDoc)&lt;br /&gt;
return(doc)&lt;br /&gt;
end&lt;/div&gt;</summary>
		<author><name>Stuboy</name></author>
	</entry>
	<entry>
		<id>https://pickwiki.org/index.php?title=Beyond_Compare&amp;diff=1555</id>
		<title>Beyond Compare</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=Beyond_Compare&amp;diff=1555"/>
		<updated>2010-06-03T01:03:31Z</updated>

		<summary type="html">&lt;p&gt;Stuboy: *&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Beyond Compare UV Dictionary formatter =&lt;br /&gt;
&lt;br /&gt;
http://farm5.static.flickr.com/4024/4663375640_cb1cf442ba.jpg&lt;br /&gt;
&lt;br /&gt;
*Works with Beyond Compare - allows you to compare most UV dictionary items.&lt;br /&gt;
*Written in Javascript.&lt;br /&gt;
*Save this to c:\program files\Beyond Compare 3\helpers\&amp;lt;nowiki&amp;gt;UVDictCompare.js&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*Setup a new &amp;lt;nowiki&amp;gt;Tools/File&amp;lt;/nowiki&amp;gt; Format for UV Dictionaries. &lt;br /&gt;
:: Under the Conversion tab - conversion drop down select: External Program&lt;br /&gt;
:: Loading: cscript helpers\&amp;lt;nowiki&amp;gt;UVDictCompare.js&amp;lt;/nowiki&amp;gt; %s %t %n&lt;br /&gt;
&lt;br /&gt;
http://farm2.static.flickr.com/1269/4665084040_6bf2fd0799.jpg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// BC-UVDict Compare&lt;br /&gt;
// This script formats a UV dictionary item for compare.&lt;br /&gt;
// It is then opened with Beyond Compare (File Formats, Conversion)&lt;br /&gt;
&lt;br /&gt;
// Stuart Boydell 31-Oct-2009&lt;br /&gt;
&lt;br /&gt;
// 1. The dictionary items to compare are stored in a type19 file in UV&lt;br /&gt;
//    - I-types should have attribute 10 and up deleted to remove compiled binary &#039;stuff&#039;.&lt;br /&gt;
//    - Expects type 19 record to be in the following format:&lt;br /&gt;
//      hostName:@vm:dictPath:@am:dictName:@am:dictId:@am:field(dict&amp;lt;1&amp;gt;,&#039; &#039;,1):@am:system(99):@am:system(19):@am:lower(dictRecord)&lt;br /&gt;
// 2. items opened using Beyond Compare - it &#039;senses&#039; the file type&lt;br /&gt;
// 3. BC invokes this script passing in source &amp;amp; target tmp file specs&lt;br /&gt;
// 4. this script writes the modified version of the dict to the target file&lt;br /&gt;
// 5. BC then compares these files.&lt;br /&gt;
// 6. &amp;lt;&amp;lt;todo&amp;gt;&amp;gt; writeback&lt;br /&gt;
&lt;br /&gt;
var of, oa, fs, ft, i, j, z, zz;&lt;br /&gt;
var _vm = String.fromCharCode(253)&lt;br /&gt;
&lt;br /&gt;
of = new ActiveXObject(&#039;Scripting.FileSystemObject&#039;);&lt;br /&gt;
oa = WScript.Arguments;&lt;br /&gt;
&lt;br /&gt;
// take the source &amp;amp; target arguments from BC&lt;br /&gt;
fs = of.OpenTextFile(oa(0),1,false);&lt;br /&gt;
ft = of.OpenTextFile(oa(1),2,false);&lt;br /&gt;
&lt;br /&gt;
// Read the dict item then pull att 7&lt;br /&gt;
z = fs.ReadAll();&lt;br /&gt;
zz = z.split(&#039;\n&#039;)[6].split(_vm);&lt;br /&gt;
//ft.WriteLine(&#039;File Path:&#039; + oa(2).substr(0,oa(2).indexOf(&#039;//&#039;,10)));&lt;br /&gt;
ft.WriteLine(&#039;File Path:&#039; + z.split(&#039;\n&#039;)[0].split(_vm)[1]);&lt;br /&gt;
ft.WriteLine(&#039;Dict Id  :&#039; + z.split(&#039;\n&#039;)[2]);&lt;br /&gt;
ft.WriteLine(&#039;---&#039;);&lt;br /&gt;
ft.Write(zz.join(&#039;\r\n&#039;));&lt;br /&gt;
&lt;br /&gt;
fs.Close&lt;br /&gt;
ft.Close&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Beyond Compare SB+ Paragraph formatter =&lt;br /&gt;
*Works with Beyond Compare - allows you to compare SB+ Paragraph Processes.&lt;br /&gt;
*Written in Javascript. &lt;br /&gt;
*Save this to c:\program files\Beyond Compare 3\helpers\&amp;lt;nowiki&amp;gt;SBParaCompare.js&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*Setup a new &amp;lt;nowiki&amp;gt;Tools/File&amp;lt;/nowiki&amp;gt; Format for SB Paragraphs. &lt;br /&gt;
:: Under the Conversion tab - conversion drop down select: External Program&lt;br /&gt;
:: Loading: cscript helpers\&amp;lt;nowiki&amp;gt;SBParaCompare.js&amp;lt;/nowiki&amp;gt; %s %t %n&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// BC-SB Paragraph Compare&lt;br /&gt;
// This scripts uses the output from a type 19 process file&lt;br /&gt;
// it is then used with Beyond Compare (File Formats, Conversion)&lt;br /&gt;
&lt;br /&gt;
// Stuart Boydell 21-Dec-2009&lt;br /&gt;
&lt;br /&gt;
// 0. setup a new Tools/File Format for SB Paragraphs. Loading: cscript SBParaCompare.js %s %t %n&lt;br /&gt;
// 1. The paragraph items to compare are stored in a type19 file in U2&lt;br /&gt;
// 2. items are opened using Beyond Compare - it normally &#039;senses&#039; the file type - but you can use the format drop down to force it.&lt;br /&gt;
// 3. BC invokes this script passing in source &amp;amp; target tmp file specs&lt;br /&gt;
// 4. this script writes the modified version of the process to the target file&lt;br /&gt;
// 5. BC then compares these files.&lt;br /&gt;
&lt;br /&gt;
var of, oa, fs, ft, i, j, z, zz, re, lsep, ftyp;&lt;br /&gt;
var _vm = String.fromCharCode(253);&lt;br /&gt;
re = /\r\n/;	// test for windows type newline&lt;br /&gt;
&lt;br /&gt;
of = new ActiveXObject(&#039;Scripting.FileSystemObject&#039;);&lt;br /&gt;
oa = WScript.Arguments;&lt;br /&gt;
&lt;br /&gt;
// take the source &amp;amp; target arguments from BC&lt;br /&gt;
fs = of.OpenTextFile(oa(0),1,false);&lt;br /&gt;
ft = of.OpenTextFile(oa(1),2,false);&lt;br /&gt;
fo = of.OpenTextFile(oa(2),1,false);&lt;br /&gt;
&lt;br /&gt;
// Read the process item then pull att 6&lt;br /&gt;
z  = fs.ReadAll();&lt;br /&gt;
if (re.test(z)){&lt;br /&gt;
   lsep = &amp;quot;\r\n&amp;quot;;&lt;br /&gt;
   ftyp = &amp;quot;Win&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
   lsep = &amp;quot;\n&amp;quot;;&lt;br /&gt;
   ftyp = &amp;quot;Unix&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
zz = z.split(lsep);&lt;br /&gt;
//ft.WriteLine(&#039;File Path:&#039; + oa(2).substr(0,oa(2).indexOf(&#039;//&#039;,10)));&lt;br /&gt;
ft.WriteLine(&#039;Desc:&#039; + zz[1]);&lt;br /&gt;
ft.WriteLine(&#039;Dict:&#039; + zz[4]);&lt;br /&gt;
ft.WriteLine(&#039;LastUpd:&#039; + zz[13]);&lt;br /&gt;
//ft.WriteLine(&#039;F-type:&#039; + ftyp);&lt;br /&gt;
ft.WriteLine(&#039;---&#039;);&lt;br /&gt;
ft.Write(zz[5].split(_vm).join(lsep));&lt;br /&gt;
&lt;br /&gt;
fs.Close&lt;br /&gt;
ft.Close&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beyond Compare SB+ Paragraph Write back Script =&lt;br /&gt;
*Works with Beyond Compare - allows you to write back edits.&lt;br /&gt;
*Written in Javascript. &lt;br /&gt;
*Save this to c:\program files\Beyond Compare 3\helpers\&amp;lt;nowiki&amp;gt;SBParaWriteback.js&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:: Under the Conversion tab - disable editing &amp;lt;off&amp;gt;&lt;br /&gt;
:: Saving: cscript helpers\&amp;lt;nowiki&amp;gt;SBParaWriteback.js&amp;lt;/nowiki&amp;gt; %s %t %n&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// BC-SB Paragraph Compare - Write back&lt;br /&gt;
// This writes back to a type 19 process file&lt;br /&gt;
// it is then used with Beyond Compare (File Formats, Conversion)&lt;br /&gt;
&lt;br /&gt;
// Stuart Boydell 21-Dec-2009&lt;br /&gt;
&lt;br /&gt;
var of, oa, fs, ft, i, j, z, zz, lsep, re;&lt;br /&gt;
var _vm = String.fromCharCode(253);&lt;br /&gt;
re = /\r\n/;	// test for windows type newline&lt;br /&gt;
&lt;br /&gt;
of = new ActiveXObject(&#039;Scripting.FileSystemObject&#039;);&lt;br /&gt;
oa = WScript.Arguments;&lt;br /&gt;
&lt;br /&gt;
// take the source &amp;amp; target arguments from BC&lt;br /&gt;
fs = of.OpenTextFile(oa(0),1,false);&lt;br /&gt;
ft = of.OpenTextFile(oa(1),2,false);&lt;br /&gt;
fo = of.OpenTextFile(oa(2),1,false);&lt;br /&gt;
&lt;br /&gt;
// Read the process item then pull att 6&lt;br /&gt;
z  = fo.ReadAll();&lt;br /&gt;
if (re.test(z)){&lt;br /&gt;
   lsep = &amp;quot;\r\n&amp;quot;;&lt;br /&gt;
   ftyp = &amp;quot;Win&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
   lsep = &amp;quot;\n&amp;quot;;&lt;br /&gt;
   ftyp = &amp;quot;Unix&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
tt = z.split(lsep);&lt;br /&gt;
zz = fs.ReadAll().split(lsep);&lt;br /&gt;
tt[1] = zz[0].split(&#039;:&#039;)[1];&lt;br /&gt;
tt[2] = &#039;&#039;;&lt;br /&gt;
tt[3] = &#039;&#039;;&lt;br /&gt;
tt[4] = zz[1].split(&#039;:&#039;)[1];&lt;br /&gt;
tt[5] = zz.splice(4,zz.length).join(_vm);&lt;br /&gt;
ft.Write(tt.join(lsep));&lt;br /&gt;
&lt;br /&gt;
fs.Close&lt;br /&gt;
ft.Close&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stuboy</name></author>
	</entry>
	<entry>
		<id>https://pickwiki.org/index.php?title=Beyond_Compare&amp;diff=1557</id>
		<title>Beyond Compare</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=Beyond_Compare&amp;diff=1557"/>
		<updated>2009-12-25T13:10:44Z</updated>

		<summary type="html">&lt;p&gt;Stuboy: *&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Beyond Compare SB+ Paragraph formatter =&lt;br /&gt;
*Works with Beyond Compare - allows you to compare SB+ Paragraph Processes.&lt;br /&gt;
*Written in Javascript. &lt;br /&gt;
*Save this to c:\program files\Beyond Compare 3\helpers\&amp;lt;nowiki&amp;gt;SBParaCompare.js&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*Setup a new &amp;lt;nowiki&amp;gt;Tools/File&amp;lt;/nowiki&amp;gt; Format for SB Paragraphs. &lt;br /&gt;
:: Under the Conversion tab - conversion drop down select: External Program&lt;br /&gt;
:: Loading: cscript helpers\&amp;lt;nowiki&amp;gt;SBParaCompare.js&amp;lt;/nowiki&amp;gt; %s %t %n&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// BC-SB Paragraph Compare&lt;br /&gt;
// This scripts uses the output from a type 19 process file&lt;br /&gt;
// it is then used with Beyond Compare (File Formats, Conversion)&lt;br /&gt;
&lt;br /&gt;
// Stuart Boydell 21-Dec-2009&lt;br /&gt;
&lt;br /&gt;
// 0. setup a new Tools/File Format for SB Paragraphs. Loading: cscript SBParaCompare.js %s %t %n&lt;br /&gt;
// 1. The paragraph items to compare are stored in a type19 file in U2&lt;br /&gt;
// 2. items are opened using Beyond Compare - it normally &#039;senses&#039; the file type - but you can use the format drop down to force it.&lt;br /&gt;
// 3. BC invokes this script passing in source &amp;amp; target tmp file specs&lt;br /&gt;
// 4. this script writes the modified version of the process to the target file&lt;br /&gt;
// 5. BC then compares these files.&lt;br /&gt;
&lt;br /&gt;
var of, oa, fs, ft, i, j, z, zz, re, lsep, ftyp;&lt;br /&gt;
var _vm = String.fromCharCode(253);&lt;br /&gt;
re = /\r\n/;	// test for windows type newline&lt;br /&gt;
&lt;br /&gt;
of = new ActiveXObject(&#039;Scripting.FileSystemObject&#039;);&lt;br /&gt;
oa = WScript.Arguments;&lt;br /&gt;
&lt;br /&gt;
// take the source &amp;amp; target arguments from BC&lt;br /&gt;
fs = of.OpenTextFile(oa(0),1,false);&lt;br /&gt;
ft = of.OpenTextFile(oa(1),2,false);&lt;br /&gt;
fo = of.OpenTextFile(oa(2),1,false);&lt;br /&gt;
&lt;br /&gt;
// Read the process item then pull att 6&lt;br /&gt;
z  = fs.ReadAll();&lt;br /&gt;
if (re.test(z)){&lt;br /&gt;
   lsep = &amp;quot;\r\n&amp;quot;;&lt;br /&gt;
   ftyp = &amp;quot;Win&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
   lsep = &amp;quot;\n&amp;quot;;&lt;br /&gt;
   ftyp = &amp;quot;Unix&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
zz = z.split(lsep);&lt;br /&gt;
//ft.WriteLine(&#039;File Path:&#039; + oa(2).substr(0,oa(2).indexOf(&#039;//&#039;,10)));&lt;br /&gt;
ft.WriteLine(&#039;Desc:&#039; + zz[1]);&lt;br /&gt;
ft.WriteLine(&#039;Dict:&#039; + zz[4]);&lt;br /&gt;
ft.WriteLine(&#039;LastUpd:&#039; + zz[13]);&lt;br /&gt;
//ft.WriteLine(&#039;F-type:&#039; + ftyp);&lt;br /&gt;
ft.WriteLine(&#039;---&#039;);&lt;br /&gt;
ft.Write(zz[5].split(_vm).join(lsep));&lt;br /&gt;
&lt;br /&gt;
fs.Close&lt;br /&gt;
ft.Close&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beyond Compare SB+ Paragraph Write back Script =&lt;br /&gt;
*Works with Beyond Compare - allows you to write back edits.&lt;br /&gt;
*Written in Javascript. &lt;br /&gt;
*Save this to c:\program files\Beyond Compare 3\helpers\&amp;lt;nowiki&amp;gt;SBParaWriteback.js&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:: Under the Conversion tab - disable editing &amp;lt;off&amp;gt;&lt;br /&gt;
:: Saving: cscript helpers\&amp;lt;nowiki&amp;gt;SBParaWriteback.js&amp;lt;/nowiki&amp;gt; %s %t %n&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// BC-SB Paragraph Compare - Write back&lt;br /&gt;
// This writes back to a type 19 process file&lt;br /&gt;
// it is then used with Beyond Compare (File Formats, Conversion)&lt;br /&gt;
&lt;br /&gt;
// Stuart Boydell 21-Dec-2009&lt;br /&gt;
&lt;br /&gt;
var of, oa, fs, ft, i, j, z, zz, lsep, re;&lt;br /&gt;
var _vm = String.fromCharCode(253);&lt;br /&gt;
re = /\r\n/;	// test for windows type newline&lt;br /&gt;
&lt;br /&gt;
of = new ActiveXObject(&#039;Scripting.FileSystemObject&#039;);&lt;br /&gt;
oa = WScript.Arguments;&lt;br /&gt;
&lt;br /&gt;
// take the source &amp;amp; target arguments from BC&lt;br /&gt;
fs = of.OpenTextFile(oa(0),1,false);&lt;br /&gt;
ft = of.OpenTextFile(oa(1),2,false);&lt;br /&gt;
fo = of.OpenTextFile(oa(2),1,false);&lt;br /&gt;
&lt;br /&gt;
// Read the process item then pull att 6&lt;br /&gt;
z  = fo.ReadAll();&lt;br /&gt;
if (re.test(z)){&lt;br /&gt;
   lsep = &amp;quot;\r\n&amp;quot;;&lt;br /&gt;
   ftyp = &amp;quot;Win&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
   lsep = &amp;quot;\n&amp;quot;;&lt;br /&gt;
   ftyp = &amp;quot;Unix&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
tt = z.split(lsep);&lt;br /&gt;
zz = fs.ReadAll().split(lsep);&lt;br /&gt;
tt[1] = zz[0].split(&#039;:&#039;)[1];&lt;br /&gt;
tt[2] = &#039;&#039;;&lt;br /&gt;
tt[3] = &#039;&#039;;&lt;br /&gt;
tt[4] = zz[1].split(&#039;:&#039;)[1];&lt;br /&gt;
tt[5] = zz.splice(4,zz.length).join(_vm);&lt;br /&gt;
ft.Write(tt.join(lsep));&lt;br /&gt;
&lt;br /&gt;
fs.Close&lt;br /&gt;
ft.Close&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stuboy</name></author>
	</entry>
	<entry>
		<id>https://pickwiki.org/index.php?title=CSV2ARRAY&amp;diff=1590</id>
		<title>CSV2ARRAY</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=CSV2ARRAY&amp;diff=1590"/>
		<updated>2007-07-24T07:23:54Z</updated>

		<summary type="html">&lt;p&gt;Stuboy: *&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HomePage&amp;gt;&amp;gt;SourceCode&amp;gt;&amp;gt;BasicSource&amp;gt;&amp;gt;&amp;lt;nowiki&amp;gt;CSV2ARRAY&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a tool to convert a CSV file to a dynamic array.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Background&#039;&#039;&lt;br /&gt;
:The main goal of this tool is to provide a good conversion from &#039;&#039;CSV&#039;&#039;. This is a Microsoft file format commonly used for &#039;&#039;flat file&#039;&#039; data exchange (until people start using XML universally). I have found many different bits and pieces around to convert CSV, most of which don&#039;t handle the possibilities of CSV or do the conversion badly.&lt;br /&gt;
&lt;br /&gt;
:The program was designed for UV as a &#039;&#039;function&#039;&#039; requiring a &#039;&#039;csv document&#039;&#039; and input &#039;&#039;arguments&#039;&#039; and returns a result &#039;&#039;value&#039;&#039;, and sets &#039;&#039;status()&#039;&#039; if conversion fails. It means it can be easily called from basic or an I-type subr() statement. See the comments in the code for examples and details of methods and the arguments required.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
function CSV2ARRAY(doc,opts)&lt;br /&gt;
* function to convert a csv to an array&lt;br /&gt;
* 1.0 23-Jul-2007 stuart boydell - Original&lt;br /&gt;
*&lt;br /&gt;
* doc:  csv document&lt;br /&gt;
*       line breaks in cells get converted to subVal marks (@sm)&lt;br /&gt;
*       nb. U2 autoconverts char(10) / char(13) to normalised (nix/win) crlf - so best to get your csv raw.&lt;br /&gt;
* opts: &#039;N&#039; returns a normalised dynamic array // eg orthagonal to excel: columns to attributes, cells to values&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
   equ E.PROG.NAME to &#039;CSV2ARRAY&#039;,&lt;br /&gt;
       E.VERSION   to &#039;1.0&#039;,&lt;br /&gt;
       E.COMMA     to &#039;,&#039;,&lt;br /&gt;
       E.QUOTE     to &#039;&amp;quot;&#039;,&lt;br /&gt;
       E.WINCRLF   to char(10):char(13)   ;*// CSV is usually produced by a win program - so parse win crlf&lt;br /&gt;
&lt;br /&gt;
   returnValue = oconv(&#039;&#039;,&#039;c&#039;)            ;*// set RV to &#039;&#039; and status() function to false&lt;br /&gt;
   occurs = 1&lt;br /&gt;
&lt;br /&gt;
   lmx = maximum(counts(doc,E.COMMA))   ;*// &amp;lt;&amp;lt;TODO&amp;gt;&amp;gt; incomplete use of these in normalisation&lt;br /&gt;
   lmn = minimum(counts(doc,E.COMMA))&lt;br /&gt;
&lt;br /&gt;
   doc = change(doc,E.WINCRLF,@am)  ;*// crlf to @am&lt;br /&gt;
   doc = convert(E.COMMA:char(10),@vm:@sm,doc)   ;*// commas to vm // char(10) to sm (manual cell breaks alt-enter)&lt;br /&gt;
&lt;br /&gt;
   loop while findstr E.QUOTE in doc,occurs setting a,v do&lt;br /&gt;
      docLine    = raise(doc&amp;lt;a&amp;gt;)&lt;br /&gt;
      newDocLine = &#039;&#039;&lt;br /&gt;
      max = dcount(docLine,@am)&lt;br /&gt;
      for i = max to 1 step -1&lt;br /&gt;
         cell = docLine&amp;lt;i&amp;gt;&lt;br /&gt;
         if cell[1] = E.QUOTE then&lt;br /&gt;
            *// make sure commas are replaced // should be an even number of quotes per cell&lt;br /&gt;
            loop while cell[1,1] # E.QUOTE and mod(count(cell,E.QUOTE),2) and i &amp;gt; 0 do&lt;br /&gt;
               i -= 1&lt;br /&gt;
               cell = docLine&amp;lt;i&amp;gt;:E.COMMA:cell&lt;br /&gt;
            repeat&lt;br /&gt;
            if cell[1,1] = E.QUOTE and cell[1] = E.QUOTE then&lt;br /&gt;
               cell = cell[2,len(cell)-2]&lt;br /&gt;
            end&lt;br /&gt;
            cell = change(cell,str(E.QUOTE,2),E.QUOTE)&lt;br /&gt;
         end&lt;br /&gt;
         if len(newDocLine) then&lt;br /&gt;
            ins cell before newDocLine&amp;lt;1&amp;gt;&lt;br /&gt;
         end else&lt;br /&gt;
            *// deal with inserting &#039;&#039; into empty array.&lt;br /&gt;
            if i = max-1 and cell = &#039;&#039; then newDocLine = @am else newDocLine = cell&lt;br /&gt;
         end&lt;br /&gt;
      next i&lt;br /&gt;
      occurs += count(newDocLine,E.QUOTE)&lt;br /&gt;
      doc&amp;lt;a&amp;gt;  = lower(newDocLine)&lt;br /&gt;
   repeat&lt;br /&gt;
&lt;br /&gt;
   if opts = &#039;N&#039; then   ;*// do mv normalisation&lt;br /&gt;
      max = dcount(doc,@am)&lt;br /&gt;
      newDoc = raise(doc&amp;lt;1&amp;gt;)&lt;br /&gt;
      if count(newDoc,@am) &amp;lt; lmx then newDoc&amp;lt;lmx+1&amp;gt; = &#039;&#039;&lt;br /&gt;
      for i = 2 to max&lt;br /&gt;
         newDoc = splice(newDoc,char(222),raise(doc&amp;lt;i&amp;gt;))&lt;br /&gt;
      next i&lt;br /&gt;
      doc = convert(char(222),@vm,newDoc)&lt;br /&gt;
   end&lt;br /&gt;
   opts = err&lt;br /&gt;
   returnVal = doc&lt;br /&gt;
return(returnVal)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HomePage&amp;gt;&amp;gt;SourceCode&amp;gt;&amp;gt;BasicSource&amp;gt;&amp;gt;&amp;lt;nowiki&amp;gt;CSV2ARRAY&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stuboy</name></author>
	</entry>
	<entry>
		<id>https://pickwiki.org/index.php?title=DateUtility&amp;diff=1719</id>
		<title>DateUtility</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=DateUtility&amp;diff=1719"/>
		<updated>2007-02-18T00:30:55Z</updated>

		<summary type="html">&lt;p&gt;Stuboy: *&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HomePage&amp;gt;&amp;gt;SourceCode&amp;gt;&amp;gt;BasicSource&amp;gt;&amp;gt;&amp;lt;nowiki&amp;gt;DateUtility&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a toolbox of date/time zone conversion utilities, not supplied by ICONV/OCONV.&lt;br /&gt;
&lt;br /&gt;
All in one convenient place!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Methods&#039;&#039;&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;GetDateFormat&amp;lt;/nowiki&amp;gt; - return: true if International format (dd/mm/yy) is set.&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;GetElapsedPeriod&amp;lt;/nowiki&amp;gt; - return: elapsed years @am months @am days&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;GetElapsedTime&amp;lt;/nowiki&amp;gt; - return: difference in seconds&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;GetElapsedTime.toString&amp;lt;/nowiki&amp;gt; - return: oconv&#039;d time (hh:mm:ss)&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;GetEpochTime&amp;lt;/nowiki&amp;gt; - return: epoch time - seconds from 1970-01-01 UTC&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;GetISODateTime&amp;lt;/nowiki&amp;gt; - return: ISO Date Time string yyyy-mm-ddThh:mm:ssZ&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;GetISOWeekOfYear&amp;lt;/nowiki&amp;gt; - return: ISO8601 week of year&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;GetRFCDateTime&amp;lt;/nowiki&amp;gt; - return: RFC1123 Date Time string: Sun, 06 Nov 1994 08:49:37 GMT&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;GetNumberSuffix&amp;lt;/nowiki&amp;gt; - return: numeric ordinal suffix (&#039;st,nd,rd,th&#039;)&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;GetTimeZoneString&amp;lt;/nowiki&amp;gt; - return: users current TZ string&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;ParseEpochTime&amp;lt;/nowiki&amp;gt; - return: date:@am:time [local at the time zone]&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;ParseEpochTime.toString&amp;lt;/nowiki&amp;gt; - return: iso date time&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;ParseISODateTime&amp;lt;/nowiki&amp;gt; - return: epoch time - seconds from 1970-01-01 UTC&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;ParseISODateTime.local&amp;lt;/nowiki&amp;gt; - return: (user local) date:@am:time&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;ParseRFCDateTime&amp;lt;/nowiki&amp;gt; - return: Epoch time - seconds from 1970-01-01 UTC&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;ParseRFCDateTime.local&amp;lt;/nowiki&amp;gt; - return: (user local) date:@am:time&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;SetDateFormat&amp;lt;/nowiki&amp;gt; - Set the date format &#039;&#039;ON&#039;&#039; to International (dd/mm/yy)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Background&#039;&#039;&lt;br /&gt;
:The main goal of this project was to provide a tool to convert to and from &#039;&#039;ISO8601&#039;&#039;. This is the date/time format used as standard in such things as XML documents. The nature of ISO8601, means that time zone must be taken into consideration. So, this turned into a bunch of &#039;&#039;methods&#039;&#039; which will also assist in Time Zone handling.&lt;br /&gt;
&lt;br /&gt;
:Overkill? Well possibly for most applications. However, regard placing orders on foreign countries and setting local delivery dates &amp;amp; times or easily finding the &#039;&#039;east coast&#039;&#039; time of an XML document stamped with &#039;&#039;west coast&#039;&#039; time (amongst others uses). We found we had several places we needed these types of time &amp;amp; date conversion, so it grew.&lt;br /&gt;
&lt;br /&gt;
:If you don&#039;t see something &#039;&#039;useful&#039;&#039;, please feel free to comment and add to it.&lt;br /&gt;
&lt;br /&gt;
:The program is designed as a &#039;&#039;function&#039;&#039; requiring a &#039;&#039;method&#039;&#039; and input &#039;&#039;arguments&#039;&#039; and returns a result &#039;&#039;value&#039;&#039;, and sets &#039;&#039;status()&#039;&#039; if conversion fails. It means it can be easily called from basic or an I-type subr() statement. See the comments in the code for examples and details of methods and the arguments required for each method.&lt;br /&gt;
&lt;br /&gt;
:Remember to tweak the E.DEFAULT.TZ equate constant, or read it in from a parameter file.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Glossary&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Epoch - meaning the Unix epoch - (milli)seconds from 1970-01-01T00:00Z.&lt;br /&gt;
*GMT - Greenwich Mean Time, unadjusted time at Greenwich, London UK.&lt;br /&gt;
*ISO - International Standards Organisation - they set, er, international standards.&lt;br /&gt;
*[http://www.mcs.vuw.ac.nz/technical/software/SGML/doc/iso8601/ISO8601.html ISO8601] - Set of standards for representing local dates and time relative to UTC.&lt;br /&gt;
*RFC - Request For Comment. The set of documents which make up the standards which the internet is built around.&lt;br /&gt;
*RFC1123 - preferred as an Internet standard date format (HTTP).&lt;br /&gt;
*TZ - Unix environment variable used to carry time zone info. On a Windows system this must be derived from the registry.&lt;br /&gt;
*UTC - Universal Coordinated Time - International standard for time measurement (something close to GMT).&lt;br /&gt;
*Z - Zulu, shorthand for the time at zero meridian or UTC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The Code&#039;&#039;&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function DATE.UTILITY(method,arguments)&lt;br /&gt;
* DTV: Various date &amp;amp; time methods not handled by OCONV, eg.ISO8601, RFC1123&lt;br /&gt;
*// Stuart Boydell 2003-02-24&lt;br /&gt;
*//&lt;br /&gt;
*//    Change E.DEFAULT.TZ for target server time zone locale.&lt;br /&gt;
*//&lt;br /&gt;
*// see http://www.timeanddate.com for more information about times and time zones&lt;br /&gt;
*//&lt;br /&gt;
*// Catalog this globally.&lt;br /&gt;
*// Call as either function ! i-type subr() with method and arguments.&lt;br /&gt;
*// Methods and arguments are enumerated in the Mainline subroutine.&lt;br /&gt;
*// No method, default datetime() string is returned&lt;br /&gt;
*// No arguments, results for &amp;quot;now&amp;quot; are returned.&lt;br /&gt;
*// Use of Epoch time - seconds since 1970-01-01T00:00Z&lt;br /&gt;
*// Use of iso8601 date time formats (used extensively with xml, html &amp;amp; sql)&lt;br /&gt;
*// general format is: YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+10:00)&lt;br /&gt;
*//&lt;br /&gt;
*// Usage 1: program&lt;br /&gt;
*//      PROGRAM SOME.PROGRAM&lt;br /&gt;
*//      DEFFUN DATE.UTIL(method,arguments) CALLING &#039;*DATE.UTILITY&#039;&lt;br /&gt;
*//      ...&lt;br /&gt;
*//      MY.METHOD     = &#039;GetISODateTime&#039;&lt;br /&gt;
*//      MY.ARGUMENTS  = ORD.DATE:@AM:ORD.TIME&lt;br /&gt;
*//      ISO.DATE.TIME = DATE.UTIL(MY.METHOD,MY.ARGUMENTS)&lt;br /&gt;
*//&lt;br /&gt;
*// Usage 2: I-type from a file with MY.DATE/TIME.FIELD attributes.&lt;br /&gt;
*//      0001 I&lt;br /&gt;
*//      0002 subr(&#039;*DATE.UTILITY&#039;,&#039;GetISODateTime&#039;,MY.DATE.FIELD:@AM:MY.TIME.FIELD)&lt;br /&gt;
*//      ...&lt;br /&gt;
*//&lt;br /&gt;
*// see Methods below for further information.&lt;br /&gt;
&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
DefineEquates:&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
&lt;br /&gt;
   equ E.THIS.PROG      to &#039;DATE.UTILITY&#039;,&lt;br /&gt;
       E.VERSION        to &#039;1.0&#039;&lt;br /&gt;
&lt;br /&gt;
   *// set this to your local server time as a default/fallback position&lt;br /&gt;
   equ E.DEFAULT.TZ     to &#039;EET-10EETDT-11,M10.5.0,M3.5.0&#039;&lt;br /&gt;
&lt;br /&gt;
   *// various time constants&lt;br /&gt;
   equ E.SECS.PER.MIN   to 60,&lt;br /&gt;
       E.SECS.PER.HOUR  to 3600,&lt;br /&gt;
       E.SECS.PER.DAY   to 86400,&lt;br /&gt;
       E.SECS.PER.YEAR  to 31556926,  ;*// tropical year seconds (approx 365.25 days)&lt;br /&gt;
       E.EPOCH.SECS     to system(99),;*// seconds from 1970-01-01T00:00Z&lt;br /&gt;
       E.EPOCH.OFFSET   to 732        ;*// iconv(&#039;01-Jan-1970&#039;,&#039;d&#039;)&lt;br /&gt;
&lt;br /&gt;
   *// numeric ordinal suffix ; eg 1st 2nd 3rd 4th ...&lt;br /&gt;
   equ E.NUM.SUFFIX     to &#039;st&#039;:@am:&#039;nd&#039;:@am:&#039;rd&#039;:@am:&#039;th&#039;&lt;br /&gt;
&lt;br /&gt;
   *// codes, characters, conversions and such&lt;br /&gt;
   equ E.ISODATE.CONV   to &#039;D-YMD[4,2,2]&#039;,&lt;br /&gt;
       E.ISOTIME.CONV   to &#039;MT&#039;,&lt;br /&gt;
       E.RFCDATE.CONV   to &#039;D WBDMBYL[&amp;quot;, &amp;quot;]&#039;,&lt;br /&gt;
       E.RFCTIME.CONV   to &#039;MTS&#039;,&lt;br /&gt;
       E.TZ.ENVSTR      to &#039;TZ&#039;,     ;*// time zone environment string lead-in&lt;br /&gt;
       E.ISOTIME.SEP    to &#039;T&#039;,&lt;br /&gt;
       E.ISOZONE.SEP    to &#039;Z&#039;,&lt;br /&gt;
       E.PLUS           to &#039;+&#039;,&lt;br /&gt;
       E.MINUS          to &#039;-&#039;,&lt;br /&gt;
       E.POINT          to &#039;.&#039;,&lt;br /&gt;
       E.TMP.ID         to @tty:&#039;tz.vbs&#039;&lt;br /&gt;
&lt;br /&gt;
   *// timeZoneArray&lt;br /&gt;
   *// 1=tz desc, 2=tz offset, 3=dls desc, 4=dls offset&lt;br /&gt;
   *// 5=start month,  6=week,  7=day,  8=time&lt;br /&gt;
   *// 9=stop  month, 10=week, 11=day, 12=time&lt;br /&gt;
   equ E.GTZO.DESC        to timeZoneArray&amp;lt;1&amp;gt;,&lt;br /&gt;
       E.GTZO.OFFSET      to timeZoneArray&amp;lt;2&amp;gt;,&lt;br /&gt;
       E.GTZO.DLS.DESC    to timeZoneArray&amp;lt;3&amp;gt;,&lt;br /&gt;
       E.GTZO.DLS.OFFSET  to timeZoneArray&amp;lt;4&amp;gt;,&lt;br /&gt;
       E.GTZO.START.MONTH to timeZoneArray&amp;lt;5&amp;gt;,&lt;br /&gt;
       E.GTZO.START.WEEK  to timeZoneArray&amp;lt;6&amp;gt;,&lt;br /&gt;
       E.GTZO.START.DAY   to timeZoneArray&amp;lt;7&amp;gt;,&lt;br /&gt;
       E.GTZO.START.TIME  to timeZoneArray&amp;lt;8&amp;gt;,&lt;br /&gt;
       E.GTZO.STOP.MONTH  to timeZoneArray&amp;lt;9&amp;gt;,&lt;br /&gt;
       E.GTZO.STOP.WEEK   to timeZoneArray&amp;lt;10&amp;gt;,&lt;br /&gt;
       E.GTZO.STOP.DAY    to timeZoneArray&amp;lt;11&amp;gt;,&lt;br /&gt;
       E.GTZO.STOP.TIME   to timeZoneArray&amp;lt;12&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
Mainline:&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
&lt;br /&gt;
   returnValue = oconv(&#039;&#039;,&#039;c&#039;)               ;*// set RV to &#039;&#039; and status() function to false&lt;br /&gt;
&lt;br /&gt;
   *// handle passed method parameter&lt;br /&gt;
   begin case&lt;br /&gt;
&lt;br /&gt;
   case method = &#039;GetDateFormat&#039;&lt;br /&gt;
      *// args:   null&lt;br /&gt;
      *// return: true/false&lt;br /&gt;
      gosub GetDateFormat:&lt;br /&gt;
&lt;br /&gt;
   case method = &#039;GetElapsedPeriod&#039;&lt;br /&gt;
      *// args:   start date @am stop date&lt;br /&gt;
      *// return: elapsed years am months am days&lt;br /&gt;
      gosub GetElapsedPeriod:&lt;br /&gt;
&lt;br /&gt;
   case method = &#039;GetElapsedTime&#039;&lt;br /&gt;
      *// args:   [start date @vm] start time @am [stop date @vm] stop time&lt;br /&gt;
      *// return: difference in seconds&lt;br /&gt;
      gosub GetElapsedTime:&lt;br /&gt;
&lt;br /&gt;
   case method = &#039;GetElapsedTime.toString&#039;&lt;br /&gt;
      *// args: [start date @vm] start time @am [stop date @vm] stop time&lt;br /&gt;
      *// return: oconv&#039;d time (hh:mm:ss)&lt;br /&gt;
      gosub GetElapsedTime:&lt;br /&gt;
      returnValue = oconv(returnValue,E.ISOTIME.CONV)&lt;br /&gt;
      if status() then returnValue = &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
   case method = &#039;GetEpochTime&#039;&lt;br /&gt;
      *// args: [date][@am time][@am timeZoneString]&lt;br /&gt;
      *// return: epoch time - seconds from epoch&lt;br /&gt;
      gosub GetEpochTime:&lt;br /&gt;
&lt;br /&gt;
   case method = &#039;GetISODateTime&#039; ! method = &#039;getISODateTime.toString&#039;&lt;br /&gt;
      *// args: [date],[time],[timezone]&lt;br /&gt;
      *// return ISO Date Time string yyyy-mm-ddThh:mm:ssZ&lt;br /&gt;
      gosub GetISODateTime:&lt;br /&gt;
&lt;br /&gt;
   case method = &#039;GetISOWeekOfYear&#039;&lt;br /&gt;
      *// args: [date]&lt;br /&gt;
      *// return ISO8601 week of year&lt;br /&gt;
      gosub GetISOWeekOfYear:&lt;br /&gt;
&lt;br /&gt;
   case method = &#039;GetRFCDateTime&#039;&lt;br /&gt;
      *// args: [date],[time]&lt;br /&gt;
      *// return rfc1123 Date Time string: Sun, 06 Nov 1994 08:49:37 GMT&lt;br /&gt;
      gosub GetRFCDateTime:&lt;br /&gt;
&lt;br /&gt;
   case method = &#039;GetNumberSuffix&#039;&lt;br /&gt;
      *// args: number&lt;br /&gt;
      *// return: numeric ordinal suffix (&#039;st,nd,rd,th&#039;)&lt;br /&gt;
      gosub GetNumberSuffix:&lt;br /&gt;
&lt;br /&gt;
   case method = &#039;GetTimeZoneString&#039;&lt;br /&gt;
      *// args: null&lt;br /&gt;
      *// return users current TZ string&lt;br /&gt;
      gosub GetTimeZoneString:&lt;br /&gt;
&lt;br /&gt;
   case method = &#039;GetTimeZoneStringFromArray&#039;&lt;br /&gt;
      *// args: TimeZoneArray (eg timeZoneArray)&lt;br /&gt;
      *// return users current TZ string&lt;br /&gt;
      gosub GetTimeZoneStringFromArray:&lt;br /&gt;
&lt;br /&gt;
   case method = &#039;ParseEpochTime&#039;&lt;br /&gt;
      *// args: [UTCSeconds][@am timeZoneString]&lt;br /&gt;
      *// return: date:@am:time [local at the time zone]&lt;br /&gt;
      gosub ParseEpochTime:&lt;br /&gt;
&lt;br /&gt;
   case method = &#039;ParseEpochTime.toString&#039;&lt;br /&gt;
      *// args: a value being seconds from epoch&lt;br /&gt;
      *// return: iso date time&lt;br /&gt;
      gosub ParseEpochTime:&lt;br /&gt;
      arguments = returnValue&lt;br /&gt;
      gosub GetISODateTime:&lt;br /&gt;
&lt;br /&gt;
   case method = &#039;ParseISODateTime&#039;&lt;br /&gt;
      *// args: ISO formatted date string eg 1997-07-16T19:20+10:00&lt;br /&gt;
      *// return epoch time - seconds from 1/1/70 UTC&lt;br /&gt;
      gosub ParseISODateTime:&lt;br /&gt;
&lt;br /&gt;
   case method = &#039;ParseISODateTime.local&#039;&lt;br /&gt;
      *// args: ISO formatted date string eg 1997-07-16T19:20+10:00&lt;br /&gt;
      *// return (user local) date:@am:time&lt;br /&gt;
      gosub ParseISODateTime:&lt;br /&gt;
      if validTime then&lt;br /&gt;
         arguments = returnValue&lt;br /&gt;
         gosub ParseEpochTime:&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
   case method = &#039;ParseRFCDateTime&#039;&lt;br /&gt;
      *// args: rfc1123 Date Time string: Sun, 06 Nov 1994 08:49:37 GMT&lt;br /&gt;
      *// return Epoch time - seconds from epoch&lt;br /&gt;
      gosub ParseRFCDateTime:&lt;br /&gt;
&lt;br /&gt;
   case method = &#039;ParseRFCDateTime.local&#039;&lt;br /&gt;
      *// args: rfc1123 Date Time string: Sun, 06 Nov 1994 08:49:37 GMT&lt;br /&gt;
      *// return (user local) date:@am:time&lt;br /&gt;
      gosub ParseRFCDateTime:&lt;br /&gt;
      arguments = returnValue&lt;br /&gt;
      gosub ParseEpochTime:&lt;br /&gt;
&lt;br /&gt;
   case method = &#039;ParseTimeZoneString&#039;&lt;br /&gt;
      *// args: [time zone string]&lt;br /&gt;
      *// return Time Zone Object&lt;br /&gt;
      gosub ParseTimeZoneString:&lt;br /&gt;
&lt;br /&gt;
   case method = &#039;SetDateEuropean&#039;&lt;br /&gt;
   *// deprecated - used in legacy calls - use setDateFormat&lt;br /&gt;
      *// args: null&lt;br /&gt;
      *// return: null&lt;br /&gt;
      arguments = &#039;ON&#039;&lt;br /&gt;
      gosub SetDateFormat:&lt;br /&gt;
&lt;br /&gt;
   case method = &#039;SetDateFormat&#039;&lt;br /&gt;
      *// args: set [ON/OFF][D new date format] &lt;br /&gt;
      *// return: null&lt;br /&gt;
      gosub SetDateFormat:&lt;br /&gt;
&lt;br /&gt;
   case @true&lt;br /&gt;
      *// default case, return time date string&lt;br /&gt;
      *// return: timedate eg &amp;quot;15:39:12 22 APR 2003&amp;quot;&lt;br /&gt;
      returnValue = timedate()&lt;br /&gt;
&lt;br /&gt;
   end case&lt;br /&gt;
&lt;br /&gt;
return(returnValue)&lt;br /&gt;
stop&lt;br /&gt;
&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
GetDateFormat:    *// International = true, US = false&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
&lt;br /&gt;
   getDateFormatCmd = &#039;DATE.FORMAT INFORM&#039;&lt;br /&gt;
   execute getDateFormatCmd capturing cap returning returnValue&lt;br /&gt;
&lt;br /&gt;
return(@null)&lt;br /&gt;
&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
GetElapsedPeriod:&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
&lt;br /&gt;
   periodStart = arguments&amp;lt;1&amp;gt;&lt;br /&gt;
   periodEnd   = arguments&amp;lt;2&amp;gt;&lt;br /&gt;
   if (periodEnd &amp;gt;= periodStart) then &lt;br /&gt;
      totalYears  = oconv(periodEnd,&#039;dy&#039;) - oconv(periodStart,&#039;dy&#039;) &lt;br /&gt;
      totalMonths = oconv(periodEnd,&#039;dm&#039;) - oconv(periodStart,&#039;dm&#039;) &lt;br /&gt;
      totalDays   = oconv(periodEnd,&#039;dd&#039;) - oconv(periodStart,&#039;dd&#039;) &lt;br /&gt;
      if (totalDays &amp;lt; 0) then &lt;br /&gt;
         totalDays   += oconv(iconv(&#039;1 &#039;:oconv(periodEnd,&#039;d mby&#039;),&#039;d&#039;) -1,&#039;dd&#039;) &lt;br /&gt;
         totalMonths -= 1 &lt;br /&gt;
      end &lt;br /&gt;
      if (totalMonths &amp;lt; 0) then &lt;br /&gt;
         totalMonths += 12 &lt;br /&gt;
         totalYears  -= 1 &lt;br /&gt;
      end &lt;br /&gt;
      returnValue = totalYears : @am : totalMonths : @am : totalDays &lt;br /&gt;
   end &lt;br /&gt;
&lt;br /&gt;
return(@null)&lt;br /&gt;
&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
GetElapsedTime:   *// find elapsed time from 2 second counts&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
&lt;br /&gt;
   startTime = arguments&amp;lt;1&amp;gt;&lt;br /&gt;
   stopTime  = arguments&amp;lt;2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   begin case&lt;br /&gt;
   case dcount(startTime,@vm) = 2 &amp;amp; dcount(stopTime,@vm) = 2 ;*// dates &amp;amp; times provided&lt;br /&gt;
      arguments = raise(startTime&amp;lt;1&amp;gt;)&lt;br /&gt;
      gosub GetEpochTime:        ;*// get start as secs from epoch&lt;br /&gt;
      startTime = returnValue&lt;br /&gt;
      arguments = raise(stopTime&amp;lt;1&amp;gt;)&lt;br /&gt;
      gosub GetEpochTime:        ;*// get stop as secs from epoch&lt;br /&gt;
      returnValue -= startTime&lt;br /&gt;
&lt;br /&gt;
   case not(num(startTime) &amp;amp; num(stopTime)) ;*// bad data&lt;br /&gt;
&lt;br /&gt;
   case (startTime - stopTime) &amp;gt; E.SECS.PER.DAY&lt;br /&gt;
   case stopTime &amp;lt; startTime&lt;br /&gt;
      *// calculate up to same time over a midnight boundry&lt;br /&gt;
      *// ie start=23:00, end=03:00 : total =&amp;gt; (27:00 - 23:00) =&amp;gt; 05:00&lt;br /&gt;
      returnValue = stopTime + E.SECS.PER.DAY - startTime&lt;br /&gt;
&lt;br /&gt;
   case @true&lt;br /&gt;
      returnValue = (stopTime - startTime)&lt;br /&gt;
   end case&lt;br /&gt;
&lt;br /&gt;
return(@null)&lt;br /&gt;
&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
GetEpochTime:    *// return seconds from 1/1/70 UTC&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
&lt;br /&gt;
   internalDate   = arguments&amp;lt;1&amp;gt;&lt;br /&gt;
   internalTime   = arguments&amp;lt;2&amp;gt;&lt;br /&gt;
   timeZoneString = arguments&amp;lt;3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   if internalDate   = &#039;&#039; then internalDate = date()&lt;br /&gt;
   if internalTime   = &#039;&#039; then internalTime = time()&lt;br /&gt;
   if timeZoneString = &#039;&#039; then&lt;br /&gt;
      *// get default&lt;br /&gt;
      gosub GetTimeZoneString:&lt;br /&gt;
      timeZoneString = returnValue&lt;br /&gt;
   end&lt;br /&gt;
   arguments = timeZoneString&lt;br /&gt;
   gosub ParseTimeZoneString:&lt;br /&gt;
&lt;br /&gt;
   arguments = internalDate&lt;br /&gt;
   gosub GetTimeZoneOffset:&lt;br /&gt;
&lt;br /&gt;
   returnValue += (internalDate - E.EPOCH.OFFSET) * E.SECS.PER.DAY&lt;br /&gt;
   returnValue += internalTime&lt;br /&gt;
&lt;br /&gt;
return(@null)&lt;br /&gt;
&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
GetISODateTime:  *// return date in ISO format yyyy-mm-ddThh:mm:ssZhh:mm&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
&lt;br /&gt;
   internalDate   = arguments&amp;lt;1&amp;gt;&lt;br /&gt;
   internalTime   = arguments&amp;lt;2&amp;gt;&lt;br /&gt;
   if unassigned(timeZoneString) then timeZoneString = arguments&amp;lt;3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   if internalDate = &#039;&#039; then internalDate = date()&lt;br /&gt;
   if internalTime = &#039;&#039; then internalTime = time()&lt;br /&gt;
   if timeZoneString = &#039;&#039; then&lt;br /&gt;
      *// get default&lt;br /&gt;
      gosub GetTimeZoneString:&lt;br /&gt;
      timeZoneString = returnValue&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   isoDate = oconv(internalDate,E.ISODATE.CONV)&lt;br /&gt;
   if not(status()) then&lt;br /&gt;
      isoTime = oconv(internalTime,E.RFCTIME.CONV)&lt;br /&gt;
      if not(status()) then&lt;br /&gt;
         if len(timeZoneString) then&lt;br /&gt;
            arguments = timeZoneString&lt;br /&gt;
            gosub ParseTimeZoneString:&lt;br /&gt;
         end&lt;br /&gt;
         arguments = internalDate&lt;br /&gt;
         gosub GetTimeZoneOffset:&lt;br /&gt;
         arguments = returnValue&lt;br /&gt;
         gosub GetISOZone:&lt;br /&gt;
         if not(status()) then&lt;br /&gt;
            returnValue = isoDate : E.ISOTIME.SEP : isoTime : returnValue&lt;br /&gt;
         end&lt;br /&gt;
      end&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
return(@null)&lt;br /&gt;
&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
GetISOWeekOfYear:&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
   &lt;br /&gt;
   internalDate = arguments&amp;lt;1&amp;gt;&lt;br /&gt;
   if internalDate = &#039;&#039; then internalDate = date()&lt;br /&gt;
   dayOfWeek = oconv(internalDate, &#039;dw&#039;)&lt;br /&gt;
   if status() then                 ;*// test for bad conversion&lt;br /&gt;
      weekNumber = &#039;-1&#039;&lt;br /&gt;
   end else&lt;br /&gt;
      thisThursday = internalDate - dayOfWeek + 4 ;* calculate date for that Thursday&lt;br /&gt;
      dayOfYear    = oconv(thisThursday,&#039;dj&#039;)&lt;br /&gt;
      weekNumber   = int((dayOfYear + 6) / 7) ;*// ta WOL&lt;br /&gt;
   end&lt;br /&gt;
   returnValue = weekNumber&lt;br /&gt;
&lt;br /&gt;
return(@null)&lt;br /&gt;
&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
GetISOZone:   *// return ISO time zone offset&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
&lt;br /&gt;
   localOffsetSecs = arguments&lt;br /&gt;
   isoZone = oconv(abs(localOffsetSecs),E.ISOTIME.CONV)&lt;br /&gt;
&lt;br /&gt;
   begin case&lt;br /&gt;
   case status()                                ;*// invalid oconv         15-Apr-2003 return default offset for melbourne&lt;br /&gt;
      returnValue = &#039;+10:00&#039;&lt;br /&gt;
   case abs(localOffsetSecs) &amp;gt;= E.SECS.PER.DAY  ;*// invalid offset value  15-Apr-2003 return default offset for melbourne&lt;br /&gt;
      returnValue = &#039;+10:00&#039;&lt;br /&gt;
   case localOffsetSecs &amp;lt; 0&lt;br /&gt;
      returnValue = E.PLUS:isoZone&lt;br /&gt;
   case localOffsetSecs &amp;gt; 0&lt;br /&gt;
      returnValue = E.MINUS:isoZone&lt;br /&gt;
   case localOffsetSecs = 0&lt;br /&gt;
      returnValue = E.ISOZONE.SEP:isoZone&lt;br /&gt;
   case @true&lt;br /&gt;
      returnValue = &#039;+10:00&#039;&lt;br /&gt;
   end case&lt;br /&gt;
&lt;br /&gt;
return(@null)&lt;br /&gt;
&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
GetRFCDateTime:  *// return Date Time string: Sun, 06 Nov 1994 08:49:37 GMT&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
      &lt;br /&gt;
   gosub GetEpochTime:&lt;br /&gt;
&lt;br /&gt;
   *// get time and date at GMT&lt;br /&gt;
   internalDate = int(returnValue/E.SECS.PER.DAY) + E.EPOCH.OFFSET - (returnValue &amp;lt; 0)&lt;br /&gt;
   internalTime = mod(returnValue,E.SECS.PER.DAY) + (E.SECS.PER.DAY * (returnValue &amp;lt; 0))&lt;br /&gt;
&lt;br /&gt;
   rfcDate = oconv(internalDate,E.RFCDATE.CONV)&lt;br /&gt;
   if not(status()) then&lt;br /&gt;
      rfcTime = oconv(internalTime,E.RFCTIME.CONV)&lt;br /&gt;
      if not(status()) then&lt;br /&gt;
         returnValue = rfcDate : &#039; &#039;: rfcTime : &#039; GMT&#039;&lt;br /&gt;
      end&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
return(@null)&lt;br /&gt;
&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
GetNumberSuffix: *// get numerical ordinal suffix&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
&lt;br /&gt;
   number = arguments&amp;lt;1&amp;gt;&lt;br /&gt;
   if len(number) then&lt;br /&gt;
      lastChar = number[1] ;*// right(number,1)&lt;br /&gt;
      lastTeen = number[2] ;*// right(number,2)&lt;br /&gt;
&lt;br /&gt;
      begin case&lt;br /&gt;
      case lastTeen &amp;gt;= 11 &amp;amp; lastTeen &amp;lt;= 20&lt;br /&gt;
         returnValue = number:(E.NUM.SUFFIX)&amp;lt;4&amp;gt;&lt;br /&gt;
      case lastChar &amp;gt; 0 &amp;amp; lastChar &amp;lt;= 3&lt;br /&gt;
         returnValue = number:(E.NUM.SUFFIX)&amp;lt;lastChar&amp;gt;&lt;br /&gt;
      case @true&lt;br /&gt;
         returnValue = number:(E.NUM.SUFFIX)&amp;lt;4&amp;gt;&lt;br /&gt;
      end case&lt;br /&gt;
&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
return(@null)&lt;br /&gt;
&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
GetTimeZoneOffset: *// get time zone offset &lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
&lt;br /&gt;
   *// Args in: internal date&lt;br /&gt;
   *// timeZoneArray required for accurate offset.&lt;br /&gt;
&lt;br /&gt;
   if unassigned(timeZoneArray) then timeZoneArray = &#039;&#039;&lt;br /&gt;
   checkDLSFlag = num(arguments&amp;lt;1&amp;gt;) ;*// date passed in&lt;br /&gt;
   checkDLSFlag = checkDLSFlag * (E.GTZO.OFFSET # E.GTZO.DLS.OFFSET)&lt;br /&gt;
   checkDLSFlag = checkDLSFlag * len(E.GTZO.START.MONTH)&lt;br /&gt;
   checkDLSFlag = checkDLSFlag * len(E.GTZO.START.WEEK)&lt;br /&gt;
   checkDLSFlag = checkDLSFlag * len(E.GTZO.START.DAY)&lt;br /&gt;
   checkDLSFlag = checkDLSFlag * len(E.GTZO.STOP.MONTH)&lt;br /&gt;
   checkDLSFlag = checkDLSFlag * len(E.GTZO.STOP.WEEK)&lt;br /&gt;
   checkDLSFlag = checkDLSFlag * len(E.GTZO.STOP.DAY)&lt;br /&gt;
&lt;br /&gt;
   if checkDLSFlag then&lt;br /&gt;
&lt;br /&gt;
      *// find the dls start date for this year&lt;br /&gt;
      tzInternalDate = arguments&amp;lt;1&amp;gt;&lt;br /&gt;
      tzYear       = oconv(tzInternalDate,&#039;d4y&#039;)&lt;br /&gt;
      tzStartMonth = E.GTZO.START.MONTH&lt;br /&gt;
      tzStartWeek  = E.GTZO.START.WEEK&lt;br /&gt;
      tzStartDay   = E.GTZO.START.DAY&lt;br /&gt;
&lt;br /&gt;
      tzStartDate  = iconv(tzStartMonth:&#039;/&#039;:tzYear,&#039;dmy&#039;) ;*// finds the first&lt;br /&gt;
      tzStartOffset = tzStartDay - mod(tzStartDate,7)&lt;br /&gt;
      if tzStartOffset &amp;lt; 1 then tzStartOffset += 7&lt;br /&gt;
      tzStartDate += tzStartOffset&lt;br /&gt;
      tzStartDate += tzStartWeek * 7&lt;br /&gt;
      loop until oconv(tzStartDate,&#039;dm&#039;) = tzStartMonth do tzStartDate -= 7 repeat&lt;br /&gt;
&lt;br /&gt;
      *// find the dls stop date for this year&lt;br /&gt;
      tzStopMonth = E.GTZO.STOP.MONTH&lt;br /&gt;
      tzStopWeek  = E.GTZO.STOP.WEEK&lt;br /&gt;
      tzStopDay   = E.GTZO.STOP.DAY&lt;br /&gt;
&lt;br /&gt;
      tzStopDate  = iconv(tzStopMonth:&#039;/&#039;:tzYear,&#039;dmy&#039;)   ;*// finds the first&lt;br /&gt;
      tzStopOffset = tzStopDay - mod(tzStopDate,7)&lt;br /&gt;
      if tzStopOffset &amp;lt; 1 then tzStopOffset += 7&lt;br /&gt;
      tzStopDate += tzStopOffset&lt;br /&gt;
      tzStopDate += tzStopWeek * 7&lt;br /&gt;
      loop until oconv(tzStopDate,&#039;dm&#039;) = tzStopMonth do tzStopDate -= 7 repeat&lt;br /&gt;
&lt;br /&gt;
      *// return the appropriate time offset for the date.&lt;br /&gt;
      begin case&lt;br /&gt;
      case tzStartDate &amp;lt; tzStopDate &amp;amp; tzInternalDate &amp;gt; tzStartDate &amp;amp; tzInternalDate &amp;lt; tzStopDate ;*// northern hemisphere dls&lt;br /&gt;
         timeZoneOffset = E.GTZO.DLS.OFFSET&lt;br /&gt;
      case tzStartDate &amp;gt; tzStopDate &amp;amp; (tzInternalDate &amp;lt; tzStopDate ! tzInternalDate &amp;gt; tzStartDate) ;*// southern hemisphere dls&lt;br /&gt;
         timeZoneOffset = E.GTZO.DLS.OFFSET&lt;br /&gt;
      case @true&lt;br /&gt;
         timeZoneOffset = E.GTZO.OFFSET&lt;br /&gt;
      end case&lt;br /&gt;
      returnValue = timeZoneOffset&lt;br /&gt;
   end else&lt;br /&gt;
      if abs(E.GTZO.OFFSET) &amp;gt; 0 then&lt;br /&gt;
         timeZoneOffset = E.GTZO.OFFSET&lt;br /&gt;
         returnValue = timeZoneOffset&lt;br /&gt;
      end else&lt;br /&gt;
         returnValue = 0 ;*// return as UTC&lt;br /&gt;
      end&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
return(@null)&lt;br /&gt;
&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
GetTimeZoneString:  *// return current unix TZ setting - unix&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
&lt;br /&gt;
   if system(91) then ;*// WIN NT needs registry reader&lt;br /&gt;
   *// http://msdn.microsoft.com/library/en-us/wmisdk/wmi/win32_timezone.asp&lt;br /&gt;
   *// return unix tz string like: EET-10EETDT-11,M10.5.0/2,M3.5.0/2&lt;br /&gt;
      open &#039;&amp;amp;SAVEDLISTS&amp;amp;&#039; to f.temp then&lt;br /&gt;
         script     = &#039;Set wbemObjectSet = GetObject(&amp;quot;winmgmts:&amp;quot;).InstancesOf(&amp;quot;Win32_TimeZone&amp;quot;)&#039;&lt;br /&gt;
         script&amp;lt;-1&amp;gt; = &#039;For Each wbemObject In wbemObjectSet : With wbemObject&#039;&lt;br /&gt;
         script&amp;lt;-1&amp;gt; = &#039;StdOffset = 0 - .Bias + .StandardBias&#039;&lt;br /&gt;
         script&amp;lt;-1&amp;gt; = &#039;SS = mid(&amp;quot;+-&amp;quot;,1-(StdOffset &amp;lt;0),1)&#039;&lt;br /&gt;
         script&amp;lt;-1&amp;gt; = &#039;DltOffset = 0 - .Bias + .DaylightBias&#039;&lt;br /&gt;
         script&amp;lt;-1&amp;gt; = &#039;DS = mid(&amp;quot;+-&amp;quot;,1-(DltOffset &amp;lt;0),1)&#039;&lt;br /&gt;
         script&amp;lt;-1&amp;gt; = &#039;WScript.stdOut.writeline _&#039;&lt;br /&gt;
         script&amp;lt;-1&amp;gt; = &#039;&amp;quot;STD&amp;quot; &amp;amp; SS &amp;amp; formatdatetime(timeserial(0,StdOffset,0),4) &amp;amp; _&#039;&lt;br /&gt;
         script&amp;lt;-1&amp;gt; = &#039;&amp;quot;DLT&amp;quot; &amp;amp; DS &amp;amp; formatdatetime(timeserial(0,DltOffset,0),4) &amp;amp; _&#039;&lt;br /&gt;
         script&amp;lt;-1&amp;gt; = &#039;&amp;quot;,M&amp;quot; &amp;amp; .DaylightMonth &amp;amp; &amp;quot;.&amp;quot; &amp;amp; .DaylightDay &amp;amp; _&#039;&lt;br /&gt;
         script&amp;lt;-1&amp;gt; = &#039;&amp;quot;.&amp;quot; &amp;amp; .DaylightDayOfWeek &amp;amp; &amp;quot;/&amp;quot; &amp;amp; .DaylightHour &amp;amp; _&#039;&lt;br /&gt;
         script&amp;lt;-1&amp;gt; = &#039;&amp;quot;,M&amp;quot; &amp;amp; .StandardMonth &amp;amp; &amp;quot;.&amp;quot; &amp;amp; .StandardDay &amp;amp; _&#039;&lt;br /&gt;
         script&amp;lt;-1&amp;gt; = &#039;&amp;quot;.&amp;quot; &amp;amp; .StandardDayOfWeek &amp;amp; &amp;quot;/&amp;quot; &amp;amp; .StandardHour&#039;&lt;br /&gt;
         script&amp;lt;-1&amp;gt; = &#039;End With : Next : Set wbemObjectSet = Nothing&#039;&lt;br /&gt;
         write script on f.temp,E.TMP.ID then&lt;br /&gt;
            execute &#039;dos /c cscript //B //T:1 ^&amp;amp;SAVEDLISTS^&amp;amp;/&#039;:E.TMP.ID capturing cap&lt;br /&gt;
            returnValue = cap&amp;lt;1&amp;gt;&lt;br /&gt;
         end else&lt;br /&gt;
            returnValue = E.DEFAULT.TZ&lt;br /&gt;
         end&lt;br /&gt;
         delete f.temp,E.TMP.ID&lt;br /&gt;
      end else&lt;br /&gt;
         returnValue = E.DEFAULT.TZ&lt;br /&gt;
      end&lt;br /&gt;
   end else&lt;br /&gt;
      execute &#039;ENVIRONMENT&#039; capturing envStrings&lt;br /&gt;
      envVars = fields(envStrings,&#039;=&#039;,1)&lt;br /&gt;
      locate E.TZ.ENVSTR in envVars setting tzPos then&lt;br /&gt;
         returnValue = field(envStrings&amp;lt;tzPos&amp;gt;,&#039;=&#039;,2)&lt;br /&gt;
      end else&lt;br /&gt;
         returnValue = E.DEFAULT.TZ&lt;br /&gt;
      end&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
return(@null)&lt;br /&gt;
&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
GetTimeZoneStringFromArray:  *// return current unix TZ setting - unix&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
&lt;br /&gt;
   timeZoneArray = arguments&lt;br /&gt;
&lt;br /&gt;
   if E.GTZO.DESC then&lt;br /&gt;
      returnValue = E.GTZO.DESC&lt;br /&gt;
      if E.GTZO.OFFSET then&lt;br /&gt;
         z = int(E.GTZO.OFFSET/E.SECS.PER.HOUR)&lt;br /&gt;
         if z &amp;gt; 0 then returnValue := E.PLUS&lt;br /&gt;
         returnValue := z&lt;br /&gt;
         if mod(E.GTZO.OFFSET,E.SECS.PER.HOUR) then returnValue := (&#039;:&#039;:mod(abs(E.GTZO.OFFSET),E.SECS.PER.HOUR)/E.SECS.PER.MIN)&lt;br /&gt;
      end else&lt;br /&gt;
         returnValue := &#039;0&#039;&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      if E.GTZO.DLS.DESC then&lt;br /&gt;
         returnValue := E.GTZO.DLS.DESC&lt;br /&gt;
         if E.GTZO.DLS.OFFSET then&lt;br /&gt;
            z = int(E.GTZO.DLS.OFFSET/E.SECS.PER.HOUR)&lt;br /&gt;
            if z &amp;gt; 0 then returnValue := E.PLUS&lt;br /&gt;
            returnValue:= z&lt;br /&gt;
            if mod(E.GTZO.DLS.OFFSET,E.SECS.PER.HOUR) then returnValue := &#039;:&#039;:mod(abs(E.GTZO.DLS.OFFSET),E.SECS.PER.HOUR)/E.SECS.PER.MIN&lt;br /&gt;
         end else&lt;br /&gt;
            returnValue := &#039;0&#039;&lt;br /&gt;
         end&lt;br /&gt;
&lt;br /&gt;
         returnValue := &#039;,M&#039;:E.GTZO.START.MONTH&lt;br /&gt;
         returnValue := &#039;.&#039;:E.GTZO.START.WEEK&lt;br /&gt;
         returnValue := &#039;.&#039;:E.GTZO.START.DAY:&#039;/2&#039;&lt;br /&gt;
         returnValue := &#039;,M&#039;:E.GTZO.STOP.MONTH&lt;br /&gt;
         returnValue := &#039;.&#039;:E.GTZO.STOP.WEEK&lt;br /&gt;
         returnValue := &#039;.&#039;:E.GTZO.STOP.DAY:&#039;/2&#039;&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
return(@null)&lt;br /&gt;
&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
ParseEpochTime:    *// return local UV seconds from 1970-01-01T00:00Z&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
&lt;br /&gt;
   if num(arguments&amp;lt;1&amp;gt;) then&lt;br /&gt;
      timeToParse    = arguments&amp;lt;1&amp;gt;&lt;br /&gt;
      timeZoneString = arguments&amp;lt;2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      *// convert to local time&lt;br /&gt;
      if timeToParse    = &#039;&#039; then timeToParse = E.EPOCH.SECS&lt;br /&gt;
      if timeZoneString = &#039;&#039; then&lt;br /&gt;
         *// get default&lt;br /&gt;
         gosub GetTimeZoneString:&lt;br /&gt;
         timeZoneString = returnValue&lt;br /&gt;
      end&lt;br /&gt;
      arguments = timeZoneString&lt;br /&gt;
      gosub ParseTimeZoneString:&lt;br /&gt;
&lt;br /&gt;
      arguments = int(timeToParse/E.SECS.PER.DAY) + E.EPOCH.OFFSET - (timeToParse &amp;lt; 0) ;*// internal date - is DLS applicable?&lt;br /&gt;
      gosub GetTimeZoneOffset:&lt;br /&gt;
      timeToParse -= returnValue&lt;br /&gt;
&lt;br /&gt;
      *// get time and date at UTC&lt;br /&gt;
      internalDate = int(timeToParse/E.SECS.PER.DAY) + E.EPOCH.OFFSET - (timeToParse &amp;lt; 0)&lt;br /&gt;
      internalTime = mod(timeToParse,E.SECS.PER.DAY) + (E.SECS.PER.DAY * (timeToParse &amp;lt; 0))&lt;br /&gt;
&lt;br /&gt;
      returnValue  = internalDate:@am:internalTime&lt;br /&gt;
&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
return(@null)&lt;br /&gt;
&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
ParseISODateTime:    *// return Epoch&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
&lt;br /&gt;
* sample of possible formats for ISO date/time&lt;br /&gt;
* ISO 8601:2000, The full iso8601 date/time spec as at 2000 may be downloaded here:&lt;br /&gt;
* http://www.iso.ch/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=26780&lt;br /&gt;
*   Year:&lt;br /&gt;
*      YYYY (eg 1997)&lt;br /&gt;
*   Year and month:&lt;br /&gt;
*      YYYY-MM (eg 1997-07)&lt;br /&gt;
*   Complete date:&lt;br /&gt;
*      YYYY-MM-DD (eg 1997-07-16)&lt;br /&gt;
*   Complete date plus hours and minutes:&lt;br /&gt;
*      YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00)&lt;br /&gt;
*   Complete date plus hours, minutes and seconds:&lt;br /&gt;
*      YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)&lt;br /&gt;
*   Complete date plus hours, minutes, seconds and a decimal fraction of a second&lt;br /&gt;
*      YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00)&lt;br /&gt;
&lt;br /&gt;
   isoString   = upcase(arguments&amp;lt;1&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
   if len(isoString) then&lt;br /&gt;
&lt;br /&gt;
      isoDateString     = field(isoString,E.ISOTIME.SEP,1)&lt;br /&gt;
      isoTimeZoneString = field(isoString,E.ISOTIME.SEP,2)&lt;br /&gt;
      internalTime      = 0&lt;br /&gt;
      timeOffset        = 0&lt;br /&gt;
      validTime         = @true&lt;br /&gt;
&lt;br /&gt;
      internalDate      = iconv(isoDateString,E.ISODATE.CONV)&lt;br /&gt;
      begin case&lt;br /&gt;
      case status()         ;*// date not parsed&lt;br /&gt;
         validTime    = @false&lt;br /&gt;
      case index(isoTimeZoneString,E.PLUS,1)&lt;br /&gt;
         internalTime = iconv(field(isoTimeZoneString,E.PLUS,1),E.ISOTIME.CONV)&lt;br /&gt;
         if status() then validTime = @false&lt;br /&gt;
         timeOffset   = -1 * iconv(field(isoTimeZoneString,E.PLUS,2),E.ISOTIME.CONV)&lt;br /&gt;
         if status() then validTime = @false&lt;br /&gt;
      case index(isoTimeZoneString,E.MINUS,1)&lt;br /&gt;
         internalTime = iconv(field(isoTimeZoneString,E.MINUS,1),E.ISOTIME.CONV)&lt;br /&gt;
         if status() then validTime = @false&lt;br /&gt;
         timeOffset   = iconv(field(isoTimeZoneString,E.MINUS,2),E.ISOTIME.CONV)&lt;br /&gt;
         if status() then validTime = @false&lt;br /&gt;
      case index(isoTimeZoneString,E.ISOZONE.SEP,1)&lt;br /&gt;
         internalTime = iconv(field(isoTimeZoneString,E.ISOZONE.SEP,1),E.ISOTIME.CONV)&lt;br /&gt;
         if status() then validTime = @false&lt;br /&gt;
      case len(isoTimeZoneString)&lt;br /&gt;
         internalTime = iconv(field(isoTimeZoneString,E.ISOZONE.SEP,1),E.ISOTIME.CONV)&lt;br /&gt;
         if status() then validTime = @false&lt;br /&gt;
      end case&lt;br /&gt;
&lt;br /&gt;
      if validTime then&lt;br /&gt;
         internalDate  = (internalDate - E.EPOCH.OFFSET) * E.SECS.PER.DAY&lt;br /&gt;
         internalTime  = internalTime + timeOffset&lt;br /&gt;
         returnValue   = internalDate + internalTime&lt;br /&gt;
      end&lt;br /&gt;
   end else&lt;br /&gt;
      validTime = @false&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
return(@null)&lt;br /&gt;
&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
ParseRFCDateTime:    *// return Epoch&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
* RFC date time string: Sun, 06 Nov 1994 08:49:37 GMT&lt;br /&gt;
&lt;br /&gt;
   timeToParse = arguments&amp;lt;1&amp;gt;&lt;br /&gt;
   if timeToParse then&lt;br /&gt;
      datePart = iconv(field(timeToParse,&#039; &#039;,2,3),&#039;D&#039;)&lt;br /&gt;
      if not(status()) then&lt;br /&gt;
         timePart = iconv(field(timeToParse,&#039; &#039;,5),&#039;MT&#039;)&lt;br /&gt;
         if not(status()) then&lt;br /&gt;
            returnValue = datePart * E.SECS.PER.DAY + timePart&lt;br /&gt;
         end&lt;br /&gt;
      end&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
return(@null)&lt;br /&gt;
&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
ParseTimeZoneString:  *// parse unix TZ env string&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
&lt;br /&gt;
   tzString         = arguments&amp;lt;1&amp;gt;&lt;br /&gt;
   returnValue      = &#039;&#039;&lt;br /&gt;
   timeZoneArray  = &#039;&#039;&lt;br /&gt;
   *// 1=tz desc, 2=tz offset, 3=dls desc, 4=dls offset&lt;br /&gt;
   *// 5=start month,  6=week,  7=day,  8=time&lt;br /&gt;
   *// 9=stop  month, 10=week, 11=day, 12=time&lt;br /&gt;
&lt;br /&gt;
   if len(tzString) then&lt;br /&gt;
      *// get standard and dls offsets (and descriptors)&lt;br /&gt;
      tzPart = field(tzString,&#039;,&#039;,1)&lt;br /&gt;
      maxCharacter = len(tzPart)&lt;br /&gt;
      for charPos = 1 to maxCharacter&lt;br /&gt;
         character  = tzPart[charPos,1]&lt;br /&gt;
         lastDOChar = timeZoneArray[1]&lt;br /&gt;
&lt;br /&gt;
         begin case&lt;br /&gt;
         case character = &#039;:&#039;&lt;br /&gt;
            timeZoneArray    := character&lt;br /&gt;
         case not(alpha(character) ! num(character))&lt;br /&gt;
            timeZoneArray&amp;lt;-1&amp;gt; = character&lt;br /&gt;
         case alpha(lastDOChar) &amp;amp; num(character)&lt;br /&gt;
            timeZoneArray&amp;lt;-1&amp;gt; = character&lt;br /&gt;
         case num(lastDOChar) &amp;amp; alpha(character)&lt;br /&gt;
            timeZoneArray&amp;lt;-1&amp;gt; = character&lt;br /&gt;
         case @true&lt;br /&gt;
            timeZoneArray    := character&lt;br /&gt;
         end case&lt;br /&gt;
&lt;br /&gt;
      next charPos&lt;br /&gt;
&lt;br /&gt;
      if len(E.GTZO.OFFSET) then&lt;br /&gt;
         *// convert offset to seconds&lt;br /&gt;
         utcOffset = &#039;&#039;&lt;br /&gt;
         utcOffsetTime = E.GTZO.OFFSET&lt;br /&gt;
         if utcOffsetTime[1,1] = E.PLUS ! utcOffsetTime[1,1] = E.MINUS then&lt;br /&gt;
         *// first char is +/-&lt;br /&gt;
            utcOffset = utcOffsetTime[1,1]&lt;br /&gt;
            utcOffsetTime = utcOffsetTime[2,99]&lt;br /&gt;
         end&lt;br /&gt;
         utcOffsetSecs  = field(utcOffsetTime,&#039;:&#039;,1) * E.SECS.PER.HOUR&lt;br /&gt;
         utcOffsetSecs += field(utcOffsetTime,&#039;:&#039;,2) * E.SECS.PER.MIN&lt;br /&gt;
         utcOffsetSecs += field(utcOffsetTime,&#039;:&#039;,3)&lt;br /&gt;
         E.GTZO.OFFSET = utcOffset:utcOffsetSecs&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      if len(E.GTZO.DLS.OFFSET) then&lt;br /&gt;
         *// convert offset to seconds&lt;br /&gt;
         utcOffset = &#039;&#039;&lt;br /&gt;
         utcOffsetTime = E.GTZO.DLS.OFFSET&lt;br /&gt;
         if utcOffsetTime[1,1] = E.PLUS ! utcOffsetTime[1,1] = E.MINUS then&lt;br /&gt;
         *// first char is +/-&lt;br /&gt;
            utcOffset = utcOffsetTime[1,1]&lt;br /&gt;
            utcOffsetTime = utcOffsetTime[2,99]&lt;br /&gt;
         end&lt;br /&gt;
         utcOffsetSecs  = field(utcOffsetTime,&#039;:&#039;,1) * E.SECS.PER.HOUR&lt;br /&gt;
         utcOffsetSecs += field(utcOffsetTime,&#039;:&#039;,2) * E.SECS.PER.MIN&lt;br /&gt;
         utcOffsetSecs += field(utcOffsetTime,&#039;:&#039;,3)&lt;br /&gt;
         E.GTZO.DLS.OFFSET = utcOffset:utcOffsetSecs&lt;br /&gt;
      end else&lt;br /&gt;
         if utcOffsetSecs then ;*// use standard time as default - hour&lt;br /&gt;
*!!        E.GTZO.DLS.OFFSET = utcOffset:(utcOffsetSecs - E.SECS.PER.HOUR)&lt;br /&gt;
         end&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      if dcount(timeZoneArray,@am) &amp;gt; 4 then&lt;br /&gt;
         ndo = &#039;&#039;&lt;br /&gt;
         for i=1 to 4; ndo&amp;lt;i&amp;gt; = timeZoneArray&amp;lt;i&amp;gt;; next i&lt;br /&gt;
         timeZoneArray = ndo&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      *// get summer time start params&lt;br /&gt;
      tzPart       = field(tzString,&#039;,&#039;,2)&lt;br /&gt;
      if len(tzPart) then&lt;br /&gt;
         E.GTZO.START.MONTH = &#039;&#039;&lt;br /&gt;
         maxCharacter = len(field(tzPart,&#039;/&#039;,1)) ;*// assume 2am start/stop&lt;br /&gt;
         for charPos  = 1 to maxCharacter&lt;br /&gt;
            character = tzPart[charPos,1]&lt;br /&gt;
&lt;br /&gt;
            begin case&lt;br /&gt;
            case character = &#039;M&#039;&lt;br /&gt;
            case character = &#039;J&#039; ;*!!! julian date - shouldn&#039;t happen&lt;br /&gt;
            case character = &#039;.&#039;&lt;br /&gt;
               timeZoneArray := @am&lt;br /&gt;
            case @true&lt;br /&gt;
               timeZoneArray := character&lt;br /&gt;
            end case&lt;br /&gt;
&lt;br /&gt;
         next charPos&lt;br /&gt;
         E.GTZO.START.TIME = 7200 ;*// assume 2am&lt;br /&gt;
&lt;br /&gt;
         if dcount(timeZoneArray,@am) &amp;gt; 8 then&lt;br /&gt;
            ndo = &#039;&#039;&lt;br /&gt;
            for i=1 to 8; ndo&amp;lt;i&amp;gt; = timeZoneArray&amp;lt;i&amp;gt;; next i&lt;br /&gt;
            timeZoneArray = ndo&lt;br /&gt;
         end&lt;br /&gt;
      end else&lt;br /&gt;
         *// standard default - northern hemisphere&lt;br /&gt;
*!!         E.GTZO.START.MONTH = 4&lt;br /&gt;
*!!         E.GTZO.START.WEEK  = 1&lt;br /&gt;
*!!         E.GTZO.START.DAY   = 0&lt;br /&gt;
*!!         E.GTZO.START.TIME  = &#039;02:00&#039;&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      *//  get summer time stop params&lt;br /&gt;
      tzPart = field(tzString,&#039;,&#039;,3)&lt;br /&gt;
      if len(tzPart) then&lt;br /&gt;
         E.GTZO.STOP.MONTH = &#039;&#039;&lt;br /&gt;
         maxCharacter = len(field(tzPart,&#039;/&#039;,1)) ;*// assume 2am start/stop&lt;br /&gt;
         for charPos  = 1 to maxCharacter&lt;br /&gt;
            character = tzPart[charPos,1]&lt;br /&gt;
&lt;br /&gt;
            begin case&lt;br /&gt;
            case character = &#039;M&#039;&lt;br /&gt;
            case character = &#039;J&#039; ;*!!! julian date - shouldn&#039;t happen&lt;br /&gt;
            case character = &#039;.&#039;&lt;br /&gt;
               timeZoneArray := @am&lt;br /&gt;
            case @true&lt;br /&gt;
               timeZoneArray := character&lt;br /&gt;
            end case&lt;br /&gt;
&lt;br /&gt;
         next charPos&lt;br /&gt;
         E.GTZO.STOP.TIME = 7200 ;*// assume 2am&lt;br /&gt;
&lt;br /&gt;
         if dcount(timeZoneArray,@am) &amp;gt; 12 then&lt;br /&gt;
            ndo = &#039;&#039;&lt;br /&gt;
            for i=1 to 12; ndo&amp;lt;i&amp;gt; = timeZoneArray&amp;lt;i&amp;gt;; next i&lt;br /&gt;
            timeZoneArray = ndo&lt;br /&gt;
         end&lt;br /&gt;
      end else&lt;br /&gt;
         *// standard default - northern hemisphere&lt;br /&gt;
*!!         E.GTZO.STOP.MONTH = 10&lt;br /&gt;
*!!         E.GTZO.STOP.WEEK  = 5&lt;br /&gt;
*!!         E.GTZO.STOP.DAY   = 0&lt;br /&gt;
*!!         E.GTZO.STOP.TIME  = &#039;02:00&#039;&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      returnValue = timeZoneArray&lt;br /&gt;
&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
return(@null)&lt;br /&gt;
&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
SetDateFormat:       *// &#039;ON&#039; = International, &#039;OFF&#039; = US&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
&lt;br /&gt;
   switch = upcase(trim(arguments&amp;lt;1,1&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
   begin case&lt;br /&gt;
   case switch = &#039;OFF&#039;&lt;br /&gt;
      setDateFormatCmd = &#039;DATE.FORMAT OFF&#039;&lt;br /&gt;
&lt;br /&gt;
   case switch[1,1] = &#039;D&#039;  ;*// change default date output format&lt;br /&gt;
      setDateFormatCmd = &#039;DATE.FORMAT &#039;:arguments&amp;lt;1,1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   case @true&lt;br /&gt;
      setDateFormatCmd = &#039;DATE.FORMAT ON&#039;&lt;br /&gt;
&lt;br /&gt;
   end case&lt;br /&gt;
&lt;br /&gt;
   execute setDateFormatCmd capturing cap&lt;br /&gt;
   gosub GetDateFormat: ;*// return current date format&lt;br /&gt;
&lt;br /&gt;
return(@null)&lt;br /&gt;
&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
ThatsAllFolks: end&lt;br /&gt;
*--------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Also, see [[Ray Wurlod]]&#039;s article, [[Date Conversion Demystified]]&lt;br /&gt;
&lt;br /&gt;
HomePage&amp;gt;&amp;gt;SourceCode&amp;gt;&amp;gt;BasicSource&amp;gt;&amp;gt;&amp;lt;nowiki&amp;gt;DateUtility&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stuboy</name></author>
	</entry>
	<entry>
		<id>https://pickwiki.org/index.php?title=URLEncode&amp;diff=2404</id>
		<title>URLEncode</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=URLEncode&amp;diff=2404"/>
		<updated>2006-06-30T02:55:13Z</updated>

		<summary type="html">&lt;p&gt;Stuboy: *&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HomePage&amp;gt;&amp;gt;SourceCode&amp;gt;&amp;gt;BasicSource&amp;gt;&amp;gt;&amp;lt;nowiki&amp;gt;URLEncode&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a function to correctly URLEncode a string.&amp;lt;br&amp;gt;&lt;br /&gt;
URL encoding of a character consists of a &amp;quot;%&amp;quot; symbol, followed by the two-digit hexadecimal representation (case-insensitive) of the ISO-Latin code point for the character.&amp;lt;br&amp;gt;&lt;br /&gt;
Some of the encoding decisions can get tricky in the 32-47 range and you will have to decide how you might encode sections of strings to override encrypting some potentially valid unencoded URI delimiters.&lt;br /&gt;
&lt;br /&gt;
References:&amp;lt;br&amp;gt;&lt;br /&gt;
See http://www.gbiv.com/protocols/uri/rfc/rfc3986.html#characters&amp;lt;br&amp;gt;&lt;br /&gt;
See http://www.permadi.com/tutorial/urlEncoding&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
function URLEncode(inString)&lt;br /&gt;
&lt;br /&gt;
   *// perform standard URL encoding for UV ascii. ISO-8859-1 (ISO-Latin) character set.&lt;br /&gt;
   *// stuart boydell 17-Dec-2004&lt;br /&gt;
&lt;br /&gt;
   *// basic example:&lt;br /&gt;
   *// deffun URLEncode(string) ;* calling *URLEncode ;*[use &#039;calling globID&#039; if you globally catalogue the program]&lt;br /&gt;
   *// encodedString = URLEncode(unencodedString)&lt;br /&gt;
&lt;br /&gt;
   *// Only alphanumerics [0-9a-zA-Z], the special characters $-_.+!*&#039;(), &lt;br /&gt;
   *// and reserved characters used for their reserved purposes may be &lt;br /&gt;
   *// used unencoded within a URL.&lt;br /&gt;
&lt;br /&gt;
   *// This process encodes unsafe characters to their URL safe&lt;br /&gt;
   *// equivalent. eg. char(2) -&amp;gt; &amp;quot;%02&amp;quot;&lt;br /&gt;
&lt;br /&gt;
   *// First encodes char(37) &amp;quot;%&amp;quot; to %25 then loops through other ASCII.CODES ranges.&lt;br /&gt;
&lt;br /&gt;
   *// ranges of ascii codes of all characters to be encoded&lt;br /&gt;
   *// 0-31 	ASCII Control Characters 	Unsafe&lt;br /&gt;
   *// 32-47 	Reserved Characters 	&#039; &#039;!?#$%&amp;amp;&#039;()*+,-./ 	Unsafe&lt;br /&gt;
   *// 48-57 	ASCII Characters and Numbers 	0-9 	Safe&lt;br /&gt;
   *// 58-64 	Reserved Characters 	:;&amp;lt;=&amp;gt;?@ 	Unsafe&lt;br /&gt;
   *// 65-90 	ASCII Characters 	A-Z 	Safe&lt;br /&gt;
   *// 91-96 	Reserved Characters 	[\]^_` 	Unsafe&lt;br /&gt;
   *// 97-122 	ASCII Characters 	a-z 	Safe&lt;br /&gt;
   *// 123-126 	Reserved Characters 	{|}~ 	Unsafe&lt;br /&gt;
   *// 127 	Control Characters 	&#039; &#039; 	Unsafe&lt;br /&gt;
   *// 128-255 	Non-ASCII Characters 	&#039; &#039; 	Unsafe&lt;br /&gt;
   &lt;br /&gt;
   *// &#039;Special&#039; encoding characters&lt;br /&gt;
   equ E.PERCENT     to &#039;%&#039;,&lt;br /&gt;
       E.SPACE       to &#039; &#039;,&lt;br /&gt;
       E.PLUS        to &#039;+&#039;&lt;br /&gt;
&lt;br /&gt;
   *// &#039;Normal&#039; encoding start/end characters (decimal ascii)&lt;br /&gt;
   equ E.ASCII.START to (00:@am:38:@am:47:@am:58:@am:91:@am:96:@am:123),&lt;br /&gt;
       E.ASCII.END   to (36:@am:44:@am:47:@am:64:@am:94:@am:96:@am:255),&lt;br /&gt;
       E.MAXRANGE    to 7&lt;br /&gt;
&lt;br /&gt;
   *// convert &#039;special&#039; encoding characters &amp;quot;%+[sp]&amp;quot;&lt;br /&gt;
   outString = change(inString,E.PERCENT,E.PERCENT:&#039;25&#039;)&lt;br /&gt;
&lt;br /&gt;
   *// space may be converted to &#039;+&#039; under some schemes...&lt;br /&gt;
   *//outString = change(outString,E.PLUS,E.PERCENT:&#039;2B&#039;)&lt;br /&gt;
   *//outString = change(outString,E.SPACE,E.PLUS)&lt;br /&gt;
&lt;br /&gt;
   *// now convert &#039;normal&#039; character ranges&lt;br /&gt;
   for i = 1 to E.MAXRANGE&lt;br /&gt;
      for j = E.ASCII.START&amp;lt;i&amp;gt; to E.ASCII.END&amp;lt;i&amp;gt;&lt;br /&gt;
         jchar = char(j)  ;*// get char from decimal val&lt;br /&gt;
         *// index() character before change() - faster&lt;br /&gt;
         if index(outString,jchar,1) then&lt;br /&gt;
            outString = change(outString,jchar,E.PERCENT:dtx(j,2))&lt;br /&gt;
         end&lt;br /&gt;
      next j&lt;br /&gt;
   next i&lt;br /&gt;
&lt;br /&gt;
return(outString)&lt;br /&gt;
the:end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HomePage&amp;gt;&amp;gt;SourceCode&amp;gt;&amp;gt;BasicSource&amp;gt;&amp;gt;&amp;lt;nowiki&amp;gt;URLEncode&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stuboy</name></author>
	</entry>
	<entry>
		<id>https://pickwiki.org/index.php?title=URLEncode&amp;diff=2406</id>
		<title>URLEncode</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=URLEncode&amp;diff=2406"/>
		<updated>2006-06-30T01:13:32Z</updated>

		<summary type="html">&lt;p&gt;Stuboy: *&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HomePage&amp;gt;&amp;gt;SourceCode&amp;gt;&amp;gt;BasicSource&amp;gt;&amp;gt;&amp;lt;nowiki&amp;gt;URLEncode&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a function to correctly URLEncode a string.&amp;lt;br&amp;gt;&lt;br /&gt;
URL encoding of a character consists of a &amp;quot;%&amp;quot; symbol, followed by the two-digit hexadecimal representation (case-insensitive) of the ISO-Latin code point for the character.&amp;lt;br&amp;gt;&lt;br /&gt;
See http://www.permadi.com/tutorial/urlEncoding/ for more info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
function URLEncode(inString)&lt;br /&gt;
&lt;br /&gt;
   *// perform standard URL encoding for UV ascii. ISO-8859-1 (ISO-Latin) character set.&lt;br /&gt;
   *// stuart boydell 17-Dec-2004&lt;br /&gt;
&lt;br /&gt;
   *// basic example:&lt;br /&gt;
   *// deffun URLEncode(string) ;* calling *URLEncode ;*- use this if you globally catalogue the program&lt;br /&gt;
   *// encodedString = URLEncode(unencodedString)&lt;br /&gt;
&lt;br /&gt;
   *// Only alphanumerics [0-9a-zA-Z], the special characters $-_.+!*&#039;(), &lt;br /&gt;
   *// and reserved characters used for their reserved purposes may be &lt;br /&gt;
   *// used unencoded within a URL.&lt;br /&gt;
&lt;br /&gt;
   *// This process encodes unsafe characters to their URL safe&lt;br /&gt;
   *// equivalent. eg. char(2) -&amp;gt; &amp;quot;%02&amp;quot;&lt;br /&gt;
&lt;br /&gt;
   *// First encodes char(37) &amp;quot;%&amp;quot; to %25 then loops through other ASCII.CODES ranges.&lt;br /&gt;
&lt;br /&gt;
   *// ranges of ascii codes of all characters to be encoded&lt;br /&gt;
   *// 0-31 	ASCII Control Characters 	These characters are not printable 	Unsafe&lt;br /&gt;
   *// 32-47 	Reserved Characters 	&#039; &#039;!?#$%&amp;amp;&#039;()*+,-./ 	Unsafe&lt;br /&gt;
   *// 48-57 	ASCII Characters and Numbers 	0-9 	Safe&lt;br /&gt;
   *// 58-64 	Reserved Characters 	:;&amp;lt;=&amp;gt;?@ 	Unsafe&lt;br /&gt;
   *// 65-90 	ASCII Characters 	A-Z 	Safe&lt;br /&gt;
   *// 91-96 	Reserved Characters 	[\]^_` 	Unsafe&lt;br /&gt;
   *// 97-122 	ASCII Characters 	a-z 	Safe&lt;br /&gt;
   *// 123-126 	Reserved Characters 	{|}~ 	Unsafe&lt;br /&gt;
   *// 127 	Control Characters 	&#039; &#039; 	Unsafe&lt;br /&gt;
   *// 128-255 	Non-ASCII Characters 	&#039; &#039; 	Unsafe&lt;br /&gt;
   &lt;br /&gt;
   *// &#039;Special&#039; encoding characters&lt;br /&gt;
   equ E.PERCENT     to &#039;%&#039;,&lt;br /&gt;
       E.SPACE       to &#039; &#039;,&lt;br /&gt;
       E.PLUS        to &#039;+&#039;&lt;br /&gt;
&lt;br /&gt;
   *// &#039;Normal&#039; encoding start/end characters (decimal ascii)&lt;br /&gt;
   equ E.ASCII.START to (00:@am:34:@am:38:@am:47:@am:58:@am:91:@am:96:@am:123),&lt;br /&gt;
       E.ASCII.END   to (31:@am:36:@am:38:@am:47:@am:64:@am:94:@am:96:@am:255),&lt;br /&gt;
       E.MAXRANGE    to 8&lt;br /&gt;
&lt;br /&gt;
   *// convert &#039;special&#039; encoding characters &amp;quot;%+[sp]&amp;quot;&lt;br /&gt;
   string = change(inString,E.PERCENT,E.PERCENT:&#039;25&#039;)&lt;br /&gt;
   string = change(string,E.PLUS,E.PERCENT:&#039;2B&#039;)&lt;br /&gt;
   string = change(string,E.SPACE,E.PLUS)&lt;br /&gt;
&lt;br /&gt;
   *// now convert &#039;normal&#039; character ranges&lt;br /&gt;
   for i = 1 to E.MAXRANGE&lt;br /&gt;
      for j = E.ASCII.START&amp;lt;i&amp;gt; to E.ASCII.END&amp;lt;i&amp;gt;&lt;br /&gt;
         jchar = char(j)  ;*// get char from decimal val&lt;br /&gt;
         *// index() character before change() - faster&lt;br /&gt;
         if index(string,jchar,1) then&lt;br /&gt;
            string = change(string,jchar,E.PERCENT:dtx(j,2))&lt;br /&gt;
         end&lt;br /&gt;
      next j&lt;br /&gt;
   next i&lt;br /&gt;
&lt;br /&gt;
return(string)&lt;br /&gt;
the:end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HomePage&amp;gt;&amp;gt;SourceCode&amp;gt;&amp;gt;BasicSource&amp;gt;&amp;gt;&amp;lt;nowiki&amp;gt;URLEncode&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stuboy</name></author>
	</entry>
	<entry>
		<id>https://pickwiki.org/index.php?title=AccessFromDotNet&amp;diff=1503</id>
		<title>AccessFromDotNet</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=AccessFromDotNet&amp;diff=1503"/>
		<updated>2006-01-03T12:03:05Z</updated>

		<summary type="html">&lt;p&gt;Stuboy: *&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Information on connecting to U2 from .NET&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There&#039;s a whitepaper on IBM&#039;s site about U2 and .NET:&lt;br /&gt;
ftp://ftp.software.ibm.com/software/data/u2/pubs/whitepapers/ibmu2-microsoftnet.pdf&lt;br /&gt;
&lt;br /&gt;
You can use jbimp.exe (usually in Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin) to convert java bytecode into a .net assembly.&lt;br /&gt;
&lt;br /&gt;
Link to Raining Data&#039;s .NET data provider:&lt;br /&gt;
http://www.rainingdata.com/products/connect/dotnet/index.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
2006-01-03&lt;br /&gt;
:I would recommend looking at using [http://support.microsoft.com/default.aspx?scid=kb;en-us;308672 Microsoft Enterprise Services] to manage connection pooling and expose a useful interface to non-U2 developers. We have used Enterprise Services and XML in/out of U2 with excellent results.&lt;br /&gt;
&lt;br /&gt;
:Something like [http://www-306.ibm.com/software/data/u2/redback/ RedBack RBOs] also provide a neat interface into U2, Graphical mapping provides an opportunity to present that old, hacked application to Windows developers with a nice clean object-oriented skin.&lt;br /&gt;
&lt;br /&gt;
:Also recommend looking at [http://msdn.microsoft.com/practices MSDN Patterns and Practices] for some very good guides on how to do this stuff.&lt;/div&gt;</summary>
		<author><name>Stuboy</name></author>
	</entry>
	<entry>
		<id>https://pickwiki.org/index.php?title=SBProcessSearch&amp;diff=2216</id>
		<title>SBProcessSearch</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=SBProcessSearch&amp;diff=2216"/>
		<updated>2006-01-03T11:20:01Z</updated>

		<summary type="html">&lt;p&gt;Stuboy: *&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HomePage&amp;gt;&amp;gt;SourceCode&amp;gt;&amp;gt;BasicSource&amp;gt;&amp;gt;&amp;lt;nowiki&amp;gt;SBProcessSearch&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
program SBProcessSearch&lt;br /&gt;
* A very simple string search utility for an SB+ process file.&lt;br /&gt;
* stuart boydell - january 2006&lt;br /&gt;
* eg&lt;br /&gt;
* &amp;gt;RUN UTILS SBProcessSearch XXPROCESS SBOPEN&lt;br /&gt;
*    will search for the expression SBOPEN and print&lt;br /&gt;
*    out a list of occurences in the file.&lt;br /&gt;
&lt;br /&gt;
searchFile = field(@sentence,&#039; &#039;,4)&lt;br /&gt;
searchTerm = field(@sentence,&#039; &#039;,5)&lt;br /&gt;
if searchTerm = &#039;&#039; then stop&lt;br /&gt;
open searchFile to f else stop&lt;br /&gt;
data searchTerm,&#039;&#039;&lt;br /&gt;
execute &#039;SEARCH &#039;:searchFile capturing cap&lt;br /&gt;
loop while readnext id do&lt;br /&gt;
   readv p from f,id,6 then&lt;br /&gt;
      x = 1&lt;br /&gt;
      loop while findstr searchTerm in p,x setting a,v do&lt;br /&gt;
         crt id&amp;quot;l#30&amp;quot; : x&amp;quot;r#3 &amp;quot;: v&amp;quot;r#3 &amp;quot;: p&amp;lt;a,v&amp;gt;&lt;br /&gt;
         x += 1&lt;br /&gt;
      repeat&lt;br /&gt;
   end&lt;br /&gt;
repeat&lt;br /&gt;
clearselect&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HomePage&amp;gt;&amp;gt;SourceCode&amp;gt;&amp;gt;BasicSource&amp;gt;&amp;gt;&amp;lt;nowiki&amp;gt;SBProcessSearch&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stuboy</name></author>
	</entry>
	<entry>
		<id>https://pickwiki.org/index.php?title=URLEncode&amp;diff=2405</id>
		<title>URLEncode</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=URLEncode&amp;diff=2405"/>
		<updated>2005-04-22T00:39:01Z</updated>

		<summary type="html">&lt;p&gt;Stuboy: *&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HomePage&amp;gt;&amp;gt;SourceCode&amp;gt;&amp;gt;BasicSource&amp;gt;&amp;gt;URLEncode&lt;br /&gt;
&lt;br /&gt;
This is a function to correctly URLEncode a string.&amp;lt;br&amp;gt;&lt;br /&gt;
I wrote this when I was posting data into a SQL database using XML datagrams (very useful). The posted data had to be URL encoded and this was what I came up with.&amp;lt;br&amp;gt;&lt;br /&gt;
Because the data I was dealing with was only printable ascii &amp;lt; char(128) I have encoded only this range + uv delimiters for speed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
function URLEncode(string)&lt;br /&gt;
&lt;br /&gt;
   *// perform standard URL encoding for UV ascii.&lt;br /&gt;
   *// sboydell 17-Dec-2004&lt;br /&gt;
&lt;br /&gt;
   *// deffun URLEncode(string) [calling *URLEncode]&lt;br /&gt;
   *// encodedString = URLEncode(unencodedString)&lt;br /&gt;
&lt;br /&gt;
   *// Only alphanumerics [0-9a-zA-Z], the special characters $-_.+!*&#039;(), &lt;br /&gt;
   *// and reserved characters used for their reserved purposes may be &lt;br /&gt;
   *// used unencoded within a URL.&lt;br /&gt;
&lt;br /&gt;
   *// ranges of ascii codes of all characters to be encoded&lt;br /&gt;
   *// 0-31 	ASCII Control Characters 	These characters are not printable 	Unsafe&lt;br /&gt;
   *// 32-47 	Reserved Characters 	&#039; &#039;!?#$%&amp;amp;&#039;()*+,-./ 	Unsafe&lt;br /&gt;
   *// 48-57 	ASCII Characters and Numbers 	0-9 	Safe&lt;br /&gt;
   *// 58-64 	Reserved Characters 	:;&amp;lt;=&amp;gt;?@ 	Unsafe&lt;br /&gt;
   *// 65-90 	ASCII Characters 	A-Z 	Safe&lt;br /&gt;
   *// 91-96 	Reserved Characters 	[\]^_` 	Unsafe&lt;br /&gt;
   *// 97-122 	ASCII Characters 	a-z 	Safe&lt;br /&gt;
   *// 123-126 	Reserved Characters 	{|}~ 	Unsafe&lt;br /&gt;
   *// 127 	Control Characters 	&#039; &#039; 	Unsafe&lt;br /&gt;
   *// 128-255 	Non-ASCII Characters 	&#039; &#039; 	Unsafe&lt;br /&gt;
   &lt;br /&gt;
   equ E.COMMA       to &#039;,&#039;,&lt;br /&gt;
       E.PERCENT     to &#039;%&#039;,&lt;br /&gt;
       E.MAXRANGE    to 9,&lt;br /&gt;
       E.ASCII.CODES to &#039;37,37,32,36,38,44,47,47,58,64,91,94,96,96,123,128,250,255&#039;&lt;br /&gt;
&lt;br /&gt;
   *// define pairs of ranges to encode&lt;br /&gt;
   dim ENCODE.RANGE(E.MAXRANGE,2)&lt;br /&gt;
   matparse ENCODE.RANGE from E.ASCII.CODES, E.COMMA&lt;br /&gt;
&lt;br /&gt;
   for i = 1 to E.MAXRANGE&lt;br /&gt;
      for j = ENCODE.RANGE(i,1) to ENCODE.RANGE(i,2)&lt;br /&gt;
         string = change(string,char(j),E.PERCENT:dtx(j,2))&lt;br /&gt;
      next j&lt;br /&gt;
   next i&lt;br /&gt;
&lt;br /&gt;
return(string)&lt;br /&gt;
&lt;br /&gt;
the:end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stuboy</name></author>
	</entry>
	<entry>
		<id>https://pickwiki.org/index.php?title=ChoiceBox&amp;diff=1614</id>
		<title>ChoiceBox</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=ChoiceBox&amp;diff=1614"/>
		<updated>2004-10-05T03:47:09Z</updated>

		<summary type="html">&lt;p&gt;Stuboy: Fix to CHOICE.BOX.B UV for correct HELP display&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When using HELP at TCL with a telnet client more than 80 columns wide you will need to fix the CHOICE.BOX.B program.&amp;lt;br&amp;gt;&lt;br /&gt;
The program uses a fixed value of 39 as the mid point of the screen and when this is not the case causes all sorts of screen strife.&amp;lt;br&amp;gt;&lt;br /&gt;
The following changes (in bold) work for vt220 emulation.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:0030 SUBROUTINE CHOICE.BOX.B(start.line, max.lines, width, textstr.orig,&amp;lt;br&amp;gt;&lt;br /&gt;
:0031                         Button.Array,  selvalue,helpstring)&amp;lt;br&amp;gt;&lt;br /&gt;
:0032&amp;lt;br&amp;gt;&lt;br /&gt;
:0033 $INCLUDE UNIVERSE.INCLUDE MTF.INCL.H&amp;lt;br&amp;gt;&lt;br /&gt;
:0034 EQU KEYNUM TO 7&amp;lt;br&amp;gt;&lt;br /&gt;
:0035 DIM string.array(KEYNUM)&amp;lt;br&amp;gt;&lt;br /&gt;
:0036 DIM string.codes(KEYNUM)&amp;lt;br&amp;gt;&lt;br /&gt;
:0037 Default.list=0&amp;lt;br&amp;gt;&lt;br /&gt;
:0038&amp;lt;br&amp;gt;&lt;br /&gt;
:0039 textstr=textstr.orig&amp;lt;br&amp;gt;&lt;br /&gt;
:0040&amp;lt;br&amp;gt;&lt;br /&gt;
:0041 Help.number=0&amp;lt;br&amp;gt;&lt;br /&gt;
:0042 &amp;lt;b&amp;gt;midPoint = int(system(2)/2) - 1&amp;lt;/b&amp;gt; ;* find mid point&amp;lt;br&amp;gt;&lt;br /&gt;
:0043 IF width &amp;lt; 25 THEN width = 25&amp;lt;br&amp;gt;&lt;br /&gt;
:0044 &amp;lt;b&amp;gt;start.col  = midPoint - int(width/2)&amp;lt;/b&amp;gt; ;* use mid point instead of &amp;quot;39&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
:0045 text.start = start.col&amp;lt;br&amp;gt;&lt;br /&gt;
:0046 &amp;lt;b&amp;gt;IF LENDP(textstr) &amp;lt; width THEN text.start = (midPoint-int(LENDP(textstr)/2)) -1&amp;lt;/b&amp;gt; ;* use mid point instead of &amp;quot;39&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
:0047&amp;lt;br&amp;gt;&lt;br /&gt;
:0048 IF Button.Array=&amp;quot;&amp;quot; THEN&amp;lt;br&amp;gt;&lt;br /&gt;
:etc ...&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Re-compile APP.PROGS CHOICE.BOX.B&amp;lt;br&amp;gt;&lt;br /&gt;
CATALOG APP.PROGS *CHOICE.BOX.B FORCE&lt;/div&gt;</summary>
		<author><name>Stuboy</name></author>
	</entry>
	<entry>
		<id>https://pickwiki.org/index.php?title=CommandReader&amp;diff=1593</id>
		<title>CommandReader</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=CommandReader&amp;diff=1593"/>
		<updated>2004-04-06T02:50:00Z</updated>

		<summary type="html">&lt;p&gt;Stuboy: *&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nasty bit of code but it works.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
* A simple test program to execute a U2 command and parse the output.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
import asjava.uniobjects.*;&lt;br /&gt;
import asjava.uniclientlibs.*;&lt;br /&gt;
import java.io.*;&lt;br /&gt;
&lt;br /&gt;
public class CommandReader extends BufferedReader {&lt;br /&gt;
&lt;br /&gt;
    public CommandReader(StringReader st) {&lt;br /&gt;
        super(st);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public static UniSession doLogin(String cmd[]) {&lt;br /&gt;
&lt;br /&gt;
        UniSession uSession;&lt;br /&gt;
        UniJava uJava = new UniJava();&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            uSession = uJava.openSession();&lt;br /&gt;
            uSession.connect(cmd[0],cmd[1],cmd[2],cmd[3]);&lt;br /&gt;
            System.out.print(&amp;quot;Connected:&amp;quot;   + uSession.isActive()&lt;br /&gt;
                + &amp;quot; to:&amp;quot; + uSession.getHostName() + &amp;quot;/&amp;quot; + uSession.getAccountPath()&lt;br /&gt;
                + &amp;quot; cmd:&amp;quot; + cmd[4]); &lt;br /&gt;
            if (cmd.length &amp;gt; 5) System.out.println(&amp;quot; parsing:&amp;quot; + cmd[5]);&lt;br /&gt;
                else            System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
        } catch (UniSessionException e) {&lt;br /&gt;
            System.out.println(&amp;quot;Error: &amp;quot; + e);&lt;br /&gt;
            uSession = null;&lt;br /&gt;
        }&lt;br /&gt;
        return uSession;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public static boolean doLogout(UniSession uSession) {&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            // lets disconnect from the database.&lt;br /&gt;
            if (uSession.isActive()) uSession.disconnect();&lt;br /&gt;
        }&lt;br /&gt;
            catch (UniSessionException e) {&lt;br /&gt;
            System.out.println(&amp;quot;Error: &amp;quot; + e);&lt;br /&gt;
        }&lt;br /&gt;
        return !uSession.isActive();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public static String doUniCommand(UniSession uSession, String cmd) {&lt;br /&gt;
        try {&lt;br /&gt;
            UniCommand uCmd = uSession.command();&lt;br /&gt;
            uCmd.setCommand(cmd);&lt;br /&gt;
            uCmd.exec();&lt;br /&gt;
            return uCmd.response();&lt;br /&gt;
        } catch (Exception e) {&lt;br /&gt;
            return &amp;quot;Cmd Error: &amp;quot; + e;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public static   void main(String args[]) {&lt;br /&gt;
        if (args.length &amp;lt; 5) {&lt;br /&gt;
            System.out.println(&amp;quot;Usage: java -classpath &amp;lt;classpath&amp;gt; CommandReader &amp;lt;host&amp;gt; &amp;lt;user&amp;gt; &amp;lt;pass&amp;gt; &amp;lt;account&amp;gt; &amp;lt;cmd&amp;gt; &amp;lt;filter&amp;gt;]&amp;quot;);&lt;br /&gt;
            System.out.println(&amp;quot;&amp;lt;classpath&amp;gt; - must contain the commons-httpclient.jar and commons-logging.jar&amp;quot;);&lt;br /&gt;
            System.out.println(&amp;quot;&amp;lt;host&amp;gt; - uniVerse host&amp;quot;);&lt;br /&gt;
            System.out.println(&amp;quot;&amp;lt;user&amp;gt; - the user id to log in with&amp;quot;);&lt;br /&gt;
            System.out.println(&amp;quot;&amp;lt;password&amp;gt; - the password&amp;quot;);&lt;br /&gt;
            System.out.println(&amp;quot;&amp;lt;account&amp;gt; - uniVerse account&amp;quot;);&lt;br /&gt;
            System.out.println(&amp;quot;&amp;lt;cmd&amp;gt; - command to process&amp;quot;);&lt;br /&gt;
            System.out.println(&amp;quot;&amp;lt;filter&amp;gt; - filter string&amp;quot;);&lt;br /&gt;
            System.out.println(&amp;quot;\neg. java CommandReader ironclad fkruger fubar2 UV \&amp;quot;SORT UV.ACCOUNT\&amp;quot; /usr/lpp&amp;quot;);&lt;br /&gt;
            System.out.println();&lt;br /&gt;
            System.exit(1);&lt;br /&gt;
        } else {&lt;br /&gt;
            String strLine; int n = 0;&lt;br /&gt;
            UniSession uSession = doLogin(args);&lt;br /&gt;
            if (args.length &amp;gt; 5) {&lt;br /&gt;
                try {&lt;br /&gt;
                    CommandReader cr = new CommandReader(new StringReader(doUniCommand(uSession, args[4])));&lt;br /&gt;
                    cr.mark(1);&lt;br /&gt;
                    while (cr.read() &amp;gt; 0) {&lt;br /&gt;
                        cr.reset();&lt;br /&gt;
                        n++;&lt;br /&gt;
                        strLine = cr.readLine();&lt;br /&gt;
                        if (strLine.indexOf(args[5])    &amp;gt; 0) {&lt;br /&gt;
                            System.out.println(strLine);&lt;br /&gt;
                        }&lt;br /&gt;
                        cr.mark(1);&lt;br /&gt;
                    }&lt;br /&gt;
                    cr.close();&lt;br /&gt;
                }   catch (Exception e) {&lt;br /&gt;
                    System.out.println(&amp;quot;ex &amp;quot; + e);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.out.println(doUniCommand(uSession,args[4]));&lt;br /&gt;
            }&lt;br /&gt;
            System.out.println(&amp;quot;Disconnected:&amp;quot; + doLogout(uSession) +   &amp;quot; parsed:&amp;quot;  + n + &amp;quot; lines&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stuboy</name></author>
	</entry>
	<entry>
		<id>https://pickwiki.org/index.php?title=Stuboy&amp;diff=2265</id>
		<title>Stuboy</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=Stuboy&amp;diff=2265"/>
		<updated>2004-04-06T02:44:10Z</updated>

		<summary type="html">&lt;p&gt;Stuboy: *&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Stu Boydell&lt;br /&gt;
&lt;br /&gt;
Melbourne&lt;br /&gt;
&lt;br /&gt;
MV since 1989&lt;br /&gt;
&lt;br /&gt;
No War&lt;/div&gt;</summary>
		<author><name>Stuboy</name></author>
	</entry>
	<entry>
		<id>https://pickwiki.org/index.php?title=EditPlus&amp;diff=1738</id>
		<title>EditPlus</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=EditPlus&amp;diff=1738"/>
		<updated>2004-01-28T07:35:49Z</updated>

		<summary type="html">&lt;p&gt;Stuboy: Updates to syntax file for UV 10.1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#TITLE=UV10&lt;br /&gt;
; EditPlus Syntax File v10.1b written by Stuart Boydell uvstx@sbcs.com.au.&lt;br /&gt;
; This file is provided as a syntax file for UniVerse 10.&lt;br /&gt;
; 12-Sep-2003 update v10.1b api verbs &amp;amp; syntax &lt;br /&gt;
;&lt;br /&gt;
; Tools/Prefernces/Settings &amp;amp; Syntax:&lt;br /&gt;
;   Set this as the &amp;quot;File types&amp;quot; Default syntax for items without extensions &lt;br /&gt;
;   Create new File type for UV syntax.&lt;br /&gt;
;   Setup the function pattern to allow use of Search/Funtion List (ctrl-F11)&lt;br /&gt;
;   to go to program labels.&lt;br /&gt;
;&lt;br /&gt;
;   File Extensions: bas;par&lt;br /&gt;
;   Function (subr) pattern: ^ *[0-9A-Za-z\.-_]+\:&lt;br /&gt;
&lt;br /&gt;
#DELIMITER=(){}[]-+*%/=&amp;quot;&#039;~!&amp;amp;|\&amp;lt;&amp;gt;?:;,&lt;br /&gt;
#QUOTATION1=&#039;&lt;br /&gt;
#QUOTATION2=&amp;quot;&lt;br /&gt;
#CONTINUE_QUOTE=y&lt;br /&gt;
; ensures unclosed quotes are obvious&lt;br /&gt;
#LINECOMMENT=*&lt;br /&gt;
#LINECOMMENT2=!&lt;br /&gt;
; also possible line comments are REM and &amp;quot;$*&amp;quot;&lt;br /&gt;
#COMMENTON=&lt;br /&gt;
#COMMENTOFF=&lt;br /&gt;
#COMMENTON2=&lt;br /&gt;
#COMMENTOFF2=&lt;br /&gt;
#ESCAPE=&lt;br /&gt;
#CASE=n&lt;br /&gt;
#PREFIX1=&lt;br /&gt;
#PREFIX2=&lt;br /&gt;
#PREFIX3=&lt;br /&gt;
; prefix &amp;quot;@&amp;quot; defines uv @variables&lt;br /&gt;
#PREFIX4=@&lt;br /&gt;
#PREFIX5=&lt;br /&gt;
#SUFFIX1=&lt;br /&gt;
#SUFFIX2=&lt;br /&gt;
#SUFFIX3=&lt;br /&gt;
#SUFFIX4=&lt;br /&gt;
; suffix &amp;quot;:&amp;quot; defines uv subroutines&lt;br /&gt;
#SUFFIX5=:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#KEYWORD=UV BASIC Reserved Words&lt;br /&gt;
&lt;br /&gt;
; minor keywords&lt;br /&gt;
before&lt;br /&gt;
by&lt;br /&gt;
calling&lt;br /&gt;
capturing&lt;br /&gt;
commit&lt;br /&gt;
do&lt;br /&gt;
else&lt;br /&gt;
end&lt;br /&gt;
error&lt;br /&gt;
from&lt;br /&gt;
in&lt;br /&gt;
isolation&lt;br /&gt;
level&lt;br /&gt;
lit&lt;br /&gt;
literally&lt;br /&gt;
out&lt;br /&gt;
passlist&lt;br /&gt;
repeat&lt;br /&gt;
returning&lt;br /&gt;
rtnlist&lt;br /&gt;
setting&lt;br /&gt;
start&lt;br /&gt;
status&lt;br /&gt;
step&lt;br /&gt;
then&lt;br /&gt;
to&lt;br /&gt;
until&lt;br /&gt;
using&lt;br /&gt;
while&lt;br /&gt;
&lt;br /&gt;
; major keywords&lt;br /&gt;
&lt;br /&gt;
!async&lt;br /&gt;
!errno&lt;br /&gt;
!fcmp&lt;br /&gt;
!get.partnum&lt;br /&gt;
!get.pathname&lt;br /&gt;
!get.pu&lt;br /&gt;
!get.user.counts&lt;br /&gt;
!inline.prompts&lt;br /&gt;
!ints&lt;br /&gt;
!make.pathname&lt;br /&gt;
!matches&lt;br /&gt;
!message&lt;br /&gt;
!report.error&lt;br /&gt;
!set.ptr&lt;br /&gt;
!set.pu&lt;br /&gt;
!timdat&lt;br /&gt;
!user.type&lt;br /&gt;
!voc.pathname&lt;br /&gt;
$chain&lt;br /&gt;
$copyright&lt;br /&gt;
$define&lt;br /&gt;
$eject&lt;br /&gt;
$else&lt;br /&gt;
$endif&lt;br /&gt;
$ifdef&lt;br /&gt;
$ifndef&lt;br /&gt;
$include&lt;br /&gt;
$indef&lt;br /&gt;
$insert&lt;br /&gt;
$map&lt;br /&gt;
$options&lt;br /&gt;
$page&lt;br /&gt;
$undefine&lt;br /&gt;
^#include&lt;br /&gt;
; abort - see struct&lt;br /&gt;
abs&lt;br /&gt;
abss&lt;br /&gt;
acos&lt;br /&gt;
adds&lt;br /&gt;
alpha&lt;br /&gt;
ands&lt;br /&gt;
ascii&lt;br /&gt;
asin&lt;br /&gt;
; assign - see structure section&lt;br /&gt;
assigned&lt;br /&gt;
atan&lt;br /&gt;
authorization&lt;br /&gt;
auxmap&lt;br /&gt;
begin&lt;br /&gt;
bitand&lt;br /&gt;
bitnot&lt;br /&gt;
bitor&lt;br /&gt;
bitreset&lt;br /&gt;
bitset&lt;br /&gt;
bittest&lt;br /&gt;
bitxor&lt;br /&gt;
break&lt;br /&gt;
bscan&lt;br /&gt;
byte&lt;br /&gt;
bytelen&lt;br /&gt;
bytetype&lt;br /&gt;
byteval&lt;br /&gt;
call&lt;br /&gt;
case&lt;br /&gt;
cat&lt;br /&gt;
cats&lt;br /&gt;
century.pivot&lt;br /&gt;
chain&lt;br /&gt;
change&lt;br /&gt;
char&lt;br /&gt;
chars&lt;br /&gt;
checksum&lt;br /&gt;
clear&lt;br /&gt;
cleardata&lt;br /&gt;
clearfile&lt;br /&gt;
clearprompts&lt;br /&gt;
clearselect&lt;br /&gt;
close&lt;br /&gt;
closeseq&lt;br /&gt;
col1&lt;br /&gt;
col2&lt;br /&gt;
com&lt;br /&gt;
commit&lt;br /&gt;
common&lt;br /&gt;
compare&lt;br /&gt;
constants&lt;br /&gt;
continue&lt;br /&gt;
convert&lt;br /&gt;
cos&lt;br /&gt;
cosh&lt;br /&gt;
count&lt;br /&gt;
counts&lt;br /&gt;
create&lt;br /&gt;
crt&lt;br /&gt;
data&lt;br /&gt;
date&lt;br /&gt;
dcount&lt;br /&gt;
debug&lt;br /&gt;
declare &lt;br /&gt;
gci&lt;br /&gt;
deffun&lt;br /&gt;
del&lt;br /&gt;
delete&lt;br /&gt;
deletelist&lt;br /&gt;
deleteu&lt;br /&gt;
descrinfo&lt;br /&gt;
digest&lt;br /&gt;
dim&lt;br /&gt;
dimension&lt;br /&gt;
display&lt;br /&gt;
div&lt;br /&gt;
divs&lt;br /&gt;
downcase&lt;br /&gt;
dquote&lt;br /&gt;
dtx&lt;br /&gt;
ebcdic&lt;br /&gt;
echo&lt;br /&gt;
encode&lt;br /&gt;
encrypt&lt;br /&gt;
end&lt;br /&gt;
enter&lt;br /&gt;
eof(arg.)&lt;br /&gt;
equ&lt;br /&gt;
equate&lt;br /&gt;
ereplace&lt;br /&gt;
errmsg&lt;br /&gt;
exchange&lt;br /&gt;
execute&lt;br /&gt;
exit&lt;br /&gt;
exp&lt;br /&gt;
extract&lt;br /&gt;
fadd&lt;br /&gt;
fdiv&lt;br /&gt;
ffix&lt;br /&gt;
fflt&lt;br /&gt;
field&lt;br /&gt;
fields&lt;br /&gt;
fieldstore&lt;br /&gt;
fileinfo&lt;br /&gt;
filelock&lt;br /&gt;
fileunlock&lt;br /&gt;
find&lt;br /&gt;
findstr&lt;br /&gt;
fix&lt;br /&gt;
flush&lt;br /&gt;
fmt&lt;br /&gt;
fmtdp&lt;br /&gt;
fmts&lt;br /&gt;
fmtsdp&lt;br /&gt;
fmul&lt;br /&gt;
fold&lt;br /&gt;
folddp&lt;br /&gt;
footing&lt;br /&gt;
for&lt;br /&gt;
formlist&lt;br /&gt;
fsub&lt;br /&gt;
function&lt;br /&gt;
ges&lt;br /&gt;
get&lt;br /&gt;
get(arg.)&lt;br /&gt;
getlist&lt;br /&gt;
getlocale&lt;br /&gt;
getrem&lt;br /&gt;
getx&lt;br /&gt;
; go - here there be dragons&lt;br /&gt;
; goto - here there be dragons&lt;br /&gt;
gosub&lt;br /&gt;
group&lt;br /&gt;
groupstore&lt;br /&gt;
gts&lt;br /&gt;
heading&lt;br /&gt;
headinge&lt;br /&gt;
headingn&lt;br /&gt;
hush&lt;br /&gt;
icheck&lt;br /&gt;
iconv&lt;br /&gt;
iconvs&lt;br /&gt;
if&lt;br /&gt;
ifs&lt;br /&gt;
ilprompt&lt;br /&gt;
include&lt;br /&gt;
index&lt;br /&gt;
indexs&lt;br /&gt;
indices&lt;br /&gt;
inmat&lt;br /&gt;
input&lt;br /&gt;
inputclear&lt;br /&gt;
inputdisp&lt;br /&gt;
inputdp&lt;br /&gt;
inputerr&lt;br /&gt;
inputif&lt;br /&gt;
inputnull&lt;br /&gt;
inputtrap&lt;br /&gt;
ins&lt;br /&gt;
insert&lt;br /&gt;
int&lt;br /&gt;
isnull&lt;br /&gt;
isnulls&lt;br /&gt;
itype&lt;br /&gt;
keyedit&lt;br /&gt;
keyexit&lt;br /&gt;
keyin&lt;br /&gt;
keytrap&lt;br /&gt;
left&lt;br /&gt;
len&lt;br /&gt;
lendp&lt;br /&gt;
lens&lt;br /&gt;
lensdp&lt;br /&gt;
les&lt;br /&gt;
let&lt;br /&gt;
ln&lt;br /&gt;
locate&lt;br /&gt;
lock&lt;br /&gt;
locked&lt;br /&gt;
loop&lt;br /&gt;
lower&lt;br /&gt;
lts&lt;br /&gt;
mat&lt;br /&gt;
matbuild&lt;br /&gt;
match&lt;br /&gt;
matches&lt;br /&gt;
matchfield&lt;br /&gt;
matparse&lt;br /&gt;
matread&lt;br /&gt;
matreadl&lt;br /&gt;
matreadu&lt;br /&gt;
matwrite&lt;br /&gt;
matwriteu&lt;br /&gt;
maximum&lt;br /&gt;
minimum&lt;br /&gt;
mod&lt;br /&gt;
mods&lt;br /&gt;
muls&lt;br /&gt;
nap&lt;br /&gt;
neg&lt;br /&gt;
negs&lt;br /&gt;
nes&lt;br /&gt;
next&lt;br /&gt;
nobuf&lt;br /&gt;
not&lt;br /&gt;
nots&lt;br /&gt;
null&lt;br /&gt;
num&lt;br /&gt;
nums&lt;br /&gt;
oconv&lt;br /&gt;
oconvs&lt;br /&gt;
off&lt;br /&gt;
on&lt;br /&gt;
open&lt;br /&gt;
opencheck&lt;br /&gt;
opendev&lt;br /&gt;
openpath&lt;br /&gt;
openseq&lt;br /&gt;
ors&lt;br /&gt;
page&lt;br /&gt;
perform&lt;br /&gt;
precision&lt;br /&gt;
print&lt;br /&gt;
printer&lt;br /&gt;
printerr&lt;br /&gt;
procread&lt;br /&gt;
procwrite&lt;br /&gt;
; program - see structure section&lt;br /&gt;
prompt&lt;br /&gt;
pwr&lt;br /&gt;
quote&lt;br /&gt;
raise&lt;br /&gt;
randomize&lt;br /&gt;
read&lt;br /&gt;
readblk&lt;br /&gt;
readl&lt;br /&gt;
readlist&lt;br /&gt;
readnext&lt;br /&gt;
readseq&lt;br /&gt;
readt&lt;br /&gt;
readu&lt;br /&gt;
readv&lt;br /&gt;
readvl&lt;br /&gt;
readvu&lt;br /&gt;
real&lt;br /&gt;
recordlock&lt;br /&gt;
recordlocked&lt;br /&gt;
recordlockl&lt;br /&gt;
recordlocku&lt;br /&gt;
release&lt;br /&gt;
rem&lt;br /&gt;
rem&lt;br /&gt;
remove&lt;br /&gt;
repeat&lt;br /&gt;
replace&lt;br /&gt;
; return - see structure section&lt;br /&gt;
reuse&lt;br /&gt;
revremove&lt;br /&gt;
rewind&lt;br /&gt;
right&lt;br /&gt;
rnd&lt;br /&gt;
rollback&lt;br /&gt;
rpc.call&lt;br /&gt;
rpc.connect&lt;br /&gt;
rpc.disconnect&lt;br /&gt;
sadd&lt;br /&gt;
scmp&lt;br /&gt;
sdiv&lt;br /&gt;
seek&lt;br /&gt;
seek(arg.)&lt;br /&gt;
select&lt;br /&gt;
selecte&lt;br /&gt;
selectindex&lt;br /&gt;
selectinfo&lt;br /&gt;
selectn&lt;br /&gt;
selectv&lt;br /&gt;
send&lt;br /&gt;
sentence&lt;br /&gt;
seq&lt;br /&gt;
seqs&lt;br /&gt;
set&lt;br /&gt;
setrem&lt;br /&gt;
sin&lt;br /&gt;
sinh&lt;br /&gt;
sleep&lt;br /&gt;
smul&lt;br /&gt;
soundex&lt;br /&gt;
space&lt;br /&gt;
spaces&lt;br /&gt;
splice&lt;br /&gt;
sqrt&lt;br /&gt;
squote&lt;br /&gt;
sselect&lt;br /&gt;
sselectn&lt;br /&gt;
sselectv&lt;br /&gt;
ssub&lt;br /&gt;
status&lt;br /&gt;
; stop - see structure section&lt;br /&gt;
str&lt;br /&gt;
strs&lt;br /&gt;
subr&lt;br /&gt;
; subroutine - see structure section&lt;br /&gt;
subs&lt;br /&gt;
substrings&lt;br /&gt;
sum&lt;br /&gt;
summation&lt;br /&gt;
system&lt;br /&gt;
tabstop&lt;br /&gt;
tan&lt;br /&gt;
tanh&lt;br /&gt;
terminfo&lt;br /&gt;
time&lt;br /&gt;
timedate&lt;br /&gt;
timeout&lt;br /&gt;
tparm&lt;br /&gt;
tprint&lt;br /&gt;
trans&lt;br /&gt;
transaction&lt;br /&gt;
trim&lt;br /&gt;
trimb&lt;br /&gt;
trimbs&lt;br /&gt;
trimf&lt;br /&gt;
trimfs&lt;br /&gt;
trims&lt;br /&gt;
ttyctl&lt;br /&gt;
ttyget&lt;br /&gt;
ttyset&lt;br /&gt;
unassigned&lt;br /&gt;
unichar&lt;br /&gt;
unichars&lt;br /&gt;
uniseq&lt;br /&gt;
uniseqs&lt;br /&gt;
unlock&lt;br /&gt;
upcase&lt;br /&gt;
uprint&lt;br /&gt;
weof&lt;br /&gt;
weofseq&lt;br /&gt;
write&lt;br /&gt;
writeblk&lt;br /&gt;
writelist&lt;br /&gt;
writeseq&lt;br /&gt;
writeseqf&lt;br /&gt;
writet&lt;br /&gt;
writeu&lt;br /&gt;
writev&lt;br /&gt;
writevu&lt;br /&gt;
xlate&lt;br /&gt;
xtd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#KEYWORD=UV Operators&lt;br /&gt;
(&lt;br /&gt;
)&lt;br /&gt;
,&lt;br /&gt;
:&lt;br /&gt;
[&lt;br /&gt;
]&lt;br /&gt;
/&lt;br /&gt;
*&lt;br /&gt;
**&lt;br /&gt;
^^&lt;br /&gt;
and&lt;br /&gt;
&amp;amp;&lt;br /&gt;
+&lt;br /&gt;
or&lt;br /&gt;
!&lt;br /&gt;
-&lt;br /&gt;
eq&lt;br /&gt;
=&lt;br /&gt;
gt&lt;br /&gt;
&amp;gt;&lt;br /&gt;
lt&lt;br /&gt;
&amp;lt;&lt;br /&gt;
ge&lt;br /&gt;
le&lt;br /&gt;
ne&lt;br /&gt;
^#&lt;br /&gt;
&lt;br /&gt;
#KEYWORD=BCI, Sockets &amp;amp; XML&lt;br /&gt;
;# BCI functions&lt;br /&gt;
ClearDiagnostics&lt;br /&gt;
GetDiagnostics&lt;br /&gt;
SetDiagnostics&lt;br /&gt;
SQLAllocConnect&lt;br /&gt;
SQLAllocEnv&lt;br /&gt;
SQLAllocStmt&lt;br /&gt;
SQLBindCol&lt;br /&gt;
SQLBindCol&lt;br /&gt;
SQLBindParameter&lt;br /&gt;
SQLCancel&lt;br /&gt;
SQLColAttributes&lt;br /&gt;
SQLColumns&lt;br /&gt;
SQLConnect&lt;br /&gt;
SQLDescribeCol&lt;br /&gt;
SQLDisconnect&lt;br /&gt;
SQLError&lt;br /&gt;
SQLExecDirect&lt;br /&gt;
SQLExecute&lt;br /&gt;
SQLFetch&lt;br /&gt;
SQLFreeConnect&lt;br /&gt;
SQLFreeEnv&lt;br /&gt;
SQLFreeStmt&lt;br /&gt;
SQLGetInfo&lt;br /&gt;
SQLGetTypeInfo&lt;br /&gt;
SQLNumParams&lt;br /&gt;
SQLNumResultCols&lt;br /&gt;
SQLParamOptions&lt;br /&gt;
SQLPrepare&lt;br /&gt;
SQLRowCount&lt;br /&gt;
SQLSetConnectOption&lt;br /&gt;
SQLSetParam&lt;br /&gt;
SQLSpecialColumns&lt;br /&gt;
SQLStatistics&lt;br /&gt;
SQLTables&lt;br /&gt;
SQLTransact&lt;br /&gt;
&lt;br /&gt;
;# Sockets/Internet functions&lt;br /&gt;
AcceptConnection&lt;br /&gt;
AddAuthenticationRule&lt;br /&gt;
AddCertificate&lt;br /&gt;
AddRequestParameter&lt;br /&gt;
AnalyzeCertificate&lt;br /&gt;
CloseSocket&lt;br /&gt;
CreateCertification&lt;br /&gt;
CreateCertRequest&lt;br /&gt;
CreateRequest&lt;br /&gt;
CreateSecureRequest&lt;br /&gt;
CreateSecurityContext&lt;br /&gt;
GenerateKey&lt;br /&gt;
GetCipherSuite&lt;br /&gt;
GetHTTPDefault&lt;br /&gt;
GetSocketErrorMessage&lt;br /&gt;
GetSocketInformation&lt;br /&gt;
GetSocketOptions&lt;br /&gt;
InitSecureServerSocket&lt;br /&gt;
InitServerSocket&lt;br /&gt;
LoadSecurityContext&lt;br /&gt;
OpenSecureSocket&lt;br /&gt;
OpenSocket&lt;br /&gt;
ProtocolLogging&lt;br /&gt;
ReadSocket&lt;br /&gt;
SaveSecurityContext&lt;br /&gt;
SetAuthenticationDepth&lt;br /&gt;
SetCipherSuite&lt;br /&gt;
SetClientauthentication&lt;br /&gt;
SetHTTPDefault&lt;br /&gt;
SetLocale&lt;br /&gt;
SetPrivateKey&lt;br /&gt;
SetRandomSeed&lt;br /&gt;
SetRequestHeader&lt;br /&gt;
SetSocketOptions&lt;br /&gt;
ShowSecurityContext&lt;br /&gt;
Signature&lt;br /&gt;
SubmitRequest&lt;br /&gt;
WriteSocket&lt;br /&gt;
&lt;br /&gt;
;# XML functions&lt;br /&gt;
closeXMLData&lt;br /&gt;
openXMLData&lt;br /&gt;
prepareXML&lt;br /&gt;
readXMLData&lt;br /&gt;
releaseXML&lt;br /&gt;
xmlError&lt;br /&gt;
;# v10.1&lt;br /&gt;
xmlGetError&lt;br /&gt;
xmlExecute&lt;br /&gt;
&lt;br /&gt;
;# DOM functions v10.1&lt;br /&gt;
XDOMOpen&lt;br /&gt;
XDOMCreateNode&lt;br /&gt;
XDOMWrite&lt;br /&gt;
XDOMClose&lt;br /&gt;
XDOMValidate&lt;br /&gt;
XDOMLocate&lt;br /&gt;
XDOMLocateNode&lt;br /&gt;
XDOMCreateNode&lt;br /&gt;
XDOMEvaluate&lt;br /&gt;
XDOMRemove&lt;br /&gt;
XDOMAppend&lt;br /&gt;
XDOMInsert&lt;br /&gt;
XDOMReplace&lt;br /&gt;
XDOMAddChild&lt;br /&gt;
XDOMClone&lt;br /&gt;
XDOMTransform&lt;br /&gt;
XDOMGetNodeValue&lt;br /&gt;
XDOMGetNodeName&lt;br /&gt;
XDOMGetNodeType&lt;br /&gt;
XDOMGetAttribute&lt;br /&gt;
XDOMGetOwnerDocument&lt;br /&gt;
XDOMGetUserData&lt;br /&gt;
XDOMSetNodeValue&lt;br /&gt;
XDOMSetUserData&lt;br /&gt;
&lt;br /&gt;
;# AMI Session v10.1&lt;br /&gt;
amInitialize&lt;br /&gt;
amReceiveMsg&lt;br /&gt;
amReceiveRequest&lt;br /&gt;
amSendMsg&lt;br /&gt;
amSendRequest&lt;br /&gt;
amSendResponse&lt;br /&gt;
amTerminate&lt;br /&gt;
&lt;br /&gt;
;# SOAP API 10.1&lt;br /&gt;
SOAPSetDefault&lt;br /&gt;
SOAPGetDefault&lt;br /&gt;
SOAPCreateRequest&lt;br /&gt;
SOAPSetParameters&lt;br /&gt;
SOAPSetRequestHeader&lt;br /&gt;
SOAPSetRequestBody&lt;br /&gt;
SOAPSetRequestContent&lt;br /&gt;
SOAPRequestWrite&lt;br /&gt;
SOAPSubmitRequest&lt;br /&gt;
SOAPGetResponseHeader&lt;br /&gt;
SOAPGetFault&lt;br /&gt;
protocolLogging&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#KEYWORD=@ Variables &amp;amp; Options&lt;br /&gt;
&lt;br /&gt;
;# flavour options&lt;br /&gt;
default&lt;br /&gt;
in2&lt;br /&gt;
information&lt;br /&gt;
pick&lt;br /&gt;
piopen&lt;br /&gt;
reality&lt;br /&gt;
&lt;br /&gt;
;# individual options&lt;br /&gt;
case&lt;br /&gt;
comp.precision&lt;br /&gt;
count.ovlp&lt;br /&gt;
end.warn&lt;br /&gt;
exec.eq.perf&lt;br /&gt;
extra.delim&lt;br /&gt;
for.incr.bef&lt;br /&gt;
format.oconv&lt;br /&gt;
fselect&lt;br /&gt;
header.brk&lt;br /&gt;
header.date&lt;br /&gt;
header.eject&lt;br /&gt;
in2.substr&lt;br /&gt;
info.abort&lt;br /&gt;
info.convert&lt;br /&gt;
info.enter&lt;br /&gt;
info.include&lt;br /&gt;
info.locate&lt;br /&gt;
info.marks&lt;br /&gt;
info.mod&lt;br /&gt;
input.else&lt;br /&gt;
inputat&lt;br /&gt;
int.precision&lt;br /&gt;
locate.r83&lt;br /&gt;
no.case&lt;br /&gt;
no.reselect&lt;br /&gt;
no.return.warn&lt;br /&gt;
ongo.range&lt;br /&gt;
pclose.all&lt;br /&gt;
perf.eq.exec&lt;br /&gt;
piopen.execute&lt;br /&gt;
piopen.include&lt;br /&gt;
piopen.matread&lt;br /&gt;
piopen.selidx&lt;br /&gt;
radians&lt;br /&gt;
raw.output&lt;br /&gt;
read.retain&lt;br /&gt;
real.substr&lt;br /&gt;
rnext.expl&lt;br /&gt;
seq.255&lt;br /&gt;
static.dim&lt;br /&gt;
stop.msg&lt;br /&gt;
supp.data.echo&lt;br /&gt;
time.millisecond&lt;br /&gt;
ult.format&lt;br /&gt;
use.errmsg&lt;br /&gt;
var.select&lt;br /&gt;
vec.math&lt;br /&gt;
wide.if&lt;br /&gt;
&lt;br /&gt;
#KEYWORD=Structure syntax&lt;br /&gt;
^;&lt;br /&gt;
\&lt;br /&gt;
abort&lt;br /&gt;
aborte&lt;br /&gt;
abortm&lt;br /&gt;
assign&lt;br /&gt;
go&lt;br /&gt;
goto&lt;br /&gt;
program&lt;br /&gt;
return&lt;br /&gt;
stop&lt;br /&gt;
stope&lt;br /&gt;
stopm&lt;br /&gt;
sub&lt;br /&gt;
subroutine&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stuboy</name></author>
	</entry>
	<entry>
		<id>https://pickwiki.org/index.php?title=EditPlus&amp;diff=1740</id>
		<title>EditPlus</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=EditPlus&amp;diff=1740"/>
		<updated>2003-06-30T04:56:00Z</updated>

		<summary type="html">&lt;p&gt;Stuboy: *&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#TITLE=UV10&lt;br /&gt;
; EditPlus Syntax File v1.3 written by Stuart Boydell stuart@sbcs.com.au.&lt;br /&gt;
; This file is provided as a syntax file for Universe 10&lt;br /&gt;
; Tools Preferences/Settings &amp;amp; Syntax:&lt;br /&gt;
; Set this as default syntax file and also as UV file type with&lt;br /&gt;
; File Extensions: bas;par&lt;br /&gt;
; Function (subr) pattern: ^ *[0-9A-Za-z\.-_]+\:($| )&lt;br /&gt;
&lt;br /&gt;
#DELIMITER=(){}[]-+*%/=&amp;quot;&#039;~!&amp;amp;|\&amp;lt;&amp;gt;?:;,&lt;br /&gt;
#QUOTATION1=&#039;&lt;br /&gt;
#QUOTATION2=&amp;quot;&lt;br /&gt;
#CONTINUE_QUOTE=y&lt;br /&gt;
; ensures unclosed quotes are obvious&lt;br /&gt;
#LINECOMMENT=*&lt;br /&gt;
#LINECOMMENT2=!&lt;br /&gt;
; also possible line comments are REM and &amp;quot;$*&amp;quot;&lt;br /&gt;
#COMMENTON=&lt;br /&gt;
#COMMENTOFF=&lt;br /&gt;
#COMMENTON2=&lt;br /&gt;
#COMMENTOFF2=&lt;br /&gt;
#ESCAPE=&lt;br /&gt;
#CASE=n&lt;br /&gt;
#PREFIX1=&lt;br /&gt;
#PREFIX2=&lt;br /&gt;
#PREFIX3=&lt;br /&gt;
#PREFIX4=@&lt;br /&gt;
; prefix &amp;quot;@&amp;quot; defines uv @variables&lt;br /&gt;
#PREFIX5=&lt;br /&gt;
#SUFFIX1=&lt;br /&gt;
#SUFFIX2=&lt;br /&gt;
#SUFFIX3=&lt;br /&gt;
#SUFFIX4=&lt;br /&gt;
#SUFFIX5=:&lt;br /&gt;
; suffix &amp;quot;:&amp;quot; defines uv subroutines&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#KEYWORD=UV BASIC Reserved Words&lt;br /&gt;
&lt;br /&gt;
; minor keywords&lt;br /&gt;
by&lt;br /&gt;
calling&lt;br /&gt;
capturing&lt;br /&gt;
commit&lt;br /&gt;
do&lt;br /&gt;
else&lt;br /&gt;
end&lt;br /&gt;
error&lt;br /&gt;
from&lt;br /&gt;
in&lt;br /&gt;
isolation&lt;br /&gt;
level&lt;br /&gt;
lit&lt;br /&gt;
literally&lt;br /&gt;
out&lt;br /&gt;
passlist&lt;br /&gt;
repeat&lt;br /&gt;
returning&lt;br /&gt;
rtnlist&lt;br /&gt;
setting&lt;br /&gt;
start&lt;br /&gt;
status&lt;br /&gt;
then&lt;br /&gt;
to&lt;br /&gt;
until&lt;br /&gt;
using&lt;br /&gt;
while&lt;br /&gt;
&lt;br /&gt;
; major keywords&lt;br /&gt;
&lt;br /&gt;
!async&lt;br /&gt;
!errno&lt;br /&gt;
!fcmp&lt;br /&gt;
!get.partnum&lt;br /&gt;
!get.pathname&lt;br /&gt;
!get.pu&lt;br /&gt;
!get.user.counts&lt;br /&gt;
!inline.prompts&lt;br /&gt;
!ints&lt;br /&gt;
!make.pathname&lt;br /&gt;
!matches&lt;br /&gt;
!message&lt;br /&gt;
!report.error&lt;br /&gt;
!set.ptr&lt;br /&gt;
!set.pu&lt;br /&gt;
!timdat&lt;br /&gt;
!user.type&lt;br /&gt;
!voc.pathname&lt;br /&gt;
$chain&lt;br /&gt;
$copyright&lt;br /&gt;
$define&lt;br /&gt;
$eject&lt;br /&gt;
$else&lt;br /&gt;
$endif&lt;br /&gt;
$ifdef&lt;br /&gt;
$ifndef&lt;br /&gt;
$include&lt;br /&gt;
$indef&lt;br /&gt;
$insert&lt;br /&gt;
$map&lt;br /&gt;
$options&lt;br /&gt;
$page&lt;br /&gt;
$undefine&lt;br /&gt;
^#include&lt;br /&gt;
; abort - see struct&lt;br /&gt;
abs&lt;br /&gt;
abss&lt;br /&gt;
acos&lt;br /&gt;
adds&lt;br /&gt;
alpha&lt;br /&gt;
ands&lt;br /&gt;
ascii&lt;br /&gt;
asin&lt;br /&gt;
; assign - see structure section&lt;br /&gt;
assigned&lt;br /&gt;
atan&lt;br /&gt;
authorization&lt;br /&gt;
auxmap&lt;br /&gt;
begin&lt;br /&gt;
bitand&lt;br /&gt;
bitnot&lt;br /&gt;
bitor&lt;br /&gt;
bitreset&lt;br /&gt;
bitset&lt;br /&gt;
bittest&lt;br /&gt;
bitxor&lt;br /&gt;
break&lt;br /&gt;
bscan&lt;br /&gt;
byte&lt;br /&gt;
bytelen&lt;br /&gt;
bytetype&lt;br /&gt;
byteval&lt;br /&gt;
; call - see struct&lt;br /&gt;
case&lt;br /&gt;
cat&lt;br /&gt;
cats&lt;br /&gt;
century.pivot&lt;br /&gt;
chain&lt;br /&gt;
change&lt;br /&gt;
char&lt;br /&gt;
chars&lt;br /&gt;
checksum&lt;br /&gt;
clear&lt;br /&gt;
cleardata&lt;br /&gt;
clearfile&lt;br /&gt;
clearprompts&lt;br /&gt;
clearselect&lt;br /&gt;
close&lt;br /&gt;
closeseq&lt;br /&gt;
col1&lt;br /&gt;
col2&lt;br /&gt;
com&lt;br /&gt;
commit&lt;br /&gt;
common&lt;br /&gt;
compare&lt;br /&gt;
constants&lt;br /&gt;
continue&lt;br /&gt;
convert&lt;br /&gt;
cos&lt;br /&gt;
cosh&lt;br /&gt;
count&lt;br /&gt;
counts&lt;br /&gt;
create&lt;br /&gt;
crt&lt;br /&gt;
data&lt;br /&gt;
date&lt;br /&gt;
dcount&lt;br /&gt;
debug&lt;br /&gt;
deffun&lt;br /&gt;
del&lt;br /&gt;
delete&lt;br /&gt;
deletelist&lt;br /&gt;
deleteu&lt;br /&gt;
descrinfo&lt;br /&gt;
digest&lt;br /&gt;
dim&lt;br /&gt;
dimension&lt;br /&gt;
display&lt;br /&gt;
div&lt;br /&gt;
divs&lt;br /&gt;
downcase&lt;br /&gt;
dquote&lt;br /&gt;
dtx&lt;br /&gt;
ebcdic&lt;br /&gt;
echo&lt;br /&gt;
encrypt&lt;br /&gt;
end&lt;br /&gt;
enter&lt;br /&gt;
eof(arg.)&lt;br /&gt;
equ&lt;br /&gt;
equate&lt;br /&gt;
ereplace&lt;br /&gt;
errmsg&lt;br /&gt;
exchange&lt;br /&gt;
execute&lt;br /&gt;
exit&lt;br /&gt;
exp&lt;br /&gt;
extract&lt;br /&gt;
fadd&lt;br /&gt;
fdiv&lt;br /&gt;
ffix&lt;br /&gt;
fflt&lt;br /&gt;
field&lt;br /&gt;
fields&lt;br /&gt;
fieldstore&lt;br /&gt;
fileinfo&lt;br /&gt;
filelock&lt;br /&gt;
fileunlock&lt;br /&gt;
find&lt;br /&gt;
findstr&lt;br /&gt;
fix&lt;br /&gt;
flush&lt;br /&gt;
fmt&lt;br /&gt;
fmtdp&lt;br /&gt;
fmts&lt;br /&gt;
fmtsdp&lt;br /&gt;
fmul&lt;br /&gt;
fold&lt;br /&gt;
folddp&lt;br /&gt;
footing&lt;br /&gt;
for&lt;br /&gt;
formlist&lt;br /&gt;
fsub&lt;br /&gt;
function&lt;br /&gt;
ges&lt;br /&gt;
get&lt;br /&gt;
get(arg.)&lt;br /&gt;
getlist&lt;br /&gt;
getlocale&lt;br /&gt;
getrem&lt;br /&gt;
getx&lt;br /&gt;
; go - here there be dragons&lt;br /&gt;
; goto - here there be dragons&lt;br /&gt;
; gosub - see structure section&lt;br /&gt;
group&lt;br /&gt;
groupstore&lt;br /&gt;
gts&lt;br /&gt;
heading&lt;br /&gt;
headinge&lt;br /&gt;
headingn&lt;br /&gt;
hush&lt;br /&gt;
icheck&lt;br /&gt;
iconv&lt;br /&gt;
iconvs&lt;br /&gt;
if&lt;br /&gt;
ifs&lt;br /&gt;
ilprompt&lt;br /&gt;
include&lt;br /&gt;
index&lt;br /&gt;
indexs&lt;br /&gt;
indices&lt;br /&gt;
inmat&lt;br /&gt;
input&lt;br /&gt;
inputclear&lt;br /&gt;
inputdisp&lt;br /&gt;
inputdp&lt;br /&gt;
inputerr&lt;br /&gt;
inputif&lt;br /&gt;
inputnull&lt;br /&gt;
inputtrap&lt;br /&gt;
ins&lt;br /&gt;
insert&lt;br /&gt;
int&lt;br /&gt;
isnull&lt;br /&gt;
isnulls&lt;br /&gt;
itype&lt;br /&gt;
keyedit&lt;br /&gt;
keyexit&lt;br /&gt;
keyin&lt;br /&gt;
keytrap&lt;br /&gt;
left&lt;br /&gt;
len&lt;br /&gt;
lendp&lt;br /&gt;
lens&lt;br /&gt;
lensdp&lt;br /&gt;
les&lt;br /&gt;
let&lt;br /&gt;
ln&lt;br /&gt;
locate&lt;br /&gt;
lock&lt;br /&gt;
locked&lt;br /&gt;
loop&lt;br /&gt;
lower&lt;br /&gt;
lts&lt;br /&gt;
mat&lt;br /&gt;
matbuild&lt;br /&gt;
match&lt;br /&gt;
matches&lt;br /&gt;
matchfield&lt;br /&gt;
matparse&lt;br /&gt;
matread&lt;br /&gt;
matreadl&lt;br /&gt;
matreadu&lt;br /&gt;
matwrite&lt;br /&gt;
matwriteu&lt;br /&gt;
maximum&lt;br /&gt;
minimum&lt;br /&gt;
mod&lt;br /&gt;
mods&lt;br /&gt;
muls&lt;br /&gt;
nap&lt;br /&gt;
neg&lt;br /&gt;
negs&lt;br /&gt;
nes&lt;br /&gt;
next&lt;br /&gt;
nobuf&lt;br /&gt;
not&lt;br /&gt;
nots&lt;br /&gt;
null&lt;br /&gt;
num&lt;br /&gt;
nums&lt;br /&gt;
oconv&lt;br /&gt;
oconvs&lt;br /&gt;
off&lt;br /&gt;
on&lt;br /&gt;
open&lt;br /&gt;
opencheck&lt;br /&gt;
opendev&lt;br /&gt;
openpath&lt;br /&gt;
openseq&lt;br /&gt;
ors&lt;br /&gt;
page&lt;br /&gt;
perform&lt;br /&gt;
precision&lt;br /&gt;
print&lt;br /&gt;
printer&lt;br /&gt;
printerr&lt;br /&gt;
procread&lt;br /&gt;
procwrite&lt;br /&gt;
; program - see structure section&lt;br /&gt;
prompt&lt;br /&gt;
pwr&lt;br /&gt;
quote&lt;br /&gt;
raise&lt;br /&gt;
randomize&lt;br /&gt;
read&lt;br /&gt;
readblk&lt;br /&gt;
readl&lt;br /&gt;
readlist&lt;br /&gt;
readnext&lt;br /&gt;
readseq&lt;br /&gt;
readt&lt;br /&gt;
readu&lt;br /&gt;
readv&lt;br /&gt;
readvl&lt;br /&gt;
readvu&lt;br /&gt;
real&lt;br /&gt;
recordlock&lt;br /&gt;
recordlocked&lt;br /&gt;
recordlockl&lt;br /&gt;
recordlocku&lt;br /&gt;
release&lt;br /&gt;
rem&lt;br /&gt;
rem&lt;br /&gt;
remove&lt;br /&gt;
repeat&lt;br /&gt;
replace&lt;br /&gt;
; return - see structure section&lt;br /&gt;
reuse&lt;br /&gt;
revremove&lt;br /&gt;
rewind&lt;br /&gt;
right&lt;br /&gt;
rnd&lt;br /&gt;
rollback&lt;br /&gt;
rpc.call&lt;br /&gt;
rpc.connect&lt;br /&gt;
rpc.disconnect&lt;br /&gt;
sadd&lt;br /&gt;
scmp&lt;br /&gt;
sdiv&lt;br /&gt;
seek&lt;br /&gt;
seek(arg.)&lt;br /&gt;
select&lt;br /&gt;
selecte&lt;br /&gt;
selectindex&lt;br /&gt;
selectinfo&lt;br /&gt;
selectn&lt;br /&gt;
selectv&lt;br /&gt;
send&lt;br /&gt;
sentence&lt;br /&gt;
seq&lt;br /&gt;
seqs&lt;br /&gt;
set&lt;br /&gt;
setrem&lt;br /&gt;
sin&lt;br /&gt;
sinh&lt;br /&gt;
sleep&lt;br /&gt;
smul&lt;br /&gt;
soundex&lt;br /&gt;
space&lt;br /&gt;
spaces&lt;br /&gt;
splice&lt;br /&gt;
sqrt&lt;br /&gt;
squote&lt;br /&gt;
sselect&lt;br /&gt;
sselectn&lt;br /&gt;
sselectv&lt;br /&gt;
ssub&lt;br /&gt;
status&lt;br /&gt;
; stop - see structure section&lt;br /&gt;
str&lt;br /&gt;
strs&lt;br /&gt;
subr&lt;br /&gt;
; subroutine - see structure section&lt;br /&gt;
subs&lt;br /&gt;
substrings&lt;br /&gt;
sum&lt;br /&gt;
summation&lt;br /&gt;
system&lt;br /&gt;
tabstop&lt;br /&gt;
tan&lt;br /&gt;
tanh&lt;br /&gt;
terminfo&lt;br /&gt;
time&lt;br /&gt;
timedate&lt;br /&gt;
timeout&lt;br /&gt;
tparm&lt;br /&gt;
tprint&lt;br /&gt;
trans&lt;br /&gt;
transaction&lt;br /&gt;
trim&lt;br /&gt;
trimb&lt;br /&gt;
trimbs&lt;br /&gt;
trimf&lt;br /&gt;
trimfs&lt;br /&gt;
trims&lt;br /&gt;
ttyctl&lt;br /&gt;
ttyget&lt;br /&gt;
ttyset&lt;br /&gt;
unassigned&lt;br /&gt;
unichar&lt;br /&gt;
unichars&lt;br /&gt;
uniseq&lt;br /&gt;
uniseqs&lt;br /&gt;
unlock&lt;br /&gt;
upcase&lt;br /&gt;
uprint&lt;br /&gt;
weof&lt;br /&gt;
weofseq&lt;br /&gt;
write&lt;br /&gt;
writeblk&lt;br /&gt;
writelist&lt;br /&gt;
writeseq&lt;br /&gt;
writeseqf&lt;br /&gt;
writet&lt;br /&gt;
writeu&lt;br /&gt;
writev&lt;br /&gt;
writevu&lt;br /&gt;
xlate&lt;br /&gt;
xtd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#KEYWORD=UV Operators&lt;br /&gt;
(&lt;br /&gt;
)&lt;br /&gt;
,&lt;br /&gt;
:&lt;br /&gt;
[&lt;br /&gt;
]&lt;br /&gt;
/&lt;br /&gt;
*&lt;br /&gt;
**&lt;br /&gt;
^^&lt;br /&gt;
and&lt;br /&gt;
&amp;amp;&lt;br /&gt;
+&lt;br /&gt;
or&lt;br /&gt;
!&lt;br /&gt;
-&lt;br /&gt;
eq&lt;br /&gt;
=&lt;br /&gt;
gt&lt;br /&gt;
&amp;gt;&lt;br /&gt;
lt&lt;br /&gt;
&amp;lt;&lt;br /&gt;
ge&lt;br /&gt;
le&lt;br /&gt;
ne&lt;br /&gt;
^#&lt;br /&gt;
&lt;br /&gt;
#KEYWORD=BCI, Sockets &amp;amp; XML&lt;br /&gt;
;# BCI functions&lt;br /&gt;
ClearDiagnostics&lt;br /&gt;
GetDiagnostics&lt;br /&gt;
SetDiagnostics&lt;br /&gt;
SQLAllocConnect&lt;br /&gt;
SQLAllocEnv&lt;br /&gt;
SQLAllocStmt&lt;br /&gt;
SQLBindCol&lt;br /&gt;
SQLBindCol&lt;br /&gt;
SQLBindParameter&lt;br /&gt;
SQLCancel&lt;br /&gt;
SQLColAttributes&lt;br /&gt;
SQLColumns&lt;br /&gt;
SQLConnect&lt;br /&gt;
SQLDescribeCol&lt;br /&gt;
SQLDisconnect&lt;br /&gt;
SQLError&lt;br /&gt;
SQLExecDirect&lt;br /&gt;
SQLExecute&lt;br /&gt;
SQLFetch&lt;br /&gt;
SQLFreeConnect&lt;br /&gt;
SQLFreeEnv&lt;br /&gt;
SQLFreeStmt&lt;br /&gt;
SQLGetInfo&lt;br /&gt;
SQLGetTypeInfo&lt;br /&gt;
SQLNumParams&lt;br /&gt;
SQLNumResultCols&lt;br /&gt;
SQLParamOptions&lt;br /&gt;
SQLPrepare&lt;br /&gt;
SQLRowCount&lt;br /&gt;
SQLSetConnectOption&lt;br /&gt;
SQLSetParam&lt;br /&gt;
SQLSpecialColumns&lt;br /&gt;
SQLStatistics&lt;br /&gt;
SQLTables&lt;br /&gt;
SQLTransact&lt;br /&gt;
&lt;br /&gt;
;# Sockets/Internet functions&lt;br /&gt;
AcceptConnection&lt;br /&gt;
AddAuthenticationRule&lt;br /&gt;
AddCertificate&lt;br /&gt;
AddRequestParameter&lt;br /&gt;
AnalyzeCertificate&lt;br /&gt;
CloseSocket&lt;br /&gt;
CreateCertification&lt;br /&gt;
CreateCertRequest&lt;br /&gt;
CreateRequest&lt;br /&gt;
CreateSecureRequest&lt;br /&gt;
CreateSecurityContext&lt;br /&gt;
GenerateKey&lt;br /&gt;
GetCipherSuite&lt;br /&gt;
GetHTTPDefault&lt;br /&gt;
GetSocketErrorMessage&lt;br /&gt;
GetSocketInformation&lt;br /&gt;
GetSocketOptions&lt;br /&gt;
InitSecureServerSocket&lt;br /&gt;
InitServerSocket&lt;br /&gt;
LoadSecurityContext&lt;br /&gt;
OpenSecureSocket&lt;br /&gt;
OpenSocket&lt;br /&gt;
ProtocolLogging&lt;br /&gt;
ReadSocket&lt;br /&gt;
SaveSecurityContext&lt;br /&gt;
SetAuthenticationDepth&lt;br /&gt;
SetCipherSuite&lt;br /&gt;
SetClientauthentication&lt;br /&gt;
SetHTTPDefault&lt;br /&gt;
SetLocale&lt;br /&gt;
SetPrivateKey&lt;br /&gt;
SetRandomSeed&lt;br /&gt;
SetRequestHeader&lt;br /&gt;
SetSocketOptions&lt;br /&gt;
ShowSecurityContext&lt;br /&gt;
Signature&lt;br /&gt;
SubmitRequest&lt;br /&gt;
WriteSocket&lt;br /&gt;
&lt;br /&gt;
;# XML functions&lt;br /&gt;
CloseXMLData&lt;br /&gt;
OpenXMLData&lt;br /&gt;
PrepareXML&lt;br /&gt;
ReadXMLData&lt;br /&gt;
ReleaseXML&lt;br /&gt;
&lt;br /&gt;
#KEYWORD=@ Variables &amp;amp; Options&lt;br /&gt;
&lt;br /&gt;
;# flavour options&lt;br /&gt;
default&lt;br /&gt;
in2&lt;br /&gt;
information&lt;br /&gt;
pick&lt;br /&gt;
piopen&lt;br /&gt;
reality&lt;br /&gt;
&lt;br /&gt;
;# individual options&lt;br /&gt;
case&lt;br /&gt;
comp.precision&lt;br /&gt;
count.ovlp&lt;br /&gt;
end.warn&lt;br /&gt;
exec.eq.perf&lt;br /&gt;
extra.delim&lt;br /&gt;
for.incr.bef&lt;br /&gt;
format.oconv&lt;br /&gt;
fselect&lt;br /&gt;
header.brk&lt;br /&gt;
header.date&lt;br /&gt;
header.eject&lt;br /&gt;
in2.substr&lt;br /&gt;
info.abort&lt;br /&gt;
info.convert&lt;br /&gt;
info.enter&lt;br /&gt;
info.include&lt;br /&gt;
info.locate&lt;br /&gt;
info.marks&lt;br /&gt;
info.mod&lt;br /&gt;
input.else&lt;br /&gt;
inputat&lt;br /&gt;
int.precision&lt;br /&gt;
locate.r83&lt;br /&gt;
no.case&lt;br /&gt;
no.reselect&lt;br /&gt;
no.return.warn&lt;br /&gt;
ongo.range&lt;br /&gt;
pclose.all&lt;br /&gt;
perf.eq.exec&lt;br /&gt;
piopen.execute&lt;br /&gt;
piopen.include&lt;br /&gt;
piopen.matread&lt;br /&gt;
piopen.selidx&lt;br /&gt;
radians&lt;br /&gt;
raw.output&lt;br /&gt;
read.retain&lt;br /&gt;
real.substr&lt;br /&gt;
rnext.expl&lt;br /&gt;
seq.255&lt;br /&gt;
static.dim&lt;br /&gt;
stop.msg&lt;br /&gt;
supp.data.echo&lt;br /&gt;
time.millisecond&lt;br /&gt;
ult.format&lt;br /&gt;
use.errmsg&lt;br /&gt;
var.select&lt;br /&gt;
vec.math&lt;br /&gt;
wide.if&lt;br /&gt;
&lt;br /&gt;
#KEYWORD=Structure syntax&lt;br /&gt;
^;&lt;br /&gt;
\&lt;br /&gt;
abort&lt;br /&gt;
aborte&lt;br /&gt;
abortm&lt;br /&gt;
call&lt;br /&gt;
gosub&lt;br /&gt;
program&lt;br /&gt;
return&lt;br /&gt;
stop&lt;br /&gt;
stope&lt;br /&gt;
stopm&lt;br /&gt;
subroutine&lt;br /&gt;
assign&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stuboy</name></author>
	</entry>
	<entry>
		<id>https://pickwiki.org/index.php?title=ExternalSource&amp;diff=1750</id>
		<title>ExternalSource</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=ExternalSource&amp;diff=1750"/>
		<updated>2003-06-30T04:46:35Z</updated>

		<summary type="html">&lt;p&gt;Stuboy: *&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HomePage&amp;gt;&amp;gt;SourceCode&amp;gt;&amp;gt;&amp;lt;nowiki&amp;gt;ExternalSource&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[C Programs]] , &amp;quot;C&amp;quot; code for use in multivalue databases.&lt;br /&gt;
* [[Visual Basic]] , VB for use with multivalue databases.&lt;br /&gt;
* JavaSource , Java and JSP source code that interacts with a MV database &lt;br /&gt;
* PerlSource, Perl scripts that may be interesting or useful to MV programmers&lt;br /&gt;
* [[SyntaxFiles]] , Syntax files for editing utilities.&lt;/div&gt;</summary>
		<author><name>Stuboy</name></author>
	</entry>
</feed>