gawk-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gawk-diffs] [SCM] gawk branch, master, updated. gawk-4.1.0-1521-g2b7501


From: Arnold Robbins
Subject: [gawk-diffs] [SCM] gawk branch, master, updated. gawk-4.1.0-1521-g2b7501c
Date: Fri, 04 Sep 2015 11:37:27 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gawk".

The branch, master has been updated
       via  2b7501cc7c765b22c893409b4087b31fdbd9ac14 (commit)
       via  26ab51cc70109abd04ac04ff75bb58abb2eb957f (commit)
      from  0d974ba125c1e8df68fecc2f579bb067d056cc3f (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=2b7501cc7c765b22c893409b4087b31fdbd9ac14

commit 2b7501cc7c765b22c893409b4087b31fdbd9ac14
Merge: 0d974ba 26ab51c
Author: Arnold D. Robbins <address@hidden>
Date:   Fri Sep 4 14:37:15 2015 +0300

    Merge branch 'gawk-4.1-stable'

diff --cc test/profile5.ok
index 5bf04dc,2bae16b..d6e8d1b
--- a/test/profile5.ok
+++ b/test/profile5.ok
@@@ -2661,3171 -1516,3228 +2661,3171 @@@ function _file_check_i0(p, pp, p1, p2, 
                        }
                }
        }
 +}
  
 -      function _dll_check_i0(p, R, pp, p2, i, i2, r, f, v, rs, d, tv, tf)
 -      {
 -              if (_[p]["TYPE"] == "defdll") {
 -                      r = toupper(_[p]["REGPATH"])
 -                      rs = 0
 -                      tf = 0
 -                      tv = ""
 -                      for (i in R) {
 -                              if (toupper(substr(i, 1, length(r))) == r) {
 -                                      if ((_chka0 = substr(i, 1 + length(r), 
1)) == "" || _chka0 == "\\") {
 -                                              rs = 1
 -                                              _missfl = 1
 -                                              _[p]["." 
substr(gensub(/\....$/, "", 1, i), i2 = 2 + length(r), length(i) - i2 + 1)] = 
R[i]
 -                                              if (chka0 != "") {
 -                                                      rs = 1
 -                                              }
 -                                      }
 -                              }
 -                      }
 -                      if (rs) {
 -                              if ((i = ".Install Path") in _[p] && (i = 
".Product Version") in _[p]) {
 -                                      _[p]["STATUS"] = "PRESENT"
 -                                      f = _[p][".Install Path"]
 -                                      v = _[p][".Product Version"]
 -                                      if (! (".Module" in _[p])) {
 -                                              _[pp][".Product Version"] = v
 -                                              
_VAR["HKEY_LOCAL_MACHINE\\SOFTWARE\\Altiris\\Deployment\\AgentInstallPath.STR"] 
= f
 -                                              _[pp]["AGENT"] = p
 -                                              _creport("OK:  DLL DETECTED(" v 
"): " substr(_[p]["NAME"], 1, 112))
 -                                      } else {
 -                                              if (_dllchktv == "") {
 -                                                      _dllchktv = v
 -                                              } else {
 -                                                      if (v != _dllchktv) {
 -                                                              return 
_dllerr(p, "different versions detected: " _dllchktv "!=" v "'")
 -                                                      }
 -                                              }
 -                                              ERRNO = ""
 -                                              if (_th1(_[p]["DATA"] = 
_rdfile(f), ERRNO)) {
 -                                                      delete _[p]["DATA"]
 -                                                      return _dllerr(p, "read 
lib: " ERRNO, f)
 -                                              }
 -                                              if (v != (_[p]["VERSION"] = 
_getfilever(f))) {
 -                                                      return _dllerr(p, 
"library file version mismatch: ==`" _[p]["VERSION"] "'; !=`" v "'", f)
 -                                              }
 -                                              _creport(p, "OK:    LIBRARY 
DETECTED(" v "): " substr(f, 1, 100))
 -                                      }
 -                              } else {
 -                                      tf = 1
 -                                      _dllerr(p, "registry corrupt: `" i "' 
not present")
 -                              }
 -                      } else {
 -                              _[p]["STATUS"] = "MISSED"
 -                      }
 +#_________________________________________________________________
 +function _filed(f, dd, d)
 +{
 +      if ((f = _filerdnehnd(f)) == "") {
 +              return ""
 +      }
 +      if (f in _FILEDIRFL) {
 +              return _FILEDIR[f]
 +      }
 +      if (f in _FILEROOT) {
 +              if (d = filegetdrvdir(_FILEROOT[f])) {
 +                      _FILEDIRFL[f]
                }
 +              return (_FILEDIR[f] = d _FILEDIR[f])
        }
 +      if ((dd = (dd ? dd : _FILEIO_RD), f) in _FILEDIR) {
 +              return _FILEDIR[dd, f]
 +      }
 +      if ((d = filedi(dd) _FILEDIR[f]) ~ /^\\/) {
 +              return (_FILEDIR[dd, f] = d)
 +      }
 +      return d
 +}
  
 -      function _dll_check_i1(p, pp, p1, p2, p3, i)
 -      {
 -              if (_[p]["TYPE"] == "defdll") {
 -                      for (i in _[p]) {
 -                              if (i ~ /^\./) {
 -                                      _dllerr(pp, "          " 
_[p]["REGPATH"] "\\" substr(i, 2))
 -                              }
 -                      }
 -              }
 +#_________________________________________________________________
 +function _filen(f)
 +{
 +      if ((f = _filerdnehnd(f)) == "") {
 +              return ""
        }
 +      return ((f in _FILENAM ? _FILENAM[f] : ""))
 +}
  
 -      function _dllerr(p, t, f)
 -      {
 -              if (t !~ /\x00/) {
 -                      t = "ERROR: \000" t
 -              }
 -              _errfl = 1
 -              _[p]["ERROR"] = _[p]["ERROR"] _ln(t ((f == "" ? "" : ": " f)))
 +#_________________________________________________________________
 +function _filene(f)
 +{
 +      if ((f = _filerdnehnd(f)) == "") {
 +              return ""
        }
 +      return (((f in _FILENAM ? _FILENAM[f] : "")) ((f in _FILEXT ? 
_FILEXT[f] : "")))
 +}
  
 -      function _drawuid(p, cn, ch, o)
 -      {
 -              _conl("uid: " p)
 -              _conl("\toblptr: " ((p in _UIDOBL ? _UIDOBL[p] "'" : "-")))
 -              if (p in _UIDOBL) {
 -                      if (! _isptr(o = _UIDOBL[p])) {
 -                              _conl(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> oblptr 
not pointer")
 -                      }
 -                      if (! isarray(_UIDOBLV[o])) {
 -                              _conl(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> no 
OBLV array at ptr")
 -                      }
 -              }
 -              _conl("\tprefix:   " ((p in _UIDPFX ? _UIDPFX[p] "'" : "-")))
 -              _conl("\tsuffix:   " ((p in _UIDSFX ? _UIDSFX[p] "'" : "-")))
 -              _conl("\tcounters: " (cn = (p in _UIDCNT ? _UIDCNT[p] "'" : 
"-")))
 -              if (cn != "-") {
 -                      _conl("\t\tcntrL:   " _UIDCNTL[_UIDCNT[p]] "'")
 -                      _conl("\t\tcntrH:   " _UIDCNTH[_UIDCNT[p]] "'")
 -              }
 -              _conl("\tcharset:  " (ch = (p in _UIDCHR ? _UIDCHR[p] "'" : 
"-")))
 -              if (ch != "-") {
 -                      _conl("chrH:    ")
 -                      _conl(_dumparr(_UIDCHRH[_UIDCHR[p]]))
 -                      _conl()
 -                      _conl("chrL:    ")
 -                      _conl(_dumparr(_UIDCHRL[_UIDCHR[p]]))
 -                      _conl()
 -              }
 -      }
 -
 -      function _dumparr(A, t, lv, a)
 -      {
 -              b = PROCINFO["sorted_in"]
 -              PROCINFO["sorted_in"] = "_lengthsort"
 -              if (isarray(A)) {
 -                      delete _DUMPARR
 -                      _dumparrc = _dumparrd = ""
 -                      _dumparr_i1(A, lv = ((lv == "" ? 16 : (lv == 0 || lv + 
0 != 0 ? lv : (lv == "-*" ? -3 : (lv ~ /^\+?\*$/ ? 3 : 16))))) + 0, (lv < 0 ? 
-1 : 1), 0, _tabtospc(t))
 -                      PROCINFO["sorted_in"] = a
 -                      return _retarrd(_DUMPARR, _dumparrd, _dumparrd = "")
 -              }
 -      }
 -
 -      function _dumparr_i1(A, lv, ls, ln, t, t2, i, a, f)
 -      {
 -              t2 = _getchrln(" ", length(t))
 -              if (ln == lv) {
 -                      if (ls > 0) {
 -                              for (i in A) {
 -                                      ++a
 -                              }
 -                      } else {
 -                              for (i in A) {
 -                                      (isarray(A[i]) ? ++a : "")
 -                              }
 -                      }
 -                      if (length(_dumparrd = _dumparrd t ((a > 0 ? " ... (x" 
a ")" : "")) _CHR["EOL"]) > 262144) {
 -                              _DUMPARR[++_dumparrc] = _dumparrd
 -                              _dumparrd = ""
 -                      }
 -                      return 
 -              }
 -              if (ls >= 0) {
 -                      for (i in A) {
 -                              if (! isarray(A[i])) {
 -                                      if (length(_dumparrd = _dumparrd ((f ? 
t2 : t _nop(f = 1))) "[" i "]=" A[i] "'" _CHR["EOL"]) > 262144) {
 -                                              _DUMPARR[++_dumparrc] = 
_dumparrd
 -                                              _dumparrd = ""
 -                                      }
 -                              }
 -                      }
 -              }
 -              for (i in A) {
 -                      if (isarray(A[i])) {
 -                              _dumparr_i1(A[i], lv, ls, ln + ls, _th0((f ? t2 
: t), f = 1) "[" i "]")
 -                      }
 -              }
 -              if (! f) {
 -                      if (length(_dumparrd = _dumparrd t _CHR["EOL"]) > 
262144) {
 -                              _DUMPARR[++_dumparrc] = _dumparrd
 -                              _dumparrd = ""
 -                      }
 -              }
 +#_________________________________________________________________
 +function _filenotexist(f, a)
 +{
 +      if (f == "") {
 +              return ""
        }
 +      if ((a = _filepath(f)) == "") {
 +              ERRNO = "Filepath error `" f "'"
 +              return ""
 +      }
 +      _cmd("if exist \"" a "\" exit 1 2>NUL")
 +      if (_exitcode == 1) {
 +              return (ERRNO = _NOP)
 +      }
 +      return a
 +}
  
 -      function _dumpobj(p, f, t, s)
 -      {
 -              s = _dumpobj_i0(p, f, t = t "." p "{")
 -              if (p = _rFCHLD(p)) {
 -                      return (s = s _dumpobjm(p, f, (s ? _getchrln(" ", 
length(t) - 1) : t " ")))
 -              }
 -              return s
 +#_______________________________________________________________________
 +function _filepath(f, dd)
 +{
 +      if ((f = _filerdnehnd(f)) == "") {
 +              return ""
        }
 +      return (filegetrootdir(f, dd) ((f in _FILENAM ? _FILENAM[f] : "")) ((f 
in _FILEXT ? _FILEXT[f] : "")))
 +}
  
 -      function _dumpobj_i0(p, f, t)
 -      {
 -              if (f == "") {
 -                      return _dumpobj_i2(p, t)
 -              }
 -              if (f == 0) {
 -                      return _dumpobj_i1(p, t " ")
 -              }
 -              return (_dumpobj_i1(p, t " ") _dumpobj_i2(p, _getchrln(" ", 
length(t))))
 +#_________________________________________________________________
 +function _filer(f, dd)
 +{
 +      if ((f = _filerdnehnd(f)) == "") {
 +              return ""
        }
 +      if (f in _FILEROOT) {
 +              return _FILEROOT[f]
 +      }
 +      if ((dd = (dd ? dd : _FILEIO_RD), f) in _FILEROOT) {
 +              return _FILEROOT[dd, f]
 +      }
 +      return (_FILEROOT[dd, f] = fileri(dd))
 +}
  
 -      function _dumpobj_i1(p, t)
 -      {
 -              return _ln(t substr(((p in _tPREV ? "\253" _tPREV[p] : "")) "   
    ", 1, 7) " " substr(((p in _tPARENT ? "\210" _tPARENT[p] : "")) "       ", 
1, 7) " " substr(((p in _tFCHLD ? _tFCHLD[p] : "")) "\205" ((p in _tQCHLD ? " 
(" _tQCHLD[p] ") " : "\205")) "\205" ((p in _tLCHLD ? _tLCHLD[p] : "")) "       
               ", 1, 22) substr(((p in _tNEXT ? "\273" _tNEXT[p] : "")) "       
 ", 1, 8))
 +#_________________________________________________________________
 +function _filerd(f, dd)
 +{
 +      if ((f = _filerdnehnd(f)) == "") {
 +              return ""
        }
 +      return filegetrootdir(f, dd)
 +}
  
 -      function _dumpobj_i2(p, t)
 -      {
 -              return (_dumpobj_i3(_[p], t " ") _dumpobj_i3(_ptr[p], 
_getchrln(" ", length(t)) "`", "`"))
 +#_________________________________________________________________
 +function _filerdn(f, dd)
 +{
 +      if ((f = _filerdnehnd(f)) == "") {
 +              return ""
        }
 +      return ((f in _FILENAM ? filegetrootdir(f, dd) _FILENAM[f] : ""))
 +}
  
 -      function _dumpobj_i3(A, t, p, e, s, i, t2)
 -      {
 -              if (isarray(A)) {
 -                      for (i in A) {
 -                              t2 = _getchrln(" ", length(t))
 -                              for (i in A) {
 -                                      if (isarray(A[i])) {
 -                                              s = s _dumpobj_i3(A[i], t "[" 
_dumpobj_i4(i) "]", p, _ln())
 -                                      } else {
 -                                              s = s _ln(t "[" _dumpobj_i4(i) 
"]=" p _dumpobj_i4(A[i]) "'")
 -                                      }
 -                                      t = t2
 +#_________________________________________________________________
 +function _filerdne(f, dd)
 +{
 +      if ((f = _filerdnehnd(f)) == "") {
 +              return ""
 +      }
 +      if (f in _FILENAM) {
 +              return (filegetrootdir(f, dd) _FILENAM[f] ((f in _FILEXT ? 
_FILEXT[f] : "")))
 +      }
 +      if (f in _FILEXT) {
 +              return (filegetrootdir(f, dd) _FILEXT[f])
 +      }
 +      return ""
 +}
 +
 +#___________________________________________________________
 +function _filerdnehnd(st, c, r, d, n, A)
 +{
 +      if (st) {
 +              if ((c = toupper(st)) in _FILECACHE) {
 +                      FLENGTH = length(st)
 +                      return _FILECACHE[c]
 +              }
 +              if (match(st, /^[ \t]*\\[ \t]*\\/)) {
 +                      if (match(substr(st, (FLENGTH = RLENGTH) + 1), /^[ 
\t]*([0-9A-Za-z\-]+)[ \t]*(\\[ \t]*([A-Za-z])[ \t]*\$[ \t]*)?(\\[ 
\t]*([0-9A-Za-z_\!\+\-\[\]\(\)\{\}\~\.]+( 
+[0-9A-Za-z_\!\+\-\[\]\(\)\{\}\~\.]+)*[ \t]*\\)+[ 
\t]*)?(([0-9A-Za-z_\!\+\.\~\-\[\]\{\}\(\)]+( 
+[0-9A-Za-z_\!\+\.\~\-\[\]\{\}\(\)]+)*)[ \t]*)?/, A)) {
 +                              FLENGTH = FLENGTH + RLENGTH
 +                              d = ((A[3] ? "\\" A[3] "$" : "")) A[4]
 +                              gsub(/[ \t]*\\[ \t]*/, "\\", d)
 +                              if ((st = toupper((r = "\\\\" A[1]) d (n = 
A[8]))) in _FILECACHE) {
 +                                      return (_FILECACHE[substr(c, 1, 
FLENGTH)] = _FILECACHE[st])
                                }
 -                              return s
 +                              _FILEDIR[c = _FILECACHE[substr(c, 1, FLENGTH)] 
= _FILECACHE[st] = ++_file_rootcntr] = d
 +                              _FILEDIRFL[c]
 +                              _FILEROOT[c] = r
 +                      } else {
 +                              FLENGTH = 0
 +                              _filepath_err = "UNC"
 +                              return ""
 +                      }
 +              } else {
 +                      match(st, /^(([ \t]*\.[ \t]*\\[ \t]*)|(([ 
\t]*([A-Za-z])[ \t]*(\:)[ \t]*)?([ \t]*(\\)[ \t]*)?))([ \t]*(([ 
\t]*[0-9A-Za-z_\!\+\-\[\]\(\)\{\}\~\.]+( 
+[0-9A-Za-z_\!\+\-\[\]\(\)\{\}\~\.]+)*[ \t]*\\)+)[ \t]*)?([ 
\t]*([0-9A-Za-z_\!\+\.\~\-\[\]\{\}\(\)]+( 
+[0-9A-Za-z_\!\+\.\~\-\[\]\{\}\(\)]+)*)[ \t]*)?/, A)
 +                      if (! (FLENGTH = RLENGTH)) {
 +                              return ""
 +                      }
 +                      d = A[8] A[10]
 +                      gsub(/[ \t]*\\[ \t]*/, "\\", d)
 +                      if ((st = toupper((r = A[5] A[6]) d (n = A[14]))) in 
_FILECACHE) {
 +                              return (_FILECACHE[substr(c, 1, FLENGTH)] = 
_FILECACHE[st])
 +                      }
 +                      _FILEDIR[c = _FILECACHE[substr(c, 1, FLENGTH)] = 
_FILECACHE[st] = ++_file_rootcntr] = d
 +                      if (A[8]) {
 +                              _FILEDIRFL[c]
 +                      }
 +                      if (r) {
 +                              _FILEROOT[c] = r
                        }
 -                      return ((e == "" ? "" : t e))
 -              }
 -              if (A == 0 && A == "") {
 -                      return 
                }
 -              return _ln(t "=" _dumpobj_i4(p A) "'")
 -      }
 -
 -      function _dumpobj_i4(t)
 -      {
 -              if (length(t) > 64) {
 -                      return (substr(t, 1, 28) " ... " substr(t, length(t) - 
28))
 +              if (n) {
 +                      if (match(n, /\.[^\.]*$/)) {
 +                              _FILEXT[c] = substr(n, RSTART)
 +                              _FILENAM[c] = substr(n, 1, RSTART - 1)
 +                      } else {
 +                              _FILENAM[c] = n
 +                      }
                }
 -              return t
 +              return c
        }
 +      return ""
 +}
  
 -      function _dumpobj_nc(p, f, t)
 -      {
 -              return _dumpobj_i0(p, f, t "." p "{ ")
 +#_______________________________________________________________________
 +function _filexist(f, a)
 +{
 +      if (f == "") {
 +              return ""
        }
 -
 -      function _dumpobjm(p, f, t, s, t2)
 -      {
 -              t2 = _getchrln(" ", length(t))
 -              do {
 -                      s = s _dumpobj(p, f, t)
 -                      t = t2
 -              } while (p = _rNEXT(p))
 -              return s
 +      if ((a = _filepath(f)) == "") {
 +              ERRNO = "Filepath error `" f "'"
 +              return ""
        }
 -
 -      function _dumpobjm_nc(p, f, t, s, t2)
 -      {
 -              t2 = _getchrln(" ", length(t))
 -              do {
 -                      s = s _dumpobj_nc(p, f, t)
 -                      t = t2
 -              } while (p = _rNEXT(p))
 -              return s
 +      _cmd("if exist \"" a "\" exit 1 2>NUL")
 +      if (_exitcode == 1) {
 +              return a
        }
 -
 -      function _dumpuidgen(p, pd, pc, ps)
 -      {
 -              _conline("#" ++cntdm ": " p "'")
 -              _conl()
 -              if (p in _tuidel) {
 -                      _conl("DEL:   " _var(pd = _tuidel[p]))
 -                      _conl(_dumparr(_tUIDEL[pd]) _ln())
 -              }
 -              _conl("PFX: " _tUIDPFX[p] "'")
 -              _conl("SFX: " _tUIDSFX[p] "'")
 -              _conl("COUNT: " ((p in _tuidcnt ? (pc = _tuidcnt[p]) "'" : 
_th0("-", pc = -2))))
 -              _con("CHARS: ")
 -              if (p in _tuidchr) {
 -                      _conl((ps = _tuidchr[p]) "'")
 -                      _conl("HCHR: " ((pc == -2 ? "-" : _tUIDCNTH[pc] "'")))
 -                      _conl(_dumparr(_tUIDCHRH[ps]) _ln())
 -                      _conl("LCHR: " ((pc == -2 ? "-" : _tUIDCNTL[pc] "'")))
 -                      _conl(_dumparr(_tUIDCHRL[ps]) _ln())
 +      ERRNO = "File not found `" f "'"
 +      return _NOP
 +}
 +
 +#_______________________________________________________________________
 +function _fn(f, p0, p1, p2)
 +{
 +      if (f in FUNCTAB) {
 +              return @f(p0, p1, p2)
 +      }
 +}
 +
 +#_______________________________________________________________________
 +function _foreach(A, f, r, p0, p1, p2, i, p)
 +{
 +      if (isarray(A)) {
 +              _TMP0[p = _n()]["."] = 1
 +              _foreach_i0(A, f, _TMP0[p], p0, p1, p2)
 +              return _th0(_retarr(_TMP0[p]), _tdel(p))
 +      }
 +      if (_isptr(A)) {
 +              _TMP0[p = _n()][_ARRLEN] = 1
 +              _tframe4("_foreach_i1" ((r ? "~" r : "")), A, f, _TMP0[p], p0, 
p1)
 +              return _th0(_retarr(_TMP0[p]), _tdel(p))
 +      }
 +}
 +
 +#_____________________________________________________
 +function _foreach_i0(A, f, D, p0, p1, p2)
 +{
 +      for (i in A) {
 +              if (isarray(A[i])) {
 +                      _foreach_i0(A[i], f, D, p0, p1, p2)
                } else {
 -                      _conl("-")
 +                      _gen(D, @f(A[i], p0, p1, p2))
                }
        }
 +}
  
 -      function _dumpval(v, n)
 -      {
 -              _dumpstr = _dumpstr (v = _ln(((n == 0 && n == "" ? "RET" : n)) 
": " ((v == 0 && v == "" ? "-" : v "'"))))
 -              return v
 -      }
 +#_____________________________________________________
 +function _foreach_i1(p, f, D, p0, p1, p2)
 +{
 +      _gen(D, @f(p, p0, p1, p2))
 +}
  
 -      function _eXTFN(c, t, P)
 -      {
 -              switch (c) {
 -              case "_lib_CMDLN":
 -                      return t
 -              case "_lib_APPLY":
 -                      return 
 -              case "_lib_HELP":
 -                      return 
 -              case "_lib_NAMEVER":
 -                      return _ln("_extfn 1.0")
 -              case "_lib_BEGIN":
 -                      return 
 -              case "_lib_END":
 -                      return 
 -              }
 +#_____________________________________________________________________________
 +function _formatrexp(t)
 +{
 +      _formatstrq0 = split(t, _FORMATSTRA, /[\/\x00-\x1F\x80-\xFF]/, 
_FORMATSTRB)
 +      _formatstrs0 = ""
 +      for (t = 1; t < _formatstrq0; t++) {
 +              _formatstrs0 = _formatstrs0 _FORMATSTRA[t] 
_FORMATREXPESC[_FORMATSTRB[t]]
        }
 +      return (_formatstrs0 _FORMATSTRA[t])
 +}
  
 -      function _endpass(t)
 -      {
 -              _endpass_v0 = t
 -      }
 +#___________________________________________________________
 +function _formatrexp_init()
 +{
 +      _defescarr(_FORMATREXPESC, "[\\x00-\\x1F\\x80-\\xFF]", _QASC)
 +      _defescarr(_FORMATREXPESC, "\\/", "\\")
 +      _FORMATREXPESC["\t"] = "\\t"
 +}
  
 -      function _err(t, a, b)
 -      {
 -              a = BINMODE
 -              b = ORS
 -              BINMODE = "rw"
 -              ORS = ""
 -              print(t) > _SYS_STDERR
 -              fflush(_SYS_STDERR)
 -              BINMODE = a
 -              ORS = b
 -              return t
 +#_____________________________________________________________________________
 +function _formatstrd(t)
 +{
 +      _formatstrq0 = split(t, _FORMATSTRA, /["\x00-\x1F\x80-\xFF]/, 
_FORMATSTRB)
 +      _formatstrs0 = ""
 +      for (t = 1; t < _formatstrq0; t++) {
 +              _formatstrs0 = _formatstrs0 _FORMATSTRA[t] 
_FORMATSTRDESC[_FORMATSTRB[t]]
        }
 +      return (_formatstrs0 _FORMATSTRA[t])
 +}
  
 -      function _errnl(t)
 -      {
 -              return _err(t ((t ~ /\x0A$/ ? "" : _CHR["EOL"])))
 -      }
 +#___________________________________________________________
 +function _formatstrd_init()
 +{
 +      _defescarr(_FORMATSTRDESC, "[\\x00-\\x1F\\x80-\\xFF]", _QASC)
 +      _defescarr(_FORMATSTRDESC, "[\\\\\"]", "\\")
 +      _FORMATSTRDESC["\t"] = "\\t"
 +}
  
 -      function _error(t, d, A)
 -      {
 -              if (_ERRLOG_EF) {
 -                      A["TYPE"] = "ERROR"
 -                      A["TEXT"] = t
 -                      _log(A, d)
 -              }
 -      }
 
+####################################################################################
  
 -      function _exit(c)
 -      {
 -              exit c
 -      }
  
 -      function _export_data(t, i, A)
 -      {
 -              A["DATA"] = t
 -              A["ID"] = i
 -              _expout("_DATA: " _Zexparr(A) "\n")
 -      }
  
 -      function _expout(t, d, a, b)
 -      {
 -              a = BINMODE
 -              b = ORS
 -              BINMODE = "rw"
 -              ORS = ""
 -              print(t) > ((d ? d : d = _errlog_file))
 -              fflush(d)
 -              BINMODE = a
 -              ORS = b
 -      }
  
 -      function _extfn_init()
 -      {
 -              _formatstrs_init()
 -              _formatstrd_init()
 -              _formatrexp_init()
 -              _unformatstr_init()
 -              _mac_init()
 
+#___________________________________________________________________________________
 +function _formatstrs(t)
 +{
 +      _formatstrq0 = split(t, _FORMATSTRA, /['\x00-\x1F\x80-\xFF]/, 
_FORMATSTRB)
 +      _formatstrs0 = ""
 +      for (t = 1; t < _formatstrq0; t++) {
 +              _formatstrs0 = _formatstrs0 _FORMATSTRA[t] 
_FORMATSTRSESC[_FORMATSTRB[t]]
        }
 +      return (_formatstrs0 _FORMATSTRA[t])
 +}
 +
 +#___________________________________________________________
 +function _formatstrs_init()
 +{
 +      _defescarr(_FORMATSTRSESC, "[\\x00-\\x1F\\x80-\\xFF]", _QASC)
 +      _defescarr(_FORMATSTRSESC, "[\\\\']", "\\")
 +      _FORMATSTRSESC["\t"] = "\\t"
 +}
 +
 +function _fpp(q, D, S)
 +{
 +      _conl()
 +      _conline(q)
 +      _conl()
 +      q = _patharr0(S, q)
 +      #_arregpath(D,S)
 +      #_conl(_dumparr(D))
 +      _conl(_dumparr(S))
 +      _conl()
 +      return q
 +}
 +
 +#_______________________________________________________________________
 +########################################################################
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +function _fthru(A, c, p, B)
 +{
 +      return _fthru_i0(A, c, p, B, A[""])
 +}
 +
 +#_________________________________________________________________
 +function _fthru_i0(A, c, p, B, f)
 +{
 +      return ((f ? @f(c, _fthru_i0(A, c, p, B, A[f]), B) : ""))
 +}
 +
 +function _gen(D, t)
 +{
 +      if (length(D[D[_ARRLEN]] = D[D["."]] t) > _datablock_length) {
 +              D[++D[_ARRLEN]] = ""
 +      }
 +}
 +
 +#_____________________________________________________________________________
 +function _gensubfn(t, r, f, p0, A)
 +{
 +      if (match(t, r, A)) {
 +              return (substr(t, 1, RSTART - 1) (@f(_th0(substr(t, RSTART, 
RLENGTH), t = substr(t, RSTART + RLENGTH)), A, p0)) _gensubfn(t, r, f, p0))
 +      }
 +      return t
 +}
 +
 +#_____________________________________________________________________________
 +function _get_errout(p)
 +{
 +      return _tframe("_get_errout_i0", p)
 +}
 +
 +#_______________________________________________________________________
 +function _get_errout_i0(p, t, n, a)
 +{
 +      return ((p in _tLOG ? _get_errout_i1(p) _get_errout_i3(p) : ""))
 +}
  
 -      function _faccl_i0(A, t, p, P, f, r)
 -      {
 -              f = r = ""
 -              if (isarray(A)) {
 -                      while (f = A[f]) {
 -                              r = (@f(t, p, P)) r
 +#_________________________________________________________________
 +function _get_errout_i1(p, t, n, a)
 +{
 +      if (p in _tLOG) {
 +              n = ""
 +              if (_tLOG[p]["TYPE"]) {
 +                      n = _tLOG[p]["TYPE"] ": " _get_errout_i2(p)
 +                      if (match(_tLOG[p]["TEXT"], /\x1F/)) {
 +                              t = n
 +                              gsub(/[^\t]/, " ", t)
 +                              return (_ln(n substr(_tLOG[p]["TEXT"], 1, 
RSTART - 1)) _ln(t substr(_tLOG[p]["TEXT"], RSTART + 1)))
                        }
                }
 -              return r
 +              return _ln(n _tLOG[p]["TEXT"])
        }
 -
 -      function _faccr_i0(A, t, p, P, f, r)
 -      {
 -              f = r = ""
 -              if (isarray(A)) {
 -                      while (f = A[f]) {
 -                              r = r @f(t, p, P)
 +}
 +
 +#_______________________________________________________________________
 +function _get_errout_i2(p)
 +{
 +      return (("FILE" in _tLOG[p] ? _tLOG[p]["FILE"] (("LINE" in _tLOG[p] ? 
"(" _tLOG[p]["LINE"] ")" : "")) ": " : ""))
 +}
 +
 +#_______________________________________________________________________
 +function _get_errout_i3(p, t, ts, cl, cp, cr, a, b)
 +{
 +      if ("LSTR" in _tLOG[p]) {
 +              t = _tLOG[p]["FULLSTR"]
 +              ts = _tLOG[p]["TS"]
 +              cp = "^"
 +              if ("CSTR" in _tLOG[p]) {
 +                      cr = _tLOG[p]["CSTR"]
 +                      cl = _tLOG[p]["CLSTR"]
 +                      if ("CPSTR" in _tLOG[p]) {
 +                              cp = _tLOG[p]["CPSTR"]
                        }
                }
 -              return r
 +              cr = substr(cr, length(cl) + length(cp) + 1)
 +              return (_ln(_tabtospc(t, ts)) _ln(_getchrln(" ", a = 
length(_tabtospc(_tLOG[p]["LSTR"], ts))) _getchrln("-", b = 
length(_tabtospc(cl, ts, a))) _getchrln("^", b = length(_tabtospc(cp, ts, a = a 
+ b))) _getchrln("-", length(_tabtospc(cr, ts, a + b)))))
        }
 +}
  
 -      function _fatal(t, d, A)
 -      {
 -              if (_ERRLOG_FF) {
 -                      A["TYPE"] = "FATAL"
 -                      A["TEXT"] = t
 -                      _log(A, d)
 -              }
 -              if (! d) {
 -                      exit 
 -              }
 -      }
 +#_____________________________________________________________________________
 +function _get_logout(p)
 +{
 +      return _tframe("_get_logout_i0", p)
 +}
  
 -      function _fbaccl(A, t, p, P)
 -      {
 -              return _faccl_i0(A["B"], t, p, P)
 +#_______________________________________________________________________
 +function _get_logout_i0(p, t, n, a)
 +{
 +      if (p in _tLOG) {
 +              n = (("DATE" in _tLOG[p] ? _tLOG[p]["DATE"] " " : "")) (("TIME" 
in _tLOG[p] ? _tLOG[p]["TIME"] " " : ""))
 +              if (_tLOG[p]["TYPE"]) {
 +                      n = n _tLOG[p]["TYPE"] ": " (("FILE" in _tLOG[p] ? 
_tLOG[p]["FILE"] (("LINE" in _tLOG[p] ? "(" _tLOG[p]["LINE"] ")" : "")) ": " : 
""))
 +                      if (match(_tLOG[p]["TEXT"], /\x1F/)) {
 +                              t = n
 +                              gsub(/[^\t]/, " ", t)
 +                              return (_ln(n substr(_tLOG[p]["TEXT"], 1, 
RSTART - 1)) _ln(t substr(_tLOG[p]["TEXT"], RSTART + 1)))
 +                      }
 +              }
 +              return _ln(n _tLOG[p]["TEXT"])
 +      }
 +}
 +
 +#_______________________________________________________________________
 +function _getchrln(s, w)
 +{
 +      if (s == "") {
 +              return 
        }
 -
 -      function _fbaccr(A, t, p, P)
 -      {
 -              return _faccr_i0(A["B"], t, p, P)
 +      #if ( w!=w+0 || w<0 )   w=_CON_WIDTH
 +      if (length(s) < w) {
 +              if (s in _GETCHRLN) {
 +                      if (length(_getchrlnt0 = _GETCHRLN[s]) >= w) {
 +                              return substr(_getchrlnt0, 1, w)
 +                      }
 +              } else {
 +                      _getchrlnt0 = s s
 +              }
 +              while (length(_getchrlnt0) < w) {
 +                      _getchrlnt0 = _getchrlnt0 _getchrlnt0
 +              }
 +              _GETCHRLN[s] = _getchrlnt0
 +              return substr(_getchrlnt0, 1, w)
 +      } else {
 +              return substr(s, 1, w)
 +      }
 +}
 +
 +#_______________________________________________________________________
 +function _getdate()
 +{
 +      return strftime("%F")
 +}
 +
 +#_____________________________________________________________________________
 +function _getfilepath(t, f, al, b, A)
 +{
 +      ERRNO = ""
 +      if (match(t, /^[ \t]*(("([^"]*)"[ \t]*)|([`']([^']*)'[ \t]*)|(([^ 
\t]+)[ \t]*))/, A)) {
 +              al = RLENGTH
 +              f = A[3] A[5] A[7]
 +              _conl("_getfilepath(" f ")        (" al ")")
 +              if (b = _filepath(f)) {
 +                      if (length(f) <= FLENGTH) {
 +                              FLENGTH = al
 +                              return b
 +                      }
 +                      ERRNO = "Filepath `" f "' error"
 +              }
 +      }
 +      FLENGTH = 0
 +}
 +
 +function _getfilever(f)
 +{
 +      split(_cmd(_fileverpath " \"" f "\""), _GETFILEVERA0, /[ \t]+/)
 +      if (_GETFILEVERA0[5]) {
 +              return _GETFILEVERA0[5]
 +      }
 +}
 +
 +#_________________________________________________________________
 +function _getime()
 +{
 +      return strftime("%H:%M:%S")
 +}
 +
 +#_________________________________________________________________
 +function _getmpdir(f, dd)
 +{
 +      if (! dd || ! (dd = _filerd(dd))) {
 +              dd = _FILEIO_TMPRD
 +      }
 +      if (f = (f ? _filerd(f, dd) : _filerd("_" ++_FILEIO_TMPCNTR "\\", dd))) 
{
 +              _FILEIO_RDTMP[toupper(f)]
 +      }
 +      return f
 +}
 +
 +#_________________________________________________________________
 +function _getmpfile(f, dd)
 +{
 +      if (! dd || ! (dd = _filerd(dd))) {
 +              dd = _FILEIO_TMPRD
 +      }
 +      if (f = _filerdne((_filene(f) ? f : f "_" ++_FILEIO_TMPCNTR), dd)) {
 +              _FILEIO_RDNETMP[toupper(f)]
 +      }
 +      return f
 +}
 +
 +#_______________________________________________________________________
 +function _getperf(o, t, a)
 +{
 +      (o == "" ? ++_getperf_opcurr : _getperf_opcurr = o)
 +      if ((a = _getsecond()) != _getperf_last) {
 +              _getperf_opsec = (_getperf_opcurr - _getperf_opstart) / 
((_getperf_last = a) - _getperf_start)
 +              return @_getperf_fn(o, t, a)
 +      }
 +      return 1
 +}
 +
 +#___________________________________________________________
 +function _getperf_(o, t, a)
 +{
 +      if (a >= _getperf_end) {
 +              return 0
        }
 -
 -      function _ffaccl(A, t, p, P)
 -      {
 -              return _faccl_i0(A["F"], t, p, P)
 +      if (_getperf_opsecp != _getperf_opsec) {
 +              _constat(((_constatstr == _getperf_stat ? _getperf_statstr : 
_getperf_statstr = _constatstr)) t " [TIME=" (a - _getperf_start) " sec(" 
(_getperf_opsecp = _getperf_opsec) " ops/sec)]")
 +              _getperf_stat = _constatstr
 +      }
 +      return 1
 +}
 +
 +#___________________________________________________________
 +function _getperf_noe(o, t, a)
 +{
 +      if (_getperf_opsecp != _getperf_opsec) {
 +              _constat(((_constatstr == _getperf_stat ? _getperf_statstr : 
_getperf_statstr = _constatstr)) t " [TIME=" (a - _getperf_start) " sec(" 
(_getperf_opsecp = _getperf_opsec) " ops/sec)]")
 +              _getperf_stat = _constatstr
 +      }
 +      return 1
 +}
 +
 +#___________________________________________________________
 +function _getperf_noenot(o, t, a)
 +{
 +      return 1
 +}
 +
 +#___________________________________________________________
 +function _getperf_not(o, t, a)
 +{
 +      if (a < _getperf_end) {
 +              return 1
        }
 +}
  
 -      function _ffaccr(A, t, p, P)
 -      {
 -              return _faccr_i0(A["F"], t, p, P)
 -      }
 
+#_________________________________________________________________________________________
 
+##########################################################################################
  
 -      function _fframe(A, t, p)
 -      {
 -              return _fframe_i0(A, t, p, A[""])
 -      }
  
 -      function _fframe_i0(A, t, p, f)
 -      {
 -              return ((f ? (@f(t, p)) _fframe_i0(A, t, p, A[f]) : ""))
 -      }
  
 -      function _file(f)
 -      {
 -              if ((f = _filerdnehnd(f)) == "") {
 -                      return ""
 -              }
 -              return ((f in _FILEXT ? _FILEXT[f] : ""))
 -      }
  
 -      function _file_check(p)
 -      {
 -              if (1 || "AGENT" in _[p]) {
 -                      _tframe("_file_check_i0", p, p)
 -              }
 -      }
  
 -      function _file_check_i0(p, pp, p1, p2, f, v)
 -      {
 -              if (_[p]["TYPE"] == "defile") {
 -                      f = _[p]["FILE"]
 -                      f = ((match(f, /^.:/) ? "" : 
_[_[pp]["AGENT"]][".Install Path"] "\\")) _[p]["FILE"]
 -                      if ("RQVERSION" in _[p]) {
 -                              v = _[p]["RQVERSION"]
 -                      } else {
 -                              v = _[pp][".Product Version"]
 -                      }
 -                      ERRNO = ""
 -                      if (_th1(_[p]["DATA"] = _rdfile(f), ERRNO)) {
 -                              delete _[p]["DATA"]
 -                              return _dllerr(p, "read file: " ERRNO, f)
 -                      }
 -                      if (v != "" && v != (_[p]["VERSION"] = _getfilever(f))) 
{
 -                              return _dllerr(p, " file version mismatch: ==`" 
_[p]["VERSION"] "'; !=`" v "'", f)
 -                      }
 -                      _creport(p, substr("OK:    FILE DETECTED" ((v == "" ? 
"" : "(" v ")")) ": " f, 1, 122))
 -              } else {
 -                      if (_[p]["TYPE"] == "defdir") {
 -                              if (_filexist(f = _[p]["DIR"])) {
 -                                      _creport(p, substr("OK:    DIR 
DETECTED: " f, 1, 112))
 -                              } else {
 -                                      _dllerr(p, "directory " f " is not 
detected")
 -                              }
 -                      }
 -              }
 -      }
  
 -      function _filed(f, dd, d)
 -      {
 -              if ((f = _filerdnehnd(f)) == "") {
 -                      return ""
 -              }
 -              if (f in _FILEDIRFL) {
 -                      return _FILEDIR[f]
 -              }
 -              if (f in _FILEROOT) {
 -                      if (d = filegetdrvdir(_FILEROOT[f])) {
 -                              _FILEDIRFL[f]
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +function _getreg_i1(D, r, R, a, i, il, ir, rc, B)
 +{
 +      a = IGNORECASE
 +      IGNORECASE = 1
 +      r = "^" _torexp(r)
 +      rc = 0
 +      zs = ""
 +      for (i in R) {
 +              if (match(i, r, B)) {
 +                      il = B[_torexp_pfxcntr]
 +                      ir = gensub(/....$/, "", 1, substr(i, 1 + 
B[_torexp_pfxcntr, "length"]))
 +                      if (! gsub(/^\\/, "", ir) && match(il, /[^\\]+$/)) {
 +                              ir = substr(il, RSTART) ir
                        }
 -                      return (_FILEDIR[f] = d _FILEDIR[f])
 +                      D[ir] = R[i]
 +                      rc++
                }
 -              if ((dd = (dd ? dd : _FILEIO_RD), f) in _FILEDIR) {
 -                      return _FILEDIR[dd, f]
 -              }
 -              if ((d = filedi(dd) _FILEDIR[f]) ~ /^\\/) {
 -                      return (_FILEDIR[dd, f] = d)
 -              }
 -              return d
        }
 +      IGNORECASE = a
 +      if (rc > 0) {
 +              return rc
 +      }
 +}
  
 -      function _filen(f)
 -      {
 -              if ((f = _filerdnehnd(f)) == "") {
 -                      return ""
 -              }
 -              return ((f in _FILENAM ? _FILENAM[f] : ""))
 +#_________________________________________________________________
 +function _getsecond()
 +{
 +      return systime()
 +}
 +
 +#___________________________________________________________
 +function _getsecondsync(a, c, b, c2)
 +{
 +      a = systime()
 +      while (a == systime()) {
 +              ++c
        }
 +      return (a + 1)
 +}
  
 -      function _filene(f)
 -      {
 -              if ((f = _filerdnehnd(f)) == "") {
 -                      return ""
 +#_______________________________________________________________________
 +function _getuid(p)
 +{
 +      if (p in _UIDOBL) {
 +              for (_tptr in _UIDOBLV[_getuida0 = _UIDOBL[p]]) {
 +                      delete _UIDOBLV[_getuida0][_tptr]
 +                      _CLASSPTR[_tptr] = p
 +                      return _tptr
                }
 -              return (((f in _FILENAM ? _FILENAM[f] : "")) ((f in _FILEXT ? 
_FILEXT[f] : "")))
        }
 +      _CLASSPTR[_tptr = _UIDPFX[p] _getuid_i0(_UIDCNT[p], _UIDCHRL[_tptr = 
_UIDCHR[p]], _UIDCHRH[_tptr]) _UIDSFX[p]] = p
 +      return _tptr
 +}
  
 -      function _filenotexist(f, a)
 -      {
 -              if (f == "") {
 -                      return ""
 -              }
 -              if ((a = _filepath(f)) == "") {
 -                      ERRNO = "Filepath error `" f "'"
 -                      return ""
 -              }
 -              _cmd("if exist \"" a "\" exit 1 2>NUL")
 -              if (_exitcode == 1) {
 -                      return (ERRNO = _NOP)
 +#_____________________________________________________
 +function _getuid_i0(p, UL, UH)
 +{
 +      if ("" == (_tptr = UL[_UIDCNTL[p]])) {
 +              for (_tptr in UH) {
 +                      delete UH[_tptr]
 +                      return ((_UIDCNTH[p] = _tptr) (_UIDCNTL[p] = UL[""]))
                }
 -              return a
 +              _fatal("out of UID")
        }
 +      return (_UIDCNTH[p] (_UIDCNTL[p] = _tptr))
 +}
  
 -      function _filepath(f, dd)
 -      {
 -              if ((f = _filerdnehnd(f)) == "") {
 -                      return ""
 -              }
 -              return (filegetrootdir(f, dd) ((f in _FILENAM ? _FILENAM[f] : 
"")) ((f in _FILEXT ? _FILEXT[f] : "")))
 +function _handle8494(t)
 +{
 +      return gensub(/(.)/, ".\\1", "G", t)
 +}
 +
 +#_____________________________________________________________________________
 +function _hexnum(n, l)
 +{
 +      if (l + 0 < 1) {
 +              l = 2
        }
 +      return sprintf("%." ((l + 0 < 1 ? 2 : l)) "X", n)
 +}
  
 -      function _filer(f, dd)
 -      {
 -              if ((f = _filerdnehnd(f)) == "") {
 -                      return ""
 +#_________________________________________________________________
 +function _igetperf(t, s, o)
 +{
 +      if (t == 0 && t == "" && s == 0 && s == "" && o == 0 && o == "") {
 +              if (_getperf_fn !~ /not$/ && _constatstr == _getperf_stat) {
 +                      _constat(_getperf_statstr)
                }
 -              if (f in _FILEROOT) {
 -                      return _FILEROOT[f]
 +              _getperf_fn = "_nop"
 +              return ("[TIME=" (_getperf_last - _getperf_start) " sec(" 
_getperf_opsec " ops/sec)]")
 +      }
 +      _conl("initiate _getperf")
 +      _getperf_opstart = _getperf_opcurr = o + 0
 +      _getperf_opsec = _getperf_opsecp = _getperf_stat = _getperf_statstr = ""
 +      _getperf_end = t + (_getperf_start = _getperf_last = _getsecondsync())
 +      _getperf_fn = ((t + 0 > 0 ? "_getperf_" : "_getperf_noe")) ((s ? "" : 
"not"))
 +      return _getperf_start
 +}
 +
 +function _import_data(t, p, p2, a)
 +{
 +      if (match(t, /^_DATA: /)) {
 +              _tDATA[a = _wLCHLD(p, _N())][""]
 +              delete _tDATA[a][""]
 +              _Zimparr(_tDATA[a], substr(t, 8))
 +              _conl("DATA: `" _tDATA[a]["ID"] "':`" _tDATA[a]["DATA"] "'")
 +              return ""
 +      }
 +      return t
 +}
 +
 +#_______________________________________________________________________
 +function _info(t, d, A)
 +{
 +      if (_ERRLOG_IF) {
 +              A["TYPE"] = "INFO"
 +              A["TEXT"] = t
 +              _log(A, d)
 +      }
 +}
 +
 +# test with the different path types
 +#     _conl(_ln("SRC:") _dumparr(S)); _conl();
 +
 +function _ini(p, cs, dptr, pfx, sfx, hstr, lstr)
 +{
 +      return _inituid(p, cs, dptr, pfx, sfx, hstr, lstr, A)
 +}
 +
 +function _initfilever()
 +{
 +      _fileverpath = "\\\\CPU\\eGAWK\\LIB\\_filever\\_filever.exe"
 +}
 +
 +function _initrdreg()
 +{
 +      _RDREGTYPE["SZ"] = "STR"
 +      _RDREGTYPE["DWORD"] = "W32"
 +      _RDREGTYPE["QWORD"] = "W64"
 +      _RDREGTYPE["BINARY"] = "BIN"
 +      _RDREGTYPE["EXPAND_SZ"] = "XSZ"
 +      _RDREGTYPE["MULTI_SZ"] = "MSZ"
 +      _RDrdregfld = _rdregkey = 0
 +}
 +
 +function _initregpath0()
 +{
 +      _REGPATH0REGDIR[""] = "HKEY_LOCAL_MACHINE"
 +      _REGPATH0REGDIR["HKLM"] = "HKEY_LOCAL_MACHINE"
 +      _REGPATH0REGDIR["HKEY_LOCAL_MACHINE"] = "HKEY_LOCAL_MACHINE"
 +      _REGPATH0REGDIR["HKCR"] = "HKEY_CLASSES_ROOT"
 +      _REGPATH0REGDIR["HKEY_CLASSES_ROOT"] = "HKEY_CLASSES_ROOT"
 +      _REGPATH0REGDIR["HKCU"] = "HKEY_CURRENT_USER"
 +      _REGPATH0REGDIR["HKEY_CURRENT_USER"] = "HKEY_CURRENT_USER"
 +      _REGPATH0REGDIR["HKU"] = "HKEY_USERS"
 +      _REGPATH0REGDIR["HKEY_USERS"] = "HKEY_USERS"
 +      _REGPATH0REGDIR["HKCC"] = "HKEY_CURRENT_CONFIG"
 +      _REGPATH0REGDIR["HKEY_CURRENT_CONFIG"] = "HKEY_CURRENT_CONFIG"
 +      _REGPATH0REGDIR["HKPD"] = "HKEY_PERFORMANCE_DATA"
 +      _REGPATH0REGDIR["HKEY_PERFORMANCE_DATA"] = "HKEY_PERFORMANCE_DATA"
 +}
 +
 +function _initshare()
 +{
 +      _sharextool = "\\\\CPU\\eGAWK\\LIB\\_share\\_share.exe"
 +}
 +
 +#_________________________________________
 +function _initspecialuid()
 +{
 +      _NOINDEX = _getuid()
 +      _LEN = _getuid()
 +      _PTR = _getuid()
 +      _NAME = _getuid()
 +      _TYPE = _getuid()
 +      _FORMAT = _getuid()
 +}
 +
 +function _initsys()
 +{
 +}
 +
 +#_______________________________________________________________________
 +function _inituid(p, cs, dptr, pfx, sfx, hstr, lstr, A)
 +{
 +      if (cs == 0 && cs == "") {
 +              cs = p
 +              p = _getuid()
 +      }
 +      _conl()
 +      _conl()
 +      _conl(cs)
 +      if (match(cs, /^(([^:]*):)?(([^'\xB4]*\xB4.)*[^'\xB4]*)[']/, A)) {
 +              pfx = A[3]
 +              dptr = A[2]
 +      }
 +      if (match(cs = substr(cs, 1 + RLENGTH), 
/'(([^'\xB4]*\xB4.)*[^'\xB4]*)$/, A)) {
 +              sfx = A[1]
 +              cs = substr(cs, 1, RSTART - 1)
 +      }
 +      if (match(cs, /^(([`\^])(.*))/, A)) {
 +              if (A[2] == "`") {
 +                      hstr = A[3] "~"
 +                      lstr = ""
 +              } else {
 +                      lstr = A[3] "+"
 +                      hstr = ""
                }
 -              if ((dd = (dd ? dd : _FILEIO_RD), f) in _FILEROOT) {
 -                      return _FILEROOT[dd, f]
 +      } else {
 +              if (match(cs, /^(([^'\xB4\|]*\xB4.)*[^'\xB4\|]*)(\|(.*))?/, A)) 
{
 +                      hstr = A[1]
 +                      lstr = A[4]
 +              } else {
 +                      ERRNO = "_inituid(): bad parameters"
 +                      return 
                }
 -              return (_FILEROOT[dd, f] = fileri(dd))
        }
 -
 -      function _filerd(f, dd)
 -      {
 -              if ((f = _filerdnehnd(f)) == "") {
 -                      return ""
 -              }
 -              return filegetrootdir(f, dd)
 +      _conl(dptr ":" pfx "'" hstr "|" lstr "'" sfx)
 +      return _cfguid(p, dptr, pfx, sfx, hstr, lstr)
 +}
 +
 +function _inituidefault(h, l, H, L)
 +{
 +      _classys = ""
 +      delete _UIDOBLV[_UIDOBLV[_UIDOBL[_classys] = _classys][""] = 
_classys][""]
 +      _UIDPFX[_classys]
 +      _UIDSFX[_classys]
 +      _UIDCNT[_classys] = _UIDCHR[_classys] = _CLASSPTR[_classys] = _classys
 +      h = "AB"
 +      l = h "01"
 +      _splitstr(H, h)
 +      _splitstr(L, l)
 +      delete _UIDCHRH[_UIDCHRH[_classys][""] = _classys][""]
 +      delete _UIDCHRL[_UIDCHRL[_classys][""] = _classys][""]
 +      _UIDCNTH[_classys]
 +      _cfguidh(_classys, H, L)
 +      _UIDCNTL[_classys] = _cfguidl(_classys, L, L)
 +      _CLASSFN[_classys]["del"] = "_tobjDEL"
 +      _CLASSFN[_classys]["new"] = "_tobjNEW"
 +      _drawuid(_classys)
 +      _initspecialuid()
 +}
 +
 +#_______________________________________________________________________
 +function _ins(S, sf, D, df)
 +{
 +      if (sf in S) {
 +              if (isarray(S[sf])) {
 +                      if (df in D) {
 +                              if (isarray(D[df])) {
 +                                      return _extarr(D[df], S[sf])
 +                              }
 +                              delete D[df]
 +                      }
 +                      D[df][""]
 +                      delete D[df][""]
 +                      return _extarr(D[df], S[sf])
 +              } else {
 +                      if (isarray(D[df])) {
 +                              delete D[df]
 +                      }
 +                      D[df] = S[sf] D[df]
 +              }
 +      }
 +}
 +
 +#_________________________________________________________________
 +function _insf(A, f)
 +{
 +      A["F"][""] = A["B"][A["F"][f] = A["F"][""]] = f
 +}
 +
 +#_________________________________________________________________
 +function _insframe(A, f)
 +{
 +      A[f] = A[""]
 +      A[""] = f
 +}
 +
 +#_________________________________________________________________
 +function _inspass(A, f)
 +{
 +      A[f] = A[""]
 +      A[""] = f
 +}
 +
 +# there is problem with string's format: i can;t easilly merge 2 charsets: 
comma-divided and every-char-divided strings
 +
 +#_______________________________________________________________________
 +function _isptr(p)
 +{
 +      if (isarray(p)) {
 +              is = _NOP
 +              it = "A"
 +              return 0
        }
 -
 -      function _filerdn(f, dd)
 -      {
 -              if ((f = _filerdnehnd(f)) == "") {
 -                      return ""
 -              }
 -              return ((f in _FILENAM ? filegetrootdir(f, dd) _FILENAM[f] : 
""))
 +      is = p
 +      if (p == 0 && p == "") {
 +              it = "-"
 +              return 0
 +      }
 +      if (p in _CLASSPTR) {
 +              return (it = "P")
        }
 +      it = "S"
 +      return 0
 +}
  
 -      function _filerdne(f, dd)
 -      {
 -              if ((f = _filerdnehnd(f)) == "") {
 -                      return ""
 -              }
 -              if (f in _FILENAM) {
 -                      return (filegetrootdir(f, dd) _FILENAM[f] ((f in 
_FILEXT ? _FILEXT[f] : "")))
 -              }
 -              if (f in _FILEXT) {
 -                      return (filegetrootdir(f, dd) _FILEXT[f])
 +#_______________________________________________________________________
 +function _istr(p)
 +{
 +      if (isarray(p)) {
 +              is = _NOP
 +              it = "A"
 +              return 0
 +      }
 +      is = p
 +      if (p == 0 && p == "") {
 +              it = "-"
 +              return 0
 +      }
 +      return (it = (p == "" ? "s" : "S"))
 +}
 +
 +#_________________________________________________________________
 +function _lengthsort(i1, v1, i2, v2)
 +{
 +      return ((length(i1) < length(i2) ? -1 : (length(i1) > length(i2) ? 1 : 
(i1 < i2 ? -1 : 1))))
 +}
 +
 +#_________________________________________________________________
 +function _lib_APPLY()
 +{
 +      return _ffaccr(_LIBAPI, "_lib_APPLY")
 +}
 +
 +#_________________________________________________________________
 +function _lib_BEGIN(A)
 +{
 +      return _ffaccr(_LIBAPI, "_lib_BEGIN", "", A)
 +}
 +
 +#_______________________________________________________________________
 +function _lib_CMDLN(t)
 +{
 +      return _pass(_LIBAPI["F"], "_lib_CMDLN", t)
 +}
 +
 +#_________________________________________________________________
 +function _lib_END(A)
 +{
 +      return _ffaccr(_LIBAPI, "_lib_END", "", A)
 +}
 +
 +#_________________________________________________________________
 +function _lib_HELP()
 +{
 +      return _fbaccr(_LIBAPI, "_lib_HELP")
 +}
 +
 +#_________________________________________________________________
 +function _lib_NAMEVER()
 +{
 +      return _fbaccr(_LIBAPI, "_lib_NAMEVER")
 +}
 +
 +#_____________________________________________________________________________
 +function _ln(t)
 +{
 +      return ((t ~ /\x0A$/ ? t : t _CHR["EOL"]))
 +}
 +
 +#_________________________________________________________________
 +function _log(A, p, a, B)
 +{
 +      if (isarray(A)) {
 +              A["TIME"] = _getime()
 +              A["DATE"] = _getdate()
 +              if (p) {
 +                      _tLOG[p = _wLCHLD(p, _N())][""]
 +                      delete _tLOG[p][""]
 +                      _movarr(_tLOG[p], A)
 +                      return p
                }
 -              return ""
 +              _expout("_ERRLOG: " _Zexparr(A) "\n")
 +      } else {
 +              B["TEXT"] = A
 +              B["TYPE"] = ""
 +              return _log(B, p)
        }
 +}
  
 -      function _filerdnehnd(st, c, r, d, n, A)
 -      {
 -              if (st) {
 -                      if ((c = toupper(st)) in _FILECACHE) {
 -                              FLENGTH = length(st)
 -                              return _FILECACHE[c]
 -                      }
 -                      if (match(st, /^[ \t]*\\[ \t]*\\/)) {
 -                              if (match(substr(st, (FLENGTH = RLENGTH) + 1), 
/^[ \t]*([0-9A-Za-z\-]+)[ \t]*(\\[ \t]*([A-Za-z])[ \t]*\$[ \t]*)?(\\[ 
\t]*([0-9A-Za-z_\!\+\-\[\]\(\)\{\}\~\.]+( 
+[0-9A-Za-z_\!\+\-\[\]\(\)\{\}\~\.]+)*[ \t]*\\)+[ 
\t]*)?(([0-9A-Za-z_\!\+\.\~\-\[\]\{\}\(\)]+( 
+[0-9A-Za-z_\!\+\.\~\-\[\]\{\}\(\)]+)*)[ \t]*)?/, A)) {
 -                                      FLENGTH = FLENGTH + RLENGTH
 -                                      d = ((A[3] ? "\\" A[3] "$" : "")) A[4]
 -                                      gsub(/[ \t]*\\[ \t]*/, "\\", d)
 -                                      if ((st = toupper((r = "\\\\" A[1]) d 
(n = A[8]))) in _FILECACHE) {
 -                                              return (_FILECACHE[substr(c, 1, 
FLENGTH)] = _FILECACHE[st])
 -                                      }
 -                                      _FILEDIR[c = _FILECACHE[substr(c, 1, 
FLENGTH)] = _FILECACHE[st] = ++_file_rootcntr] = d
 -                                      _FILEDIRFL[c]
 -                                      _FILEROOT[c] = r
 -                              } else {
 -                                      FLENGTH = 0
 -                                      _filepath_err = "UNC"
 -                                      return ""
 -                              }
 -                      } else {
 -                              match(st, /^(([ \t]*\.[ \t]*\\[ \t]*)|(([ 
\t]*([A-Za-z])[ \t]*(\:)[ \t]*)?([ \t]*(\\)[ \t]*)?))([ \t]*(([ 
\t]*[0-9A-Za-z_\!\+\-\[\]\(\)\{\}\~\.]+( 
+[0-9A-Za-z_\!\+\-\[\]\(\)\{\}\~\.]+)*[ \t]*\\)+)[ \t]*)?([ 
\t]*([0-9A-Za-z_\!\+\.\~\-\[\]\{\}\(\)]+( 
+[0-9A-Za-z_\!\+\.\~\-\[\]\{\}\(\)]+)*)[ \t]*)?/, A)
 -                              if (! (FLENGTH = RLENGTH)) {
 -                                      return ""
 -                              }
 -                              d = A[8] A[10]
 -                              gsub(/[ \t]*\\[ \t]*/, "\\", d)
 -                              if ((st = toupper((r = A[5] A[6]) d (n = 
A[14]))) in _FILECACHE) {
 -                                      return (_FILECACHE[substr(c, 1, 
FLENGTH)] = _FILECACHE[st])
 -                              }
 -                              _FILEDIR[c = _FILECACHE[substr(c, 1, FLENGTH)] 
= _FILECACHE[st] = ++_file_rootcntr] = d
 -                              if (A[8]) {
 -                                      _FILEDIRFL[c]
 -                              }
 -                              if (r) {
 -                                      _FILEROOT[c] = r
 -                              }
 +#_________________________________________________________________
 +function _lspctab(t, ts, l, l1, l2, A)
 +{
 +      while (match(t, /^(\t*)( *)((\t*)(.*))$/, A)) {
 +              if (A[1, "length"] >= l) {
 +                      return substr(t, l + 1)
 +              }
 +              if (A[2]) {
 +                      if ((l1 = int(A[2, "length"] / ts)) >= (l2 = l - A[1, 
"length"])) {
 +                              return (substr(A[2], l2 * ts + 1) A[3])
                        }
 -                      if (n) {
 -                              if (match(n, /\.[^\.]*$/)) {
 -                                      _FILEXT[c] = substr(n, RSTART)
 -                                      _FILENAM[c] = substr(n, 1, RSTART - 1)
 -                              } else {
 -                                      _FILENAM[c] = n
 -                              }
 +                      if (! A[4]) {
 +                              return A[5]
                        }
 -                      return c
 +                      t = A[1] _getchrln("\t", l1) A[3]
 +              } else {
 +                      return t
                }
 -              return ""
        }
 -
 -      function _filexist(f, a)
 -      {
 -              if (f == "") {
 -                      return ""
 -              }
 -              if ((a = _filepath(f)) == "") {
 -                      ERRNO = "Filepath error `" f "'"
 -                      return ""
 -              }
 -              _cmd("if exist \"" a "\" exit 1 2>NUL")
 -              if (_exitcode == 1) {
 -                      return a
 -              }
 -              ERRNO = "File not found `" f "'"
 -              return _NOP
 +}
 +
 +function _mac_init()
 +{
 +      _MACPFX["\204"] = "_macpfx84"
 +      _MACPFX[""] = "_mpupfxsubret"
 +      _MACPFX84SFX["\204"] = "_macpfx84"
 +      _MACPFX84SFX["\224"] = "_macsfx94"
 +      _MACPFX84SFX[""] = "_mpusfxsubret"
-       _VLDMAXSTRING = 1e+06
++      _VLDMAXSTRING = 1000000
 +}
 +
 +function _macpfx84(F, D, C, p1, p2, p3)
 +{
 +      return _mpusub(_MACPFX84SFX, D, C, D[_mpuptr++], p1, p2, p3)
 +}
 +
 +function _macsfx94(F, D, C, p1, p2, p3)
 +{
 +      return _mpuretsub(D, _handle8494(_mpuacc))
 +}
 +
 +#_______________________________________________________________________
 +function _movarr(D, S)
 +{
 +      delete D
 +      D[""]
 +      delete D[""]
 +      _addarr(D, S)
 +}
 +
 +function _mpu(t, F, p1, p2, p3, D, C)
 +{
 +      if (patsplit(t, C, /[\x84\x93\x94]/, D) > 0) {
 +              _conline("CODE")
 +              _conl()
 +              _conl(_dumparr(C))
 +              _conline("DATA")
 +              _conl()
 +              _conl(_dumparr(D))
 +              _mpuptr = 0
 +              _mpucc0 = ""
 +              _mpusub(F, D, C, D[_mpuptr++], p1, p2, p3)
 +              return _mpuacc
        }
 +      return t
 +}
 +
 +#
 +#     /rexpstr/       ->      datastr
 +#     (\x00\t\+)*     ->      28 00 09 5B 2B 29
 +#
 +# unesc all non-rexp characters: replace unesc of rexp-characters but do not 
remove it: \* -> \*, \x2A -> \*, \052 -> \*, \\ -> \#
 +
 +
 +
  
 -      function _fn(f, p0, p1, p2)
 -      {
 -              if (f in FUNCTAB) {
 -                      return @f(p0, p1, p2)
 -              }
 -      }
  
 -      function _foreach(A, f, r, p0, p1, p2, i, p)
 -      {
 -              if (isarray(A)) {
 -                      _TMP0[p = _n()]["."] = 1
 -                      _foreach_i0(A, f, _TMP0[p], p0, p1, p2)
 -                      return _th0(_retarr(_TMP0[p]), _tdel(p))
 -              }
 -              if (_isptr(A)) {
 -                      _TMP0[p = _n()][_ARRLEN] = 1
 -                      _tframe4("_foreach_i1" ((r ? "~" r : "")), A, f, 
_TMP0[p], p0, p1)
 -                      return _th0(_retarr(_TMP0[p]), _tdel(p))
 -              }
 -      }
  
 -      function _foreach_i0(A, f, D, p0, p1, p2)
 -      {
 -              for (i in A) {
 -                      if (isarray(A[i])) {
 -                              _foreach_i0(A[i], f, D, p0, p1, p2)
 -                      } else {
 -                              _gen(D, @f(A[i], p0, p1, p2))
 -                      }
 -              }
 -      }
  
 -      function _foreach_i1(p, f, D, p0, p1, p2)
 -      {
 -              _gen(D, @f(p, p0, p1, p2))
 -      }
  
 -      function _formatrexp(t)
 -      {
 -              _formatstrq0 = split(t, _FORMATSTRA, /[\/\x00-\x1F\x80-\xFF]/, 
_FORMATSTRB)
 -              _formatstrs0 = ""
 -              for (t = 1; t < _formatstrq0; t++) {
 -                      _formatstrs0 = _formatstrs0 _FORMATSTRA[t] 
_FORMATREXPESC[_FORMATSTRB[t]]
 -              }
 -              return (_formatstrs0 _FORMATSTRA[t])
 -      }
  
 -      function _formatrexp_init()
 -      {
 -              _defescarr(_FORMATREXPESC, "[\\x00-\\x1F\\x80-\\xFF]", _QASC)
 -              _defescarr(_FORMATREXPESC, "\\/", "\\")
 -              _FORMATREXPESC["\t"] = "\\t"
 -      }
  
 -      function _formatstrd(t)
 -      {
 -              _formatstrq0 = split(t, _FORMATSTRA, /["\x00-\x1F\x80-\xFF]/, 
_FORMATSTRB)
 -              _formatstrs0 = ""
 -              for (t = 1; t < _formatstrq0; t++) {
 -                      _formatstrs0 = _formatstrs0 _FORMATSTRA[t] 
_FORMATSTRDESC[_FORMATSTRB[t]]
 -              }
 -              return (_formatstrs0 _FORMATSTRA[t])
 -      }
  
 -      function _formatstrd_init()
 -      {
 -              _defescarr(_FORMATSTRDESC, "[\\x00-\\x1F\\x80-\\xFF]", _QASC)
 -              _defescarr(_FORMATSTRDESC, "[\\\\\"]", "\\")
 -              _FORMATSTRDESC["\t"] = "\\t"
 -      }
  
 -      function _formatstrs(t)
 -      {
 -              _formatstrq0 = split(t, _FORMATSTRA, /['\x00-\x1F\x80-\xFF]/, 
_FORMATSTRB)
 -              _formatstrs0 = ""
 -              for (t = 1; t < _formatstrq0; t++) {
 -                      _formatstrs0 = _formatstrs0 _FORMATSTRA[t] 
_FORMATSTRSESC[_FORMATSTRB[t]]
 -              }
 -              return (_formatstrs0 _FORMATSTRA[t])
 -      }
  
 -      function _formatstrs_init()
 -      {
 -              _defescarr(_FORMATSTRSESC, "[\\x00-\\x1F\\x80-\\xFF]", _QASC)
 -              _defescarr(_FORMATSTRSESC, "[\\\\']", "\\")
 -              _FORMATSTRSESC["\t"] = "\\t"
 -      }
  
 -      function _fpp(q, D, S)
 -      {
 -              _conl()
 -              _conline(q)
 -              _conl()
 -              q = _patharr0(S, q)
 -              _conl(_dumparr(S))
 -              _conl()
 -              return q
 -      }
  
 -      function _fthru(A, c, p, B)
 -      {
 -              return _fthru_i0(A, c, p, B, A[""])
 -      }
  
 -      function _fthru_i0(A, c, p, B, f)
 -      {
 -              return ((f ? @f(c, _fthru_i0(A, c, p, B, A[f]), B) : ""))
 -      }
  
 -      function _gen(D, t)
 -      {
 -              if (length(D[D[_ARRLEN]] = D[D["."]] t) > _datablock_length) {
 -                      D[++D[_ARRLEN]] = ""
 -              }
 -      }
  
 -      function _gensubfn(t, r, f, p0, A)
 -      {
 -              if (match(t, r, A)) {
 -                      return (substr(t, 1, RSTART - 1) (@f(_th0(substr(t, 
RSTART, RLENGTH), t = substr(t, RSTART + RLENGTH)), A, p0)) _gensubfn(t, r, f, 
p0))
 -              }
 -              return t
 -      }
  
 -      function _get_errout(p)
 -      {
 -              return _tframe("_get_errout_i0", p)
 -      }
  
 -      function _get_errout_i0(p, t, n, a)
 -      {
 -              return ((p in _tLOG ? _get_errout_i1(p) _get_errout_i3(p) : ""))
 -      }
  
 -      function _get_errout_i1(p, t, n, a)
 -      {
 -              if (p in _tLOG) {
 -                      n = ""
 -                      if (_tLOG[p]["TYPE"]) {
 -                              n = _tLOG[p]["TYPE"] ": " _get_errout_i2(p)
 -                              if (match(_tLOG[p]["TEXT"], /\x1F/)) {
 -                                      t = n
 -                                      gsub(/[^\t]/, " ", t)
 -                                      return (_ln(n substr(_tLOG[p]["TEXT"], 
1, RSTART - 1)) _ln(t substr(_tLOG[p]["TEXT"], RSTART + 1)))
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +function _mpudefaulthnd(F, D, C, p1, p2, p3)
 +{
 +      _mpuretsub(D, _mpucc0)
 +}
 +
 +function _mpupfxsubret(F, D, C, p1, p2, p3)
 +{
 +      return 1
 +}
 +
 +function _mpuretsub(D, t)
 +{
 +      _mpuacc = D[_mpuptr++]
 +      _accmpu(D, t)
 +      return 1
 +}
 +
 +function _mpusfxsubret(F, D, C, p1, p2, p3)
 +{
 +      return -1
 +}
 +
 +function _mpusub(F, D, C, d, p1, p2, p3, q)
 +{
 +      q = D[_ARRLEN]
 +      if (_VLDMAXSTRING < length(d)) {
 +              D[--D[_ARRLEN]] = d
 +              _mpuacc = ""
 +      } else {
 +              _mpuacc = d
 +      }
 +      d = _mpucc0
 +      _conl("_mpusub enter: in `" _mpuacc "' / _mpuptr=" _mpuptr "'")
 +      do {
 +              if ((_mpucc0 = C[_mpuptr]) in F) {
 +                      if (isarray(F[_mpucc0])) {
 +                              _mpufn0 = F[_mpucc0]
 +                      }
 +                      _conl("FN: `" _mpucc0 "' > CALL: `" _mpufn0 "' : 
_mpuacc=" _mpuacc "'")
 +              } else {
 +                      _mpufn0 = "_mpudefaulthnd"
 +              }
 +      } while (! _accmpu(D, _mpuacc, @_mpufn0(F, D, C, p1, p2, p3)))
 +      if (_mpufn0 == -1) {
 +              _conl("WARNING: unclosed expression: `" d _mpuacc "'")
 +              _mpuacc = d _mpuacc
 +      }
 +      _retarrm(D, q, "", (_mpufn0 == -1 ? _th0(d, _mpusubwrng("WARNING: 
unclosed expression", d _mpuacc)) : ""))
 +      # collect: _mpuacc=_retarr(D) _mpuacc
 +      _conl("mpusub exit: _mpuacc: `" _mpuacc "'")
 +}
 +
 +#_______________________________________________________________________
 +function _n(F, v, p)
 +{
 +      for (p in _UIDSDEL) {
 +              delete _UIDSDEL[p]
 +              delete _ptr[p]
 +              delete _tPREV[p]
 +              delete _tPARENT[p]
 +              delete _tNEXT[p]
 +              delete _tFCHLD[p]
 +              delete _tQCHLD[p]
 +              delete _tLCHLD[p]
 +              delete _TMP0[p]
 +              delete _TMP1[p]
 +              delete _tLINK[p]
 +              delete _tCLASS[p]
 +              return _nN_i0(p, F, v)
 +      }
 +      for (p in _UIDS) {
 +              delete _UIDS[p]
 +              return _nN_i0(p, F, v)
 +      }
 +      return _nN_i0(_tgenuid(), F, v)
 +}
 +
 +#_____________________________________________________
 +function _nN_i0(p, F, v)
 +{
 +      _[p][""]
 +      delete _[p][""]
 +      _ptr[p][""]
 +      delete _ptr[p][""]
 +      _TMP0[p][_ARRLEN] = _TMP1[p][_ARRLEN] = 0
 +      if (isarray(F)) {
 +              delete F[p]
 +              if (isarray(v)) {
 +                      F[p][""]
 +                      delete F[p][""]
 +                      _copyarr(F[p], v)
 +              } else {
 +                      if (! (v == 0 && v == "")) {
 +                              F[p] = v
 +                      }
 +              }
 +      } else {
 +              if (! (F == 0 && F == "")) {
 +                      if (isarray(v)) {
 +                              _[p][F][""]
 +                              delete _[p][F][""]
 +                              _copyarr(_[p][F], v)
 +                      } else {
 +                              if (v == 0 && v == "") {
 +                                      _mpu(F, p)
 +                              } else {
 +                                      _[p][F] = v
                                }
                        }
 -                      return _ln(n _tLOG[p]["TEXT"])
                }
        }
 +      return p
 +}
 +
 +#_________________________________________________________________
 +function _newclrdir(f)
 +{
 +      if ((f = _filerd(f)) == "") {
 +              return 
 +      }
 +      _cmd("rd " f " /S /Q 2>NUL")
 +      _cmd("md " f " 2>NUL")
 +      _WFILEROOTDIR[f]
 +      return f
 +}
  
 -      function _get_errout_i2(p)
 -      {
 -              return (("FILE" in _tLOG[p] ? _tLOG[p]["FILE"] (("LINE" in 
_tLOG[p] ? "(" _tLOG[p]["LINE"] ")" : "")) ": " : ""))
 +#_______________________________________________________________________
 +function _newdir(f)
 +{
 +      if ((f = _filerd(f)) == "") {
 +              return 
 +      }
 +      if (! (f in _WFILEROOTDIR)) {
 +              _cmd("md " f " 2>NUL")
 +              _WFILEROOTDIR[f]
 +      }
 +      return f
 +}
 +
 +#_______________________________________________________________________
 +function _nop(p0, p1, p2, p3)
 +{
 +}
 +
 +#_____________________________________________________
 +#     _retarr(ARRAY,start,prefixtr,postfixtr)
 +#             Return string collected from elements of ARRAY.
 +#             The data elements in ARRAY have numeric indexes. By default it 
starts from element with index 1, but it is possible to locate elements 
starting from
 +#             0,-1,-.... The last data element in the ARRAY have the highest 
numeric index that is stored in ARRAY[_ARRLEN].
 +#             Optimized for very large data size.
 +#
 +#                     IN:             ARRAY                   - source data 
array(is ARRAY is not array then return undefined)
 +#                                     start                   - (optional) 
start index in ARRAY; if missed or have non-numeric value then start array 
index will be 1.
 +#                                     prefixst                - the string 
that will be inserted in the begin of generated return string
 +#                                     postfix         - the string that will 
be added at the end of generated return string
 +#                     MOD:            -
 +#                     OUT:            -
 +#                     RETURN: undefined               - if ARRAY is not 
array; if ARRAY is empty; if start is higher than ARRAY last element index
 +#                                     string          - collected string: 
prefixtr-arraydata-postfixtr
 +#_________________________________________________________________
 +function _nretarr(A, i, v, r, q)
 +{
 +      if ((i = (i == "" ? 1 : i + 0)) <= (q = A[_ARRLEN])) {
 +              if (i <= (r = q - 16)) {
 +                      _ARRSTR = A[i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i]
 +                      while (i < r) {
 +                              _ARRSTR = _ARRSTR A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i]
 +                      }
 +                      _ARRSTR = _ARRSTR A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] v 
_retarr_i0(A, q, i)
 +                      return 
 +              }
 +              _ARRSTR = A[i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] v _retarr_i0(A, q, i)
 +              return 
        }
 +      _ARRSTR = v
 +      return 
 +}
  
 -      function _get_errout_i3(p, t, ts, cl, cp, cr, a, b)
 -      {
 -              if ("LSTR" in _tLOG[p]) {
 -                      t = _tLOG[p]["FULLSTR"]
 -                      ts = _tLOG[p]["TS"]
 -                      cp = "^"
 -                      if ("CSTR" in _tLOG[p]) {
 -                              cr = _tLOG[p]["CSTR"]
 -                              cl = _tLOG[p]["CLSTR"]
 -                              if ("CPSTR" in _tLOG[p]) {
 -                                      cp = _tLOG[p]["CPSTR"]
 +#___________________________________________________________
 +function _nretarrd(A, i, v, r, q)
 +{
 +      if ((i = (i == "" ? 1 : i + 0)) <= (q = A[_ARRLEN])) {
 +              if (i <= (r = q - 16)) {
 +                      _ARRSTR = A[i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i]
 +                      while (i < r) {
 +                              _ARRSTR = _ARRSTR A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i]
 +                      }
 +                      _ARRSTR = _ARRSTR A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] v 
_retarr_i0(A, q, i)
 +              } else {
 +                      _ARRSTR = A[i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] v 
_retarr_i0(A, q, i)
 +              }
 +      } else {
 +              _ARRSTR = v
 +      }
 +      delete A
 +      A[""]
 +      delete A[""]
 +}
 +
 
+#___________________________________________________________________________________
 
+####################################################################################
 +
 
+#___________________________________________________________________________________
 +function _out(t, a, b)
 +{
 +      a = BINMODE
 +      b = ORS
 +      BINMODE = "rw"
 +      ORS = ""
 +      print(t) > _SYS_STDOUT
 +      fflush(_SYS_STDOUT)
 +      BINMODE = a
 +      ORS = b
 +      return t
 +}
 +
 +#_________________________________________________________________
 +function _outnl(t)
 +{
 +      return _out(t ((t ~ /\x0A$/ ? "" : _CHR["EOL"])))
 +}
 +
 +function _p1(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, p7, p8)
 +{
 +      _qparamf0 = "_p" _QMAP[_qparamc1--]
 +      return @_qparamf0(s1, s2, s3, s4, s5, s6, s7, s8, s1, p1, p2, p3, p4, 
p5, p6, p7)
 +}
 +
 +function _p2(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, p7, p8)
 +{
 +      _qparamf0 = "_p" _QMAP[_qparamc1--]
 +      return @_qparamf0(s1, s2, s3, s4, s5, s6, s7, s8, s2, p1, p2, p3, p4, 
p5, p6, p7)
 +}
 +
 +function _p3(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, p7, p8)
 +{
 +      _qparamf0 = "_p" _QMAP[_qparamc1--]
 +      return @_qparamf0(s1, s2, s3, s4, s5, s6, s7, s8, s3, p1, p2, p3, p4, 
p5, p6, p7)
 +}
 +
 +function _p4(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, p7, p8)
 +{
 +      _qparamf0 = "_p" _QMAP[_qparamc1--]
 +      return @_qparamf0(s1, s2, s3, s4, s5, s6, s7, s8, s4, p1, p2, p3, p4, 
p5, p6, p7)
 +}
 +
 +function _p5(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, p7, p8)
 +{
 +      _qparamf0 = "_p" _QMAP[_qparamc1--]
 +      return @_qparamf0(s1, s2, s3, s4, s5, s6, s7, s8, s5, p1, p2, p3, p4, 
p5, p6, p7)
 +}
 +
 +function _p6(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, p7, p8)
 +{
 +      _qparamf0 = "_p" _QMAP[_qparamc1--]
 +      return @_qparamf0(s1, s2, s3, s4, s5, s6, s7, s8, s6, p1, p2, p3, p4, 
p5, p6, p7)
 +}
 +
 +function _p7(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, p7, p8)
 +{
 +      _qparamf0 = "_p" _QMAP[_qparamc1--]
 +      return @_qparamf0(s1, s2, s3, s4, s5, s6, s7, s8, s7, p1, p2, p3, p4, 
p5, p6, p7)
 +}
 +
 +function _p8(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, p7, p8)
 +{
 +      _qparamf0 = "_p" _QMAP[_qparamc1--]
 +      return @_qparamf0(s1, s2, s3, s4, s5, s6, s7, s8, s8, p1, p2, p3, p4, 
p5, p6, p7)
 +}
 +
 +#_______________________________________________________________________
 +function _pass(A, f, t, p2, i, a)
 +{
 +      a = _endpass_v0
 +      _endpass_v0 = ""
 +      i = 1
 +      while (t && i) {
 +              i = ""
 +              while ((i = A[i]) && t == (t = @i(f, t, p2))) {
 +              }
 +      }
 +      if (i && _endpass_v0) {
 +              A["!"] = 1
 +              t = _endpass_v0
 +      } else {
 +              delete A["!"]
 +      }
 +      _endpass_v0 = a
 +      return t
 +}
 +
 +# this is somnitelno: that   / / . / / com 56 / / - is the DEV...; what is 
DEV ??? this already PROBLEM
 +#_____________________________________________________________________________
 +function _patharr0(D, q, i, h, A, B)
 +{
 +      delete D
 +      if (0 < (q = split(gensub(/\\/, "/", "G", gensub(/ *([:$\\\/]) */, 
"\\1", "G", gensub(/(^[ \t]+)|([ \t]+$)/, "", "G", q))), A, /\/+/, B))) {
 +              if (2 > (h = length(B[1]))) {
 +                      D["type"] = "FILE"
 +                      A[1] = _patharr0_i0(A[1], D, "drive")
 +                      return _patharr0_i1(D, A, 1, q)
 +              }
 +              i = gensub(/ *([\.\?]) */, "\\1", "G", A[2])
 +              IGNORECASE = 1
 +              match(A[1], /^((https?)|(ftp)):$/)
 +              IGNORECASE = 0
 +              if (RLENGTH > 0) {
 +                      D["type"] = toupper(substr(A[1], 1, RLENGTH - 1))
 +                      _patharr0_i0(i, D, "site", "port")
 +              } else {
 +                      if (A[1] == "") {
 +                              D["type"] = "UNC"
 +                              if (h > 2) {
 +                                      D["host"]
 +                                      A[2] = _patharr0_i0(A[2], D, "drive", 
"", "FILE")
 +                                      return _patharr0_i1(D, A, 2, q)
                                }
 +                              if (i == "") {
 +                                      return 1
 +                              }
 +                              D["host"] = i
 +                              A[3] = _patharr0_i0(A[3], D, "drive", "", 
"FILE")
 +                      } else {
 +                              D["type"] = "FILE"
 +                              A[1] = _patharr0_i0(A[1], D, "drive")
 +                              return _patharr0_i1(D, A, 1, q)
                        }
 -                      cr = substr(cr, length(cl) + length(cp) + 1)
 -                      return (_ln(_tabtospc(t, ts)) _ln(_getchrln(" ", a = 
length(_tabtospc(_tLOG[p]["LSTR"], ts))) _getchrln("-", b = 
length(_tabtospc(cl, ts, a))) _getchrln("^", b = length(_tabtospc(cp, ts, a = a 
+ b))) _getchrln("-", length(_tabtospc(cr, ts, a + b)))))
                }
 +              return _patharr0_i1(D, A, 3, q)
        }
 +}
  
 -      function _get_logout(p)
 -      {
 -              return _tframe("_get_logout_i0", p)
 +#_____________________________________________________
 +function _patharr0_i0(t, D, l, r, d, i)
 +{
 +      if (i = index(t, ":")) {
 +              if (d) {
 +                      D["type"] = d
 +              }
 +              if (i > 1) {
 +                      D[l] = substr(t, 1, i - 1)
 +              }
 +              if ((t = substr(t, i + 1)) && r) {
 +                      D[r] = t
 +              }
 +              return t
 +      } else {
 +              if (t && r) {
 +                      D[l] = t
 +              }
        }
 +      return t
 +}
  
 -      function _get_logout_i0(p, t, n, a)
 -      {
 -              if (p in _tLOG) {
 -                      n = (("DATE" in _tLOG[p] ? _tLOG[p]["DATE"] " " : "")) 
(("TIME" in _tLOG[p] ? _tLOG[p]["TIME"] " " : ""))
 -                      if (_tLOG[p]["TYPE"]) {
 -                              n = n _tLOG[p]["TYPE"] ": " (("FILE" in 
_tLOG[p] ? _tLOG[p]["FILE"] (("LINE" in _tLOG[p] ? "(" _tLOG[p]["LINE"] ")" : 
"")) ": " : ""))
 -                              if (match(_tLOG[p]["TEXT"], /\x1F/)) {
 -                                      t = n
 -                                      gsub(/[^\t]/, " ", t)
 -                                      return (_ln(n substr(_tLOG[p]["TEXT"], 
1, RSTART - 1)) _ln(t substr(_tLOG[p]["TEXT"], RSTART + 1)))
 -                              }
 +#_____________________________________________________
 +function _patharr0_i1(D, A, i, q, t, c)
 +{
 +      if (D["type"] == "UNC") {
 +              if (t = A[i++]) {
 +                      D[0] = (D["share"] = D[++c] = t) "/"
 +              } else {
 +                      return 1
 +              }
 +      }
 +      while (i < q) {
 +              D[0] = D[0] (D[++c] = A[i++]) "/"
 +      }
 +      if (i == q) {
 +              if (match(t = A[i], /\.[^\.]*$/)) {
 +                      if (RSTART > 1) {
 +                              D["name"] = substr(t, 1, RSTART - 1)
 +                      }
 +                      D["ext"] = substr(t, RSTART, RLENGTH)
 +              } else {
 +                      if (t != "") {
 +                              D["name"] = t
                        }
 -                      return _ln(n _tLOG[p]["TEXT"])
                }
        }
 +      return 1
 +}
  
 -      function _getchrln(s, w)
 -      {
 -              if (s == "") {
 -                      return 
 +#############################################################################
 +function _pmap(m, s1, s2, s3, s4, s5, s6, s7, s8)
 +{
 +      if (match(m, /^([^\(]+)\(([^\)]*)\)$/, _QMAP)) {
 +              _qparamf1 = _QMAP[1]
 +              _QMAP[0] = "r" (_qparamc1 = split(_QMAP[2], _QMAP, ""))
 +              _qparamf0 = "_p" _QMAP[_qparamc1--]
 +              return @_qparamf0(s1, s2, s3, s4, s5, s6, s7, s8)
 +      }
 +}
 +
 +function _pr0(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, p7, p8)
 +{
 +      return @_qparamf1()
 +}
 +
 +function _pr1(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, p7, p8)
 +{
 +      return @_qparamf1(p1)
 +}
 +
 +function _pr2(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, p7, p8)
 +{
 +      return @_qparamf1(p1, p2)
 +}
 +
 +function _pr3(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, p7, p8)
 +{
 +      return @_qparamf1(p1, p2, p3)
 +}
 +
 +function _pr4(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, p7, p8)
 +{
 +      return @_qparamf1(p1, p2, p3, p4)
 +}
 +
 +function _pr5(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, p7, p8)
 +{
 +      return @_qparamf1(p1, p2, p3, p4, p5)
 +}
 +
 +function _pr6(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, p7, p8)
 +{
 +      return @_qparamf1(p1, p2, p3, p4, p5, p6)
 +}
 +
 +function _pr7(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, p7, p8)
 +{
 +      return @_qparamf1(p1, p2, p3, p4, p5, p6, p7)
 +}
 +
 +function _pr8(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, p7, p8)
 +{
 +      return @_qparamf1(p1, p2, p3, p4, p5, p6, p7, p8)
 +}
 +
 +#_________________________________________________________________
 +function _printarr(A, t, lv, r, a)
 +{
 +      a = PROCINFO["sorted_in"]
 +      PROCINFO["sorted_in"] = "_lengthsort"
 +      _printarrexp = (r ? r : "")
 +      if (isarray(A)) {
 +              delete _DUMPARR
 +              _dumparrc = _dumparrd = ""
 +              _printarr_i1(A, lv = ((lv == "" ? 16 : (lv == 0 || lv + 0 != 0 
? lv : (lv == "-*" ? -3 : (lv ~ /^\+?\*$/ ? 3 : 16))))) + 0, (lv < 0 ? -1 : 1), 
0, _tabtospc(t))
 +              PROCINFO["sorted_in"] = a
 +              return _retarrd(_DUMPARR, _dumparrd, _dumparrd = "")
 +      }
 +}
 +
 +#___________________________________________________________
 +function _printarr_i1(A, lv, ls, ln, t, t2, i, a, f)
 +{
 +      t2 = _getchrln(" ", length(t))
 +      if (ln == lv) {
 +              if (ls > 0) {
 +                      for (i in A) {
 +                              ++a
 +                      }
 +              } else {
 +                      for (i in A) {
 +                              (isarray(A[i]) ? ++a : "")
 +                      }
 +              }
 +              if (length(_dumparrd = _dumparrd t ((a > 0 ? " ... (x" a ")" : 
"")) _CHR["EOL"]) > 262144) {
 +                      _conl(_dumparrd)
 +                      _dumparrd = ""
                }
 -              if (length(s) < w) {
 -                      if (s in _GETCHRLN) {
 -                              if (length(_getchrlnt0 = _GETCHRLN[s]) >= w) {
 -                                      return substr(_getchrlnt0, 1, w)
 +              return 
 +      }
 +      if (ls >= 0) {
 +              for (i in A) {
 +                      if (! _printarrexp || i ~ _printarrexp) {
 +                              if (! isarray(A[i])) {
 +                                      if (length(_dumparrd = _dumparrd ((f ? 
t2 : t _nop(f = 1))) "[" i "]=" A[i] "'" _CHR["EOL"]) > 262144) {
 +                                              _conl(_dumparrd)
 +                                              _dumparrd = ""
 +                                      }
                                }
 -                      } else {
 -                              _getchrlnt0 = s s
                        }
 -                      while (length(_getchrlnt0) < w) {
 -                              _getchrlnt0 = _getchrlnt0 _getchrlnt0
 +              }
 +      }
 +      for (i in A) {
 +              if (isarray(A[i])) {
 +                      if (! _printarrexp || i ~ _printarrexp) {
 +                              _printarr_i1(A[i], lv, ls, ln + ls, _th0((f ? 
t2 : t), f = 1) "[" i "]")
                        }
 -                      _GETCHRLN[s] = _getchrlnt0
 -                      return substr(_getchrlnt0, 1, w)
 -              } else {
 -                      return substr(s, 1, w)
                }
        }
 -
 -      function _getdate()
 -      {
 -              return strftime("%F")
 +      if (! f) {
 +              if (length(_dumparrd = _dumparrd t _CHR["EOL"]) > 262144) {
 +                      _conl(_dumparrd)
 +                      _dumparrd = ""
 +              }
        }
 +}
  
 -      function _getfilepath(t, f, al, b, A)
 -      {
 -              ERRNO = ""
 -              if (match(t, /^[ \t]*(("([^"]*)"[ \t]*)|([`']([^']*)'[ 
\t]*)|(([^ \t]+)[ \t]*))/, A)) {
 -                      al = RLENGTH
 -                      f = A[3] A[5] A[7]
 -                      _conl("_getfilepath(" f ")        (" al ")")
 -                      if (b = _filepath(f)) {
 -                              if (length(f) <= FLENGTH) {
 -                                      FLENGTH = al
 -                                      return b
 +function _qparam(qm, p0, p1, p2, p3, p4, p5, p6, p7)
 +{
 +      if (qm == qm + 0 && qm > 0) {
 +              _qparamim = substr("        ", 1, qm)
 +      } else {
 +              if (qm != "") {
 +                      _qparamim = qm
 +              } else {
 +                      _qparamim = "        "
 +              }
 +      }
 +      _qparamask = ""
 +      return _qparam_i0(p0, p1, p2, p3, p4, p5, p6, p7)
 +}
 +
 +function _qparam_i0(p0, p1, p2, p3, p4, p5, p6, p7)
 +{
 +      _qparama0 = substr(_qparamim, 1, 1)
 +      _qparamim = substr(_qparamim, 2)
 +      switch (_qparama0) {
 +      case "":
 +              gsub(/ +$/, "", _qparamask)
 +              return length(_qparamask)
 +      default:
 +              if (isarray(p0)) {
 +                      _qparama0 = "A"
 +              } else {
 +                      if (p0 == "" && p0 == 0) {
 +                              _qparama0 = " "
 +                      } else {
 +                              if (_isptr(p0)) {
 +                                      _qparama0 = "P"
 +                              } else {
 +                                      _qparama0 = "S"
                                }
 -                              ERRNO = "Filepath `" f "' error"
                        }
                }
 -              FLENGTH = 0
 +      case ".":
 +              _qparamask = _qparamask _qparama0
 +              return _qparam_i0(p1, p2, p3, p4, p5, p6, p7)
 +      }
 +}
 +
 +#_______________________________________________________________________
 +function _qstr(t, c, A, B)
 +{
 +      c = ""
 +      for (t = split(t, A, /[\x00-\x1F\\"]/, B); t >= 0; t--) {
 +              c = _QSTR[B[t]] A[t + 1] c
 +      }
 +      return c
 +}
 +
 +#_________________________________________________________________
 +function _qstrq(t)
 +{
 +      gsub(/\\/, "\\\\", t)
 +      gsub(/"/, "\\\"", t)
 +      return t
 +}
 +
 +#_____________________________________________________________________________
 +function _rEG(c, t, P, a, A)
 +{
 +      switch (c) {
 +      case "_lib_CMDLN":
 +              #___________________________________________________________
 +              return t
 +              #_____________________________________________________
 +      case "_lib_APPLY":
 +              return 
 +              #_____________________________________________________
 +      case "_lib_HELP":
 +              return 
 +              #_____________________________________________________
 +      case "_lib_NAMEVER":
 +              return _ln("_reg 0.001")
 +              #_____________________________________________________
 +      case "_lib_BEGIN":
 +              return 
 +              #_____________________________________________________
 +      case "_lib_END":
 +              return 
        }
 +}
  
 -      function _getfilever(f)
 -      {
 -              split(_cmd(_fileverpath " \"" f "\""), _GETFILEVERA0, /[ \t]+/)
 -              if (_GETFILEVERA0[5]) {
 -                      return _GETFILEVERA0[5]
 +#_______________________________________________________________________
 +function _rFBRO(p)
 +{
 +      if (p) {
 +              if (p in _tPARENT) {
 +                      return _tFCHLD[_tPARENT[p]]
 +              }
 +              while (p in _tPREV) {
 +                      p = _tPREV[p]
                }
 +              return p
        }
 +      return p
 +}
  
 -      function _getime()
 -      {
 -              return strftime("%H:%M:%S")
 +#_______________________________________________________________________
 +function _rFCHLD(p)
 +{
 +      if (p && p in _tFCHLD) {
 +              return _tFCHLD[p]
        }
 +      return ""
 +}
  
 -      function _getmpdir(f, dd)
 -      {
 -              if (! dd || ! (dd = _filerd(dd))) {
 -                      dd = _FILEIO_TMPRD
 +#_______________________________________________________________________
 +function _rLBRO(p)
 +{
 +      if (p) {
 +              if (p in _tPARENT) {
 +                      return _tLCHLD[_tPARENT[p]]
                }
 -              if (f = (f ? _filerd(f, dd) : _filerd("_" ++_FILEIO_TMPCNTR 
"\\", dd))) {
 -                      _FILEIO_RDTMP[toupper(f)]
 +              while (p in _tNEXT) {
 +                      p = _tNEXT[p]
                }
 -              return f
 +              return p
        }
 -
 -      function _getmpfile(f, dd)
 -      {
 -              if (! dd || ! (dd = _filerd(dd))) {
 -                      dd = _FILEIO_TMPRD
 +      return p
 +}
 +
 +#_______________________________________________________________________
 +function _rLCHLD(p)
 +{
 +      if (p && p in _tLCHLD) {
 +              return _tLCHLD[p]
 +      }
 +      return ""
 +}
 +
 +#_______________________________________________________________________
 +function _rLINK(p)
 +{
 +      return ((p in _tLINK ? _tLINK[p] : ""))
 +}
 +
 +#_______________________________________________________________________
 +function _rNEXT(p)
 +{
 +      if (p && p in _tNEXT) {
 +              return _tNEXT[p]
 +      }
 +      return ""
 +}
 +
 +#_______________________________________________________________________
 +function _rPARENT(p)
 +{
 +      if (p && p in _tPARENT) {
 +              return _tPARENT[p]
 +      }
 +      return ""
 +}
 +
 +#_______________________________________________________________________
 +function _rPREV(p)
 +{
 +      if (p && p in _tPREV) {
 +              return _tPREV[p]
 +      }
 +      return ""
 +}
 +
 +#_______________________________________________________________________
 +function _rQBRO(p, c, p1)
 +{
 +      if (p) {
 +              if (p in _tPARENT) {
 +                      return _tQCHLD[_tPARENT[p]]
                }
 -              if (f = _filerdne((_filene(f) ? f : f "_" ++_FILEIO_TMPCNTR), 
dd)) {
 -                      _FILEIO_RDNETMP[toupper(f)]
 +              c = 1
 +              p1 = p
 +              while (p1 in _tPREV) {
 +                      c++
 +                      p1 = _tPREV[p1]
                }
 -              return f
 +              while (p in _tNEXT) {
 +                      c++
 +                      p = _tNEXT[p]
 +              }
 +              return c
 +      }
 +      return p
 +}
 +
 +#_______________________________________________________________________
 +function _rQCHLD(p)
 +{
 +      if (p && p in _tQCHLD) {
 +              return _tQCHLD[p]
 +      }
 +      return ""
 +}
 +
 
+#___________________________________________________________________________________
 +# EMMULATED FUNCTIONAL FIELDS 
######################################################
 +
 +#_____________________________________________________________________________
 +function _rSQFIRST(g, p, A)
 +{
 +      if (isarray(A)) {
 +              return _rSQFIRSTA(g, p, A)
 +      }
 +      _SQTOPTR[g] = p
 +      _SQSTACK[g][0] = 0
 +      return _rsqgetptr(g, p)
 +}
 +
 +#_________________________________________________________________
 +function _rSQFIRSTA(g, p, A)
 +{
 +      _SQTOPTR[g] = p
 +      _SQSTACK[g][0] = 0
 +      if ((p = _rsqgetptr(g, p)) in A) {
 +              return p
        }
 +      return _rSQNEXTA(g, p, A)
 +}
  
 -      function _getperf(o, t, a)
 -      {
 -              (o == "" ? ++_getperf_opcurr : _getperf_opcurr = o)
 -              if ((a = _getsecond()) != _getperf_last) {
 -                      _getperf_opsec = (_getperf_opcurr - _getperf_opstart) / 
((_getperf_last = a) - _getperf_start)
 -                      return @_getperf_fn(o, t, a)
 -              }
 -              return 1
 +#_______________________________________________________________________
 +function _rSQNEXT(g, p, A)
 +{
 +      if (isarray(A)) {
 +              return _rSQNEXTA(g, p, A)
        }
 +      return _rsqnext_i0(g, p)
 +}
  
 -      function _getperf_(o, t, a)
 -      {
 -              if (a >= _getperf_end) {
 -                      return 0
 +#_________________________________________________________________
 +function _rSQNEXTA(g, p, A)
 +{
 +      if (p == _SQTOPTR[g]) {
 +              if (_SQSTACK[g][0] > 0) {
 +                      _SQTOPTR[g] = _SQSTACK[g][_SQSTACK[g][0]--]
 +                      return _rSQNEXTA(g, _SQSTACK[g][_SQSTACK[g][0]--], A)
                }
 -              if (_getperf_opsecp != _getperf_opsec) {
 -                      _constat(((_constatstr == _getperf_stat ? 
_getperf_statstr : _getperf_statstr = _constatstr)) t " [TIME=" (a - 
_getperf_start) " sec(" (_getperf_opsecp = _getperf_opsec) " ops/sec)]")
 -                      _getperf_stat = _constatstr
 -              }
 -              return 1
 +              return 
        }
 -
 -      function _getperf_noe(o, t, a)
 -      {
 -              if (_getperf_opsecp != _getperf_opsec) {
 -                      _constat(((_constatstr == _getperf_stat ? 
_getperf_statstr : _getperf_statstr = _constatstr)) t " [TIME=" (a - 
_getperf_start) " sec(" (_getperf_opsecp = _getperf_opsec) " ops/sec)]")
 -                      _getperf_stat = _constatstr
 +      while (p in _tNEXT) {
 +              if ((p = _rsqgetptr(g, _tNEXT[p])) in A) {
 +                      return p
                }
 -              return 1
        }
 +      return ((p in _tPARENT ? _rSQNEXTA(g, _tPARENT[p], A) : ""))
 +}
  
 -      function _getperf_noenot(o, t, a)
 -      {
 -              return 1
 -      }
 +function _rconl(t)
 +{
 +      _rprt = _rprt _ln(t)
 +}
  
 -      function _getperf_not(o, t, a)
 -      {
 -              if (a < _getperf_end) {
 -                      return 1
 -              }
 -      }
 +function _rconline(t)
 +{
 +      _rprt = _rprt _ln((t = " " t " ") _getchrln("_", _CON_WIDTH - length(t) 
- 1))
 +}
  
 -      function _getreg_i1(D, r, R, a, i, il, ir, rc, B)
 -      {
 -              a = IGNORECASE
 -              IGNORECASE = 1
 -              r = "^" _torexp(r)
 -              rc = 0
 -              zs = ""
 -              for (i in R) {
 -                      if (match(i, r, B)) {
 -                              il = B[_torexp_pfxcntr]
 -                              ir = gensub(/....$/, "", 1, substr(i, 1 + 
B[_torexp_pfxcntr, "length"]))
 -                              if (! gsub(/^\\/, "", ir) && match(il, 
/[^\\]+$/)) {
 -                                      ir = substr(il, RSTART) ir
 +#___________________________________________________________
 +function _rd_shortcut(D, f)
 +{
 +      if ((_shrtcutf0 = _filepath(f)) && _shortcut_nerr(_shrtcuta0 = 
_cmd(_shortcut_fpath " /A:Q /F:\"" _shrtcutf0 "\" 2>&1"), _shrtcutf0)) {
 +              ERRNO = ""
 +              split(_shrtcuta0, _SHRTCUTA0, /\x0D?\x0A/)
 +              for (_shrtcuta0 in _SHRTCUTA0) {
 +                      for (f in _SHORTCUTRSTRUC) {
 +                              if (match(_SHRTCUTA0[_shrtcuta0], "^" f)) {
 +                                      D[_SHORTCUTRSTRUC[f]] = 
substr(_SHRTCUTA0[_shrtcuta0], 1 + RLENGTH)
                                }
 -                              D[ir] = R[i]
 -                              rc++
                        }
                }
 -              IGNORECASE = a
 -              if (rc > 0) {
 -                      return rc
 -              }
        }
 +      return ((ERRNO ? ERRNO = "read shortcut: " ERRNO : _NOP))
 +}
  
 -      function _getsecond()
 -      {
 -              return systime()
 +#_______________________________________________________________________
 +function _rdfile(f, i, A)
 +{
 +      if ((f = _filerdne(f)) == "" || _filene(f) == "") {
 +              ERRNO = "Filename error"
 +              return 
        }
 -
 -      function _getsecondsync(a, c, b, c2)
 -      {
 -              a = systime()
 -              while (a == systime()) {
 -                      ++c
 -              }
 -              return (a + 1)
 +      _fio_cmda = RS
 +      RS = ".{1,}"
 +      _fio_cmdb = BINMODE
 +      BINMODE = "rw"
 +      ERRNO = RT = _NUL
 +      getline RS < f
 +      BINMODE = _fio_cmdb
 +      RS = _fio_cmda
 +      if (ERRNO == "") {
 +              close(f)
        }
 -
 -      function _getuid(p)
 -      {
 -              if (p in _UIDOBL) {
 -                      for (_tptr in _UIDOBLV[_getuida0 = _UIDOBL[p]]) {
 -                              delete _UIDOBLV[_getuida0][_tptr]
 -                              _CLASSPTR[_tptr] = p
 -                              return _tptr
 -                      }
 -              }
 -              _CLASSPTR[_tptr = _UIDPFX[p] _getuid_i0(_UIDCNT[p], 
_UIDCHRL[_tptr = _UIDCHR[p]], _UIDCHRH[_tptr]) _UIDSFX[p]] = p
 -              return _tptr
 +      if (ERRNO == "") {
 +              return RT
        }
 -
 -      function _getuid_i0(p, UL, UH)
 -      {
 -              if ("" == (_tptr = UL[_UIDCNTL[p]])) {
 -                      for (_tptr in UH) {
 -                              delete UH[_tptr]
 -                              return ((_UIDCNTH[p] = _tptr) (_UIDCNTL[p] = 
UL[""]))
 +      return (RT = _NOP)
 +}
 +
 
+####################################################################################
 +# PUBLIC:
 +#_____________________________________________________________________________
 +#     fn      _th0,_th1,_th2,_th3
 +#             USAGE:
 +#                     _th0(p1,p2,p3,p4)
 +#
 +#                     Each of this functions can have up to 4 parameters.
 +#                             _th0(p1,p2,p3,p4) return 1st parameter (p1)
 +#                             _th1(p1,p2,p3,p4) return 2nd parameter (p2)
 +#                             _th2(p1,p2,p3,p4) return 3rd parameter (p3)
 +#                             _th3(p1,p2,p3,p4) return 4th parameter (p4)
 +#_____________________________________________________________________________
 +#     fn      _nop(p1,p2,p3,p4,p5,p6,p7,p8)
 +#             USAGE:
 +#                     _nop()
 +#
 +#                     Does not do any action. No result returned. Up to 8 
parameters.
 +#_____________________________________________________________________________
 +#     fn      _exit(c)
 +#             USAGE:
 +#                     _exit(code)
 +#
 +#                     This function do the same as GAWK-operator `exit code'.
 +#_____________________________________________________________________________
 +#     fn      _getdate()
 +#     fn      _getime()
 +#     fn      _getsecond()
 +#     fn      _getsecondsync()
 +function _rdreg(D, p)
 +{
 +      _rdregp0 = "reg query \"" p "\" /S /reg:64 2>NUL"
 +      _rdregfld = _rdregkey = 0
 +      _rdregq0 = split(gensub(/[\x0D?\x0A]{2,}/, _CHR["EOL"], "G", 
_cmd(_rdregp0)), _RDREGA0, /\x0D?\x0A/)
 +      while (_rdregq0 > 0) {
 +              _rdreg_i0(D)
 +      }
 +      return (_rdregfld + _rdregkey)
 +}
 +
 +#___________________________________________________________
 +function _rdreg_i0(D, A)
 +{
 +      while (_rdregq0 > 0) {
 +              if (match(_rdregp0 = _RDREGA0[_rdregq0--], /    (.*)    
REG_((SZ)|(DWORD)|(QWORD)|(BINARY)|(EXPAND_SZ)|(MULTI_SZ))    (.*)$/, A)) {
 +                      if (! _rdreg_i0(D)) {
 +                              ++_rdregfld
 +                              D[_rdregp0 A[1] "." _RDREGTYPE[A[2]]] = A[9]
 +                              return 
 +                      } else {
 +                              break
 +                      }
 +              } else {
 +                      if (_rdregp0 ~ /^HK/) {
 +                              ++_rdregkey
 +                              return D[_rdregp0 = _rdregp0 "\\"]
                        }
 -                      _fatal("out of UID")
                }
 -              return (_UIDCNTH[p] (_UIDCNTL[p] = _tptr))
        }
 +      return 1
 +}
 +
 
+#_____________________________________________________________________________________________________
 
+######################################################################################################
 +
 +
 +
  
 -      function _handle8494(t)
 -      {
 -              return gensub(/(.)/, ".\\1", "G", t)
 -      }
  
 -      function _hexnum(n, l)
 -      {
 -              if (l + 0 < 1) {
 -                      l = 2
 -              }
 -              return sprintf("%." ((l + 0 < 1 ? 2 : l)) "X", n)
 -      }
  
 -      function _igetperf(t, s, o)
 -      {
 -              if (t == 0 && t == "" && s == 0 && s == "" && o == 0 && o == 
"") {
 -                      if (_getperf_fn !~ /not$/ && _constatstr == 
_getperf_stat) {
 -                              _constat(_getperf_statstr)
 -                      }
 -                      _getperf_fn = "_nop"
 -                      return ("[TIME=" (_getperf_last - _getperf_start) " 
sec(" _getperf_opsec " ops/sec)]")
 -              }
 -              _conl("initiate _getperf")
 -              _getperf_opstart = _getperf_opcurr = o + 0
 -              _getperf_opsec = _getperf_opsecp = _getperf_stat = 
_getperf_statstr = ""
 -              _getperf_end = t + (_getperf_start = _getperf_last = 
_getsecondsync())
 -              _getperf_fn = ((t + 0 > 0 ? "_getperf_" : "_getperf_noe")) ((s 
? "" : "not"))
 -              return _getperf_start
 -      }
 -
 -      function _import_data(t, p, p2, a)
 -      {
 -              if (match(t, /^_DATA: /)) {
 -                      _tDATA[a = _wLCHLD(p, _N())][""]
 -                      delete _tDATA[a][""]
 -                      _Zimparr(_tDATA[a], substr(t, 8))
 -                      _conl("DATA: `" _tDATA[a]["ID"] "':`" _tDATA[a]["DATA"] 
"'")
 -                      return ""
 -              }
 -              return t
 -      }
  
 -      function _info(t, d, A)
 -      {
 -              if (_ERRLOG_IF) {
 -                      A["TYPE"] = "INFO"
 -                      A["TEXT"] = t
 -                      _log(A, d)
 -              }
 -      }
  
 -      function _ini(p, cs, dptr, pfx, sfx, hstr, lstr)
 -      {
 -              return _inituid(p, cs, dptr, pfx, sfx, hstr, lstr, A)
 -      }
  
 -      function _initfilever()
 -      {
 -              _fileverpath = "\\\\CPU\\eGAWK\\LIB\\_filever\\_filever.exe"
 -      }
  
 -      function _initrdreg()
 -      {
 -              _RDREGTYPE["SZ"] = "STR"
 -              _RDREGTYPE["DWORD"] = "W32"
 -              _RDREGTYPE["QWORD"] = "W64"
 -              _RDREGTYPE["BINARY"] = "BIN"
 -              _RDREGTYPE["EXPAND_SZ"] = "XSZ"
 -              _RDREGTYPE["MULTI_SZ"] = "MSZ"
 -              _RDrdregfld = _rdregkey = 0
 -      }
  
 -      function _initregpath0()
 -      {
 -              _REGPATH0REGDIR[""] = "HKEY_LOCAL_MACHINE"
 -              _REGPATH0REGDIR["HKLM"] = "HKEY_LOCAL_MACHINE"
 -              _REGPATH0REGDIR["HKEY_LOCAL_MACHINE"] = "HKEY_LOCAL_MACHINE"
 -              _REGPATH0REGDIR["HKCR"] = "HKEY_CLASSES_ROOT"
 -              _REGPATH0REGDIR["HKEY_CLASSES_ROOT"] = "HKEY_CLASSES_ROOT"
 -              _REGPATH0REGDIR["HKCU"] = "HKEY_CURRENT_USER"
 -              _REGPATH0REGDIR["HKEY_CURRENT_USER"] = "HKEY_CURRENT_USER"
 -              _REGPATH0REGDIR["HKU"] = "HKEY_USERS"
 -              _REGPATH0REGDIR["HKEY_USERS"] = "HKEY_USERS"
 -              _REGPATH0REGDIR["HKCC"] = "HKEY_CURRENT_CONFIG"
 -              _REGPATH0REGDIR["HKEY_CURRENT_CONFIG"] = "HKEY_CURRENT_CONFIG"
 -              _REGPATH0REGDIR["HKPD"] = "HKEY_PERFORMANCE_DATA"
 -              _REGPATH0REGDIR["HKEY_PERFORMANCE_DATA"] = 
"HKEY_PERFORMANCE_DATA"
 -      }
  
 -      function _initshare()
 -      {
 -              _sharextool = "\\\\CPU\\eGAWK\\LIB\\_share\\_share.exe"
 -      }
  
 -      function _initspecialuid()
 -      {
 -              _NOINDEX = _getuid()
 -              _LEN = _getuid()
 -              _PTR = _getuid()
 -              _NAME = _getuid()
 -              _TYPE = _getuid()
 -              _FORMAT = _getuid()
 -      }
  
 -      function _initsys()
 -      {
 -      }
  
 -      function _inituid(p, cs, dptr, pfx, sfx, hstr, lstr, A)
 -      {
 -              if (cs == 0 && cs == "") {
 -                      cs = p
 -                      p = _getuid()
 -              }
 -              _conl()
 -              _conl()
 -              _conl(cs)
 -              if (match(cs, /^(([^:]*):)?(([^'\xB4]*\xB4.)*[^'\xB4]*)[']/, 
A)) {
 -                      pfx = A[3]
 -                      dptr = A[2]
 -              }
 -              if (match(cs = substr(cs, 1 + RLENGTH), 
/'(([^'\xB4]*\xB4.)*[^'\xB4]*)$/, A)) {
 -                      sfx = A[1]
 -                      cs = substr(cs, 1, RSTART - 1)
 -              }
 -              if (match(cs, /^(([`\^])(.*))/, A)) {
 -                      if (A[2] == "`") {
 -                              hstr = A[3] "~"
 -                              lstr = ""
 -                      } else {
 -                              lstr = A[3] "+"
 -                              hstr = ""
 -                      }
 -              } else {
 -                      if (match(cs, 
/^(([^'\xB4\|]*\xB4.)*[^'\xB4\|]*)(\|(.*))?/, A)) {
 -                              hstr = A[1]
 -                              lstr = A[4]
 -                      } else {
 -                              ERRNO = "_inituid(): bad parameters"
 -                              return 
 -                      }
 -              }
 -              _conl(dptr ":" pfx "'" hstr "|" lstr "'" sfx)
 -              return _cfguid(p, dptr, pfx, sfx, hstr, lstr)
 -      }
 -
 -      function _inituidefault(h, l, H, L)
 -      {
 -              _classys = ""
 -              delete _UIDOBLV[_UIDOBLV[_UIDOBL[_classys] = _classys][""] = 
_classys][""]
 -              _UIDPFX[_classys]
 -              _UIDSFX[_classys]
 -              _UIDCNT[_classys] = _UIDCHR[_classys] = _CLASSPTR[_classys] = 
_classys
 -              h = "AB"
 -              l = h "01"
 -              _splitstr(H, h)
 -              _splitstr(L, l)
 -              delete _UIDCHRH[_UIDCHRH[_classys][""] = _classys][""]
 -              delete _UIDCHRL[_UIDCHRL[_classys][""] = _classys][""]
 -              _UIDCNTH[_classys]
 -              _cfguidh(_classys, H, L)
 -              _UIDCNTL[_classys] = _cfguidl(_classys, L, L)
 -              _CLASSFN[_classys]["del"] = "_tobjDEL"
 -              _CLASSFN[_classys]["new"] = "_tobjNEW"
 -              _drawuid(_classys)
 -              _initspecialuid()
 -      }
 -
 -      function _ins(S, sf, D, df)
 -      {
 -              if (sf in S) {
 -                      if (isarray(S[sf])) {
 -                              if (df in D) {
 -                                      if (isarray(D[df])) {
 -                                              return _extarr(D[df], S[sf])
 -                                      }
 -                                      delete D[df]
 -                              }
 -                              D[df][""]
 -                              delete D[df][""]
 -                              return _extarr(D[df], S[sf])
 -                      } else {
 -                              if (isarray(D[df])) {
 -                                      delete D[df]
 -                              }
 -                              D[df] = S[sf] D[df]
 -                      }
 -              }
 -      }
  
 -      function _insf(A, f)
 -      {
 -              A["F"][""] = A["B"][A["F"][f] = A["F"][""]] = f
 -      }
  
 -      function _insframe(A, f)
 -      {
 -              A[f] = A[""]
 -              A[""] = f
 -      }
  
 -      function _inspass(A, f)
 -      {
 -              A[f] = A[""]
 -              A[""] = f
 -      }
  
 -      function _isptr(p)
 -      {
 -              if (isarray(p)) {
 -                      is = _NOP
 -                      it = "A"
 -                      return 0
 -              }
 -              is = p
 -              if (p == 0 && p == "") {
 -                      it = "-"
 -                      return 0
 -              }
 -              if (p in _CLASSPTR) {
 -                      return (it = "P")
 -              }
 -              it = "S"
 -              return 0
 -      }
  
 -      function _istr(p)
 -      {
 -              if (isarray(p)) {
 -                      is = _NOP
 -                      it = "A"
 -                      return 0
 -              }
 -              is = p
 -              if (p == 0 && p == "") {
 -                      it = "-"
 -                      return 0
 -              }
 -              return (it = (p == "" ? "s" : "S"))
 -      }
  
 -      function _lengthsort(i1, v1, i2, v2)
 -      {
 -              return ((length(i1) < length(i2) ? -1 : (length(i1) > 
length(i2) ? 1 : (i1 < i2 ? -1 : 1))))
 -      }
  
 -      function _lib_APPLY()
 -      {
 -              return _ffaccr(_LIBAPI, "_lib_APPLY")
 -      }
  
 -      function _lib_BEGIN(A)
 -      {
 -              return _ffaccr(_LIBAPI, "_lib_BEGIN", "", A)
 -      }
  
 -      function _lib_CMDLN(t)
 -      {
 -              return _pass(_LIBAPI["F"], "_lib_CMDLN", t)
 -      }
  
 -      function _lib_END(A)
 -      {
 -              return _ffaccr(_LIBAPI, "_lib_END", "", A)
 -      }
  
 -      function _lib_HELP()
 -      {
 -              return _fbaccr(_LIBAPI, "_lib_HELP")
 -      }
  
 -      function _lib_NAMEVER()
 -      {
 -              return _fbaccr(_LIBAPI, "_lib_NAMEVER")
 -      }
  
 -      function _ln(t)
 -      {
 -              return ((t ~ /\x0A$/ ? t : t _CHR["EOL"]))
 -      }
  
 -      function _log(A, p, a, B)
 -      {
 -              if (isarray(A)) {
 -                      A["TIME"] = _getime()
 -                      A["DATE"] = _getdate()
 -                      if (p) {
 -                              _tLOG[p = _wLCHLD(p, _N())][""]
 -                              delete _tLOG[p][""]
 -                              _movarr(_tLOG[p], A)
 -                              return p
 -                      }
 -                      _expout("_ERRLOG: " _Zexparr(A) "\n")
 -              } else {
 -                      B["TEXT"] = A
 -                      B["TYPE"] = ""
 -                      return _log(B, p)
 -              }
 -      }
  
 -      function _lspctab(t, ts, l, l1, l2, A)
 -      {
 -              while (match(t, /^(\t*)( *)((\t*)(.*))$/, A)) {
 -                      if (A[1, "length"] >= l) {
 -                              return substr(t, l + 1)
 -                      }
 -                      if (A[2]) {
 -                              if ((l1 = int(A[2, "length"] / ts)) >= (l2 = l 
- A[1, "length"])) {
 -                                      return (substr(A[2], l2 * ts + 1) A[3])
 -                              }
 -                              if (! A[4]) {
 -                                      return A[5]
 -                              }
 -                              t = A[1] _getchrln("\t", l1) A[3]
 -                      } else {
 -                              return t
 -                      }
 -              }
 -      }
  
 -      function _mac_init()
 -      {
 -              _MACPFX["\204"] = "_macpfx84"
 -              _MACPFX[""] = "_mpupfxsubret"
 -              _MACPFX84SFX["\204"] = "_macpfx84"
 -              _MACPFX84SFX["\224"] = "_macsfx94"
 -              _MACPFX84SFX[""] = "_mpusfxsubret"
 -              _VLDMAXSTRING = 1000000
 -      }
  
 -      function _macpfx84(F, D, C, p1, p2, p3)
 -      {
 -              return _mpusub(_MACPFX84SFX, D, C, D[_mpuptr++], p1, p2, p3)
 -      }
  
 -      function _macsfx94(F, D, C, p1, p2, p3)
 -      {
 -              return _mpuretsub(D, _handle8494(_mpuacc))
 -      }
  
 -      function _movarr(D, S)
 -      {
 -              delete D
 -              D[""]
 -              delete D[""]
 -              _addarr(D, S)
 -      }
  
 -      function _mpu(t, F, p1, p2, p3, D, C)
 -      {
 -              if (patsplit(t, C, /[\x84\x93\x94]/, D) > 0) {
 -                      _conline("CODE")
 -                      _conl()
 -                      _conl(_dumparr(C))
 -                      _conline("DATA")
 -                      _conl()
 -                      _conl(_dumparr(D))
 -                      _mpuptr = 0
 -                      _mpucc0 = ""
 -                      _mpusub(F, D, C, D[_mpuptr++], p1, p2, p3)
 -                      return _mpuacc
 -              }
 -              return t
 -      }
  
 -      function _mpudefaulthnd(F, D, C, p1, p2, p3)
 -      {
 -              _mpuretsub(D, _mpucc0)
 -      }
  
 -      function _mpupfxsubret(F, D, C, p1, p2, p3)
 -      {
 -              return 1
 -      }
  
 -      function _mpuretsub(D, t)
 -      {
 -              _mpuacc = D[_mpuptr++]
 -              _accmpu(D, t)
 -              return 1
 -      }
  
 -      function _mpusfxsubret(F, D, C, p1, p2, p3)
 -      {
 -              return -1
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +function _rdsafe(A, i, d)
 +{
 +      if (i in A) {
 +              return A[i]
        }
 +      return d
 +}
  
 -      function _mpusub(F, D, C, d, p1, p2, p3, q)
 -      {
 -              q = D[_ARRLEN]
 -              if (_VLDMAXSTRING < length(d)) {
 -                      D[--D[_ARRLEN]] = d
 -                      _mpuacc = ""
 -              } else {
 -                      _mpuacc = d
 -              }
 -              d = _mpucc0
 -              _conl("_mpusub enter: in `" _mpuacc "' / _mpuptr=" _mpuptr "'")
 -              do {
 -                      if ((_mpucc0 = C[_mpuptr]) in F) {
 -                              if (isarray(F[_mpucc0])) {
 -                                      _mpufn0 = F[_mpucc0]
 +#_______________________________________________________________________
 +function _reg_check(p)
 +{
 +      _tframe("_reg_check_i0", p, p)
 +}
 +
 +#_______________________________________________
 +function _reg_check_i0(p, pp, p1, p2)
 +{
 +      if (_[p]["TYPE"] == "defreg") {
 +              if (_[p]["REGPATH"] in _REG) {
 +                      if ("VALUE" in _[p]) {
 +                              if (_[p]["VALUE"] == _REG[_[p]["REGPATH"]]) {
 +                                      _creport(p, substr("OK:    REGENTRY 
MATCH(==" _[p]["VALUE"] "): " _[p]["REGPATH"], 1, 126))
 +                              } else {
 +                                      _dllerr(p, substr("REGENTRY NOT 
MATCH(!=" _[p]["VALUE"] "): " _[p]["REGPATH"], 1, 126))
                                }
 -                              _conl("FN: `" _mpucc0 "' > CALL: `" _mpufn0 "' 
: _mpuacc=" _mpuacc "'")
                        } else {
 -                              _mpufn0 = "_mpudefaulthnd"
 +                              if (_VAR[_[p]["REGPATH"]] == 
_REG[_[p]["REGPATH"]]) {
 +                                      _creport(p, substr("OK:    REGPATH 
MATCH(==" _VAR[_[p]["REGPATH"]] "): " _[p]["REGPATH"], 1, 126))
 +                              } else {
 +                                      _dllerr(p, substr("REGPATH NOT 
MATCH(!=" _VAR[_[p]["REGPATH"]] "): " _[p]["REGPATH"], 1, 126))
 +                              }
                        }
 -              } while (! _accmpu(D, _mpuacc, @_mpufn0(F, D, C, p1, p2, p3)))
 -              if (_mpufn0 == -1) {
 -                      _conl("WARNING: unclosed expression: `" d _mpuacc "'")
 -                      _mpuacc = d _mpuacc
 +              } else {
 +                      _dllerr(p, substr("REGPATH NOT FOUND: " 
_[p]["REGPATH"], 1, 126))
                }
 -              _retarrm(D, q, "", (_mpufn0 == -1 ? _th0(d, 
_mpusubwrng("WARNING: unclosed expression", d _mpuacc)) : ""))
 -              _conl("mpusub exit: _mpuacc: `" _mpuacc "'")
        }
 +}
  
 -      function _n(F, v, p)
 -      {
 -              for (p in _UIDSDEL) {
 -                      delete _UIDSDEL[p]
 -                      delete _ptr[p]
 -                      delete _tPREV[p]
 -                      delete _tPARENT[p]
 -                      delete _tNEXT[p]
 -                      delete _tFCHLD[p]
 -                      delete _tQCHLD[p]
 -                      delete _tLCHLD[p]
 -                      delete _TMP0[p]
 -                      delete _TMP1[p]
 -                      delete _tLINK[p]
 -                      delete _tCLASS[p]
 -                      return _nN_i0(p, F, v)
 -              }
 -              for (p in _UIDS) {
 -                      delete _UIDS[p]
 -                      return _nN_i0(p, F, v)
 -              }
 -              return _nN_i0(_tgenuid(), F, v)
 -      }
 -
 -      function _nN_i0(p, F, v)
 -      {
 -              _[p][""]
 -              delete _[p][""]
 -              _ptr[p][""]
 -              delete _ptr[p][""]
 -              _TMP0[p][_ARRLEN] = _TMP1[p][_ARRLEN] = 0
 -              if (isarray(F)) {
 -                      delete F[p]
 -                      if (isarray(v)) {
 -                              F[p][""]
 -                              delete F[p][""]
 -                              _copyarr(F[p], v)
 -                      } else {
 -                              if (! (v == 0 && v == "")) {
 -                                      F[p] = v
 -                              }
 +#_____________________________________________________
 +function _registryinit()
 +{
 +      _registrytmpfile = _getmpfile()
 +}
 +
 +# _rdregfld           : gvar  - number of readed registry fields by _rdreg()
 +# _rdregkey           : gvar  - number of readed registry keys by _rdreg()
 +#_____________________________________________________________________________
 +function _regpath0(D, i, s, q, S)
 +{
 +      if (i = _patharr0(S, i)) {
 +              if ("name" in S) {
 +                      D["name"] = S["name"]
 +              }
 +              if ("ext" in S) {
 +                      D["ext"] = S["ext"]
 +              }
 +              s = ((toupper(s = (i in S ? S[i] : "")) in _REGPATH0REGDIR ? 
D[++q] = _REGPATH0REGDIR[toupper(s)] : (D[++q] = _REGPATH0REGDIR[""]) "\\" 
(D[++q] = s))) "\\"
 +              while (++i in S) {
 +                      s = s (D[++q] = S[i]) "\\"
 +              }
 +              if (s != "") {
 +                      D[0] = s
 +              }
 +              IGNORECASE = 1
 +              D["hostdir"] = "\\\\" (D["host"] = ("host" in S && ("" == (i = 
S["host"]) || "." == i || "?" == i || "localhost" == i) ? 
ENVIRON["COMPUTERNAME"] : i)) "\\" s
 +              IGNORECASE = 0
 +      }
 +}
 +
 
+#_________________________________________________________________________________________
 +function _report(p)
 +{
 +      _report_t0 = _reportparnt = ""
 +      _report_i0(p)
 +      _tframe("_report_i0", p)
 +      return _report_t0
 +}
 +
 +function _report_i0(p, p0, p1, p2)
 +{
 +      if (p in _tPARENT) {
 +              if (_reportparnt != (_reportparnt = _tPARENT[p])) {
 +                      _report_t0 = _report_t0 _ln() _ln((z = "_ " 
_[_tPARENT[p]]["NAME"] " ") _getchrln("_", _CON_WIDTH - length(z) - 2)) 
_ln(_getchrln("#", _CON_WIDTH - 2)) _ln()
 +              }
 +      }
 +      if ("ERROR" in _[p]) {
 +              _report_t0 = _report_t0 _reporterr(p, _[p]["ERROR"])
 +      }
 +      if ("REPORT" in _[p]) {
 +              _report_t0 = _report_t0 _ln(_[p]["REPORT"])
 +      }
 +}
 +
 
+#___________________________________________________________________________________
 +function _reporterr(p, t3, pp, t, t2)
 +{
 +      t = ""
 +      pp = p
 +      do {
 +              ("NAME" in _[pp] ? t = _[pp]["NAME"] ": " t : "")
 +      } while (pp = _rPARENT(pp))
 +      if (match(t3, /\x00/)) {
 +              return (substr(t3, 1, RSTART - 1) t substr(t3, RSTART + 1))
 +      }
 +      return (t t3)
 +}
 +
 
+#___________________________________________________________________________________
 
+####################################################################################
 +
 +
 +
 +
 +#_______________________________________________________________________
 +# _CHR array
 +#
 +#     _CHR[ASC-code decimal number]=="char"
 +#
 +#             Contains 256 elements. The index is the decimal number from 
0-255.
 +#             The value is the single character with ASC-code equivalent to 
index number:
 +#
 +#                     _CHR[97]                =="a"                   - 
character with ASC-code 97 is `a'
 +#
 +#             This array is useful if you want to get character using it's 
ASC-code
 +#_________________________________________________________________
 +# _ASC array
 +#
 +#     _ASC[char]==number: ASC-code of char
 +#
 +#             Contains 256 elements. The index is the any single character 
with ASC-code \x00-\xFF.
 +#             The value is the number equivalent of character's ASC-code:
 +#
 +#                     _ASC["A"]               ==65                    - 
ASC-code of character `A' is 65
 +#
 +#             This array is useful if you want to get ASC-code of the 
character.
 +#_________________________________________________________________
 +# _QASC array
 +#
 +#     _QASC[char]=="string: octal ASC-code of char in 3-digit octal format"
 +#
 +#             Contains 256 elements. The index is the any single charcter 
with ASC-code \x00-\xFF.
 +#             The value is the octal number equivalent of character's 
ASC-code in fixed-length - 3-digit - string:
 +#
 +#                     _QASC["!"]              =="041"         - ASC-code of 
character `!' is 33(decimal) == 41(in octal)
 +#                     _QASC["\x0D"]   =="015"
 +#
 +#             This array is useful when some type of string escape conversion 
is performed. It allows quickly get
 +#             replace string for the characters that can be specified only by 
character code in result string:
 +#
 +#                     "\x0D"  ->      "\\015"
 +#_______________________________________________________________________
 +
 +
 +
 +
 +
 +
 +
 
+####################################################################################
 +# PUBLIC:
 +#_____________________________________________________________________________
 +#     fn      _getchrln(ptt,len)
 +#_____________________________________________________________________________
 +#     fn      _tabtospc(src,tabstep,xcoord)
 
+####################################################################################
 +
 +#_____________________________________________________________________________
 +function _retarr(A, i, p, a, q)
 +{
 +      if (isarray(A)) {
 +              i = (i == "" ? 0 : i + 0)
 +              q = A[_ARRLEN] + 0
 +              if (i < q) {
 +                      return (p A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
_retarr_i0(A, q, i, a))
 +              }
 +      }
 +}
 +
 +function _retarr_i0(A, q, i, a)
 +{
 +      if (i < q) {
 +              return (A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] _retarr_i0(A, q, 
i, a))
 +      }
 +      while (q < i) {
 +              delete A[++q]
 +      }
 +      return a
 +}
 +
 +#_________________________________________________________________
 +function _retarrd(A, v, i)
 +{
 +      if (1 in A) {
 +              return (A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10] 
A[11] A[12] A[13] A[14] A[15] A[16] (((i = 17) in A ? _retarrd_i0(A, i) v : v)))
 +      }
 +      delete A
 +      return v
 +}
 +
 +#_____________________________________________________
 +function _retarrd_i0(A, i)
 +{
 +      if (i in A) {
 +              return (A[i++] A[i++] A[i++] A[i++] A[i++] A[i++] A[i++] A[i++] 
A[i++] A[i++] A[i++] A[i++] A[i++] A[i++] A[i++] A[i++] ((i in A ? 
_retarrd_i0(A, i) : "")))
 +      }
 +      delete A
 +}
 +
 +#_______________________________________________________________________
 +########################################################################
 +#EXPERIMENTAL
 +
 +function _rexpfn(R, t, p)
 +{
 +      _REXPFN[""] = ""
 +      while (t) {
 +              t = _rxpfn(R, t, p)
 +      }
 +      return _REXPFN[""]
 +}
 +
 +function _rexpfnend(t)
 +{
 +      _REXPFN[""] = t
 +}
 +
 +#_____________________________________________________________________________
 +function _rexpstr(r, i, c, A)
 +{
 +      c = split(r, A, "")
 +      r = ""
 +      for (i = 1; i <= c; i++) {
 +              r = r _REXPSTR[A[i]]
 +      }
 +      return r
 +}
 +
 +#_____________________________________________________________________________
 +function _rexpstr_i0(t, A, p0)
 +{
 +      return (_REXPSTR[t] = "\\" t)
 +}
 +
 +#___________________________________________________________
 +function _rmtsharerr(h, t)
 +{
 +      gsub(/[\x0D\x0A]+/, "", t)
 +      if (t ~ /^The command failed: 53/) {
 +              ERRNO = "host not found: \\\\" h
 +      } else {
 +              ERRNO = t ": \\\\" h
 +      }
 +}
 +
 +function _rpp(q, D, S)
 +{
 +      _conl()
 +      _conline(q)
 +      _conl()
 +      _regpath0(D, q)
 +      #_conl(_dumparr(D))
 +      
 +      _conl(_ln("DEST:") _dumparr(D))
 +      _conl()
 +      return q
 +}
 +
 
+#_________________________________________________________________________________________
 +function _rrdreg(DD, p, k, t, v, c, i, q, tT, A, B, C, D)
 +{
 +      if (! _registrytmpfile) {
 +              _registryinit()
 +      }
 +      _cmd("regedit /E \"" _registrytmpfile "\" \"" p "\" 2>&1")
 +      q = patsplit(gensub(/[\x00\xFF\xFE]+/, "", "G", 
_rdfile(_registrytmpfile)), A, /\x0D?\x0A\[[^\]]+\]\x0D?\x0A/, B)
 +      for (i = 1; i <= q; i++) {
 +              p = gensub(/(^[ \t\x0D\x0A]*\[)|((\\)\\+)|(\][ \t\x0D\x0A]*$)/, 
"\\3", "G", A[i])
 +              DD[p "\\"]
 +              delete C[split(B[i], C, /[\x0D\x0A]+/)]
 +              for (c = 1; c in C; c++) {
 +                      tt = tt C[c]
 +                      if (gsub(/\\$/, "", tt)) {
 +                              continue
                        }
 -              } else {
 -                      if (! (F == 0 && F == "")) {
 -                              if (isarray(v)) {
 -                                      _[p][F][""]
 -                                      delete _[p][F][""]
 -                                      _copyarr(_[p][F], v)
 +                      if (tt == "") {
 +                              continue
 +                      }
 +                      if (match(_th0(tt, tt = ""), 
/((^"(([^\\"]|\\.)*)")|(@))=(("(([^\\"]|\\.)*)")|(dword:([[:xdigit:]]{8}))|(hex(\(([27b])\))?:(.*)))$/,
 D)) {
 +                              if (D[7]) {
 +                                      t = "STR"
 +                                      v = _unstr(D[8])
                                } else {
 -                                      if (v == 0 && v == "") {
 -                                              _mpu(F, p)
 +                                      if (D[10]) {
 +                                              t = "W32"
 +                                              v = D[11]
                                        } else {
 -                                              _[p][F] = v
 +                                              v = D[15]
 +                                              if (D[13]) {
 +                                                      switch (D[14]) {
 +                                                      case "2":
 +                                                              t = "XSZ"
 +                                                              break
 +                                                      case "7":
 +                                                              t = "MSZ"
 +                                                              break
 +                                                      default:
 +                                                              t = "W64"
 +                                                      }
 +                                              } else {
 +                                                      t = "BIN"
 +                                              }
                                        }
                                }
 +                              DD[gensub(/(\\)\\+/, "\\1", "G", p "\\" 
_unstr(D[3] ((D[5] ? "(Default)" : ""))) "." t)] = v
 +                      } else {
 +                              _fatal("regedit: unknown output format(" c "): 
`" C[c] "'")
                        }
                }
 -              return p
        }
 +}
  
 -      function _newclrdir(f)
 -      {
 -              if ((f = _filerd(f)) == "") {
 -                      return 
 +#_________________________________________________________________
 +function _rsqgetptr(g, p, A)
 +{
 +      if (p in _tLINK) {
 +              _SQSTACK[g][++_SQSTACK[g][0]] = p
 +              _SQSTACK[g][++_SQSTACK[g][0]] = _SQTOPTR[g]
 +              while ((p = _tLINK[p]) in _tLINK) {
 +                      _con(".")
                }
 -              _cmd("rd " f " /S /Q 2>NUL")
 -              _cmd("md " f " 2>NUL")
 -              _WFILEROOTDIR[f]
 -              return f
 +              _SQTOPTR[g] = p
        }
 +      if (p in _tFCHLD) {
 +              return _rsqgetptr(g, _tFCHLD[p])
 +      }
 +      return p
 +}
  
 -      function _newdir(f)
 -      {
 -              if ((f = _filerd(f)) == "") {
 -                      return 
 +#___________________________________________________________
 +function _rsqnext_i0(g, p)
 +{
 +      if (p == _SQTOPTR[g]) {
 +              if (_SQSTACK[g][0] > 0) {
 +                      _SQTOPTR[g] = _SQSTACK[g][_SQSTACK[g][0]--]
 +                      return _rsqnext_i0(g, _SQSTACK[g][_SQSTACK[g][0]--])
                }
 -              if (! (f in _WFILEROOTDIR)) {
 -                      _cmd("md " f " 2>NUL")
 -                      _WFILEROOTDIR[f]
 +              return 
 +      }
 +      if (p in _tNEXT) {
 +              return _rsqgetptr(g, _tNEXT[p])
 +      }
 +      return _rsqnext_i0(g, _tPARENT[p])
 +}
 +
 +function _rtn(v, A)
 +{
 +      _conl()
 +      _conline(_val(v) " : " _val(A))
 +      _conl()
 +      _rtn2(v, A)
 +      _conl()
 +}
 +
 +function _rtn2(v, A, r, t)
 +{
 +      r = (isarray(A) ? _typa(v, A) : _typ(v))
 +      if ("`" > _t0 && _t0) {
 +              _conl("ggggg")
 +      }
 +      t = ((r ? "TRUE" : "FALSE")) " / " ((r > 0 ? r ">0" : r "!>0")) " / " 
((r + 0 > 0 ? r "+0>0" : r "+0!>0")) " / " ((r + 0 != r ? r "+0!=" r : r "+0==" 
r)) " / " ((r && "`" > r ? "'`'>" r " && " r : "!('`'>" r " && " r ")"))
 +      _conl("`" r "' : " t)
 +      return r
 +}
 +
 +function _rxpfn(R, t, p, i, f, A)
 +{
 +      for (i in R) {
 +              if (match(t, i, A)) {
 +                      f = R[i]
 +                      if (t != (t = @f(A, substr(t, RLENGTH + 1), p))) {
 +                              return t
 +                      }
                }
 -              return f
        }
 +      return _rexpfnend(t)
 +}
  
 -      function _nop(p0, p1, p2, p3)
 -      {
 +#_____________________________________________________________________________
 +function _sHARE(c, t, P, a, A)
 +{
 +      switch (c) {
 +      case "_lib_CMDLN":
 +              #___________________________________________________________
 +              return t
 +              #_____________________________________________________
 +      case "_lib_APPLY":
 +              return 
 +              #_____________________________________________________
 +      case "_lib_HELP":
 +              return 
 +              #_____________________________________________________
 +      case "_lib_NAMEVER":
 +              return _ln("_share 1.000")
 +              #_____________________________________________________
 +      case "_lib_BEGIN":
 +              return 
 +              #_____________________________________________________
 +      case "_lib_END":
 +              return 
        }
 +}
  
 -      function _nretarr(A, i, v, r, q)
 -      {
 -              if ((i = (i == "" ? 1 : i + 0)) <= (q = A[_ARRLEN])) {
 -                      if (i <= (r = q - 16)) {
 -                              _ARRSTR = A[i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i]
 -                              while (i < r) {
 -                                      _ARRSTR = _ARRSTR A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i]
 -                              }
 -                              _ARRSTR = _ARRSTR A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] v _retarr_i0(A, q, i)
 -                              return 
 -                      }
 -                      _ARRSTR = A[i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] v 
_retarr_i0(A, q, i)
 -                      return 
 -              }
 -              _ARRSTR = v
 +#_____________________________________________________________________________
 +function _sYS(c, t, P, a, A)
 +{
 +      switch (c) {
 +      case "_lib_CMDLN":
 +              #___________________________________________________________
 +              return t
 +              #_____________________________________________________
 +      case "_lib_APPLY":
 +              return 
 +              #_____________________________________________________
 +      case "_lib_HELP":
 +              return 
 +              #_____________________________________________________
 +      case "_lib_NAMEVER":
 +              return 
 +              #_____________________________________________________
 +      case "_lib_BEGIN":
 +              return 
 +              #_____________________________________________________
 +      case "_lib_END":
                return 
        }
 +}
  
 -      function _nretarrd(A, i, v, r, q)
 -      {
 -              if ((i = (i == "" ? 1 : i + 0)) <= (q = A[_ARRLEN])) {
 -                      if (i <= (r = q - 16)) {
 -                              _ARRSTR = A[i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i]
 -                              while (i < r) {
 -                                      _ARRSTR = _ARRSTR A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i]
 -                              }
 -                              _ARRSTR = _ARRSTR A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] v _retarr_i0(A, q, i)
 -                      } else {
 -                              _ARRSTR = A[i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] v 
_retarr_i0(A, q, i)
 -                      }
 +#_______________________________________________________________________
 +function _serv_check(p)
 +{
 +      _tframe("_serv_check_i0", p, p)
 +}
 +
 +#_______________________________________________
 +function _serv_check_i0(p, p0, p1, p2, p3, i, q, c)
 +{
 +      if (_[p]["TYPE"] == "defsrv") {
 +              i = IGNORECASE
 +              IGNORECASE = 1
 +              if (match(_servoutput, roi = "\\012DISPLAY_NAME: " 
_torexp(_[p]["SERVNAME"]))) {
 +                      _creport(p, "OK:    SERVICE DETECTED: " 
substr(_[p]["SERVNAME"], 1, 112))
                } else {
 -                      _ARRSTR = v
 +                      _dllerr(p, "service " _[p]["SERVNAME"] " not detected")
                }
 -              delete A
 -              A[""]
 -              delete A[""]
        }
 +      IGNORECASE = i
 +}
  
 -      function _out(t, a, b)
 -      {
 -              a = BINMODE
 -              b = ORS
 -              BINMODE = "rw"
 -              ORS = ""
 -              print(t) > _SYS_STDOUT
 -              fflush(_SYS_STDOUT)
 -              BINMODE = a
 -              ORS = b
 -              return t
 +#_______________________________________________________________________
 +function _setarrsort(f, a)
 +{
 +      a = PROCINFO["sorted_in"]
 +      if (! f) {
 +              delete PROCINFO["sorted_in"]
 +      } else {
 +              PROCINFO["sorted_in"] = f
        }
 +      return a
 +}
  
 -      function _outnl(t)
 -      {
 -              return _out(t ((t ~ /\x0A$/ ? "" : _CHR["EOL"])))
 +#_______________________________________________________________________
 +function _setmpath(p, a)
 +{
 +      ERRNO = ""
 +      if (p && (a = _filerd(p))) {
 +              if (_FILEIO_TMPRD) {
 +                      _FILEIO_TMPATHS[_FILEIO_TMPRD]
 +              }
 +              #if ( _filexist(a) ) _del(a)
 +              #_cmd("rd " a " /S /Q 2>NUL"); _cmd("del " a " /Q 2>NUL")
 +              return (_FILEIO_TMPRD = a)
 +      } else {
 +              return _warning("`" p "': cannot set temporary folder" ((ERRNO 
? ": " ERRNO : "")))
        }
 +}
 +
 
+#_________________________________________________________________________________________
 
+##########################################################################################
 +
 +
 +
 +
  
 -      function _p1(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, 
p7, p8)
 -      {
 -              _qparamf0 = "_p" _QMAP[_qparamc1--]
 -              return @_qparamf0(s1, s2, s3, s4, s5, s6, s7, s8, s1, p1, p2, 
p3, p4, p5, p6, p7)
 -      }
  
 -      function _p2(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, 
p7, p8)
 -      {
 -              _qparamf0 = "_p" _QMAP[_qparamc1--]
 -              return @_qparamf0(s1, s2, s3, s4, s5, s6, s7, s8, s2, p1, p2, 
p3, p4, p5, p6, p7)
 -      }
  
 -      function _p3(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, 
p7, p8)
 -      {
 -              _qparamf0 = "_p" _QMAP[_qparamc1--]
 -              return @_qparamf0(s1, s2, s3, s4, s5, s6, s7, s8, s3, p1, p2, 
p3, p4, p5, p6, p7)
 -      }
  
 -      function _p4(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, 
p7, p8)
 -      {
 -              _qparamf0 = "_p" _QMAP[_qparamc1--]
 -              return @_qparamf0(s1, s2, s3, s4, s5, s6, s7, s8, s4, p1, p2, 
p3, p4, p5, p6, p7)
 -      }
  
 -      function _p5(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, 
p7, p8)
 -      {
 -              _qparamf0 = "_p" _QMAP[_qparamc1--]
 -              return @_qparamf0(s1, s2, s3, s4, s5, s6, s7, s8, s5, p1, p2, 
p3, p4, p5, p6, p7)
 -      }
  
 -      function _p6(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, 
p7, p8)
 -      {
 -              _qparamf0 = "_p" _QMAP[_qparamc1--]
 -              return @_qparamf0(s1, s2, s3, s4, s5, s6, s7, s8, s6, p1, p2, 
p3, p4, p5, p6, p7)
 -      }
  
 -      function _p7(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, 
p7, p8)
 -      {
 -              _qparamf0 = "_p" _QMAP[_qparamc1--]
 -              return @_qparamf0(s1, s2, s3, s4, s5, s6, s7, s8, s7, p1, p2, 
p3, p4, p5, p6, p7)
 -      }
  
 -      function _p8(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, 
p7, p8)
 -      {
 -              _qparamf0 = "_p" _QMAP[_qparamc1--]
 -              return @_qparamf0(s1, s2, s3, s4, s5, s6, s7, s8, s8, p1, p2, 
p3, p4, p5, p6, p7)
 -      }
  
 -      function _pass(A, f, t, p2, i, a)
 -      {
 -              a = _endpass_v0
 -              _endpass_v0 = ""
 -              i = 1
 -              while (t && i) {
 -                      i = ""
 -                      while ((i = A[i]) && t == (t = @i(f, t, p2))) {
 +
 +
 +
 +
 +
 +
 +
 +function _sharelist(D, h, q, c, l, A, B)
 +{
 +      delete D
 +      c = _sharextool " \\\\" ((h == "" ? h = ENVIRON["COMPUTERNAME"] : h)) " 
2>&1"
 +      if (match(c = _cmd(c), /\x0AShare[^\x0A]*Remark/)) {
 +              gsub(/(^[^-]*\x0D?\x0A-+\x0D?\x0A[ \t]*)|(\x0D?\x0AThe command 
completed successfully.*$)/, "", c)
 +              l = RLENGTH - 7
 +              split(c, A, /([ \t]*\x0D?\x0A)+[ \t]*/)
 +              for (c in A) {
 +                      if (match(A[c], /((([^ \t:]+[ \t]+)*[^ \t:]+)[ 
\t]+)([A-Za-z])[ \t]*:/, B) && ++q) {
 +                              D[B[2]] = (A[c] ~ /\.\.\.$/ ? _sharepath(h, 
B[2]) : gensub(/[ \t\\\/]*$/, "\\\\", 1, substr(A[c], 1 + B[1, "length"], l - 
B[1, "length"])))
                        }
                }
 -              if (i && _endpass_v0) {
 -                      A["!"] = 1
 -                      t = _endpass_v0
 -              } else {
 -                      delete A["!"]
 -              }
 -              _endpass_v0 = a
 -              return t
 +              return q
        }
 +      return _rmtsharerr(h, c)
 +}
  
 -      function _patharr0(D, q, i, h, A, B)
 -      {
 -              delete D
 -              if (0 < (q = split(gensub(/\\/, "/", "G", gensub(/ *([:$\\\/]) 
*/, "\\1", "G", gensub(/(^[ \t]+)|([ \t]+$)/, "", "G", q))), A, /\/+/, B))) {
 -                      if (2 > (h = length(B[1]))) {
 -                              D["type"] = "FILE"
 -                              A[1] = _patharr0_i0(A[1], D, "drive")
 -                              return _patharr0_i1(D, A, 1, q)
 -                      }
 -                      i = gensub(/ *([\.\?]) */, "\\1", "G", A[2])
 -                      IGNORECASE = 1
 -                      match(A[1], /^((https?)|(ftp)):$/)
 -                      IGNORECASE = 0
 -                      if (RLENGTH > 0) {
 -                              D["type"] = toupper(substr(A[1], 1, RLENGTH - 
1))
 -                              _patharr0_i0(i, D, "site", "port")
 +#_____________________________________________________________________________
 +function _sharepath(h, s, A)
 +{
 +      s = _sharextool " \\\\" ((h == "" ? h = ENVIRON["COMPUTERNAME"] : h)) 
"\\\"" s "\" 2>&1"
 +      if (match(s = _cmd(s), /\x0APath[ \t]+([^\x0D\x0A]+)/, _SHAREPATHA0)) {
 +              return gensub(/[ \t\\\/]*$/, "\\\\", 1, _SHAREPATHA0[1])
 +      }
 +      return _rmtsharerr(h, s)
 +}
 +
 +function _shortcut(D, S)
 +{
 +      if (isarray(D)) {
 +              if (isarray(S)) {
 +                      _addarrmask(D, S, _SHORTCUTWSTRUC)
 +              } else {
 +                      if (S == 0 && S == "") {
 +                              _addarrmask(D, _SHORTCUTDEFAULT, 
_SHORTCUTWSTRUC)
                        } else {
 -                              if (A[1] == "") {
 -                                      D["type"] = "UNC"
 -                                      if (h > 2) {
 -                                              D["host"]
 -                                              A[2] = _patharr0_i0(A[2], D, 
"drive", "", "FILE")
 -                                              return _patharr0_i1(D, A, 2, q)
 +                              if (_isnotfileptr(S)) {
 +                                      _addarrmask(D, _[S], _SHORTCUTWSTRUC)
 +                              } else {
 +                                      if (_rd_shortcut(D, S)) {
 +                                              return 
                                        }
 -                                      if (i == "") {
 -                                              return 1
 +                              }
 +                      }
 +              }
 +      } else {
 +              if (D == 0 && D == "") {
 +                      return _NOP
 +              } else {
 +                      if (_isnotfileptr(D)) {
 +                              if (isarray(S)) {
 +                                      _addarrmask(_[D], S, _SHORTCUTWSTRUC)
 +                              } else {
 +                                      if (S == 0 && S == "") {
 +                                              _addarrmask(_[D], 
_SHORTCUTDEFAULT, _SHORTCUTWSTRUC)
 +                                      } else {
 +                                              if (_isnotfileptr(S)) {
 +                                                      _addarrmask(_[D], _[S], 
_SHORTCUTWSTRUC)
 +                                              } else {
 +                                                      if (_rd_shortcut(_[D], 
S)) {
 +                                                              return 
 +                                                      }
 +                                              }
                                        }
 -                                      D["host"] = i
 -                                      A[3] = _patharr0_i0(A[3], D, "drive", 
"", "FILE")
 +                              }
 +                      } else {
 +                              if (isarray(S) && _wr_shortcut(D, S)) {
 +                                      return 
                                } else {
 -                                      D["type"] = "FILE"
 -                                      A[1] = _patharr0_i0(A[1], D, "drive")
 -                                      return _patharr0_i1(D, A, 1, q)
 +                                      if (S == 0 && S == "" && 
_wr_shortcut(D, _SHORTCUTDEFAULT)) {
 +                                              return 
 +                                      } else {
 +                                              if (_isnotfileptr(S) && 
_wr_shortcut(D, _[S])) {
 +                                                      return 
 +                                              } else {
 +                                                      if 
(_rd_shortcut(_SHRTCUTA1, S) || _wr_shortcut(D, _SHRTCUTA1)) {
 +                                                              return 
 +                                                      }
 +                                              }
 +                                      }
                                }
                        }
 -                      return _patharr0_i1(D, A, 3, q)
                }
        }
 -
 -      function _patharr0_i0(t, D, l, r, d, i)
 -      {
 -              if (i = index(t, ":")) {
 -                      if (d) {
 -                              D["type"] = d
 -                      }
 -                      if (i > 1) {
 -                              D[l] = substr(t, 1, i - 1)
 -                      }
 -                      if ((t = substr(t, i + 1)) && r) {
 -                              D[r] = t
 +      return 1
 +}
 +
 +#________________________________________________
 +function _shortcut_init(A, B, q)
 +{
 +      _SHORTCUTERR[2] = "file not found"
 +      _SHORTCUTERR[3] = "no such filepath"
 +      _SHORTCUTERR["The system cannot find the file specified."] = "no such 
filepath"
 +      _SHORTCUTERR[5] = "file is folder"
 +      _SHORTCUTERR["Access is denied."] = "file is folder"
 +      _SHORTCUTERR[123] = "filepath syntax error"
 +      _SHORTCUTERR["The filename, directory name, or volume label syntax is 
incorrect."] = "filepath syntax error"
 +      q = 
"target\t\t\t/T:\t\t\t\tTargetPath=\t\t\t\t\ttarget?\t\t\t;\t\t\t_target\t\t\t\t\t\t\tTargetPathExpanded=\t\t\t\t\t\t\t;\t\t\tparameters\t\t\t/P:\t\t\t\tArguments=\t\t\t\t\tparaneters?\t\t\t;\t\t\t_parameters\t\t\t\t\t\t\tArgumentsExpanded=\t\t\t\t\t\t\t;\t\t\tstartdir\t\t\t/W:\t\t\t\tWorkingDirectory=\t\t\t\tstartdir?\t\t\t;\t\t\t_startdir\t\t\t\t\t\t\tWorkingDirectoryExpanded=\t\t\t\t\t\t;\t\t\trunstyle\t\t\t/R:\t\t\t\tRunStyle=\t\t\t\t\t1\t\t\t\t;\t\t\ticon,index\t\t\t/I:\t\t\t\tIconLocation=\t\t\t\ticon,index?\t\t\t;\t\t\txicon,index\t\t\t\t\t\t\tIconLocationExpanded=\t\t\t\t\t\t\t;\t\t\tshortcut
 
key\t\t/H:\t\t\t\tHotKey=\t\t\t\t\t0\t\t\t\t;\t\t\tdescription\t\t\t/D:\t\t\t\tDescription=\t\t\t\t_env4:
 default shortcut\t"
 +      split(q, _SHRTCUTA0, /[ \t]*;[ \t]*/)
 +      for (q in _SHRTCUTA0) {
 +              if (match(_SHRTCUTA0[q], 
/^([^\t]+)\t+([^\t]+)(\t+([^\t]+)(\t+([^\t]+))?)?/, B)) {
 +                      if (B[3] == "") {
 +                              _SHORTCUTRSTRUC[B[2]] = B[1]
 +                      } else {
 +                              if (B[5] == "") {
 +                                      _SHORTCUTWSTRUC[_SHORTCUTRSTRUC[B[4]] = 
B[1]] = B[2]
 +                                      delete _SHORTCUTDEFAULT[B[1]]
 +                              } else {
 +                                      _SHORTCUTWSTRUC[_SHORTCUTRSTRUC[B[4]] = 
B[1]] = B[2]
 +                                      _SHORTCUTDEFAULT[B[1]] = B[6]
 +                              }
                        }
 -                      return t
                } else {
 -                      if (t && r) {
 -                              D[l] = t
 -                      }
 +                      _fatal("_shortcut.init: _shortcut_struc: syntax error: 
`" _SHRTCUTA0[q] "'")
                }
 -              return t
        }
 +      _SHRTCUTA1[""]
 +      delete _SHRTCUTA1[""]
 +      _shortcut_fpath = "\\\\localhost\\eGAWK\\LIB\\_shortcut\\_shortcut.exe"
 +}
  
 -      function _patharr0_i1(D, A, i, q, t, c)
 -      {
 -              if (D["type"] == "UNC") {
 -                      if (t = A[i++]) {
 -                              D[0] = (D["share"] = D[++c] = t) "/"
 -                      } else {
 -                              return 1
 +#_____________________________________________________
 +function _shortcut_nerr(t, s, A)
 +{
 +      if (match(t, /\x0ASystem error 
(-?[0-9]+)[^\x0D\x0A]*[\x0D\x0A]+([^\x0D\x0A]+)/, A)) {
 +              ERRNO = ((A[1] in _SHORTCUTERR ? _SHORTCUTERR[A[1]] : (A[2] in 
_SHORTCUTERR ? _SHORTCUTERR[A[2]] : tolower(gensub(/^(The 
)?(((.*)\.$)|(.*[^\.]$))/, "\\4\\5", "G", A[2])) "(" A[1] ")"))) ((s ? ": `" s 
"'" : ""))
 +      } else {
 +              return 1
 +      }
 +}
 +
 +function _split_regpath()
 +{
 +      _rpp(" / /  / /   ")
 +      _rpp(" / /  / / huj  ")
 +      _rpp(" / /  / / huj /  ")
 +      _rpp(" / /  / / huj / pizda.TSR  ")
 +      _rpp(" / /  / / hklm  ")
 +      _rpp(" / /  / / hklm /  ")
 +      _rpp(" / /  / / hklm / huj ")
 +      _rpp(" / /  / / hklm / huj / ")
 +      _rpp(" / /  / / hklm / huj / \tpizda.TSR  ")
 +      _conl()
 +      
_conl("########################################################################################")
 +      _conl()
 +      _rpp(" / /  / / hklm / software / altiris /  fi le . ex t ")
 +      _rpp(" / / . / / hkcr / software / altiris /  fi le . ex t ")
 +      _rpp(" / / ? / / hKcU / software / altiris /  fi le . ex t ")
 +      _rpp(" / / lOcAlHoSt / / hKu / software / altiris /  fi le . ex t ")
 +      _rpp(" / / ho st / / hKcc / software / altiris /  fi le . ex t ")
 +      _rpp(" / / ho st / / hKPd / software / altiris /  fi le . ex t ")
 +      _conl()
 +      
_conl("########################################################################################")
 +      _conl()
 +}
 +
 +function _splitpath_test()
 +{
 +      _conl()
 +      
_conl("########################################################################################")
 +      _conl()
 +      _fpp("  ")
 +      _fpp(" fi le . ex t ")
 +      _fpp(" di r0 / / ")
 +      _fpp(" di r0 / / fi le . ex t ")
 +      _fpp(" / ")
 +      _fpp(" / fi le . ex t ")
 +      _fpp(" / di r0 / /  ")
 +      _fpp(" / di r0 / / fi le . ex t ")
 +      _conl()
 +      
_conl("########################################################################################")
 +      _conl()
 +      _fpp(" c : ")
 +      _fpp(" c : fi le . ex t ")
 +      _fpp(" c : di r0 / / ")
 +      _fpp(" c : di r0 / / fi le . ex t ")
 +      _fpp(" c : / / ")
 +      _fpp(" c : / / fi le . ex t ")
 +      _fpp(" c : / / di r0 / /  ")
 +      _fpp(" c : / / di r0 / / fi le . ex t ")
 +      _conl()
 +      
_conl("########################################################################################")
 +      _conl()
 +      _fpp(" / /  ")
 +      _fpp(" / / ho st . hs t ")
 +      _fpp(" / / ho st / /  ")
 +      _fpp(" / / ho st / / fi le . ex t ")
 +      _fpp(" / / ho st / / di r0 / / ")
 +      _fpp(" / / ho st / / di r0 / / fi le . ex t ")
 +      _conl()
 +      
_conl("########################################################################################")
 +      _conl()
 +      _fpp(" / / ho st / / c : ")
 +      _fpp(" / / ho st / / c : fi le . ex t ")
 +      _fpp(" / / ho st / / c : di r0 / / ")
 +      _fpp(" / / ho st / / c : di r0 / / fi le . ex t ")
 +      _fpp(" / / ho st / / c : / / ")
 +      _fpp(" / / ho st / / c : / / fi le . ex t ")
 +      _fpp(" / / ho st / / c : / / di r0 / / ")
 +      _fpp(" / / ho st / / c : / / di r0 / / fi le . ex t ")
 +      _conl()
 +      
_conl("########################################################################################")
 +      _conl()
 +      _fpp(" http : / / / ")
 +      _fpp(" http : / / / si te . ex t ")
 +      _fpp(" http : / / / si te / /  ")
 +      _fpp(" http : / / / si te / / fi le . ex t ")
 +      _fpp(" http : / / / si te / / di r0 / / ")
 +      _fpp(" http : / / / si te / / di r0 / / fi le . ex t ")
 +      _conl()
 +      
_conl("########################################################################################")
 +      _conl()
 +      _fpp(" ftp : / / / : po rt ")
 +      _fpp(" ftp : / / / si te . ex t : po rt ")
 +      _fpp(" ftp : / / / si te : po rt / /  ")
 +      _fpp(" ftp : / / / si te : po rt / / fi le . ex t ")
 +      _fpp(" ftp : / / / si te : po rt / / di r0 / / ")
 +      _fpp(" ftp : / / / si te : po rt / / di r0 / / fi le . ex t ")
 +      _conl()
 +      _conl("##  //.  
######################################################################################")
 +      _conl()
 +      _fpp(" / / . ")
 +      _fpp(" / / . / / ")
 +      _fpp(" / / . / / com 56 ")
 +      _fpp(" / / . / / com 56 / / ")
 +      _fpp(" / / . / / c : ")
 +      _fpp(" / / . / / c : / / ")
 +      _fpp(" / / . / / c :  com 56 ")
 +      _fpp(" / / . / / c :  com 56 / / ")
 +      _fpp(" / / . / / c : / / com 56 ")
 +      _fpp(" / / . / / c : / / com 56 / / ")
 +      _conl()
 +      _conl("##  //?  
######################################################################################")
 +      _conl()
 +      _fpp(" / / ? ")
 +      _fpp(" / / ? / / ")
 +      _fpp(" / / ? / / com 56 ")
 +      _fpp(" / / ? / / com 56 / / ")
 +      _fpp(" / / ? / / c : ")
 +      _fpp(" / / ? / / c : / / ")
 +      _fpp(" / / ? / / c :  com 56 ")
 +      _fpp(" / / ? / / c :  com 56 / / ")
 +      _fpp(" / / ? / / c : / / com 56 ")
 +      _fpp(" / / ? / / c : / / com 56 / / ")
 +      _conl()
 +      
_conl("########################################################################################")
 +      _conl()
 +      _fpp(" / /  /  ")
 +      _fpp(" / /  / . hs t ")
 +      _fpp(" / /  / / fi le . ex t ")
 +      _fpp(" / /  / / di r0 / / ")
 +      _fpp(" / /  / / di r0 / / di r1 / fi le . ex t ")
 +      _fpp(" / /  / / c : ")
 +      _fpp(" / /  / / c : fi le . ex t ")
 +      _fpp(" / /  / / c : di r0 / / ")
 +      _fpp(" / /  / / c : di r0 / / fi le . ex t ")
 +      _fpp(" / /  / / c : / / ")
 +      _fpp(" / /  / / c : / / fi le . ex t ")
 +      _fpp(" / /  / / c : / / di r0 / / ")
 +      _fpp(" / /  / / c : / / di r0 / / fi le . ex t ")
 +      _conl()
 +      
_conl("########################################################################################")
 +      _conl()
 +      return 
 +}
 +
 +#_______________________________________________________________________
 +function _splitstr(A, t, r)
 +{
 +      if (_istr(t)) {
 +              if (_splitstr_i0(A, t) > 0) {
 +                      return _splitstrp0
 +              }
 +              if (_istr(r)) {
 +                      return _splitstr_i0(A, r)
 +              }
 +      } else {
 +              if (it == "A") {
 +                      if (length(t) > 0) {
 +                              _movarr(A, t)
 +                              return (0 - length(A))
                        }
                }
 -              while (i < q) {
 -                      D[0] = D[0] (D[++c] = A[i++]) "/"
 -              }
 -              if (i == q) {
 -                      if (match(t = A[i], /\.[^\.]*$/)) {
 -                              if (RSTART > 1) {
 -                                      D["name"] = substr(t, 1, RSTART - 1)
 -                              }
 -                              D["ext"] = substr(t, RSTART, RLENGTH)
 -                      } else {
 -                              if (t != "") {
 -                                      D["name"] = t
 -                              }
 -                      }
 +              _istr(r)
 +      }
 +      if (it == "A") {
 +              if (length(r) > 0) {
 +                      _movarr(A, r)
 +                      return (0 - length(A))
                }
 -              return 1
        }
 +}
  
 -      function _pmap(m, s1, s2, s3, s4, s5, s6, s7, s8)
 -      {
 -              if (match(m, /^([^\(]+)\(([^\)]*)\)$/, _QMAP)) {
 -                      _qparamf1 = _QMAP[1]
 -                      _QMAP[0] = "r" (_qparamc1 = split(_QMAP[2], _QMAP, ""))
 -                      _qparamf0 = "_p" _QMAP[_qparamc1--]
 -                      return @_qparamf0(s1, s2, s3, s4, s5, s6, s7, s8)
 +#_____________________________________________________
 +function _splitstr_i0(A, t, C)
 +{
 +      if (2 > (_splitstrq0 = patsplit(t, _SPLITSTRA0, 
/([^,\xB4]*\xB4.)*[^,\xB4]*/))) {
 +              _splitstrq0 = split(gensub(/\xB4(.)/, "\\1", "G", t), 
_SPLITSTRA0, "")
 +      }
 +      delete A
 +      _splitstri0 = _splitstrp0 = 0
 +      while (_splitstri0++ < _splitstrq0) {
 +              if ((t = gensub(/\xB4(.)/, "\\1", "G", 
_SPLITSTRA0[_splitstri0])) in C || t == "") {
 +                      continue
                }
 +              C[A[++_splitstrp0] = t]
        }
 +      return _splitstrp0
 +}
  
 -      function _pr0(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, 
p7, p8)
 -      {
 -              return @_qparamf1()
 +#_______________________________________________
 +function _strtorexp(t)
 +{
 +      gsub(/[\\\.\?\*\+\-\(\)\{\}\[\]\^\$\/\|]/, "\\\\&", t)
 +      t = split(t, _TOREXP_STRA, /[\x00-\x1F]/, _TOREXP_STRB)
 +      _torexp_strt0 = ""
 +      for (_torexp_stri0 = 1; _torexp_stri0 < t; _torexp_stri0++) {
 +              _torexp_strt0 = _torexp_strt0 _TOREXP_STRA[_torexp_stri0] "\\" 
_QASC[_TOREXP_STRB[_torexp_stri0]]
        }
 +      return (_torexp_strt0 _TOREXP_STRA[_torexp_stri0])
 +}
  
 -      function _pr1(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, 
p7, p8)
 -      {
 -              return @_qparamf1(p1)
 -      }
 +function _subseqoff(r, B)
 +{
 +      patsplit(r, B, /\x84[^\x94]*\x94/)
 +      return gensub(/\x84[^\x94]*\x94/, "\204", "G", r)
 +}
  
 -      function _pr2(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, 
p7, p8)
 -      {
 -              return @_qparamf1(p1, p2)
 +function _subseqon(B, r, F, f, s, e, q, i, A)
 +{
 +      q = split(r, A, /\x84/)
 +      r = ""
 +      f = F[""]
 +      for (i = 1; i < q; i++) {
 +              s = substr(e = B[i], 2, 1)
 +              #_conl("curr r==`" r "': A[" i "]=`" A[i] "'")
 +              #s=s in F ? _th0(F[s],_conl("handler `" F[s] "' for `" s "' 
ost=`" substr(e,3,length(e)-3) "'")) : _th0(F[""],_conl("default handler for `" 
s "'"))
 +              s = (s in F ? F[s] : F[""])
 +              #_conl("`" f "'")
 +              r = r (@f(A[i])) (@s(substr(e, 3, length(e) - 3)))
        }
 +      return (r (@f(A[i])))
 +}
  
 -      function _pr3(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, 
p7, p8)
 -      {
 -              return @_qparamf1(p1, p2, p3)
 -      }
 +#_____________________________________________________________________________
 +# _rdreg(ARRAY,reg_path)
 +#             Import into ARRAY the content of the whole registree tree with 
the higher point specified by reg_path.
 +#             ARRAY will be filled by the strings with following format:
 +#
 +# 
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\GnuWin32\CoreUtils\5.3.0\pck\InstallPath.STR=C:\Program
 Files (x86)\GnuWin32
 +#     where:
 +# HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\GnuWin32\CoreUtils\5.3.0\pck        
                                                                <- REG KEY PATH
 +#                                                                             
             InstallPath                                                        
<- DATA FIELD
 +#                                                                             
                             STR                                                
<- TYPE
 +#                                                                             
                                   C:\Program Files (x86)\GnuWin32      <- VALUE
 +# TYPE:
 +#     STR             - REG_SZ                (String Value)
 +#     W32             - REG_DWORD             (DWORD (32-bit) Value)
 +#     W64             - REG_QWORD             (QWORD (64-bit) Value)
 +#     BIN             - REG_BINARY    (Binary Value)
 +#     XSZ             - REG_EXPAND_SZ (Expandable String Value)
 +#     MSZ             - REG_MULTI_SZ  (Multi-String Value)
 
+#_________________________________________________________________________________________
  
 -      function _pr4(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, 
p7, p8)
 -      {
 -              return @_qparamf1(p1, p2, p3, p4)
 -      }
  
 -      function _pr5(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, 
p7, p8)
 -      {
 -              return @_qparamf1(p1, p2, p3, p4, p5)
 -      }
  
 -      function _pr6(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, 
p7, p8)
 -      {
 -              return @_qparamf1(p1, p2, p3, p4, p5, p6)
 -      }
  
 -      function _pr7(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, 
p7, p8)
 -      {
 -              return @_qparamf1(p1, p2, p3, p4, p5, p6, p7)
 -      }
 +# HKCR                HKEY_CLASSES_ROOT
 +# HKCU                HKEY_CURRENT_USER
 +# HKLM                HKEY_LOCAL_MACHINE
 +# HKU                 HKEY_USERS
 +# HKCC                HKEY_CURRENT_CONFIG
 +# HKPD                HKEY_PERFORMANCE_DATA
  
 -      function _pr8(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, 
p7, p8)
 -      {
 -              return @_qparamf1(p1, p2, p3, p4, p5, p6, p7, p8)
 -      }
  
 -      function _printarr(A, t, lv, r, a)
 -      {
 -              a = PROCINFO["sorted_in"]
 -              PROCINFO["sorted_in"] = "_lengthsort"
 -              _printarrexp = (r ? r : "")
 -              if (isarray(A)) {
 -                      delete _DUMPARR
 -                      _dumparrc = _dumparrd = ""
 -                      _printarr_i1(A, lv = ((lv == "" ? 16 : (lv == 0 || lv + 
0 != 0 ? lv : (lv == "-*" ? -3 : (lv ~ /^\+?\*$/ ? 3 : 16))))) + 0, (lv < 0 ? 
-1 : 1), 0, _tabtospc(t))
 -                      PROCINFO["sorted_in"] = a
 -                      return _retarrd(_DUMPARR, _dumparrd, _dumparrd = "")
 -              }
 -      }
  
 -      function _printarr_i1(A, lv, ls, ln, t, t2, i, a, f)
 -      {
 -              t2 = _getchrln(" ", length(t))
 -              if (ln == lv) {
 -                      if (ls > 0) {
 -                              for (i in A) {
 -                                      ++a
 -                              }
 -                      } else {
 -                              for (i in A) {
 -                                      (isarray(A[i]) ? ++a : "")
 -                              }
 -                      }
 -                      if (length(_dumparrd = _dumparrd t ((a > 0 ? " ... (x" 
a ")" : "")) _CHR["EOL"]) > 262144) {
 -                              _conl(_dumparrd)
 -                              _dumparrd = ""
 -                      }
 -                      return 
 -              }
 -              if (ls >= 0) {
 -                      for (i in A) {
 -                              if (! _printarrexp || i ~ _printarrexp) {
 -                                      if (! isarray(A[i])) {
 -                                              if (length(_dumparrd = 
_dumparrd ((f ? t2 : t _nop(f = 1))) "[" i "]=" A[i] "'" _CHR["EOL"]) > 262144) 
{
 -                                                      _conl(_dumparrd)
 -                                                      _dumparrd = ""
 -                                              }
 -                                      }
 -                              }
 -                      }
 -              }
 -              for (i in A) {
 -                      if (isarray(A[i])) {
 -                              if (! _printarrexp || i ~ _printarrexp) {
 -                                      _printarr_i1(A[i], lv, ls, ln + ls, 
_th0((f ? t2 : t), f = 1) "[" i "]")
 -                              }
 -                      }
 -              }
 -              if (! f) {
 -                      if (length(_dumparrd = _dumparrd t _CHR["EOL"]) > 
262144) {
 -                              _conl(_dumparrd)
 -                              _dumparrd = ""
 -                      }
 -              }
 -      }
  
 -      function _qparam(qm, p0, p1, p2, p3, p4, p5, p6, p7)
 -      {
 -              if (qm == qm + 0 && qm > 0) {
 -                      _qparamim = substr("        ", 1, qm)
 -              } else {
 -                      if (qm != "") {
 -                              _qparamim = qm
 -                      } else {
 -                              _qparamim = "        "
 -                      }
 -              }
 -              _qparamask = ""
 -              return _qparam_i0(p0, p1, p2, p3, p4, p5, p6, p7)
 -      }
 -
 -      function _qparam_i0(p0, p1, p2, p3, p4, p5, p6, p7)
 -      {
 -              _qparama0 = substr(_qparamim, 1, 1)
 -              _qparamim = substr(_qparamim, 2)
 -              switch (_qparama0) {
 -              case "":
 -                      gsub(/ +$/, "", _qparamask)
 -                      return length(_qparamask)
 -              default:
 -                      if (isarray(p0)) {
 -                              _qparama0 = "A"
 -                      } else {
 -                              if (p0 == "" && p0 == 0) {
 -                                      _qparama0 = " "
 -                              } else {
 -                                      if (_isptr(p0)) {
 -                                              _qparama0 = "P"
 -                                      } else {
 -                                              _qparama0 = "S"
 -                                      }
 -                              }
 -                      }
 -              case ".":
 -                      _qparamask = _qparamask _qparama0
 -                      return _qparam_i0(p1, p2, p3, p4, p5, p6, p7)
 -              }
 -      }
  
 -      function _qstr(t, c, A, B)
 -      {
 -              c = ""
 -              for (t = split(t, A, /[\x00-\x1F\\"]/, B); t >= 0; t--) {
 -                      c = _QSTR[B[t]] A[t + 1] c
 -              }
 -              return c
 -      }
  
 -      function _qstrq(t)
 -      {
 -              gsub(/\\/, "\\\\", t)
 -              gsub(/"/, "\\\"", t)
 -              return t
 -      }
  
 -      function _rEG(c, t, P, a, A)
 -      {
 -              switch (c) {
 -              case "_lib_CMDLN":
 -                      return t
 -              case "_lib_APPLY":
 -                      return 
 -              case "_lib_HELP":
 -                      return 
 -              case "_lib_NAMEVER":
 -                      return _ln("_reg 0.001")
 -              case "_lib_BEGIN":
 -                      return 
 -              case "_lib_END":
 -                      return 
 -              }
 -      }
  
 -      function _rFBRO(p)
 -      {
 -              if (p) {
 -                      if (p in _tPARENT) {
 -                              return _tFCHLD[_tPARENT[p]]
 -                      }
 -                      while (p in _tPREV) {
 -                              p = _tPREV[p]
 -                      }
 -                      return p
 -              }
 -              return p
 -      }
  
 -      function _rFCHLD(p)
 -      {
 -              if (p && p in _tFCHLD) {
 -                      return _tFCHLD[p]
 -              }
 -              return ""
 -      }
  
 -      function _rLBRO(p)
 -      {
 -              if (p) {
 -                      if (p in _tPARENT) {
 -                              return _tLCHLD[_tPARENT[p]]
 -                      }
 -                      while (p in _tNEXT) {
 -                              p = _tNEXT[p]
 -                      }
 -                      return p
 -              }
 -              return p
 -      }
  
 -      function _rLCHLD(p)
 -      {
 -              if (p && p in _tLCHLD) {
 -                      return _tLCHLD[p]
 -              }
 -              return ""
 -      }
  
 -      function _rLINK(p)
 -      {
 -              return ((p in _tLINK ? _tLINK[p] : ""))
 -      }
  
 -      function _rNEXT(p)
 -      {
 -              if (p && p in _tNEXT) {
 -                      return _tNEXT[p]
 -              }
 -              return ""
 -      }
  
 -      function _rPARENT(p)
 -      {
 -              if (p && p in _tPARENT) {
 -                      return _tPARENT[p]
 -              }
 -              return ""
 -      }
  
 -      function _rPREV(p)
 -      {
 -              if (p && p in _tPREV) {
 -                      return _tPREV[p]
 -              }
 -              return ""
 -      }
  
 -      function _rQBRO(p, c, p1)
 -      {
 -              if (p) {
 -                      if (p in _tPARENT) {
 -                              return _tQCHLD[_tPARENT[p]]
 -                      }
 -                      c = 1
 -                      p1 = p
 -                      while (p1 in _tPREV) {
 -                              c++
 -                              p1 = _tPREV[p1]
 -                      }
 -                      while (p in _tNEXT) {
 -                              c++
 -                              p = _tNEXT[p]
 -                      }
 -                      return c
 -              }
 -              return p
 -      }
  
 -      function _rQCHLD(p)
 -      {
 -              if (p && p in _tQCHLD) {
 -                      return _tQCHLD[p]
 -              }
 -              return ""
 -      }
  
 -      function _rSQFIRST(g, p, A)
 -      {
 -              if (isarray(A)) {
 -                      return _rSQFIRSTA(g, p, A)
 -              }
 -              _SQTOPTR[g] = p
 -              _SQSTACK[g][0] = 0
 -              return _rsqgetptr(g, p)
 -      }
  
 -      function _rSQFIRSTA(g, p, A)
 -      {
 -              _SQTOPTR[g] = p
 -              _SQSTACK[g][0] = 0
 -              if ((p = _rsqgetptr(g, p)) in A) {
 -                      return p
 -              }
 -              return _rSQNEXTA(g, p, A)
 -      }
  
 -      function _rSQNEXT(g, p, A)
 -      {
 -              if (isarray(A)) {
 -                      return _rSQNEXTA(g, p, A)
 -              }
 -              return _rsqnext_i0(g, p)
 -      }
  
 -      function _rSQNEXTA(g, p, A)
 -      {
 -              if (p == _SQTOPTR[g]) {
 -                      if (_SQSTACK[g][0] > 0) {
 -                              _SQTOPTR[g] = _SQSTACK[g][_SQSTACK[g][0]--]
 -                              return _rSQNEXTA(g, 
_SQSTACK[g][_SQSTACK[g][0]--], A)
 -                      }
 -                      return 
 -              }
 -              while (p in _tNEXT) {
 -                      if ((p = _rsqgetptr(g, _tNEXT[p])) in A) {
 -                              return p
 -                      }
 -              }
 -              return ((p in _tPARENT ? _rSQNEXTA(g, _tPARENT[p], A) : ""))
 -      }
  
 -      function _rconl(t)
 -      {
 -              _rprt = _rprt _ln(t)
 -      }
  
 -      function _rconline(t)
 -      {
 -              _rprt = _rprt _ln((t = " " t " ") _getchrln("_", _CON_WIDTH - 
length(t) - 1))
 -      }
  
 -      function _rd_shortcut(D, f)
 -      {
 -              if ((_shrtcutf0 = _filepath(f)) && _shortcut_nerr(_shrtcuta0 = 
_cmd(_shortcut_fpath " /A:Q /F:\"" _shrtcutf0 "\" 2>&1"), _shrtcutf0)) {
 -                      ERRNO = ""
 -                      split(_shrtcuta0, _SHRTCUTA0, /\x0D?\x0A/)
 -                      for (_shrtcuta0 in _SHRTCUTA0) {
 -                              for (f in _SHORTCUTRSTRUC) {
 -                                      if (match(_SHRTCUTA0[_shrtcuta0], "^" 
f)) {
 -                                              D[_SHORTCUTRSTRUC[f]] = 
substr(_SHRTCUTA0[_shrtcuta0], 1 + RLENGTH)
 -                                      }
 -                              }
 -                      }
 -              }
 -              return ((ERRNO ? ERRNO = "read shortcut: " ERRNO : _NOP))
 -      }
  
 -      function _rdfile(f, i, A)
 -      {
 -              if ((f = _filerdne(f)) == "" || _filene(f) == "") {
 -                      ERRNO = "Filename error"
 -                      return 
 -              }
 -              _fio_cmda = RS
 -              RS = ".{1,}"
 -              _fio_cmdb = BINMODE
 -              BINMODE = "rw"
 -              ERRNO = RT = _NUL
 -              getline RS < f
 -              BINMODE = _fio_cmdb
 -              RS = _fio_cmda
 -              if (ERRNO == "") {
 -                      close(f)
 -              }
 -              if (ERRNO == "") {
 -                      return RT
 -              }
 -              return (RT = _NOP)
 -      }
  
 -      function _rdreg(D, p)
 -      {
 -              _rdregp0 = "reg query \"" p "\" /S /reg:64 2>NUL"
 -              _rdregfld = _rdregkey = 0
 -              _rdregq0 = split(gensub(/[\x0D?\x0A]{2,}/, _CHR["EOL"], "G", 
_cmd(_rdregp0)), _RDREGA0, /\x0D?\x0A/)
 -              while (_rdregq0 > 0) {
 -                      _rdreg_i0(D)
 -              }
 -              return (_rdregfld + _rdregkey)
 -      }
  
 -      function _rdreg_i0(D, A)
 -      {
 -              while (_rdregq0 > 0) {
 -                      if (match(_rdregp0 = _RDREGA0[_rdregq0--], /    (.*)    
REG_((SZ)|(DWORD)|(QWORD)|(BINARY)|(EXPAND_SZ)|(MULTI_SZ))    (.*)$/, A)) {
 -                              if (! _rdreg_i0(D)) {
 -                                      ++_rdregfld
 -                                      D[_rdregp0 A[1] "." _RDREGTYPE[A[2]]] = 
A[9]
 -                                      return 
 -                              } else {
 -                                      break
 -                              }
 -                      } else {
 -                              if (_rdregp0 ~ /^HK/) {
 -                                      ++_rdregkey
 -                                      return D[_rdregp0 = _rdregp0 "\\"]
 -                              }
 -                      }
 -              }
 -              return 1
 -      }
  
 -      function _rdsafe(A, i, d)
 -      {
 -              if (i in A) {
 -                      return A[i]
 -              }
 -              return d
 -      }
  
 -      function _reg_check(p)
 -      {
 -              _tframe("_reg_check_i0", p, p)
 -      }
  
 -      function _reg_check_i0(p, pp, p1, p2)
 -      {
 -              if (_[p]["TYPE"] == "defreg") {
 -                      if (_[p]["REGPATH"] in _REG) {
 -                              if ("VALUE" in _[p]) {
 -                                      if (_[p]["VALUE"] == 
_REG[_[p]["REGPATH"]]) {
 -                                              _creport(p, substr("OK:    
REGENTRY MATCH(==" _[p]["VALUE"] "): " _[p]["REGPATH"], 1, 126))
 -                                      } else {
 -                                              _dllerr(p, substr("REGENTRY NOT 
MATCH(!=" _[p]["VALUE"] "): " _[p]["REGPATH"], 1, 126))
 -                                      }
 -                              } else {
 -                                      if (_VAR[_[p]["REGPATH"]] == 
_REG[_[p]["REGPATH"]]) {
 -                                              _creport(p, substr("OK:    
REGPATH MATCH(==" _VAR[_[p]["REGPATH"]] "): " _[p]["REGPATH"], 1, 126))
 -                                      } else {
 -                                              _dllerr(p, substr("REGPATH NOT 
MATCH(!=" _VAR[_[p]["REGPATH"]] "): " _[p]["REGPATH"], 1, 126))
 -                                      }
 -                              }
 -                      } else {
 -                              _dllerr(p, substr("REGPATH NOT FOUND: " 
_[p]["REGPATH"], 1, 126))
 -                      }
 -              }
 -      }
  
 -      function _registryinit()
 -      {
 -              _registrytmpfile = _getmpfile()
 -      }
  
 -      function _regpath0(D, i, s, q, S)
 -      {
 -              if (i = _patharr0(S, i)) {
 -                      if ("name" in S) {
 -                              D["name"] = S["name"]
 -                      }
 -                      if ("ext" in S) {
 -                              D["ext"] = S["ext"]
 -                      }
 -                      s = ((toupper(s = (i in S ? S[i] : "")) in 
_REGPATH0REGDIR ? D[++q] = _REGPATH0REGDIR[toupper(s)] : (D[++q] = 
_REGPATH0REGDIR[""]) "\\" (D[++q] = s))) "\\"
 -                      while (++i in S) {
 -                              s = s (D[++q] = S[i]) "\\"
 -                      }
 -                      if (s != "") {
 -                              D[0] = s
 -                      }
 -                      IGNORECASE = 1
 -                      D["hostdir"] = "\\\\" (D["host"] = ("host" in S && ("" 
== (i = S["host"]) || "." == i || "?" == i || "localhost" == i) ? 
ENVIRON["COMPUTERNAME"] : i)) "\\" s
 -                      IGNORECASE = 0
 -              }
 -      }
  
 -      function _report(p)
 -      {
 -              _report_t0 = _reportparnt = ""
 -              _report_i0(p)
 -              _tframe("_report_i0", p)
 -              return _report_t0
 -      }
  
 -      function _report_i0(p, p0, p1, p2)
 -      {
 -              if (p in _tPARENT) {
 -                      if (_reportparnt != (_reportparnt = _tPARENT[p])) {
 -                              _report_t0 = _report_t0 _ln() _ln((z = "_ " 
_[_tPARENT[p]]["NAME"] " ") _getchrln("_", _CON_WIDTH - length(z) - 2)) 
_ln(_getchrln("#", _CON_WIDTH - 2)) _ln()
 -                      }
 -              }
 -              if ("ERROR" in _[p]) {
 -                      _report_t0 = _report_t0 _reporterr(p, _[p]["ERROR"])
 -              }
 -              if ("REPORT" in _[p]) {
 -                      _report_t0 = _report_t0 _ln(_[p]["REPORT"])
 -              }
 -      }
  
 -      function _reporterr(p, t3, pp, t, t2)
 -      {
 -              t = ""
 -              pp = p
 -              do {
 -                      ("NAME" in _[pp] ? t = _[pp]["NAME"] ": " t : "")
 -              } while (pp = _rPARENT(pp))
 -              if (match(t3, /\x00/)) {
 -                      return (substr(t3, 1, RSTART - 1) t substr(t3, RSTART + 
1))
 -              }
 -              return (t t3)
 -      }
  
 -      function _retarr(A, i, p, a, q)
 -      {
 -              if (isarray(A)) {
 -                      i = (i == "" ? 0 : i + 0)
 -                      q = A[_ARRLEN] + 0
 -                      if (i < q) {
 -                              return (p A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] _retarr_i0(A, q, i, a))
 -                      }
 -              }
 -      }
  
 -      function _retarr_i0(A, q, i, a)
 -      {
 -              if (i < q) {
 -                      return (A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] 
_retarr_i0(A, q, i, a))
 -              }
 -              while (q < i) {
 -                      delete A[++q]
 -              }
 -              return a
 -      }
  
 -      function _retarrd(A, v, i)
 -      {
 -              if (1 in A) {
 -                      return (A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] 
A[10] A[11] A[12] A[13] A[14] A[15] A[16] (((i = 17) in A ? _retarrd_i0(A, i) v 
: v)))
 -              }
 -              delete A
 -              return v
 -      }
  
 -      function _retarrd_i0(A, i)
 -      {
 -              if (i in A) {
 -                      return (A[i++] A[i++] A[i++] A[i++] A[i++] A[i++] 
A[i++] A[i++] A[i++] A[i++] A[i++] A[i++] A[i++] A[i++] A[i++] A[i++] ((i in A 
? _retarrd_i0(A, i) : "")))
 -              }
 -              delete A
 -      }
  
 -      function _rexpfn(R, t, p)
 -      {
 -              _REXPFN[""] = ""
 -              while (t) {
 -                      t = _rxpfn(R, t, p)
 -              }
 -              return _REXPFN[""]
 -      }
  
 -      function _rexpfnend(t)
 -      {
 -              _REXPFN[""] = t
 -      }
  
 -      function _rexpstr(r, i, c, A)
 -      {
 -              c = split(r, A, "")
 -              r = ""
 -              for (i = 1; i <= c; i++) {
 -                      r = r _REXPSTR[A[i]]
 -              }
 -              return r
 -      }
  
 -      function _rexpstr_i0(t, A, p0)
 -      {
 -              return (_REXPSTR[t] = "\\" t)
 -      }
  
 -      function _rmtsharerr(h, t)
 -      {
 -              gsub(/[\x0D\x0A]+/, "", t)
 -              if (t ~ /^The command failed: 53/) {
 -                      ERRNO = "host not found: \\\\" h
 -              } else {
 -                      ERRNO = t ": \\\\" h
 -              }
 -      }
 
+#___________________________________________________________________________________
 
+####################################################################################
  
 -      function _rpp(q, D, S)
 -      {
 -              _conl()
 -              _conline(q)
 -              _conl()
 -              _regpath0(D, q)
 -              _conl(_ln("DEST:") _dumparr(D))
 -              _conl()
 -              return q
 -      }
  
 -      function _rrdreg(DD, p, k, t, v, c, i, q, tT, A, B, C, D)
 -      {
 -              if (! _registrytmpfile) {
 -                      _registryinit()
 -              }
 -              _cmd("regedit /E \"" _registrytmpfile "\" \"" p "\" 2>&1")
 -              q = patsplit(gensub(/[\x00\xFF\xFE]+/, "", "G", 
_rdfile(_registrytmpfile)), A, /\x0D?\x0A\[[^\]]+\]\x0D?\x0A/, B)
 -              for (i = 1; i <= q; i++) {
 -                      p = gensub(/(^[ \t\x0D\x0A]*\[)|((\\)\\+)|(\][ 
\t\x0D\x0A]*$)/, "\\3", "G", A[i])
 -                      DD[p "\\"]
 -                      delete C[split(B[i], C, /[\x0D\x0A]+/)]
 -                      for (c = 1; c in C; c++) {
 -                              tt = tt C[c]
 -                              if (gsub(/\\$/, "", tt)) {
 -                                      continue
 -                              }
 -                              if (tt == "") {
 -                                      continue
 -                              }
 -                              if (match(_th0(tt, tt = ""), 
/((^"(([^\\"]|\\.)*)")|(@))=(("(([^\\"]|\\.)*)")|(dword:([[:xdigit:]]{8}))|(hex(\(([27b])\))?:(.*)))$/,
 D)) {
 -                                      if (D[7]) {
 -                                              t = "STR"
 -                                              v = _unstr(D[8])
 -                                      } else {
 -                                              if (D[10]) {
 -                                                      t = "W32"
 -                                                      v = D[11]
 -                                              } else {
 -                                                      v = D[15]
 -                                                      if (D[13]) {
 -                                                              switch (D[14]) {
 -                                                              case "2":
 -                                                                      t = 
"XSZ"
 -                                                                      break
 -                                                              case "7":
 -                                                                      t = 
"MSZ"
 -                                                                      break
 -                                                              default:
 -                                                                      t = 
"W64"
 -                                                              }
 -                                                      } else {
 -                                                              t = "BIN"
 -                                                      }
 -                                              }
 -                                      }
 -                                      DD[gensub(/(\\)\\+/, "\\1", "G", p "\\" 
_unstr(D[3] ((D[5] ? "(Default)" : ""))) "." t)] = v
 -                              } else {
 -                                      _fatal("regedit: unknown output 
format(" c "): `" C[c] "'")
 -                              }
 -                      }
 -              }
 -      }
  
 -      function _rsqgetptr(g, p, A)
 -      {
 -              if (p in _tLINK) {
 -                      _SQSTACK[g][++_SQSTACK[g][0]] = p
 -                      _SQSTACK[g][++_SQSTACK[g][0]] = _SQTOPTR[g]
 -                      while ((p = _tLINK[p]) in _tLINK) {
 -                              _con(".")
 -                      }
 -                      _SQTOPTR[g] = p
 -              }
 -              if (p in _tFCHLD) {
 -                      return _rsqgetptr(g, _tFCHLD[p])
 -              }
 -              return p
 -      }
  
 -      function _rsqnext_i0(g, p)
 -      {
 -              if (p == _SQTOPTR[g]) {
 -                      if (_SQSTACK[g][0] > 0) {
 -                              _SQTOPTR[g] = _SQSTACK[g][_SQSTACK[g][0]--]
 -                              return _rsqnext_i0(g, 
_SQSTACK[g][_SQSTACK[g][0]--])
 -                      }
 -                      return 
 -              }
 -              if (p in _tNEXT) {
 -                      return _rsqgetptr(g, _tNEXT[p])
 -              }
 -              return _rsqnext_i0(g, _tPARENT[p])
 -      }
  
 -      function _rtn(v, A)
 -      {
 -              _conl()
 -              _conline(_val(v) " : " _val(A))
 -              _conl()
 -              _rtn2(v, A)
 -              _conl()
 -      }
  
 -      function _rtn2(v, A, r, t)
 -      {
 -              r = (isarray(A) ? _typa(v, A) : _typ(v))
 -              if ("`" > _t0 && _t0) {
 -                      _conl("ggggg")
 -              }
 -              t = ((r ? "TRUE" : "FALSE")) " / " ((r > 0 ? r ">0" : r "!>0")) 
" / " ((r + 0 > 0 ? r "+0>0" : r "+0!>0")) " / " ((r + 0 != r ? r "+0!=" r : r 
"+0==" r)) " / " ((r && "`" > r ? "'`'>" r " && " r : "!('`'>" r " && " r ")"))
 -              _conl("`" r "' : " t)
 -              return r
 -      }
  
 -      function _rxpfn(R, t, p, i, f, A)
 -      {
 -              for (i in R) {
 -                      if (match(t, i, A)) {
 -                              f = R[i]
 -                              if (t != (t = @f(A, substr(t, RLENGTH + 1), 
p))) {
 -                                      return t
 -                              }
 -                      }
 -              }
 -              return _rexpfnend(t)
 -      }
  
 -      function _sHARE(c, t, P, a, A)
 -      {
 -              switch (c) {
 -              case "_lib_CMDLN":
 -                      return t
 -              case "_lib_APPLY":
 -                      return 
 -              case "_lib_HELP":
 -                      return 
 -              case "_lib_NAMEVER":
 -                      return _ln("_share 1.000")
 -              case "_lib_BEGIN":
 -                      return 
 -              case "_lib_END":
 -                      return 
 -              }
 -      }
  
 -      function _sYS(c, t, P, a, A)
 -      {
 -              switch (c) {
 -              case "_lib_CMDLN":
 -                      return t
 -              case "_lib_APPLY":
 -                      return 
 -              case "_lib_HELP":
 -                      return 
 -              case "_lib_NAMEVER":
 -                      return 
 -              case "_lib_BEGIN":
 -                      return 
 -              case "_lib_END":
 -                      return 
 -              }
 -      }
  
 -      function _serv_check(p)
 -      {
 -              _tframe("_serv_check_i0", p, p)
 -      }
  
 -      function _serv_check_i0(p, p0, p1, p2, p3, i, q, c)
 -      {
 -              if (_[p]["TYPE"] == "defsrv") {
 -                      i = IGNORECASE
 -                      IGNORECASE = 1
 -                      if (match(_servoutput, roi = "\\012DISPLAY_NAME: " 
_torexp(_[p]["SERVNAME"]))) {
 -                              _creport(p, "OK:    SERVICE DETECTED: " 
substr(_[p]["SERVNAME"], 1, 112))
 -                      } else {
 -                              _dllerr(p, "service " _[p]["SERVNAME"] " not 
detected")
 -                      }
 -              }
 -              IGNORECASE = i
 -      }
  
 -      function _setarrsort(f, a)
 -      {
 -              a = PROCINFO["sorted_in"]
 -              if (! f) {
 -                      delete PROCINFO["sorted_in"]
 -              } else {
 -                      PROCINFO["sorted_in"] = f
 -              }
 -              return a
 -      }
  
 -      function _setmpath(p, a)
 -      {
 -              ERRNO = ""
 -              if (p && (a = _filerd(p))) {
 -                      if (_FILEIO_TMPRD) {
 -                              _FILEIO_TMPATHS[_FILEIO_TMPRD]
 -                      }
 -                      return (_FILEIO_TMPRD = a)
 -              } else {
 -                      return _warning("`" p "': cannot set temporary folder" 
((ERRNO ? ": " ERRNO : "")))
 -              }
 -      }
  
 -      function _sharelist(D, h, q, c, l, A, B)
 -      {
 -              delete D
 -              c = _sharextool " \\\\" ((h == "" ? h = ENVIRON["COMPUTERNAME"] 
: h)) " 2>&1"
 -              if (match(c = _cmd(c), /\x0AShare[^\x0A]*Remark/)) {
 -                      gsub(/(^[^-]*\x0D?\x0A-+\x0D?\x0A[ \t]*)|(\x0D?\x0AThe 
command completed successfully.*$)/, "", c)
 -                      l = RLENGTH - 7
 -                      split(c, A, /([ \t]*\x0D?\x0A)+[ \t]*/)
 -                      for (c in A) {
 -                              if (match(A[c], /((([^ \t:]+[ \t]+)*[^ \t:]+)[ 
\t]+)([A-Za-z])[ \t]*:/, B) && ++q) {
 -                                      D[B[2]] = (A[c] ~ /\.\.\.$/ ? 
_sharepath(h, B[2]) : gensub(/[ \t\\\/]*$/, "\\\\", 1, substr(A[c], 1 + B[1, 
"length"], l - B[1, "length"])))
 -                              }
 -                      }
 -                      return q
 -              }
 -              return _rmtsharerr(h, c)
 -      }
  
 -      function _sharepath(h, s, A)
 -      {
 -              s = _sharextool " \\\\" ((h == "" ? h = ENVIRON["COMPUTERNAME"] 
: h)) "\\\"" s "\" 2>&1"
 -              if (match(s = _cmd(s), /\x0APath[ \t]+([^\x0D\x0A]+)/, 
_SHAREPATHA0)) {
 -                      return gensub(/[ \t\\\/]*$/, "\\\\", 1, _SHAREPATHA0[1])
 -              }
 -              return _rmtsharerr(h, s)
 -      }
  
 -      function _shortcut(D, S)
 -      {
 -              if (isarray(D)) {
 -                      if (isarray(S)) {
 -                              _addarrmask(D, S, _SHORTCUTWSTRUC)
 -                      } else {
 -                              if (S == 0 && S == "") {
 -                                      _addarrmask(D, _SHORTCUTDEFAULT, 
_SHORTCUTWSTRUC)
 -                              } else {
 -                                      if (_isnotfileptr(S)) {
 -                                              _addarrmask(D, _[S], 
_SHORTCUTWSTRUC)
 -                                      } else {
 -                                              if (_rd_shortcut(D, S)) {
 -                                                      return 
 -                                              }
 -                                      }
 -                              }
 -                      }
 -              } else {
 -                      if (D == 0 && D == "") {
 -                              return _NOP
 -                      } else {
 -                              if (_isnotfileptr(D)) {
 -                                      if (isarray(S)) {
 -                                              _addarrmask(_[D], S, 
_SHORTCUTWSTRUC)
 -                                      } else {
 -                                              if (S == 0 && S == "") {
 -                                                      _addarrmask(_[D], 
_SHORTCUTDEFAULT, _SHORTCUTWSTRUC)
 -                                              } else {
 -                                                      if (_isnotfileptr(S)) {
 -                                                              
_addarrmask(_[D], _[S], _SHORTCUTWSTRUC)
 -                                                      } else {
 -                                                              if 
(_rd_shortcut(_[D], S)) {
 -                                                                      return 
 -                                                              }
 -                                                      }
 -                                              }
 -                                      }
 -                              } else {
 -                                      if (isarray(S) && _wr_shortcut(D, S)) {
 -                                              return 
 -                                      } else {
 -                                              if (S == 0 && S == "" && 
_wr_shortcut(D, _SHORTCUTDEFAULT)) {
 -                                                      return 
 -                                              } else {
 -                                                      if (_isnotfileptr(S) && 
_wr_shortcut(D, _[S])) {
 -                                                              return 
 -                                                      } else {
 -                                                              if 
(_rd_shortcut(_SHRTCUTA1, S) || _wr_shortcut(D, _SHRTCUTA1)) {
 -                                                                      return 
 -                                                              }
 -                                                      }
 -                                              }
 -                                      }
 -                              }
 -                      }
 -              }
 -              return 1
 -      }
 -
 -      function _shortcut_init(A, B, q)
 -      {
 -              _SHORTCUTERR[2] = "file not found"
 -              _SHORTCUTERR[3] = "no such filepath"
 -              _SHORTCUTERR["The system cannot find the file specified."] = 
"no such filepath"
 -              _SHORTCUTERR[5] = "file is folder"
 -              _SHORTCUTERR["Access is denied."] = "file is folder"
 -              _SHORTCUTERR[123] = "filepath syntax error"
 -              _SHORTCUTERR["The filename, directory name, or volume label 
syntax is incorrect."] = "filepath syntax error"
 -              q = 
"target\t\t\t/T:\t\t\t\tTargetPath=\t\t\t\t\ttarget?\t\t\t;\t\t\t_target\t\t\t\t\t\t\tTargetPathExpanded=\t\t\t\t\t\t\t;\t\t\tparameters\t\t\t/P:\t\t\t\tArguments=\t\t\t\t\tparaneters?\t\t\t;\t\t\t_parameters\t\t\t\t\t\t\tArgumentsExpanded=\t\t\t\t\t\t\t;\t\t\tstartdir\t\t\t/W:\t\t\t\tWorkingDirectory=\t\t\t\tstartdir?\t\t\t;\t\t\t_startdir\t\t\t\t\t\t\tWorkingDirectoryExpanded=\t\t\t\t\t\t;\t\t\trunstyle\t\t\t/R:\t\t\t\tRunStyle=\t\t\t\t\t1\t\t\t\t;\t\t\ticon,index\t\t\t/I:\t\t\t\tIconLocation=\t\t\t\ticon,index?\t\t\t;\t\t\txicon,index\t\t\t\t\t\t\tIconLocationExpanded=\t\t\t\t\t\t\t;\t\t\tshortcut
 
key\t\t/H:\t\t\t\tHotKey=\t\t\t\t\t0\t\t\t\t;\t\t\tdescription\t\t\t/D:\t\t\t\tDescription=\t\t\t\t_env4:
 default shortcut\t"
 -              split(q, _SHRTCUTA0, /[ \t]*;[ \t]*/)
 -              for (q in _SHRTCUTA0) {
 -                      if (match(_SHRTCUTA0[q], 
/^([^\t]+)\t+([^\t]+)(\t+([^\t]+)(\t+([^\t]+))?)?/, B)) {
 -                              if (B[3] == "") {
 -                                      _SHORTCUTRSTRUC[B[2]] = B[1]
 -                              } else {
 -                                      if (B[5] == "") {
 -                                              
_SHORTCUTWSTRUC[_SHORTCUTRSTRUC[B[4]] = B[1]] = B[2]
 -                                              delete _SHORTCUTDEFAULT[B[1]]
 -                                      } else {
 -                                              
_SHORTCUTWSTRUC[_SHORTCUTRSTRUC[B[4]] = B[1]] = B[2]
 -                                              _SHORTCUTDEFAULT[B[1]] = B[6]
 -                                      }
 -                              }
 -                      } else {
 -                              _fatal("_shortcut.init: _shortcut_struc: syntax 
error: `" _SHRTCUTA0[q] "'")
 -                      }
 -              }
 -              _SHRTCUTA1[""]
 -              delete _SHRTCUTA1[""]
 -              _shortcut_fpath = 
"\\\\localhost\\eGAWK\\LIB\\_shortcut\\_shortcut.exe"
 -      }
 -
 -      function _shortcut_nerr(t, s, A)
 -      {
 -              if (match(t, /\x0ASystem error 
(-?[0-9]+)[^\x0D\x0A]*[\x0D\x0A]+([^\x0D\x0A]+)/, A)) {
 -                      ERRNO = ((A[1] in _SHORTCUTERR ? _SHORTCUTERR[A[1]] : 
(A[2] in _SHORTCUTERR ? _SHORTCUTERR[A[2]] : tolower(gensub(/^(The 
)?(((.*)\.$)|(.*[^\.]$))/, "\\4\\5", "G", A[2])) "(" A[1] ")"))) ((s ? ": `" s 
"'" : ""))
 -              } else {
 -                      return 1
 -              }
 -      }
 -
 -      function _split_regpath()
 -      {
 -              _rpp(" / /  / /   ")
 -              _rpp(" / /  / / huj  ")
 -              _rpp(" / /  / / huj /  ")
 -              _rpp(" / /  / / huj / pizda.TSR  ")
 -              _rpp(" / /  / / hklm  ")
 -              _rpp(" / /  / / hklm /  ")
 -              _rpp(" / /  / / hklm / huj ")
 -              _rpp(" / /  / / hklm / huj / ")
 -              _rpp(" / /  / / hklm / huj / \tpizda.TSR  ")
 -              _conl()
 -              
_conl("########################################################################################")
 -              _conl()
 -              _rpp(" / /  / / hklm / software / altiris /  fi le . ex t ")
 -              _rpp(" / / . / / hkcr / software / altiris /  fi le . ex t ")
 -              _rpp(" / / ? / / hKcU / software / altiris /  fi le . ex t ")
 -              _rpp(" / / lOcAlHoSt / / hKu / software / altiris /  fi le . ex 
t ")
 -              _rpp(" / / ho st / / hKcc / software / altiris /  fi le . ex t 
")
 -              _rpp(" / / ho st / / hKPd / software / altiris /  fi le . ex t 
")
 -              _conl()
 -              
_conl("########################################################################################")
 -              _conl()
 -      }
 -
 -      function _splitpath_test()
 -      {
 -              _conl()
 -              
_conl("########################################################################################")
 -              _conl()
 -              _fpp("  ")
 -              _fpp(" fi le . ex t ")
 -              _fpp(" di r0 / / ")
 -              _fpp(" di r0 / / fi le . ex t ")
 -              _fpp(" / ")
 -              _fpp(" / fi le . ex t ")
 -              _fpp(" / di r0 / /  ")
 -              _fpp(" / di r0 / / fi le . ex t ")
 -              _conl()
 -              
_conl("########################################################################################")
 -              _conl()
 -              _fpp(" c : ")
 -              _fpp(" c : fi le . ex t ")
 -              _fpp(" c : di r0 / / ")
 -              _fpp(" c : di r0 / / fi le . ex t ")
 -              _fpp(" c : / / ")
 -              _fpp(" c : / / fi le . ex t ")
 -              _fpp(" c : / / di r0 / /  ")
 -              _fpp(" c : / / di r0 / / fi le . ex t ")
 -              _conl()
 -              
_conl("########################################################################################")
 -              _conl()
 -              _fpp(" / /  ")
 -              _fpp(" / / ho st . hs t ")
 -              _fpp(" / / ho st / /  ")
 -              _fpp(" / / ho st / / fi le . ex t ")
 -              _fpp(" / / ho st / / di r0 / / ")
 -              _fpp(" / / ho st / / di r0 / / fi le . ex t ")
 -              _conl()
 -              
_conl("########################################################################################")
 -              _conl()
 -              _fpp(" / / ho st / / c : ")
 -              _fpp(" / / ho st / / c : fi le . ex t ")
 -              _fpp(" / / ho st / / c : di r0 / / ")
 -              _fpp(" / / ho st / / c : di r0 / / fi le . ex t ")
 -              _fpp(" / / ho st / / c : / / ")
 -              _fpp(" / / ho st / / c : / / fi le . ex t ")
 -              _fpp(" / / ho st / / c : / / di r0 / / ")
 -              _fpp(" / / ho st / / c : / / di r0 / / fi le . ex t ")
 -              _conl()
 -              
_conl("########################################################################################")
 -              _conl()
 -              _fpp(" http : / / / ")
 -              _fpp(" http : / / / si te . ex t ")
 -              _fpp(" http : / / / si te / /  ")
 -              _fpp(" http : / / / si te / / fi le . ex t ")
 -              _fpp(" http : / / / si te / / di r0 / / ")
 -              _fpp(" http : / / / si te / / di r0 / / fi le . ex t ")
 -              _conl()
 -              
_conl("########################################################################################")
 -              _conl()
 -              _fpp(" ftp : / / / : po rt ")
 -              _fpp(" ftp : / / / si te . ex t : po rt ")
 -              _fpp(" ftp : / / / si te : po rt / /  ")
 -              _fpp(" ftp : / / / si te : po rt / / fi le . ex t ")
 -              _fpp(" ftp : / / / si te : po rt / / di r0 / / ")
 -              _fpp(" ftp : / / / si te : po rt / / di r0 / / fi le . ex t ")
 -              _conl()
 -              _conl("##  //.  
######################################################################################")
 -              _conl()
 -              _fpp(" / / . ")
 -              _fpp(" / / . / / ")
 -              _fpp(" / / . / / com 56 ")
 -              _fpp(" / / . / / com 56 / / ")
 -              _fpp(" / / . / / c : ")
 -              _fpp(" / / . / / c : / / ")
 -              _fpp(" / / . / / c :  com 56 ")
 -              _fpp(" / / . / / c :  com 56 / / ")
 -              _fpp(" / / . / / c : / / com 56 ")
 -              _fpp(" / / . / / c : / / com 56 / / ")
 -              _conl()
 -              _conl("##  //?  
######################################################################################")
 -              _conl()
 -              _fpp(" / / ? ")
 -              _fpp(" / / ? / / ")
 -              _fpp(" / / ? / / com 56 ")
 -              _fpp(" / / ? / / com 56 / / ")
 -              _fpp(" / / ? / / c : ")
 -              _fpp(" / / ? / / c : / / ")
 -              _fpp(" / / ? / / c :  com 56 ")
 -              _fpp(" / / ? / / c :  com 56 / / ")
 -              _fpp(" / / ? / / c : / / com 56 ")
 -              _fpp(" / / ? / / c : / / com 56 / / ")
 -              _conl()
 -              
_conl("########################################################################################")
 -              _conl()
 -              _fpp(" / /  /  ")
 -              _fpp(" / /  / . hs t ")
 -              _fpp(" / /  / / fi le . ex t ")
 -              _fpp(" / /  / / di r0 / / ")
 -              _fpp(" / /  / / di r0 / / di r1 / fi le . ex t ")
 -              _fpp(" / /  / / c : ")
 -              _fpp(" / /  / / c : fi le . ex t ")
 -              _fpp(" / /  / / c : di r0 / / ")
 -              _fpp(" / /  / / c : di r0 / / fi le . ex t ")
 -              _fpp(" / /  / / c : / / ")
 -              _fpp(" / /  / / c : / / fi le . ex t ")
 -              _fpp(" / /  / / c : / / di r0 / / ")
 -              _fpp(" / /  / / c : / / di r0 / / fi le . ex t ")
 -              _conl()
 -              
_conl("########################################################################################")
 -              _conl()
 -              return 
 -      }
  
 -      function _splitstr(A, t, r)
 -      {
 -              if (_istr(t)) {
 -                      if (_splitstr_i0(A, t) > 0) {
 -                              return _splitstrp0
 -                      }
 -                      if (_istr(r)) {
 -                              return _splitstr_i0(A, r)
 -                      }
 -              } else {
 -                      if (it == "A") {
 -                              if (length(t) > 0) {
 -                                      _movarr(A, t)
 -                                      return (0 - length(A))
 -                              }
 -                      }
 -                      _istr(r)
 -              }
 -              if (it == "A") {
 -                      if (length(r) > 0) {
 -                              _movarr(A, r)
 -                              return (0 - length(A))
 -                      }
 -              }
 -      }
  
 -      function _splitstr_i0(A, t, C)
 -      {
 -              if (2 > (_splitstrq0 = patsplit(t, _SPLITSTRA0, 
/([^,\xB4]*\xB4.)*[^,\xB4]*/))) {
 -                      _splitstrq0 = split(gensub(/\xB4(.)/, "\\1", "G", t), 
_SPLITSTRA0, "")
 -              }
 -              delete A
 -              _splitstri0 = _splitstrp0 = 0
 -              while (_splitstri0++ < _splitstrq0) {
 -                      if ((t = gensub(/\xB4(.)/, "\\1", "G", 
_SPLITSTRA0[_splitstri0])) in C || t == "") {
 -                              continue
 -                      }
 -                      C[A[++_splitstrp0] = t]
 -              }
 -              return _splitstrp0
 -      }
  
 -      function _strtorexp(t)
 -      {
 -              gsub(/[\\\.\?\*\+\-\(\)\{\}\[\]\^\$\/\|]/, "\\\\&", t)
 -              t = split(t, _TOREXP_STRA, /[\x00-\x1F]/, _TOREXP_STRB)
 -              _torexp_strt0 = ""
 -              for (_torexp_stri0 = 1; _torexp_stri0 < t; _torexp_stri0++) {
 -                      _torexp_strt0 = _torexp_strt0 
_TOREXP_STRA[_torexp_stri0] "\\" _QASC[_TOREXP_STRB[_torexp_stri0]]
 -              }
 -              return (_torexp_strt0 _TOREXP_STRA[_torexp_stri0])
 -      }
  
 -      function _subseqoff(r, B)
 -      {
 -              patsplit(r, B, /\x84[^\x94]*\x94/)
 -              return gensub(/\x84[^\x94]*\x94/, "\204", "G", r)
 -      }
  
 -      function _subseqon(B, r, F, f, s, e, q, i, A)
 -      {
 -              q = split(r, A, /\x84/)
 -              r = ""
 -              f = F[""]
 -              for (i = 1; i < q; i++) {
 -                      s = substr(e = B[i], 2, 1)
 -                      s = (s in F ? F[s] : F[""])
 -                      r = r (@f(A[i])) (@s(substr(e, 3, length(e) - 3)))
 -              }
 -              return (r (@f(A[i])))
 -      }
  
 -      function _sysinfo(D, h)
 -      {
 -              h = "wmic /NODE: \"" h "\" OS 2>NUL"
 -              if (split(_cmd(h), _SYSINFOA0, /[\x0D\x0A]+/) == 3) {
 -                      _sysinfol0 = length(h = _SYSINFOA0[2]) + 1
 -                      _sysinfoq0 = _sysinfoq1 = split(_SYSINFOA0[1], 
_SYSINFOA0, / +/, _SYSINFOB0)
 -                      while (--_sysinfoq0 > 0) {
 -                              D[_sysinfof0] = gensub(/^ +| +$/, "", "G", 
substr(h, _sysinfol0 = _sysinfol0 - (_sysinfol1 = length(_sysinfof0 = 
_SYSINFOA0[_sysinfoq0]) + length(_SYSINFOB0[_sysinfoq0])), _sysinfol1))
 -                      }
 -                      return (_sysinfoq1 - 1)
 -              }
 -      }
  
 -      function _tOBJ(c, t, P)
 -      {
 -              switch (c) {
 -              case "_lib_CMDLN":
 -                      return t
 -              case "_lib_APPLY":
 -                      return 
 -              case "_lib_HELP":
 -                      return 
 -              case "_lib_NAMEVER":
 -                      return _ln("_tOBJ 3.0")
 -              case "_lib_BEGIN":
 -                      return 
 -              case "_lib_END":
 -                      return 
 -              case "_lib_CLEANUP":
 -                      return _tOBJ_CLEANUP()
 +function _sysinfo(D, h)
 +{
 +      h = "wmic /NODE: \"" h "\" OS 2>NUL"
 +      if (split(_cmd(h), _SYSINFOA0, /[\x0D\x0A]+/) == 3) {
 +              _sysinfol0 = length(h = _SYSINFOA0[2]) + 1
 +              _sysinfoq0 = _sysinfoq1 = split(_SYSINFOA0[1], _SYSINFOA0, / 
+/, _SYSINFOB0)
 +              while (--_sysinfoq0 > 0) {
 +                      D[_sysinfof0] = gensub(/^ +| +$/, "", "G", substr(h, 
_sysinfol0 = _sysinfol0 - (_sysinfol1 = length(_sysinfof0 = 
_SYSINFOA0[_sysinfoq0]) + length(_SYSINFOB0[_sysinfoq0])), _sysinfol1))
                }
 +              return (_sysinfoq1 - 1)
        }
 +}
  
 -      function _tOBJ_CLEANUP(p)
 -      {
 -              for (p in UIDSDEL) {
 -                      delete _ptr[p]
 -                      delete _tPREV[p]
 -                      delete _tPARENT[p]
 -                      delete _tNEXT[p]
 +#########################################################
 +function _tOBJ(c, t, P)
 +{
 +      switch (c) {
 +      case "_lib_CMDLN":
 +              #___________________________________________________________
 +              return t
 +              #___________________________________________________________
 +      case "_lib_APPLY":
 +              return 
 +              #___________________________________________________________
 +      case "_lib_HELP":
 +              return 
 +              #___________________________________________________________
 +      case "_lib_NAMEVER":
 +              return _ln("_tOBJ 3.0")
 +              #___________________________________________________________
 +      case "_lib_BEGIN":
 +              return 
 +              #___________________________________________________________
 +      case "_lib_END":
 +              return 
 +              #___________________________________________________________
 +      case "_lib_CLEANUP":
 +              return _tOBJ_CLEANUP()
 +      }
 +}
 +
 +#_______________________________________________________________________
 +function _tOBJ_CLEANUP(p)
 +{
 +      for (p in UIDSDEL) {
 +              delete _ptr[p]
 +              delete _tPREV[p]
 +              delete _tPARENT[p]
 +              delete _tNEXT[p]
 +              delete _tFCHLD[p]
 +              delete _tQCHLD[p]
 +              delete _tLCHLD[p]
 +              delete _TMP0[p]
 +              delete _TMP1[p]
 +              delete _tLINK[p]
 +              delete _tCLASS[p]
 +      }
 +}
 +
 +#_______________________________________________________________________
 +function _tabtospc(t, ts, xc, a, c, n, A, B)
 +{
 +      if (! ts) {
 +              ts = _TAB_STEP_DEFAULT
 +      }
 +      c = split("." t, A, /\t+/, B)
 +      A[1] = substr(A[1], 2)
 +      t = ""
 +      for (n = 1; n <= c; n++) {
 +              t = t A[n] _getchrln(" ", (xc = length(B[n]) * ts + int((a = xc 
+ length(A[n])) / ts) * ts) - a)
 +      }
 +      return t
 +}
 +
 
+#___________________________________________________________________________________
 
+####################################################################################
 +
 +
 +
 +
 +
 +
 +
 +function _tapi(p, f, p0, p1, p2, p3, c)
 +{
 +      c = p
 +      do {
 +              if (f in _[c]["API"]) {
 +                      f = _[c]["API"][f]
 +                      return @f(p, p0, p1, p2, p3)
 +              }
 +              c = _[c]["CLASS"]
 +      } while ("CLASS" in _[c])
 +}
 +
 +#_____________________________________________________________________________
 +function _tbframe(f, p, p0, p1)
 +{
 +      delete _t_ENDF[++_t_ENDF[0]]
 +      f = (p ? _tbframe_i0(f, p, p0, p1) : "")
 +      --_t_ENDF[0]
 +      return f
 +}
 +
 +#___________________________________________________________
 +function _tbframe_i0(f, p, p0, p1, a)
 +{
 +      while (p in _tLINK) {
 +              p = _tLINK[p]
 +      }
 +      return ((p in _tLCHLD ? _tmbframe(f, _tLCHLD[p], p0, p1) : @f(p, p0, 
p1)))
 +}
 +
 +#_______________________________________________________________________
 +function _tbframex(f, p, p0, p1)
 +{
 +      delete _t_ENDF[++_t_ENDF[0]]
 +      f = (p ? _tbframex_i0(f, p, p0, p1) : "")
 +      --_t_ENDF[0]
 +      return f
 +}
 +
 +#___________________________________________________________
 +function _tbframex_i0(f, p, p0, p1)
 +{
 +      while (p in _tLINK) {
 +              p = _tLINK[p]
 +      }
 +      return ((p in _tLCHLD ? _tmbframex(f, _tLCHLD[p], p0, p1) : @f(p, p0, 
p1)))
 +}
 +
 +#_____________________________________________________________________________
 +function _tbpass(f, p, p0, p1)
 +{
 +      delete _t_ENDF[++_t_ENDF[0]]
 +      f = (p ? _tbpass_i0(f, p, p0, p1) : "")
 +      --_t_ENDF[0]
 +      return f
 +}
 +
 +#___________________________________________________________
 +function _tbpass_i0(f, p, p0, p1, a)
 +{
 +      while (p in _tLINK) {
 +              p = _tLINK[p]
 +      }
 +      return ((p in _tLCHLD ? _tmbpass(f, _tLCHLD[p], p0, p1) : @f(p, p0, 
p1)))
 +}
 +
 +#_____________________________________________________________________________
 +function _tbpassx(f, p, p0, p1)
 +{
 +      delete _t_ENDF[++_t_ENDF[0]]
 +      f = (p ? _tbpassx_i0(f, p, p0, p1) : "")
 +      --_t_ENDF[0]
 +      return f
 +}
 +
 +#___________________________________________________________
 +function _tbpassx_i0(f, p, p0, p1)
 +{
 +      while (p in _tLINK) {
 +              p = _tLINK[p]
 +      }
 +      return ((p in _tLCHLD ? _tmbpassx(f, _tLCHLD[p], p0, p1) : @f(p, p0, 
p1)))
 +}
 +
 +#_____________________________________________________________________________
 +function _tbrochld(p, f, pp)
 +{
 +      if (p) {
 +              if (p in _tFCHLD) {
 +                      f = _tFCHLD[p]
                        delete _tFCHLD[p]
 -                      delete _tQCHLD[p]
                        delete _tLCHLD[p]
 -                      delete _TMP0[p]
 -                      delete _TMP1[p]
 -                      delete _tLINK[p]
 -                      delete _tCLASS[p]
 -              }
 -      }
 -
 -      function _tabtospc(t, ts, xc, a, c, n, A, B)
 -      {
 -              if (! ts) {
 -                      ts = _TAB_STEP_DEFAULT
 -              }
 -              c = split("." t, A, /\t+/, B)
 -              A[1] = substr(A[1], 2)
 -              t = ""
 -              for (n = 1; n <= c; n++) {
 -                      t = t A[n] _getchrln(" ", (xc = length(B[n]) * ts + 
int((a = xc + length(A[n])) / ts) * ts) - a)
 -              }
 -              return t
 -      }
 -
 -      function _tapi(p, f, p0, p1, p2, p3, c)
 -      {
 -              c = p
 -              do {
 -                      if (f in _[c]["API"]) {
 -                              f = _[c]["API"][f]
 -                              return @f(p, p0, p1, p2, p3)
 -                      }
 -                      c = _[c]["CLASS"]
 -              } while ("CLASS" in _[c])
 -      }
 -
 -      function _tbframe(f, p, p0, p1)
 -      {
 -              delete _t_ENDF[++_t_ENDF[0]]
 -              f = (p ? _tbframe_i0(f, p, p0, p1) : "")
 -              --_t_ENDF[0]
 -              return f
 -      }
 -
 -      function _tbframe_i0(f, p, p0, p1, a)
 -      {
 -              while (p in _tLINK) {
 -                      p = _tLINK[p]
 -              }
 -              return ((p in _tLCHLD ? _tmbframe(f, _tLCHLD[p], p0, p1) : 
@f(p, p0, p1)))
 -      }
 -
 -      function _tbframex(f, p, p0, p1)
 -      {
 -              delete _t_ENDF[++_t_ENDF[0]]
 -              f = (p ? _tbframex_i0(f, p, p0, p1) : "")
 -              --_t_ENDF[0]
 -              return f
 -      }
 -
 -      function _tbframex_i0(f, p, p0, p1)
 -      {
 -              while (p in _tLINK) {
 -                      p = _tLINK[p]
 -              }
 -              return ((p in _tLCHLD ? _tmbframex(f, _tLCHLD[p], p0, p1) : 
@f(p, p0, p1)))
 -      }
 -
 -      function _tbpass(f, p, p0, p1)
 -      {
 -              delete _t_ENDF[++_t_ENDF[0]]
 -              f = (p ? _tbpass_i0(f, p, p0, p1) : "")
 -              --_t_ENDF[0]
 -              return f
 -      }
 -
 -      function _tbpass_i0(f, p, p0, p1, a)
 -      {
 -              while (p in _tLINK) {
 -                      p = _tLINK[p]
 -              }
 -              return ((p in _tLCHLD ? _tmbpass(f, _tLCHLD[p], p0, p1) : @f(p, 
p0, p1)))
 -      }
 -
 -      function _tbpassx(f, p, p0, p1)
 -      {
 -              delete _t_ENDF[++_t_ENDF[0]]
 -              f = (p ? _tbpassx_i0(f, p, p0, p1) : "")
 -              --_t_ENDF[0]
 -              return f
 -      }
 -
 -      function _tbpassx_i0(f, p, p0, p1)
 -      {
 -              while (p in _tLINK) {
 -                      p = _tLINK[p]
 -              }
 -              return ((p in _tLCHLD ? _tmbpassx(f, _tLCHLD[p], p0, p1) : 
@f(p, p0, p1)))
 -      }
 -
 -      function _tbrochld(p, f, pp)
 -      {
 -              if (p) {
 -                      if (p in _tFCHLD) {
 -                              f = _tFCHLD[p]
 -                              delete _tFCHLD[p]
 -                              delete _tLCHLD[p]
 -                              if (p in _tPARENT) {
 -                                      pp = _tPARENT[p]
 -                                      delete _tPARENT[p]
 -                                      if (p in _tPREV) {
 -                                              _tNEXT[_tPREV[f] = _tPREV[p]] = 
f
 -                                              delete _tPREV[p]
 -                                      } else {
 -                                              _tFCHLD[pp] = f
 -                                      }
 -                                      for (; f in _tNEXT; f = _tNEXT[f]) {
 -                                              _tPARENT[f] = pp
 -                                      }
 -                                      _tPARENT[f] = pp
 -                                      if (p in _tNEXT) {
 -                                              _tPREV[_tNEXT[f] = _tNEXT[p]] = 
f
 -                                              delete _tNEXT[p]
 -                                      } else {
 -                                              _tLCHLD[pp] = f
 -                                      }
 -                                      _tQCHLD[pp] = _tQCHLD[pp] + _tQCHLD[p] 
- 1
 -                                      delete _tQCHLD[p]
 -                                      return f
 +                      if (p in _tPARENT) {
 +                              pp = _tPARENT[p]
 +                              delete _tPARENT[p]
 +                              if (p in _tPREV) {
 +                                      _tNEXT[_tPREV[f] = _tPREV[p]] = f
 +                                      delete _tPREV[p]
                                } else {
 -                                      delete _tQCHLD[p]
 -                                      if (p in _tPREV) {
 -                                              _tNEXT[_tPREV[f] = _tPREV[p]] = 
f
 -                                              delete _tPREV[p]
 -                                      }
 -                                      for (; f in _tNEXT; f = _tNEXT[f]) {
 -                                              delete _tPARENT[f]
 -                                      }
 -                                      delete _tPARENT[f]
 -                                      if (p in _tNEXT) {
 -                                              _tPREV[_tNEXT[f] = _tNEXT[p]] = 
f
 -                                              delete _tNEXT[p]
 -                                      }
 -                                      return f
 +                                      _tFCHLD[pp] = f
                                }
 -                      } else {
 -                              if (p in _tPARENT) {
 -                                      pp = _tPARENT[p]
 -                                      delete _tPARENT[p]
 -                                      if (p in _tPREV) {
 -                                              if (p in _tNEXT) {
 -                                                      _tNEXT[_tPREV[f] = 
_tPREV[p]] = f = _tNEXT[p]
 -                                                      delete _tNEXT[p]
 -                                              } else {
 -                                                      delete 
_tNEXT[_tLCHLD[pp] = _tPREV[p]]
 -                                              }
 -                                              delete _tPREV[p]
 -                                              _tQCHLD[pp]--
 -                                      } else {
 -                                              if (p in _tNEXT) {
 -                                                      delete 
_tPREV[_tFCHLD[pp] = _tNEXT[p]]
 -                                                      delete _tNEXT[p]
 -                                                      _tQCHLD[pp]--
 -                                              } else {
 -                                                      delete _tFCHLD[pp]
 -                                                      delete _tLCHLD[pp]
 -                                                      delete _tQCHLD[pp]
 -                                              }
 -                                      }
 -                              } else {
 -                                      if (p in _tPREV) {
 -                                              if (p in _tNEXT) {
 -                                                      _tNEXT[_tPREV[f] = 
_tPREV[p]] = f = _tNEXT[p]
 -                                                      delete _tNEXT[p]
 -                                              } else {
 -                                                      delete _tNEXT[_tPREV[p]]
 -                                              }
 -                                              delete _tPREV[p]
 -                                      } else {
 -                                              if (p in _tNEXT) {
 -                                                      delete _tPREV[_tNEXT[p]]
 -                                                      delete _tNEXT[p]
 -                                              }
 -                                      }
 +                              for (; f in _tNEXT; f = _tNEXT[f]) {
 +                                      _tPARENT[f] = pp
                                }
 -                      }
 -              }
 -              return p
 -      }
 -
 -      function _tbrunframe(f, p, p0, p1)
 -      {
 -              return _tbframe((f ? f : "_trunframe_i0"), p, p0, p1)
 -      }
 -
 -      function _tbrunframex(f, p, p0, p1)
 -      {
 -              return _tbframex((f ? f : "_trunframe_i0"), p, p0, p1)
 -      }
 -
 -      function _tbrunpass(f, p, p0, p1)
 -      {
 -              return _tbpass((f ? f : "_trunframe_i0"), p, p0, p1)
 -      }
 -
 -      function _tbrunpassx(f, p, p0, p1)
 -      {
 -              return _tbpassx((f ? f : "_trunframe_i0"), p, p0, p1)
 -      }
 -
 -      function _tdel(p, i)
 -      {
 -              if (p in _) {
 -                      _texclude(p)
 -                      for (i in _ptr[p]) {
 -                              if (isarray(_ptr[p][i])) {
 -                                      _tdel_i1(_ptr[p][i])
 +                              _tPARENT[f] = pp
 +                              if (p in _tNEXT) {
 +                                      _tPREV[_tNEXT[f] = _tNEXT[p]] = f
 +                                      delete _tNEXT[p]
                                } else {
 -                                      if (i = _ptr[p][i]) {
 -                                              _tdel(i)
 -                                      }
 +                                      _tLCHLD[pp] = f
                                }
 -                      }
 -                      if (p in _tFCHLD) {
 -                              i = _tFCHLD[p]
 -                              do {
 -                                      i = ((i in _tNEXT ? _tNEXT[i] : "")) 
_tdel_i0(i)
 -                              } while (i)
 -                      }
 -                      delete _[p]
 -                      _UIDSDEL[p]
 -              }
 -      }
 -
 -      function _tdel_i0(p, i)
 -      {
 -              for (i in _ptr[p]) {
 -                      if (isarray(_ptr[p][i])) {
 -                              _tdel_i1(_ptr[p][i])
 +                              _tQCHLD[pp] = _tQCHLD[pp] + _tQCHLD[p] - 1
 +                              delete _tQCHLD[p]
 +                              return f
                        } else {
 -                              if (i = _ptr[p][i]) {
 -                                      _tdel(i)
 +                              delete _tQCHLD[p]
 +                              if (p in _tPREV) {
 +                                      _tNEXT[_tPREV[f] = _tPREV[p]] = f
 +                                      delete _tPREV[p]
                                }
 -                      }
 -              }
 -              if (p in _tFCHLD) {
 -                      i = _tFCHLD[p]
 -                      do {
 -                              i = ((i in _tNEXT ? _tNEXT[i] : "")) _tdel_i0(i)
 -                      } while (i)
 -              }
 -              delete _[p]
 -              _UIDSDEL[p]
 -      }
 -
 -      function _tdel_i1(A, i)
 -      {
 -              for (i in A) {
 -                      if (isarray(A[i])) {
 -                              _tdel_i1(A[i])
 -                      } else {
 -                              if (i = A[i]) {
 -                                      _tdel(i)
 +                              for (; f in _tNEXT; f = _tNEXT[f]) {
 +                                      delete _tPARENT[f]
                                }
 +                              delete _tPARENT[f]
 +                              if (p in _tNEXT) {
 +                                      _tPREV[_tNEXT[f] = _tNEXT[p]] = f
 +                                      delete _tNEXT[p]
 +                              }
 +                              return f
                        }
 -              }
 -      }
 -
 -      function _tdelete(p, v)
 -      {
 -              if (p) {
 -                      _wLCHLD(_tDELPTR, p)
 -              }
 -              return v
 -      }
 -
 -      function _tdelitem(p)
 -      {
 -              if (p) {
 -                      if ("HOST" in _PTR[p] && "ITEMNAME" in _[p]) {
 -                              return 
_wLCHLD(_PTR[_PTR[p]["HOST"]]["ITEM"][_[p]["ITEMNAME"]], p)
 -                      }
 -                      _tdelete(p)
 -                      return p
 -              }
 -      }
 -
 -      function _tend(a, b)
 -      {
 -              if (b == "") {
 -                      return (_t_ENDF[_t_ENDF[0]] = a)
                } else {
 -                      return (_t_ENDF[_t_ENDF[0] + a] = b)
 -              }
 -      }
 -
 -      function _texclude(p, v, pp)
 -      {
 -              if (p in _) {
                        if (p in _tPARENT) {
                                pp = _tPARENT[p]
                                delete _tPARENT[p]

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog        |    5 +++++
 profile.c        |   16 +++++++++++++---
 test/ChangeLog   |    4 ++++
 test/profile5.ok |    2 +-
 4 files changed, 23 insertions(+), 4 deletions(-)


hooks/post-receive
-- 
gawk



reply via email to

[Prev in Thread] Current Thread [Next in Thread]