Use HTML for Holyc files as well

This commit is contained in:
Reimar 2024-03-24 22:24:44 +01:00
parent f2549e8d64
commit 152be33191
Signed by: Reimar
GPG Key ID: 93549FA07F0AE268
1408 changed files with 308053 additions and 748 deletions

48
Copy.HC
View File

@ -4,11 +4,7 @@ U8 *FilenameToURL(U8 *filename, I64 line)
{
filename[StrLen(filename) - 2] = NULL;
U8 *htmlext = "";
if (StrMatch(".DD", filename))
htmlext = ".HTML";
return MStrPrint("/Wb%s%s#l%d", filename + 2, htmlext, line);
return MStrPrint("/Wb%s.HTML#l%d", filename + 2, line);
}
U8 *LinkCvt(U8 *link_st)
@ -56,7 +52,7 @@ CDirEntry *start_entry = FilesFind(
CDirEntry *entry = start_entry;
U8 *html_header =
"<!DOCTYPEhtml>\n"
"<!DOCTYPE html>\n"
"<html lang=\"en\">\n"
"<head>\n"
"<meta charset=\"UTF-8\">\n"
@ -73,34 +69,26 @@ Del("C:/Home/Src", FALSE, TRUE);
do {
U8 *new_name = MAlloc(2 * StrLen(entry->full_name));
U8 *new_name = MAlloc(2 *StrLen(entry->full_name));
StrPrint(new_name, "/Home/Src%s", entry->full_name + 2);
if (StrMatch(".DD", entry->full_name)) {
FileExtRem(new_name);
CatPrint(new_name, ".DD.HTML");
} else {
new_name[StrLen(new_name) - 2] = NULL;
}
new_name[StrLen(new_name) - 2] = NULL;
CatPrint(new_name, ".HTML");
if (StrMatch(".DD", entry->full_name)) {
ToHtml(
entry->full_name,
new_name,
html_header,
body_header,
NULL,
NULL,
80,
TRUE,
&LinkCvt,
);
ToHtml(
entry->full_name,
new_name,
html_header,
body_header,
NULL,
NULL,
80,
TRUE,
&LinkCvt,
);
Print("%s -> %s\n", entry->full_name, new_name);
Print("%s -> %s\n", entry->full_name, new_name);
} else {
Copy(entry->full_name, new_name);
}
} while (entry = entry->next);
DirTreeDel(start_entry);

View File

@ -23,24 +23,31 @@
</xsl:variable>
<xsl:choose>
<xsl:when test="contains($name, '.DD.HTML')">
<xsl:when test="contains($name, '.HTML')">
<a href="{$name}" style="color: #5555ff;"><xsl:value-of select="substring-before($name, '.HTML')"/></a>
<br/>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="contains($name, '.')">
<a href="{$name}" style="color: #5555ff;"><xsl:value-of select="."/></a>
</xsl:when>
<xsl:when test="contains($name, '.HC')"></xsl:when>
<xsl:otherwise>
<a href="{$name}" style="color: #aa00aa;">+] <xsl:value-of select="."/></a>
<xsl:choose>
<xsl:when test="contains($name, '.')">
<a href="{$name}" style="color: #5555ff;"><xsl:value-of select="."/></a>
<br/>
</xsl:when>
<xsl:otherwise>
<a href="{$name}" style="color: #aa00aa;">+] <xsl:value-of select="."/></a>
<br/>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
<br/>
</xsl:for-each>
</pre>
</body>

View File

@ -0,0 +1,283 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF0>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;File/Cmd Line (Typically);Cmd Line (Typically)&quot;</span><span class=cF0>
<a name="l2"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF5>DBlk</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> blk,</span><span class=cF1>Bool</span><span class=cF0> write=</span><span class=cF3>FALSE</span><span class=cF0>)
<a name="l3"></a>{</span><span class=cF2>//Dump disk block. Optionally, write.</span><span class=cF0>
<a name="l4"></a></span><span class=cF2>//If you set write to TRUE, the block will</span><span class=cF0>
<a name="l5"></a> </span><span class=cF2>//be written when you press &lt;ESC&gt;.</span><span class=cF0>
<a name="l6"></a> </span><span class=cF2>//See </span><a href="/Wb/Demo/Dsk/DskRaw.HC.HTML#l1"><span class=cF4>::/Demo/Dsk/DskRaw.HC</span></a><span class=cF2>.</span><span class=cF0>
<a name="l7"></a> </span><span class=cF1>U8</span><span class=cF0> *buf=</span><span class=cF5>MAlloc</span><span class=cF0>(</span><span class=cF3>BLK_SIZE</span><span class=cF0>);
<a name="l8"></a>
<a name="l9"></a> </span><span class=cF5>BlkRead</span><span class=cF0>(</span><span class=cF5>Fs</span><span class=cF0>-&gt;cur_dv,buf,blk,1);
<a name="l10"></a> </span><span class=cF5>DocD</span><span class=cF0>(buf,</span><span class=cF3>BLK_SIZE</span><span class=cF0>);
<a name="l11"></a> </span><span class=cF1>if</span><span class=cF0> (write) </span><span class=cF7>{</span><span class=cF0>
<a name="l12"></a> </span><span class=cF6>&quot;Edit and press &lt;ESC&gt; to write or &lt;SHIFT-ESC&gt;\n&quot;</span><span class=cF0>;
<a name="l13"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>View</span><span class=cF0>) {
<a name="l14"></a> </span><span class=cF6>&quot;Write\n&quot;</span><span class=cF0>;
<a name="l15"></a> </span><span class=cF5>BlkWrite</span><span class=cF0>(</span><span class=cF5>Fs</span><span class=cF0>-&gt;cur_dv,buf,blk,1);
<a name="l16"></a> }
<a name="l17"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l18"></a> </span><span class=cF1>return</span><span class=cF0> buf;
<a name="l19"></a>}
<a name="l20"></a>
<a name="l21"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF5>DClus</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> c,</span><span class=cF1>Bool</span><span class=cF0> write=</span><span class=cF3>FALSE</span><span class=cF0>,</span><span class=cF9>I64</span><span class=cF0> num=0)
<a name="l22"></a>{</span><span class=cF2>//Dump disk clus. Optionally, write.</span><span class=cF0>
<a name="l23"></a></span><span class=cF2>//If you set write to TRUE, the clus will</span><span class=cF0>
<a name="l24"></a> </span><span class=cF2>//be written when you press &lt;ESC&gt;.</span><span class=cF0>
<a name="l25"></a> </span><span class=cF2>//See </span><a href="/Wb/Demo/Dsk/DskRaw.HC.HTML#l1"><span class=cF4>::/Demo/Dsk/DskRaw.HC</span></a><span class=cF2>.</span><span class=cF0>
<a name="l26"></a> </span><span class=cF2>//Do </span><a href="/Wb/Kernel/BlkDev/DskDirB.HC.HTML#l102"><span class=cF4>Dir</span></a><span class=cF2>(&quot;*&quot;,TRUE); to get clus numbers of files.</span><span class=cF0>
<a name="l27"></a> </span><span class=cF1>U8</span><span class=cF0> *buf=</span><span class=cF5>MAlloc</span><span class=cF0>(</span><span class=cF5>Fs</span><span class=cF0>-&gt;cur_dv-&gt;spc&lt;&lt;</span><span class=cF3>BLK_SIZE_BITS</span><span class=cF0>);
<a name="l28"></a> c=</span><span class=cF5>ClusNumNext</span><span class=cF0>(</span><span class=cF5>Fs</span><span class=cF0>-&gt;cur_dv,c,num);
<a name="l29"></a> </span><span class=cF5>ClusRead</span><span class=cF0>(</span><span class=cF5>Fs</span><span class=cF0>-&gt;cur_dv,buf,c,1);
<a name="l30"></a> </span><span class=cF6>&quot;Clus:%X\n&quot;</span><span class=cF0>,c;
<a name="l31"></a> </span><span class=cF5>DocD</span><span class=cF0>(buf,</span><span class=cF5>Fs</span><span class=cF0>-&gt;cur_dv-&gt;spc&lt;&lt;</span><span class=cF3>BLK_SIZE_BITS</span><span class=cF0>);
<a name="l32"></a> </span><span class=cF1>if</span><span class=cF0> (write) </span><span class=cF7>{</span><span class=cF0>
<a name="l33"></a> </span><span class=cF6>&quot;Edit and press &lt;ESC&gt; to write or &lt;SHIFT-ESC&gt;\n&quot;</span><span class=cF0>;
<a name="l34"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>View</span><span class=cF0>) {
<a name="l35"></a> </span><span class=cF6>&quot;Write\n&quot;</span><span class=cF0>;
<a name="l36"></a> </span><span class=cF5>ClusWrite</span><span class=cF0>(</span><span class=cF5>Fs</span><span class=cF0>-&gt;cur_dv,buf,c,1);
<a name="l37"></a> }
<a name="l38"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l39"></a> </span><span class=cF1>return</span><span class=cF0> buf;
<a name="l40"></a>}
<a name="l41"></a>
<a name="l42"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF5>Dump</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *filename,</span><span class=cF1>Bool</span><span class=cF0> write=</span><span class=cF3>FALSE</span><span class=cF0>)
<a name="l43"></a>{</span><span class=cF2>//Dump file. Optionally, write.</span><span class=cF0>
<a name="l44"></a></span><span class=cF2>//If you set write to TRUE, the file will</span><span class=cF0>
<a name="l45"></a> </span><span class=cF2>//be written when you press &lt;ESC&gt;.</span><span class=cF0>
<a name="l46"></a> </span><span class=cF1>U8</span><span class=cF0> *buf;
<a name="l47"></a> </span><span class=cF9>I64</span><span class=cF0> size;
<a name="l48"></a> </span><span class=cF1>if</span><span class=cF0> (buf=</span><span class=cF5>FileRead</span><span class=cF7>(</span><span class=cF0>filename,&amp;size</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l49"></a> </span><span class=cF5>DocD</span><span class=cF0>(buf,size);
<a name="l50"></a> </span><span class=cF1>if</span><span class=cF0> (write) {
<a name="l51"></a> </span><span class=cF6>&quot;Edit and press &lt;ESC&gt; to write or &lt;SHIFT-ESC&gt;\n&quot;</span><span class=cF0>;
<a name="l52"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>View</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l53"></a> </span><span class=cF6>&quot;Write\n&quot;</span><span class=cF0>;
<a name="l54"></a> </span><span class=cF5>FileWrite</span><span class=cF0>(filename,buf,size);
<a name="l55"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l56"></a> }
<a name="l57"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l58"></a> </span><span class=cF1>return</span><span class=cF0> buf;
<a name="l59"></a>}
<a name="l60"></a>
<a name="l61"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>Copy</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *src_files_find_mask,</span><span class=cF1>U8</span><span class=cF0> *dst_files_find_mask=</span><span class=cF6>&quot;.&quot;</span><span class=cF0>)
<a name="l62"></a>{</span><span class=cF2>//Copy files.</span><span class=cF0>
<a name="l63"></a></span><span class=cF2>//If the name ends in &quot;.Z&quot;, it will</span><span class=cF0>
<a name="l64"></a> </span><span class=cF2>//be stored compressed. If not &quot;.Z&quot;</span><span class=cF0>
<a name="l65"></a> </span><span class=cF2>//it will be stored uncompressed.</span><span class=cF0>
<a name="l66"></a> </span><span class=cF1>Bool</span><span class=cF0> res=</span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l67"></a> </span><span class=cF9>CDirContext</span><span class=cF0> *dirc;
<a name="l68"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde,*tmpde1;
<a name="l69"></a> </span><span class=cF1>U8</span><span class=cF0> *st;
<a name="l70"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>tmpde1=</span><span class=cF5>FilesFind</span><span class=cF0>(src_files_find_mask,</span><span class=cF3>FUF_CLUS_ORDER</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0>)
<a name="l71"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l72"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>IsDir</span><span class=cF7>(</span><span class=cF0>dst_files_find_mask</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l73"></a> </span><span class=cF1>if</span><span class=cF0> (dirc=</span><span class=cF5>DirContextNew</span><span class=cF7>(</span><span class=cF0>dst_files_find_mask,</span><span class=cF3>TRUE</span><span class=cF7>)</span><span class=cF0>) {
<a name="l74"></a> tmpde=tmpde1;
<a name="l75"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde) </span><span class=cF7>{</span><span class=cF0>
<a name="l76"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>tmpde-&gt;attr &amp; </span><span class=cF3>RS_ATTR_DIR</span><span class=cF7>)</span><span class=cF0>) {
<a name="l77"></a> st=</span><span class=cF5>FileNameAbs</span><span class=cF0>(tmpde-&gt;name);
<a name="l78"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>CopySingle</span><span class=cF7>(</span><span class=cF0>tmpde-&gt;full_name,st</span><span class=cF7>)</span><span class=cF0>)
<a name="l79"></a> res=</span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l80"></a> </span><span class=cF5>Free</span><span class=cF0>(st);
<a name="l81"></a> }
<a name="l82"></a> tmpde=tmpde-&gt;next;
<a name="l83"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l84"></a> </span><span class=cF5>DirContextDel</span><span class=cF0>(dirc);
<a name="l85"></a> }
<a name="l86"></a> </span><span class=cF5>DirTreeDel</span><span class=cF0>(tmpde1);
<a name="l87"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l88"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l89"></a> </span><span class=cF5>DirTreeDel</span><span class=cF0>(tmpde1);
<a name="l90"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF5>CopySingle</span><span class=cF0>(src_files_find_mask,dst_files_find_mask);
<a name="l91"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l92"></a>}
<a name="l93"></a>
<a name="l94"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>Move</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *f1,</span><span class=cF1>U8</span><span class=cF0> *f2)
<a name="l95"></a>{</span><span class=cF2>//Move files from one location to another or rename.</span><span class=cF0>
<a name="l96"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Copy</span><span class=cF7>(</span><span class=cF0>f1,f2</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l97"></a> </span><span class=cF5>Del</span><span class=cF0>(f1);
<a name="l98"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l99"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l100"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l101"></a>}
<a name="l102"></a>
<a name="l103"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>CopyTree2</span><span class=cF0>(</span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde,</span><span class=cF9>I64</span><span class=cF0> src_dir_len,</span><span class=cF9>I64</span><span class=cF0> dst_dir_len,</span><span class=cF1>U8</span><span class=cF0> *dst_dir)
<a name="l104"></a>{
<a name="l105"></a> </span><span class=cF1>U8</span><span class=cF0> *st;
<a name="l106"></a> </span><span class=cF9>I64</span><span class=cF0> res=1;
<a name="l107"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde) </span><span class=cF7>{</span><span class=cF0>
<a name="l108"></a> st=</span><span class=cF5>MAlloc</span><span class=cF0>(</span><span class=cF5>StrLen</span><span class=cF7>(</span><span class=cF0>tmpde-&gt;full_name</span><span class=cF7>)</span><span class=cF0>+dst_dir_len+2);
<a name="l109"></a> </span><span class=cF5>MemCpy</span><span class=cF0>(st,dst_dir,dst_dir_len);
<a name="l110"></a> </span><span class=cF5>StrCpy</span><span class=cF0>(st+dst_dir_len,tmpde-&gt;full_name+src_dir_len);
<a name="l111"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde-&gt;attr &amp; </span><span class=cF3>RS_ATTR_DIR</span><span class=cF0>) {
<a name="l112"></a> </span><span class=cF5>DirMk</span><span class=cF0>(st,</span><span class=cF5>LinkedLstCnt</span><span class=cF7>(</span><span class=cF0>tmpde-&gt;sub</span><span class=cF7>)</span><span class=cF0>);
<a name="l113"></a> res+=</span><span class=cF5>CopyTree2</span><span class=cF0>(tmpde-&gt;sub,src_dir_len,dst_dir_len,dst_dir);
<a name="l114"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l115"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>CopySingle</span><span class=cF7>(</span><span class=cF0>tmpde-&gt;full_name,st</span><span class=cF7>)</span><span class=cF0>)
<a name="l116"></a> res++;
<a name="l117"></a> </span><span class=cF5>Free</span><span class=cF0>(st);
<a name="l118"></a> tmpde=tmpde-&gt;next;
<a name="l119"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l120"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l121"></a>}
<a name="l122"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>CopyTree</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *src_files_find_mask,</span><span class=cF1>U8</span><span class=cF0> *dst_files_find_mask,
<a name="l123"></a> </span><span class=cF1>Bool</span><span class=cF0> no_mask=</span><span class=cF3>TRUE</span><span class=cF0>)
<a name="l124"></a>{</span><span class=cF2>//Copy directory tree.</span><span class=cF0>
<a name="l125"></a></span><span class=cF2>//Returns the count of copied files (not dirs).</span><span class=cF0>
<a name="l126"></a> </span><span class=cF9>CDirContext</span><span class=cF0> *dirc;
<a name="l127"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l128"></a> </span><span class=cF9>I64</span><span class=cF0> res=0,i1,i2;
<a name="l129"></a> </span><span class=cF1>U8</span><span class=cF0> *st1,*st2;
<a name="l130"></a>
<a name="l131"></a> st1=</span><span class=cF5>DirNameAbs</span><span class=cF0>(src_files_find_mask);
<a name="l132"></a> st2=</span><span class=cF5>DirNameAbs</span><span class=cF0>(dst_files_find_mask);
<a name="l133"></a> i1=</span><span class=cF5>StrLen</span><span class=cF0>(st1);
<a name="l134"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>StrNCmp</span><span class=cF7>(</span><span class=cF0>st1,st2,i1</span><span class=cF7>)</span><span class=cF0> &amp;&amp; </span><span class=cF7>(</span><span class=cF0>st2[i1]==</span><span class=cF6>'/'</span><span class=cF0> || !st2[i1]</span><span class=cF7>)</span><span class=cF0> ) </span><span class=cF7>{</span><span class=cF0>
<a name="l135"></a> </span><span class=cF5>Free</span><span class=cF0>(st1);
<a name="l136"></a> </span><span class=cF5>Free</span><span class=cF0>(st2);
<a name="l137"></a> </span><span class=cF1>return</span><span class=cF0> 0;
<a name="l138"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l139"></a> </span><span class=cF5>Free</span><span class=cF0>(st1);
<a name="l140"></a> </span><span class=cF5>Free</span><span class=cF0>(st2);
<a name="l141"></a> </span><span class=cF1>if</span><span class=cF0> (dirc=</span><span class=cF5>DirContextNew</span><span class=cF7>(</span><span class=cF0>src_files_find_mask,</span><span class=cF3>TRUE</span><span class=cF0>,,no_mask</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l142"></a> tmpde=</span><span class=cF5>FilesFind</span><span class=cF0>(dirc-&gt;mask,</span><span class=cF3>FUF_RECURSE</span><span class=cF0>);
<a name="l143"></a> st1=</span><span class=cF5>DirCur</span><span class=cF0>;
<a name="l144"></a> </span><span class=cF5>DirContextDel</span><span class=cF0>(dirc);
<a name="l145"></a> i1=</span><span class=cF5>StrLen</span><span class=cF0>(st1);
<a name="l146"></a> </span><span class=cF1>if</span><span class=cF0> (i1==3) i1--;
<a name="l147"></a> </span><span class=cF1>if</span><span class=cF0> (dirc=</span><span class=cF5>DirContextNew</span><span class=cF7>(</span><span class=cF0>dst_files_find_mask,</span><span class=cF3>TRUE</span><span class=cF0>,</span><span class=cF3>TRUE</span><span class=cF7>)</span><span class=cF0>) {
<a name="l148"></a> st2=</span><span class=cF5>DirCur</span><span class=cF0>;
<a name="l149"></a> i2=</span><span class=cF5>StrLen</span><span class=cF0>(st2);
<a name="l150"></a> </span><span class=cF1>if</span><span class=cF0> (i2==3) i2--;
<a name="l151"></a> res=</span><span class=cF5>CopyTree2</span><span class=cF0>(tmpde,i1,i2,st2);
<a name="l152"></a> </span><span class=cF5>DirContextDel</span><span class=cF0>(dirc);
<a name="l153"></a> </span><span class=cF5>Free</span><span class=cF0>(st2);
<a name="l154"></a> }
<a name="l155"></a> </span><span class=cF5>DirTreeDel</span><span class=cF0>(tmpde);
<a name="l156"></a> </span><span class=cF5>Free</span><span class=cF0>(st1);
<a name="l157"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l158"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l159"></a>}
<a name="l160"></a>
<a name="l161"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>DelTreeDirs</span><span class=cF0>(</span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde1)
<a name="l162"></a>{
<a name="l163"></a> </span><span class=cF9>I64</span><span class=cF0> res=0;
<a name="l164"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde2;
<a name="l165"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde1) </span><span class=cF7>{</span><span class=cF0>
<a name="l166"></a> tmpde2=tmpde1-&gt;next;
<a name="l167"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde1-&gt;attr &amp; </span><span class=cF3>RS_ATTR_DIR</span><span class=cF0>) {
<a name="l168"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde1-&gt;sub)
<a name="l169"></a> res+=</span><span class=cF5>DelTreeDirs</span><span class=cF0>(tmpde1-&gt;sub);
<a name="l170"></a> res+=</span><span class=cF5>Del</span><span class=cF0>(tmpde1-&gt;full_name,</span><span class=cF3>TRUE</span><span class=cF0>,</span><span class=cF3>TRUE</span><span class=cF0>);
<a name="l171"></a> }
<a name="l172"></a> </span><span class=cF5>DirEntryDel</span><span class=cF0>(tmpde1);
<a name="l173"></a> tmpde1=tmpde2;
<a name="l174"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l175"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l176"></a>}
<a name="l177"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>DelTreeFiles</span><span class=cF0>(</span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde1)
<a name="l178"></a>{
<a name="l179"></a> </span><span class=cF9>I64</span><span class=cF0> res=0;
<a name="l180"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde2;
<a name="l181"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde1) </span><span class=cF7>{</span><span class=cF0>
<a name="l182"></a> tmpde2=tmpde1-&gt;next;
<a name="l183"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde1-&gt;attr &amp; </span><span class=cF3>RS_ATTR_DIR</span><span class=cF0>) {
<a name="l184"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde1-&gt;sub)
<a name="l185"></a> res+=</span><span class=cF5>DelTreeFiles</span><span class=cF0>(tmpde1-&gt;sub);
<a name="l186"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l187"></a> res+=</span><span class=cF5>Del</span><span class=cF0>(tmpde1-&gt;full_name,</span><span class=cF3>FALSE</span><span class=cF0>,</span><span class=cF3>TRUE</span><span class=cF0>);
<a name="l188"></a> </span><span class=cF5>DirEntryDel</span><span class=cF0>(tmpde1);
<a name="l189"></a> tmpde1=tmpde2;
<a name="l190"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l191"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l192"></a>}
<a name="l193"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>DelTree</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *files_find_mask,</span><span class=cF1>U8</span><span class=cF0> *fu_flags=</span><span class=cF3>NULL</span><span class=cF0>)
<a name="l194"></a>{</span><span class=cF2>//Delete directory tree.</span><span class=cF0>
<a name="l195"></a> </span><span class=cF9>I64</span><span class=cF0> res=0,fuf_flags=0;
<a name="l196"></a> </span><span class=cF5>ScanFlags</span><span class=cF0>(&amp;fuf_flags,</span><span class=cF5>Define</span><span class=cF7>(</span><span class=cF6>&quot;ST_FILE_UTIL_FLAGS&quot;</span><span class=cF7>)</span><span class=cF0>,</span><span class=cF6>&quot;+r&quot;</span><span class=cF0>);
<a name="l197"></a> </span><span class=cF5>ScanFlags</span><span class=cF0>(&amp;fuf_flags,</span><span class=cF5>Define</span><span class=cF7>(</span><span class=cF6>&quot;ST_FILE_UTIL_FLAGS&quot;</span><span class=cF7>)</span><span class=cF0>,fu_flags);
<a name="l198"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>IsDir</span><span class=cF7>(</span><span class=cF0>files_find_mask</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l199"></a> res=</span><span class=cF5>DelTreeDirs</span><span class=cF0>(</span><span class=cF5>FilesFind</span><span class=cF7>(</span><span class=cF0>files_find_mask,fuf_flags</span><span class=cF7>)</span><span class=cF0>);
<a name="l200"></a> res+=</span><span class=cF5>Del</span><span class=cF0>(files_find_mask,</span><span class=cF3>TRUE</span><span class=cF0>,</span><span class=cF3>TRUE</span><span class=cF0>);
<a name="l201"></a> res+=</span><span class=cF5>Del</span><span class=cF0>(files_find_mask,</span><span class=cF3>FALSE</span><span class=cF0>,</span><span class=cF3>TRUE</span><span class=cF0>);
<a name="l202"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l203"></a> res=</span><span class=cF5>DelTreeFiles</span><span class=cF0>(</span><span class=cF5>FilesFind</span><span class=cF7>(</span><span class=cF0>files_find_mask,fuf_flags</span><span class=cF7>)</span><span class=cF0>);
<a name="l204"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l205"></a>}
<a name="l206"></a>
<a name="l207"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>TouchFile</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *filename,</span><span class=cF1>U8</span><span class=cF0> *attr,</span><span class=cF9>CDate</span><span class=cF0> cdt=</span><span class=cF3>I64_MIN</span><span class=cF0>)
<a name="l208"></a>{
<a name="l209"></a> </span><span class=cF9>CDrv</span><span class=cF0> *dv=</span><span class=cF5>Let2Drv</span><span class=cF0>(*filename);
<a name="l210"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> de;
<a name="l211"></a> </span><span class=cF1>U8</span><span class=cF0> *cur_dir=</span><span class=cF5>StrNew</span><span class=cF0>(filename),buf[</span><span class=cF3>STR_LEN</span><span class=cF0>];
<a name="l212"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>FileFind</span><span class=cF7>(</span><span class=cF0>filename,&amp;de,</span><span class=cF3>FUF_JUST_FILES</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l213"></a> </span><span class=cF5>Free</span><span class=cF0>(de.full_name);
<a name="l214"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>StrCmp</span><span class=cF7>(</span><span class=cF0>attr,</span><span class=cF6>&quot;+?&quot;</span><span class=cF7>)</span><span class=cF0>)
<a name="l215"></a> </span><span class=cF6>&quot;%-48ts %s\n&quot;</span><span class=cF0>,filename,</span><span class=cF5>StrPrintFlags</span><span class=cF0>(buf,</span><span class=cF5>Define</span><span class=cF7>(</span><span class=cF6>&quot;ST_FILE_ATTRS&quot;</span><span class=cF7>)</span><span class=cF0>,de.attr);
<a name="l216"></a> </span><span class=cF1>else</span><span class=cF0> {
<a name="l217"></a> </span><span class=cF5>StrFirstRem</span><span class=cF0>(cur_dir,</span><span class=cF6>&quot;:&quot;</span><span class=cF0>);
<a name="l218"></a> </span><span class=cF5>StrLastRem</span><span class=cF0>(cur_dir,</span><span class=cF6>&quot;/&quot;</span><span class=cF0>);
<a name="l219"></a> </span><span class=cF1>if</span><span class=cF0> (!*cur_dir)
<a name="l220"></a> </span><span class=cF5>StrCpy</span><span class=cF0>(cur_dir,</span><span class=cF6>&quot;/&quot;</span><span class=cF0>);
<a name="l221"></a> </span><span class=cF5>ScanFlags</span><span class=cF0>(&amp;de.attr,</span><span class=cF5>Define</span><span class=cF7>(</span><span class=cF6>&quot;ST_FILE_ATTRS&quot;</span><span class=cF7>)</span><span class=cF0>,attr);
<a name="l222"></a> </span><span class=cF1>if</span><span class=cF0> (cdt==</span><span class=cF3>I64_MIN</span><span class=cF0>)
<a name="l223"></a> de.datetime=</span><span class=cF5>Now</span><span class=cF0>;
<a name="l224"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l225"></a> de.datetime=cdt;
<a name="l226"></a> </span><span class=cF5>DirNew</span><span class=cF0>(dv,cur_dir,&amp;de,</span><span class=cF3>FALSE</span><span class=cF0>);
<a name="l227"></a> }
<a name="l228"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l229"></a> </span><span class=cF5>PrintErr</span><span class=cF0>(</span><span class=cF6>&quot;File not found: \&quot;%s\&quot;.\n&quot;</span><span class=cF0>,filename);
<a name="l230"></a> </span><span class=cF5>Free</span><span class=cF0>(cur_dir);
<a name="l231"></a>}
<a name="l232"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>Touch</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *files_find_mask=</span><span class=cF6>&quot;*&quot;</span><span class=cF0>,</span><span class=cF1>U8</span><span class=cF0> *attr=</span><span class=cF6>&quot;+?&quot;</span><span class=cF0>,
<a name="l233"></a> </span><span class=cF1>U8</span><span class=cF0> *fu_flags=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF9>CDate</span><span class=cF0> cdt=</span><span class=cF3>I64_MIN</span><span class=cF0>)
<a name="l234"></a>{</span><span class=cF2>/*Touch file attributes and DateTime.</span><span class=cF0>
<a name="l235"></a></span><span class=cF2>Default lists attributes.</span><span class=cF0>
<a name="l236"></a></span><span class=cF2>attr: &quot;+?&quot; =show current</span><span class=cF0>
<a name="l237"></a></span><span class=cF2>&quot;+T&quot; =resident</span><span class=cF4>
<a name="l238"></a></span><a href="/Wb/Kernel/KernelA.HH.HTML#l2497"><span class=cF4>RS_ATTR_READ_ONLY</span></a><span class=cF2> </span><a href="/Wb/Kernel/KDefine.HC.HTML#l109"><span class=cF4>ST_FILE_ATTRS</span></a><span class=cF0>
<a name="l239"></a></span><span class=cF2>To Set DateL:</span><span class=cF0>
<a name="l240"></a></span><span class=cF2>Touch(filename,&quot;&quot;,,datetime);</span><span class=cF0>
<a name="l241"></a></span><span class=cF2>*/</span><span class=cF0>
<a name="l242"></a> </span><span class=cF9>I64</span><span class=cF0> fuf_flags=0;
<a name="l243"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde,*tmpde1;
<a name="l244"></a> </span><span class=cF5>ScanFlags</span><span class=cF0>(&amp;fuf_flags,</span><span class=cF5>Define</span><span class=cF7>(</span><span class=cF6>&quot;ST_FILE_UTIL_FLAGS&quot;</span><span class=cF7>)</span><span class=cF0>,</span><span class=cF6>&quot;+f+F&quot;</span><span class=cF0>);
<a name="l245"></a> </span><span class=cF5>ScanFlags</span><span class=cF0>(&amp;fuf_flags,</span><span class=cF5>Define</span><span class=cF7>(</span><span class=cF6>&quot;ST_FILE_UTIL_FLAGS&quot;</span><span class=cF7>)</span><span class=cF0>,fu_flags);
<a name="l246"></a> tmpde=tmpde1=</span><span class=cF5>FilesFind</span><span class=cF0>(files_find_mask,fuf_flags);
<a name="l247"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde) </span><span class=cF7>{</span><span class=cF0>
<a name="l248"></a> </span><span class=cF5>TouchFile</span><span class=cF0>(tmpde-&gt;full_name,attr,cdt);
<a name="l249"></a> tmpde=tmpde-&gt;next;
<a name="l250"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l251"></a> </span><span class=cF5>DirTreeDel</span><span class=cF0>(tmpde1);
<a name="l252"></a>}
</span></pre></body>
</html>

View File

@ -0,0 +1,222 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF0>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;File/Internal&quot;</span><span class=cF0>
<a name="l2"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>DirTreeSerializeSize</span><span class=cF0>(</span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde)
<a name="l3"></a>{
<a name="l4"></a> </span><span class=cF9>I64</span><span class=cF0> res=0;
<a name="l5"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde) </span><span class=cF7>{</span><span class=cF0>
<a name="l6"></a> res+=</span><span class=cF3>CDIR_SIZE</span><span class=cF0>+1;
<a name="l7"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde-&gt;attr &amp; </span><span class=cF3>RS_ATTR_DIR</span><span class=cF0>)
<a name="l8"></a> res+=</span><span class=cF5>DirTreeSerializeSize</span><span class=cF0>(tmpde-&gt;sub);
<a name="l9"></a> tmpde=tmpde-&gt;next;
<a name="l10"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l11"></a> </span><span class=cF1>return</span><span class=cF0> res+1;
<a name="l12"></a>}
<a name="l13"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>DirTreeSerializeFill</span><span class=cF0>(</span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde,</span><span class=cF1>U8</span><span class=cF0> *dst)
<a name="l14"></a>{
<a name="l15"></a> </span><span class=cF9>I64</span><span class=cF0> res=0,i;
<a name="l16"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde) </span><span class=cF7>{</span><span class=cF0>
<a name="l17"></a> *dst++=1;
<a name="l18"></a> res++;
<a name="l19"></a> </span><span class=cF5>MemCpy</span><span class=cF0>(dst,&amp;tmpde-&gt;</span><span class=cF1>start</span><span class=cF0>,</span><span class=cF3>CDIR_SIZE</span><span class=cF0>);
<a name="l20"></a> dst+=</span><span class=cF3>CDIR_SIZE</span><span class=cF0>;
<a name="l21"></a> res+=</span><span class=cF3>CDIR_SIZE</span><span class=cF0>;
<a name="l22"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde-&gt;attr &amp; </span><span class=cF3>RS_ATTR_DIR</span><span class=cF0>) {
<a name="l23"></a> i=</span><span class=cF5>DirTreeSerializeFill</span><span class=cF0>(tmpde-&gt;sub,dst);
<a name="l24"></a> dst+=i;
<a name="l25"></a> res+=i;
<a name="l26"></a> }
<a name="l27"></a> tmpde=tmpde-&gt;next;
<a name="l28"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l29"></a> *dst=0;
<a name="l30"></a> </span><span class=cF1>return</span><span class=cF0> res+1;
<a name="l31"></a>}
<a name="l32"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF5>DirTreeSerialize</span><span class=cF0>(</span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde,</span><span class=cF9>I64</span><span class=cF0> *_size=</span><span class=cF3>NULL</span><span class=cF0>)
<a name="l33"></a>{</span><span class=cF2>//Serialize tree returned from </span><a href="/Wb/Kernel/BlkDev/DskFind.HC.HTML#l27"><span class=cF4>FilesFind</span></a><span class=cF2>() into a one contiguous U8 array.</span><span class=cF0>
<a name="l34"></a> </span><span class=cF9>I64</span><span class=cF0> size=</span><span class=cF5>DirTreeSerializeSize</span><span class=cF0>(tmpde);
<a name="l35"></a> </span><span class=cF1>U8</span><span class=cF0> *buf=</span><span class=cF5>MAlloc</span><span class=cF0>(size);
<a name="l36"></a> </span><span class=cF5>DirTreeSerializeFill</span><span class=cF0>(tmpde,buf);
<a name="l37"></a> </span><span class=cF1>if</span><span class=cF0> (_size) *_size=size;
<a name="l38"></a> </span><span class=cF1>return</span><span class=cF0> buf;
<a name="l39"></a>}
<a name="l40"></a>
<a name="l41"></a></span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF5>DirTreeUnserialize2</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *src,</span><span class=cF9>CDirEntry</span><span class=cF0> **tmpde)
<a name="l42"></a>{
<a name="l43"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde1;
<a name="l44"></a> </span><span class=cF1>if</span><span class=cF0> (*src++) </span><span class=cF7>{</span><span class=cF0>
<a name="l45"></a> tmpde1=</span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CDirEntry</span><span class=cF7>)</span><span class=cF0>);
<a name="l46"></a> *tmpde=tmpde1;
<a name="l47"></a> </span><span class=cF5>MemCpy</span><span class=cF0>(&amp;tmpde1-&gt;</span><span class=cF1>start</span><span class=cF0>,src,</span><span class=cF3>CDIR_SIZE</span><span class=cF0>);
<a name="l48"></a> src+=</span><span class=cF3>CDIR_SIZE</span><span class=cF0>;
<a name="l49"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde1-&gt;attr &amp; </span><span class=cF3>RS_ATTR_DIR</span><span class=cF0>)
<a name="l50"></a> src=</span><span class=cF5>DirTreeUnserialize2</span><span class=cF0>(src,&amp;tmpde1-&gt;sub);
<a name="l51"></a> src=</span><span class=cF5>DirTreeUnserialize2</span><span class=cF0>(src,&amp;tmpde1-&gt;next);
<a name="l52"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l53"></a> *tmpde=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l54"></a> </span><span class=cF1>return</span><span class=cF0> src;
<a name="l55"></a>}
<a name="l56"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>CDirEntry</span><span class=cF0> *</span><span class=cF5>DirTreeUnserialize</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *src)
<a name="l57"></a>{</span><span class=cF2>//Unserialize tree to make it like a tree returned from </span><a href="/Wb/Kernel/BlkDev/DskFind.HC.HTML#l27"><span class=cF4>FilesFind</span></a><span class=cF2>().</span><span class=cF0>
<a name="l58"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l59"></a> </span><span class=cF5>DirTreeUnserialize2</span><span class=cF0>(src,&amp;tmpde);
<a name="l60"></a> </span><span class=cF1>return</span><span class=cF0> tmpde;
<a name="l61"></a>}
<a name="l62"></a>
<a name="l63"></a>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;File/Program Routines&quot;</span><span class=cF0>
<a name="l64"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>FOFlatten</span><span class=cF0>(</span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde,</span><span class=cF9>CDirEntry</span><span class=cF0> **a,</span><span class=cF9>I64</span><span class=cF0> *i)
<a name="l65"></a>{
<a name="l66"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde1;
<a name="l67"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde) </span><span class=cF7>{</span><span class=cF0>
<a name="l68"></a> tmpde1=tmpde-&gt;next;
<a name="l69"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde-&gt;attr&amp;</span><span class=cF3>RS_ATTR_DIR</span><span class=cF0>) {
<a name="l70"></a> </span><span class=cF5>FOFlatten</span><span class=cF0>(tmpde-&gt;sub,a,i);
<a name="l71"></a> </span><span class=cF5>DirEntryDel</span><span class=cF0>(tmpde);
<a name="l72"></a> } </span><span class=cF1>else</span><span class=cF0> {
<a name="l73"></a> a[*i]=tmpde;
<a name="l74"></a> *i=*i+1;
<a name="l75"></a> }
<a name="l76"></a> tmpde=tmpde1;
<a name="l77"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l78"></a>}
<a name="l79"></a>
<a name="l80"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>Size1</span><span class=cF0>(</span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde,</span><span class=cF9>I64</span><span class=cF0> *_fuf_flags,</span><span class=cF9>I64</span><span class=cF0> round_to)
<a name="l81"></a>{
<a name="l82"></a> </span><span class=cF1>U8</span><span class=cF0> buf[</span><span class=cF3>BLK_SIZE</span><span class=cF0>];
<a name="l83"></a> </span><span class=cF9>I64</span><span class=cF0> res=0,i;
<a name="l84"></a> </span><span class=cF9>CDrv</span><span class=cF0> *dv;
<a name="l85"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde) </span><span class=cF7>{</span><span class=cF0>
<a name="l86"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF7>(</span><span class=cF0>i=tmpde-&gt;size</span><span class=cF7>)</span><span class=cF0> &amp;&amp; </span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>_fuf_flags,</span><span class=cF3>FUf_EXPAND</span><span class=cF7>)</span><span class=cF0> &amp;&amp;
<a name="l87"></a> !</span><span class=cF7>(</span><span class=cF0>tmpde-&gt;attr&amp;</span><span class=cF3>RS_ATTR_DIR</span><span class=cF7>)</span><span class=cF0> &amp;&amp;
<a name="l88"></a> </span><span class=cF5>FileAttr</span><span class=cF7>(</span><span class=cF0>tmpde-&gt;name</span><span class=cF7>)</span><span class=cF0>&amp;</span><span class=cF3>RS_ATTR_COMPRESSED</span><span class=cF0>) {
<a name="l89"></a> dv=</span><span class=cF5>Let2Drv</span><span class=cF0>(*tmpde-&gt;full_name);
<a name="l90"></a> </span><span class=cF5>BlkRead</span><span class=cF0>(dv,buf,</span><span class=cF5>Clus2Blk</span><span class=cF7>(</span><span class=cF0>dv,tmpde-&gt;clus</span><span class=cF7>)</span><span class=cF0>,1);
<a name="l91"></a> i=(&amp;buf)(</span><span class=cF9>CArcCompress</span><span class=cF0> *)-&gt;expanded_size;
<a name="l92"></a> }
<a name="l93"></a> </span><span class=cF1>if</span><span class=cF0> (round_to)
<a name="l94"></a> i=</span><span class=cF5>CeilU64</span><span class=cF0>(tmpde-&gt;size,round_to);
<a name="l95"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde-&gt;attr&amp;</span><span class=cF3>RS_ATTR_DIR</span><span class=cF0>)
<a name="l96"></a> i+=</span><span class=cF5>Size1</span><span class=cF0>(tmpde-&gt;sub,_fuf_flags,round_to);
<a name="l97"></a> tmpde-&gt;user_data=i;
<a name="l98"></a> res+=i;
<a name="l99"></a> tmpde=tmpde-&gt;next;
<a name="l100"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l101"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l102"></a>}
<a name="l103"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>Size</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *files_find_mask=</span><span class=cF6>&quot;/*&quot;</span><span class=cF0>,</span><span class=cF1>U8</span><span class=cF0> *fu_flags=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF9>I64</span><span class=cF0> round_to=0)
<a name="l104"></a>{</span><span class=cF2>//Total size of files in mask. &quot;+x&quot; for expanded size.</span><span class=cF0>
<a name="l105"></a></span><span class=cF2>//Does not include directory size of base directory, but</span><span class=cF0>
<a name="l106"></a> </span><span class=cF2>//does include size of sub directories.</span><span class=cF0>
<a name="l107"></a> </span><span class=cF9>I64</span><span class=cF0> fuf_flags=0,res=0;
<a name="l108"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde1=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l109"></a> </span><span class=cF5>ScanFlags</span><span class=cF0>(&amp;fuf_flags,</span><span class=cF5>Define</span><span class=cF7>(</span><span class=cF6>&quot;ST_FILE_UTIL_FLAGS&quot;</span><span class=cF7>)</span><span class=cF0>,</span><span class=cF6>&quot;+r&quot;</span><span class=cF0>);
<a name="l110"></a> </span><span class=cF5>ScanFlags</span><span class=cF0>(&amp;fuf_flags,</span><span class=cF5>Define</span><span class=cF7>(</span><span class=cF6>&quot;ST_FILE_UTIL_FLAGS&quot;</span><span class=cF7>)</span><span class=cF0>,fu_flags);
<a name="l111"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde1=</span><span class=cF5>FilesFind</span><span class=cF7>(</span><span class=cF0>files_find_mask,fuf_flags&amp;</span><span class=cF3>FUG_FILES_FIND</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l112"></a> fuf_flags&amp;=</span><span class=cF3>FUF_EXPAND</span><span class=cF0>;
<a name="l113"></a> res=</span><span class=cF5>Size1</span><span class=cF0>(tmpde1,&amp;fuf_flags,round_to);
<a name="l114"></a> </span><span class=cF5>DirTreeDel</span><span class=cF0>(tmpde1);
<a name="l115"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l116"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l117"></a>}
<a name="l118"></a>
<a name="l119"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>FileCnt</span><span class=cF0>(</span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde)
<a name="l120"></a>{</span><span class=cF2>//Cnt of files in </span><a href="/Wb/Kernel/KernelA.HH.HTML#l2520"><span class=cF4>CDirEntry</span></a><span class=cF2> tree.</span><span class=cF0>
<a name="l121"></a> </span><span class=cF9>I64</span><span class=cF0> cnt=0;
<a name="l122"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde) </span><span class=cF7>{</span><span class=cF0>
<a name="l123"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde-&gt;attr&amp;</span><span class=cF3>RS_ATTR_DIR</span><span class=cF0>)
<a name="l124"></a> cnt+=</span><span class=cF5>FileCnt</span><span class=cF0>(tmpde-&gt;sub);
<a name="l125"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l126"></a> cnt++;
<a name="l127"></a> tmpde=tmpde-&gt;next;
<a name="l128"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l129"></a> </span><span class=cF1>return</span><span class=cF0> cnt;
<a name="l130"></a>}
<a name="l131"></a>
<a name="l132"></a>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;File/Cmd Line (Typically);Cmd Line (Typically)&quot;</span><span class=cF0>
<a name="l133"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>FF</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *files_find_mask,</span><span class=cF1>U8</span><span class=cF0> *fu_flags=</span><span class=cF3>NULL</span><span class=cF0>)
<a name="l134"></a>{</span><span class=cF2>//Files find. List files matching mask.</span><span class=cF0>
<a name="l135"></a> </span><span class=cF9>I64</span><span class=cF0> cnt=0,fuf_flags=0;
<a name="l136"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde,*tmpde1;
<a name="l137"></a> </span><span class=cF5>ScanFlags</span><span class=cF0>(&amp;fuf_flags,</span><span class=cF5>Define</span><span class=cF7>(</span><span class=cF6>&quot;ST_FILE_UTIL_FLAGS&quot;</span><span class=cF7>)</span><span class=cF0>,</span><span class=cF6>&quot;+r+f+F&quot;</span><span class=cF0>);
<a name="l138"></a> </span><span class=cF5>ScanFlags</span><span class=cF0>(&amp;fuf_flags,</span><span class=cF5>Define</span><span class=cF7>(</span><span class=cF6>&quot;ST_FILE_UTIL_FLAGS&quot;</span><span class=cF7>)</span><span class=cF0>,fu_flags);
<a name="l139"></a> tmpde=tmpde1=</span><span class=cF5>FilesFind</span><span class=cF0>(files_find_mask,fuf_flags);
<a name="l140"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde) </span><span class=cF7>{</span><span class=cF0>
<a name="l141"></a> </span><span class=cF5>PutFileLink</span><span class=cF0>(tmpde-&gt;full_name);
<a name="l142"></a> </span><span class=cF6>'\n'</span><span class=cF0>;
<a name="l143"></a> cnt++;
<a name="l144"></a> tmpde=tmpde-&gt;next;
<a name="l145"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l146"></a> </span><span class=cF5>DirTreeDel</span><span class=cF0>(tmpde1);
<a name="l147"></a> </span><span class=cF1>return</span><span class=cF0> cnt;
<a name="l148"></a>}
<a name="l149"></a>
<a name="l150"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>Zip</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *files_find_mask=</span><span class=cF6>&quot;*&quot;</span><span class=cF0>,</span><span class=cF1>U8</span><span class=cF0> *fu_flags=</span><span class=cF3>NULL</span><span class=cF0>)
<a name="l151"></a>{</span><span class=cF2>//Compress files by moving to .Z filename.</span><span class=cF0>
<a name="l152"></a> </span><span class=cF1>U8</span><span class=cF0> *st;
<a name="l153"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde,*tmpde1;
<a name="l154"></a> </span><span class=cF9>I64</span><span class=cF0> res=0,fuf_flags=0;
<a name="l155"></a> </span><span class=cF5>ScanFlags</span><span class=cF0>(&amp;fuf_flags,</span><span class=cF5>Define</span><span class=cF7>(</span><span class=cF6>&quot;ST_FILE_UTIL_FLAGS&quot;</span><span class=cF7>)</span><span class=cF0>,</span><span class=cF6>&quot;+r+f+F+O&quot;</span><span class=cF0>);
<a name="l156"></a> </span><span class=cF5>ScanFlags</span><span class=cF0>(&amp;fuf_flags,</span><span class=cF5>Define</span><span class=cF7>(</span><span class=cF6>&quot;ST_FILE_UTIL_FLAGS&quot;</span><span class=cF7>)</span><span class=cF0>,fu_flags);
<a name="l157"></a> tmpde=tmpde1=</span><span class=cF5>FilesFind</span><span class=cF0>(files_find_mask,fuf_flags);
<a name="l158"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde) </span><span class=cF7>{</span><span class=cF0>
<a name="l159"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>IsDotZ</span><span class=cF7>(</span><span class=cF0>tmpde-&gt;full_name</span><span class=cF7>)</span><span class=cF0>) {
<a name="l160"></a> st=</span><span class=cF5>MStrPrint</span><span class=cF0>(</span><span class=cF6>&quot;%s.Z&quot;</span><span class=cF0>,tmpde-&gt;full_name);
<a name="l161"></a> res+=</span><span class=cF5>Move</span><span class=cF0>(tmpde-&gt;full_name,st);
<a name="l162"></a> </span><span class=cF5>Free</span><span class=cF0>(st);
<a name="l163"></a> }
<a name="l164"></a> tmpde=tmpde-&gt;next;
<a name="l165"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l166"></a> </span><span class=cF5>DirTreeDel</span><span class=cF0>(tmpde1);
<a name="l167"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l168"></a>}
<a name="l169"></a>
<a name="l170"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>Unzip</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *files_find_mask=</span><span class=cF6>&quot;*.Z&quot;</span><span class=cF0>,</span><span class=cF1>U8</span><span class=cF0> *fu_flags=</span><span class=cF3>NULL</span><span class=cF0>)
<a name="l171"></a>{</span><span class=cF2>//Uncompress files by moving to not .Z filename.</span><span class=cF0>
<a name="l172"></a></span><span class=cF2>//You don't have to do this for normal operation.</span><span class=cF0>
<a name="l173"></a> </span><span class=cF2>//It automatically unzips &quot;.Z&quot; files.</span><span class=cF0>
<a name="l174"></a> </span><span class=cF1>U8</span><span class=cF0> *st;
<a name="l175"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde,*tmpde1;
<a name="l176"></a> </span><span class=cF9>I64</span><span class=cF0> res=0,fuf_flags=0;
<a name="l177"></a> </span><span class=cF5>ScanFlags</span><span class=cF0>(&amp;fuf_flags,</span><span class=cF5>Define</span><span class=cF7>(</span><span class=cF6>&quot;ST_FILE_UTIL_FLAGS&quot;</span><span class=cF7>)</span><span class=cF0>,</span><span class=cF6>&quot;+r+f+F+O&quot;</span><span class=cF0>);
<a name="l178"></a> </span><span class=cF5>ScanFlags</span><span class=cF0>(&amp;fuf_flags,</span><span class=cF5>Define</span><span class=cF7>(</span><span class=cF6>&quot;ST_FILE_UTIL_FLAGS&quot;</span><span class=cF7>)</span><span class=cF0>,fu_flags);
<a name="l179"></a> tmpde=tmpde1=</span><span class=cF5>FilesFind</span><span class=cF0>(files_find_mask,fuf_flags);
<a name="l180"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde) </span><span class=cF7>{</span><span class=cF0>
<a name="l181"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>IsDotZ</span><span class=cF7>(</span><span class=cF0>tmpde-&gt;full_name</span><span class=cF7>)</span><span class=cF0>) {
<a name="l182"></a> st=</span><span class=cF5>StrNew</span><span class=cF0>(tmpde-&gt;full_name);
<a name="l183"></a> </span><span class=cF5>StrLastRem</span><span class=cF0>(st,</span><span class=cF6>&quot;.&quot;</span><span class=cF0>);
<a name="l184"></a> res+=</span><span class=cF5>Move</span><span class=cF0>(tmpde-&gt;full_name,st);
<a name="l185"></a> </span><span class=cF5>Free</span><span class=cF0>(st);
<a name="l186"></a> }
<a name="l187"></a> tmpde=tmpde-&gt;next;
<a name="l188"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l189"></a> </span><span class=cF5>DirTreeDel</span><span class=cF0>(tmpde1);
<a name="l190"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l191"></a>}
</span></pre></body>
</html>

View File

@ -0,0 +1,475 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF0>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Info;File/Cmd Line (Typically);Cmd Line (Typically)&quot;</span><span class=cF0>
<a name="l2"></a></span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>ChkDskConfirm</span><span class=cF0>(</span><span class=cF1>Bool</span><span class=cF0> *_fix,</span><span class=cF1>Bool</span><span class=cF0> *_confirm)
<a name="l3"></a>{
<a name="l4"></a> </span><span class=cF1>if</span><span class=cF0> (*_fix &amp;&amp; *_confirm) </span><span class=cF7>{</span><span class=cF0>
<a name="l5"></a> </span><span class=cF6>&quot;Fix &quot;</span><span class=cF0>;
<a name="l6"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>YorN</span><span class=cF0>)
<a name="l7"></a> *_fix=</span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l8"></a> *_confirm=</span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l9"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l10"></a> </span><span class=cF1>return</span><span class=cF0> *_fix;
<a name="l11"></a>}
<a name="l12"></a>
<a name="l13"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>RedSeaChkDskLst</span><span class=cF0>(</span><span class=cF9>CDrv</span><span class=cF0> *dv,</span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde1,
<a name="l14"></a> </span><span class=cF1>U8</span><span class=cF0> *bits,</span><span class=cF1>U8</span><span class=cF0> *bits2,</span><span class=cF9>I64</span><span class=cF0> size,</span><span class=cF9>I64</span><span class=cF0> bpc)
<a name="l15"></a>{
<a name="l16"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde2;
<a name="l17"></a> </span><span class=cF9>I64</span><span class=cF0> i,j,errs=0;
<a name="l18"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde1) </span><span class=cF7>{</span><span class=cF0>
<a name="l19"></a> tmpde2=tmpde1-&gt;next;
<a name="l20"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde1-&gt;attr &amp; </span><span class=cF3>RS_ATTR_DIR</span><span class=cF0> &amp;&amp; tmpde1-&gt;sub)
<a name="l21"></a> errs+=</span><span class=cF5>RedSeaChkDskLst</span><span class=cF0>(dv,tmpde1-&gt;sub,bits,bits2,size,bpc);
<a name="l22"></a> j=(tmpde1-&gt;size+bpc-1)/bpc;
<a name="l23"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;j;i++) {
<a name="l24"></a> </span><span class=cF1>if</span><span class=cF0> (i+tmpde1-&gt;clus-dv-&gt;data_area&gt;size) </span><span class=cF7>{</span><span class=cF0>
<a name="l25"></a> </span><span class=cF5>PrintErr</span><span class=cF0>(</span><span class=cF6>&quot;Invalid Clus:%s Clus:%X\n&quot;</span><span class=cF0>,tmpde1-&gt;full_name,
<a name="l26"></a> i+tmpde1-&gt;clus);
<a name="l27"></a> errs++;
<a name="l28"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l29"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l30"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>LBts</span><span class=cF7>(</span><span class=cF0>bits,i+tmpde1-&gt;clus-dv-&gt;data_area</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l31"></a> </span><span class=cF5>PrintErr</span><span class=cF0>(</span><span class=cF6>&quot;Dbl Alloc:%s Clus:%X\n&quot;</span><span class=cF0>,tmpde1-&gt;full_name,
<a name="l32"></a> i+tmpde1-&gt;clus);
<a name="l33"></a> errs++;
<a name="l34"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l35"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>LBtr</span><span class=cF7>(</span><span class=cF0>bits2,i+tmpde1-&gt;clus-dv-&gt;data_area</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l36"></a> </span><span class=cF5>PrintErr</span><span class=cF0>(</span><span class=cF6>&quot;UnAlloc:%s Clus:%X\n&quot;</span><span class=cF0>,tmpde1-&gt;full_name,
<a name="l37"></a> i+tmpde1-&gt;clus);
<a name="l38"></a> errs++;
<a name="l39"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l40"></a> }
<a name="l41"></a> </span><span class=cF5>DirEntryDel</span><span class=cF0>(tmpde1);
<a name="l42"></a> tmpde1=tmpde2;
<a name="l43"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l44"></a> </span><span class=cF1>return</span><span class=cF0> errs;
<a name="l45"></a>}
<a name="l46"></a>
<a name="l47"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>RedSeaChkDsk</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> drv_let,</span><span class=cF1>Bool</span><span class=cF0> *_fix,</span><span class=cF1>Bool</span><span class=cF0> *_confirm)
<a name="l48"></a>{
<a name="l49"></a> </span><span class=cF9>I64</span><span class=cF0> i,j,bpc,size,errs=0;
<a name="l50"></a> </span><span class=cF9>CDrv</span><span class=cF0> *dv=</span><span class=cF5>Let2Drv</span><span class=cF0>(drv_let),*old_dv=</span><span class=cF5>Fs</span><span class=cF0>-&gt;cur_dv;
<a name="l51"></a> </span><span class=cF1>U8</span><span class=cF0> *files_find_mask=</span><span class=cF5>MStrPrint</span><span class=cF0>(</span><span class=cF6>&quot;%c:/*&quot;</span><span class=cF0>,</span><span class=cF5>Drv2Let</span><span class=cF7>(</span><span class=cF0>dv</span><span class=cF7>)</span><span class=cF0>),
<a name="l52"></a> *old_dir=</span><span class=cF5>StrNew</span><span class=cF0>(</span><span class=cF5>Fs</span><span class=cF0>-&gt;cur_dir),
<a name="l53"></a> *bits,*bits2;
<a name="l54"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *ptr,*ptr2;
<a name="l55"></a>
<a name="l56"></a> </span><span class=cF5>Drv</span><span class=cF0>(drv_let);
<a name="l57"></a> </span><span class=cF6>&quot;Scanning...\n&quot;</span><span class=cF0>;
<a name="l58"></a> size=(dv-&gt;size-</span><span class=cF7>(</span><span class=cF0>dv-&gt;data_area-dv-&gt;drv_offset</span><span class=cF7>)</span><span class=cF0>)/dv-&gt;spc;
<a name="l59"></a> bpc=dv-&gt;spc&lt;&lt;</span><span class=cF3>BLK_SIZE_BITS</span><span class=cF0>;
<a name="l60"></a> bits=</span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF7>(</span><span class=cF0>size+7</span><span class=cF7>)</span><span class=cF0>&gt;&gt;3);
<a name="l61"></a> bits2=</span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF7>(</span><span class=cF0>size+7</span><span class=cF7>)</span><span class=cF0>&gt;&gt;3+</span><span class=cF3>BLK_SIZE</span><span class=cF0>);
<a name="l62"></a> </span><span class=cF5>BlkRead</span><span class=cF0>(dv,bits2,dv-&gt;fat1,</span><span class=cF7>(</span><span class=cF0>(size+7)&gt;&gt;3+</span><span class=cF3>BLK_SIZE</span><span class=cF0>-1</span><span class=cF7>)</span><span class=cF0>&gt;&gt;</span><span class=cF3>BLK_SIZE_BITS</span><span class=cF0>);
<a name="l63"></a>
<a name="l64"></a> </span><span class=cF2>//Get Root Dir size</span><span class=cF0>
<a name="l65"></a> ptr2=</span><span class=cF5>MAlloc</span><span class=cF0>(bpc);
<a name="l66"></a> </span><span class=cF5>BlkRead</span><span class=cF0>(dv,ptr2,dv-&gt;root_clus,1);
<a name="l67"></a> ptr=ptr2(</span><span class=cF1>U8</span><span class=cF0> *)-</span><span class=cF1>offset</span><span class=cF0>(</span><span class=cF9>CDirEntry</span><span class=cF0>.</span><span class=cF1>start</span><span class=cF0>);
<a name="l68"></a> j=(ptr-&gt;size+bpc-1)/bpc;
<a name="l69"></a> </span><span class=cF5>Free</span><span class=cF0>(ptr2);
<a name="l70"></a>
<a name="l71"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;j;i++) </span><span class=cF7>{</span><span class=cF0>
<a name="l72"></a> </span><span class=cF1>if</span><span class=cF0> (i+dv-&gt;root_clus-dv-&gt;data_area&gt;size) {
<a name="l73"></a> </span><span class=cF5>PrintErr</span><span class=cF0>(</span><span class=cF6>&quot;Invalid Clus: RootDir Clus:%X\n&quot;</span><span class=cF0>,i+dv-&gt;root_clus);
<a name="l74"></a> errs++;
<a name="l75"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l76"></a> }
<a name="l77"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>LBts</span><span class=cF7>(</span><span class=cF0>bits,i+dv-&gt;root_clus-dv-&gt;data_area</span><span class=cF7>)</span><span class=cF0>) {
<a name="l78"></a> </span><span class=cF5>PrintErr</span><span class=cF0>(</span><span class=cF6>&quot;Dbl Alloc: RootDir Clus:%X\n&quot;</span><span class=cF0>,i+dv-&gt;root_clus);
<a name="l79"></a> errs++;
<a name="l80"></a> }
<a name="l81"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>LBtr</span><span class=cF7>(</span><span class=cF0>bits2,i+dv-&gt;root_clus-dv-&gt;data_area</span><span class=cF7>)</span><span class=cF0>) {
<a name="l82"></a> </span><span class=cF5>PrintErr</span><span class=cF0>(</span><span class=cF6>&quot;UnAlloc: RootDir Clus:%X\n&quot;</span><span class=cF0>,i+dv-&gt;root_clus);
<a name="l83"></a> errs++;
<a name="l84"></a> }
<a name="l85"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l86"></a>
<a name="l87"></a> errs+=</span><span class=cF5>RedSeaChkDskLst</span><span class=cF0>(dv,</span><span class=cF5>FilesFind</span><span class=cF7>(</span><span class=cF0>files_find_mask,</span><span class=cF3>FUF_RECURSE</span><span class=cF7>)</span><span class=cF0>,
<a name="l88"></a> bits,bits2,size,bpc);
<a name="l89"></a> </span><span class=cF1>for</span><span class=cF0> (i=1;i&lt;size;i++)
<a name="l90"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>bits2,i</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l91"></a> </span><span class=cF5>PrintWarn</span><span class=cF0>(</span><span class=cF6>&quot;Shouldn't Alloc Clus:%0X\n&quot;</span><span class=cF0>,i+dv-&gt;data_area);
<a name="l92"></a> errs++;
<a name="l93"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>ChkDskConfirm</span><span class=cF7>(</span><span class=cF0>_fix,_confirm</span><span class=cF7>)</span><span class=cF0>)
<a name="l94"></a> </span><span class=cF5>RedSeaFreeClus</span><span class=cF0>(dv,i+dv-&gt;data_area,1);
<a name="l95"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l96"></a>
<a name="l97"></a> </span><span class=cF5>Free</span><span class=cF0>(files_find_mask);
<a name="l98"></a> </span><span class=cF5>Free</span><span class=cF0>(bits);
<a name="l99"></a> </span><span class=cF5>Free</span><span class=cF0>(bits2);
<a name="l100"></a> </span><span class=cF5>Drv</span><span class=cF0>(</span><span class=cF5>Drv2Let</span><span class=cF7>(</span><span class=cF0>old_dv</span><span class=cF7>)</span><span class=cF0>);
<a name="l101"></a> </span><span class=cF5>Cd</span><span class=cF0>(old_dir);
<a name="l102"></a> </span><span class=cF5>Free</span><span class=cF0>(old_dir);
<a name="l103"></a> </span><span class=cF1>return</span><span class=cF0> errs;
<a name="l104"></a>}
<a name="l105"></a>
<a name="l106"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>FAT32ChkDskLst</span><span class=cF0>(</span><span class=cF9>CDrv</span><span class=cF0> *dv,</span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde1,
<a name="l107"></a> </span><span class=cF1>U8</span><span class=cF0> *bits,</span><span class=cF9>U32</span><span class=cF0> *bits2,</span><span class=cF9>I64</span><span class=cF0> size,</span><span class=cF9>I64</span><span class=cF0> bpc)
<a name="l108"></a>{
<a name="l109"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde2;
<a name="l110"></a> </span><span class=cF9>I64</span><span class=cF0> i,c,errs=0;
<a name="l111"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde1) </span><span class=cF7>{</span><span class=cF0>
<a name="l112"></a> tmpde2=tmpde1-&gt;next;
<a name="l113"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde1-&gt;attr &amp; </span><span class=cF3>RS_ATTR_DIR</span><span class=cF0> &amp;&amp; tmpde1-&gt;sub)
<a name="l114"></a> errs+=</span><span class=cF5>FAT32ChkDskLst</span><span class=cF0>(dv,tmpde1-&gt;sub,bits,bits2,size,bpc);
<a name="l115"></a> i=0;
<a name="l116"></a> c=tmpde1-&gt;clus;
<a name="l117"></a> </span><span class=cF1>while</span><span class=cF0> (0&lt;c&lt;0x0FFFFFF8) {
<a name="l118"></a> </span><span class=cF1>if</span><span class=cF0> (c&gt;size) </span><span class=cF7>{</span><span class=cF0>
<a name="l119"></a> </span><span class=cF5>PrintErr</span><span class=cF0>(</span><span class=cF6>&quot;Invalid Clus:%s Clus:%X\n&quot;</span><span class=cF0>,tmpde1-&gt;full_name,c);
<a name="l120"></a> errs++;
<a name="l121"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l122"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l123"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>LBts</span><span class=cF7>(</span><span class=cF0>bits,c</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l124"></a> </span><span class=cF5>PrintErr</span><span class=cF0>(</span><span class=cF6>&quot;Dbl Alloc:%s Clus:%X\n&quot;</span><span class=cF0>,tmpde1-&gt;full_name,c);
<a name="l125"></a> errs++;
<a name="l126"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l127"></a> </span><span class=cF1>if</span><span class=cF0> (!bits2[c]) </span><span class=cF7>{</span><span class=cF0>
<a name="l128"></a> </span><span class=cF5>PrintErr</span><span class=cF0>(</span><span class=cF6>&quot;UnAlloc:%s Clus:%X\n&quot;</span><span class=cF0>,tmpde1-&gt;full_name,c);
<a name="l129"></a> errs++;
<a name="l130"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l131"></a> bits2[c]=0;
<a name="l132"></a> c=</span><span class=cF5>ClusNumNext</span><span class=cF0>(dv,c);
<a name="l133"></a> i++;
<a name="l134"></a> }
<a name="l135"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>tmpde1-&gt;attr &amp; </span><span class=cF3>RS_ATTR_DIR</span><span class=cF7>)</span><span class=cF0>) {
<a name="l136"></a> i*=bpc;
<a name="l137"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde1-&gt;size&gt;i) </span><span class=cF7>{</span><span class=cF0>
<a name="l138"></a> </span><span class=cF5>PrintErr</span><span class=cF0>(</span><span class=cF6>&quot;Alloced File Too Short:%s\n&quot;</span><span class=cF0>,tmpde1-&gt;full_name);
<a name="l139"></a> errs++;
<a name="l140"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l141"></a> </span><span class=cF1>if</span><span class=cF0> (i&gt;tmpde1-&gt;size+bpc-1) </span><span class=cF7>{</span><span class=cF0>
<a name="l142"></a> </span><span class=cF5>PrintWarn</span><span class=cF0>(</span><span class=cF6>&quot;Alloced File Too Long:%s\n&quot;</span><span class=cF0>,tmpde1-&gt;full_name);
<a name="l143"></a> errs++;
<a name="l144"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l145"></a> }
<a name="l146"></a> </span><span class=cF5>DirEntryDel</span><span class=cF0>(tmpde1);
<a name="l147"></a> tmpde1=tmpde2;
<a name="l148"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l149"></a> </span><span class=cF1>return</span><span class=cF0> errs;
<a name="l150"></a>}
<a name="l151"></a>
<a name="l152"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>FAT32ChkDsk</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> drv_let,</span><span class=cF1>Bool</span><span class=cF0> *_fix,</span><span class=cF1>Bool</span><span class=cF0> *_confirm)
<a name="l153"></a>{
<a name="l154"></a> </span><span class=cF9>I64</span><span class=cF0> i,bpc,size,c,errs=0;
<a name="l155"></a> </span><span class=cF9>CDrv</span><span class=cF0> *dv=</span><span class=cF5>Let2Drv</span><span class=cF0>(drv_let),*old_dv=</span><span class=cF5>Fs</span><span class=cF0>-&gt;cur_dv;
<a name="l156"></a> </span><span class=cF1>U8</span><span class=cF0> *files_find_mask=</span><span class=cF5>MStrPrint</span><span class=cF0>(</span><span class=cF6>&quot;%c:/*&quot;</span><span class=cF0>,</span><span class=cF5>Drv2Let</span><span class=cF7>(</span><span class=cF0>dv</span><span class=cF7>)</span><span class=cF0>),
<a name="l157"></a> *old_dir=</span><span class=cF5>StrNew</span><span class=cF0>(</span><span class=cF5>Fs</span><span class=cF0>-&gt;cur_dir),
<a name="l158"></a> *bits;
<a name="l159"></a> </span><span class=cF9>U32</span><span class=cF0> *bits2;
<a name="l160"></a> </span><span class=cF5>Drv</span><span class=cF0>(drv_let);
<a name="l161"></a> </span><span class=cF6>&quot;Scanning...\n&quot;</span><span class=cF0>;
<a name="l162"></a> size=(dv-&gt;size-</span><span class=cF7>(</span><span class=cF0>dv-&gt;data_area-dv-&gt;drv_offset</span><span class=cF7>)</span><span class=cF0>)/dv-&gt;spc;
<a name="l163"></a> bpc=dv-&gt;spc&lt;&lt;</span><span class=cF3>BLK_SIZE_BITS</span><span class=cF0>;
<a name="l164"></a> bits=</span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF7>(</span><span class=cF0>size+7</span><span class=cF7>)</span><span class=cF0>&gt;&gt;3);
<a name="l165"></a> bits2=</span><span class=cF5>CAlloc</span><span class=cF0>(size*4+</span><span class=cF3>BLK_SIZE</span><span class=cF0>);
<a name="l166"></a> </span><span class=cF5>BlkRead</span><span class=cF0>(dv,bits2,dv-&gt;fat1,</span><span class=cF7>(</span><span class=cF0>size*4+</span><span class=cF3>BLK_SIZE</span><span class=cF0>-1</span><span class=cF7>)</span><span class=cF0>&gt;&gt;</span><span class=cF3>BLK_SIZE_BITS</span><span class=cF0>);
<a name="l167"></a>
<a name="l168"></a> c=dv-&gt;root_clus;
<a name="l169"></a> </span><span class=cF1>while</span><span class=cF0> (0&lt;c&lt;0x0FFFFFF8) </span><span class=cF7>{</span><span class=cF0>
<a name="l170"></a> </span><span class=cF1>if</span><span class=cF0> (c&gt;size) {
<a name="l171"></a> </span><span class=cF5>PrintErr</span><span class=cF0>(</span><span class=cF6>&quot;Invalid Clus: RootDir Clus:%X\n&quot;</span><span class=cF0>,c);
<a name="l172"></a> errs++;
<a name="l173"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l174"></a> }
<a name="l175"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>LBts</span><span class=cF7>(</span><span class=cF0>bits,c</span><span class=cF7>)</span><span class=cF0>) {
<a name="l176"></a> </span><span class=cF5>PrintErr</span><span class=cF0>(</span><span class=cF6>&quot;Dbl Alloc: RootDir Clus:%X\n&quot;</span><span class=cF0>,c);
<a name="l177"></a> errs++;
<a name="l178"></a> }
<a name="l179"></a> </span><span class=cF1>if</span><span class=cF0> (!bits2[c]) {
<a name="l180"></a> </span><span class=cF5>PrintErr</span><span class=cF0>(</span><span class=cF6>&quot;UnAlloc: RootDir Clus:%X\n&quot;</span><span class=cF0>,c);
<a name="l181"></a> errs++;
<a name="l182"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l183"></a> bits2[c]=0;
<a name="l184"></a> c=</span><span class=cF5>ClusNumNext</span><span class=cF0>(dv,c);
<a name="l185"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l186"></a>
<a name="l187"></a> errs+=</span><span class=cF5>FAT32ChkDskLst</span><span class=cF0>(dv,</span><span class=cF5>FilesFind</span><span class=cF7>(</span><span class=cF0>files_find_mask,</span><span class=cF3>FUF_RECURSE</span><span class=cF7>)</span><span class=cF0>,
<a name="l188"></a> bits,bits2,size,bpc);
<a name="l189"></a>
<a name="l190"></a> bits2[1]=0; </span><span class=cF2>//See </span><a href="/Wb/Kernel/BlkDev/FileSysFAT.HC.HTML#l48"><span class=cF4>FAT32Fmt</span></a><span class=cF2>()</span><span class=cF0>
<a name="l191"></a> </span><span class=cF1>for</span><span class=cF0> (i=1;i&lt;size;i++)
<a name="l192"></a> </span><span class=cF1>if</span><span class=cF0> (bits2[i]) </span><span class=cF7>{</span><span class=cF0>
<a name="l193"></a> </span><span class=cF5>PrintWarn</span><span class=cF0>(</span><span class=cF6>&quot;Shouldn't Alloc Clus:%0X\n&quot;</span><span class=cF0>,i);
<a name="l194"></a> errs++;
<a name="l195"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>ChkDskConfirm</span><span class=cF7>(</span><span class=cF0>_fix,_confirm</span><span class=cF7>)</span><span class=cF0>)
<a name="l196"></a> </span><span class=cF5>FAT32FreeClus</span><span class=cF0>(dv,i);
<a name="l197"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l198"></a> </span><span class=cF5>Free</span><span class=cF0>(files_find_mask);
<a name="l199"></a> </span><span class=cF5>Free</span><span class=cF0>(bits);
<a name="l200"></a> </span><span class=cF5>Free</span><span class=cF0>(bits2);
<a name="l201"></a> </span><span class=cF5>Drv</span><span class=cF0>(</span><span class=cF5>Drv2Let</span><span class=cF7>(</span><span class=cF0>old_dv</span><span class=cF7>)</span><span class=cF0>);
<a name="l202"></a> </span><span class=cF5>Cd</span><span class=cF0>(old_dir);
<a name="l203"></a> </span><span class=cF5>Free</span><span class=cF0>(old_dir);
<a name="l204"></a> </span><span class=cF1>return</span><span class=cF0> errs;
<a name="l205"></a>}
<a name="l206"></a>
<a name="l207"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>DskChk</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> drv_let=0,</span><span class=cF1>Bool</span><span class=cF0> fix=</span><span class=cF3>FALSE</span><span class=cF0>,</span><span class=cF1>Bool</span><span class=cF0> confirm=</span><span class=cF3>TRUE</span><span class=cF0>)
<a name="l208"></a>{</span><span class=cF2>//Check disk for allocation errors and, optionally, fix.</span><span class=cF0>
<a name="l209"></a></span><span class=cF2>//You probably want to reformat and reinstall.</span><span class=cF0>
<a name="l210"></a> </span><span class=cF9>I64</span><span class=cF0> errs=0;
<a name="l211"></a> </span><span class=cF9>CDrv</span><span class=cF0> *dv=</span><span class=cF5>Let2Drv</span><span class=cF0>(drv_let);
<a name="l212"></a> </span><span class=cF1>switch</span><span class=cF0> (dv-&gt;fs_type) </span><span class=cF7>{</span><span class=cF0>
<a name="l213"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>FSt_REDSEA</span><span class=cF0>:
<a name="l214"></a> errs=</span><span class=cF5>RedSeaChkDsk</span><span class=cF0>(drv_let,&amp;fix,&amp;confirm);
<a name="l215"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l216"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>FSt_FAT32</span><span class=cF0>:
<a name="l217"></a> errs=</span><span class=cF5>FAT32ChkDsk</span><span class=cF0>(drv_let,&amp;fix,&amp;confirm);
<a name="l218"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l219"></a> </span><span class=cF1>default</span><span class=cF0>:
<a name="l220"></a> </span><span class=cF5>PrintErr</span><span class=cF0>(</span><span class=cF6>&quot;File System Not Supported\n&quot;</span><span class=cF0>);
<a name="l221"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l222"></a> </span><span class=cF1>if</span><span class=cF0> (errs) </span><span class=cF7>{</span><span class=cF0>
<a name="l223"></a> </span><span class=cF1>if</span><span class=cF0> (fix)
<a name="l224"></a> </span><span class=cF6>&quot;It might be a little better. &quot;</span><span class=cF0>;
<a name="l225"></a> </span><span class=cF6>&quot;Copy files to another partition or CD/DVD, &quot;</span><span class=cF0>
<a name="l226"></a> </span><span class=cF6>&quot;reformat, and copy back. &quot;</span><span class=cF0>
<a name="l227"></a> </span><span class=cF6>&quot;Or, copy from a back-up.\n&quot;</span><span class=cF0>;
<a name="l228"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l229"></a> </span><span class=cF1>return</span><span class=cF0> errs;
<a name="l230"></a>}
<a name="l231"></a>
<a name="l232"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>RedSeaDrvView</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> drv_let=0)
<a name="l233"></a>{
<a name="l234"></a> </span><span class=cF9>CDrv</span><span class=cF0> *dv=</span><span class=cF5>Let2Drv</span><span class=cF0>(drv_let);
<a name="l235"></a> </span><span class=cF9>I64</span><span class=cF0> lohi,c1,i,x,y,l=(</span><span class=cF3>GR_HEIGHT</span><span class=cF0>-3*</span><span class=cF3>FONT_HEIGHT</span><span class=cF0>)*(</span><span class=cF3>GR_WIDTH</span><span class=cF0>-</span><span class=cF3>FONT_WIDTH</span><span class=cF0>&lt;&lt;1),
<a name="l236"></a> s=dv-&gt;size+dv-&gt;drv_offset-dv-&gt;data_area;
<a name="l237"></a> </span><span class=cF1>U8</span><span class=cF0> *bitmap;
<a name="l238"></a> </span><span class=cF9>CDC</span><span class=cF0> *dc=</span><span class=cF5>DCAlias</span><span class=cF0>;
<a name="l239"></a>
<a name="l240"></a> </span><span class=cF5>SettingsPush</span><span class=cF0>; </span><span class=cF2>//See </span><a href="/Wb/Adam/TaskSettings.HC.HTML#l3"><span class=cF4>SettingsPush</span></a><span class=cF0>
<a name="l241"></a> </span><span class=cF5>WinMax</span><span class=cF0>;
<a name="l242"></a> </span><span class=cF5>WinBorder</span><span class=cF0>(</span><span class=cF3>ON</span><span class=cF0>);
<a name="l243"></a> </span><span class=cF5>DocCursor</span><span class=cF0>;
<a name="l244"></a> </span><span class=cF5>DocClear</span><span class=cF0>;
<a name="l245"></a> </span><span class=cF5>DCFill</span><span class=cF0>;
<a name="l246"></a> </span><span class=cF1>try</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l247"></a> i=(</span><span class=cF7>(</span><span class=cF0>s+7</span><span class=cF7>)</span><span class=cF0>&gt;&gt;3+</span><span class=cF3>BLK_SIZE</span><span class=cF0>-1)&gt;&gt;</span><span class=cF3>BLK_SIZE_BITS</span><span class=cF0>;
<a name="l248"></a> bitmap=</span><span class=cF5>MAlloc</span><span class=cF0>(i&lt;&lt;</span><span class=cF3>BLK_SIZE_BITS</span><span class=cF0>);
<a name="l249"></a> </span><span class=cF5>BlkRead</span><span class=cF0>(dv,bitmap,dv-&gt;fat1,i);
<a name="l250"></a> i=0;
<a name="l251"></a> </span><span class=cF1>for</span><span class=cF0> (y=0;y&lt;</span><span class=cF3>GR_HEIGHT</span><span class=cF0>-3*</span><span class=cF3>FONT_HEIGHT</span><span class=cF0>;y++) {
<a name="l252"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>ScanKey</span><span class=cF0>)
<a name="l253"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l254"></a> </span><span class=cF1>for</span><span class=cF0> (x=0;x&lt;</span><span class=cF3>GR_WIDTH</span><span class=cF0>-</span><span class=cF3>FONT_WIDTH</span><span class=cF0>&lt;&lt;1;x++) </span><span class=cF7>{</span><span class=cF0>
<a name="l255"></a> lohi=i*s;
<a name="l256"></a> c1=lohi/l;
<a name="l257"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>bitmap,c1</span><span class=cF7>)</span><span class=cF0>)
<a name="l258"></a> dc-&gt;color=</span><span class=cF3>ROP_XOR</span><span class=cF0>+</span><span class=cF3>BLUE</span><span class=cF0>^</span><span class=cF3>TRANSPARENT</span><span class=cF0>;
<a name="l259"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l260"></a> dc-&gt;color=</span><span class=cF3>ROP_XOR</span><span class=cF0>+</span><span class=cF3>WHITE</span><span class=cF0>^</span><span class=cF3>TRANSPARENT</span><span class=cF0>;
<a name="l261"></a> </span><span class=cF5>GrPlot</span><span class=cF0>(dc,x,y);
<a name="l262"></a> i++;
<a name="l263"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l264"></a> }
<a name="l265"></a> </span><span class=cF5>Free</span><span class=cF0>(bitmap);
<a name="l266"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>catch</span><span class=cF0>
<a name="l267"></a> </span><span class=cF5>DrvUnlock</span><span class=cF0>(dv);
<a name="l268"></a> </span><span class=cF5>GetChar</span><span class=cF0>;
<a name="l269"></a>
<a name="l270"></a> </span><span class=cF5>SettingsPop</span><span class=cF0>;
<a name="l271"></a> </span><span class=cF5>DCFill</span><span class=cF0>;
<a name="l272"></a> </span><span class=cF5>DCDel</span><span class=cF0>(dc);
<a name="l273"></a>}
<a name="l274"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>FAT32DrvView</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> drv_let=0)
<a name="l275"></a>{
<a name="l276"></a> </span><span class=cF9>CDrv</span><span class=cF0> *dv=</span><span class=cF5>Let2Drv</span><span class=cF0>(drv_let);
<a name="l277"></a> </span><span class=cF9>I64</span><span class=cF0> lohi,c1,i,x,y,l=(</span><span class=cF3>GR_HEIGHT</span><span class=cF0>-3*</span><span class=cF3>FONT_HEIGHT</span><span class=cF0>)*(</span><span class=cF3>GR_WIDTH</span><span class=cF0>-</span><span class=cF3>FONT_WIDTH</span><span class=cF0>&lt;&lt;1),
<a name="l278"></a> s=(dv-&gt;size+dv-&gt;spc-1)/dv-&gt;spc-(2+dv-&gt;data_area-dv-&gt;drv_offset);
<a name="l279"></a> </span><span class=cF9>U32</span><span class=cF0> *bitmap;
<a name="l280"></a> </span><span class=cF9>CDC</span><span class=cF0> *dc=</span><span class=cF5>DCAlias</span><span class=cF0>;
<a name="l281"></a>
<a name="l282"></a> </span><span class=cF5>SettingsPush</span><span class=cF0>; </span><span class=cF2>//See </span><a href="/Wb/Adam/TaskSettings.HC.HTML#l3"><span class=cF4>SettingsPush</span></a><span class=cF0>
<a name="l283"></a> </span><span class=cF5>WinMax</span><span class=cF0>;
<a name="l284"></a> </span><span class=cF5>WinBorder</span><span class=cF0>(</span><span class=cF3>ON</span><span class=cF0>);
<a name="l285"></a> </span><span class=cF5>DocCursor</span><span class=cF0>;
<a name="l286"></a> </span><span class=cF5>DocClear</span><span class=cF0>;
<a name="l287"></a> </span><span class=cF5>DCFill</span><span class=cF0>;
<a name="l288"></a> </span><span class=cF1>try</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l289"></a> i=(s*4+</span><span class=cF3>BLK_SIZE</span><span class=cF0>-1)&gt;&gt;</span><span class=cF3>BLK_SIZE_BITS</span><span class=cF0>;
<a name="l290"></a> bitmap=</span><span class=cF5>MAlloc</span><span class=cF0>(i&lt;&lt;</span><span class=cF3>BLK_SIZE_BITS</span><span class=cF0>);
<a name="l291"></a> </span><span class=cF5>BlkRead</span><span class=cF0>(dv,bitmap,dv-&gt;fat1,i);
<a name="l292"></a> i=0;
<a name="l293"></a> </span><span class=cF1>for</span><span class=cF0> (y=0;y&lt;</span><span class=cF3>GR_HEIGHT</span><span class=cF0>-3*</span><span class=cF3>FONT_HEIGHT</span><span class=cF0>;y++) {
<a name="l294"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>ScanKey</span><span class=cF0>)
<a name="l295"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l296"></a> </span><span class=cF1>for</span><span class=cF0> (x=0;x&lt;</span><span class=cF3>GR_WIDTH</span><span class=cF0>-</span><span class=cF3>FONT_WIDTH</span><span class=cF0>&lt;&lt;1;x++) </span><span class=cF7>{</span><span class=cF0>
<a name="l297"></a> lohi=i*s;
<a name="l298"></a> c1=lohi/l;
<a name="l299"></a> </span><span class=cF1>if</span><span class=cF0> (bitmap[c1])
<a name="l300"></a> dc-&gt;color=</span><span class=cF3>ROP_XOR</span><span class=cF0>+</span><span class=cF3>BLUE</span><span class=cF0>^</span><span class=cF3>TRANSPARENT</span><span class=cF0>;
<a name="l301"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l302"></a> dc-&gt;color=</span><span class=cF3>ROP_XOR</span><span class=cF0>+</span><span class=cF3>WHITE</span><span class=cF0>^</span><span class=cF3>TRANSPARENT</span><span class=cF0>;
<a name="l303"></a> </span><span class=cF5>GrPlot</span><span class=cF0>(dc,x,y);
<a name="l304"></a> i++;
<a name="l305"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l306"></a> }
<a name="l307"></a> </span><span class=cF5>Free</span><span class=cF0>(bitmap);
<a name="l308"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>catch</span><span class=cF0>
<a name="l309"></a> </span><span class=cF5>DrvUnlock</span><span class=cF0>(dv);
<a name="l310"></a> </span><span class=cF5>GetChar</span><span class=cF0>;
<a name="l311"></a>
<a name="l312"></a> </span><span class=cF5>SettingsPop</span><span class=cF0>;
<a name="l313"></a> </span><span class=cF5>DCFill</span><span class=cF0>;
<a name="l314"></a> </span><span class=cF5>DCDel</span><span class=cF0>(dc);
<a name="l315"></a>}
<a name="l316"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DrvView</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> drv_let=0)
<a name="l317"></a>{</span><span class=cF2>//Drive view. Graph the allocation map's fragmentation.</span><span class=cF0>
<a name="l318"></a> </span><span class=cF9>CDrv</span><span class=cF0> *dv=</span><span class=cF5>Let2Drv</span><span class=cF0>(drv_let),*old_dv=</span><span class=cF5>Fs</span><span class=cF0>-&gt;cur_dv;
<a name="l319"></a> </span><span class=cF5>Drv</span><span class=cF0>(drv_let);
<a name="l320"></a> </span><span class=cF1>switch</span><span class=cF0> (dv-&gt;fs_type) </span><span class=cF7>{</span><span class=cF0>
<a name="l321"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>FSt_REDSEA</span><span class=cF0>:
<a name="l322"></a> </span><span class=cF5>RedSeaDrvView</span><span class=cF0>(drv_let);
<a name="l323"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l324"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>FSt_FAT32</span><span class=cF0>:
<a name="l325"></a> </span><span class=cF5>FAT32DrvView</span><span class=cF0>(drv_let);
<a name="l326"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l327"></a> </span><span class=cF1>default</span><span class=cF0>:
<a name="l328"></a> </span><span class=cF5>PrintErr</span><span class=cF0>(</span><span class=cF6>&quot;File System Not Supported\n&quot;</span><span class=cF0>);
<a name="l329"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l330"></a> </span><span class=cF5>Drv</span><span class=cF0>(</span><span class=cF5>Drv2Let</span><span class=cF7>(</span><span class=cF0>old_dv</span><span class=cF7>)</span><span class=cF0>);
<a name="l331"></a>}
<a name="l332"></a>
<a name="l333"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DskView</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> drv_let=0)
<a name="l334"></a>{</span><span class=cF2>//Disk view. Pie chart of partition sizes.</span><span class=cF0>
<a name="l335"></a> </span><span class=cF9>I64</span><span class=cF0> i,j,attr,
<a name="l336"></a> h=</span><span class=cF5>Fs</span><span class=cF0>-&gt;pix_width,
<a name="l337"></a> v=</span><span class=cF5>Fs</span><span class=cF0>-&gt;pix_height,
<a name="l338"></a> radius;
<a name="l339"></a> </span><span class=cF9>CDrv</span><span class=cF0> *dv;
<a name="l340"></a> </span><span class=cF9>CBlkDev</span><span class=cF0> *bd=</span><span class=cF5>Let2BlkDev</span><span class=cF0>(drv_let);
<a name="l341"></a> </span><span class=cF9>CDC</span><span class=cF0> *dc=</span><span class=cF5>DCAlias</span><span class=cF0>;
<a name="l342"></a> </span><span class=cF1>F64</span><span class=cF0> sect_start,sect_end;
<a name="l343"></a>
<a name="l344"></a> </span><span class=cF5>SettingsPush</span><span class=cF0>; </span><span class=cF2>//See </span><a href="/Wb/Adam/TaskSettings.HC.HTML#l3"><span class=cF4>SettingsPush</span></a><span class=cF0>
<a name="l345"></a> </span><span class=cF5>DocCursor</span><span class=cF0>;
<a name="l346"></a> </span><span class=cF5>DocClear</span><span class=cF0>;
<a name="l347"></a> </span><span class=cF5>DCFill</span><span class=cF0>;
<a name="l348"></a> </span><span class=cF1>if</span><span class=cF0> (h&lt;v)
<a name="l349"></a> radius=0.4*h;
<a name="l350"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l351"></a> radius=0.4*v;
<a name="l352"></a> dc-&gt;color=</span><span class=cF3>BLACK</span><span class=cF0>;
<a name="l353"></a> </span><span class=cF5>GrCircle</span><span class=cF0>(dc,h&gt;&gt;1,v&gt;&gt;1,radius);
<a name="l354"></a>
<a name="l355"></a> j=1;
<a name="l356"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;</span><span class=cF3>DRVS_NUM</span><span class=cF0>;i++) </span><span class=cF7>{</span><span class=cF0>
<a name="l357"></a> dv=&amp;</span><span class=cFB>blkdev</span><span class=cF0>.drvs[i];
<a name="l358"></a> </span><span class=cF1>if</span><span class=cF0> (bd==dv-&gt;bd &amp;&amp; dv-&gt;fs_type) {
<a name="l359"></a> sect_start=-(dv-&gt;drv_offset*2*</span><span class=cF3>pi</span><span class=cF0>/</span><span class=cF7>(</span><span class=cF0>bd-&gt;max_blk+1</span><span class=cF7>)</span><span class=cF0>);
<a name="l360"></a> sect_end =-(</span><span class=cF7>(</span><span class=cF0>dv-&gt;drv_offset+dv-&gt;size</span><span class=cF7>)</span><span class=cF0>*2*</span><span class=cF3>pi</span><span class=cF0>/</span><span class=cF7>(</span><span class=cF0>bd-&gt;max_blk+1</span><span class=cF7>)</span><span class=cF0>);
<a name="l361"></a> dc-&gt;color=</span><span class=cF3>BLACK</span><span class=cF0>;
<a name="l362"></a> </span><span class=cF5>GrLine</span><span class=cF0>(dc,h&gt;&gt;1,v&gt;&gt;1,
<a name="l363"></a> h&gt;&gt;1+radius*</span><span class=cF5>Cos</span><span class=cF7>(</span><span class=cF0>sect_start</span><span class=cF7>)</span><span class=cF0>,
<a name="l364"></a> v&gt;&gt;1+radius*</span><span class=cF5>Sin</span><span class=cF7>(</span><span class=cF0>sect_start</span><span class=cF7>)</span><span class=cF0>);
<a name="l365"></a> </span><span class=cF5>GrLine</span><span class=cF0>(dc,h&gt;&gt;1,v&gt;&gt;1,
<a name="l366"></a> h&gt;&gt;1+radius*</span><span class=cF5>Cos</span><span class=cF7>(</span><span class=cF0>sect_end</span><span class=cF7>)</span><span class=cF0>,
<a name="l367"></a> v&gt;&gt;1+radius*</span><span class=cF5>Sin</span><span class=cF7>(</span><span class=cF0>sect_end</span><span class=cF7>)</span><span class=cF0>);
<a name="l368"></a>
<a name="l369"></a> attr=</span><span class=cF5>DrvTextAttrGet</span><span class=cF0>(</span><span class=cF5>Drv2Let</span><span class=cF7>(</span><span class=cF0>dv</span><span class=cF7>)</span><span class=cF0>);
<a name="l370"></a> dc-&gt;color=attr&amp;15;
<a name="l371"></a> </span><span class=cF5>GrPrint</span><span class=cF0>(dc,0,v-</span><span class=cF3>FONT_HEIGHT</span><span class=cF0>*j,</span><span class=cF6>&quot;%C %-8Z&quot;</span><span class=cF0>,</span><span class=cF5>Drv2Let</span><span class=cF7>(</span><span class=cF0>dv</span><span class=cF7>)</span><span class=cF0>,
<a name="l372"></a> dv-&gt;fs_type,</span><span class=cF6>&quot;ST_DRV_TYPES&quot;</span><span class=cF0>);
<a name="l373"></a> dc-&gt;color.c1=attr&gt;&gt;4;
<a name="l374"></a> dc-&gt;color|=</span><span class=cF3>ROPF_DITHER</span><span class=cF0>;
<a name="l375"></a> </span><span class=cF5>GrFloodFill</span><span class=cF0>(dc,
<a name="l376"></a> h&gt;&gt;1+</span><span class=cF7>(</span><span class=cF0>radius-4</span><span class=cF7>)</span><span class=cF0>*</span><span class=cF5>Cos</span><span class=cF7>(</span><span class=cF0>(sect_start+sect_end)/2</span><span class=cF7>)</span><span class=cF0>,
<a name="l377"></a> v&gt;&gt;1+</span><span class=cF7>(</span><span class=cF0>radius-4</span><span class=cF7>)</span><span class=cF0>*</span><span class=cF5>Sin</span><span class=cF7>(</span><span class=cF0>(sect_start+sect_end)/2</span><span class=cF7>)</span><span class=cF0>,</span><span class=cF3>FALSE</span><span class=cF0>);
<a name="l378"></a> j++;
<a name="l379"></a> }
<a name="l380"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l381"></a>
<a name="l382"></a> </span><span class=cF5>GetChar</span><span class=cF0>(,</span><span class=cF3>FALSE</span><span class=cF0>);
<a name="l383"></a> </span><span class=cF5>SettingsPop</span><span class=cF0>;
<a name="l384"></a> </span><span class=cF5>DCFill</span><span class=cF0>;
<a name="l385"></a> </span><span class=cF5>DCDel</span><span class=cF0>(dc);
<a name="l386"></a>}
<a name="l387"></a>
<a name="l388"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>RedSeaUnusedDrvSpace</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> drv_let=0)
<a name="l389"></a>{
<a name="l390"></a> </span><span class=cF9>CDrv</span><span class=cF0> *dv=</span><span class=cF5>Let2Drv</span><span class=cF0>(drv_let);
<a name="l391"></a> </span><span class=cF9>I64</span><span class=cF0> res=0,i,l;
<a name="l392"></a> </span><span class=cF1>U8</span><span class=cF0> *bitmap;
<a name="l393"></a> </span><span class=cF1>try</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l394"></a> l=dv-&gt;size+dv-&gt;drv_offset-dv-&gt;data_area;
<a name="l395"></a> i=(</span><span class=cF7>(</span><span class=cF0>l+7</span><span class=cF7>)</span><span class=cF0>&gt;&gt;3+</span><span class=cF3>BLK_SIZE</span><span class=cF0>-1)&gt;&gt;</span><span class=cF3>BLK_SIZE_BITS</span><span class=cF0>;
<a name="l396"></a> bitmap=</span><span class=cF5>MAlloc</span><span class=cF0>(i&lt;&lt;</span><span class=cF3>BLK_SIZE_BITS</span><span class=cF0>);
<a name="l397"></a> </span><span class=cF5>BlkRead</span><span class=cF0>(dv,bitmap,dv-&gt;fat1,i);
<a name="l398"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;l;i++)
<a name="l399"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>bitmap,i</span><span class=cF7>)</span><span class=cF0>)
<a name="l400"></a> res++;
<a name="l401"></a> </span><span class=cF5>Free</span><span class=cF0>(bitmap);
<a name="l402"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>catch</span><span class=cF0>
<a name="l403"></a> </span><span class=cF5>DrvUnlock</span><span class=cF0>(dv);
<a name="l404"></a> </span><span class=cF1>return</span><span class=cF0> res*</span><span class=cF3>BLK_SIZE</span><span class=cF0>*dv-&gt;spc;
<a name="l405"></a>}
<a name="l406"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>FAT32UnusedDrvSpace</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> drv_let=0)
<a name="l407"></a>{
<a name="l408"></a> </span><span class=cF9>CDrv</span><span class=cF0> *dv=</span><span class=cF5>Let2Drv</span><span class=cF0>(drv_let);
<a name="l409"></a> </span><span class=cF9>I64</span><span class=cF0> res=0,i,l;
<a name="l410"></a> </span><span class=cF9>U32</span><span class=cF0> *bitmap;
<a name="l411"></a> </span><span class=cF1>try</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l412"></a> l=(dv-&gt;size+dv-&gt;spc-1)/dv-&gt;spc-(2+dv-&gt;data_area-dv-&gt;drv_offset);
<a name="l413"></a> i=(l*4+</span><span class=cF3>BLK_SIZE</span><span class=cF0>-1)&gt;&gt;</span><span class=cF3>BLK_SIZE_BITS</span><span class=cF0>;
<a name="l414"></a> bitmap=</span><span class=cF5>MAlloc</span><span class=cF0>(i&lt;&lt;</span><span class=cF3>BLK_SIZE_BITS</span><span class=cF0>);
<a name="l415"></a> </span><span class=cF5>BlkRead</span><span class=cF0>(dv,bitmap,dv-&gt;fat1,i);
<a name="l416"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;l;i++)
<a name="l417"></a> </span><span class=cF1>if</span><span class=cF0> (!bitmap[i])
<a name="l418"></a> res++;
<a name="l419"></a> </span><span class=cF5>Free</span><span class=cF0>(bitmap);
<a name="l420"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>catch</span><span class=cF0>
<a name="l421"></a> </span><span class=cF5>DrvUnlock</span><span class=cF0>(dv);
<a name="l422"></a> </span><span class=cF1>return</span><span class=cF0> res*</span><span class=cF3>BLK_SIZE</span><span class=cF0>*dv-&gt;spc;
<a name="l423"></a>}
<a name="l424"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>DrvUnused</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> drv_let=0)
<a name="l425"></a>{</span><span class=cF2>//Returns unused size in bytes.</span><span class=cF0>
<a name="l426"></a> </span><span class=cF9>CDrv</span><span class=cF0> *dv=</span><span class=cF5>Let2Drv</span><span class=cF0>(drv_let),*old_dv=</span><span class=cF5>Fs</span><span class=cF0>-&gt;cur_dv;
<a name="l427"></a> </span><span class=cF1>U8</span><span class=cF0> *old_dir=</span><span class=cF5>StrNew</span><span class=cF0>(</span><span class=cF5>Fs</span><span class=cF0>-&gt;cur_dir);
<a name="l428"></a> </span><span class=cF9>I64</span><span class=cF0> res=0;
<a name="l429"></a> </span><span class=cF5>Drv</span><span class=cF0>(drv_let);
<a name="l430"></a> </span><span class=cF1>switch</span><span class=cF0> (dv-&gt;fs_type) </span><span class=cF7>{</span><span class=cF0>
<a name="l431"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>FSt_REDSEA</span><span class=cF0>:
<a name="l432"></a> res=</span><span class=cF5>RedSeaUnusedDrvSpace</span><span class=cF0>(drv_let);
<a name="l433"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l434"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>FSt_FAT32</span><span class=cF0>:
<a name="l435"></a> res=</span><span class=cF5>FAT32UnusedDrvSpace</span><span class=cF0>(drv_let);
<a name="l436"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l437"></a> </span><span class=cF1>default</span><span class=cF0>:
<a name="l438"></a> </span><span class=cF5>PrintErr</span><span class=cF0>(</span><span class=cF6>&quot;File System Not Supported\n&quot;</span><span class=cF0>);
<a name="l439"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l440"></a> </span><span class=cF5>Drv</span><span class=cF0>(</span><span class=cF5>Drv2Let</span><span class=cF7>(</span><span class=cF0>old_dv</span><span class=cF7>)</span><span class=cF0>);
<a name="l441"></a> </span><span class=cF5>Cd</span><span class=cF0>(old_dir);
<a name="l442"></a> </span><span class=cF5>Free</span><span class=cF0>(old_dir);
<a name="l443"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l444"></a>}
</span></pre></body>
</html>

View File

@ -0,0 +1,198 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF0>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Install;File/Cmd Line (Typically);Cmd Line (Typically)&quot;</span><span class=cF0>
<a name="l2"></a>
<a name="l3"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ROUND_DRV_TO</span><span class=cF0> (63*255)
<a name="l4"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>DRV_HEADER</span><span class=cF0> 63
<a name="l5"></a>
<a name="l6"></a></span><span class=cF1>class</span><span class=cF0> </span><span class=cF9>CPlannedDrv</span><span class=cF0>
<a name="l7"></a>{
<a name="l8"></a> </span><span class=cF9>CPlannedDrv</span><span class=cF0> *next,*last;
<a name="l9"></a> </span><span class=cF9>I64</span><span class=cF0> size;
<a name="l10"></a> </span><span class=cF1>Bool</span><span class=cF0> pri;
<a name="l11"></a>};
<a name="l12"></a>
<a name="l13"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>DskPrt</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> drv_let=0,...)
<a name="l14"></a>{</span><span class=cF2>/*Partition the disk containing partition drv_let.</span><span class=cF0>
<a name="l15"></a>
<a name="l16"></a></span><span class=cF2>drv_let=0 means add new drive that is not already mounted.</span><span class=cF0>
<a name="l17"></a>
<a name="l18"></a></span><span class=cF2>&gt;DskPrt('C',0.5,0.25,0.25); //Make three. 50% C, 25% D, 25% E, round-up to blk.</span><span class=cF0>
<a name="l19"></a>
<a name="l20"></a></span><span class=cF2>*/</span><span class=cF0>
<a name="l21"></a> </span><span class=cF9>CBlkDev</span><span class=cF0> *bd;
<a name="l22"></a> </span><span class=cF9>CPlannedDrv</span><span class=cF0> head,*tmppp;
<a name="l23"></a> </span><span class=cF9>CMasterBoot</span><span class=cF0> mbr;
<a name="l24"></a> </span><span class=cF1>Bool</span><span class=cF0> pri=</span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l25"></a> </span><span class=cF9>I64</span><span class=cF0> ext_base,drv_let2,pri_cnt=0,i,start_offset,</span><span class=cF1>offset</span><span class=cF0>,
<a name="l26"></a> total,remaining,cur_arg=0;
<a name="l27"></a> </span><span class=cF6>&quot;This command does not play well\n&quot;</span><span class=cF0>
<a name="l28"></a> </span><span class=cF6>&quot;with other operating systems.\n&quot;</span><span class=cF0>
<a name="l29"></a> </span><span class=cF6>&quot;You really should use another\n&quot;</span><span class=cF0>
<a name="l30"></a> </span><span class=cF6>&quot;operating system's partitioner.\n&quot;</span><span class=cF0>
<a name="l31"></a> </span><span class=cF6>&quot;If you use this, it may, in fact,\n&quot;</span><span class=cF0>
<a name="l32"></a> </span><span class=cF6>&quot;make your hard drive impossible\n&quot;</span><span class=cF0>
<a name="l33"></a> </span><span class=cF6>&quot;to repartition with other operating\n&quot;</span><span class=cF0>
<a name="l34"></a> </span><span class=cF6>&quot;until you set block zero to zero\n&quot;</span><span class=cF0>
<a name="l35"></a> </span><span class=cF6>&quot;with $LK,\&quot;BootMHDZero\&quot;,\&quot;MN:BootMHDZero\&quot;$()\n\n\n&quot;</span><span class=cF0>
<a name="l36"></a> </span><span class=cF6>&quot;Continue&quot;</span><span class=cF0>;
<a name="l37"></a> </span><span class=cF1>if</span><span class=cF0> (argc&lt;=cur_arg &amp;&amp; !</span><span class=cF5>YorN</span><span class=cF0>)
<a name="l38"></a> </span><span class=cF1>return</span><span class=cF0> 0;
<a name="l39"></a> </span><span class=cF6>'\n'</span><span class=cF0>;
<a name="l40"></a>
<a name="l41"></a> </span><span class=cF1>if</span><span class=cF0> (drv_let &amp;&amp; !</span><span class=cF5>Let2BlkDev</span><span class=cF7>(</span><span class=cF0>drv_let,</span><span class=cF3>FALSE</span><span class=cF7>)</span><span class=cF0>)
<a name="l42"></a> drv_let=0;
<a name="l43"></a> </span><span class=cF1>if</span><span class=cF0> (!drv_let &amp;&amp; !</span><span class=cF7>(</span><span class=cF0>drv_let=</span><span class=cF5>Mount</span><span class=cF0>(</span><span class=cF3>TRUE</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0> ||
<a name="l44"></a> !</span><span class=cF7>(</span><span class=cF0>bd=</span><span class=cF5>Let2BlkDev</span><span class=cF0>(drv_let,</span><span class=cF3>FALSE</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0> || bd-&gt;type!=</span><span class=cF3>BDT_ATA</span><span class=cF0>)
<a name="l45"></a> </span><span class=cF1>return</span><span class=cF0> 0;
<a name="l46"></a>
<a name="l47"></a> total=bd-&gt;max_blk+1;
<a name="l48"></a> </span><span class=cF5>QueInit</span><span class=cF0>(&amp;head);
<a name="l49"></a> drv_let2=bd-&gt;first_drv_let;
<a name="l50"></a> remaining=</span><span class=cF5>FloorU64</span><span class=cF0>(bd-&gt;max_blk+1,</span><span class=cF3>ROUND_DRV_TO</span><span class=cF0>);
<a name="l51"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF5>FloorU64</span><span class=cF7>(</span><span class=cF0>remaining,</span><span class=cF3>ROUND_DRV_TO</span><span class=cF7>)</span><span class=cF0>&gt;=</span><span class=cF3>ROUND_DRV_TO</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l52"></a> tmppp=</span><span class=cF5>MAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CPlannedDrv</span><span class=cF7>)</span><span class=cF0>);
<a name="l53"></a> </span><span class=cF1>do</span><span class=cF0> {
<a name="l54"></a> </span><span class=cF6>&quot;$RED$Partition %C$FG$\n&quot;</span><span class=cF0>,drv_let2;
<a name="l55"></a> tmppp-&gt;pri=</span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l56"></a> </span><span class=cF1>if</span><span class=cF0> (pri) </span><span class=cF7>{</span><span class=cF0>
<a name="l57"></a> </span><span class=cF6>&quot;Primary Partition&quot;</span><span class=cF0>;
<a name="l58"></a> </span><span class=cF1>if</span><span class=cF0> (argc&gt;cur_arg || </span><span class=cF5>YorN</span><span class=cF0>) {
<a name="l59"></a> pri_cnt++;
<a name="l60"></a> tmppp-&gt;pri=</span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l61"></a> </span><span class=cF1>if</span><span class=cF0> (pri_cnt==3)
<a name="l62"></a> pri=</span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l63"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l64"></a> pri=</span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l65"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l66"></a> </span><span class=cF6>&quot;\nBlocks Remaining:%d (0x%X)\n&quot;</span><span class=cF0>,
<a name="l67"></a> remaining-</span><span class=cF3>DRV_HEADER</span><span class=cF0>,remaining-</span><span class=cF3>DRV_HEADER</span><span class=cF0>;
<a name="l68"></a> </span><span class=cF1>if</span><span class=cF0> (argc&gt;cur_arg)
<a name="l69"></a> tmppp-&gt;size=</span><span class=cF5>MinI64</span><span class=cF0>(</span><span class=cF5>CeilU64</span><span class=cF7>(</span><span class=cF5>MaxI64</span><span class=cF0>(remaining,</span><span class=cF3>DRV_HEADER</span><span class=cF0>),</span><span class=cF3>ROUND_DRV_TO</span><span class=cF7>)</span><span class=cF0>,
<a name="l70"></a> </span><span class=cF5>CeilU64</span><span class=cF7>(</span><span class=cF0>argv[cur_arg++](</span><span class=cF1>F64</span><span class=cF0>)*total,</span><span class=cF3>ROUND_DRV_TO</span><span class=cF7>)</span><span class=cF0>);
<a name="l71"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l72"></a> tmppp-&gt;size=</span><span class=cF5>CeilU64</span><span class=cF0>(</span><span class=cF5>GetI64</span><span class=cF7>(</span><span class=cF6>&quot;Size in Blocks :&quot;</span><span class=cF0>,
<a name="l73"></a> remaining-</span><span class=cF3>DRV_HEADER</span><span class=cF7>)</span><span class=cF0>+</span><span class=cF3>DRV_HEADER</span><span class=cF0>,</span><span class=cF3>ROUND_DRV_TO</span><span class=cF0>);
<a name="l74"></a> } </span><span class=cF1>while</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF3>ROUND_DRV_TO</span><span class=cF0>&lt;=tmppp-&gt;size&lt;=</span><span class=cF5>FloorU64</span><span class=cF0>(remaining,</span><span class=cF3>ROUND_DRV_TO</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0>);
<a name="l75"></a> </span><span class=cF5>QueIns</span><span class=cF0>(tmppp,head.last);
<a name="l76"></a> remaining-=tmppp-&gt;size;
<a name="l77"></a> drv_let2++;
<a name="l78"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l79"></a>
<a name="l80"></a> </span><span class=cF6>&quot;\n\n!!! Repartition Drive !!!\n\n&quot;</span><span class=cF0>;
<a name="l81"></a> tmppp=head.next;
<a name="l82"></a> drv_let2=bd-&gt;first_drv_let;
<a name="l83"></a> </span><span class=cF1>while</span><span class=cF0> (tmppp!=&amp;head) </span><span class=cF7>{</span><span class=cF0>
<a name="l84"></a> </span><span class=cF6>&quot;Drive %C:%08X &quot;</span><span class=cF0>,drv_let2,tmppp-&gt;size;
<a name="l85"></a> </span><span class=cF1>if</span><span class=cF0> (tmppp-&gt;pri)
<a name="l86"></a> </span><span class=cF6>&quot;Primary\n&quot;</span><span class=cF0>;
<a name="l87"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l88"></a> </span><span class=cF6>&quot;Logical\n&quot;</span><span class=cF0>;
<a name="l89"></a> tmppp=tmppp-&gt;next;
<a name="l90"></a> drv_let2++;
<a name="l91"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l92"></a> </span><span class=cF1>if</span><span class=cF0> (!argc &amp;&amp; !</span><span class=cF5>AreYouSure</span><span class=cF0>)
<a name="l93"></a> </span><span class=cF1>goto</span><span class=cF0> pd_done;
<a name="l94"></a>
<a name="l95"></a> remaining=</span><span class=cF5>FloorU64</span><span class=cF0>(bd-&gt;max_blk+1,</span><span class=cF3>ROUND_DRV_TO</span><span class=cF0>)-</span><span class=cF3>ROUND_DRV_TO</span><span class=cF0>;
<a name="l96"></a> tmppp=head.next;
<a name="l97"></a> </span><span class=cF5>MemSet</span><span class=cF0>(&amp;mbr,0,</span><span class=cF3>BLK_SIZE</span><span class=cF0>);
<a name="l98"></a> mbr.signature=0xAA55;
<a name="l99"></a> </span><span class=cF1>offset</span><span class=cF0>=0;
<a name="l100"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;pri_cnt;i++) </span><span class=cF7>{</span><span class=cF0>
<a name="l101"></a> mbr.p[i].active=0x80;
<a name="l102"></a> mbr.p[i].start_head=0;
<a name="l103"></a> mbr.p[i].start_cyl=0x101;
<a name="l104"></a> mbr.p[i].type=1; </span><span class=cF2>//Will get set different.</span><span class=cF0>
<a name="l105"></a> mbr.p[i].end_head=0xFE;
<a name="l106"></a> mbr.p[i].end_cyl=0xFFFF;
<a name="l107"></a> mbr.p[i].</span><span class=cF1>offset</span><span class=cF0>=</span><span class=cF3>DRV_HEADER</span><span class=cF0>+</span><span class=cF1>offset</span><span class=cF0>;
<a name="l108"></a> mbr.p[i].size=tmppp-&gt;size-</span><span class=cF3>DRV_HEADER</span><span class=cF0>;
<a name="l109"></a> </span><span class=cF1>offset</span><span class=cF0>+=tmppp-&gt;size;
<a name="l110"></a> remaining-=tmppp-&gt;size;
<a name="l111"></a> tmppp=tmppp-&gt;next;
<a name="l112"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l113"></a> </span><span class=cF1>if</span><span class=cF0> (!i) i++;
<a name="l114"></a> </span><span class=cF1>if</span><span class=cF0> (tmppp!=&amp;head) </span><span class=cF7>{</span><span class=cF0>
<a name="l115"></a> mbr.p[i].active=0x80;
<a name="l116"></a> mbr.p[i].start_head=0;
<a name="l117"></a> mbr.p[i].start_cyl=0x101;
<a name="l118"></a> mbr.p[i].type=0xF;
<a name="l119"></a> mbr.p[i].end_head=0xFE;
<a name="l120"></a> mbr.p[i].end_cyl=0xFFFF;
<a name="l121"></a> mbr.p[i].</span><span class=cF1>offset</span><span class=cF0>=</span><span class=cF1>offset</span><span class=cF0>;
<a name="l122"></a> mbr.p[i].size=remaining;
<a name="l123"></a> ext_base=</span><span class=cF1>offset</span><span class=cF0>;
<a name="l124"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l125"></a> </span><span class=cF5>ATAWriteBlks</span><span class=cF0>(bd,&amp;mbr,0,1);
<a name="l126"></a>
<a name="l127"></a> </span><span class=cF1>while</span><span class=cF0> (tmppp!=&amp;head) </span><span class=cF7>{</span><span class=cF0>
<a name="l128"></a> start_offset=</span><span class=cF1>offset</span><span class=cF0>;
<a name="l129"></a> </span><span class=cF5>MemSet</span><span class=cF0>(&amp;mbr,0,</span><span class=cF3>BLK_SIZE</span><span class=cF0>);
<a name="l130"></a> mbr.signature=0xAA55;
<a name="l131"></a>
<a name="l132"></a> mbr.p[0].active=0x80;
<a name="l133"></a> mbr.p[0].start_head=1;
<a name="l134"></a> mbr.p[0].start_cyl=0x101;
<a name="l135"></a> mbr.p[0].type=1; </span><span class=cF2>//Will get set different.</span><span class=cF0>
<a name="l136"></a> mbr.p[0].end_head=0xFE;
<a name="l137"></a> mbr.p[0].end_cyl=0xFFFF;
<a name="l138"></a> mbr.p[0].</span><span class=cF1>offset</span><span class=cF0>=</span><span class=cF3>DRV_HEADER</span><span class=cF0>;
<a name="l139"></a> mbr.p[0].size=tmppp-&gt;size-</span><span class=cF3>DRV_HEADER</span><span class=cF0>;
<a name="l140"></a> </span><span class=cF1>offset</span><span class=cF0>+=tmppp-&gt;size;
<a name="l141"></a> tmppp=tmppp-&gt;next;
<a name="l142"></a> </span><span class=cF1>if</span><span class=cF0> (tmppp!=&amp;head) {
<a name="l143"></a> mbr.p[1].active=0x80;
<a name="l144"></a> mbr.p[1].start_head=0;
<a name="l145"></a> mbr.p[1].start_cyl=0x101;
<a name="l146"></a> mbr.p[1].type=5;
<a name="l147"></a> mbr.p[1].end_head=0xFE;
<a name="l148"></a> mbr.p[1].end_cyl=0xFFFF;
<a name="l149"></a> mbr.p[1].</span><span class=cF1>offset</span><span class=cF0>=</span><span class=cF1>offset</span><span class=cF0>-ext_base;
<a name="l150"></a> mbr.p[1].size=tmppp-&gt;size;
<a name="l151"></a> }
<a name="l152"></a> </span><span class=cF5>ATAWriteBlks</span><span class=cF0>(bd,&amp;mbr,start_offset,1);
<a name="l153"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l154"></a>
<a name="l155"></a> bd-&gt;flags&amp;=~(</span><span class=cF3>BDF_INITIALIZED</span><span class=cF0> | </span><span class=cF3>BDF_INIT_IN_PROGRESS</span><span class=cF0>);
<a name="l156"></a> </span><span class=cF5>BlkDevAdd</span><span class=cF0>(bd,,</span><span class=cF3>FALSE</span><span class=cF0>,</span><span class=cF3>TRUE</span><span class=cF0>);
<a name="l157"></a> </span><span class=cF1>for</span><span class=cF0> (i=bd-&gt;first_drv_let;i&lt;drv_let2;i++)
<a name="l158"></a> </span><span class=cF5>Fmt</span><span class=cF0>(i,,</span><span class=cF3>FALSE</span><span class=cF0>);
<a name="l159"></a>
<a name="l160"></a> pd_done:
<a name="l161"></a> </span><span class=cF1>while</span><span class=cF0> (head.next!=&amp;head) </span><span class=cF7>{</span><span class=cF0>
<a name="l162"></a> tmppp=head.next;
<a name="l163"></a> </span><span class=cF5>QueRem</span><span class=cF0>(tmppp);
<a name="l164"></a> </span><span class=cF5>Free</span><span class=cF0>(tmppp);
<a name="l165"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l166"></a> </span><span class=cF1>return</span><span class=cF0> total;
<a name="l167"></a>}
</span></pre></body>
</html>

View File

@ -0,0 +1,822 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF0>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;DolDoc/Output;StdOut/DolDoc&quot;</span><span class=cF0>
<a name="l2"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DirFileDoc</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc,</span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde)
<a name="l3"></a>{
<a name="l4"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde) </span><span class=cF7>{</span><span class=cF0>
<a name="l5"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde-&gt;attr &amp; </span><span class=cF3>RS_ATTR_DIR</span><span class=cF0>) {
<a name="l6"></a> tmpde-&gt;user_data=</span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$TR,\&quot;%s\&quot;,U=0x%X$&quot;</span><span class=cF0>,tmpde-&gt;name,tmpde);
<a name="l7"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;\n$ID,+2$&quot;</span><span class=cF0>);
<a name="l8"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde-&gt;sub)
<a name="l9"></a> </span><span class=cF5>DirFileDoc</span><span class=cF0>(doc,tmpde-&gt;sub);
<a name="l10"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$ID,-2$&quot;</span><span class=cF0>);
<a name="l11"></a> } </span><span class=cF1>else</span><span class=cF0> {
<a name="l12"></a> tmpde-&gt;user_data=</span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$MU,\&quot;%s\&quot;,U=0x%X$&quot;</span><span class=cF0>,tmpde-&gt;name,tmpde);
<a name="l13"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;\n&quot;</span><span class=cF0>);
<a name="l14"></a> }
<a name="l15"></a> tmpde=tmpde-&gt;next;
<a name="l16"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l17"></a>}
<a name="l18"></a>
<a name="l19"></a>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;File/Cmd Line (Typically);Cmd Line (Typically)&quot;</span><span class=cF0>
<a name="l20"></a>
<a name="l21"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>FM_NORMAL</span><span class=cF0> 0
<a name="l22"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>FM_PICK_FILE</span><span class=cF0> 1
<a name="l23"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>FM_PICK_DIR</span><span class=cF0> 2
<a name="l24"></a>
<a name="l25"></a></span><span class=cF1>class</span><span class=cF0> </span><span class=cF9>CFMUncollapsedLst</span><span class=cF0>
<a name="l26"></a>{
<a name="l27"></a> </span><span class=cF9>CFMUncollapsedLst</span><span class=cF0> *next;
<a name="l28"></a> </span><span class=cF1>U8</span><span class=cF0> *name;
<a name="l29"></a>};
<a name="l30"></a>
<a name="l31"></a></span><span class=cF9>CFMUncollapsedLst</span><span class=cF0> *</span><span class=cF5>FMCollectUncollapsedLst</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc)
<a name="l32"></a>{
<a name="l33"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_e=doc-&gt;head.next;
<a name="l34"></a> </span><span class=cF9>CFMUncollapsedLst</span><span class=cF0> *res=</span><span class=cF3>NULL</span><span class=cF0>,*tmpc;
<a name="l35"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde;
<a name="l36"></a> </span><span class=cF1>while</span><span class=cF0> (doc_e!=doc) </span><span class=cF7>{</span><span class=cF0>
<a name="l37"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;type_u8==</span><span class=cF3>DOCT_TREE</span><span class=cF0>) {
<a name="l38"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>doc_e-&gt;de_flags&amp;</span><span class=cF3>DOCEF_CHECKED_COLLAPSED</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l39"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde=doc_e-&gt;user_data) {
<a name="l40"></a> tmpc=</span><span class=cF5>MAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CFMUncollapsedLst</span><span class=cF7>)</span><span class=cF0>);
<a name="l41"></a> tmpc-&gt;next=res;
<a name="l42"></a> res=tmpc;
<a name="l43"></a> tmpc-&gt;name=</span><span class=cF5>StrNew</span><span class=cF0>(tmpde-&gt;full_name);
<a name="l44"></a> }
<a name="l45"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l46"></a> }
<a name="l47"></a> doc_e=doc_e-&gt;next;
<a name="l48"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l49"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l50"></a>}
<a name="l51"></a>
<a name="l52"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>FMMarkUncollapsed</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc,</span><span class=cF9>CFMUncollapsedLst</span><span class=cF0> *tmpc,
<a name="l53"></a> </span><span class=cF1>U8</span><span class=cF0> *cur_entry,</span><span class=cF1>U8</span><span class=cF0> *next_entry)
<a name="l54"></a>{
<a name="l55"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_e=doc-&gt;head.next;
<a name="l56"></a> </span><span class=cF9>CFMUncollapsedLst</span><span class=cF0> *tmpc1;
<a name="l57"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde;
<a name="l58"></a> </span><span class=cF1>while</span><span class=cF0> (doc_e!=doc) </span><span class=cF7>{</span><span class=cF0>
<a name="l59"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;type_u8==</span><span class=cF3>DOCT_TREE</span><span class=cF0>) {
<a name="l60"></a> tmpde=doc_e-&gt;user_data;
<a name="l61"></a> tmpc1=tmpc;
<a name="l62"></a> </span><span class=cF1>while</span><span class=cF0> (tmpc1) </span><span class=cF7>{</span><span class=cF0>
<a name="l63"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>StrCmp</span><span class=cF7>(</span><span class=cF0>tmpc1-&gt;name,tmpde-&gt;full_name</span><span class=cF7>)</span><span class=cF0>) {
<a name="l64"></a> doc_e-&gt;de_flags&amp;=~</span><span class=cF3>DOCEF_CHECKED_COLLAPSED</span><span class=cF0>;
<a name="l65"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l66"></a> }
<a name="l67"></a> tmpc1=tmpc1-&gt;next;
<a name="l68"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l69"></a> </span><span class=cF1>if</span><span class=cF0> (cur_entry) </span><span class=cF7>{</span><span class=cF0>
<a name="l70"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>StrNCmp</span><span class=cF7>(</span><span class=cF0>cur_entry,tmpde-&gt;full_name,</span><span class=cF5>StrLen</span><span class=cF0>(tmpde-&gt;full_name)</span><span class=cF7>)</span><span class=cF0>) {
<a name="l71"></a> doc-&gt;cur_entry=doc_e;
<a name="l72"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>StrLen</span><span class=cF7>(</span><span class=cF0>tmpde-&gt;full_name</span><span class=cF7>)</span><span class=cF0>==</span><span class=cF5>StrLen</span><span class=cF7>(</span><span class=cF0>cur_entry</span><span class=cF7>)</span><span class=cF0>)
<a name="l73"></a> cur_entry=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l74"></a> } </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (next_entry) {
<a name="l75"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>StrNCmp</span><span class=cF7>(</span><span class=cF0>next_entry,
<a name="l76"></a> tmpde-&gt;full_name,</span><span class=cF5>StrLen</span><span class=cF0>(tmpde-&gt;full_name)</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l77"></a> doc-&gt;cur_entry=doc_e;
<a name="l78"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>StrLen</span><span class=cF7>(</span><span class=cF0>tmpde-&gt;full_name</span><span class=cF7>)</span><span class=cF0>==</span><span class=cF5>StrLen</span><span class=cF7>(</span><span class=cF0>next_entry</span><span class=cF7>)</span><span class=cF0>)
<a name="l79"></a> cur_entry=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l80"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l81"></a> }
<a name="l82"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l83"></a> } </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;type_u8==</span><span class=cF3>DOCT_MENU_VAL</span><span class=cF0>) {
<a name="l84"></a> tmpde=doc_e-&gt;user_data;
<a name="l85"></a> </span><span class=cF1>if</span><span class=cF0> (cur_entry) </span><span class=cF7>{</span><span class=cF0>
<a name="l86"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>StrNCmp</span><span class=cF7>(</span><span class=cF0>cur_entry,tmpde-&gt;full_name,</span><span class=cF5>StrLen</span><span class=cF0>(tmpde-&gt;full_name)</span><span class=cF7>)</span><span class=cF0>) {
<a name="l87"></a> doc-&gt;cur_entry=doc_e;
<a name="l88"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>StrLen</span><span class=cF7>(</span><span class=cF0>tmpde-&gt;full_name</span><span class=cF7>)</span><span class=cF0>==</span><span class=cF5>StrLen</span><span class=cF7>(</span><span class=cF0>cur_entry</span><span class=cF7>)</span><span class=cF0>)
<a name="l89"></a> cur_entry=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l90"></a> } </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (next_entry) {
<a name="l91"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>StrNCmp</span><span class=cF7>(</span><span class=cF0>next_entry,
<a name="l92"></a> tmpde-&gt;full_name,</span><span class=cF5>StrLen</span><span class=cF0>(tmpde-&gt;full_name)</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l93"></a> doc-&gt;cur_entry=doc_e;
<a name="l94"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>StrLen</span><span class=cF7>(</span><span class=cF0>tmpde-&gt;full_name</span><span class=cF7>)</span><span class=cF0>==</span><span class=cF5>StrLen</span><span class=cF7>(</span><span class=cF0>next_entry</span><span class=cF7>)</span><span class=cF0>)
<a name="l95"></a> cur_entry=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l96"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l97"></a> }
<a name="l98"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l99"></a> }
<a name="l100"></a> doc_e=doc_e-&gt;next;
<a name="l101"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l102"></a>}
<a name="l103"></a>
<a name="l104"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>FMDelUncollapsedLst</span><span class=cF0>(</span><span class=cF9>CFMUncollapsedLst</span><span class=cF0> *tmpc)
<a name="l105"></a>{
<a name="l106"></a> </span><span class=cF9>CFMUncollapsedLst</span><span class=cF0> *tmpc1;
<a name="l107"></a> </span><span class=cF1>while</span><span class=cF0> (tmpc) </span><span class=cF7>{</span><span class=cF0>
<a name="l108"></a> tmpc1=tmpc-&gt;next;
<a name="l109"></a> </span><span class=cF5>Free</span><span class=cF0>(tmpc-&gt;name);
<a name="l110"></a> </span><span class=cF5>Free</span><span class=cF0>(tmpc);
<a name="l111"></a> tmpc=tmpc1;
<a name="l112"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l113"></a>}
<a name="l114"></a>
<a name="l115"></a></span><span class=cF9>CDirEntry</span><span class=cF0> *</span><span class=cF5>FMRebuildDocDrv</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> drv_let,</span><span class=cF9>CDoc</span><span class=cF0> *doc,</span><span class=cF9>CDirEntry</span><span class=cF0> **_head,</span><span class=cF1>Bool</span><span class=cF0> init)
<a name="l116"></a>{
<a name="l117"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde,*tmpde1;
<a name="l118"></a> </span><span class=cF1>U8</span><span class=cF0> *st;
<a name="l119"></a> tmpde=</span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CDirEntry</span><span class=cF7>)</span><span class=cF0>);
<a name="l120"></a> tmpde-&gt;full_name=</span><span class=cF5>MStrPrint</span><span class=cF0>(</span><span class=cF6>&quot;%C:/&quot;</span><span class=cF0>,drv_let);
<a name="l121"></a> tmpde-&gt;attr=</span><span class=cF3>RS_ATTR_DIR</span><span class=cF0>;
<a name="l122"></a> st=</span><span class=cF5>MStrPrint</span><span class=cF0>(</span><span class=cF6>&quot;%c:/*&quot;</span><span class=cF0>,drv_let);
<a name="l123"></a> </span><span class=cF1>if</span><span class=cF0> (init)
<a name="l124"></a> tmpde-&gt;sub=tmpde1=</span><span class=cF5>FilesFind</span><span class=cF0>(st,</span><span class=cF3>FUF_RECURSE</span><span class=cF0>);
<a name="l125"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l126"></a> tmpde1=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l127"></a> </span><span class=cF5>Free</span><span class=cF0>(st);
<a name="l128"></a> tmpde-&gt;user_data=</span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$TR,\&quot;%s\&quot;,U=0x%X$&quot;</span><span class=cF0>,tmpde-&gt;full_name,tmpde);
<a name="l129"></a> tmpde-&gt;next=*_head;
<a name="l130"></a> *_head=tmpde;
<a name="l131"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;\n$ID,+2$&quot;</span><span class=cF0>);
<a name="l132"></a> </span><span class=cF5>DocBottom</span><span class=cF0>(doc);
<a name="l133"></a> </span><span class=cF1>if</span><span class=cF0> (init) </span><span class=cF7>{</span><span class=cF0>
<a name="l134"></a> </span><span class=cF5>DirFileDoc</span><span class=cF0>(doc,tmpde1);
<a name="l135"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde1) {
<a name="l136"></a> tmpde1-&gt;parent=tmpde;
<a name="l137"></a> tmpde1=tmpde1-&gt;next;
<a name="l138"></a> }
<a name="l139"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l140"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$ID,-2$&quot;</span><span class=cF0>);
<a name="l141"></a> </span><span class=cF1>return</span><span class=cF0> tmpde;
<a name="l142"></a>}
<a name="l143"></a>
<a name="l144"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>DEF2_PROCESSED</span><span class=cF0> 1
<a name="l145"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>DEF2_NOT_INITIALIZED</span><span class=cF0> 2
<a name="l146"></a>
<a name="l147"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>FMRebuildDoc</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> **_doc,</span><span class=cF9>CDirEntry</span><span class=cF0> **_head,</span><span class=cF9>I64</span><span class=cF0> mode)
<a name="l148"></a>{
<a name="l149"></a> </span><span class=cF9>CDrv</span><span class=cF0> *dv;
<a name="l150"></a> </span><span class=cF9>I64</span><span class=cF0> i;
<a name="l151"></a> </span><span class=cF9>CDoc</span><span class=cF0> *doc=*_doc,*doc2=</span><span class=cFB>sys_clip_doc</span><span class=cF0>,*parent_doc;
<a name="l152"></a> </span><span class=cF9>CFMUncollapsedLst</span><span class=cF0> *tmpc=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l153"></a> </span><span class=cF1>U8</span><span class=cF0> *cur_entry=</span><span class=cF3>NULL</span><span class=cF0>,*next_entry=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l154"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_ce;
<a name="l155"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde,*tmpde1,*cur_tree_entry;
<a name="l156"></a> </span><span class=cF1>if</span><span class=cF0> (!doc)
<a name="l157"></a> parent_doc=</span><span class=cF5>DocPut</span><span class=cF0>;
<a name="l158"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l159"></a> parent_doc=doc-&gt;parent_doc;
<a name="l160"></a> </span><span class=cF5>Fs</span><span class=cF0>-&gt;put_doc=</span><span class=cF5>Fs</span><span class=cF0>-&gt;display_doc=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l161"></a> </span><span class=cF5>DocUnlock</span><span class=cF0>(doc);
<a name="l162"></a> </span><span class=cF5>Refresh</span><span class=cF0>;
<a name="l163"></a> </span><span class=cF5>DocLock</span><span class=cF0>(doc);
<a name="l164"></a> cur_tree_entry=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l165"></a> doc_ce=doc-&gt;cur_entry;
<a name="l166"></a> </span><span class=cF1>if</span><span class=cF0> (doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_TREE</span><span class=cF0> || doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_MENU_VAL</span><span class=cF0>)
<a name="l167"></a> cur_tree_entry=doc_ce-&gt;user_data;
<a name="l168"></a> </span><span class=cF1>if</span><span class=cF0> (cur_tree_entry)
<a name="l169"></a> cur_entry=</span><span class=cF5>StrNew</span><span class=cF0>(cur_tree_entry-&gt;full_name);
<a name="l170"></a> tmpde=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l171"></a> </span><span class=cF1>if</span><span class=cF0> (doc_ce!=doc)
<a name="l172"></a> doc_ce=doc_ce-&gt;next;
<a name="l173"></a> </span><span class=cF1>while</span><span class=cF0> (doc_ce!=doc) {
<a name="l174"></a> </span><span class=cF1>if</span><span class=cF0> (doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_TREE</span><span class=cF0> || doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_MENU_VAL</span><span class=cF0>)
<a name="l175"></a> tmpde=doc_ce-&gt;user_data;
<a name="l176"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l177"></a> tmpde=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l178"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde) </span><span class=cF7>{</span><span class=cF0>
<a name="l179"></a> tmpde1=tmpde-&gt;parent;
<a name="l180"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde1) {
<a name="l181"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde1==cur_tree_entry) </span><span class=cF7>{</span><span class=cF0>
<a name="l182"></a> tmpde=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l183"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l184"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l185"></a> tmpde1=tmpde1-&gt;parent;
<a name="l186"></a> }
<a name="l187"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde)
<a name="l188"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l189"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l190"></a> doc_ce=doc_ce-&gt;next;
<a name="l191"></a> }
<a name="l192"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde)
<a name="l193"></a> next_entry=</span><span class=cF5>StrNew</span><span class=cF0>(tmpde-&gt;full_name);
<a name="l194"></a>
<a name="l195"></a> tmpc=</span><span class=cF5>FMCollectUncollapsedLst</span><span class=cF0>(doc);
<a name="l196"></a> </span><span class=cF5>DocDel</span><span class=cF0>(doc);
<a name="l197"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l198"></a> </span><span class=cF1>if</span><span class=cF0> (*_head) </span><span class=cF7>{</span><span class=cF0>
<a name="l199"></a> </span><span class=cF5>DirTreeDel</span><span class=cF0>(*_head);
<a name="l200"></a> *_head=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l201"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l202"></a> doc=</span><span class=cF5>DocNew</span><span class=cF0>;
<a name="l203"></a> doc-&gt;desc=</span><span class=cF6>'FileMan'</span><span class=cF0>;
<a name="l204"></a> doc-&gt;parent_doc=parent_doc;
<a name="l205"></a> doc-&gt;flags|=</span><span class=cF3>DOCF_FORM</span><span class=cF0>;
<a name="l206"></a> </span><span class=cF1>switch</span><span class=cF0> (mode) </span><span class=cF7>{</span><span class=cF0>
<a name="l207"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>FM_NORMAL</span><span class=cF0>:
<a name="l208"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$PURPLE$File Manager\n\n&quot;</span><span class=cF0>
<a name="l209"></a> </span><span class=cF6>&quot;$LK,\&quot;Click for Help\&quot;,A=\&quot;FI:::/Doc/FileMgr.DD\&quot;$\n\n&quot;</span><span class=cF0>);
<a name="l210"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l211"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>FM_PICK_FILE</span><span class=cF0>:
<a name="l212"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$PURPLE$Pick file and press &lt;ESC&gt;\n\n&quot;</span><span class=cF0>);
<a name="l213"></a> doc-&gt;flags|=</span><span class=cF3>DOCF_SIZE_MIN</span><span class=cF0>;
<a name="l214"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l215"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>FM_PICK_DIR</span><span class=cF0>:
<a name="l216"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$PURPLE$Pick directory and press &lt;ESC&gt;\n\n&quot;</span><span class=cF0>);
<a name="l217"></a> doc-&gt;flags|=</span><span class=cF3>DOCF_SIZE_MIN</span><span class=cF0>;
<a name="l218"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l219"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l220"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$LTBLUE$&quot;</span><span class=cF0>);
<a name="l221"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;</span><span class=cF3>DRVS_NUM</span><span class=cF0>;i++) </span><span class=cF7>{</span><span class=cF0>
<a name="l222"></a> dv=&amp;</span><span class=cFB>blkdev</span><span class=cF0>.drvs[i];
<a name="l223"></a> </span><span class=cF1>if</span><span class=cF0> (dv-&gt;bd-&gt;type==</span><span class=cF3>BDT_ATAPI</span><span class=cF0>) {
<a name="l224"></a> </span><span class=cF1>if</span><span class=cF0> (dv-&gt;bd-&gt;flags&amp;</span><span class=cF3>BDF_INITIALIZED</span><span class=cF0>)
<a name="l225"></a> tmpde=</span><span class=cF5>FMRebuildDocDrv</span><span class=cF0>(</span><span class=cF5>Drv2Let</span><span class=cF7>(</span><span class=cF0>dv</span><span class=cF7>)</span><span class=cF0>,doc,_head,</span><span class=cF3>TRUE</span><span class=cF0>);
<a name="l226"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l227"></a> tmpde=</span><span class=cF5>FMRebuildDocDrv</span><span class=cF0>(</span><span class=cF5>Drv2Let</span><span class=cF7>(</span><span class=cF0>dv</span><span class=cF7>)</span><span class=cF0>,doc,_head,</span><span class=cF3>FALSE</span><span class=cF0>);
<a name="l228"></a> tmpde-&gt;user_data2|=</span><span class=cF3>DEF2_NOT_INITIALIZED</span><span class=cF0>;
<a name="l229"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l230"></a> } </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (dv-&gt;fs_type==</span><span class=cF3>FSt_REDSEA</span><span class=cF0> || dv-&gt;fs_type==</span><span class=cF3>FSt_FAT32</span><span class=cF0>)
<a name="l231"></a> </span><span class=cF5>FMRebuildDocDrv</span><span class=cF0>(</span><span class=cF5>Drv2Let</span><span class=cF7>(</span><span class=cF0>dv</span><span class=cF7>)</span><span class=cF0>,doc,_head,</span><span class=cF3>TRUE</span><span class=cF0>);
<a name="l232"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l233"></a> </span><span class=cF5>DocTop</span><span class=cF0>(doc);
<a name="l234"></a> </span><span class=cF5>FMMarkUncollapsed</span><span class=cF0>(doc,tmpc,cur_entry,next_entry);
<a name="l235"></a> </span><span class=cF5>DocCenter</span><span class=cF0>(doc);
<a name="l236"></a> </span><span class=cF5>DocRst</span><span class=cF0>(doc2,</span><span class=cF3>TRUE</span><span class=cF0>);
<a name="l237"></a> </span><span class=cF5>FMDelUncollapsedLst</span><span class=cF0>(tmpc);
<a name="l238"></a> </span><span class=cF5>Free</span><span class=cF0>(cur_entry);
<a name="l239"></a> </span><span class=cF5>Free</span><span class=cF0>(next_entry);
<a name="l240"></a> *_doc=doc;
<a name="l241"></a> </span><span class=cF5>DocLock</span><span class=cF0>(doc);
<a name="l242"></a> </span><span class=cF5>Fs</span><span class=cF0>-&gt;put_doc=</span><span class=cF5>Fs</span><span class=cF0>-&gt;display_doc=doc;
<a name="l243"></a>}
<a name="l244"></a>
<a name="l245"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>FMRename</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc)
<a name="l246"></a>{
<a name="l247"></a> </span><span class=cF9>CEdFileName</span><span class=cF0> fn;
<a name="l248"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_e=doc-&gt;cur_entry;
<a name="l249"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde=</span><span class=cF3>NULL</span><span class=cF0>,*parent;
<a name="l250"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;type_u8==</span><span class=cF3>DOCT_MENU_VAL</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l251"></a> tmpde=doc_e-&gt;user_data;
<a name="l252"></a> </span><span class=cF1>if</span><span class=cF0> (parent=tmpde-&gt;parent) {
<a name="l253"></a> </span><span class=cF5>Cd</span><span class=cF0>(parent-&gt;full_name);
<a name="l254"></a> </span><span class=cF5>StrCpy</span><span class=cF0>(fn.name,tmpde-&gt;name);
<a name="l255"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>DocForm</span><span class=cF7>(</span><span class=cF0>&amp;fn</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l256"></a> </span><span class=cF5>Silent</span><span class=cF0>;
<a name="l257"></a> </span><span class=cF5>Move</span><span class=cF0>(tmpde-&gt;name,fn.name);
<a name="l258"></a> </span><span class=cF5>Silent</span><span class=cF0>(</span><span class=cF3>OFF</span><span class=cF0>);
<a name="l259"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l260"></a> }
<a name="l261"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;type_u8==</span><span class=cF3>DOCT_TREE</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l262"></a> tmpde=doc_e-&gt;user_data;
<a name="l263"></a> </span><span class=cF1>if</span><span class=cF0> (parent=tmpde-&gt;parent) {
<a name="l264"></a> </span><span class=cF5>Cd</span><span class=cF0>(parent-&gt;full_name);
<a name="l265"></a> </span><span class=cF5>StrCpy</span><span class=cF0>(fn.name,tmpde-&gt;name);
<a name="l266"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>DocForm</span><span class=cF7>(</span><span class=cF0>&amp;fn</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l267"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>StrCmp</span><span class=cF7>(</span><span class=cF0>tmpde-&gt;name,fn.name</span><span class=cF7>)</span><span class=cF0>) {
<a name="l268"></a> </span><span class=cF5>Silent</span><span class=cF0>;
<a name="l269"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>CopyTree</span><span class=cF7>(</span><span class=cF0>tmpde-&gt;name,fn.name</span><span class=cF7>)</span><span class=cF0>)
<a name="l270"></a> </span><span class=cF5>DelTree</span><span class=cF0>(tmpde-&gt;name);
<a name="l271"></a> </span><span class=cF5>Silent</span><span class=cF0>(</span><span class=cF3>OFF</span><span class=cF0>);
<a name="l272"></a> }
<a name="l273"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l274"></a> }
<a name="l275"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l276"></a>}
<a name="l277"></a>
<a name="l278"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>FMMkDir</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc)
<a name="l279"></a>{
<a name="l280"></a> </span><span class=cF9>CEdFileName</span><span class=cF0> fn;
<a name="l281"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_e=doc-&gt;cur_entry;
<a name="l282"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde=</span><span class=cF3>NULL</span><span class=cF0>,*parent;
<a name="l283"></a> *fn.name=0;
<a name="l284"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;type_u8==</span><span class=cF3>DOCT_MENU_VAL</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l285"></a> tmpde=doc_e-&gt;user_data;
<a name="l286"></a> </span><span class=cF1>if</span><span class=cF0> (parent=tmpde-&gt;parent) {
<a name="l287"></a> </span><span class=cF5>Cd</span><span class=cF0>(parent-&gt;full_name);
<a name="l288"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>DocForm</span><span class=cF7>(</span><span class=cF0>&amp;fn</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l289"></a> </span><span class=cF5>Silent</span><span class=cF0>;
<a name="l290"></a> </span><span class=cF5>DirMk</span><span class=cF0>(fn.name);
<a name="l291"></a> </span><span class=cF5>Silent</span><span class=cF0>(</span><span class=cF3>OFF</span><span class=cF0>);
<a name="l292"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l293"></a> }
<a name="l294"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;type_u8==</span><span class=cF3>DOCT_TREE</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l295"></a> tmpde=doc_e-&gt;user_data;
<a name="l296"></a> </span><span class=cF5>Cd</span><span class=cF0>(tmpde-&gt;full_name);
<a name="l297"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>DocForm</span><span class=cF7>(</span><span class=cF0>&amp;fn</span><span class=cF7>)</span><span class=cF0>) {
<a name="l298"></a> </span><span class=cF5>Silent</span><span class=cF0>;
<a name="l299"></a> </span><span class=cF5>DirMk</span><span class=cF0>(fn.name);
<a name="l300"></a> </span><span class=cF5>Silent</span><span class=cF0>(</span><span class=cF3>OFF</span><span class=cF0>);
<a name="l301"></a> }
<a name="l302"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l303"></a>}
<a name="l304"></a>
<a name="l305"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>FMDelete</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc)
<a name="l306"></a>{
<a name="l307"></a> </span><span class=cF1>U8</span><span class=cF0> *st;
<a name="l308"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_ce=doc-&gt;cur_entry;
<a name="l309"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde;
<a name="l310"></a> </span><span class=cF1>if</span><span class=cF0> (doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_MENU_VAL</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l311"></a> tmpde=doc_ce-&gt;user_data;
<a name="l312"></a> </span><span class=cF5>Silent</span><span class=cF0>;
<a name="l313"></a> st=</span><span class=cF5>MStrPrint</span><span class=cF0>(</span><span class=cF6>&quot;Delete: %s&quot;</span><span class=cF0>,tmpde-&gt;full_name);
<a name="l314"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>PopUpCancelOk</span><span class=cF7>(</span><span class=cF0>st</span><span class=cF7>)</span><span class=cF0>)
<a name="l315"></a> </span><span class=cF5>Del</span><span class=cF0>(tmpde-&gt;full_name);
<a name="l316"></a> </span><span class=cF5>Free</span><span class=cF0>(st);
<a name="l317"></a> </span><span class=cF5>Silent</span><span class=cF0>(</span><span class=cF3>OFF</span><span class=cF0>);
<a name="l318"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_TREE</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l319"></a> tmpde=doc_ce-&gt;user_data;
<a name="l320"></a> </span><span class=cF5>Silent</span><span class=cF0>;
<a name="l321"></a> st=</span><span class=cF5>MStrPrint</span><span class=cF0>(</span><span class=cF6>&quot;Delete: %s&quot;</span><span class=cF0>,tmpde-&gt;full_name);
<a name="l322"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>PopUpCancelOk</span><span class=cF7>(</span><span class=cF0>st</span><span class=cF7>)</span><span class=cF0>)
<a name="l323"></a> </span><span class=cF5>DelTree</span><span class=cF0>(tmpde-&gt;full_name);
<a name="l324"></a> </span><span class=cF5>Free</span><span class=cF0>(st);
<a name="l325"></a> </span><span class=cF5>Silent</span><span class=cF0>(</span><span class=cF3>OFF</span><span class=cF0>);
<a name="l326"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l327"></a>}
<a name="l328"></a>
<a name="l329"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>FMChgDsk</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc)
<a name="l330"></a>{
<a name="l331"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_ce=doc-&gt;cur_entry;
<a name="l332"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde;
<a name="l333"></a> </span><span class=cF1>if</span><span class=cF0> (doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_TREE</span><span class=cF0> || doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_MENU_VAL</span><span class=cF0>)
<a name="l334"></a> tmpde=doc_ce-&gt;user_data;
<a name="l335"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l336"></a> tmpde=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l337"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde) </span><span class=cF7>{</span><span class=cF0>
<a name="l338"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde-&gt;parent)
<a name="l339"></a> tmpde=tmpde-&gt;parent;
<a name="l340"></a> </span><span class=cF5>Silent</span><span class=cF0>;
<a name="l341"></a> </span><span class=cF5>DskChg</span><span class=cF0>(*tmpde-&gt;full_name);
<a name="l342"></a> </span><span class=cF5>Silent</span><span class=cF0>(</span><span class=cF3>OFF</span><span class=cF0>);
<a name="l343"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l344"></a>}
<a name="l345"></a>
<a name="l346"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>FMMountISO</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc)
<a name="l347"></a>{
<a name="l348"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_ce=doc-&gt;cur_entry;
<a name="l349"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde;
<a name="l350"></a> </span><span class=cF1>if</span><span class=cF0> (doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_MENU_VAL</span><span class=cF0> &amp;&amp; </span><span class=cF7>(</span><span class=cF0>tmpde=doc_ce-&gt;user_data</span><span class=cF7>)</span><span class=cF0>)
<a name="l351"></a> </span><span class=cF5>MountFile</span><span class=cF0>(tmpde-&gt;full_name);
<a name="l352"></a>}
<a name="l353"></a>
<a name="l354"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>FMUnmount</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc)
<a name="l355"></a>{
<a name="l356"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_ce=doc-&gt;cur_entry;
<a name="l357"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde;
<a name="l358"></a> </span><span class=cF9>I64</span><span class=cF0> drv_let;
<a name="l359"></a> </span><span class=cF1>if</span><span class=cF0> (doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_TREE</span><span class=cF0> || doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_MENU_VAL</span><span class=cF0>)
<a name="l360"></a> tmpde=doc_ce-&gt;user_data;
<a name="l361"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l362"></a> tmpde=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l363"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde) </span><span class=cF7>{</span><span class=cF0>
<a name="l364"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde-&gt;parent)
<a name="l365"></a> tmpde=tmpde-&gt;parent;
<a name="l366"></a> drv_let=*tmpde-&gt;full_name;
<a name="l367"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Let2BlkDev</span><span class=cF7>(</span><span class=cF0>drv_let</span><span class=cF7>)</span><span class=cF0>!=</span><span class=cF5>Let2BlkDev</span><span class=cF7>(</span><span class=cF6>':'</span><span class=cF7>)</span><span class=cF0>)
<a name="l368"></a> </span><span class=cF5>Unmount</span><span class=cF0>(drv_let);
<a name="l369"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l370"></a>}
<a name="l371"></a>
<a name="l372"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>FMFmtDrv</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc)
<a name="l373"></a>{
<a name="l374"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_ce=doc-&gt;cur_entry;
<a name="l375"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde;
<a name="l376"></a> </span><span class=cF1>U8</span><span class=cF0> *st=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l377"></a> </span><span class=cF1>if</span><span class=cF0> (doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_TREE</span><span class=cF0> || doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_MENU_VAL</span><span class=cF0>)
<a name="l378"></a> tmpde=doc_ce-&gt;user_data;
<a name="l379"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l380"></a> tmpde=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l381"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde) </span><span class=cF7>{</span><span class=cF0>
<a name="l382"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde-&gt;parent)
<a name="l383"></a> tmpde=tmpde-&gt;parent;
<a name="l384"></a> st=</span><span class=cF5>MStrPrint</span><span class=cF0>(</span><span class=cF6>&quot;Format Drive '%c'?\nAre You Sure?\n&quot;</span><span class=cF0>,*tmpde-&gt;full_name);
<a name="l385"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>PopUpCancelOk</span><span class=cF7>(</span><span class=cF0>st</span><span class=cF7>)</span><span class=cF0>) {
<a name="l386"></a> </span><span class=cF5>Silent</span><span class=cF0>;
<a name="l387"></a> </span><span class=cF5>Fmt</span><span class=cF0>(*tmpde-&gt;full_name,,</span><span class=cF3>FALSE</span><span class=cF0>);
<a name="l388"></a> </span><span class=cF5>Silent</span><span class=cF0>(</span><span class=cF3>OFF</span><span class=cF0>);
<a name="l389"></a> }
<a name="l390"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l391"></a> </span><span class=cF5>Free</span><span class=cF0>(st);
<a name="l392"></a>}
<a name="l393"></a>
<a name="l394"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>FMMakeISO</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc)
<a name="l395"></a>{
<a name="l396"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_ce=doc-&gt;cur_entry;
<a name="l397"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde;
<a name="l398"></a> </span><span class=cF1>if</span><span class=cF0> (doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_TREE</span><span class=cF0> || doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_MENU_VAL</span><span class=cF0>)
<a name="l399"></a> tmpde=doc_ce-&gt;user_data;
<a name="l400"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l401"></a> tmpde=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l402"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde) </span><span class=cF7>{</span><span class=cF0>
<a name="l403"></a> </span><span class=cF1>if</span><span class=cF0> (doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_MENU_VAL</span><span class=cF0>)
<a name="l404"></a> tmpde=tmpde-&gt;parent;
<a name="l405"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde &amp;&amp; *tmpde-&gt;full_name) {
<a name="l406"></a> </span><span class=cF5>Silent</span><span class=cF0>;
<a name="l407"></a> </span><span class=cF5>RedSeaISO</span><span class=cF0>(,tmpde-&gt;full_name);
<a name="l408"></a> </span><span class=cF5>Silent</span><span class=cF0>(</span><span class=cF3>OFF</span><span class=cF0>);
<a name="l409"></a> }
<a name="l410"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l411"></a>}
<a name="l412"></a>
<a name="l413"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>FMBurnISO</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc)
<a name="l414"></a>{
<a name="l415"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_ce=doc-&gt;cur_entry;
<a name="l416"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde;
<a name="l417"></a> </span><span class=cF1>if</span><span class=cF0> (doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_TREE</span><span class=cF0> || doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_MENU_VAL</span><span class=cF0>)
<a name="l418"></a> tmpde=doc_ce-&gt;user_data;
<a name="l419"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l420"></a> tmpde=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l421"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde) </span><span class=cF7>{</span><span class=cF0>
<a name="l422"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde-&gt;parent)
<a name="l423"></a> tmpde=tmpde-&gt;parent;
<a name="l424"></a> </span><span class=cF5>Silent</span><span class=cF0>;
<a name="l425"></a> </span><span class=cF5>DVDImageWrite</span><span class=cF0>(*tmpde-&gt;full_name);
<a name="l426"></a> </span><span class=cF5>Silent</span><span class=cF0>(</span><span class=cF3>OFF</span><span class=cF0>);
<a name="l427"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l428"></a>}
<a name="l429"></a>
<a name="l430"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>FMCopy</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc)
<a name="l431"></a>{
<a name="l432"></a> </span><span class=cF9>CDoc</span><span class=cF0> *doc2=</span><span class=cFB>sys_clip_doc</span><span class=cF0>;
<a name="l433"></a> </span><span class=cF1>U8</span><span class=cF0> *st;
<a name="l434"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_ce=doc-&gt;cur_entry,*doc_e;
<a name="l435"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde,*tmpde1=</span><span class=cF3>NULL</span><span class=cF0>,*tmpde2;
<a name="l436"></a> </span><span class=cF1>Bool</span><span class=cF0> unlock_doc2=</span><span class=cF5>DocLock</span><span class=cF0>(doc2);
<a name="l437"></a> doc_e=doc2-&gt;head.next;
<a name="l438"></a>
<a name="l439"></a> tmpde1=doc_ce-&gt;user_data;
<a name="l440"></a> </span><span class=cF1>if</span><span class=cF0> (doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_MENU_VAL</span><span class=cF0>)
<a name="l441"></a> tmpde1=tmpde1-&gt;parent;
<a name="l442"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (doc_ce-&gt;type_u8!=</span><span class=cF3>DOCT_TREE</span><span class=cF0>)
<a name="l443"></a> tmpde1=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l444"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde1) </span><span class=cF7>{</span><span class=cF0>
<a name="l445"></a> </span><span class=cF1>while</span><span class=cF0> (doc_e!=doc2) {
<a name="l446"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;type_u8==</span><span class=cF3>DOCT_MENU_VAL</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l447"></a> tmpde=doc_e-&gt;user_data;
<a name="l448"></a> tmpde-&gt;user_data2|=</span><span class=cF3>DEF2_PROCESSED</span><span class=cF0>;
<a name="l449"></a> tmpde2=tmpde-&gt;parent;
<a name="l450"></a> </span><span class=cF1>if</span><span class=cF0> (!tmpde2 || !</span><span class=cF7>(</span><span class=cF0>tmpde2-&gt;user_data2&amp;</span><span class=cF3>DEF2_PROCESSED</span><span class=cF7>)</span><span class=cF0>) {
<a name="l451"></a> </span><span class=cF5>Silent</span><span class=cF0>;
<a name="l452"></a> </span><span class=cF5>Copy</span><span class=cF0>(tmpde-&gt;full_name,tmpde1-&gt;full_name);
<a name="l453"></a> </span><span class=cF5>Silent</span><span class=cF0>(</span><span class=cF3>OFF</span><span class=cF0>);
<a name="l454"></a> }
<a name="l455"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;type_u8==</span><span class=cF3>DOCT_TREE</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l456"></a> tmpde=doc_e-&gt;user_data;
<a name="l457"></a> tmpde-&gt;user_data2|=</span><span class=cF3>DEF2_PROCESSED</span><span class=cF0>;
<a name="l458"></a> tmpde2=tmpde-&gt;parent;
<a name="l459"></a> </span><span class=cF1>if</span><span class=cF0> (!tmpde2 || !</span><span class=cF7>(</span><span class=cF0>tmpde2-&gt;user_data2&amp;</span><span class=cF3>DEF2_PROCESSED</span><span class=cF7>)</span><span class=cF0>) {
<a name="l460"></a> </span><span class=cF5>Silent</span><span class=cF0>;
<a name="l461"></a> </span><span class=cF1>if</span><span class=cF0> (*tmpde1-&gt;name)
<a name="l462"></a> st=</span><span class=cF5>MStrPrint</span><span class=cF0>(</span><span class=cF6>&quot;%s/%s&quot;</span><span class=cF0>,tmpde1-&gt;full_name,tmpde-&gt;name);
<a name="l463"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l464"></a> st=</span><span class=cF5>MStrPrint</span><span class=cF0>(</span><span class=cF6>&quot;%s%s&quot;</span><span class=cF0>,tmpde1-&gt;full_name,tmpde-&gt;name);
<a name="l465"></a> </span><span class=cF5>CopyTree</span><span class=cF0>(tmpde-&gt;full_name,st);
<a name="l466"></a> </span><span class=cF5>Free</span><span class=cF0>(st);
<a name="l467"></a> </span><span class=cF5>Silent</span><span class=cF0>(</span><span class=cF3>OFF</span><span class=cF0>);
<a name="l468"></a> }
<a name="l469"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l470"></a> doc_e=doc_e-&gt;next;
<a name="l471"></a> }
<a name="l472"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l473"></a> </span><span class=cF1>if</span><span class=cF0> (unlock_doc2)
<a name="l474"></a> </span><span class=cF5>DocUnlock</span><span class=cF0>(doc2);
<a name="l475"></a>}
<a name="l476"></a>
<a name="l477"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>FMR_INCLUDE</span><span class=cF0> 0
<a name="l478"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>FMR_ADAM_INCLUDE</span><span class=cF0> 1
<a name="l479"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>FMR_DELETE</span><span class=cF0> 2
<a name="l480"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>FMR_RENAME</span><span class=cF0> 3
<a name="l481"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>FMR_MKDIR</span><span class=cF0> 4
<a name="l482"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>FMR_PLAIN</span><span class=cF0> 5
<a name="l483"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>FMR_PASTE</span><span class=cF0> 6
<a name="l484"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>FMR_CHG_DSK</span><span class=cF0> 7
<a name="l485"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>FMR_FORMAT</span><span class=cF0> 8
<a name="l486"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>FMR_MOUNT_REDSEA_ISO_C</span><span class=cF0> 9
<a name="l487"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>FMR_UNMOUNT</span><span class=cF0> 10
<a name="l488"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>FMR_MAKE_REDSEA_ISO_C</span><span class=cF0> 11
<a name="l489"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>FMR_BURN_ISO</span><span class=cF0> 12
<a name="l490"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>FMR_HELP</span><span class=cF0> 13
<a name="l491"></a>
<a name="l492"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>PopUpFMRight</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *header=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF1>U8</span><span class=cF0> *footer=</span><span class=cF3>NULL</span><span class=cF0>)
<a name="l493"></a>{
<a name="l494"></a> </span><span class=cF9>I64</span><span class=cF0> i;
<a name="l495"></a> </span><span class=cF9>CDoc</span><span class=cF0> *doc=</span><span class=cF5>DocNew</span><span class=cF0>;
<a name="l496"></a> </span><span class=cF1>if</span><span class=cF0> (header) </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;%s&quot;</span><span class=cF0>,header);
<a name="l497"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$CM+LX,1,1 $$BT,\&quot;INCLUDE \&quot;,LE=FMR_INCLUDE$&quot;</span><span class=cF0>
<a name="l498"></a> </span><span class=cF6>&quot;$CM+LX,29,0$$BT,\&quot;ADAM INCLUDE \&quot;,LE=FMR_ADAM_INCLUDE$&quot;</span><span class=cF0>
<a name="l499"></a> </span><span class=cF6>&quot;$CM+LX,1,3 $$BT,\&quot;DELETE \&quot;,LE=FMR_DELETE$&quot;</span><span class=cF0>
<a name="l500"></a> </span><span class=cF6>&quot;$CM+LX,29,0$$BT,\&quot;RENAME \&quot;,LE=FMR_RENAME$&quot;</span><span class=cF0>
<a name="l501"></a> </span><span class=cF6>&quot;$CM+LX,1,3 $$BT,\&quot;MAKE DIRECTORY \&quot;,LE=FMR_MKDIR$&quot;</span><span class=cF0>
<a name="l502"></a> </span><span class=cF6>&quot;$CM+LX,29,0$$BT,\&quot;PLAIN-TEXT EDIT \&quot;,LE=FMR_PLAIN$&quot;</span><span class=cF0>
<a name="l503"></a> </span><span class=cF6>&quot;$CM+LX,1,3 $$BT,\&quot;PASTE CLIP FILES \&quot;,LE=FMR_PASTE$&quot;</span><span class=cF0>
<a name="l504"></a> </span><span class=cF6>&quot;$CM+LX,29,0$$BT,\&quot;CHANGE DISK(MOUNT IT) \&quot;,LE=FMR_CHG_DSK$&quot;</span><span class=cF0>
<a name="l505"></a> </span><span class=cF6>&quot;$CM+LX,1,3 $$BT,\&quot;FORMAT \&quot;,LE=FMR_FORMAT$&quot;</span><span class=cF0>
<a name="l506"></a> </span><span class=cF6>&quot;$CM+LX,1,3 $$BT,\&quot;MOUNT ISO.C FILE \&quot;,&quot;</span><span class=cF0>
<a name="l507"></a> </span><span class=cF6>&quot;LE=FMR_MOUNT_REDSEA_ISO_C$&quot;</span><span class=cF0>
<a name="l508"></a> </span><span class=cF6>&quot;$CM+LX,29,0$$BT,\&quot;UNMOUNT \&quot;,LE=FMR_UNMOUNT$&quot;</span><span class=cF0>
<a name="l509"></a> </span><span class=cF6>&quot;$CM+LX,1,3 $$BT,\&quot;MAKE ISO.C (CD/DVD) FILE\&quot;,LE=FMR_MAKE_REDSEA_ISO_C$&quot;</span><span class=cF0>
<a name="l510"></a> </span><span class=cF6>&quot;$CM+LX,29,0$$BT,\&quot;BURN ISO (CD/DVD) FILE \&quot;,LE=FMR_BURN_ISO$&quot;</span><span class=cF0>
<a name="l511"></a> </span><span class=cF6>&quot;$CM+LX,1,3 $$BT,\&quot;HELP \&quot;,LE=FMR_HELP$&quot;</span><span class=cF0>
<a name="l512"></a> </span><span class=cF6>&quot;$CM+LX,29,0$$BT,\&quot;CANCEL \&quot;,LE=DOCM_CANCEL$\n&quot;</span><span class=cF0>);
<a name="l513"></a> </span><span class=cF1>if</span><span class=cF0> (footer) </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;%s&quot;</span><span class=cF0>,footer);
<a name="l514"></a> i=</span><span class=cF5>PopUpMenu</span><span class=cF0>(doc);
<a name="l515"></a> </span><span class=cF5>DocDel</span><span class=cF0>(doc);
<a name="l516"></a> </span><span class=cF1>return</span><span class=cF0> i;
<a name="l517"></a>}
<a name="l518"></a>
<a name="l519"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>FMRightClick</span><span class=cF0>()
<a name="l520"></a>{
<a name="l521"></a> </span><span class=cF1>switch</span><span class=cF0> (</span><span class=cF5>PopUpFMRight</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l522"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>FMR_INCLUDE</span><span class=cF0>:
<a name="l523"></a> </span><span class=cF5>Msg</span><span class=cF0>(</span><span class=cF3>MSG_KEY_DOWN</span><span class=cF0>,0,0x3F0000003F);
<a name="l524"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l525"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>FMR_ADAM_INCLUDE</span><span class=cF0>:
<a name="l526"></a> </span><span class=cF5>Msg</span><span class=cF0>(</span><span class=cF3>MSG_KEY_DOWN</span><span class=cF0>,0,0x23F0000023F);
<a name="l527"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l528"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>FMR_DELETE</span><span class=cF0>:
<a name="l529"></a> </span><span class=cF5>Msg</span><span class=cF0>(</span><span class=cF3>MSG_KEY_DOWN</span><span class=cF0>,</span><span class=cF3>CH_CTRLY</span><span class=cF0>,0);
<a name="l530"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l531"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>FMR_RENAME</span><span class=cF0>:
<a name="l532"></a> </span><span class=cF5>Msg</span><span class=cF0>(</span><span class=cF3>MSG_KEY_DOWN</span><span class=cF0>,</span><span class=cF6>'r'</span><span class=cF0>,0);
<a name="l533"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l534"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>FMR_MKDIR</span><span class=cF0>:
<a name="l535"></a> </span><span class=cF5>Msg</span><span class=cF0>(</span><span class=cF3>MSG_KEY_DOWN</span><span class=cF0>,</span><span class=cF6>'d'</span><span class=cF0>,0);
<a name="l536"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l537"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>FMR_PLAIN</span><span class=cF0>:
<a name="l538"></a> </span><span class=cF5>Msg</span><span class=cF0>(</span><span class=cF3>MSG_KEY_DOWN</span><span class=cF0>,</span><span class=cF3>CH_SHIFT_SPACE</span><span class=cF0>,0);
<a name="l539"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l540"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>FMR_PASTE</span><span class=cF0>:
<a name="l541"></a> </span><span class=cF5>Msg</span><span class=cF0>(</span><span class=cF3>MSG_KEY_DOWN</span><span class=cF0>,0,</span><span class=cF3>SC_INS</span><span class=cF0>+</span><span class=cF3>SCF_SHIFT</span><span class=cF0>);
<a name="l542"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l543"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>FMR_CHG_DSK</span><span class=cF0>:
<a name="l544"></a> </span><span class=cF5>Msg</span><span class=cF0>(</span><span class=cF3>MSG_KEY_DOWN</span><span class=cF0>,</span><span class=cF6>'c'</span><span class=cF0>,0);
<a name="l545"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l546"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>FMR_FORMAT</span><span class=cF0>:
<a name="l547"></a> </span><span class=cF5>Msg</span><span class=cF0>(</span><span class=cF3>MSG_KEY_DOWN</span><span class=cF0>,</span><span class=cF6>'f'</span><span class=cF0>,0);
<a name="l548"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l549"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>FMR_MOUNT_REDSEA_ISO_C</span><span class=cF0>:
<a name="l550"></a> </span><span class=cF5>Msg</span><span class=cF0>(</span><span class=cF3>MSG_KEY_DOWN</span><span class=cF0>,</span><span class=cF6>'i'</span><span class=cF0>,0);
<a name="l551"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l552"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>FMR_UNMOUNT</span><span class=cF0>:
<a name="l553"></a> </span><span class=cF5>Msg</span><span class=cF0>(</span><span class=cF3>MSG_KEY_DOWN</span><span class=cF0>,</span><span class=cF6>'u'</span><span class=cF0>,0);
<a name="l554"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l555"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>FMR_MAKE_REDSEA_ISO_C</span><span class=cF0>:
<a name="l556"></a> </span><span class=cF5>Msg</span><span class=cF0>(</span><span class=cF3>MSG_KEY_DOWN</span><span class=cF0>,</span><span class=cF6>'m'</span><span class=cF0>,0);
<a name="l557"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l558"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>FMR_BURN_ISO</span><span class=cF0>:
<a name="l559"></a> </span><span class=cF5>Msg</span><span class=cF0>(</span><span class=cF3>MSG_KEY_DOWN</span><span class=cF0>,</span><span class=cF6>'B'</span><span class=cF0>,0);
<a name="l560"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l561"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>FMR_HELP</span><span class=cF0>:
<a name="l562"></a> </span><span class=cF5>Msg</span><span class=cF0>(</span><span class=cF3>MSG_KEY_DOWN</span><span class=cF0>,</span><span class=cF3>CH_CTRLM</span><span class=cF0>,0x43200000432);
<a name="l563"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l564"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l565"></a>}
<a name="l566"></a>
<a name="l567"></a></span><span class=cF1>U8</span><span class=cF0> *</span><span class=cFB>fm_ms_str</span><span class=cF0>=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l568"></a></span><span class=cF1>U0</span><span class=cF0> (*</span><span class=cFB>fp_old_final_scrn_update</span><span class=cF0>)(</span><span class=cF9>CDC</span><span class=cF0> *dc);
<a name="l569"></a>
<a name="l570"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>FMFinalScrnUpdate</span><span class=cF0>(</span><span class=cF9>CDC</span><span class=cF0> *dc)
<a name="l571"></a>{
<a name="l572"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cFB>fm_ms_str</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l573"></a> dc-&gt;color=</span><span class=cF3>LTRED</span><span class=cF0>;
<a name="l574"></a> </span><span class=cF5>GrPrint</span><span class=cF0>(dc,</span><span class=cFB>ms</span><span class=cF0>.pos.x,</span><span class=cFB>ms</span><span class=cF0>.pos.y,</span><span class=cF6>&quot;%s&quot;</span><span class=cF0>,</span><span class=cFB>fm_ms_str</span><span class=cF0>);
<a name="l575"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l576"></a> (*</span><span class=cFB>fp_old_final_scrn_update</span><span class=cF0>)(dc);
<a name="l577"></a>}
<a name="l578"></a>
<a name="l579"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF5>FileMgr</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> mode=</span><span class=cF3>FM_NORMAL</span><span class=cF0>,</span><span class=cF9>CTask</span><span class=cF0> *mem_task=</span><span class=cF3>NULL</span><span class=cF0>)
<a name="l580"></a>{</span><span class=cF2>//File manager. Also, used to choose files and dirs.</span><span class=cF0>
<a name="l581"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *head=</span><span class=cF3>NULL</span><span class=cF0>,*tmpde,*tmpde1,*tmpde2;
<a name="l582"></a> </span><span class=cF9>I64</span><span class=cF0> sc,ch,arg1,arg2,msg_code;
<a name="l583"></a> </span><span class=cF9>CDoc</span><span class=cF0> *doc=</span><span class=cF3>NULL</span><span class=cF0>,*old_put_doc=</span><span class=cF5>DocPut</span><span class=cF0>,*old_display_doc=</span><span class=cF5>DocDisplay</span><span class=cF0>;
<a name="l584"></a> </span><span class=cF1>U8</span><span class=cF0> *res=</span><span class=cF3>NULL</span><span class=cF0>,*st,*st2,*old_cur_dir=</span><span class=cF5>DirCur</span><span class=cF0>;
<a name="l585"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_ce=</span><span class=cF3>NULL</span><span class=cF0>,*doc_e;
<a name="l586"></a> </span><span class=cF1>Bool</span><span class=cF0> okay;
<a name="l587"></a>
<a name="l588"></a> </span><span class=cF5>SettingsPush</span><span class=cF0>; </span><span class=cF2>//See </span><a href="/Wb/Adam/TaskSettings.HC.HTML#l3"><span class=cF4>SettingsPush</span></a><span class=cF0>
<a name="l589"></a> </span><span class=cFB>fp_old_final_scrn_update</span><span class=cF0>=</span><span class=cFB>gr</span><span class=cF0>.fp_final_scrn_update;
<a name="l590"></a> </span><span class=cF5>MenuFilePush</span><span class=cF0>(</span><span class=cF6>&quot;::/Doc/FileMgrPullDown.DD&quot;</span><span class=cF0>);
<a name="l591"></a> </span><span class=cF5>FMRebuildDoc</span><span class=cF0>(&amp;doc,&amp;head,mode);
<a name="l592"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde1=</span><span class=cF5>Cd2DirEntry</span><span class=cF7>(</span><span class=cF0>head,old_cur_dir</span><span class=cF7>)</span><span class=cF0>)
<a name="l593"></a> doc-&gt;cur_entry=tmpde1-&gt;user_data;
<a name="l594"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde1) </span><span class=cF7>{</span><span class=cF0>
<a name="l595"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde1-&gt;attr&amp;</span><span class=cF3>RS_ATTR_DIR</span><span class=cF0>)
<a name="l596"></a> tmpde1-&gt;user_data(</span><span class=cF9>CDocEntry</span><span class=cF0> *)-&gt;de_flags&amp;=~</span><span class=cF3>DOCEF_CHECKED_COLLAPSED</span><span class=cF0>;
<a name="l597"></a> tmpde1=tmpde1-&gt;parent;
<a name="l598"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l599"></a> </span><span class=cF1>do</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l600"></a> </span><span class=cF5>DocUnlock</span><span class=cF0>(doc);
<a name="l601"></a> </span><span class=cF1>do</span><span class=cF0> msg_code=</span><span class=cF5>GetMsg</span><span class=cF0>(&amp;arg1,&amp;arg2,
<a name="l602"></a> 1&lt;&lt;</span><span class=cF3>MSG_KEY_DOWN</span><span class=cF0>|1&lt;&lt;</span><span class=cF3>MSG_MS_L_DOWN</span><span class=cF0>|1&lt;&lt;</span><span class=cF3>MSG_MS_L_UP</span><span class=cF0>|1&lt;&lt;</span><span class=cF3>MSG_MS_R_UP</span><span class=cF0>);
<a name="l603"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF5>Fs</span><span class=cF0>!=</span><span class=cFB>sys_focus_task</span><span class=cF0>);
<a name="l604"></a> </span><span class=cF5>DocLock</span><span class=cF0>(doc);
<a name="l605"></a> </span><span class=cF1>switch</span><span class=cF0> (msg_code) {
<a name="l606"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>MSG_MS_R_UP</span><span class=cF0>:
<a name="l607"></a> </span><span class=cF5>DocUnlock</span><span class=cF0>(doc);
<a name="l608"></a> </span><span class=cF5>FMRightClick</span><span class=cF0>;
<a name="l609"></a> </span><span class=cF5>DocLock</span><span class=cF0>(doc);
<a name="l610"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l611"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>MSG_MS_L_DOWN</span><span class=cF0>:
<a name="l612"></a> doc_ce=doc-&gt;cur_entry;
<a name="l613"></a> </span><span class=cFB>fm_ms_str</span><span class=cF0>=doc_ce-&gt;tag;
<a name="l614"></a> </span><span class=cFB>gr</span><span class=cF0>.fp_final_scrn_update=&amp;</span><span class=cF5>FMFinalScrnUpdate</span><span class=cF0>;
<a name="l615"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l616"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>MSG_MS_L_UP</span><span class=cF0>:
<a name="l617"></a> </span><span class=cF1>if</span><span class=cF0> (doc_ce) </span><span class=cF7>{</span><span class=cF0>
<a name="l618"></a> </span><span class=cFB>gr</span><span class=cF0>.fp_final_scrn_update=</span><span class=cFB>fp_old_final_scrn_update</span><span class=cF0>;
<a name="l619"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>WinCursorPosSet</span><span class=cF7>(</span><span class=cF5>Fs</span><span class=cF0>,arg1+</span><span class=cF5>Fs</span><span class=cF0>-&gt;pix_left+</span><span class=cF5>Fs</span><span class=cF0>-&gt;scroll_x,
<a name="l620"></a> arg2+</span><span class=cF5>Fs</span><span class=cF0>-&gt;pix_top+</span><span class=cF5>Fs</span><span class=cF0>-&gt;scroll_y,</span><span class=cF3>TRUE</span><span class=cF7>)</span><span class=cF0>) {
<a name="l621"></a> doc_e=doc-&gt;cur_entry;
<a name="l622"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e!=doc_ce) </span><span class=cF7>{</span><span class=cF0>
<a name="l623"></a> st2=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l624"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;type_u8==</span><span class=cF3>DOCT_MENU_VAL</span><span class=cF0>) {
<a name="l625"></a> tmpde1=doc_e-&gt;user_data;
<a name="l626"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde1=tmpde1-&gt;parent)
<a name="l627"></a> st2=</span><span class=cF5>StrNew</span><span class=cF0>(tmpde1-&gt;full_name);
<a name="l628"></a> } </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;type_u8==</span><span class=cF3>DOCT_TREE</span><span class=cF0>) {
<a name="l629"></a> tmpde1=doc_e-&gt;user_data;
<a name="l630"></a> st2=</span><span class=cF5>StrNew</span><span class=cF0>(tmpde1-&gt;full_name);
<a name="l631"></a> }
<a name="l632"></a> </span><span class=cF1>if</span><span class=cF0> (st2 &amp;&amp; doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_MENU_VAL</span><span class=cF0>) {
<a name="l633"></a> tmpde=doc_ce-&gt;user_data;
<a name="l634"></a> </span><span class=cF5>Silent</span><span class=cF0>;
<a name="l635"></a> </span><span class=cF5>Move</span><span class=cF0>(tmpde-&gt;full_name,st2);
<a name="l636"></a> </span><span class=cF5>Silent</span><span class=cF0>(</span><span class=cF3>OFF</span><span class=cF0>);
<a name="l637"></a> </span><span class=cF5>FMRebuildDoc</span><span class=cF0>(&amp;doc,&amp;head,mode);
<a name="l638"></a> } </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (st2 &amp;&amp; doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_TREE</span><span class=cF0>) {
<a name="l639"></a> tmpde=doc_ce-&gt;user_data;
<a name="l640"></a> okay=</span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l641"></a> tmpde2=tmpde1;
<a name="l642"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde2) </span><span class=cF7>{</span><span class=cF0>
<a name="l643"></a> </span><span class=cF1>if</span><span class=cF0> (tmpde2!=tmpde)
<a name="l644"></a> tmpde2=tmpde2-&gt;parent;
<a name="l645"></a> </span><span class=cF1>else</span><span class=cF0> {
<a name="l646"></a> okay=</span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l647"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l648"></a> }
<a name="l649"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l650"></a> </span><span class=cF1>if</span><span class=cF0> (okay) </span><span class=cF7>{</span><span class=cF0>
<a name="l651"></a> </span><span class=cF1>if</span><span class=cF0> (*tmpde1-&gt;name)
<a name="l652"></a> st=</span><span class=cF5>MStrPrint</span><span class=cF0>(</span><span class=cF6>&quot;%s/%s&quot;</span><span class=cF0>,tmpde1-&gt;full_name,tmpde-&gt;name);
<a name="l653"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l654"></a> st=</span><span class=cF5>MStrPrint</span><span class=cF0>(</span><span class=cF6>&quot;%s%s&quot;</span><span class=cF0>,tmpde1-&gt;full_name,tmpde-&gt;name);
<a name="l655"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>StrCmp</span><span class=cF7>(</span><span class=cF0>tmpde-&gt;full_name,st</span><span class=cF7>)</span><span class=cF0>) {
<a name="l656"></a> </span><span class=cF5>Silent</span><span class=cF0>;
<a name="l657"></a> </span><span class=cF5>CopyTree</span><span class=cF0>(tmpde-&gt;full_name,st);
<a name="l658"></a> </span><span class=cF5>DelTree</span><span class=cF0>(tmpde-&gt;full_name);
<a name="l659"></a> </span><span class=cF5>Silent</span><span class=cF0>(</span><span class=cF3>OFF</span><span class=cF0>);
<a name="l660"></a> </span><span class=cF5>FMRebuildDoc</span><span class=cF0>(&amp;doc,&amp;head,mode);
<a name="l661"></a> }
<a name="l662"></a> </span><span class=cF5>Free</span><span class=cF0>(st);
<a name="l663"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l664"></a> }
<a name="l665"></a> </span><span class=cF5>Free</span><span class=cF0>(st2);
<a name="l666"></a> </span><span class=cF5>FlushMsgs</span><span class=cF0>;
<a name="l667"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l668"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;type_u8==</span><span class=cF3>DOCT_MENU_VAL</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l669"></a> </span><span class=cF5>DocUnlock</span><span class=cF0>(doc);
<a name="l670"></a> </span><span class=cF5>Ed</span><span class=cF0>(doc_e-&gt;user_data</span><span class=cF7>(</span><span class=cF9>CDirEntry</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>-&gt;full_name);
<a name="l671"></a> </span><span class=cF5>DocLock</span><span class=cF0>(doc);
<a name="l672"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l673"></a> doc_ce=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l674"></a> }
<a name="l675"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l676"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l677"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>MSG_KEY_DOWN</span><span class=cF0>:
<a name="l678"></a> doc_ce=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l679"></a> ch=arg1; sc=arg2;
<a name="l680"></a> </span><span class=cF1>if</span><span class=cF0> (sc.u8[0]==</span><span class=cF3>SC_DELETE</span><span class=cF0> &amp;&amp; !</span><span class=cF7>(</span><span class=cF0>sc&amp;(</span><span class=cF3>SCF_SHIFT</span><span class=cF0>|</span><span class=cF3>SCF_CTRL</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0>)
<a name="l681"></a> ch=</span><span class=cF3>CH_CTRLY</span><span class=cF0>;
<a name="l682"></a> </span><span class=cF1>if</span><span class=cF0> (ch &amp;&amp; sc&amp;</span><span class=cF3>SCF_ALT</span><span class=cF0>) </span><span class=cF1>goto</span><span class=cF0> fm_regular_key;
<a name="l683"></a> </span><span class=cF1>switch</span><span class=cF0> (ch) </span><span class=cF7>{</span><span class=cF0>
<a name="l684"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'\n'</span><span class=cF0>:
<a name="l685"></a> </span><span class=cF5>DocUnlock</span><span class=cF0>(doc);
<a name="l686"></a> </span><span class=cF5>FMRightClick</span><span class=cF0>;
<a name="l687"></a> </span><span class=cF5>DocLock</span><span class=cF0>(doc);
<a name="l688"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l689"></a> </span><span class=cF1>start</span><span class=cF0>:
<a name="l690"></a> </span><span class=cF5>DocUnlock</span><span class=cF0>(doc);
<a name="l691"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>CH_CTRLV</span><span class=cF0>:
<a name="l692"></a> </span><span class=cF5>FMCopy</span><span class=cF0>(doc);
<a name="l693"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l694"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'r'</span><span class=cF0>:
<a name="l695"></a> </span><span class=cF5>FMRename</span><span class=cF0>(doc);
<a name="l696"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l697"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'d'</span><span class=cF0>:
<a name="l698"></a> </span><span class=cF5>FMMkDir</span><span class=cF0>(doc);
<a name="l699"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l700"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>CH_CTRLY</span><span class=cF0>:
<a name="l701"></a> </span><span class=cF5>FMDelete</span><span class=cF0>(doc);
<a name="l702"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l703"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'c'</span><span class=cF0>:
<a name="l704"></a> </span><span class=cF5>FMChgDsk</span><span class=cF0>(doc);
<a name="l705"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l706"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'i'</span><span class=cF0>:
<a name="l707"></a> </span><span class=cF5>FMMountISO</span><span class=cF0>(doc);
<a name="l708"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l709"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'u'</span><span class=cF0>:
<a name="l710"></a> </span><span class=cF5>FMUnmount</span><span class=cF0>(doc);
<a name="l711"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l712"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'m'</span><span class=cF0>:
<a name="l713"></a> </span><span class=cF5>FMMakeISO</span><span class=cF0>(doc);
<a name="l714"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l715"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'B'</span><span class=cF0>:
<a name="l716"></a> </span><span class=cF5>FMBurnISO</span><span class=cF0>(doc);
<a name="l717"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l718"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'f'</span><span class=cF0>:
<a name="l719"></a> </span><span class=cF5>FMFmtDrv</span><span class=cF0>(doc);
<a name="l720"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l721"></a> </span><span class=cF1>end</span><span class=cF0>:
<a name="l722"></a> </span><span class=cF5>FMRebuildDoc</span><span class=cF0>(&amp;doc,&amp;head,mode);
<a name="l723"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l724"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>CH_SHIFT_ESC</span><span class=cF0>:
<a name="l725"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l726"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>CH_SPACE</span><span class=cF0>:
<a name="l727"></a> </span><span class=cF1>if</span><span class=cF0> (doc-&gt;cur_entry-&gt;type_u8==</span><span class=cF3>DOCT_MENU_VAL</span><span class=cF0>) {
<a name="l728"></a> </span><span class=cF5>DocUnlock</span><span class=cF0>(doc);
<a name="l729"></a> </span><span class=cF5>Ed</span><span class=cF0>(doc-&gt;cur_entry-&gt;user_data</span><span class=cF7>(</span><span class=cF9>CDirEntry</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>-&gt;full_name);
<a name="l730"></a> </span><span class=cF5>DocLock</span><span class=cF0>(doc);
<a name="l731"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l732"></a> </span><span class=cF1>goto</span><span class=cF0> fm_regular_key;
<a name="l733"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l734"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>CH_SHIFT_SPACE</span><span class=cF0>:
<a name="l735"></a> </span><span class=cF1>if</span><span class=cF0> (doc-&gt;cur_entry-&gt;type_u8==</span><span class=cF3>DOCT_MENU_VAL</span><span class=cF0>) {
<a name="l736"></a> </span><span class=cF5>DocUnlock</span><span class=cF0>(doc);
<a name="l737"></a> </span><span class=cF5>Plain</span><span class=cF0>(doc-&gt;cur_entry-&gt;user_data</span><span class=cF7>(</span><span class=cF9>CDirEntry</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>-&gt;full_name);
<a name="l738"></a> </span><span class=cF5>DocLock</span><span class=cF0>(doc);
<a name="l739"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l740"></a> </span><span class=cF1>goto</span><span class=cF0> fm_regular_key;
<a name="l741"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l742"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>CH_ESC</span><span class=cF0>:
<a name="l743"></a> doc_ce=doc-&gt;cur_entry;
<a name="l744"></a> tmpde=doc_ce-&gt;user_data;
<a name="l745"></a> </span><span class=cF1>if</span><span class=cF0> (mode==</span><span class=cF3>FM_PICK_FILE</span><span class=cF0> &amp;&amp; doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_MENU_VAL</span><span class=cF0>)
<a name="l746"></a> res=</span><span class=cF5>StrNew</span><span class=cF0>(tmpde-&gt;full_name,mem_task);
<a name="l747"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (mode==</span><span class=cF3>FM_PICK_DIR</span><span class=cF0>) {
<a name="l748"></a> </span><span class=cF1>if</span><span class=cF0> (doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_TREE</span><span class=cF0>)
<a name="l749"></a> res=</span><span class=cF5>StrNew</span><span class=cF0>(tmpde-&gt;full_name,mem_task);
<a name="l750"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_MENU_VAL</span><span class=cF0> &amp;&amp;
<a name="l751"></a> </span><span class=cF7>(</span><span class=cF0>tmpde=tmpde-&gt;parent</span><span class=cF7>)</span><span class=cF0>)
<a name="l752"></a> res=</span><span class=cF5>StrNew</span><span class=cF0>(tmpde-&gt;full_name,mem_task);
<a name="l753"></a> }
<a name="l754"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l755"></a> </span><span class=cF1>default</span><span class=cF0>:
<a name="l756"></a> </span><span class=cF1>if</span><span class=cF0> (sc.u8[0]==</span><span class=cF3>SC_INS</span><span class=cF0> &amp;&amp; sc&amp;</span><span class=cF3>SCF_SHIFT</span><span class=cF0> &amp;&amp; !</span><span class=cF7>(</span><span class=cF0>sc&amp;</span><span class=cF3>SCF_CTRL</span><span class=cF7>)</span><span class=cF0>) {
<a name="l757"></a> </span><span class=cF5>FMCopy</span><span class=cF0>(doc);
<a name="l758"></a> </span><span class=cF5>FMRebuildDoc</span><span class=cF0>(&amp;doc,&amp;head,mode);
<a name="l759"></a> } </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (sc.u8[0]==</span><span class=cF3>SC_F5</span><span class=cF0>) {
<a name="l760"></a> </span><span class=cF1>if</span><span class=cF0> (doc-&gt;cur_entry-&gt;type_u8==</span><span class=cF3>DOCT_MENU_VAL</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l761"></a> tmpde=doc-&gt;cur_entry-&gt;user_data;
<a name="l762"></a> </span><span class=cF5>DocUnlock</span><span class=cF0>(doc);
<a name="l763"></a> </span><span class=cF1>if</span><span class=cF0> (sc&amp;</span><span class=cF3>SCF_SHIFT</span><span class=cF0>)
<a name="l764"></a> </span><span class=cF5>AdamFile</span><span class=cF0>(tmpde-&gt;full_name);
<a name="l765"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l766"></a> </span><span class=cF5>PopUpFile</span><span class=cF0>(tmpde-&gt;full_name);
<a name="l767"></a> </span><span class=cF5>DocLock</span><span class=cF0>(doc);
<a name="l768"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l769"></a> } </span><span class=cF1>else</span><span class=cF0> {
<a name="l770"></a>fm_regular_key:
<a name="l771"></a> </span><span class=cF5>DocUnlock</span><span class=cF0>(doc);
<a name="l772"></a> </span><span class=cF5>PutKey</span><span class=cF0>(ch,sc);
<a name="l773"></a> </span><span class=cF5>DocLock</span><span class=cF0>(doc);
<a name="l774"></a> }
<a name="l775"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l776"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l777"></a> }
<a name="l778"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>while</span><span class=cF0> (ch!=</span><span class=cF3>CH_ESC</span><span class=cF0> &amp;&amp; ch!=</span><span class=cF3>CH_SHIFT_ESC</span><span class=cF0>);
<a name="l779"></a> </span><span class=cFB>gr</span><span class=cF0>.fp_final_scrn_update=</span><span class=cFB>fp_old_final_scrn_update</span><span class=cF0>;
<a name="l780"></a> </span><span class=cF5>Fs</span><span class=cF0>-&gt;put_doc =old_put_doc;
<a name="l781"></a> </span><span class=cF5>Fs</span><span class=cF0>-&gt;display_doc=old_display_doc;
<a name="l782"></a> </span><span class=cF5>SettingsPop</span><span class=cF0>;
<a name="l783"></a> </span><span class=cF5>DocDel</span><span class=cF0>(doc);
<a name="l784"></a> </span><span class=cF5>DirTreeDel</span><span class=cF0>(head);
<a name="l785"></a> </span><span class=cF5>Cd</span><span class=cF0>(old_cur_dir);
<a name="l786"></a> </span><span class=cF5>Free</span><span class=cF0>(old_cur_dir);
<a name="l787"></a> </span><span class=cF1>if</span><span class=cF0> (mode!=</span><span class=cF3>FM_NORMAL</span><span class=cF0> &amp;&amp; !res)
<a name="l788"></a> res=</span><span class=cF5>StrNew</span><span class=cF0>(</span><span class=cF6>&quot;&quot;</span><span class=cF0>,mem_task);
<a name="l789"></a> </span><span class=cF5>MenuPop</span><span class=cF0>;
<a name="l790"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l791"></a>}
</span></pre></body>
</html>

View File

@ -0,0 +1,39 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF5>Cd</span><span class=cF0>(</span><span class=cF3>__DIR__</span><span class=cF0>);;
<a name="l2"></a>#</span><span class=cF1>include</span><span class=cF0> </span><span class=cF6>&quot;ADskA&quot;</span><span class=cF0>
<a name="l3"></a>#</span><span class=cF1>include</span><span class=cF0> </span><span class=cF6>&quot;ADskB&quot;</span><span class=cF0>
<a name="l4"></a>#</span><span class=cF1>include</span><span class=cF0> </span><span class=cF6>&quot;DskPrt&quot;</span><span class=cF0>
<a name="l5"></a>#</span><span class=cF1>include</span><span class=cF0> </span><span class=cF6>&quot;Mount&quot;</span><span class=cF0>
<a name="l6"></a>#</span><span class=cF1>include</span><span class=cF0> </span><span class=cF6>&quot;DskChk&quot;</span><span class=cF0>
<a name="l7"></a>#</span><span class=cF1>include</span><span class=cF0> </span><span class=cF6>&quot;FileMgr&quot;</span><span class=cF0>
<a name="l8"></a></span><span class=cF5>Cd</span><span class=cF0>(</span><span class=cF6>&quot;..&quot;</span><span class=cF0>);;
</span></pre></body>
</html>

View File

@ -0,0 +1,190 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF0>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Install;File/Cmd Line (Typically);Cmd Line (Typically);&quot;</span><span class=cF0>
<a name="l2"></a></span><span class=cF1>U8</span><span class=cF0> </span><span class=cF5>Mount2</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> boot_drv_let,</span><span class=cF9>CDoc</span><span class=cF0> *_doc,</span><span class=cF1>Bool</span><span class=cF0> _caller_is_prtdsk)
<a name="l3"></a>{</span><span class=cF2>//If _doc, called by </span><a href="/Wb/Kernel/KCfg.HC.HTML#l1"><span class=cF4>::/Kernel/KCfg.HC</span></a><span class=cF2> else called by </span><a href="/Wb/Adam/ABlkDev/Mount.HC.HTML#l138"><span class=cF4>Mount</span></a><span class=cF2>().</span><span class=cF0>
<a name="l4"></a> </span><span class=cF9>I64</span><span class=cF0> cnt,total=0,num_hints,drv_let,type,unit,prt_num;
<a name="l5"></a> </span><span class=cF1>U8</span><span class=cF0> blks_buf[</span><span class=cF3>STR_LEN</span><span class=cF0>],addr_buf[</span><span class=cF3>STR_LEN</span><span class=cF0>],base0_buf[</span><span class=cF3>STR_LEN</span><span class=cF0>],base1_buf[</span><span class=cF3>STR_LEN</span><span class=cF0>],
<a name="l6"></a> *filename=</span><span class=cF3>NULL</span><span class=cF0>,*filename2=</span><span class=cF3>NULL</span><span class=cF0>,res=0;
<a name="l7"></a> </span><span class=cF9>CATARep</span><span class=cF0> *head=</span><span class=cF3>NULL</span><span class=cF0>,*tmpha;
<a name="l8"></a> </span><span class=cF1>Bool</span><span class=cF0> whole_drv,make_free;
<a name="l9"></a> </span><span class=cF9>CDoc</span><span class=cF0> *doc;
<a name="l10"></a> </span><span class=cF1>if</span><span class=cF0> (boot_drv_let)
<a name="l11"></a> boot_drv_let=</span><span class=cF5>Let2Let</span><span class=cF0>(boot_drv_let);
<a name="l12"></a> </span><span class=cF1>do</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l13"></a> cnt=0;
<a name="l14"></a> </span><span class=cF1>if</span><span class=cF0> (!_doc)
<a name="l15"></a> </span><span class=cF5>DrvRep</span><span class=cF0>;
<a name="l16"></a> </span><span class=cF6>&quot;\n****** Mount Drives ******\n&quot;</span><span class=cF0>
<a name="l17"></a> </span><span class=cF6>&quot;$GREEN$A$FG$-$GREEN$B$FG$ are RAM drives.\n&quot;</span><span class=cF0>
<a name="l18"></a> </span><span class=cF6>&quot;$GREEN$C$FG$-$GREEN$L$FG$ are ATA hard drives.\n&quot;</span><span class=cF0>
<a name="l19"></a> </span><span class=cF6>&quot;$GREEN$M$FG$-$GREEN$P$FG$ are ISO file read drives.\n&quot;</span><span class=cF0>
<a name="l20"></a> </span><span class=cF6>&quot;$GREEN$Q$FG$-$GREEN$S$FG$ are ISO file write drives.\n&quot;</span><span class=cF0>
<a name="l21"></a> </span><span class=cF6>&quot;$GREEN$T$FG$-$GREEN$Z$FG$ are ATAPI CD/DVD drives.\n&quot;</span><span class=cF0>
<a name="l22"></a> </span><span class=cF6>&quot;\nDrive Letter ($PURPLE$&lt;ENTER&gt;$FG$ to exit):&quot;</span><span class=cF0>;
<a name="l23"></a> drv_let=</span><span class=cF5>Let2Let</span><span class=cF0>(</span><span class=cF5>GetChar</span><span class=cF0>);
<a name="l24"></a> </span><span class=cF6>'\n'</span><span class=cF0>;
<a name="l25"></a> </span><span class=cF1>if</span><span class=cF0> (type=</span><span class=cF5>Let2BlkDevType</span><span class=cF7>(</span><span class=cF0>drv_let</span><span class=cF7>)</span><span class=cF0>) {
<a name="l26"></a> whole_drv=</span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l27"></a> </span><span class=cF1>if</span><span class=cF0> (_doc) </span><span class=cF7>{</span><span class=cF0> </span><span class=cF2>//Called by </span><a href="/Wb/Kernel/KCfg.HC.HTML#l1"><span class=cF4>::/Kernel/KCfg.HC</span></a><span class=cF0>
<a name="l28"></a> doc=_doc;
<a name="l29"></a> make_free=</span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l30"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0> </span><span class=cF2>//Called by </span><a href="/Wb/Adam/ABlkDev/Mount.HC.HTML#l138"><span class=cF4>Mount</span></a><span class=cF2>()</span><span class=cF0>
<a name="l31"></a> doc=</span><span class=cF5>DocNew</span><span class=cF0>;
<a name="l32"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;CBlkDev *bd;\n&quot;</span><span class=cF0>);
<a name="l33"></a> make_free=</span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l34"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l35"></a> unit=0;
<a name="l36"></a> prt_num=</span><span class=cF3>I64_MIN</span><span class=cF0>;
<a name="l37"></a> </span><span class=cF1>switch</span><span class=cF0> (type) </span><span class=cF7>{</span><span class=cF0>
<a name="l38"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>BDT_RAM</span><span class=cF0>:
<a name="l39"></a> </span><span class=cF6>&quot;Addr of RAM disk ($PURPLE$&lt;ENTER&gt;$FG$ to MAlloc):&quot;</span><span class=cF0>;
<a name="l40"></a> </span><span class=cF5>GetS</span><span class=cF0>(addr_buf,</span><span class=cF3>STR_LEN</span><span class=cF0>);
<a name="l41"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>BDT_ISO_FILE_WRITE</span><span class=cF0>:
<a name="l42"></a> </span><span class=cF6>&quot;Blks of 512 bytes:&quot;</span><span class=cF0>;
<a name="l43"></a> </span><span class=cF5>GetS</span><span class=cF0>(blks_buf,</span><span class=cF3>STR_LEN</span><span class=cF0>);
<a name="l44"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l45"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>BDT_ISO_FILE_READ</span><span class=cF0>:
<a name="l46"></a> filename=</span><span class=cF5>GetStr</span><span class=cF0>(</span><span class=cF6>&quot;File Name:&quot;</span><span class=cF0>);
<a name="l47"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l48"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>BDT_ATA</span><span class=cF0>:
<a name="l49"></a> prt_num=</span><span class=cF5>GetI64</span><span class=cF0>(</span><span class=cF6>&quot;Partition Num (Default=All):&quot;</span><span class=cF0>,prt_num);
<a name="l50"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>BDT_ATAPI</span><span class=cF0>:
<a name="l51"></a> num_hints=</span><span class=cF5>ATARep</span><span class=cF0>(,,&amp;head);
<a name="l52"></a> </span><span class=cF1>if</span><span class=cF0> (type==</span><span class=cF3>BDT_ATAPI</span><span class=cF0> &amp;&amp; boot_drv_let)
<a name="l53"></a> </span><span class=cF6>&quot;&lt;ENTER&gt; to use booted CD/DVD\n&quot;</span><span class=cF0>; </span><span class=cF2>//Only </span><a href="/Wb/Kernel/KCfg.HC.HTML#l1"><span class=cF4>::/Kernel/KCfg.HC</span></a><span class=cF0>
<a name="l54"></a> </span><span class=cF1>do</span><span class=cF0> {
<a name="l55"></a> </span><span class=cF1>if</span><span class=cF0> (num_hints)
<a name="l56"></a> </span><span class=cF6>&quot;Enter dev number or\nport with $PURPLE$0x$FG$ prefix.\n&quot;</span><span class=cF0>
<a name="l57"></a> </span><span class=cF6>&quot;I/O Port Base0:\n&quot;</span><span class=cF0>;
<a name="l58"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l59"></a> </span><span class=cF6>&quot;Include $PURPLE$0x$FG$ prefix.\nI/O Port Base0:\n&quot;</span><span class=cF0>;
<a name="l60"></a> </span><span class=cF5>GetS</span><span class=cF0>(base0_buf,</span><span class=cF3>STR_LEN</span><span class=cF0>);
<a name="l61"></a> } </span><span class=cF1>while</span><span class=cF0> (!</span><span class=cF5>Str2I64</span><span class=cF7>(</span><span class=cF0>base0_buf</span><span class=cF7>)</span><span class=cF0> &amp;&amp; </span><span class=cF7>(</span><span class=cF0>type!=</span><span class=cF3>BDT_ATAPI</span><span class=cF0> || !boot_drv_let</span><span class=cF7>)</span><span class=cF0>);
<a name="l62"></a> </span><span class=cF1>if</span><span class=cF0> (1&lt;=</span><span class=cF5>Str2I64</span><span class=cF7>(</span><span class=cF0>base0_buf</span><span class=cF7>)</span><span class=cF0>&lt;=num_hints) {
<a name="l63"></a> tmpha=</span><span class=cF5>ATARepFind</span><span class=cF0>(head,</span><span class=cF5>Str2I64</span><span class=cF7>(</span><span class=cF0>base0_buf</span><span class=cF7>)</span><span class=cF0>);
<a name="l64"></a> </span><span class=cF5>StrPrint</span><span class=cF0>(base0_buf,</span><span class=cF6>&quot;0x%X&quot;</span><span class=cF0>,tmpha-&gt;base0);
<a name="l65"></a> </span><span class=cF5>StrPrint</span><span class=cF0>(base1_buf,</span><span class=cF6>&quot;0x%X&quot;</span><span class=cF0>,tmpha-&gt;base1);
<a name="l66"></a> unit=tmpha-&gt;unit;
<a name="l67"></a> } </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (type!=</span><span class=cF3>BDT_ATAPI</span><span class=cF0> || *base0_buf) {
<a name="l68"></a> </span><span class=cF1>if</span><span class=cF0> (type==</span><span class=cF3>BDT_ATAPI</span><span class=cF0>)
<a name="l69"></a> </span><span class=cF5>StrCpy</span><span class=cF0>(base1_buf,</span><span class=cF6>&quot;0&quot;</span><span class=cF0>);
<a name="l70"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l71"></a> </span><span class=cF1>do</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l72"></a> </span><span class=cF6>&quot;I/O Port Base1:\n&quot;</span><span class=cF0>;
<a name="l73"></a> </span><span class=cF5>GetS</span><span class=cF0>(base1_buf,</span><span class=cF3>STR_LEN</span><span class=cF0>);
<a name="l74"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>while</span><span class=cF0> (!</span><span class=cF5>Str2I64</span><span class=cF7>(</span><span class=cF0>base1_buf</span><span class=cF7>)</span><span class=cF0>);
<a name="l75"></a> </span><span class=cF1>do</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l76"></a> </span><span class=cF6>&quot;\t$PURPLE$0$FG$=Master\n\t$PURPLE$1$FG$=Slave\nUnit:&quot;</span><span class=cF0>;
<a name="l77"></a> unit=</span><span class=cF5>GetChar</span><span class=cF0>-</span><span class=cF6>'0'</span><span class=cF0>;
<a name="l78"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>while</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>0&lt;=unit&lt;=1</span><span class=cF7>)</span><span class=cF0>);
<a name="l79"></a> </span><span class=cF6>'\n'</span><span class=cF0>;
<a name="l80"></a> }
<a name="l81"></a> </span><span class=cF5>LinkedLstDel</span><span class=cF0>(head);
<a name="l82"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l83"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l84"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;bd=BlkDevNextFreeSlot(\'%C\',%d);bd-&gt;unit=%d;\n&quot;</span><span class=cF0>,
<a name="l85"></a> drv_let,type,unit);
<a name="l86"></a> </span><span class=cF1>switch</span><span class=cF0> (type) </span><span class=cF7>{</span><span class=cF0>
<a name="l87"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>BDT_RAM</span><span class=cF0>:
<a name="l88"></a> </span><span class=cF1>if</span><span class=cF0> (!*addr_buf) </span><span class=cF5>StrCpy</span><span class=cF0>(addr_buf,</span><span class=cF6>&quot;0&quot;</span><span class=cF0>);
<a name="l89"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;bd-&gt;RAM_dsk=%s;\n&quot;</span><span class=cF0>,addr_buf);
<a name="l90"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>BDT_ISO_FILE_WRITE</span><span class=cF0>:
<a name="l91"></a> </span><span class=cF1>if</span><span class=cF0> (!*blks_buf) </span><span class=cF5>StrCpy</span><span class=cF0>(blks_buf,</span><span class=cF6>&quot;0&quot;</span><span class=cF0>);
<a name="l92"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;bd-&gt;max_blk=(%s)-1;\n&quot;</span><span class=cF0>,blks_buf);
<a name="l93"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;bd-&gt;drv_offset=19&lt;&lt;2+&quot;</span><span class=cF0>
<a name="l94"></a> </span><span class=cF6>&quot;(DVD_BLK_SIZE*2+DVD_BOOT_LOADER_SIZE)/BLK_SIZE;\n&quot;</span><span class=cF0>);
<a name="l95"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l96"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>BDT_ISO_FILE_READ</span><span class=cF0>:
<a name="l97"></a> filename2=</span><span class=cF5>FileNameAbs</span><span class=cF0>(filename);
<a name="l98"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;bd-&gt;file_dsk_name=AStrNew(\&quot;%s\&quot;);\n&quot;</span><span class=cF0>,filename2);
<a name="l99"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;bd-&gt;drv_offset=19&lt;&lt;2+&quot;</span><span class=cF0>
<a name="l100"></a> </span><span class=cF6>&quot;(DVD_BLK_SIZE*2+DVD_BOOT_LOADER_SIZE)/BLK_SIZE;\n&quot;</span><span class=cF0>);
<a name="l101"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l102"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>BDT_ATA</span><span class=cF0>:
<a name="l103"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>BDT_ATAPI</span><span class=cF0>:
<a name="l104"></a> </span><span class=cF1>if</span><span class=cF0> (type==</span><span class=cF3>BDT_ATAPI</span><span class=cF0> &amp;&amp; !*base0_buf) {
<a name="l105"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;GetBaseUnit(bd);\n&quot;</span><span class=cF0>); </span><span class=cF2>//Only </span><a href="/Wb/Kernel/KCfg.HC.HTML#l1"><span class=cF4>::/Kernel/KCfg.HC</span></a><span class=cF0>
<a name="l106"></a> </span><span class=cF1>if</span><span class=cF0> (drv_let==boot_drv_let)
<a name="l107"></a> make_free=</span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l108"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l109"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;bd-&gt;base0=%s;bd-&gt;base1=%s;\n&quot;</span><span class=cF0>,base0_buf,base1_buf);
<a name="l110"></a> </span><span class=cF1>if</span><span class=cF0> (type==</span><span class=cF3>BDT_ATA</span><span class=cF0> &amp;&amp; _caller_is_prtdsk) {
<a name="l111"></a> </span><span class=cF6>&quot;\nReformat WHOLE drive!&quot;</span><span class=cF0>;
<a name="l112"></a> whole_drv=</span><span class=cF5>YorN</span><span class=cF0>;
<a name="l113"></a> }
<a name="l114"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l115"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l116"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;BlkDevAdd(bd,%d,%d,%d);\n&quot;</span><span class=cF0>,prt_num,whole_drv,make_free);
<a name="l117"></a> </span><span class=cF1>if</span><span class=cF0> (_doc) </span><span class=cF2>//Called by </span><a href="/Wb/Kernel/KCfg.HC.HTML#l1"><span class=cF4>::/Kernel/KCfg.HC</span></a><span class=cF0>
<a name="l118"></a> cnt++;
<a name="l119"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0> </span><span class=cF2>//Called by </span><a href="/Wb/Adam/ABlkDev/Mount.HC.HTML#l138"><span class=cF4>Mount</span></a><span class=cF2>()</span><span class=cF0>
<a name="l120"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF7>(</span><span class=cF0>cnt=</span><span class=cF5>ExeDoc</span><span class=cF0>(doc)</span><span class=cF7>)</span><span class=cF0> &amp;&amp; whole_drv) {
<a name="l121"></a> </span><span class=cF1>if</span><span class=cF0> (_caller_is_prtdsk) </span><span class=cF7>{</span><span class=cF0>
<a name="l122"></a> res=drv_let;
<a name="l123"></a> </span><span class=cF5>DskPrt</span><span class=cF0>(drv_let,1.0); </span><span class=cF2>//First mount whole drive.</span><span class=cF0>
<a name="l124"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l125"></a> </span><span class=cF5>DskPrt</span><span class=cF0>(drv_let);
<a name="l126"></a> }
<a name="l127"></a> </span><span class=cF5>DocDel</span><span class=cF0>(doc);
<a name="l128"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l129"></a> }
<a name="l130"></a> total+=cnt;
<a name="l131"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>while</span><span class=cF0> (cnt &amp;&amp; !_caller_is_prtdsk ||
<a name="l132"></a> !total &amp;&amp; _doc); </span><span class=cF2>//At least 1 if Called by </span><a href="/Wb/Kernel/KCfg.HC.HTML#l1"><span class=cF4>::/Kernel/KCfg.HC</span></a><span class=cF0>
<a name="l133"></a> </span><span class=cF5>Free</span><span class=cF0>(filename);
<a name="l134"></a> </span><span class=cF5>Free</span><span class=cF0>(filename2);
<a name="l135"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l136"></a>}
<a name="l137"></a>
<a name="l138"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U8</span><span class=cF0> </span><span class=cF5>Mount</span><span class=cF0>(</span><span class=cF1>Bool</span><span class=cF0> caller_is_prtdsk=</span><span class=cF3>FALSE</span><span class=cF0>)
<a name="l139"></a>{</span><span class=cF2>//Mount drives. Called from </span><a href="/Wb/Adam/ABlkDev/DskPrt.HC.HTML#l43"><span class=cF4>DskPrt(Mount)</span></a><span class=cF2>.</span><span class=cF0>
<a name="l140"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF5>Mount2</span><span class=cF0>(0,</span><span class=cF3>NULL</span><span class=cF0>,caller_is_prtdsk);
<a name="l141"></a>}
<a name="l142"></a>
<a name="l143"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>Unmount</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> drv_let=0)
<a name="l144"></a>{</span><span class=cF2>//Unmount drive(s).</span><span class=cF0>
<a name="l145"></a> </span><span class=cF5>BlkDevDel</span><span class=cF0>(</span><span class=cF5>Let2BlkDev</span><span class=cF7>(</span><span class=cF0>drv_let</span><span class=cF7>)</span><span class=cF0>);
<a name="l146"></a>}
<a name="l147"></a>
<a name="l148"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U8</span><span class=cF0> </span><span class=cF5>MountFile</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *filename)
<a name="l149"></a>{</span><span class=cF2>//Mount ISO.C file.</span><span class=cF0>
<a name="l150"></a> </span><span class=cF1>U8</span><span class=cF0> *filename2=</span><span class=cF5>ExtDft</span><span class=cF0>(filename,</span><span class=cF6>&quot;ISO.C&quot;</span><span class=cF0>),*filename3=</span><span class=cF5>FileNameAbs</span><span class=cF0>(filename2);
<a name="l151"></a> </span><span class=cF9>CDrv</span><span class=cF0> *dv=</span><span class=cF5>DrvMakeFreeSlot</span><span class=cF0>(</span><span class=cF5>DrvNextFreeLet</span><span class=cF7>(</span><span class=cF6>'M'</span><span class=cF7>)</span><span class=cF0>); </span><span class=cF2>//First </span><a href="/Wb/Kernel/KernelA.HH.HTML#l2604"><span class=cF4>BDT_ISO_FILE_READ</span></a><span class=cF0>
<a name="l152"></a> </span><span class=cF9>CBlkDev</span><span class=cF0> *bd=</span><span class=cF5>BlkDevNextFreeSlot</span><span class=cF0>(dv-&gt;drv_let,</span><span class=cF3>BDT_ISO_FILE_READ</span><span class=cF0>);
<a name="l153"></a> bd-&gt;drv_offset=19&lt;&lt;2+(</span><span class=cF3>DVD_BLK_SIZE</span><span class=cF0>*2+</span><span class=cF3>DVD_BOOT_LOADER_SIZE</span><span class=cF0>)/</span><span class=cF3>BLK_SIZE</span><span class=cF0>;
<a name="l154"></a> bd-&gt;file_dsk_name=</span><span class=cF5>AStrNew</span><span class=cF0>(filename3);
<a name="l155"></a> </span><span class=cF5>BlkDevAdd</span><span class=cF0>(bd,,</span><span class=cF3>TRUE</span><span class=cF0>,</span><span class=cF3>TRUE</span><span class=cF0>);
<a name="l156"></a> </span><span class=cF5>Free</span><span class=cF0>(filename3);
<a name="l157"></a> </span><span class=cF5>Free</span><span class=cF0>(filename2);
<a name="l158"></a> </span><span class=cF1>return</span><span class=cF0> dv-&gt;drv_let;
<a name="l159"></a>}
</span></pre></body>
</html>

301
public/Wb/Adam/ADbg.HC.HTML Executable file
View File

@ -0,0 +1,301 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF0>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Debugging/Dump&quot;</span><span class=cF0>
<a name="l2"></a></span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>ClassRep2</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc,</span><span class=cF1>U8</span><span class=cF0> *_d,</span><span class=cF1>U8</span><span class=cF0> *class_name=</span><span class=cF1>lastclass</span><span class=cF0>,
<a name="l3"></a> </span><span class=cF9>I64</span><span class=cF0> depth,</span><span class=cF9>I64</span><span class=cF0> max_depth,</span><span class=cF1>Bool</span><span class=cF0> dynamic,</span><span class=cF9>I64</span><span class=cF0> types=</span><span class=cF3>HTT_CLASS</span><span class=cF0>,</span><span class=cF9>I64</span><span class=cF0> </span><span class=cF1>offset</span><span class=cF0>=0)
<a name="l4"></a>{</span><span class=cF2>//See </span><a href="/Wb/Demo/LastClass.HC.HTML#l1"><span class=cF4>::/Demo/LastClass.HC</span></a><span class=cF2>.</span><span class=cF0>
<a name="l5"></a> </span><span class=cF9>I64</span><span class=cF0> i,j,stars,*ptr;
<a name="l6"></a> </span><span class=cF9>CMemberLst</span><span class=cF0> *ml;
<a name="l7"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_e;
<a name="l8"></a> </span><span class=cF1>Bool</span><span class=cF0> unlock;
<a name="l9"></a> </span><span class=cF9>CHashClass</span><span class=cF0> *tmpc,*tmpc2;
<a name="l10"></a> </span><span class=cF1>if</span><span class=cF0> (depth&gt;=max_depth) </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l11"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>tmpc=</span><span class=cF5>HashFind</span><span class=cF0>(class_name,</span><span class=cF5>Fs</span><span class=cF0>-&gt;hash_table,types)</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l12"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;Class Not Found.\n&quot;</span><span class=cF0>);
<a name="l13"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l14"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l15"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>ChkPtr</span><span class=cF7>(</span><span class=cF0>_d</span><span class=cF7>)</span><span class=cF0> || !</span><span class=cF5>ChkPtr</span><span class=cF7>(</span><span class=cF0>_d(</span><span class=cF1>U8</span><span class=cF0> *)+tmpc-&gt;size</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l16"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;Bad Ptr:%016X\n&quot;</span><span class=cF0>,_d);
<a name="l17"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l18"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l19"></a> </span><span class=cF1>if</span><span class=cF0> (tmpc-&gt;base_class &amp;&amp; !</span><span class=cF5>ClassRep2</span><span class=cF7>(</span><span class=cF0>doc,_d,tmpc-&gt;base_class-&gt;str,
<a name="l20"></a> depth,max_depth,dynamic,types,</span><span class=cF1>offset</span><span class=cF7>)</span><span class=cF0>)
<a name="l21"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l22"></a> unlock=</span><span class=cF5>DocLock</span><span class=cF0>(doc);
<a name="l23"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;Class:\&quot;%s\&quot;\n&quot;</span><span class=cF0>,class_name);
<a name="l24"></a> ml=tmpc-&gt;member_lst_and_root;
<a name="l25"></a> </span><span class=cF1>while</span><span class=cF0> (ml) </span><span class=cF7>{</span><span class=cF0>
<a name="l26"></a> tmpc2=ml-&gt;member_class;
<a name="l27"></a> ptr=_d(</span><span class=cF1>U8</span><span class=cF0> *)+ml-&gt;</span><span class=cF1>offset</span><span class=cF0>;
<a name="l28"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;%08X &quot;</span><span class=cF0>,ptr</span><span class=cF7>(</span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>+</span><span class=cF1>offset</span><span class=cF0>);
<a name="l29"></a> stars=tmpc2-&gt;ptr_stars_cnt;
<a name="l30"></a> tmpc2=</span><span class=cF5>OptClassFwd</span><span class=cF0>(tmpc2);
<a name="l31"></a> tmpc2-=tmpc2-&gt;ptr_stars_cnt;
<a name="l32"></a> </span><span class=cF1>if</span><span class=cF0> (tmpc2-&gt;type &amp; </span><span class=cF3>HTT_INTERNAL_TYPE</span><span class=cF0>) {
<a name="l33"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$GREEN$%-20ts:$FG$&quot;</span><span class=cF0>,ml-&gt;str);
<a name="l34"></a> </span><span class=cF1>if</span><span class=cF0> (stars==1 &amp;&amp; </span><span class=cF7>(</span><span class=cF0>tmpc2-&gt;raw_type==</span><span class=cF3>RT_I8</span><span class=cF0> || tmpc2-&gt;raw_type==</span><span class=cF3>RT_U8</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l35"></a> ptr=*ptr;
<a name="l36"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>ChkPtr</span><span class=cF7>(</span><span class=cF0>ptr</span><span class=cF7>)</span><span class=cF0>) {
<a name="l37"></a> </span><span class=cF1>if</span><span class=cF0> (dynamic) </span><span class=cF7>{</span><span class=cF0>
<a name="l38"></a> doc_e=</span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$DA-TRM-P+RD,LEN=64,A=\&quot;%%40ts\&quot;$\n&quot;</span><span class=cF0>);
<a name="l39"></a> doc_e-&gt;data=ptr;
<a name="l40"></a> </span><span class=cF5>DocDataFmt</span><span class=cF0>(doc,doc_e);
<a name="l41"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l42"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;%40ts\n&quot;</span><span class=cF0>,ptr);
<a name="l43"></a> }
<a name="l44"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (!stars) </span><span class=cF7>{</span><span class=cF0>
<a name="l45"></a> j=</span><span class=cF5>MinI64</span><span class=cF0>(ml-&gt;dim.total_cnt,32);
<a name="l46"></a> </span><span class=cF1>if</span><span class=cF0> (tmpc2-&gt;raw_type==</span><span class=cF3>RT_I8</span><span class=cF0> || tmpc2-&gt;raw_type==</span><span class=cF3>RT_U8</span><span class=cF0>) {
<a name="l47"></a> </span><span class=cF1>if</span><span class=cF0> (j==1) </span><span class=cF7>{</span><span class=cF0>
<a name="l48"></a> </span><span class=cF1>if</span><span class=cF0> (dynamic) {
<a name="l49"></a> doc_e=</span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$DA-TRM+RD+UD,RT=U8,A=\&quot;%%c\&quot;$\n&quot;</span><span class=cF0>);
<a name="l50"></a> doc_e-&gt;data=ptr;
<a name="l51"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l52"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;%c\n&quot;</span><span class=cF0>,*ptr</span><span class=cF7>(</span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>);
<a name="l53"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l54"></a> </span><span class=cF1>if</span><span class=cF0> (dynamic) {
<a name="l55"></a> doc_e=</span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$DA-TRM-P+RD,LEN=64,A=\&quot;%%40ts\&quot;$\n&quot;</span><span class=cF0>);
<a name="l56"></a> doc_e-&gt;data=ptr;
<a name="l57"></a> </span><span class=cF5>DocDataFmt</span><span class=cF0>(doc,doc_e);
<a name="l58"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l59"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;%40ts\n&quot;</span><span class=cF0>,ptr);
<a name="l60"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l61"></a> }
<a name="l62"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;j;i++) {
<a name="l63"></a> </span><span class=cF1>switch</span><span class=cF0> (tmpc2-&gt;raw_type) </span><span class=cF7>{</span><span class=cF0>
<a name="l64"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>RT_I0</span><span class=cF0>:
<a name="l65"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>RT_U0</span><span class=cF0>:
<a name="l66"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l67"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>RT_I8</span><span class=cF0>:
<a name="l68"></a> </span><span class=cF1>if</span><span class=cF0> (dynamic) {
<a name="l69"></a> doc_e=</span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$DA-TRM+RD+UD,RT=I8,A=\&quot;%%02X\&quot;$ &quot;</span><span class=cF0>);
<a name="l70"></a> doc_e-&gt;data=ptr(</span><span class=cF1>I8</span><span class=cF0> *)++;
<a name="l71"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l72"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;%02X &quot;</span><span class=cF0>,*ptr</span><span class=cF7>(</span><span class=cF1>I8</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>++);
<a name="l73"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l74"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>RT_U8</span><span class=cF0>:
<a name="l75"></a> </span><span class=cF1>if</span><span class=cF0> (dynamic) {
<a name="l76"></a> doc_e=</span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$DA-TRM+RD+UD,RT=U8,A=\&quot;%%02X\&quot;$ &quot;</span><span class=cF0>);
<a name="l77"></a> doc_e-&gt;data=ptr(</span><span class=cF1>U8</span><span class=cF0> *)++;
<a name="l78"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l79"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;%02X &quot;</span><span class=cF0>,*ptr</span><span class=cF7>(</span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>++);
<a name="l80"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l81"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>RT_I16</span><span class=cF0>:
<a name="l82"></a> </span><span class=cF1>if</span><span class=cF0> (dynamic) {
<a name="l83"></a> doc_e=</span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$DA-TRM+RD+UD,RT=I16,A=\&quot;%%04X\&quot;$ &quot;</span><span class=cF0>);
<a name="l84"></a> doc_e-&gt;data=ptr(</span><span class=cF9>I16</span><span class=cF0> *)++;
<a name="l85"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l86"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;%04X &quot;</span><span class=cF0>,*ptr</span><span class=cF7>(</span><span class=cF9>I16</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>++);
<a name="l87"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l88"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>RT_U16</span><span class=cF0>:
<a name="l89"></a> </span><span class=cF1>if</span><span class=cF0> (dynamic) {
<a name="l90"></a> doc_e=</span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$DA-TRM+RD+UD,RT=U16,A=\&quot;%%04X\&quot;$ &quot;</span><span class=cF0>);
<a name="l91"></a> doc_e-&gt;data=ptr(</span><span class=cF9>U16</span><span class=cF0> *)++;
<a name="l92"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l93"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;%04X &quot;</span><span class=cF0>,*ptr</span><span class=cF7>(</span><span class=cF9>U16</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>++);
<a name="l94"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l95"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>RT_I32</span><span class=cF0>:
<a name="l96"></a> </span><span class=cF1>if</span><span class=cF0> (dynamic) {
<a name="l97"></a> doc_e=</span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$DA-TRM+RD+UD,RT=I32,A=\&quot;%%08X\&quot;$ &quot;</span><span class=cF0>);
<a name="l98"></a> doc_e-&gt;data=ptr(</span><span class=cF9>I32</span><span class=cF0> *)++;
<a name="l99"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l100"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;%08X &quot;</span><span class=cF0>,*ptr</span><span class=cF7>(</span><span class=cF9>I32</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>++);
<a name="l101"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l102"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>RT_U32</span><span class=cF0>:
<a name="l103"></a> </span><span class=cF1>if</span><span class=cF0> (dynamic) {
<a name="l104"></a> doc_e=</span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$DA-TRM+RD+UD,RT=U32,A=\&quot;%%08X\&quot;$ &quot;</span><span class=cF0>);
<a name="l105"></a> doc_e-&gt;data=ptr(</span><span class=cF9>U32</span><span class=cF0> *)++;
<a name="l106"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l107"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;%08X &quot;</span><span class=cF0>,*ptr</span><span class=cF7>(</span><span class=cF9>U32</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>++);
<a name="l108"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l109"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>RT_U64</span><span class=cF0>:
<a name="l110"></a> </span><span class=cF1>if</span><span class=cF0> (dynamic) {
<a name="l111"></a> doc_e=</span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$DA-TRM+RD+UD,RT=U64,A=\&quot;%%08X\&quot;$ &quot;</span><span class=cF0>);
<a name="l112"></a> doc_e-&gt;data=ptr(</span><span class=cF9>U64</span><span class=cF0> *)++;
<a name="l113"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l114"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;%08X &quot;</span><span class=cF0>,*ptr</span><span class=cF7>(</span><span class=cF9>U64</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>++);
<a name="l115"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l116"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>RT_F64</span><span class=cF0>:
<a name="l117"></a> </span><span class=cF1>if</span><span class=cF0> (dynamic) {
<a name="l118"></a> doc_e=</span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$DA-TRM+RD+UD,RT=F64,A=\&quot;%%16g\&quot;$ &quot;</span><span class=cF0>);
<a name="l119"></a> doc_e-&gt;data=ptr(</span><span class=cF1>F64</span><span class=cF0> *)++;
<a name="l120"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l121"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;%16g &quot;</span><span class=cF0>,*ptr</span><span class=cF7>(</span><span class=cF9>I64</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>++);
<a name="l122"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l123"></a> </span><span class=cF1>default</span><span class=cF0>:
<a name="l124"></a> </span><span class=cF1>if</span><span class=cF0> (dynamic) {
<a name="l125"></a> doc_e=</span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$DA-TRM+RD+UD,A=\&quot;%%016X\&quot;$ &quot;</span><span class=cF0>);
<a name="l126"></a> doc_e-&gt;data=ptr(</span><span class=cF9>I64</span><span class=cF0> *)++;
<a name="l127"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l128"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;%016X &quot;</span><span class=cF0>,*ptr</span><span class=cF7>(</span><span class=cF9>I64</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>++);
<a name="l129"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l130"></a> </span><span class=cF1>if</span><span class=cF0> (dynamic)
<a name="l131"></a> </span><span class=cF5>DocDataFmt</span><span class=cF0>(doc,doc_e);
<a name="l132"></a> }
<a name="l133"></a> </span><span class=cF1>if</span><span class=cF0> (j&lt;ml-&gt;dim.total_cnt)
<a name="l134"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;...&quot;</span><span class=cF0>);
<a name="l135"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l136"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;%016X&quot;</span><span class=cF0>,*ptr);
<a name="l137"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;\n&quot;</span><span class=cF0>);
<a name="l138"></a> } </span><span class=cF1>else</span><span class=cF0> {
<a name="l139"></a> </span><span class=cF1>if</span><span class=cF0> (depth&lt;2) </span><span class=cF7>{</span><span class=cF0>
<a name="l140"></a> </span><span class=cF1>if</span><span class=cF0> (stars==1 &amp;&amp; !</span><span class=cF5>ChkPtr</span><span class=cF7>(</span><span class=cF0>*ptr</span><span class=cF7>)</span><span class=cF0>)
<a name="l141"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;%-20ts:%016X\n&quot;</span><span class=cF0>,ml-&gt;str,*ptr);
<a name="l142"></a> </span><span class=cF1>else</span><span class=cF0> {
<a name="l143"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$TR,\&quot;%s\&quot;$\n&quot;</span><span class=cF0>,ml-&gt;str);
<a name="l144"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$ID,2$&quot;</span><span class=cF0>);
<a name="l145"></a> </span><span class=cF1>if</span><span class=cF0> (!stars)
<a name="l146"></a> </span><span class=cF5>ClassRep2</span><span class=cF0>(doc,ptr,tmpc2-&gt;str,depth+1,max_depth,dynamic);
<a name="l147"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (stars==1)
<a name="l148"></a> </span><span class=cF5>ClassRep2</span><span class=cF0>(doc,*ptr,tmpc2-&gt;str,depth+1,max_depth,dynamic);
<a name="l149"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$ID,-2$&quot;</span><span class=cF0>);
<a name="l150"></a> }
<a name="l151"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l152"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;%-20ts\n&quot;</span><span class=cF0>,ml-&gt;str);
<a name="l153"></a> }
<a name="l154"></a> ml=ml-&gt;next;
<a name="l155"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l156"></a> </span><span class=cF1>if</span><span class=cF0> (unlock)
<a name="l157"></a> </span><span class=cF5>DocUnlock</span><span class=cF0>(doc);
<a name="l158"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l159"></a>}
<a name="l160"></a>
<a name="l161"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ClassRep</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *_d,</span><span class=cF1>U8</span><span class=cF0> *class_name=</span><span class=cF1>lastclass</span><span class=cF0>,
<a name="l162"></a> </span><span class=cF9>I64</span><span class=cF0> max_depth=2,</span><span class=cF1>Bool</span><span class=cF0> fun=</span><span class=cF3>FALSE</span><span class=cF0>,</span><span class=cF9>I64</span><span class=cF0> </span><span class=cF1>offset</span><span class=cF0>=0)
<a name="l163"></a>{</span><span class=cF2>//Displays members of a record by using the compiler's info.</span><span class=cF0>
<a name="l164"></a> </span><span class=cF9>CDoc</span><span class=cF0> *doc;
<a name="l165"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>IsRaw</span><span class=cF0>)
<a name="l166"></a> doc=</span><span class=cF5>DocNew</span><span class=cF0>;
<a name="l167"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l168"></a> </span><span class=cF5>DocMax</span><span class=cF0>;
<a name="l169"></a> doc=</span><span class=cF5>DocPut</span><span class=cF0>;
<a name="l170"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l171"></a> </span><span class=cF1>if</span><span class=cF0> (fun)
<a name="l172"></a> </span><span class=cF5>ClassRep2</span><span class=cF0>(doc,_d,class_name,0,max_depth,</span><span class=cF3>FALSE</span><span class=cF0>,</span><span class=cF3>HTT_FUN</span><span class=cF0>,</span><span class=cF1>offset</span><span class=cF0>);
<a name="l173"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l174"></a> </span><span class=cF5>ClassRep2</span><span class=cF0>(doc,_d,class_name,0,max_depth,</span><span class=cF3>FALSE</span><span class=cF0>,</span><span class=cF3>HTT_CLASS</span><span class=cF0>,</span><span class=cF1>offset</span><span class=cF0>);
<a name="l175"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;\n&quot;</span><span class=cF0>);
<a name="l176"></a> </span><span class=cF5>DocRecalc</span><span class=cF0>(doc);
<a name="l177"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>IsRaw</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l178"></a> </span><span class=cF5>DocDump</span><span class=cF0>(doc,100000);
<a name="l179"></a> </span><span class=cF5>DocDel</span><span class=cF0>(doc);
<a name="l180"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l181"></a>}
<a name="l182"></a>
<a name="l183"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ClassRepD</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *_d,</span><span class=cF1>U8</span><span class=cF0> *class_name=</span><span class=cF1>lastclass</span><span class=cF0>,
<a name="l184"></a> </span><span class=cF9>I64</span><span class=cF0> max_depth=2,</span><span class=cF1>Bool</span><span class=cF0> fun=</span><span class=cF3>FALSE</span><span class=cF0>,</span><span class=cF9>I64</span><span class=cF0> </span><span class=cF1>offset</span><span class=cF0>=0)
<a name="l185"></a>{</span><span class=cF2>//Dynamic ClassRep. Uses hex_ed widgit for live changes.</span><span class=cF0>
<a name="l186"></a> </span><span class=cF9>CDoc</span><span class=cF0> *doc;
<a name="l187"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>IsRaw</span><span class=cF0>)
<a name="l188"></a> doc=</span><span class=cF5>DocNew</span><span class=cF0>;
<a name="l189"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l190"></a> </span><span class=cF5>DocMax</span><span class=cF0>;
<a name="l191"></a> doc=</span><span class=cF5>DocPut</span><span class=cF0>;
<a name="l192"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l193"></a> </span><span class=cF1>if</span><span class=cF0> (fun)
<a name="l194"></a> </span><span class=cF5>ClassRep2</span><span class=cF0>(doc,_d,class_name,0,max_depth,</span><span class=cF3>TRUE</span><span class=cF0>,</span><span class=cF3>HTT_FUN</span><span class=cF0>,</span><span class=cF1>offset</span><span class=cF0>);
<a name="l195"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l196"></a> </span><span class=cF5>ClassRep2</span><span class=cF0>(doc,_d,class_name,0,max_depth,</span><span class=cF3>TRUE</span><span class=cF0>,</span><span class=cF3>HTT_CLASS</span><span class=cF0>,</span><span class=cF1>offset</span><span class=cF0>);
<a name="l197"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;\n&quot;</span><span class=cF0>);
<a name="l198"></a> </span><span class=cF5>DocRecalc</span><span class=cF0>(doc);
<a name="l199"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>IsRaw</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l200"></a> </span><span class=cF5>DocDump</span><span class=cF0>(doc,100000);
<a name="l201"></a> </span><span class=cF5>DocDel</span><span class=cF0>(doc);
<a name="l202"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l203"></a>}
<a name="l204"></a>
<a name="l205"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>UpdateRegVarImg</span><span class=cF0>(</span><span class=cF9>CHashFun</span><span class=cF0> *tmpf,</span><span class=cF1>U8</span><span class=cF0> *_b,</span><span class=cF9>CTask</span><span class=cF0> *task)
<a name="l206"></a>{
<a name="l207"></a> </span><span class=cF9>CMemberLst</span><span class=cF0> *ml;
<a name="l208"></a> </span><span class=cF9>CHashClass</span><span class=cF0> *tmpc;
<a name="l209"></a> ml=tmpf-&gt;member_lst_and_root;
<a name="l210"></a> </span><span class=cF1>while</span><span class=cF0> (ml) </span><span class=cF7>{</span><span class=cF0>
<a name="l211"></a> </span><span class=cF1>if</span><span class=cF0> (ml-&gt;</span><span class=cF1>reg</span><span class=cF0>!=</span><span class=cF3>REG_NONE</span><span class=cF0>) {
<a name="l212"></a> tmpc=</span><span class=cF5>OptClassFwd</span><span class=cF0>(ml-&gt;member_class);
<a name="l213"></a> </span><span class=cF5>MemCpy</span><span class=cF0>(_b+ml-&gt;</span><span class=cF1>offset</span><span class=cF0>,</span><span class=cF5>TaskRegAddr</span><span class=cF7>(</span><span class=cF0>task,ml-&gt;</span><span class=cF1>reg</span><span class=cF7>)</span><span class=cF0>,tmpc-&gt;size);
<a name="l214"></a> }
<a name="l215"></a> ml=ml-&gt;next;
<a name="l216"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l217"></a>}
<a name="l218"></a>
<a name="l219"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>FunRep</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *st,</span><span class=cF1>U8</span><span class=cF0> *rbp=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF9>I64</span><span class=cF0> max_depth=2,</span><span class=cF9>CTask</span><span class=cF0> *task=</span><span class=cF3>NULL</span><span class=cF0>)
<a name="l220"></a>{</span><span class=cF2>//Shows names and vals of a fun's local vars using compiler's info.</span><span class=cF0>
<a name="l221"></a> </span><span class=cF9>I64</span><span class=cF0> size;
<a name="l222"></a> </span><span class=cF1>U8</span><span class=cF0> *img;
<a name="l223"></a> </span><span class=cF9>CHashFun</span><span class=cF0> *tmpf=</span><span class=cF5>HashFind</span><span class=cF0>(st,</span><span class=cF5>Fs</span><span class=cF0>-&gt;hash_table,</span><span class=cF3>HTT_FUN</span><span class=cF0>);
<a name="l224"></a> </span><span class=cF9>CMemberLst</span><span class=cF0> *tmpm;
<a name="l225"></a> </span><span class=cF1>if</span><span class=cF0> (tmpf) </span><span class=cF7>{</span><span class=cF0>
<a name="l226"></a> </span><span class=cF1>if</span><span class=cF0> (rbp) {
<a name="l227"></a> </span><span class=cF1>if</span><span class=cF0> (task) </span><span class=cF7>{</span><span class=cF0>
<a name="l228"></a></span><span class=cF2>//tmpf-&gt;size is negative. It's the bottom</span><span class=cF0>
<a name="l229"></a> </span><span class=cF2>//of the fun local var space relative to RBP .</span><span class=cF0>
<a name="l230"></a> size=tmpf-&gt;arg_cnt*8-tmpf-&gt;size+16;
<a name="l231"></a>
<a name="l232"></a> img=</span><span class=cF5>MAlloc</span><span class=cF0>(size);
<a name="l233"></a> </span><span class=cF5>MemCpy</span><span class=cF0>(img,rbp+tmpf-&gt;size,size);
<a name="l234"></a> </span><span class=cF5>UpdateRegVarImg</span><span class=cF0>(tmpf,img-tmpf-&gt;size,task);
<a name="l235"></a> </span><span class=cF5>ClassRep</span><span class=cF0>(img-tmpf-&gt;size,st,max_depth,</span><span class=cF3>TRUE</span><span class=cF0>,rbp-img+tmpf-&gt;size);
<a name="l236"></a> </span><span class=cF5>Free</span><span class=cF0>(img);
<a name="l237"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l238"></a> </span><span class=cF5>ClassRep</span><span class=cF0>(rbp,st,max_depth,</span><span class=cF3>TRUE</span><span class=cF0>);
<a name="l239"></a> } </span><span class=cF1>else</span><span class=cF0> {
<a name="l240"></a> tmpm=tmpf-&gt;member_lst_and_root;
<a name="l241"></a> </span><span class=cF1>while</span><span class=cF0> (tmpm) </span><span class=cF7>{</span><span class=cF0>
<a name="l242"></a> </span><span class=cF1>if</span><span class=cF0> (0&lt;=tmpm-&gt;</span><span class=cF1>reg</span><span class=cF0>&lt;</span><span class=cF3>REG_REGS_NUM</span><span class=cF0>)
<a name="l243"></a> </span><span class=cF6>&quot;%08Z %s\n&quot;</span><span class=cF0>,tmpm-&gt;</span><span class=cF1>reg</span><span class=cF0>,</span><span class=cF6>&quot;ST_U64_REGS&quot;</span><span class=cF0>,tmpm-&gt;str;
<a name="l244"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l245"></a> </span><span class=cF6>&quot;%08tX %s\n&quot;</span><span class=cF0>,tmpm-&gt;</span><span class=cF1>offset</span><span class=cF0>,tmpm-&gt;str;
<a name="l246"></a> tmpm=tmpm-&gt;next;
<a name="l247"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l248"></a> </span><span class=cF6>&quot;%08tX Stk Size\n&quot;</span><span class=cF0>,tmpf-&gt;size;
<a name="l249"></a> }
<a name="l250"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l251"></a>}
<a name="l252"></a>
<a name="l253"></a>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Debugging/Unassemble&quot;</span><span class=cF0>
<a name="l254"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>Uf</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *st)
<a name="l255"></a>{</span><span class=cF2>//Unassembles a named fun</span><span class=cF0>
<a name="l256"></a> </span><span class=cF9>I64</span><span class=cF0> i;
<a name="l257"></a> </span><span class=cF9>CHashSrcSym</span><span class=cF0> *tmpf;
<a name="l258"></a> </span><span class=cF9>CDbgInfo</span><span class=cF0> *dbg_info;
<a name="l259"></a> </span><span class=cF1>if</span><span class=cF0> (tmpf=</span><span class=cF5>HashFind</span><span class=cF7>(</span><span class=cF0>st,</span><span class=cF5>Fs</span><span class=cF0>-&gt;hash_table,</span><span class=cF3>HTT_FUN</span><span class=cF0>|</span><span class=cF3>HTT_EXPORT_SYS_SYM</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l260"></a> </span><span class=cF1>if</span><span class=cF0> (tmpf-&gt;type&amp;</span><span class=cF3>HTT_FUN</span><span class=cF0>)
<a name="l261"></a> </span><span class=cF5>FunRep</span><span class=cF0>(st);
<a name="l262"></a> </span><span class=cF1>if</span><span class=cF0> (dbg_info=tmpf-&gt;dbg_info) {
<a name="l263"></a> i=dbg_info-&gt;body[dbg_info-&gt;max_line+1-dbg_info-&gt;min_line]
<a name="l264"></a> -dbg_info-&gt;body[0];
<a name="l265"></a> </span><span class=cF5>Un</span><span class=cF0>(dbg_info-&gt;body[0],i);
<a name="l266"></a> </span><span class=cF6>&quot;Code Size:%04X\n&quot;</span><span class=cF0>,i;
<a name="l267"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l268"></a> </span><span class=cF5>U</span><span class=cF0>(</span><span class=cF5>HashVal</span><span class=cF7>(</span><span class=cF0>tmpf</span><span class=cF7>)</span><span class=cF0>);
<a name="l269"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l270"></a>}
</span></pre></body>
</html>

68
public/Wb/Adam/ADefine.HC.HTML Executable file
View File

@ -0,0 +1,68 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF0>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Define;Char/Define&quot;</span><span class=cF0>
<a name="l2"></a>
<a name="l3"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>LoadDocDefines</span><span class=cF0>()
<a name="l4"></a>{
<a name="l5"></a> </span><span class=cF9>CBinFile</span><span class=cF0> *bfh=</span><span class=cFB>mem_boot_base</span><span class=cF0>-</span><span class=cF1>sizeof</span><span class=cF0>(</span><span class=cF9>CBinFile</span><span class=cF0>);
<a name="l6"></a>
<a name="l7"></a> </span><span class=cF5>DefinePrint</span><span class=cF0>(</span><span class=cF6>&quot;DD_OS_NAME_VERSION&quot;</span><span class=cF0>,</span><span class=cF6>&quot;TempleOS V%0.2f&quot;</span><span class=cF0>,</span><span class=cFB>sys_os_version</span><span class=cF0>);
<a name="l8"></a> </span><span class=cF5>DefinePrint</span><span class=cF0>(</span><span class=cF6>&quot;DD_TEMPLEOS_AGE&quot;</span><span class=cF0>,</span><span class=cF6>&quot;%0.1f&quot;</span><span class=cF0>,
<a name="l9"></a> </span><span class=cF7>(</span><span class=cF5>Now</span><span class=cF0>-</span><span class=cF5>Str2Date</span><span class=cF0>(</span><span class=cF6>&quot;8/1/2003&quot;</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0>/</span><span class=cF5>ToF64</span><span class=cF7>(</span><span class=cF0>1&lt;&lt;32</span><span class=cF7>)</span><span class=cF0>/</span><span class=cF3>CDATE_YEAR_DAYS</span><span class=cF0>);
<a name="l10"></a>
<a name="l11"></a> </span><span class=cF5>DefinePrint</span><span class=cF0>(</span><span class=cF6>&quot;DD_KERNEL&quot;</span><span class=cF0>,</span><span class=cF6>&quot;%08X&quot;</span><span class=cF0>,bfh);
<a name="l12"></a> bfh(</span><span class=cF9>I64</span><span class=cF0>)+=bfh-&gt;file_size-1;
<a name="l13"></a> </span><span class=cF5>DefinePrint</span><span class=cF0>(</span><span class=cF6>&quot;DD_KERNEL_END&quot;</span><span class=cF0>,</span><span class=cF6>&quot;%08X&quot;</span><span class=cF0>,bfh);
<a name="l14"></a>
<a name="l15"></a> </span><span class=cF2>//</span><a href="/Wb/Adam/Opt/Boot/BootDVD.HC.HTML#l5"><span class=cF4>DD_BOOT_HIGH_LOC_DVD</span></a><span class=cF0>
<a name="l16"></a></span><span class=cF5>
<a name="l17"></a>+] LineRep</span><span class=cF0>
<a name="l18"></a>
<a name="l19"></a> </span><span class=cF5>DefinePrint</span><span class=cF0>(</span><span class=cF6>&quot;DD_MP_VECT&quot;</span><span class=cF0>,</span><span class=cF6>&quot;%08X&quot;</span><span class=cF0>,</span><span class=cF3>MP_VECT_ADDR</span><span class=cF0>);
<a name="l20"></a> </span><span class=cF5>DefinePrint</span><span class=cF0>(</span><span class=cF6>&quot;DD_MP_VECT_END&quot;</span><span class=cF0>,</span><span class=cF6>&quot;%08X&quot;</span><span class=cF0>,
<a name="l21"></a> </span><span class=cF3>MP_VECT_ADDR</span><span class=cF0>+</span><span class=cFD>COREAP_16BIT_INIT_END</span><span class=cF0>-</span><span class=cFD>COREAP_16BIT_INIT</span><span class=cF0>-1);
<a name="l22"></a>
<a name="l23"></a> </span><span class=cF5>DefinePrint</span><span class=cF0>(</span><span class=cF6>&quot;DD_SYS_FIXED_AREA_BASE&quot;</span><span class=cF0>,</span><span class=cF6>&quot;%08X&quot;</span><span class=cF0>,</span><span class=cF3>SYS_FIXED_AREA</span><span class=cF0>);
<a name="l24"></a> </span><span class=cF5>DefinePrint</span><span class=cF0>(</span><span class=cF6>&quot;DD_SYS_FIXED_AREA_END&quot;</span><span class=cF0>,</span><span class=cF6>&quot;%08X&quot;</span><span class=cF0>,
<a name="l25"></a> </span><span class=cF3>SYS_FIXED_AREA</span><span class=cF0>+</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CSysFixedArea</span><span class=cF7>)</span><span class=cF0>-1);
<a name="l26"></a> </span><span class=cF5>DefinePrint</span><span class=cF0>(</span><span class=cF6>&quot;DD_MEM_HEAP_BASE&quot;</span><span class=cF0>,</span><span class=cF6>&quot;%08X&quot;</span><span class=cF0>,</span><span class=cFB>mem_heap_base</span><span class=cF0>);
<a name="l27"></a> </span><span class=cF5>DefinePrint</span><span class=cF0>(</span><span class=cF6>&quot;DD_MEM_HEAP_LIMIT&quot;</span><span class=cF0>,</span><span class=cF6>&quot;%08X&quot;</span><span class=cF0>,</span><span class=cFB>mem_heap_limit</span><span class=cF0>);
<a name="l28"></a> </span><span class=cF5>DefinePrint</span><span class=cF0>(</span><span class=cF6>&quot;DD_MEM_MIN_MEG&quot;</span><span class=cF0>,</span><span class=cF6>&quot;%dMeg&quot;</span><span class=cF0>,</span><span class=cF3>MEM_MIN_MEG</span><span class=cF0>);
<a name="l29"></a> </span><span class=cF5>DefinePrint</span><span class=cF0>(</span><span class=cF6>&quot;DD_UNCACHED_ALIAS&quot;</span><span class=cF0>,</span><span class=cF6>&quot;%010X&quot;</span><span class=cF0>,</span><span class=cFB>dev</span><span class=cF0>.uncached_alias);
<a name="l30"></a> </span><span class=cF5>DefinePrint</span><span class=cF0>(</span><span class=cF6>&quot;DD_PHYSICAL_SPACE_END&quot;</span><span class=cF0>,</span><span class=cF6>&quot;%010X&quot;</span><span class=cF0>,
<a name="l31"></a> </span><span class=cFB>mem_physical_space</span><span class=cF0>-1);
<a name="l32"></a> </span><span class=cF5>DefinePrint</span><span class=cF0>(</span><span class=cF6>&quot;DD_MAPPED_SPACE_END&quot;</span><span class=cF0>,</span><span class=cF6>&quot;%010X&quot;</span><span class=cF0>,
<a name="l33"></a> </span><span class=cFB>mem_mapped_space</span><span class=cF0>-1);
<a name="l34"></a> </span><span class=cF5>DefinePrint</span><span class=cF0>(</span><span class=cF6>&quot;DD_JIFFY_HZ&quot;</span><span class=cF0>,</span><span class=cF6>&quot;%dHz&quot;</span><span class=cF0>,</span><span class=cF3>JIFFY_FREQ</span><span class=cF0>);
<a name="l35"></a>}
<a name="l36"></a>
<a name="l37"></a></span><span class=cF5>LoadDocDefines</span><span class=cF0>;
</span></pre></body>
</html>

126
public/Wb/Adam/AExts.HC.HTML Executable file
View File

@ -0,0 +1,126 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACDDef</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> n,</span><span class=cF9>CTask</span><span class=cF0> *parent=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l2"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACDDefsPut</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF1>U8</span><span class=cF0> *st,</span><span class=cF9>I64</span><span class=cF0> num=-1);
<a name="l3"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACDFillin</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> n);
<a name="l4"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACFillIn</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> n);
<a name="l5"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACMan</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> n,</span><span class=cF9>CTask</span><span class=cF0> *parent_task=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l6"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>AdamFile</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *filename,</span><span class=cF1>Bool</span><span class=cF0> warn_ext=</span><span class=cF3>TRUE</span><span class=cF0>);
<a name="l7"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>AutoComplete</span><span class=cF0>(</span><span class=cF1>Bool</span><span class=cF0> val=</span><span class=cF3>OFF</span><span class=cF0>);
<a name="l8"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ClipDel</span><span class=cF0>();
<a name="l9"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>CCtrl</span><span class=cF0> *</span><span class=cF5>CtrlFindUnique</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *haystack_task,</span><span class=cF9>I64</span><span class=cF0> needle_type);
<a name="l10"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>CtrlInside</span><span class=cF0>(</span><span class=cF9>CCtrl</span><span class=cF0> *c,</span><span class=cF9>I64</span><span class=cF0> x,</span><span class=cF9>I64</span><span class=cF0> y);
<a name="l11"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF5>DC2Sprite</span><span class=cF0>(</span><span class=cF9>CDC</span><span class=cF0> *tmpb);
<a name="l12"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DocBinDel</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc,</span><span class=cF9>CDocBin</span><span class=cF0> *b);
<a name="l13"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DocBinsValidate</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc);
<a name="l14"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DocBottom</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l15"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DocCenter</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF9>I64</span><span class=cF0> recalc_flags=</span><span class=cF3>RECALCt_NORMAL</span><span class=cF0>);
<a name="l16"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DocClear</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF1>Bool</span><span class=cF0> clear_holds=</span><span class=cF3>FALSE</span><span class=cF0>);
<a name="l17"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>DocCursor</span><span class=cF0>(</span><span class=cF1>Bool</span><span class=cF0> show=</span><span class=cF3>OFF</span><span class=cF0>,</span><span class=cF9>CDoc</span><span class=cF0> *doc=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l18"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DocD</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *buf,</span><span class=cF9>I64</span><span class=cF0> cnt=0x80);
<a name="l19"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DocDataFmt</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc,</span><span class=cF9>CDocEntry</span><span class=cF0> *doc_e,</span><span class=cF9>I64</span><span class=cF0> d=</span><span class=cF3>DOCM_CANCEL</span><span class=cF0>);
<a name="l20"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DocDel</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc);
<a name="l21"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>CDoc</span><span class=cF0> *</span><span class=cF5>DocDisplay</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l22"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DocDump</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc,</span><span class=cF9>I64</span><span class=cF0> uS_delay=0);
<a name="l23"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>CDocEntry</span><span class=cF0> *</span><span class=cF5>DocEntryCopy</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc,</span><span class=cF9>CDocEntry</span><span class=cF0> *doc_e);
<a name="l24"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DocEntryDel</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc,</span><span class=cF9>CDocEntry</span><span class=cF0> *doc_e);
<a name="l25"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>DocForm</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *_d,</span><span class=cF1>U8</span><span class=cF0> *class_name=</span><span class=cF1>lastclass</span><span class=cF0>,
<a name="l26"></a> </span><span class=cF9>I64</span><span class=cF0> dof_flags=0,</span><span class=cF1>U8</span><span class=cF0> *header=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF1>U8</span><span class=cF0> *footer=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l27"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DocHelpIdx</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc,</span><span class=cF1>U8</span><span class=cF0> *idx);
<a name="l28"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>DocHighlightCursor</span><span class=cF0>(</span><span class=cF1>Bool</span><span class=cF0> show=</span><span class=cF3>OFF</span><span class=cF0>,</span><span class=cF9>CDoc</span><span class=cF0> *doc=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l29"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DocInsDoc</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF9>CDoc</span><span class=cF0> *doc2);
<a name="l30"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DocInsEntry</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc,</span><span class=cF9>CDocEntry</span><span class=cF0> *doc_e);
<a name="l31"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>DocLock</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc);
<a name="l32"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>DocMax</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> i=</span><span class=cF3>I64_MAX</span><span class=cF0>);
<a name="l33"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>CDoc</span><span class=cF0> *</span><span class=cF5>DocNew</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *filename=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF9>CTask</span><span class=cF0> *task=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l34"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>CDocEntry</span><span class=cF0> *</span><span class=cF5>DocPrint</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF1>U8</span><span class=cF0> *fmt,...);
<a name="l35"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>CDoc</span><span class=cF0> *</span><span class=cF5>DocPut</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l36"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>CDoc</span><span class=cF0> *</span><span class=cF5>DocRead</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *name=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF9>I64</span><span class=cF0> flags=0);
<a name="l37"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>DocRecalc</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc,</span><span class=cF9>I64</span><span class=cF0> recalc_flags=</span><span class=cF3>RECALCt_NORMAL</span><span class=cF0>);
<a name="l38"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DocRst</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc,</span><span class=cF1>Bool</span><span class=cF0> is_old);
<a name="l39"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>CDocEntry</span><span class=cF0> *</span><span class=cF5>DocSprite</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF1>U8</span><span class=cF0> *elems,</span><span class=cF1>U8</span><span class=cF0> *fmt=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l40"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DocTop</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l41"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>DocUnlock</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc);
<a name="l42"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DocUpdateTaskDocs</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task);
<a name="l43"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DrawCtrls</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task);
<a name="l44"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>Ed</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *link_st,</span><span class=cF9>I64</span><span class=cF0> edf_dof_flags=0);
<a name="l45"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>EdCodeTools</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc);
<a name="l46"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF5>EdSprite</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> bin_num);
<a name="l47"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>ExeDoc</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc,</span><span class=cF9>I64</span><span class=cF0> ccf_flags=0);
<a name="l48"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>FindWiz</span><span class=cF0>();
<a name="l49"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>GetI64</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *msg=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF9>I64</span><span class=cF0> dft=0,</span><span class=cF9>I64</span><span class=cF0> lo=</span><span class=cF3>I64_MIN</span><span class=cF0>,</span><span class=cF9>I64</span><span class=cF0> hi=</span><span class=cF3>I64_MAX</span><span class=cF0>);
<a name="l50"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>GrPlot0</span><span class=cF0>(</span><span class=cF9>CDC</span><span class=cF0> *dc,</span><span class=cF9>I64</span><span class=cF0> x,</span><span class=cF9>I64</span><span class=cF0> y);
<a name="l51"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>CMenuEntry</span><span class=cF0> *</span><span class=cF5>MenuEntryFind</span><span class=cF0>(</span><span class=cF9>CMenu</span><span class=cF0> *haystack_menu,</span><span class=cF1>U8</span><span class=cF0> *needle_full_name);
<a name="l52"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>CMenu</span><span class=cF0> *</span><span class=cF5>MenuFilePush</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *filename);
<a name="l53"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>MenuPop</span><span class=cF0>();
<a name="l54"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>CMenu</span><span class=cF0> *</span><span class=cF5>MenuPush</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *st);
<a name="l55"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U8</span><span class=cF0> </span><span class=cF5>Mount</span><span class=cF0>(</span><span class=cF1>Bool</span><span class=cF0> caller_is_prtdsk=</span><span class=cF3>FALSE</span><span class=cF0>);
<a name="l56"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>CTask</span><span class=cF0> *</span><span class=cF5>Noise</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> mS,</span><span class=cF1>F64</span><span class=cF0> min_ona,</span><span class=cF1>F64</span><span class=cF0> max_ona);
<a name="l57"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>Plain</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *filename,</span><span class=cF9>I64</span><span class=cF0> edf_dof_flags=0);
<a name="l58"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>PopUpCancelOk</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *header=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF1>U8</span><span class=cF0> *footer=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l59"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>PopUpColor</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *header=</span><span class=cF3>NULL</span><span class=cF0>,
<a name="l60"></a> </span><span class=cF1>Bool</span><span class=cF0> allow_transparent=</span><span class=cF3>TRUE</span><span class=cF0>,</span><span class=cF1>Bool</span><span class=cF0> allow_dft=</span><span class=cF3>TRUE</span><span class=cF0>);
<a name="l61"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>PopUpColorDither</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *header=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l62"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>PopUpColorLighting</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *header=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l63"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>PopUpFile</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *filename,
<a name="l64"></a> </span><span class=cF1>Bool</span><span class=cF0> warn_ext=</span><span class=cF3>TRUE</span><span class=cF0>,</span><span class=cF9>CTask</span><span class=cF0> *parent=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF9>CTask</span><span class=cF0> **_pu_task=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l65"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>PopUpForm</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *_d,</span><span class=cF1>U8</span><span class=cF0> *class_name=</span><span class=cF1>lastclass</span><span class=cF0>,
<a name="l66"></a> </span><span class=cF9>I64</span><span class=cF0> dof_flags=</span><span class=cF3>DOF_SIZE_MIN</span><span class=cF0>,</span><span class=cF1>U8</span><span class=cF0> *header=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF1>U8</span><span class=cF0> *footer=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l67"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>PopUpGetI64</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *msg,</span><span class=cF9>I64</span><span class=cF0> dft,</span><span class=cF9>I64</span><span class=cF0> lo=</span><span class=cF3>I64_MIN</span><span class=cF0>,</span><span class=cF9>I64</span><span class=cF0> hi=</span><span class=cF3>I64_MAX</span><span class=cF0>);
<a name="l68"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF5>PopUpGetStr</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *header=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l69"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>PopUpMenu</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc,</span><span class=cF9>I64</span><span class=cF0> dof_flags=0);
<a name="l70"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>PopUpNoYes</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *header=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF1>U8</span><span class=cF0> *footer=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l71"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>PopUpOk</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *header=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF1>U8</span><span class=cF0> *footer=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l72"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>PopUpRangeI64</span><span class=cF0>(
<a name="l73"></a> </span><span class=cF9>I64</span><span class=cF0> lo,</span><span class=cF9>I64</span><span class=cF0> hi,</span><span class=cF9>I64</span><span class=cF0> step=1,</span><span class=cF1>U8</span><span class=cF0> *header=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF1>U8</span><span class=cF0> *footer=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l74"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>PopUpTransform</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> *r);
<a name="l75"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>RedSeaISO</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *_iso_filename=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF1>U8</span><span class=cF0> *_src_dir,
<a name="l76"></a> </span><span class=cF1>U8</span><span class=cF0> *_stage2_filename=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l77"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>Refresh</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> cnt=1,</span><span class=cF1>Bool</span><span class=cF0> force=</span><span class=cF3>FALSE</span><span class=cF0>);
<a name="l78"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>RegOneTimePopUp</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> flag_num,</span><span class=cF1>U8</span><span class=cF0> *msg);
<a name="l79"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>RegWrite</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *path,</span><span class=cF1>U8</span><span class=cF0> *fmt,...);
<a name="l80"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>SettingsPop</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF9>I64</span><span class=cF0> flags=0);
<a name="l81"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>CTaskSettings</span><span class=cF0> *</span><span class=cF5>SettingsPush</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF9>I64</span><span class=cF0> flags=0);
<a name="l82"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>TemplateCtrlSlider</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc);
<a name="l83"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>View</span><span class=cF0>();
<a name="l84"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ViewAnglesDel</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l85"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>CCtrl</span><span class=cF0> *</span><span class=cF5>ViewAnglesNew</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l86"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>WinBorder</span><span class=cF0>(</span><span class=cF1>Bool</span><span class=cF0> val=</span><span class=cF3>OFF</span><span class=cF0>,</span><span class=cF9>CTask</span><span class=cF0> *task=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l87"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>CDoc</span><span class=cF0> *</span><span class=cF5>WinCursorPosSet</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task,</span><span class=cF9>I64</span><span class=cF0> msx,</span><span class=cF9>I64</span><span class=cF0> msy,</span><span class=cF1>Bool</span><span class=cF0> set_cursor=</span><span class=cF3>TRUE</span><span class=cF0>);
<a name="l88"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>WinHorz</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> left,</span><span class=cF9>I64</span><span class=cF0> right,</span><span class=cF9>CTask</span><span class=cF0> *task=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l89"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>WinMax</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l90"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>WinScrollNull</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task,</span><span class=cF9>CD3I64</span><span class=cF0> *s);
<a name="l91"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>WinScrollRestore</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task,</span><span class=cF9>CD3I64</span><span class=cF0> *s);
<a name="l92"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>WinScrollsInit</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task);
<a name="l93"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>WinToTop</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF1>Bool</span><span class=cF0> update_z_buf=</span><span class=cF3>TRUE</span><span class=cF0>);
<a name="l94"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>WinVert</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> top,</span><span class=cF9>I64</span><span class=cF0> bottom,</span><span class=cF9>CTask</span><span class=cF0> *task=</span><span class=cF3>NULL</span><span class=cF0>);
<a name="l95"></a></span><span class=cF1>extern</span><span class=cF0> </span><span class=cF9>CWinMgrGlbls</span><span class=cF0> </span><span class=cFB>winmgr</span><span class=cF0>;
</span></pre></body>
</html>

462
public/Wb/Adam/AHash.HC.HTML Executable file
View File

@ -0,0 +1,462 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF0>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Info;Hash/System;Cmd Line (Typically)&quot;</span><span class=cF0>
<a name="l2"></a></span><span class=cF1>class</span><span class=cF0> </span><span class=cF9>CWho</span><span class=cF0>
<a name="l3"></a>{
<a name="l4"></a> </span><span class=cF9>CHashGeneric</span><span class=cF0> *h;
<a name="l5"></a> </span><span class=cF1>U8</span><span class=cF0> *idx;
<a name="l6"></a>};
<a name="l7"></a>
<a name="l8"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>HashEntriesCompare</span><span class=cF0>(</span><span class=cF9>CWho</span><span class=cF0> *h1,</span><span class=cF9>CWho</span><span class=cF0> *h2)
<a name="l9"></a>{
<a name="l10"></a> </span><span class=cF9>I64</span><span class=cF0> i1,i2;
<a name="l11"></a> </span><span class=cF1>if</span><span class=cF0> (i1=</span><span class=cF5>StrCmp</span><span class=cF7>(</span><span class=cF0>h1-&gt;h-&gt;str,h2-&gt;h-&gt;str</span><span class=cF7>)</span><span class=cF0>)
<a name="l12"></a> </span><span class=cF1>return</span><span class=cF0> i1;
<a name="l13"></a> i1=</span><span class=cF5>HashTypeNum</span><span class=cF0>(h1-&gt;h);
<a name="l14"></a> i2=</span><span class=cF5>HashTypeNum</span><span class=cF0>(h2-&gt;h);
<a name="l15"></a> </span><span class=cF1>return</span><span class=cF0> i1-i2;
<a name="l16"></a>}
<a name="l17"></a>
<a name="l18"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>HashEntriesCompare2</span><span class=cF0>(</span><span class=cF9>CWho</span><span class=cF0> *h1,</span><span class=cF9>CWho</span><span class=cF0> *h2)
<a name="l19"></a>{
<a name="l20"></a> </span><span class=cF9>CHashFun</span><span class=cF0> *tmpf1=h1-&gt;h,*tmpf2=h2-&gt;h;
<a name="l21"></a> </span><span class=cF9>I64</span><span class=cF0> i1=</span><span class=cF5>HashVal</span><span class=cF0>(tmpf1),i2=</span><span class=cF5>HashVal</span><span class=cF0>(tmpf2);
<a name="l22"></a> </span><span class=cF1>if</span><span class=cF0> (i1==i2) </span><span class=cF7>{</span><span class=cF0>
<a name="l23"></a> i1=</span><span class=cF5>HashTypeNum</span><span class=cF0>(tmpf1);
<a name="l24"></a> i2=</span><span class=cF5>HashTypeNum</span><span class=cF0>(tmpf2);
<a name="l25"></a> </span><span class=cF1>if</span><span class=cF0> (i1==i2)
<a name="l26"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF5>StrCmp</span><span class=cF0>(tmpf1-&gt;str,tmpf2-&gt;str);
<a name="l27"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l28"></a> </span><span class=cF1>return</span><span class=cF0> i1-i2;
<a name="l29"></a>}
<a name="l30"></a>
<a name="l31"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>HelpIndexCnt</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *ptr,</span><span class=cF1>U8</span><span class=cF0> *idx)
<a name="l32"></a>{
<a name="l33"></a> </span><span class=cF9>I64</span><span class=cF0> cnt=0,ch,idx_len=</span><span class=cF5>StrLen</span><span class=cF0>(idx);
<a name="l34"></a> </span><span class=cF1>while</span><span class=cF0> (*ptr) </span><span class=cF7>{</span><span class=cF0>
<a name="l35"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>StrNCmp</span><span class=cF7>(</span><span class=cF0>ptr,idx,idx_len</span><span class=cF7>)</span><span class=cF0>)
<a name="l36"></a> cnt++;
<a name="l37"></a> </span><span class=cF1>while</span><span class=cF0> (ch=*ptr++)
<a name="l38"></a> </span><span class=cF1>if</span><span class=cF0> (ch==</span><span class=cF6>';'</span><span class=cF0>)
<a name="l39"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l40"></a> </span><span class=cF1>if</span><span class=cF0> (!ch)
<a name="l41"></a> ptr--;
<a name="l42"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l43"></a> </span><span class=cF1>return</span><span class=cF0> cnt;
<a name="l44"></a>}
<a name="l45"></a>
<a name="l46"></a></span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF5>HelpIndexStr</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> **_ptr,</span><span class=cF1>U8</span><span class=cF0> *idx)
<a name="l47"></a>{
<a name="l48"></a> </span><span class=cF1>U8</span><span class=cF0> *ptr=*_ptr,*ptr2,*res;
<a name="l49"></a> </span><span class=cF9>I64</span><span class=cF0> ch,idx_len=</span><span class=cF5>StrLen</span><span class=cF0>(idx);
<a name="l50"></a> </span><span class=cF1>while</span><span class=cF0> (*ptr) </span><span class=cF7>{</span><span class=cF0>
<a name="l51"></a> ptr2=ptr;
<a name="l52"></a> </span><span class=cF1>while</span><span class=cF0> (ch=*ptr++)
<a name="l53"></a> </span><span class=cF1>if</span><span class=cF0> (ch==</span><span class=cF6>';'</span><span class=cF0>)
<a name="l54"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l55"></a> </span><span class=cF1>if</span><span class=cF0> (!ch)
<a name="l56"></a> ptr--;
<a name="l57"></a> *_ptr=ptr;
<a name="l58"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>StrNCmp</span><span class=cF7>(</span><span class=cF0>ptr2,idx,idx_len</span><span class=cF7>)</span><span class=cF0>) {
<a name="l59"></a> </span><span class=cF1>if</span><span class=cF0> (ch==</span><span class=cF6>';'</span><span class=cF0>)
<a name="l60"></a> ptr--;
<a name="l61"></a> *ptr=0;
<a name="l62"></a> res=</span><span class=cF5>StrNew</span><span class=cF0>(ptr2);
<a name="l63"></a> *ptr=ch;
<a name="l64"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l65"></a> }
<a name="l66"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l67"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>NULL</span><span class=cF0>;
<a name="l68"></a>}
<a name="l69"></a>
<a name="l70"></a></span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF5>HelpComment</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task,</span><span class=cF9>CHash</span><span class=cF0> *tmph,</span><span class=cF1>U8</span><span class=cF0> *_src_link)
<a name="l71"></a>{
<a name="l72"></a> </span><span class=cF9>CDoc</span><span class=cF0> *doc;
<a name="l73"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_e;
<a name="l74"></a> </span><span class=cF1>U8</span><span class=cF0> *res=</span><span class=cF3>NULL</span><span class=cF0>,*ptr,*ptr2,*src_link=</span><span class=cF5>StrNew</span><span class=cF0>(_src_link);
<a name="l75"></a>
<a name="l76"></a> </span><span class=cF1>if</span><span class=cF0> (*src_link==</span><span class=cF6>'F'</span><span class=cF0> &amp;&amp; src_link[2]==</span><span class=cF6>':'</span><span class=cF0>)
<a name="l77"></a> *src_link=</span><span class=cF6>'P'</span><span class=cF0>;
<a name="l78"></a> </span><span class=cF5>XTalkWait</span><span class=cF0>(task,</span><span class=cF6>&quot;Ed(0x%X,DOF_DONT_WINMGR_SYNC|DOF_DONT_SHOW);\n&quot;</span><span class=cF0>,src_link);
<a name="l79"></a> </span><span class=cF5>Free</span><span class=cF0>(src_link);
<a name="l80"></a>
<a name="l81"></a> doc=</span><span class=cF5>DocPut</span><span class=cF0>(task);
<a name="l82"></a> doc_e=doc-&gt;cur_entry;
<a name="l83"></a> </span><span class=cF1>if</span><span class=cF0> (tmph-&gt;type&amp;</span><span class=cF3>HTT_FUN</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l84"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&amp;tmph(</span><span class=cF9>CHashFun</span><span class=cF0> *)-&gt;flags,</span><span class=cF3>Ff__EXTERN</span><span class=cF7>)</span><span class=cF0> ||
<a name="l85"></a> </span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&amp;tmph(</span><span class=cF9>CHashFun</span><span class=cF0> *)-&gt;flags,</span><span class=cF3>Ff_INTERNAL</span><span class=cF7>)</span><span class=cF0>)
<a name="l86"></a> </span><span class=cF1>while</span><span class=cF0> (doc_e!=doc &amp;&amp;
<a name="l87"></a> </span><span class=cF7>(</span><span class=cF0>!(doc_e-&gt;de_flags&amp;</span><span class=cF3>DOCEF_TAG</span><span class=cF0>)||!</span><span class=cF5>StrOcc</span><span class=cF0>(doc_e-&gt;tag,</span><span class=cF6>';'</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0>)
<a name="l88"></a> doc_e=doc_e-&gt;next;
<a name="l89"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l90"></a> </span><span class=cF1>while</span><span class=cF0> (doc_e!=doc &amp;&amp;
<a name="l91"></a> </span><span class=cF7>(</span><span class=cF0>!(doc_e-&gt;de_flags&amp;</span><span class=cF3>DOCEF_TAG</span><span class=cF0>)||!</span><span class=cF5>StrOcc</span><span class=cF0>(doc_e-&gt;tag,</span><span class=cF6>'{'</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0>)
<a name="l92"></a> doc_e=doc_e-&gt;next;
<a name="l93"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l94"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e!=doc) </span><span class=cF7>{</span><span class=cF0>
<a name="l95"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;de_flags&amp;</span><span class=cF3>DOCEF_TAG</span><span class=cF0>) {
<a name="l96"></a> ptr=doc_e-&gt;tag;
<a name="l97"></a> </span><span class=cF1>if</span><span class=cF0> (ptr2=</span><span class=cF5>StrMatch</span><span class=cF7>(</span><span class=cF6>&quot;//&quot;</span><span class=cF0>,ptr</span><span class=cF7>)</span><span class=cF0>)
<a name="l98"></a> ptr=ptr2+2;
<a name="l99"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (ptr2=</span><span class=cF5>StrMatch</span><span class=cF7>(</span><span class=cF6>&quot;/*&quot;</span><span class=cF0>,ptr</span><span class=cF7>)</span><span class=cF0>)
<a name="l100"></a> ptr=ptr2+2;
<a name="l101"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>StrNCmp</span><span class=cF7>(</span><span class=cF0>ptr,</span><span class=cF6>&quot;public&quot;</span><span class=cF0>,6</span><span class=cF7>)</span><span class=cF0>)
<a name="l102"></a> ptr+=6;
<a name="l103"></a> </span><span class=cF1>while</span><span class=cF0> (*ptr==</span><span class=cF3>CH_SPACE</span><span class=cF0>)
<a name="l104"></a> ptr++;
<a name="l105"></a> res=</span><span class=cF5>StrNew</span><span class=cF0>(ptr);
<a name="l106"></a> doc_e=doc_e-&gt;next;
<a name="l107"></a> }
<a name="l108"></a> </span><span class=cF1>while</span><span class=cF0> (doc_e!=doc &amp;&amp; doc_e-&gt;type_u8!=</span><span class=cF3>DOCT_NEW_LINE</span><span class=cF0>) {
<a name="l109"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;type_u8==</span><span class=cF3>DOCT_TAB</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l110"></a> ptr=</span><span class=cF5>MStrPrint</span><span class=cF0>(</span><span class=cF6>&quot;%s &quot;</span><span class=cF0>,res);
<a name="l111"></a> </span><span class=cF5>Free</span><span class=cF0>(res);
<a name="l112"></a> res=ptr;
<a name="l113"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;de_flags&amp;</span><span class=cF3>DOCEF_TAG</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l114"></a> ptr=</span><span class=cF5>MStrPrint</span><span class=cF0>(</span><span class=cF6>&quot;%s%s&quot;</span><span class=cF0>,res,doc_e-&gt;tag);
<a name="l115"></a> </span><span class=cF5>Free</span><span class=cF0>(res);
<a name="l116"></a> res=ptr;
<a name="l117"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l118"></a> doc_e=doc_e-&gt;next;
<a name="l119"></a> }
<a name="l120"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l121"></a> </span><span class=cF5>XTalkWait</span><span class=cF0>(task,</span><span class=cF6>&quot;%c&quot;</span><span class=cF0>,</span><span class=cF3>CH_SHIFT_ESC</span><span class=cF0>);
<a name="l122"></a> </span><span class=cF1>if</span><span class=cF0> (res) </span><span class=cF7>{</span><span class=cF0>
<a name="l123"></a> ptr=</span><span class=cF5>MStrUtil</span><span class=cF0>(res,</span><span class=cF3>SUF_REM_TRAILING</span><span class=cF0>|</span><span class=cF3>SUF_REM_LEADING</span><span class=cF0>|</span><span class=cF3>SUF_SINGLE_SPACE</span><span class=cF0>);
<a name="l124"></a> </span><span class=cF5>Free</span><span class=cF0>(res);
<a name="l125"></a> res=ptr;
<a name="l126"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l127"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l128"></a>}
<a name="l129"></a>
<a name="l130"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>HashEntriesCompare3</span><span class=cF0>(</span><span class=cF9>CWho</span><span class=cF0> *h1,</span><span class=cF9>CWho</span><span class=cF0> *h2)
<a name="l131"></a>{
<a name="l132"></a> </span><span class=cF9>I64</span><span class=cF0> i,i1=0,i2=0;
<a name="l133"></a> i=</span><span class=cF5>StrCmp</span><span class=cF0>(h1-&gt;idx,h2-&gt;idx);
<a name="l134"></a> </span><span class=cF1>if</span><span class=cF0> (i)
<a name="l135"></a> </span><span class=cF1>return</span><span class=cF0> i;
<a name="l136"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l137"></a> </span><span class=cF1>if</span><span class=cF0> (h1-&gt;h-&gt;type&amp;</span><span class=cF3>HTT_HELP_FILE</span><span class=cF0>)
<a name="l138"></a> i1=1;
<a name="l139"></a> </span><span class=cF1>if</span><span class=cF0> (h2-&gt;h-&gt;type&amp;</span><span class=cF3>HTT_HELP_FILE</span><span class=cF0>)
<a name="l140"></a> i2=1;
<a name="l141"></a> i=i2-i1;
<a name="l142"></a> </span><span class=cF1>if</span><span class=cF0> (i)
<a name="l143"></a> </span><span class=cF1>return</span><span class=cF0> i;
<a name="l144"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l145"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF5>StrCmp</span><span class=cF0>(h1-&gt;h-&gt;str,h2-&gt;h-&gt;str);
<a name="l146"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l147"></a>}
<a name="l148"></a>
<a name="l149"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>Who</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *fu_flags=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF9>CHashTable</span><span class=cF0> *h=</span><span class=cF3>NULL</span><span class=cF0>,
<a name="l150"></a></span><span class=cF1>U8</span><span class=cF0> *idx=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF9>CDoc</span><span class=cF0> *doc=</span><span class=cF3>NULL</span><span class=cF0>)
<a name="l151"></a>{</span><span class=cF2>//Dump hash symbol table.</span><span class=cF0>
<a name="l152"></a></span><span class=cF2>// &quot;+p&quot; for only public symbols</span><span class=cF0>
<a name="l153"></a> </span><span class=cF2>// &quot;+m&quot; to order by number (normally alphabetical)</span><span class=cF0>
<a name="l154"></a> </span><span class=cF2>// &quot;-r&quot; just local hash table</span><span class=cF0>
<a name="l155"></a> </span><span class=cF9>CHashTable</span><span class=cF0> *table;
<a name="l156"></a> </span><span class=cF9>CHashSrcSym</span><span class=cF0> *tmph;
<a name="l157"></a> </span><span class=cF9>CHashGeneric</span><span class=cF0> *ptr;
<a name="l158"></a> </span><span class=cF9>CWho</span><span class=cF0> *lst;
<a name="l159"></a> </span><span class=cF9>I64</span><span class=cF0> cnt,i,j,k,f=0;
<a name="l160"></a> </span><span class=cF1>U8</span><span class=cF0> buf[512],*last_idx=</span><span class=cF5>StrNew</span><span class=cF0>(</span><span class=cF6>&quot;&quot;</span><span class=cF0>),*cur_idx,*comment;
<a name="l161"></a> </span><span class=cF1>Bool</span><span class=cF0> recurse,publics,map;
<a name="l162"></a> </span><span class=cF9>CTask</span><span class=cF0> *task;
<a name="l163"></a>
<a name="l164"></a> </span><span class=cF5>ScanFlags</span><span class=cF0>(&amp;f,</span><span class=cF5>Define</span><span class=cF7>(</span><span class=cF6>&quot;ST_FILE_UTIL_FLAGS&quot;</span><span class=cF7>)</span><span class=cF0>,</span><span class=cF6>&quot;+r&quot;</span><span class=cF0>);
<a name="l165"></a> </span><span class=cF5>ScanFlags</span><span class=cF0>(&amp;f,</span><span class=cF5>Define</span><span class=cF7>(</span><span class=cF6>&quot;ST_FILE_UTIL_FLAGS&quot;</span><span class=cF7>)</span><span class=cF0>,fu_flags);
<a name="l166"></a> </span><span class=cF1>if</span><span class=cF0> (f&amp;~</span><span class=cF7>(</span><span class=cF3>FUF_RECURSE</span><span class=cF0>|</span><span class=cF3>FUF_PUBLIC</span><span class=cF0>|</span><span class=cF3>FUF_MAP</span><span class=cF7>)</span><span class=cF0>)
<a name="l167"></a> </span><span class=cF5>throw</span><span class=cF0>(</span><span class=cF6>'FUF'</span><span class=cF0>);
<a name="l168"></a> recurse=</span><span class=cF5>Bt</span><span class=cF0>(&amp;f,</span><span class=cF3>FUf_RECURSE</span><span class=cF0>);
<a name="l169"></a> publics=</span><span class=cF5>Bt</span><span class=cF0>(&amp;f,</span><span class=cF3>FUf_PUBLIC</span><span class=cF0>);
<a name="l170"></a> map =</span><span class=cF5>Bt</span><span class=cF0>(&amp;f,</span><span class=cF3>FUf_MAP</span><span class=cF0>);
<a name="l171"></a>
<a name="l172"></a> </span><span class=cF1>if</span><span class=cF0> (!h) h=</span><span class=cF5>Fs</span><span class=cF0>-&gt;hash_table;
<a name="l173"></a>
<a name="l174"></a> </span><span class=cF1>if</span><span class=cF0> (idx) </span><span class=cF7>{</span><span class=cF0>
<a name="l175"></a> task=</span><span class=cF5>User</span><span class=cF0>;
<a name="l176"></a> </span><span class=cF5>TaskWait</span><span class=cF0>(task);
<a name="l177"></a> </span><span class=cF5>LBtr</span><span class=cF0>(&amp;task-&gt;display_flags,</span><span class=cF3>DISPLAYf_SHOW</span><span class=cF0>);
<a name="l178"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l179"></a> task=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l180"></a>
<a name="l181"></a> cnt=0;
<a name="l182"></a> table=h;
<a name="l183"></a> </span><span class=cF1>while</span><span class=cF0> (table) </span><span class=cF7>{</span><span class=cF0>
<a name="l184"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;=table-&gt;mask;i++) {
<a name="l185"></a> tmph=table-&gt;body[i];
<a name="l186"></a> </span><span class=cF1>while</span><span class=cF0> (tmph) </span><span class=cF7>{</span><span class=cF0>
<a name="l187"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>tmph-&gt;type &amp; (</span><span class=cF3>HTF_IMPORT</span><span class=cF0> | </span><span class=cF3>HTF_PRIVATE</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0> &amp;&amp;
<a name="l188"></a> </span><span class=cF7>(</span><span class=cF0>tmph-&gt;type &amp; </span><span class=cF3>HTF_PUBLIC</span><span class=cF0> || !publics</span><span class=cF7>)</span><span class=cF0>) {
<a name="l189"></a> </span><span class=cF1>if</span><span class=cF0> (!idx)
<a name="l190"></a> cnt++;
<a name="l191"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (tmph-&gt;type&amp;</span><span class=cF3>HTG_SRC_SYM</span><span class=cF0> &amp;&amp; </span><span class=cF7>(</span><span class=cF0>cur_idx=tmph-&gt;idx</span><span class=cF7>)</span><span class=cF0>)
<a name="l192"></a> cnt+=</span><span class=cF5>HelpIndexCnt</span><span class=cF0>(cur_idx,idx);
<a name="l193"></a> }
<a name="l194"></a> tmph=tmph-&gt;next;
<a name="l195"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l196"></a> }
<a name="l197"></a> </span><span class=cF1>if</span><span class=cF0> (recurse)
<a name="l198"></a> table=table-&gt;next;
<a name="l199"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l200"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l201"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l202"></a> </span><span class=cF1>if</span><span class=cF0> (!cnt) </span><span class=cF1>goto</span><span class=cF0> wh_done;
<a name="l203"></a>
<a name="l204"></a> lst=</span><span class=cF5>CAlloc</span><span class=cF0>(cnt*</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CWho</span><span class=cF7>)</span><span class=cF0>);
<a name="l205"></a> j=0;
<a name="l206"></a> table=h;
<a name="l207"></a> </span><span class=cF1>while</span><span class=cF0> (table) </span><span class=cF7>{</span><span class=cF0>
<a name="l208"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;=table-&gt;mask;i++) {
<a name="l209"></a> tmph=table-&gt;body[i];
<a name="l210"></a> </span><span class=cF1>while</span><span class=cF0> (tmph) </span><span class=cF7>{</span><span class=cF0>
<a name="l211"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>tmph-&gt;type &amp; (</span><span class=cF3>HTF_IMPORT</span><span class=cF0> | </span><span class=cF3>HTF_PRIVATE</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0> &amp;&amp;
<a name="l212"></a> </span><span class=cF7>(</span><span class=cF0>tmph-&gt;type &amp; </span><span class=cF3>HTF_PUBLIC</span><span class=cF0> || !publics</span><span class=cF7>)</span><span class=cF0>)
<a name="l213"></a> </span><span class=cF1>if</span><span class=cF0> (!idx)
<a name="l214"></a> lst[j++].h=tmph;
<a name="l215"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (tmph-&gt;type&amp;</span><span class=cF3>HTG_SRC_SYM</span><span class=cF0> &amp;&amp; </span><span class=cF7>(</span><span class=cF0>cur_idx=tmph-&gt;idx</span><span class=cF7>)</span><span class=cF0> &amp;&amp;
<a name="l216"></a> </span><span class=cF7>(</span><span class=cF0>k=</span><span class=cF5>HelpIndexCnt</span><span class=cF0>(cur_idx,idx)</span><span class=cF7>)</span><span class=cF0>)
<a name="l217"></a> </span><span class=cF1>while</span><span class=cF0> (k--) {
<a name="l218"></a> lst[j].idx=</span><span class=cF5>HelpIndexStr</span><span class=cF0>(&amp;cur_idx,idx);
<a name="l219"></a> lst[j++].h=tmph;
<a name="l220"></a> }
<a name="l221"></a> tmph=tmph-&gt;next;
<a name="l222"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l223"></a> }
<a name="l224"></a> </span><span class=cF1>if</span><span class=cF0> (recurse)
<a name="l225"></a> table=table-&gt;next;
<a name="l226"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l227"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l228"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l229"></a>
<a name="l230"></a> </span><span class=cF1>if</span><span class=cF0> (map)
<a name="l231"></a> </span><span class=cF5>QSort</span><span class=cF0>(lst,cnt,</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CWho</span><span class=cF7>)</span><span class=cF0>,&amp;</span><span class=cF5>HashEntriesCompare2</span><span class=cF0>);
<a name="l232"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (idx)
<a name="l233"></a> </span><span class=cF5>QSort</span><span class=cF0>(lst,cnt,</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CWho</span><span class=cF7>)</span><span class=cF0>,&amp;</span><span class=cF5>HashEntriesCompare3</span><span class=cF0>);
<a name="l234"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l235"></a> </span><span class=cF5>QSort</span><span class=cF0>(lst,cnt,</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CWho</span><span class=cF7>)</span><span class=cF0>,&amp;</span><span class=cF5>HashEntriesCompare</span><span class=cF0>);
<a name="l236"></a>
<a name="l237"></a> </span><span class=cF1>if</span><span class=cF0> (idx) </span><span class=cF7>{</span><span class=cF0>
<a name="l238"></a> </span><span class=cFB>progress1_max</span><span class=cF0>=cnt;
<a name="l239"></a> </span><span class=cFB>progress1</span><span class=cF0>=0;
<a name="l240"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l241"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;cnt;i++) </span><span class=cF7>{</span><span class=cF0>
<a name="l242"></a> comment=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l243"></a> ptr=lst[i].h;
<a name="l244"></a> </span><span class=cF1>if</span><span class=cF0> (idx)
<a name="l245"></a> </span><span class=cF1>if</span><span class=cF0> (cur_idx=lst[i].idx) {
<a name="l246"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>StrCmp</span><span class=cF7>(</span><span class=cF0>cur_idx,last_idx</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l247"></a> </span><span class=cF5>Free</span><span class=cF0>(last_idx);
<a name="l248"></a> last_idx=</span><span class=cF5>StrNew</span><span class=cF0>(cur_idx);
<a name="l249"></a> </span><span class=cF1>if</span><span class=cF0> (i)
<a name="l250"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;\n\n&quot;</span><span class=cF0>);
<a name="l251"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$WW,0$$PURPLE$$TX+CX,\&quot;%$Q\&quot;$$FG$\n&quot;</span><span class=cF0>,cur_idx);
<a name="l252"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l253"></a> }
<a name="l254"></a>
<a name="l255"></a> </span><span class=cF1>if</span><span class=cF0> (idx &amp;&amp; ptr-&gt;type &amp; </span><span class=cF3>HTT_HELP_FILE</span><span class=cF0>) {
<a name="l256"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$WW,1$&quot;</span><span class=cF0>);
<a name="l257"></a> </span><span class=cF5>DocType</span><span class=cF0>(doc,ptr-&gt;str);
<a name="l258"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$WW,0$&quot;</span><span class=cF0>);
<a name="l259"></a> } </span><span class=cF1>else</span><span class=cF0> {
<a name="l260"></a> </span><span class=cF1>if</span><span class=cF0> (ptr-&gt;type&amp;</span><span class=cF3>HTG_SRC_SYM</span><span class=cF0> &amp;&amp; ptr</span><span class=cF7>(</span><span class=cF9>CHashSrcSym</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>-&gt;src_link) </span><span class=cF7>{</span><span class=cF0>
<a name="l261"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$LK,\&quot;%-20s\&quot;,A=\&quot;%s\&quot;$&quot;</span><span class=cF0>,
<a name="l262"></a> ptr-&gt;str,ptr</span><span class=cF7>(</span><span class=cF9>CHashSrcSym</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>-&gt;src_link);
<a name="l263"></a> </span><span class=cF1>if</span><span class=cF0> (idx)
<a name="l264"></a> comment=</span><span class=cF5>HelpComment</span><span class=cF0>(task,ptr,ptr</span><span class=cF7>(</span><span class=cF9>CHashSrcSym</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>-&gt;src_link);
<a name="l265"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l266"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;%-20s&quot;</span><span class=cF0>,ptr-&gt;str);
<a name="l267"></a>
<a name="l268"></a> </span><span class=cF1>if</span><span class=cF0> (!idx) </span><span class=cF7>{</span><span class=cF0>
<a name="l269"></a> </span><span class=cF1>if</span><span class=cF0> (ptr-&gt;type &amp; </span><span class=cF3>HTT_DEFINE_STR</span><span class=cF0>) {
<a name="l270"></a> j=ptr(</span><span class=cF9>CHashDefineStr</span><span class=cF0> *)-&gt;cnt;
<a name="l271"></a> </span><span class=cF1>if</span><span class=cF0> (j==-1)
<a name="l272"></a> </span><span class=cF5>StrPrint</span><span class=cF0>(buf,</span><span class=cF6>&quot;%-10t$Q &quot;</span><span class=cF0>,ptr</span><span class=cF7>(</span><span class=cF9>CHashDefineStr</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>-&gt;data);
<a name="l273"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l274"></a> </span><span class=cF5>StrPrint</span><span class=cF0>(buf,</span><span class=cF6>&quot;%-10t$Q %02X&quot;</span><span class=cF0>,ptr</span><span class=cF7>(</span><span class=cF9>CHashDefineStr</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>-&gt;data,j);
<a name="l275"></a> } </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (ptr-&gt;type &amp; </span><span class=cF3>HTT_GLBL_VAR</span><span class=cF0>)
<a name="l276"></a> </span><span class=cF5>StrPrint</span><span class=cF0>(buf,</span><span class=cF6>&quot;%010X &quot;</span><span class=cF0>,ptr</span><span class=cF7>(</span><span class=cF9>CHashGlblVar</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>-&gt;data_addr);
<a name="l277"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l278"></a> </span><span class=cF5>StrPrint</span><span class=cF0>(buf,</span><span class=cF6>&quot;%010X &quot;</span><span class=cF0>,</span><span class=cF5>HashVal</span><span class=cF7>(</span><span class=cF0>ptr</span><span class=cF7>)</span><span class=cF0>);
<a name="l279"></a> j=</span><span class=cF5>HashEntrySize</span><span class=cF0>(ptr);
<a name="l280"></a> </span><span class=cF1>if</span><span class=cF0> (j==-1)
<a name="l281"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(buf,</span><span class=cF6>&quot; %04X &quot;</span><span class=cF0>,ptr-&gt;use_cnt);
<a name="l282"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l283"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(buf,</span><span class=cF6>&quot; %04X %010X &quot;</span><span class=cF0>,ptr-&gt;use_cnt,j);
<a name="l284"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l285"></a> *buf=0;
<a name="l286"></a>
<a name="l287"></a> k=ptr-&gt;type;
<a name="l288"></a> </span><span class=cF1>if</span><span class=cF0> (publics)
<a name="l289"></a> k&amp;=~</span><span class=cF3>HTF_PUBLIC</span><span class=cF0>;
<a name="l290"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>k&amp;</span><span class=cF3>HTG_TYPE_MASK</span><span class=cF7>)</span><span class=cF0>)
<a name="l291"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(buf,</span><span class=cF6>&quot;NULL &quot;</span><span class=cF0>);
<a name="l292"></a> </span><span class=cF1>while</span><span class=cF0> (k) </span><span class=cF7>{</span><span class=cF0>
<a name="l293"></a> j=</span><span class=cF5>Bsf</span><span class=cF0>(k);
<a name="l294"></a> </span><span class=cF1>if</span><span class=cF0> (j&lt;0)
<a name="l295"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l296"></a> </span><span class=cF5>Btr</span><span class=cF0>(&amp;k,j);
<a name="l297"></a> </span><span class=cF5>CatPrint</span><span class=cF0>(buf,</span><span class=cF6>&quot;%Z &quot;</span><span class=cF0>,j,</span><span class=cF6>&quot;ST_HTT_TYPES&quot;</span><span class=cF0>);
<a name="l298"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l299"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;%s&quot;</span><span class=cF0>,buf);
<a name="l300"></a> </span><span class=cF1>if</span><span class=cF0> (comment) </span><span class=cF7>{</span><span class=cF0>
<a name="l301"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$GREEN$%s$FG$&quot;</span><span class=cF0>,comment);
<a name="l302"></a> </span><span class=cF5>Free</span><span class=cF0>(comment);
<a name="l303"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l304"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;\n&quot;</span><span class=cF0>);
<a name="l305"></a> }
<a name="l306"></a> </span><span class=cF5>Free</span><span class=cF0>(lst[i].idx);
<a name="l307"></a> </span><span class=cF1>if</span><span class=cF0> (idx)
<a name="l308"></a> </span><span class=cFB>progress1</span><span class=cF0>++;
<a name="l309"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l310"></a> </span><span class=cF5>Free</span><span class=cF0>(lst);
<a name="l311"></a> </span><span class=cF1>if</span><span class=cF0> (idx)
<a name="l312"></a> </span><span class=cFB>progress1</span><span class=cF0>=</span><span class=cFB>progress1_max</span><span class=cF0>=0;
<a name="l313"></a>
<a name="l314"></a>wh_done:
<a name="l315"></a> </span><span class=cF1>if</span><span class=cF0> (doc) </span><span class=cF7>{</span><span class=cF0>
<a name="l316"></a> </span><span class=cF1>if</span><span class=cF0> (doc-&gt;head.next==doc)
<a name="l317"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;No Match&quot;</span><span class=cF0>);
<a name="l318"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l319"></a> </span><span class=cF5>DocRecalc</span><span class=cF0>(doc);
<a name="l320"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l321"></a> </span><span class=cF5>Free</span><span class=cF0>(last_idx);
<a name="l322"></a> </span><span class=cF5>Kill</span><span class=cF0>(task);
<a name="l323"></a>}
<a name="l324"></a>
<a name="l325"></a>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Info;Hash;Cmd Line (Typically)&quot;</span><span class=cF0>
<a name="l326"></a>
<a name="l327"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>HDR_NUM</span><span class=cF0> 16
<a name="l328"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>HashDepthRep</span><span class=cF0>(</span><span class=cF9>CHashTable</span><span class=cF0> *table=</span><span class=cF3>NULL</span><span class=cF0>)
<a name="l329"></a>{</span><span class=cF2>//Hash table linked-list chain depth report.</span><span class=cF0>
<a name="l330"></a></span><span class=cF2>//Histogram of collision count.</span><span class=cF0>
<a name="l331"></a> </span><span class=cF9>I64</span><span class=cF0> i,j,longest=0,cnt=0,a[</span><span class=cF3>HDR_NUM</span><span class=cF0>];
<a name="l332"></a> </span><span class=cF9>CHash</span><span class=cF0> *tmph;
<a name="l333"></a> </span><span class=cF1>if</span><span class=cF0> (!table) table=</span><span class=cF5>Fs</span><span class=cF0>-&gt;hash_table;
<a name="l334"></a> </span><span class=cF5>MemSet</span><span class=cF0>(a,0,</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF0>a</span><span class=cF7>)</span><span class=cF0>);
<a name="l335"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;=table-&gt;mask;i++) </span><span class=cF7>{</span><span class=cF0>
<a name="l336"></a> tmph=table-&gt;body[i];
<a name="l337"></a> </span><span class=cF1>if</span><span class=cF0> (tmph) {
<a name="l338"></a> j=</span><span class=cF5>LinkedLstCnt</span><span class=cF0>(tmph);
<a name="l339"></a> </span><span class=cF1>if</span><span class=cF0> (j&lt;</span><span class=cF3>HDR_NUM</span><span class=cF0>)
<a name="l340"></a> a[j]++;
<a name="l341"></a> cnt+=j;
<a name="l342"></a> </span><span class=cF1>if</span><span class=cF0> (j&gt;longest)
<a name="l343"></a> longest=j;
<a name="l344"></a> }
<a name="l345"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l346"></a> </span><span class=cF6>&quot;Histogram\n&quot;</span><span class=cF0>;
<a name="l347"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;</span><span class=cF3>HDR_NUM</span><span class=cF0>;i++)
<a name="l348"></a> </span><span class=cF1>if</span><span class=cF0> (a[i])
<a name="l349"></a> </span><span class=cF6>&quot;%02d:%d\n&quot;</span><span class=cF0>,i,a[i];
<a name="l350"></a> </span><span class=cF6>&quot;Size:%d Count:%d Longest:%d\n&quot;</span><span class=cF0>,
<a name="l351"></a> table-&gt;mask+1,cnt,longest;
<a name="l352"></a> </span><span class=cF1>return</span><span class=cF0> longest;
<a name="l353"></a>}
<a name="l354"></a>
<a name="l355"></a>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Help System&quot;</span><span class=cF0>
<a name="l356"></a>#</span><span class=cF1>help_file</span><span class=cF0> </span><span class=cF6>&quot;::/Doc/HelpSystem&quot;</span><span class=cF0>
<a name="l357"></a>
<a name="l358"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DocHelpIdx</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc,</span><span class=cF1>U8</span><span class=cF0> *idx)
<a name="l359"></a>{</span><span class=cF2>//Put to doc report for given help idx.</span><span class=cF0>
<a name="l360"></a> </span><span class=cF5>Who</span><span class=cF0>(</span><span class=cF6>&quot;+p&quot;</span><span class=cF0>,,idx,doc);
<a name="l361"></a>}
<a name="l362"></a>
<a name="l363"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>PopUpHelpIndex</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *idx,</span><span class=cF9>CTask</span><span class=cF0> *parent=</span><span class=cF3>NULL</span><span class=cF0>)
<a name="l364"></a>{</span><span class=cF2>//PopUp win report for given help idx.</span><span class=cF0>
<a name="l365"></a> </span><span class=cF1>U8</span><span class=cF0> *buf;
<a name="l366"></a> buf=</span><span class=cF5>MStrPrint</span><span class=cF0>(</span><span class=cF6>&quot;DocHelpIdx(DocPut,\&quot;%s\&quot;);View;&quot;</span><span class=cF0>,idx);
<a name="l367"></a> </span><span class=cF5>PopUp</span><span class=cF0>(buf,parent);
<a name="l368"></a> </span><span class=cF5>Free</span><span class=cF0>(buf);
<a name="l369"></a>}
<a name="l370"></a>
<a name="l371"></a>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Hash/System&quot;</span><span class=cF0>
<a name="l372"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>MapFileLoad</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *filename)
<a name="l373"></a>{</span><span class=cF2>//Load map file so we have src line info.</span><span class=cF0>
<a name="l374"></a> </span><span class=cF1>U8</span><span class=cF0> *st,*ptr,*name=</span><span class=cF5>ExtDft</span><span class=cF0>(filename,</span><span class=cF6>&quot;MAP.Z&quot;</span><span class=cF0>),
<a name="l375"></a> *absname=</span><span class=cF5>FileNameAbs</span><span class=cF0>(name);
<a name="l376"></a> </span><span class=cF9>CDoc</span><span class=cF0> *doc=</span><span class=cF5>DocRead</span><span class=cF0>(name);
<a name="l377"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_e;
<a name="l378"></a> </span><span class=cF9>CHashSrcSym</span><span class=cF0> *tmph;
<a name="l379"></a> </span><span class=cF9>I64</span><span class=cF0> i,j,base=0;
<a name="l380"></a> </span><span class=cF9>CDbgInfo</span><span class=cF0> *dbg_info;
<a name="l381"></a>
<a name="l382"></a> </span><span class=cF5>FileExtRem</span><span class=cF0>(absname);
<a name="l383"></a> </span><span class=cF1>if</span><span class=cF0> (absname[1]==</span><span class=cF6>':'</span><span class=cF0> &amp;&amp; </span><span class=cF5>StrLen</span><span class=cF7>(</span><span class=cF0>absname</span><span class=cF7>)</span><span class=cF0>&gt;2 &amp;&amp;
<a name="l384"></a> </span><span class=cF7>(</span><span class=cF0>tmph=</span><span class=cF5>HashSingleTableFind</span><span class=cF0>(absname+2,</span><span class=cF5>Fs</span><span class=cF0>-&gt;hash_table,</span><span class=cF3>HTT_MODULE</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0>)
<a name="l385"></a> base=tmph(</span><span class=cF9>CHashGeneric</span><span class=cF0> *)-&gt;user_data0+</span><span class=cF1>sizeof</span><span class=cF0>(</span><span class=cF9>CBinFile</span><span class=cF0>);
<a name="l386"></a>
<a name="l387"></a> </span><span class=cF1>if</span><span class=cF0> (!doc) </span><span class=cF1>return</span><span class=cF0>;
<a name="l388"></a> doc_e=doc-&gt;head.next;
<a name="l389"></a> </span><span class=cF1>while</span><span class=cF0> (doc_e!=doc) </span><span class=cF7>{</span><span class=cF0>
<a name="l390"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;type_u8==</span><span class=cF3>DOCT_LINK</span><span class=cF0>) {
<a name="l391"></a> </span><span class=cF1>if</span><span class=cF0> (*doc_e-&gt;tag)
<a name="l392"></a> st=</span><span class=cF5>MStrUtil</span><span class=cF0>(doc_e-&gt;tag,</span><span class=cF3>SUF_REM_TRAILING</span><span class=cF0>);
<a name="l393"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l394"></a> st=</span><span class=cF5>MStrUtil</span><span class=cF0>(doc_e-&gt;aux_str,</span><span class=cF3>SUF_REM_TRAILING</span><span class=cF0>);
<a name="l395"></a> </span><span class=cF1>if</span><span class=cF0> (tmph=</span><span class=cF5>HashSingleTableFind</span><span class=cF7>(</span><span class=cF0>st,</span><span class=cF5>Fs</span><span class=cF0>-&gt;hash_table,</span><span class=cF3>HTG_SRC_SYM</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l396"></a> </span><span class=cF1>if</span><span class=cF0> (*doc_e-&gt;tag) {
<a name="l397"></a> </span><span class=cF5>Free</span><span class=cF0>(tmph-&gt;src_link);
<a name="l398"></a> tmph-&gt;src_link=doc_e-&gt;aux_str;
<a name="l399"></a> ptr=tmph-&gt;src_link;
<a name="l400"></a> </span><span class=cF1>if</span><span class=cF0> (ptr[0] &amp;&amp; ptr[1] &amp;&amp; ptr[2]==</span><span class=cF6>':'</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l401"></a> </span><span class=cF1>if</span><span class=cF0> (ptr[3]==</span><span class=cF6>':'</span><span class=cF0>)
<a name="l402"></a> ptr[3]=</span><span class=cFB>blkdev</span><span class=cF0>.boot_drv_let;
<a name="l403"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (ptr[3]==</span><span class=cF6>'~'</span><span class=cF0>)
<a name="l404"></a> ptr[3]=*</span><span class=cFB>blkdev</span><span class=cF0>.home_dir;
<a name="l405"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l406"></a> doc_e-&gt;aux_str=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l407"></a> }
<a name="l408"></a> </span><span class=cF1>if</span><span class=cF0> (tmph-&gt;type&amp;</span><span class=cF7>(</span><span class=cF3>HTT_FUN</span><span class=cF0>|</span><span class=cF3>HTT_EXPORT_SYS_SYM</span><span class=cF7>)</span><span class=cF0> &amp;&amp;
<a name="l409"></a> !</span><span class=cF7>(</span><span class=cF0>dbg_info=tmph-&gt;dbg_info</span><span class=cF7>)</span><span class=cF0> &amp;&amp; doc_e-&gt;bin_data &amp;&amp;
<a name="l410"></a> </span><span class=cF7>(</span><span class=cF0>dbg_info=doc_e-&gt;bin_data-&gt;data</span><span class=cF7>)</span><span class=cF0>) {
<a name="l411"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;bin_data-&gt;size&gt;</span><span class=cF5>MSize</span><span class=cF7>(</span><span class=cF0>dbg_info</span><span class=cF7>)</span><span class=cF0>)
<a name="l412"></a> </span><span class=cF6>&quot;Corrupt Map Entry\n&quot;</span><span class=cF0>;
<a name="l413"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l414"></a> doc_e-&gt;bin_data-&gt;data=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l415"></a> tmph-&gt;dbg_info=dbg_info;
<a name="l416"></a> </span><span class=cF1>for</span><span class=cF0> (i=dbg_info-&gt;min_line;i&lt;=dbg_info-&gt;max_line+1;i++) {
<a name="l417"></a> j=i-dbg_info-&gt;min_line;
<a name="l418"></a> </span><span class=cF1>if</span><span class=cF0> (dbg_info-&gt;body[j])
<a name="l419"></a> dbg_info-&gt;body[j]=dbg_info-&gt;body[j]+base;
<a name="l420"></a> }
<a name="l421"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l422"></a> }
<a name="l423"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l424"></a> </span><span class=cF5>Free</span><span class=cF0>(st);
<a name="l425"></a> }
<a name="l426"></a> doc_e=doc_e-&gt;next;
<a name="l427"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l428"></a> </span><span class=cF5>DocDel</span><span class=cF0>(doc);
<a name="l429"></a> </span><span class=cF5>Free</span><span class=cF0>(name);
<a name="l430"></a> </span><span class=cF5>Free</span><span class=cF0>(absname);
<a name="l431"></a>}
</span></pre></body>
</html>

166
public/Wb/Adam/AMath.HC.HTML Executable file
View File

@ -0,0 +1,166 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF0>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Math&quot;</span><span class=cF0>
<a name="l2"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>R2P</span><span class=cF0>(</span><span class=cF1>F64</span><span class=cF0> *_mag=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF1>F64</span><span class=cF0> *_arg=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF1>F64</span><span class=cF0> x,</span><span class=cF1>F64</span><span class=cF0> y)
<a name="l3"></a>{</span><span class=cF2>//Rect to polar</span><span class=cF0>
<a name="l4"></a></span><span class=cF2>//Returns angle in range (-pi,pi]</span><span class=cF0>
<a name="l5"></a> </span><span class=cF1>if</span><span class=cF0> (_arg)
<a name="l6"></a> *_arg=</span><span class=cF5>Arg</span><span class=cF0>(x,y);
<a name="l7"></a> </span><span class=cF1>if</span><span class=cF0> (_mag)
<a name="l8"></a> *_mag=</span><span class=cF5>Sqrt</span><span class=cF0>(x*x+y*y);
<a name="l9"></a>}
<a name="l10"></a>
<a name="l11"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>P2R</span><span class=cF0>(</span><span class=cF1>F64</span><span class=cF0> *_x=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF1>F64</span><span class=cF0> *_y=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF1>F64</span><span class=cF0> mag,</span><span class=cF1>F64</span><span class=cF0> arg)
<a name="l12"></a>{</span><span class=cF2>//Polar to Rect</span><span class=cF0>
<a name="l13"></a> </span><span class=cF1>if</span><span class=cF0> (_x)
<a name="l14"></a> *_x=mag*</span><span class=cF5>Cos</span><span class=cF0>(arg);
<a name="l15"></a> </span><span class=cF1>if</span><span class=cF0> (_y)
<a name="l16"></a> *_y=mag*</span><span class=cF5>Sin</span><span class=cF0>(arg);
<a name="l17"></a>}
<a name="l18"></a>
<a name="l19"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>F64</span><span class=cF0> </span><span class=cF5>Wrap</span><span class=cF0>(</span><span class=cF1>F64</span><span class=cF0> theta,</span><span class=cF1>F64</span><span class=cF0> base=-</span><span class=cF3>pi</span><span class=cF0>)
<a name="l20"></a>{</span><span class=cF2>//Returns angle in range [base,base+2*pi)</span><span class=cF0>
<a name="l21"></a> </span><span class=cF1>F64</span><span class=cF0> res=theta%(2*</span><span class=cF3>pi</span><span class=cF0>);
<a name="l22"></a> </span><span class=cF1>if</span><span class=cF0> (res&gt;=base+2*</span><span class=cF3>pi</span><span class=cF0>)
<a name="l23"></a> res-=2*</span><span class=cF3>pi</span><span class=cF0>;
<a name="l24"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (res&lt;base)
<a name="l25"></a> res+=2*</span><span class=cF3>pi</span><span class=cF0>;
<a name="l26"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l27"></a>}
<a name="l28"></a>
<a name="l29"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>DistSqrI64</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> x1,</span><span class=cF9>I64</span><span class=cF0> y1,</span><span class=cF9>I64</span><span class=cF0> x2,</span><span class=cF9>I64</span><span class=cF0> y2)
<a name="l30"></a>{</span><span class=cF2>//Distance-squared between 2 points.</span><span class=cF0>
<a name="l31"></a> </span><span class=cF9>I64</span><span class=cF0> dx=x1-x2,dy=y1-y2;
<a name="l32"></a> </span><span class=cF1>return</span><span class=cF0> dx*dx+dy*dy;
<a name="l33"></a>}
<a name="l34"></a>
<a name="l35"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>F64</span><span class=cF0> </span><span class=cF5>ASin</span><span class=cF0>(</span><span class=cF1>F64</span><span class=cF0> s)
<a name="l36"></a>{</span><span class=cF2>//Arc Sin (Inverse Sin).</span><span class=cF0>
<a name="l37"></a> </span><span class=cF1>F64</span><span class=cF0> c;
<a name="l38"></a> c=s*s;
<a name="l39"></a> </span><span class=cF1>if</span><span class=cF0> (c&gt;=1.0)
<a name="l40"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>pi</span><span class=cF0>/2.0;
<a name="l41"></a> c=</span><span class=cF5>Sqrt</span><span class=cF0>(1.0-c);
<a name="l42"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF5>ATan</span><span class=cF0>(s/c);
<a name="l43"></a>}
<a name="l44"></a>
<a name="l45"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>F64</span><span class=cF0> </span><span class=cF5>ACos</span><span class=cF0>(</span><span class=cF1>F64</span><span class=cF0> c)
<a name="l46"></a>{</span><span class=cF2>//Arc Cos (Inverse Cos).</span><span class=cF0>
<a name="l47"></a> </span><span class=cF1>F64</span><span class=cF0> s;
<a name="l48"></a> </span><span class=cF1>if</span><span class=cF0> (!c)
<a name="l49"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>pi</span><span class=cF0>/2.0;
<a name="l50"></a> s=c*c;
<a name="l51"></a> </span><span class=cF1>if</span><span class=cF0> (s&gt;=1.0)
<a name="l52"></a> </span><span class=cF1>return</span><span class=cF0> 0.0;
<a name="l53"></a> s=</span><span class=cF5>Sqrt</span><span class=cF0>(1.0-s);
<a name="l54"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF5>ATan</span><span class=cF0>(s/c);
<a name="l55"></a>}
<a name="l56"></a>
<a name="l57"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>F64</span><span class=cF0> </span><span class=cF5>Sinh</span><span class=cF0>(</span><span class=cF1>F64</span><span class=cF0> x)
<a name="l58"></a>{</span><span class=cF2>//Hyperbolic Sine.</span><span class=cF0>
<a name="l59"></a> </span><span class=cF1>return</span><span class=cF0> 0.5*(</span><span class=cF5>Exp</span><span class=cF7>(</span><span class=cF0>x</span><span class=cF7>)</span><span class=cF0>-</span><span class=cF5>Exp</span><span class=cF7>(</span><span class=cF0>-x</span><span class=cF7>)</span><span class=cF0>);
<a name="l60"></a>}
<a name="l61"></a>
<a name="l62"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>F64</span><span class=cF0> </span><span class=cF5>Cosh</span><span class=cF0>(</span><span class=cF1>F64</span><span class=cF0> x)
<a name="l63"></a>{</span><span class=cF2>//Hyperbolic Cosine.</span><span class=cF0>
<a name="l64"></a> </span><span class=cF1>return</span><span class=cF0> 0.5*(</span><span class=cF5>Exp</span><span class=cF7>(</span><span class=cF0>x</span><span class=cF7>)</span><span class=cF0>+</span><span class=cF5>Exp</span><span class=cF7>(</span><span class=cF0>-x</span><span class=cF7>)</span><span class=cF0>);
<a name="l65"></a>}
<a name="l66"></a>
<a name="l67"></a>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Math/Complex;Data Types/Complex&quot;</span><span class=cF0>
<a name="l68"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>Complex</span><span class=cF0> *</span><span class=cF5>CAdd</span><span class=cF0>(</span><span class=cF9>Complex</span><span class=cF0> *sum,</span><span class=cF9>Complex</span><span class=cF0> *n1,</span><span class=cF9>Complex</span><span class=cF0> *n2)
<a name="l69"></a>{</span><span class=cF2>//sum=n1+n2</span><span class=cF0>
<a name="l70"></a> sum-&gt;x=n1-&gt;x+n2-&gt;x;
<a name="l71"></a> sum-&gt;y=n1-&gt;y+n2-&gt;y;
<a name="l72"></a> </span><span class=cF1>return</span><span class=cF0> sum;
<a name="l73"></a>}
<a name="l74"></a>
<a name="l75"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>Complex</span><span class=cF0> *</span><span class=cF5>CSub</span><span class=cF0>(</span><span class=cF9>Complex</span><span class=cF0> *diff,</span><span class=cF9>Complex</span><span class=cF0> *n1,</span><span class=cF9>Complex</span><span class=cF0> *n2)
<a name="l76"></a>{</span><span class=cF2>//diff=n1-n2</span><span class=cF0>
<a name="l77"></a> diff-&gt;x=n1-&gt;x-n2-&gt;x;
<a name="l78"></a> diff-&gt;y=n1-&gt;y-n2-&gt;y;
<a name="l79"></a> </span><span class=cF1>return</span><span class=cF0> diff;
<a name="l80"></a>}
<a name="l81"></a>
<a name="l82"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>Complex</span><span class=cF0> *</span><span class=cF5>CMul</span><span class=cF0>(</span><span class=cF9>Complex</span><span class=cF0> *prod,</span><span class=cF9>Complex</span><span class=cF0> *n1,</span><span class=cF9>Complex</span><span class=cF0> *n2)
<a name="l83"></a>{</span><span class=cF2>//prod=n1*n2</span><span class=cF0>
<a name="l84"></a> prod-&gt;x=n1-&gt;x*n2-&gt;x-n1-&gt;y*n2-&gt;y;
<a name="l85"></a> prod-&gt;y=n1-&gt;x*n2-&gt;y+n1-&gt;y*n2-&gt;x;
<a name="l86"></a> </span><span class=cF1>return</span><span class=cF0> prod;
<a name="l87"></a>}
<a name="l88"></a>
<a name="l89"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>Complex</span><span class=cF0> *</span><span class=cF5>CDiv</span><span class=cF0>(</span><span class=cF9>Complex</span><span class=cF0> *quot,</span><span class=cF9>Complex</span><span class=cF0> *n1,</span><span class=cF9>Complex</span><span class=cF0> *n2)
<a name="l90"></a>{</span><span class=cF2>//quot=n1/n2</span><span class=cF0>
<a name="l91"></a> </span><span class=cF1>F64</span><span class=cF0> m1,arg1,m2,arg2;
<a name="l92"></a> </span><span class=cF5>R2P</span><span class=cF0>(&amp;m1,&amp;arg1,n1-&gt;x,n1-&gt;y);
<a name="l93"></a> </span><span class=cF5>R2P</span><span class=cF0>(&amp;m2,&amp;arg2,n2-&gt;x,n2-&gt;y);
<a name="l94"></a> m1/=m2;
<a name="l95"></a> arg1-=arg2;
<a name="l96"></a> quot-&gt;x=m1*</span><span class=cF5>Cos</span><span class=cF0>(arg1);
<a name="l97"></a> quot-&gt;y=m1*</span><span class=cF5>Sin</span><span class=cF0>(arg1);
<a name="l98"></a> </span><span class=cF1>return</span><span class=cF0> quot;
<a name="l99"></a>}
<a name="l100"></a>
<a name="l101"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>Complex</span><span class=cF0> *</span><span class=cF5>CScale</span><span class=cF0>(</span><span class=cF9>Complex</span><span class=cF0> *dst,</span><span class=cF1>F64</span><span class=cF0> s)
<a name="l102"></a>{</span><span class=cF2>//dst*=s</span><span class=cF0>
<a name="l103"></a> dst-&gt;x*=s;
<a name="l104"></a> dst-&gt;y*=s;
<a name="l105"></a> </span><span class=cF1>return</span><span class=cF0> dst;
<a name="l106"></a>}
<a name="l107"></a>
<a name="l108"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>Complex</span><span class=cF0> *</span><span class=cF5>CCopy</span><span class=cF0>(</span><span class=cF9>Complex</span><span class=cF0> *dst,</span><span class=cF9>Complex</span><span class=cF0> *src)
<a name="l109"></a>{</span><span class=cF2>//dst=src</span><span class=cF0>
<a name="l110"></a> dst-&gt;x=src-&gt;x;
<a name="l111"></a> dst-&gt;y=src-&gt;y;
<a name="l112"></a> </span><span class=cF1>return</span><span class=cF0> dst;
<a name="l113"></a>}
<a name="l114"></a>
<a name="l115"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>Complex</span><span class=cF0> *</span><span class=cF5>CEqu</span><span class=cF0>(</span><span class=cF9>Complex</span><span class=cF0> *dst,</span><span class=cF1>F64</span><span class=cF0> x,</span><span class=cF1>F64</span><span class=cF0> y)
<a name="l116"></a>{</span><span class=cF2>//dst=(x,y)</span><span class=cF0>
<a name="l117"></a> dst-&gt;x=x;
<a name="l118"></a> dst-&gt;y=y;
<a name="l119"></a> </span><span class=cF1>return</span><span class=cF0> dst;
<a name="l120"></a>}
<a name="l121"></a>
<a name="l122"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>Complex</span><span class=cF0> *</span><span class=cF5>CPoly</span><span class=cF0>(</span><span class=cF9>Complex</span><span class=cF0> *dst,</span><span class=cF9>I64</span><span class=cF0> n,</span><span class=cF9>Complex</span><span class=cF0> *zeros,</span><span class=cF9>Complex</span><span class=cF0> *x)
<a name="l123"></a>{</span><span class=cF2>//Eval complex polynomial</span><span class=cF0>
<a name="l124"></a> </span><span class=cF9>I64</span><span class=cF0> i;
<a name="l125"></a> </span><span class=cF9>Complex</span><span class=cF0> n1,n2;
<a name="l126"></a> </span><span class=cF1>if</span><span class=cF0> (n&gt;0) </span><span class=cF7>{</span><span class=cF0>
<a name="l127"></a> </span><span class=cF5>CSub</span><span class=cF0>(dst,x,&amp;zeros[0]);
<a name="l128"></a> </span><span class=cF1>for</span><span class=cF0> (i=1;i&lt;n;i++) {
<a name="l129"></a> </span><span class=cF5>CCopy</span><span class=cF0>(&amp;n1,dst);
<a name="l130"></a> </span><span class=cF5>CMul</span><span class=cF0>(dst,&amp;n1,</span><span class=cF5>CSub</span><span class=cF7>(</span><span class=cF0>&amp;n2,x,&amp;zeros[i]</span><span class=cF7>)</span><span class=cF0>);
<a name="l131"></a> }
<a name="l132"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l133"></a> </span><span class=cF5>CEqu</span><span class=cF0>(dst,1.0,0.0);
<a name="l134"></a> </span><span class=cF1>return</span><span class=cF0> dst;
<a name="l135"></a>}
</span></pre></body>
</html>

719
public/Wb/Adam/AMathODE.HC.HTML Executable file
View File

@ -0,0 +1,719 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF0>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Math/ODE&quot;</span><span class=cF0>
<a name="l2"></a>#</span><span class=cF1>help_file</span><span class=cF0> </span><span class=cF6>&quot;::/Doc/ODE&quot;</span><span class=cF0>
<a name="l3"></a>
<a name="l4"></a></span><span class=cF2>//See </span><a href="/Wb/Doc/Credits.DD.HTML#l1"><span class=cF4>::/Doc/Credits.DD</span></a><span class=cF2>.</span><span class=cF0>
<a name="l5"></a>
<a name="l6"></a></span><span class=cF1>F64</span><span class=cF0> </span><span class=cF5>LowPass1</span><span class=cF0>(</span><span class=cF1>F64</span><span class=cF0> a,</span><span class=cF1>F64</span><span class=cF0> y0,</span><span class=cF1>F64</span><span class=cF0> y,</span><span class=cF1>F64</span><span class=cF0> dt=1.0)
<a name="l7"></a>{</span><span class=cF2>//First order low pass filter</span><span class=cF0>
<a name="l8"></a> dt=</span><span class=cF5>Exp</span><span class=cF0>(-a*dt);
<a name="l9"></a> </span><span class=cF1>return</span><span class=cF0> y0*dt+y*(1.0-dt);
<a name="l10"></a>}
<a name="l11"></a>
<a name="l12"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ODERstPtrs</span><span class=cF0>(</span><span class=cF9>CMathODE</span><span class=cF0> *ode)
<a name="l13"></a>{
<a name="l14"></a> </span><span class=cF9>I64</span><span class=cF0> s=ode-&gt;n_internal*</span><span class=cF1>sizeof</span><span class=cF0>(</span><span class=cF1>F64</span><span class=cF0>);
<a name="l15"></a> </span><span class=cF1>F64</span><span class=cF0> *ptr=ode-&gt;array_base;
<a name="l16"></a> ode-&gt;state_internal=ptr; ptr(</span><span class=cF9>I64</span><span class=cF0>)+=s;
<a name="l17"></a> ode-&gt;state_scale=ptr; ptr(</span><span class=cF9>I64</span><span class=cF0>)+=s;
<a name="l18"></a> ode-&gt;DstateDt=ptr; ptr(</span><span class=cF9>I64</span><span class=cF0>)+=s;
<a name="l19"></a> ode-&gt;initial_state=ptr; ptr(</span><span class=cF9>I64</span><span class=cF0>)+=s;
<a name="l20"></a> ode-&gt;tmp0=ptr; ptr(</span><span class=cF9>I64</span><span class=cF0>)+=s;
<a name="l21"></a> ode-&gt;tmp1=ptr; ptr(</span><span class=cF9>I64</span><span class=cF0>)+=s;
<a name="l22"></a> ode-&gt;tmp2=ptr; ptr(</span><span class=cF9>I64</span><span class=cF0>)+=s;
<a name="l23"></a> ode-&gt;tmp3=ptr; ptr(</span><span class=cF9>I64</span><span class=cF0>)+=s;
<a name="l24"></a> ode-&gt;tmp4=ptr; ptr(</span><span class=cF9>I64</span><span class=cF0>)+=s;
<a name="l25"></a> ode-&gt;tmp5=ptr; ptr(</span><span class=cF9>I64</span><span class=cF0>)+=s;
<a name="l26"></a> ode-&gt;tmp6=ptr; ptr(</span><span class=cF9>I64</span><span class=cF0>)+=s;
<a name="l27"></a> ode-&gt;tmp7=ptr;
<a name="l28"></a>}
<a name="l29"></a>
<a name="l30"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>CMathODE</span><span class=cF0> *</span><span class=cF5>ODENew</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> n,</span><span class=cF1>F64</span><span class=cF0> max_tolerance=1e-6,</span><span class=cF9>I64</span><span class=cF0> flags=0)
<a name="l31"></a>{</span><span class=cF2>//Make differential equation ctrl struct. See </span><a href="/Wb/Kernel/KernelA.HH.HTML#l241"><span class=cF4>flags</span></a><span class=cF2>.</span><span class=cF0>
<a name="l32"></a> </span><span class=cF2>//The tolerance is not precise.</span><span class=cF0>
<a name="l33"></a> </span><span class=cF2>//You can min_tolerance and it will</span><span class=cF0>
<a name="l34"></a> </span><span class=cF2>//dynamically adjust tolerance to utilize</span><span class=cF0>
<a name="l35"></a> </span><span class=cF2>//the CPU.</span><span class=cF0>
<a name="l36"></a> </span><span class=cF9>I64</span><span class=cF0> s=n*</span><span class=cF1>sizeof</span><span class=cF0>(</span><span class=cF1>F64</span><span class=cF0>);
<a name="l37"></a> </span><span class=cF9>CMathODE</span><span class=cF0> *ode=</span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CMathODE</span><span class=cF7>)</span><span class=cF0>);
<a name="l38"></a> ode-&gt;t_scale=1.0;
<a name="l39"></a> ode-&gt;flags=flags;
<a name="l40"></a> ode-&gt;n_internal=ode-&gt;n=n;
<a name="l41"></a> ode-&gt;h=1e-6;
<a name="l42"></a> ode-&gt;h_min=1e-64;
<a name="l43"></a> ode-&gt;h_max=1e32;
<a name="l44"></a> ode-&gt;max_tolerance=ode-&gt;min_tolerance=ode-&gt;tolerance_internal=max_tolerance;
<a name="l45"></a> ode-&gt;win_task=ode-&gt;mem_task=</span><span class=cF5>Fs</span><span class=cF0>;
<a name="l46"></a> </span><span class=cF5>QueInit</span><span class=cF0>(&amp;ode-&gt;next_mass);
<a name="l47"></a> </span><span class=cF5>QueInit</span><span class=cF0>(&amp;ode-&gt;next_spring);
<a name="l48"></a> ode-&gt;state=</span><span class=cF5>CAlloc</span><span class=cF0>(s);
<a name="l49"></a> ode-&gt;array_base=</span><span class=cF5>MAlloc</span><span class=cF0>(12*s);
<a name="l50"></a> </span><span class=cF5>ODERstPtrs</span><span class=cF0>(ode);
<a name="l51"></a> </span><span class=cF1>return</span><span class=cF0> ode;
<a name="l52"></a>}
<a name="l53"></a>
<a name="l54"></a>
<a name="l55"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>ODEPause</span><span class=cF0>(</span><span class=cF9>CMathODE</span><span class=cF0> *ode,</span><span class=cF1>Bool</span><span class=cF0> val=</span><span class=cF3>ON</span><span class=cF0>)
<a name="l56"></a>{</span><span class=cF2>//Pause ODE.</span><span class=cF0>
<a name="l57"></a> </span><span class=cF1>Bool</span><span class=cF0> res;
<a name="l58"></a> </span><span class=cF1>if</span><span class=cF0> (!ode) </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>OFF</span><span class=cF0>;
<a name="l59"></a> res=</span><span class=cF5>LBEqu</span><span class=cF0>(&amp;ode-&gt;flags,</span><span class=cF3>ODEf_PAUSED</span><span class=cF0>,val);
<a name="l60"></a> </span><span class=cF1>if</span><span class=cF0> (val)
<a name="l61"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&amp;ode-&gt;flags,</span><span class=cF3>ODEf_BUSY</span><span class=cF7>)</span><span class=cF0>)
<a name="l62"></a> </span><span class=cF5>Yield</span><span class=cF0>;
<a name="l63"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l64"></a>}
<a name="l65"></a>
<a name="l66"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ODEDel</span><span class=cF0>(</span><span class=cF9>CMathODE</span><span class=cF0> *ode)
<a name="l67"></a>{</span><span class=cF2>//Free ODE node, but not masses or springs.</span><span class=cF0>
<a name="l68"></a> </span><span class=cF9>I64</span><span class=cF0> i;
<a name="l69"></a> </span><span class=cF1>if</span><span class=cF0> (!ode) </span><span class=cF1>return</span><span class=cF0>;
<a name="l70"></a> </span><span class=cF5>ODEPause</span><span class=cF0>(ode);
<a name="l71"></a> </span><span class=cF5>Free</span><span class=cF0>(ode-&gt;state);
<a name="l72"></a> </span><span class=cF5>Free</span><span class=cF0>(ode-&gt;array_base);
<a name="l73"></a> </span><span class=cF1>if</span><span class=cF0> (ode-&gt;slave_tasks) </span><span class=cF7>{</span><span class=cF0>
<a name="l74"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;</span><span class=cFB>mp_cnt</span><span class=cF0>;i++)
<a name="l75"></a> </span><span class=cF5>Kill</span><span class=cF0>(ode-&gt;slave_tasks[i]);
<a name="l76"></a> </span><span class=cF5>Free</span><span class=cF0>(ode-&gt;slave_tasks);
<a name="l77"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l78"></a> </span><span class=cF5>Free</span><span class=cF0>(ode);
<a name="l79"></a>}
<a name="l80"></a>
<a name="l81"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>ODESize</span><span class=cF0>(</span><span class=cF9>CMathODE</span><span class=cF0> *ode)
<a name="l82"></a>{</span><span class=cF2>//Mem size of ode ctrl, but not masses and springs.</span><span class=cF0>
<a name="l83"></a> </span><span class=cF1>if</span><span class=cF0> (!ode)
<a name="l84"></a> </span><span class=cF1>return</span><span class=cF0> 0;
<a name="l85"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l86"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF5>MSize2</span><span class=cF0>(ode-&gt;state)+</span><span class=cF5>MSize2</span><span class=cF0>(ode-&gt;array_base)+</span><span class=cF5>MSize2</span><span class=cF0>(ode);
<a name="l87"></a>}
<a name="l88"></a>
<a name="l89"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ODESetMassesPtrs</span><span class=cF0>(</span><span class=cF9>CMathODE</span><span class=cF0> *ode,</span><span class=cF1>F64</span><span class=cF0> *state,</span><span class=cF1>F64</span><span class=cF0> *DstateDt)
<a name="l90"></a>{
<a name="l91"></a> </span><span class=cF9>COrder2D3</span><span class=cF0> *ptr1=state(</span><span class=cF1>F64</span><span class=cF0> *)+ode-&gt;n,
<a name="l92"></a> *ptr2=DstateDt(</span><span class=cF1>F64</span><span class=cF0> *)+ode-&gt;n;
<a name="l93"></a> </span><span class=cF9>CMass</span><span class=cF0> *tmpm=ode-&gt;next_mass;
<a name="l94"></a> </span><span class=cF1>while</span><span class=cF0> (tmpm!=&amp;ode-&gt;next_mass) </span><span class=cF7>{</span><span class=cF0>
<a name="l95"></a> tmpm-&gt;state=ptr1++;
<a name="l96"></a> tmpm-&gt;DstateDt=ptr2++;
<a name="l97"></a> tmpm=tmpm-&gt;next;
<a name="l98"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l99"></a>}
<a name="l100"></a>
<a name="l101"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ODEState2Internal</span><span class=cF0>(</span><span class=cF9>CMathODE</span><span class=cF0> *ode)
<a name="l102"></a>{
<a name="l103"></a> </span><span class=cF9>CMass</span><span class=cF0> *tmpm;
<a name="l104"></a> </span><span class=cF1>F64</span><span class=cF0> *old_array_base;
<a name="l105"></a> </span><span class=cF9>I64</span><span class=cF0> mass_cnt;
<a name="l106"></a>
<a name="l107"></a> </span><span class=cF1>if</span><span class=cF0> (ode-&gt;flags&amp;</span><span class=cF3>ODEF_HAS_MASSES</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l108"></a> mass_cnt=0;
<a name="l109"></a> tmpm=ode-&gt;next_mass;
<a name="l110"></a> </span><span class=cF1>while</span><span class=cF0> (tmpm!=&amp;ode-&gt;next_mass) {
<a name="l111"></a> mass_cnt++;
<a name="l112"></a> tmpm=tmpm-&gt;next;
<a name="l113"></a> }
<a name="l114"></a> old_array_base=ode-&gt;array_base;
<a name="l115"></a> ode-&gt;n_internal=ode-&gt;n+6*mass_cnt;
<a name="l116"></a> ode-&gt;array_base=</span><span class=cF5>MAlloc</span><span class=cF0>(12*ode-&gt;n_internal*</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF1>F64</span><span class=cF7>)</span><span class=cF0>,ode-&gt;mem_task);
<a name="l117"></a> </span><span class=cF5>Free</span><span class=cF0>(old_array_base);
<a name="l118"></a> </span><span class=cF5>ODERstPtrs</span><span class=cF0>(ode);
<a name="l119"></a>
<a name="l120"></a> </span><span class=cF5>ODESetMassesPtrs</span><span class=cF0>(ode,ode-&gt;state_internal,ode-&gt;state_internal);
<a name="l121"></a> tmpm=ode-&gt;next_mass;
<a name="l122"></a> </span><span class=cF1>while</span><span class=cF0> (tmpm!=&amp;ode-&gt;next_mass) {
<a name="l123"></a> </span><span class=cF5>MemCpy</span><span class=cF0>(tmpm-&gt;state,&amp;tmpm-&gt;saved_state,</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>COrder2D3</span><span class=cF7>)</span><span class=cF0>);
<a name="l124"></a> tmpm=tmpm-&gt;next;
<a name="l125"></a> }
<a name="l126"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l127"></a> </span><span class=cF5>MemCpy</span><span class=cF0>(ode-&gt;state_internal,ode-&gt;state,ode-&gt;n*</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF1>F64</span><span class=cF7>)</span><span class=cF0>);
<a name="l128"></a>}
<a name="l129"></a>
<a name="l130"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ODEInternal2State</span><span class=cF0>(</span><span class=cF9>CMathODE</span><span class=cF0> *ode)
<a name="l131"></a>{
<a name="l132"></a> </span><span class=cF9>CMass</span><span class=cF0> *tmpm;
<a name="l133"></a> </span><span class=cF5>MemCpy</span><span class=cF0>(ode-&gt;state,ode-&gt;state_internal,ode-&gt;n*</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF1>F64</span><span class=cF7>)</span><span class=cF0>);
<a name="l134"></a> </span><span class=cF1>if</span><span class=cF0> (ode-&gt;flags&amp;</span><span class=cF3>ODEF_HAS_MASSES</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l135"></a> </span><span class=cF5>ODESetMassesPtrs</span><span class=cF0>(ode,ode-&gt;state_internal,ode-&gt;state_internal);
<a name="l136"></a> tmpm=ode-&gt;next_mass;
<a name="l137"></a> </span><span class=cF1>while</span><span class=cF0> (tmpm!=&amp;ode-&gt;next_mass) {
<a name="l138"></a> </span><span class=cF5>MemCpy</span><span class=cF0>(&amp;tmpm-&gt;saved_state,tmpm-&gt;state,</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>COrder2D3</span><span class=cF7>)</span><span class=cF0>);
<a name="l139"></a> tmpm=tmpm-&gt;next;
<a name="l140"></a> }
<a name="l141"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l142"></a>}
<a name="l143"></a>
<a name="l144"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ODERenum</span><span class=cF0>(</span><span class=cF9>CMathODE</span><span class=cF0> *ode)
<a name="l145"></a>{</span><span class=cF2>//Renumber masses and springs.</span><span class=cF0>
<a name="l146"></a> </span><span class=cF9>I64</span><span class=cF0> i;
<a name="l147"></a> </span><span class=cF9>CSpring</span><span class=cF0> *tmps;
<a name="l148"></a> </span><span class=cF9>CMass</span><span class=cF0> *tmpm;
<a name="l149"></a>
<a name="l150"></a> i=0;
<a name="l151"></a> tmpm=ode-&gt;next_mass;
<a name="l152"></a> </span><span class=cF1>while</span><span class=cF0> (tmpm!=&amp;ode-&gt;next_mass) </span><span class=cF7>{</span><span class=cF0>
<a name="l153"></a> tmpm-&gt;num=i++;
<a name="l154"></a> tmpm=tmpm-&gt;next;
<a name="l155"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l156"></a>
<a name="l157"></a> i=0;
<a name="l158"></a> tmps=ode-&gt;next_spring;
<a name="l159"></a> </span><span class=cF1>while</span><span class=cF0> (tmps!=&amp;ode-&gt;next_spring) </span><span class=cF7>{</span><span class=cF0>
<a name="l160"></a> tmps-&gt;num=i++;
<a name="l161"></a> tmps-&gt;end1_num=tmps-&gt;end1-&gt;num;
<a name="l162"></a> tmps-&gt;end2_num=tmps-&gt;end2-&gt;num;
<a name="l163"></a> tmps=tmps-&gt;next;
<a name="l164"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l165"></a>}
<a name="l166"></a>
<a name="l167"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>CMass</span><span class=cF0> *</span><span class=cF5>MassFind</span><span class=cF0>(</span><span class=cF9>CMathODE</span><span class=cF0> *ode,</span><span class=cF1>F64</span><span class=cF0> x,</span><span class=cF1>F64</span><span class=cF0> y,</span><span class=cF1>F64</span><span class=cF0> z=0)
<a name="l168"></a>{</span><span class=cF2>//Search for mass nearest to x,y,z.</span><span class=cF0>
<a name="l169"></a> </span><span class=cF9>CMass</span><span class=cF0> *tmpm,*best_mass=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l170"></a> </span><span class=cF1>F64</span><span class=cF0> dd,best_dd=</span><span class=cF3>F64_MAX</span><span class=cF0>;
<a name="l171"></a>
<a name="l172"></a> tmpm=ode-&gt;next_mass;
<a name="l173"></a> </span><span class=cF1>while</span><span class=cF0> (tmpm!=&amp;ode-&gt;next_mass) </span><span class=cF7>{</span><span class=cF0>
<a name="l174"></a> dd=</span><span class=cF5>Sqr</span><span class=cF0>(tmpm-&gt;x-x)+</span><span class=cF5>Sqr</span><span class=cF0>(tmpm-&gt;y-y)+</span><span class=cF5>Sqr</span><span class=cF0>(tmpm-&gt;z-z);
<a name="l175"></a> </span><span class=cF1>if</span><span class=cF0> (dd&lt;best_dd) {
<a name="l176"></a> best_dd=dd;
<a name="l177"></a> best_mass=tmpm;
<a name="l178"></a> }
<a name="l179"></a> tmpm=tmpm-&gt;next;
<a name="l180"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l181"></a> </span><span class=cF1>return</span><span class=cF0> best_mass;
<a name="l182"></a>}
<a name="l183"></a>
<a name="l184"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>CSpring</span><span class=cF0> *</span><span class=cF5>SpringFind</span><span class=cF0>(</span><span class=cF9>CMathODE</span><span class=cF0> *ode,</span><span class=cF1>F64</span><span class=cF0> x,</span><span class=cF1>F64</span><span class=cF0> y,</span><span class=cF1>F64</span><span class=cF0> z=0)
<a name="l185"></a>{</span><span class=cF2>//Find spring midpoint nearest x,y,z.</span><span class=cF0>
<a name="l186"></a> </span><span class=cF9>CSpring</span><span class=cF0> *tmps,*best_spring=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l187"></a> </span><span class=cF1>F64</span><span class=cF0> dd,best_dd=</span><span class=cF3>F64_MAX</span><span class=cF0>;
<a name="l188"></a>
<a name="l189"></a> tmps=ode-&gt;next_spring;
<a name="l190"></a> </span><span class=cF1>while</span><span class=cF0> (tmps!=&amp;ode-&gt;next_spring) </span><span class=cF7>{</span><span class=cF0>
<a name="l191"></a> dd=</span><span class=cF5>Sqr</span><span class=cF0>(</span><span class=cF7>(</span><span class=cF0>tmps-&gt;end1-&gt;x+tmps-&gt;end2-&gt;x</span><span class=cF7>)</span><span class=cF0>/2-x)+
<a name="l192"></a> </span><span class=cF5>Sqr</span><span class=cF0>(</span><span class=cF7>(</span><span class=cF0>tmps-&gt;end1-&gt;y+tmps-&gt;end2-&gt;y</span><span class=cF7>)</span><span class=cF0>/2-y)+
<a name="l193"></a> </span><span class=cF5>Sqr</span><span class=cF0>(</span><span class=cF7>(</span><span class=cF0>tmps-&gt;end1-&gt;z+tmps-&gt;end2-&gt;z</span><span class=cF7>)</span><span class=cF0>/2-z);
<a name="l194"></a> </span><span class=cF1>if</span><span class=cF0> (dd&lt;best_dd) {
<a name="l195"></a> best_dd=dd;
<a name="l196"></a> best_spring=tmps;
<a name="l197"></a> }
<a name="l198"></a> tmps=tmps-&gt;next;
<a name="l199"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l200"></a> </span><span class=cF1>return</span><span class=cF0> best_spring;
<a name="l201"></a>}
<a name="l202"></a>
<a name="l203"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>MassOrSpringFind</span><span class=cF0>(
<a name="l204"></a> </span><span class=cF9>CMathODE</span><span class=cF0> *ode,</span><span class=cF9>CMass</span><span class=cF0> **res_mass,</span><span class=cF9>CSpring</span><span class=cF0> **res_spring,
<a name="l205"></a> </span><span class=cF1>F64</span><span class=cF0> x,</span><span class=cF1>F64</span><span class=cF0> y,</span><span class=cF1>F64</span><span class=cF0> z=0)
<a name="l206"></a>{</span><span class=cF2>//Find spring or mass nearest x,y,z.</span><span class=cF0>
<a name="l207"></a> </span><span class=cF9>CMass</span><span class=cF0> *tmpm,*best_mass=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l208"></a> </span><span class=cF9>CSpring</span><span class=cF0> *tmps,*best_spring=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l209"></a> </span><span class=cF1>F64</span><span class=cF0> dd,best_dd=</span><span class=cF3>F64_MAX</span><span class=cF0>;
<a name="l210"></a>
<a name="l211"></a> tmpm=ode-&gt;next_mass;
<a name="l212"></a> </span><span class=cF1>while</span><span class=cF0> (tmpm!=&amp;ode-&gt;next_mass) </span><span class=cF7>{</span><span class=cF0>
<a name="l213"></a> dd=</span><span class=cF5>Sqr</span><span class=cF0>(tmpm-&gt;x-x)+</span><span class=cF5>Sqr</span><span class=cF0>(tmpm-&gt;y-y)+</span><span class=cF5>Sqr</span><span class=cF0>(tmpm-&gt;z-z);
<a name="l214"></a> </span><span class=cF1>if</span><span class=cF0> (dd&lt;best_dd) {
<a name="l215"></a> best_dd=dd;
<a name="l216"></a> best_mass=tmpm;
<a name="l217"></a> }
<a name="l218"></a> tmpm=tmpm-&gt;next;
<a name="l219"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l220"></a>
<a name="l221"></a> tmps=ode-&gt;next_spring;
<a name="l222"></a> </span><span class=cF1>while</span><span class=cF0> (tmps!=&amp;ode-&gt;next_spring) </span><span class=cF7>{</span><span class=cF0>
<a name="l223"></a> dd=</span><span class=cF5>Sqr</span><span class=cF0>(</span><span class=cF7>(</span><span class=cF0>tmps-&gt;end1-&gt;x+tmps-&gt;end2-&gt;x</span><span class=cF7>)</span><span class=cF0>/2-x)+
<a name="l224"></a> </span><span class=cF5>Sqr</span><span class=cF0>(</span><span class=cF7>(</span><span class=cF0>tmps-&gt;end1-&gt;y+tmps-&gt;end2-&gt;y</span><span class=cF7>)</span><span class=cF0>/2-y)+
<a name="l225"></a> </span><span class=cF5>Sqr</span><span class=cF0>(</span><span class=cF7>(</span><span class=cF0>tmps-&gt;end1-&gt;z+tmps-&gt;end2-&gt;z</span><span class=cF7>)</span><span class=cF0>/2-z);
<a name="l226"></a> </span><span class=cF1>if</span><span class=cF0> (dd&lt;best_dd) {
<a name="l227"></a> best_dd=dd;
<a name="l228"></a> best_spring=tmps;
<a name="l229"></a> best_mass=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l230"></a> }
<a name="l231"></a> tmps=tmps-&gt;next;
<a name="l232"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l233"></a> </span><span class=cF1>if</span><span class=cF0> (res_mass) *res_mass =best_mass;
<a name="l234"></a> </span><span class=cF1>if</span><span class=cF0> (res_spring) *res_spring=best_spring;
<a name="l235"></a>}
<a name="l236"></a>
<a name="l237"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>CMass</span><span class=cF0> *</span><span class=cF5>MassFindNum</span><span class=cF0>(</span><span class=cF9>CMathODE</span><span class=cF0> *ode,</span><span class=cF9>I64</span><span class=cF0> num)
<a name="l238"></a>{</span><span class=cF2>//Return mass number N.</span><span class=cF0>
<a name="l239"></a> </span><span class=cF9>CMass</span><span class=cF0> *tmpm=ode-&gt;next_mass;
<a name="l240"></a> </span><span class=cF1>while</span><span class=cF0> (tmpm!=&amp;ode-&gt;next_mass) </span><span class=cF7>{</span><span class=cF0>
<a name="l241"></a> </span><span class=cF1>if</span><span class=cF0> (tmpm-&gt;num==num)
<a name="l242"></a> </span><span class=cF1>return</span><span class=cF0> tmpm;
<a name="l243"></a> tmpm=tmpm-&gt;next;
<a name="l244"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l245"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>NULL</span><span class=cF0>;
<a name="l246"></a>}
<a name="l247"></a>
<a name="l248"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ODERstInactive</span><span class=cF0>(</span><span class=cF9>CMathODE</span><span class=cF0> *ode)
<a name="l249"></a>{</span><span class=cF2>//Set all masses and springs to ACTIVE for new trial.</span><span class=cF0>
<a name="l250"></a> </span><span class=cF9>CMass</span><span class=cF0> *tmpm;
<a name="l251"></a> </span><span class=cF9>CSpring</span><span class=cF0> *tmps;
<a name="l252"></a> tmpm=ode-&gt;next_mass;
<a name="l253"></a> </span><span class=cF1>while</span><span class=cF0> (tmpm!=&amp;ode-&gt;next_mass) </span><span class=cF7>{</span><span class=cF0>
<a name="l254"></a> tmpm-&gt;flags&amp;=~</span><span class=cF3>MSF_INACTIVE</span><span class=cF0>;
<a name="l255"></a> tmpm=tmpm-&gt;next;
<a name="l256"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l257"></a> tmps=ode-&gt;next_spring;
<a name="l258"></a> </span><span class=cF1>while</span><span class=cF0> (tmps!=&amp;ode-&gt;next_spring) </span><span class=cF7>{</span><span class=cF0>
<a name="l259"></a> tmps-&gt;flags&amp;=~</span><span class=cF3>SSF_INACTIVE</span><span class=cF0>;
<a name="l260"></a> tmps=tmps-&gt;next;
<a name="l261"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l262"></a>}
<a name="l263"></a>
<a name="l264"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ODECalcSprings</span><span class=cF0>(</span><span class=cF9>CMathODE</span><span class=cF0> *ode)
<a name="l265"></a>{
<a name="l266"></a> </span><span class=cF9>CSpring</span><span class=cF0> *tmps=ode-&gt;next_spring;
<a name="l267"></a> </span><span class=cF9>CMass</span><span class=cF0> *e1,*e2;
<a name="l268"></a> </span><span class=cF1>F64</span><span class=cF0> d;
<a name="l269"></a> </span><span class=cF9>CD3</span><span class=cF0> p;
<a name="l270"></a> </span><span class=cF1>while</span><span class=cF0> (tmps!=&amp;ode-&gt;next_spring) </span><span class=cF7>{</span><span class=cF0>
<a name="l271"></a> </span><span class=cF1>if</span><span class=cF0> (tmps-&gt;flags&amp;</span><span class=cF3>SSF_INACTIVE</span><span class=cF0>) {
<a name="l272"></a> tmps-&gt;displacement=0;
<a name="l273"></a> tmps-&gt;f=0;
<a name="l274"></a> } </span><span class=cF1>else</span><span class=cF0> {
<a name="l275"></a> e1=tmps-&gt;end1;
<a name="l276"></a> e2=tmps-&gt;end2;
<a name="l277"></a> d=</span><span class=cF5>D3Norm</span><span class=cF0>(</span><span class=cF5>D3Sub</span><span class=cF7>(</span><span class=cF0>&amp;p,&amp;e2-&gt;state-&gt;x,&amp;e1-&gt;state-&gt;x</span><span class=cF7>)</span><span class=cF0>);
<a name="l278"></a> tmps-&gt;displacement=d-tmps-&gt;rest_len;
<a name="l279"></a> tmps-&gt;f=tmps-&gt;displacement*tmps-&gt;const;
<a name="l280"></a> </span><span class=cF1>if</span><span class=cF0> (tmps-&gt;f&gt;0 &amp;&amp; tmps-&gt;flags&amp;</span><span class=cF3>SSF_NO_TENSION</span><span class=cF0>)
<a name="l281"></a> tmps-&gt;f=0;
<a name="l282"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (tmps-&gt;f&lt;0 &amp;&amp; tmps-&gt;flags&amp;</span><span class=cF3>SSF_NO_COMPRESSION</span><span class=cF0>)
<a name="l283"></a> tmps-&gt;f=0;
<a name="l284"></a> </span><span class=cF1>if</span><span class=cF0> (d&gt;0) </span><span class=cF7>{</span><span class=cF0>
<a name="l285"></a> </span><span class=cF5>D3MulEqu</span><span class=cF0>(&amp;p,tmps-&gt;f/d);
<a name="l286"></a> </span><span class=cF5>D3AddEqu</span><span class=cF0>(&amp;e1-&gt;DstateDt-&gt;DxDt,&amp;p);
<a name="l287"></a> </span><span class=cF5>D3SubEqu</span><span class=cF0>(&amp;e2-&gt;DstateDt-&gt;DxDt,&amp;p);
<a name="l288"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l289"></a> }
<a name="l290"></a> tmps=tmps-&gt;next;
<a name="l291"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l292"></a>}
<a name="l293"></a>
<a name="l294"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ODECalcDrag</span><span class=cF0>(</span><span class=cF9>CMathODE</span><span class=cF0> *ode)
<a name="l295"></a>{
<a name="l296"></a> </span><span class=cF9>CMass</span><span class=cF0> *tmpm;
<a name="l297"></a> </span><span class=cF1>F64</span><span class=cF0> d,dd;
<a name="l298"></a> </span><span class=cF9>CD3</span><span class=cF0> p;
<a name="l299"></a> </span><span class=cF1>if</span><span class=cF0> (ode-&gt;drag_v || ode-&gt;drag_v2 || ode-&gt;drag_v3) </span><span class=cF7>{</span><span class=cF0>
<a name="l300"></a> tmpm=ode-&gt;next_mass;
<a name="l301"></a> </span><span class=cF1>while</span><span class=cF0> (tmpm!=&amp;ode-&gt;next_mass) {
<a name="l302"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>tmpm-&gt;flags &amp; </span><span class=cF3>MSF_INACTIVE</span><span class=cF7>)</span><span class=cF0> &amp;&amp;
<a name="l303"></a> tmpm-&gt;drag_profile_factor &amp;&amp;
<a name="l304"></a> </span><span class=cF7>(</span><span class=cF0>dd=</span><span class=cF5>D3NormSqr</span><span class=cF0>(&amp;tmpm-&gt;state-&gt;DxDt)</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l305"></a> d=ode-&gt;drag_v;
<a name="l306"></a> </span><span class=cF1>if</span><span class=cF0> (ode-&gt;drag_v2)
<a name="l307"></a> d+=ode-&gt;drag_v2*</span><span class=cF5>Sqrt</span><span class=cF0>(dd);
<a name="l308"></a> </span><span class=cF1>if</span><span class=cF0> (ode-&gt;drag_v3)
<a name="l309"></a> d+=dd*ode-&gt;drag_v3;
<a name="l310"></a> </span><span class=cF5>D3SubEqu</span><span class=cF0>(&amp;tmpm-&gt;DstateDt-&gt;DxDt,
<a name="l311"></a> </span><span class=cF5>D3Mul</span><span class=cF7>(</span><span class=cF0>&amp;p,d*tmpm-&gt;drag_profile_factor,&amp;tmpm-&gt;state-&gt;DxDt</span><span class=cF7>)</span><span class=cF0>);
<a name="l312"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l313"></a> tmpm=tmpm-&gt;next;
<a name="l314"></a> }
<a name="l315"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l316"></a>}
<a name="l317"></a>
<a name="l318"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ODEApplyAccelerationLimit</span><span class=cF0>(</span><span class=cF9>CMathODE</span><span class=cF0> *ode)
<a name="l319"></a>{
<a name="l320"></a> </span><span class=cF9>CMass</span><span class=cF0> *tmpm;
<a name="l321"></a> </span><span class=cF1>F64</span><span class=cF0> d;
<a name="l322"></a> </span><span class=cF1>if</span><span class=cF0> (ode-&gt;acceleration_limit) </span><span class=cF7>{</span><span class=cF0>
<a name="l323"></a> tmpm=ode-&gt;next_mass;
<a name="l324"></a> </span><span class=cF1>while</span><span class=cF0> (tmpm!=&amp;ode-&gt;next_mass) {
<a name="l325"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>tmpm-&gt;flags &amp; </span><span class=cF3>MSF_INACTIVE</span><span class=cF7>)</span><span class=cF0> &amp;&amp;
<a name="l326"></a> </span><span class=cF7>(</span><span class=cF0>d=</span><span class=cF5>D3Norm</span><span class=cF0>(&amp;tmpm-&gt;DstateDt-&gt;DxDt)</span><span class=cF7>)</span><span class=cF0>&gt;ode-&gt;acceleration_limit)
<a name="l327"></a> </span><span class=cF5>D3MulEqu</span><span class=cF0>(&amp;tmpm-&gt;DstateDt-&gt;DxDt,ode-&gt;acceleration_limit/d);
<a name="l328"></a> tmpm=tmpm-&gt;next;
<a name="l329"></a> }
<a name="l330"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l331"></a>}
<a name="l332"></a>
<a name="l333"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ODEMPTask</span><span class=cF0>(</span><span class=cF9>CMathODE</span><span class=cF0> *ode)
<a name="l334"></a>{
<a name="l335"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l336"></a> </span><span class=cF1>while</span><span class=cF0> (!</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&amp;ode-&gt;mp_not_done_flags,</span><span class=cF5>Gs</span><span class=cF0>-&gt;num</span><span class=cF7>)</span><span class=cF0>)
<a name="l337"></a> </span><span class=cF5>Yield</span><span class=cF0>;
<a name="l338"></a> </span><span class=cF1>if</span><span class=cF0> (ode-&gt;mp_derive)
<a name="l339"></a> (*ode-&gt;mp_derive)(ode,ode-&gt;mp_t,
<a name="l340"></a> </span><span class=cF5>Gs</span><span class=cF0>-&gt;num,ode-&gt;mp_state,ode-&gt;mp_DstateDt);
<a name="l341"></a> </span><span class=cF5>LBtr</span><span class=cF0>(&amp;ode-&gt;mp_not_done_flags,</span><span class=cF5>Gs</span><span class=cF0>-&gt;num);
<a name="l342"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l343"></a>}
<a name="l344"></a>
<a name="l345"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ODEMPWake</span><span class=cF0>(</span><span class=cF9>CMathODE</span><span class=cF0> *ode)
<a name="l346"></a>{
<a name="l347"></a> </span><span class=cF9>I64</span><span class=cF0> i;
<a name="l348"></a> </span><span class=cF1>if</span><span class=cF0> (!ode-&gt;slave_tasks) </span><span class=cF7>{</span><span class=cF0>
<a name="l349"></a> ode-&gt;slave_tasks=</span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cFB>mp_cnt</span><span class=cF0>*</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CTask</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>);
<a name="l350"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;</span><span class=cFB>mp_cnt</span><span class=cF0>;i++)
<a name="l351"></a> ode-&gt;slave_tasks[i]=</span><span class=cF5>Spawn</span><span class=cF0>(&amp;</span><span class=cF5>ODEMPTask</span><span class=cF0>,ode,</span><span class=cF6>&quot;ODE Slave&quot;</span><span class=cF0>,i);
<a name="l352"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l353"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;</span><span class=cFB>mp_cnt</span><span class=cF0>;i++) </span><span class=cF7>{</span><span class=cF0>
<a name="l354"></a> </span><span class=cF5>Suspend</span><span class=cF0>(ode-&gt;slave_tasks[i],</span><span class=cF3>FALSE</span><span class=cF0>);
<a name="l355"></a> </span><span class=cF5>MPInt</span><span class=cF0>(</span><span class=cF3>I_WAKE</span><span class=cF0>,i);
<a name="l356"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l357"></a>}
<a name="l358"></a>
<a name="l359"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ODEMPSleep</span><span class=cF0>(</span><span class=cF9>CMathODE</span><span class=cF0> *ode)
<a name="l360"></a>{
<a name="l361"></a> </span><span class=cF9>I64</span><span class=cF0> i;
<a name="l362"></a> </span><span class=cF1>if</span><span class=cF0> (ode-&gt;slave_tasks) </span><span class=cF7>{</span><span class=cF0>
<a name="l363"></a> </span><span class=cF1>while</span><span class=cF0> (ode-&gt;mp_not_done_flags)
<a name="l364"></a> </span><span class=cF5>Yield</span><span class=cF0>;
<a name="l365"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;</span><span class=cFB>mp_cnt</span><span class=cF0>;i++)
<a name="l366"></a> </span><span class=cF5>Suspend</span><span class=cF0>(ode-&gt;slave_tasks[i]);
<a name="l367"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l368"></a>}
<a name="l369"></a>
<a name="l370"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ODECallMPDerivative</span><span class=cF0>(</span><span class=cF9>CMathODE</span><span class=cF0> *ode,</span><span class=cF1>F64</span><span class=cF0> t,</span><span class=cF1>F64</span><span class=cF0> *state,</span><span class=cF1>F64</span><span class=cF0> *DstateDt)
<a name="l371"></a>{
<a name="l372"></a> ode-&gt;mp_t=t;
<a name="l373"></a> ode-&gt;mp_state=state;
<a name="l374"></a> ode-&gt;mp_DstateDt=DstateDt;
<a name="l375"></a> ode-&gt;mp_not_done_flags=1&lt;&lt;</span><span class=cFB>mp_cnt</span><span class=cF0>-1;
<a name="l376"></a> </span><span class=cF1>do</span><span class=cF0> </span><span class=cF5>Yield</span><span class=cF0>;
<a name="l377"></a> </span><span class=cF1>while</span><span class=cF0> (ode-&gt;mp_not_done_flags);
<a name="l378"></a>}
<a name="l379"></a>
<a name="l380"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ODECallDerivative</span><span class=cF0>(</span><span class=cF9>CMathODE</span><span class=cF0> *ode,</span><span class=cF1>F64</span><span class=cF0> t,</span><span class=cF1>F64</span><span class=cF0> *state,</span><span class=cF1>F64</span><span class=cF0> *DstateDt)
<a name="l381"></a>{
<a name="l382"></a> </span><span class=cF9>CMass</span><span class=cF0> *tmpm;
<a name="l383"></a> </span><span class=cF1>if</span><span class=cF0> (ode-&gt;flags&amp;</span><span class=cF3>ODEF_HAS_MASSES</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l384"></a> </span><span class=cF5>ODESetMassesPtrs</span><span class=cF0>(ode,state,DstateDt);
<a name="l385"></a> tmpm=ode-&gt;next_mass;
<a name="l386"></a> </span><span class=cF1>while</span><span class=cF0> (tmpm!=&amp;ode-&gt;next_mass) {
<a name="l387"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>tmpm-&gt;flags&amp;</span><span class=cF3>MSF_INACTIVE</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l388"></a> </span><span class=cF5>D3Zero</span><span class=cF0>(&amp;tmpm-&gt;DstateDt-&gt;DxDt);
<a name="l389"></a> </span><span class=cF5>D3Copy</span><span class=cF0>(&amp;tmpm-&gt;DstateDt-&gt;x,&amp;tmpm-&gt;state-&gt;DxDt);
<a name="l390"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l391"></a> tmpm=tmpm-&gt;next;
<a name="l392"></a> }
<a name="l393"></a> </span><span class=cF5>ODECalcSprings</span><span class=cF0>(ode);
<a name="l394"></a> </span><span class=cF5>ODECalcDrag</span><span class=cF0>(ode);
<a name="l395"></a> </span><span class=cF1>if</span><span class=cF0> (ode-&gt;mp_derive)
<a name="l396"></a> </span><span class=cF5>ODECallMPDerivative</span><span class=cF0>(ode,t,state,DstateDt);
<a name="l397"></a> </span><span class=cF1>if</span><span class=cF0> (ode-&gt;derive)
<a name="l398"></a> (*ode-&gt;derive)(ode,t,state,DstateDt);
<a name="l399"></a> tmpm=ode-&gt;next_mass;
<a name="l400"></a> </span><span class=cF1>while</span><span class=cF0> (tmpm!=&amp;ode-&gt;next_mass) {
<a name="l401"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>tmpm-&gt;flags&amp;</span><span class=cF3>MSF_INACTIVE</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l402"></a> </span><span class=cF1>if</span><span class=cF0> (tmpm-&gt;flags&amp;</span><span class=cF3>MSF_FIXED</span><span class=cF0>) {
<a name="l403"></a> </span><span class=cF5>D3Zero</span><span class=cF0>(&amp;tmpm-&gt;DstateDt-&gt;DxDt);
<a name="l404"></a> </span><span class=cF5>D3Zero</span><span class=cF0>(&amp;tmpm-&gt;DstateDt-&gt;x);
<a name="l405"></a> } </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (tmpm-&gt;mass)
<a name="l406"></a> </span><span class=cF5>D3DivEqu</span><span class=cF0>(&amp;tmpm-&gt;DstateDt-&gt;DxDt,tmpm-&gt;mass);
<a name="l407"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l408"></a> tmpm=tmpm-&gt;next;
<a name="l409"></a> }
<a name="l410"></a> </span><span class=cF5>ODEApplyAccelerationLimit</span><span class=cF0>(ode);
<a name="l411"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l412"></a> </span><span class=cF1>if</span><span class=cF0> (ode-&gt;mp_derive)
<a name="l413"></a> </span><span class=cF5>ODECallMPDerivative</span><span class=cF0>(ode,t,state,DstateDt);
<a name="l414"></a> </span><span class=cF1>if</span><span class=cF0> (ode-&gt;derive)
<a name="l415"></a> (*ode-&gt;derive)(ode,t,state,DstateDt);
<a name="l416"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l417"></a>}
<a name="l418"></a>
<a name="l419"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ODEOneStep</span><span class=cF0>(</span><span class=cF9>CMathODE</span><span class=cF0> *ode)
<a name="l420"></a>{
<a name="l421"></a> </span><span class=cF9>I64</span><span class=cF0> i;
<a name="l422"></a> </span><span class=cF5>ODECallDerivative</span><span class=cF0>(ode,ode-&gt;t,ode-&gt;state_internal,ode-&gt;DstateDt);
<a name="l423"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;ode-&gt;n_internal;i++)
<a name="l424"></a> ode-&gt;state_internal[i]+=ode-&gt;h*ode-&gt;DstateDt[i];
<a name="l425"></a> ode-&gt;t+=ode-&gt;h;
<a name="l426"></a>}
<a name="l427"></a>
<a name="l428"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ODERK4OneStep</span><span class=cF0>(</span><span class=cF9>CMathODE</span><span class=cF0> *ode)
<a name="l429"></a>{
<a name="l430"></a> </span><span class=cF9>I64</span><span class=cF0> i,n=ode-&gt;n_internal;
<a name="l431"></a> </span><span class=cF1>F64</span><span class=cF0> xh,hh,h6,*dym,*dyt,*yt,*DstateDt;
<a name="l432"></a>
<a name="l433"></a> dym =ode-&gt;tmp0;
<a name="l434"></a> dyt =ode-&gt;tmp1;
<a name="l435"></a> yt =ode-&gt;tmp2;
<a name="l436"></a> DstateDt=ode-&gt;tmp3;
<a name="l437"></a> hh =0.5*ode-&gt;h;
<a name="l438"></a> h6 =ode-&gt;h / 6.0;
<a name="l439"></a> xh =ode-&gt;t + hh;
<a name="l440"></a>
<a name="l441"></a> </span><span class=cF5>ODECallDerivative</span><span class=cF0>(ode,ode-&gt;t,ode-&gt;state_internal,ode-&gt;DstateDt);
<a name="l442"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;n;i++)
<a name="l443"></a> yt[i]=ode-&gt;state_internal[i]+hh*DstateDt[i];
<a name="l444"></a> </span><span class=cF5>ODECallDerivative</span><span class=cF0>(ode,xh,yt,dyt);
<a name="l445"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;n;i++)
<a name="l446"></a> yt[i]=ode-&gt;state_internal[i]+hh*dyt[i];
<a name="l447"></a> </span><span class=cF5>ODECallDerivative</span><span class=cF0>(ode,xh,yt,dym);
<a name="l448"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;n;i++) </span><span class=cF7>{</span><span class=cF0>
<a name="l449"></a> yt[i]=ode-&gt;state_internal[i]+ode-&gt;h*dym[i];
<a name="l450"></a> dym[i]+=dyt[i];
<a name="l451"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l452"></a> ode-&gt;t+=ode-&gt;h;
<a name="l453"></a> </span><span class=cF5>ODECallDerivative</span><span class=cF0>(ode,ode-&gt;t,yt,dyt);
<a name="l454"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;n;i++)
<a name="l455"></a> ode-&gt;state_internal[i]+=h6*(DstateDt[i]+dyt[i]+2.0*dym[i]);
<a name="l456"></a>}
<a name="l457"></a>
<a name="l458"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEa2</span><span class=cF0> 0.2
<a name="l459"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEa3</span><span class=cF0> 0.3
<a name="l460"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEa4</span><span class=cF0> 0.6
<a name="l461"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEa5</span><span class=cF0> 1.0
<a name="l462"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEa6</span><span class=cF0> 0.875
<a name="l463"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEb21</span><span class=cF0> 0.2
<a name="l464"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEb31</span><span class=cF0> (3.0/40.0)
<a name="l465"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEb32</span><span class=cF0> (9.0/40.0)
<a name="l466"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEb41</span><span class=cF0> 0.3
<a name="l467"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEb42</span><span class=cF0> (-0.9)
<a name="l468"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEb43</span><span class=cF0> 1.2
<a name="l469"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEb51</span><span class=cF0> (-11.0/54.0)
<a name="l470"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEb52</span><span class=cF0> 2.5
<a name="l471"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEb53</span><span class=cF0> (-70.0/27.0)
<a name="l472"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEb54</span><span class=cF0> (35.0/27.0)
<a name="l473"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEb61</span><span class=cF0> (1631.0/55296.0)
<a name="l474"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEb62</span><span class=cF0> (175.0/512.0)
<a name="l475"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEb63</span><span class=cF0> (575.0/13824.0)
<a name="l476"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEb64</span><span class=cF0> (44275.0/110592.0)
<a name="l477"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEb65</span><span class=cF0> (253.0/4096.0)
<a name="l478"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEc1</span><span class=cF0> (37.0/378.0)
<a name="l479"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEc3</span><span class=cF0> (250.0/621.0)
<a name="l480"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEc4</span><span class=cF0> (125.0/594.0)
<a name="l481"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEc6</span><span class=cF0> (512.0/1771.0)
<a name="l482"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEdc1</span><span class=cF0> (37.0/378.0-2825.0/27648.0)
<a name="l483"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEdc3</span><span class=cF0> (250.0/621.0-18575.0/48384.0)
<a name="l484"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEdc4</span><span class=cF0> (125.0/594.0-13525.0/55296.0)
<a name="l485"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEdc5</span><span class=cF0> (-277.0/14336.0)
<a name="l486"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ODEdc6</span><span class=cF0> (512.0/1771.0-0.25)
<a name="l487"></a>
<a name="l488"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ODECashKarp</span><span class=cF0>(</span><span class=cF9>CMathODE</span><span class=cF0> *ode)
<a name="l489"></a>{
<a name="l490"></a> </span><span class=cF9>I64</span><span class=cF0> i,n=ode-&gt;n_internal;
<a name="l491"></a> </span><span class=cF1>F64</span><span class=cF0> h=ode-&gt;h,*state=ode-&gt;state_internal,
<a name="l492"></a> *DstateDt=ode-&gt;DstateDt,*ak2,*ak3,*ak4,*ak5,*ak6,
<a name="l493"></a> *tmpstate,*stateerr,*outstate;
<a name="l494"></a>
<a name="l495"></a> ak2=ode-&gt;tmp0;
<a name="l496"></a> ak3=ode-&gt;tmp1;
<a name="l497"></a> ak4=ode-&gt;tmp2;
<a name="l498"></a> ak5=ode-&gt;tmp3;
<a name="l499"></a> ak6=ode-&gt;tmp4;
<a name="l500"></a> tmpstate=ode-&gt;tmp5;
<a name="l501"></a> outstate=ode-&gt;tmp6;
<a name="l502"></a> stateerr=ode-&gt;tmp7;
<a name="l503"></a>
<a name="l504"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;n;i++)
<a name="l505"></a> tmpstate[i]=state[i]+</span><span class=cF3>ODEb21</span><span class=cF0>*h*DstateDt[i];
<a name="l506"></a> </span><span class=cF5>ODECallDerivative</span><span class=cF0>(ode,ode-&gt;t+</span><span class=cF3>ODEa2</span><span class=cF0>*h,tmpstate,ak2);
<a name="l507"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;n;i++)
<a name="l508"></a> tmpstate[i]=state[i]+h*(</span><span class=cF3>ODEb31</span><span class=cF0>*DstateDt[i]+</span><span class=cF3>ODEb32</span><span class=cF0>*ak2[i]);
<a name="l509"></a> </span><span class=cF5>ODECallDerivative</span><span class=cF0>(ode,ode-&gt;t+</span><span class=cF3>ODEa3</span><span class=cF0>*h,tmpstate,ak3);
<a name="l510"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;n;i++)
<a name="l511"></a> tmpstate[i]=state[i]+h*(</span><span class=cF3>ODEb41</span><span class=cF0>*DstateDt[i]+</span><span class=cF3>ODEb42</span><span class=cF0>*ak2[i]+</span><span class=cF3>ODEb43</span><span class=cF0>*ak3[i]);
<a name="l512"></a> </span><span class=cF5>ODECallDerivative</span><span class=cF0>(ode,ode-&gt;t+</span><span class=cF3>ODEa4</span><span class=cF0>*h,tmpstate,ak4);
<a name="l513"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;n;i++)
<a name="l514"></a> tmpstate[i]=state[i]+h*(</span><span class=cF3>ODEb51</span><span class=cF0>*DstateDt[i]+
<a name="l515"></a> </span><span class=cF3>ODEb52</span><span class=cF0>*ak2[i]+</span><span class=cF3>ODEb53</span><span class=cF0>*ak3[i]+</span><span class=cF3>ODEb54</span><span class=cF0>*ak4[i]);
<a name="l516"></a> </span><span class=cF5>ODECallDerivative</span><span class=cF0>(ode,ode-&gt;t+</span><span class=cF3>ODEa5</span><span class=cF0>*h,tmpstate,ak5);
<a name="l517"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;n;i++)
<a name="l518"></a> tmpstate[i]=state[i]+h*(</span><span class=cF3>ODEb61</span><span class=cF0>*DstateDt[i]+
<a name="l519"></a> </span><span class=cF3>ODEb62</span><span class=cF0>*ak2[i]+</span><span class=cF3>ODEb63</span><span class=cF0>*ak3[i]+</span><span class=cF3>ODEb64</span><span class=cF0>*ak4[i]+</span><span class=cF3>ODEb65</span><span class=cF0>*ak5[i]);
<a name="l520"></a> </span><span class=cF5>ODECallDerivative</span><span class=cF0>(ode,ode-&gt;t+</span><span class=cF3>ODEa6</span><span class=cF0>*h,tmpstate,ak6);
<a name="l521"></a>
<a name="l522"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;n;i++)
<a name="l523"></a> outstate[i]=state[i]+h*(</span><span class=cF3>ODEc1</span><span class=cF0>*DstateDt[i]+
<a name="l524"></a> </span><span class=cF3>ODEc3</span><span class=cF0>*ak3[i]+</span><span class=cF3>ODEc4</span><span class=cF0>*ak4[i]+</span><span class=cF3>ODEc6</span><span class=cF0>*ak6[i]);
<a name="l525"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;n;i++)
<a name="l526"></a> stateerr[i]=h*(</span><span class=cF3>ODEdc1</span><span class=cF0>*DstateDt[i]+</span><span class=cF3>ODEdc3</span><span class=cF0>*ak3[i]+
<a name="l527"></a> </span><span class=cF3>ODEdc4</span><span class=cF0>*ak4[i]+</span><span class=cF3>ODEdc5</span><span class=cF0>*ak5[i]+</span><span class=cF3>ODEdc6</span><span class=cF0>*ak6[i]);
<a name="l528"></a>}
<a name="l529"></a>
<a name="l530"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>SAFETY</span><span class=cF0> 0.9
<a name="l531"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>PGROW</span><span class=cF0> (-0.2)
<a name="l532"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>PSHRNK</span><span class=cF0> (-0.25)
<a name="l533"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>ERRCON</span><span class=cF0> 1.89e-4
<a name="l534"></a>
<a name="l535"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ODERK5OneStep</span><span class=cF0>(</span><span class=cF9>CMathODE</span><span class=cF0> *ode)
<a name="l536"></a>{
<a name="l537"></a> </span><span class=cF9>I64</span><span class=cF0> i;
<a name="l538"></a> </span><span class=cF1>F64</span><span class=cF0> errmax,tmp,*tmpstate=ode-&gt;tmp6,*stateerr=ode-&gt;tmp7;
<a name="l539"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l540"></a> ode-&gt;h=</span><span class=cF5>Clamp</span><span class=cF0>(ode-&gt;h,ode-&gt;h_min,ode-&gt;h_max);
<a name="l541"></a> </span><span class=cF5>ODECashKarp</span><span class=cF0>(ode);
<a name="l542"></a> errmax=0.0;
<a name="l543"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;ode-&gt;n_internal;i++) {
<a name="l544"></a> tmp=</span><span class=cF5>Abs</span><span class=cF0>(stateerr[i]/ode-&gt;state_scale[i]);
<a name="l545"></a> </span><span class=cF1>if</span><span class=cF0> (tmp&gt;errmax)
<a name="l546"></a> errmax=tmp;
<a name="l547"></a> }
<a name="l548"></a> errmax/=ode-&gt;tolerance_internal;
<a name="l549"></a> </span><span class=cF1>if</span><span class=cF0> (errmax&lt;=1.0 || ode-&gt;h==ode-&gt;h_min) </span><span class=cF1>break</span><span class=cF0>;
<a name="l550"></a> tmp=ode-&gt;h*</span><span class=cF3>SAFETY</span><span class=cF0>*errmax`</span><span class=cF3>PSHRNK</span><span class=cF0>;
<a name="l551"></a> </span><span class=cF1>if</span><span class=cF0> (tmp&lt;0.1*ode-&gt;h)
<a name="l552"></a> ode-&gt;h*=0.1;
<a name="l553"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l554"></a> ode-&gt;h=tmp;
<a name="l555"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l556"></a> ode-&gt;t+=ode-&gt;h;
<a name="l557"></a> </span><span class=cF1>if</span><span class=cF0> (errmax&gt;</span><span class=cF3>ERRCON</span><span class=cF0>)
<a name="l558"></a> ode-&gt;h*=</span><span class=cF3>SAFETY</span><span class=cF0>*errmax`</span><span class=cF3>PGROW</span><span class=cF0>;
<a name="l559"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l560"></a> ode-&gt;h*=5.0;
<a name="l561"></a> ode-&gt;h=</span><span class=cF5>Clamp</span><span class=cF0>(ode-&gt;h,ode-&gt;h_min,ode-&gt;h_max);
<a name="l562"></a> </span><span class=cF5>MemCpy</span><span class=cF0>(ode-&gt;state_internal,tmpstate,</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF1>F64</span><span class=cF7>)</span><span class=cF0>*ode-&gt;n_internal);
<a name="l563"></a>}
<a name="l564"></a>
<a name="l565"></a></span><span class=cF1>F64</span><span class=cF0> </span><span class=cFB>ode_alloced_factor</span><span class=cF0>=0.75;
<a name="l566"></a>
<a name="l567"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ODEsUpdate</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task)
<a name="l568"></a>{</span><span class=cF2>/* This routine is called by the </span><a href="/Wb/Adam/Gr/GrScrn.HC.HTML#l7"><span class=cF4>window mgr</span></a><span class=cF2>on a continuous</span><span class=cF0>
<a name="l569"></a></span><span class=cF2>basis to allow real-time simulation. It is intended</span><span class=cF0>
<a name="l570"></a></span><span class=cF2>to provide ress good enough for games. It uses a runge-kutta</span><span class=cF0>
<a name="l571"></a></span><span class=cF2>integrator which is a better algorithm than doing it with Euler.</span><span class=cF0>
<a name="l572"></a>
<a name="l573"></a></span><span class=cF2>It is adaptive step-sized, so it slows down when an important</span><span class=cF0>
<a name="l574"></a></span><span class=cF2>event is taking place to improve accuracy, but in my implementation</span><span class=cF0>
<a name="l575"></a></span><span class=cF2>it has a timeout.</span><span class=cF0>
<a name="l576"></a></span><span class=cF2>*/</span><span class=cF0>
<a name="l577"></a> </span><span class=cF9>I64</span><span class=cF0> i;
<a name="l578"></a> </span><span class=cF1>F64</span><span class=cF0> d,start_time,timeout_time,t_desired,t_initial,interpolation;
<a name="l579"></a> </span><span class=cF9>CMathODE</span><span class=cF0> *ode;
<a name="l580"></a>
<a name="l581"></a> </span><span class=cF1>if</span><span class=cF0> (task-&gt;next_ode==&amp;task-&gt;next_ode)
<a name="l582"></a> task-&gt;last_ode_time=0;
<a name="l583"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&amp;task-&gt;win_inhibit,</span><span class=cF3>WIf_SELF_ODE</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l584"></a></span><span class=cF2>//See </span><a href="/Wb/Adam/Gr/GrScrn.HC.HTML#l58"><span class=cF4>GrUpdateTasks</span></a><span class=cF2>() and </span><a href="/Wb/Adam/Gr/GrScrn.HC.HTML#l3"><span class=cF4>GrUpdateTaskODEs</span></a><span class=cF2>().</span><span class=cF0>
<a name="l585"></a> </span><span class=cF2>//We will not pick a time limit based on</span><span class=cF0>
<a name="l586"></a> </span><span class=cF2>//how busy the CPU is, what percent of the</span><span class=cF0>
<a name="l587"></a> </span><span class=cF2>//last refresh cycle was spent on ODE's</span><span class=cF0>
<a name="l588"></a> </span><span class=cF2>//and what the refresh cycle rate was.</span><span class=cF0>
<a name="l589"></a> start_time=</span><span class=cF5>tS</span><span class=cF0>;
<a name="l590"></a> d=1.0/</span><span class=cFB>winmgr</span><span class=cF0>.fps;
<a name="l591"></a> timeout_time=start_time+
<a name="l592"></a> (task-&gt;last_ode_time/d+0.1)/(</span><span class=cFB>winmgr</span><span class=cF0>.last_ode_time/d+0.1)*
<a name="l593"></a> </span><span class=cFB>ode_alloced_factor</span><span class=cF0>*d;
<a name="l594"></a> ode=task-&gt;next_ode;
<a name="l595"></a> </span><span class=cF1>while</span><span class=cF0> (ode!=&amp;task-&gt;next_ode) {
<a name="l596"></a> t_initial=ode-&gt;t;
<a name="l597"></a> d=</span><span class=cF5>tS</span><span class=cF0>;
<a name="l598"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>ode-&gt;flags&amp;</span><span class=cF3>ODEF_STARTED</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l599"></a> ode-&gt;base_t=d;
<a name="l600"></a> ode-&gt;flags|=</span><span class=cF3>ODEF_STARTED</span><span class=cF0>;
<a name="l601"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l602"></a> d-=ode-&gt;base_t+t_initial;
<a name="l603"></a> t_desired=ode-&gt;t_scale*d+t_initial;
<a name="l604"></a> </span><span class=cF1>if</span><span class=cF0> (ode-&gt;flags&amp;</span><span class=cF3>ODEF_PAUSED</span><span class=cF0>)
<a name="l605"></a> ode-&gt;base_t+=t_desired-ode-&gt;t; </span><span class=cF2>//Slip</span><span class=cF0>
<a name="l606"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l607"></a> ode-&gt;flags|=</span><span class=cF3>ODEF_BUSY</span><span class=cF0>;
<a name="l608"></a> </span><span class=cF1>if</span><span class=cF0> (ode-&gt;flags&amp;</span><span class=cF3>ODEF_PAUSED</span><span class=cF0>)
<a name="l609"></a> ode-&gt;base_t+=t_desired-ode-&gt;t; </span><span class=cF2>//Slip</span><span class=cF0>
<a name="l610"></a> </span><span class=cF1>else</span><span class=cF0> {
<a name="l611"></a> </span><span class=cF1>if</span><span class=cF0> (ode-&gt;derive || ode-&gt;mp_derive) </span><span class=cF7>{</span><span class=cF0>
<a name="l612"></a> </span><span class=cF1>if</span><span class=cF0> (ode-&gt;mp_derive)
<a name="l613"></a> </span><span class=cF5>ODEMPWake</span><span class=cF0>(ode);
<a name="l614"></a> </span><span class=cF5>ODEState2Internal</span><span class=cF0>(ode);
<a name="l615"></a> </span><span class=cF5>MemCpy</span><span class=cF0>(ode-&gt;initial_state,ode-&gt;state_internal,
<a name="l616"></a> ode-&gt;n_internal*</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF1>F64</span><span class=cF7>)</span><span class=cF0>);
<a name="l617"></a> </span><span class=cF1>while</span><span class=cF0> (ode-&gt;t&lt;t_desired) {
<a name="l618"></a> ode-&gt;h_max=t_desired-ode-&gt;t;
<a name="l619"></a> </span><span class=cF5>ODECallDerivative</span><span class=cF0>(ode,ode-&gt;t,ode-&gt;state_internal,ode-&gt;DstateDt);
<a name="l620"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;ode-&gt;n_internal;i++)
<a name="l621"></a> ode-&gt;state_scale[i]=</span><span class=cF5>Abs</span><span class=cF0>(ode-&gt;state_internal[i])+
<a name="l622"></a> </span><span class=cF5>Abs</span><span class=cF0>(ode-&gt;DstateDt[i]*ode-&gt;h)+ode-&gt;tolerance_internal;
<a name="l623"></a> </span><span class=cF5>ODERK5OneStep</span><span class=cF0>(ode);
<a name="l624"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>tS</span><span class=cF0>&gt;timeout_time) </span><span class=cF7>{</span><span class=cF0>
<a name="l625"></a> ode-&gt;base_t+=t_desired-ode-&gt;t; </span><span class=cF2>//Slip</span><span class=cF0>
<a name="l626"></a> </span><span class=cF1>goto</span><span class=cF0> ode_done;
<a name="l627"></a>
<a name="l628"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l629"></a> }
<a name="l630"></a>
<a name="l631"></a> </span><span class=cF2>//Interpolate if end time was not exact.</span><span class=cF0>
<a name="l632"></a> </span><span class=cF1>if</span><span class=cF0> (ode-&gt;t!=t_desired) {
<a name="l633"></a> </span><span class=cF1>if</span><span class=cF0> (interpolation=ode-&gt;t-t_initial) </span><span class=cF7>{</span><span class=cF0>
<a name="l634"></a> interpolation=(t_desired-t_initial)/interpolation;
<a name="l635"></a> </span><span class=cF1>if</span><span class=cF0> (interpolation!=1.0)
<a name="l636"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;ode-&gt;n_internal;i++)
<a name="l637"></a> ode-&gt;state_internal[i]=(ode-&gt;state_internal[i]-
<a name="l638"></a> ode-&gt;initial_state[i])*interpolation+
<a name="l639"></a> ode-&gt;initial_state[i];
<a name="l640"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l641"></a> ode-&gt;t=t_desired;
<a name="l642"></a> }
<a name="l643"></a>ode_done:
<a name="l644"></a> </span><span class=cF5>ODEInternal2State</span><span class=cF0>(ode);
<a name="l645"></a>
<a name="l646"></a> </span><span class=cF2>//Convenience call to set vals</span><span class=cF0>
<a name="l647"></a> </span><span class=cF5>ODECallDerivative</span><span class=cF0>(ode,ode-&gt;t,ode-&gt;state_internal,ode-&gt;DstateDt);
<a name="l648"></a>
<a name="l649"></a> </span><span class=cF1>if</span><span class=cF0> (ode-&gt;mp_derive)
<a name="l650"></a> </span><span class=cF5>ODEMPSleep</span><span class=cF0>(ode);
<a name="l651"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l652"></a> }
<a name="l653"></a> ode-&gt;flags&amp;=~</span><span class=cF3>ODEF_BUSY</span><span class=cF0>;
<a name="l654"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l655"></a> ode-&gt;base_t+=(1.0-ode-&gt;t_scale)*d;
<a name="l656"></a> ode=ode-&gt;next;
<a name="l657"></a> }
<a name="l658"></a>
<a name="l659"></a> </span><span class=cF2>//Now, we will dynamically adjust tolerances.</span><span class=cF0>
<a name="l660"></a>
<a name="l661"></a> </span><span class=cF2>//We will regulate the tolerances</span><span class=cF0>
<a name="l662"></a> </span><span class=cF2>//to fill the time we decided was</span><span class=cF0>
<a name="l663"></a> </span><span class=cF2>//okay to devote to ODE's.</span><span class=cF0>
<a name="l664"></a> </span><span class=cF2>//Since we might have multiple ODE's</span><span class=cF0>
<a name="l665"></a> </span><span class=cF2>//active we scale them by the same factor.</span><span class=cF0>
<a name="l666"></a>
<a name="l667"></a> </span><span class=cF2>//This algorithm is probably not stable or very good, but it's something.</span><span class=cF0>
<a name="l668"></a>
<a name="l669"></a> </span><span class=cF2>//Target is 75% of alloced time.</span><span class=cF0>
<a name="l670"></a> d=(</span><span class=cF5>tS</span><span class=cF0>-start_time)/(timeout_time-start_time)-0.75;
<a name="l671"></a>
<a name="l672"></a> ode=task-&gt;next_ode;
<a name="l673"></a> </span><span class=cF1>while</span><span class=cF0> (ode!=&amp;task-&gt;next_ode) {
<a name="l674"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>ode-&gt;flags&amp;</span><span class=cF3>ODEF_PAUSED</span><span class=cF7>)</span><span class=cF0> &amp;&amp; ode-&gt;derive) </span><span class=cF7>{</span><span class=cF0>
<a name="l675"></a> </span><span class=cF1>if</span><span class=cF0> (ode-&gt;min_tolerance!=ode-&gt;max_tolerance) {
<a name="l676"></a> </span><span class=cF1>if</span><span class=cF0> (d&gt;0)
<a name="l677"></a> ode-&gt;tolerance_internal*=10.0`d;
<a name="l678"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l679"></a> ode-&gt;tolerance_internal*=2.0`d;
<a name="l680"></a> }
<a name="l681"></a> ode-&gt;tolerance_internal=</span><span class=cF5>Clamp</span><span class=cF0>(ode-&gt;tolerance_internal,
<a name="l682"></a> ode-&gt;min_tolerance,ode-&gt;max_tolerance);
<a name="l683"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l684"></a> ode=ode-&gt;next;
<a name="l685"></a> }
<a name="l686"></a> </span><span class=cFB>winmgr</span><span class=cF0>.ode_time+=task-&gt;last_ode_time=</span><span class=cF5>tS</span><span class=cF0>-start_time;
<a name="l687"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l688"></a>}
</span></pre></body>
</html>

210
public/Wb/Adam/AMem.HC.HTML Executable file
View File

@ -0,0 +1,210 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF0>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Memory/Task&quot;</span><span class=cF0>
<a name="l2"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>TaskMemAlloced</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF1>Bool</span><span class=cF0> override_validate=</span><span class=cF3>FALSE</span><span class=cF0>)
<a name="l3"></a>{</span><span class=cF2>//Count of bytes alloced to a task, used+unused.</span><span class=cF0>
<a name="l4"></a> </span><span class=cF9>I64</span><span class=cF0> res;
<a name="l5"></a> </span><span class=cF1>if</span><span class=cF0> (!task) task=</span><span class=cF5>Fs</span><span class=cF0>;
<a name="l6"></a> </span><span class=cF1>if</span><span class=cF0> (override_validate || </span><span class=cF5>TaskValidate</span><span class=cF7>(</span><span class=cF0>task</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l7"></a> res=task-&gt;code_heap-&gt;alloced_u8s;
<a name="l8"></a> </span><span class=cF1>if</span><span class=cF0> (task-&gt;code_heap!=task-&gt;data_heap)
<a name="l9"></a> res+=task-&gt;data_heap-&gt;alloced_u8s;
<a name="l10"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l11"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l12"></a> </span><span class=cF1>return</span><span class=cF0> 0;
<a name="l13"></a>}
<a name="l14"></a>
<a name="l15"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>TaskMemUsed</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF1>Bool</span><span class=cF0> override_validate=</span><span class=cF3>FALSE</span><span class=cF0>)
<a name="l16"></a>{</span><span class=cF2>//Count of bytes alloced to a task and in use.</span><span class=cF0>
<a name="l17"></a> </span><span class=cF9>I64</span><span class=cF0> res;
<a name="l18"></a> </span><span class=cF1>if</span><span class=cF0> (!task) task=</span><span class=cF5>Fs</span><span class=cF0>;
<a name="l19"></a> </span><span class=cF1>if</span><span class=cF0> (override_validate || </span><span class=cF5>TaskValidate</span><span class=cF7>(</span><span class=cF0>task</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l20"></a> res=task-&gt;code_heap-&gt;used_u8s;
<a name="l21"></a> </span><span class=cF1>if</span><span class=cF0> (task-&gt;data_heap!=task-&gt;code_heap)
<a name="l22"></a> res+=task-&gt;data_heap-&gt;used_u8s;
<a name="l23"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l24"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l25"></a> </span><span class=cF1>return</span><span class=cF0> 0;
<a name="l26"></a>}
<a name="l27"></a>
<a name="l28"></a>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Memory/Task;Debugging/Heap;Memory/Debugging&quot;</span><span class=cF0>
<a name="l29"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>HeapRep</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task)
<a name="l30"></a>{</span><span class=cF2>//Report status of task's heap.</span><span class=cF0>
<a name="l31"></a> </span><span class=cF9>I64</span><span class=cF0> i,cnt;
<a name="l32"></a> </span><span class=cF9>CMemUnused</span><span class=cF0> *uum;
<a name="l33"></a>
<a name="l34"></a> </span><span class=cF1>if</span><span class=cF0> (!task || task==</span><span class=cF5>Fs</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l35"></a> </span><span class=cF6>&quot;Task can't HeapRep on self.\n&quot;</span><span class=cF0>;
<a name="l36"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l37"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l38"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>TaskValidate</span><span class=cF7>(</span><span class=cF0>task</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l39"></a>
<a name="l40"></a> </span><span class=cF1>PUSHFD</span><span class=cF0>
<a name="l41"></a> </span><span class=cF1>CLI</span><span class=cF0>
<a name="l42"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF5>LBts</span><span class=cF7>(</span><span class=cF0>&amp;task-&gt;code_heap-&gt;locked_flags,</span><span class=cF3>HClf_LOCKED</span><span class=cF7>)</span><span class=cF0>)
<a name="l43"></a> </span><span class=cF1>PAUSE</span><span class=cF0>
<a name="l44"></a> </span><span class=cF1>if</span><span class=cF0> (task-&gt;data_heap!=task-&gt;code_heap)
<a name="l45"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF5>LBts</span><span class=cF7>(</span><span class=cF0>&amp;task-&gt;data_heap-&gt;locked_flags,</span><span class=cF3>HClf_LOCKED</span><span class=cF7>)</span><span class=cF0>)
<a name="l46"></a> </span><span class=cF1>PAUSE</span><span class=cF0>
<a name="l47"></a>
<a name="l48"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;</span><span class=cF3>MEM_HEAP_HASH_SIZE</span><span class=cF0>&gt;&gt;3;i++) </span><span class=cF7>{</span><span class=cF0>
<a name="l49"></a> cnt=0;
<a name="l50"></a> uum=task-&gt;code_heap-&gt;heap_hash[i];
<a name="l51"></a> </span><span class=cF1>while</span><span class=cF0> (uum) {
<a name="l52"></a> cnt+=uum-&gt;size;
<a name="l53"></a> uum=uum-&gt;next;
<a name="l54"></a> }
<a name="l55"></a> </span><span class=cF1>if</span><span class=cF0> (task-&gt;data_heap!=task-&gt;code_heap) {
<a name="l56"></a> uum=task-&gt;data_heap-&gt;heap_hash[i];
<a name="l57"></a> </span><span class=cF1>while</span><span class=cF0> (uum) </span><span class=cF7>{</span><span class=cF0>
<a name="l58"></a> cnt+=uum-&gt;size;
<a name="l59"></a> uum=uum-&gt;next;
<a name="l60"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l61"></a> }
<a name="l62"></a> </span><span class=cF1>if</span><span class=cF0> (cnt)
<a name="l63"></a> </span><span class=cF6>&quot;%03X:%08X\n&quot;</span><span class=cF0>,i&lt;&lt;3,cnt;
<a name="l64"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l65"></a> </span><span class=cF6>'\n'</span><span class=cF0>;
<a name="l66"></a>
<a name="l67"></a> uum=task-&gt;code_heap-&gt;malloc_free_lst;
<a name="l68"></a> </span><span class=cF1>while</span><span class=cF0> (uum) </span><span class=cF7>{</span><span class=cF0>
<a name="l69"></a> </span><span class=cF6>&quot;%X, &quot;</span><span class=cF0>,uum-&gt;size;
<a name="l70"></a> uum=uum-&gt;next;
<a name="l71"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l72"></a> </span><span class=cF1>if</span><span class=cF0> (task-&gt;data_heap!=task-&gt;code_heap) </span><span class=cF7>{</span><span class=cF0>
<a name="l73"></a> uum=task-&gt;data_heap-&gt;malloc_free_lst;
<a name="l74"></a> </span><span class=cF1>while</span><span class=cF0> (uum) {
<a name="l75"></a> </span><span class=cF6>&quot;%X, &quot;</span><span class=cF0>,uum-&gt;size;
<a name="l76"></a> uum=uum-&gt;next;
<a name="l77"></a> }
<a name="l78"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l79"></a>
<a name="l80"></a> </span><span class=cF1>if</span><span class=cF0> (task-&gt;data_heap!=task-&gt;code_heap)
<a name="l81"></a> </span><span class=cF5>LBtr</span><span class=cF0>(&amp;task-&gt;data_heap-&gt;locked_flags,</span><span class=cF3>HClf_LOCKED</span><span class=cF0>);
<a name="l82"></a> </span><span class=cF5>LBtr</span><span class=cF0>(&amp;task-&gt;code_heap-&gt;locked_flags,</span><span class=cF3>HClf_LOCKED</span><span class=cF0>);
<a name="l83"></a> </span><span class=cF1>POPFD</span><span class=cF0>
<a name="l84"></a>
<a name="l85"></a> </span><span class=cF6>'\n'</span><span class=cF0>;
<a name="l86"></a>}
<a name="l87"></a>
<a name="l88"></a>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Memory/HeapCtrl;Debugging/Heap;Memory/Debugging&quot;</span><span class=cF0>
<a name="l89"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>IsInHeapCtrl</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *a,</span><span class=cF9>CHeapCtrl</span><span class=cF0> *hc,</span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF1>lock</span><span class=cF0>=</span><span class=cF3>TRUE</span><span class=cF0>)
<a name="l90"></a>{</span><span class=cF2>//Check addr if in HeapCtrl.</span><span class=cF0>
<a name="l91"></a> </span><span class=cF9>CMemBlk</span><span class=cF0> *m;
<a name="l92"></a> </span><span class=cF1>PUSHFD</span><span class=cF0>
<a name="l93"></a> </span><span class=cF1>CLI</span><span class=cF0>
<a name="l94"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF1>lock</span><span class=cF0>)
<a name="l95"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF5>LBts</span><span class=cF7>(</span><span class=cF0>&amp;hc-&gt;locked_flags,</span><span class=cF3>HClf_LOCKED</span><span class=cF7>)</span><span class=cF0>)
<a name="l96"></a> </span><span class=cF1>PAUSE</span><span class=cF0>
<a name="l97"></a> m=hc-&gt;next_mem_blk;
<a name="l98"></a> </span><span class=cF1>while</span><span class=cF0> (m!=&amp;hc-&gt;next_mem_blk) </span><span class=cF7>{</span><span class=cF0>
<a name="l99"></a> </span><span class=cF1>if</span><span class=cF0> (a&gt;=m &amp;&amp; a&lt;m</span><span class=cF7>(</span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>+m-&gt;pags&lt;&lt;</span><span class=cF3>MEM_PAG_BITS</span><span class=cF0>) {
<a name="l100"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF1>lock</span><span class=cF0>)
<a name="l101"></a> </span><span class=cF5>LBtr</span><span class=cF0>(&amp;hc-&gt;locked_flags,</span><span class=cF3>HClf_LOCKED</span><span class=cF0>);
<a name="l102"></a> </span><span class=cF1>POPFD</span><span class=cF0>
<a name="l103"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l104"></a> }
<a name="l105"></a> m=m-&gt;next;
<a name="l106"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l107"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF1>lock</span><span class=cF0>)
<a name="l108"></a> </span><span class=cF5>LBtr</span><span class=cF0>(&amp;hc-&gt;locked_flags,</span><span class=cF3>HClf_LOCKED</span><span class=cF0>);
<a name="l109"></a> </span><span class=cF1>POPFD</span><span class=cF0>
<a name="l110"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l111"></a>}
<a name="l112"></a>
<a name="l113"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>HeapCtrlWalk</span><span class=cF0>(</span><span class=cF9>CHeapCtrl</span><span class=cF0> *hc)
<a name="l114"></a>{</span><span class=cF2>//Check integrity of HeapCtrl.</span><span class=cF0>
<a name="l115"></a> </span><span class=cF9>I64</span><span class=cF0> i;
<a name="l116"></a> </span><span class=cF9>CMemUnused</span><span class=cF0> *uum;
<a name="l117"></a>
<a name="l118"></a> </span><span class=cF1>PUSHFD</span><span class=cF0>
<a name="l119"></a> </span><span class=cF1>CLI</span><span class=cF0>
<a name="l120"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF5>LBts</span><span class=cF7>(</span><span class=cF0>&amp;hc-&gt;locked_flags,</span><span class=cF3>HClf_LOCKED</span><span class=cF7>)</span><span class=cF0>)
<a name="l121"></a> </span><span class=cF1>PAUSE</span><span class=cF0>
<a name="l122"></a>
<a name="l123"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;</span><span class=cF3>MEM_HEAP_HASH_SIZE</span><span class=cF0>&gt;&gt;3;i++) </span><span class=cF7>{</span><span class=cF0>
<a name="l124"></a> uum=hc-&gt;heap_hash[i];
<a name="l125"></a> </span><span class=cF1>while</span><span class=cF0> (uum) {
<a name="l126"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>IsInHeapCtrl</span><span class=cF7>(</span><span class=cF0>uum,hc,</span><span class=cF3>FALSE</span><span class=cF7>)</span><span class=cF0>)
<a name="l127"></a> </span><span class=cF1>goto</span><span class=cF0> hc_false;
<a name="l128"></a> uum=uum-&gt;next;
<a name="l129"></a> }
<a name="l130"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l131"></a> uum=hc-&gt;malloc_free_lst;
<a name="l132"></a> </span><span class=cF1>while</span><span class=cF0> (uum) </span><span class=cF7>{</span><span class=cF0>
<a name="l133"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>IsInHeapCtrl</span><span class=cF7>(</span><span class=cF0>uum,hc,</span><span class=cF3>FALSE</span><span class=cF7>)</span><span class=cF0>)
<a name="l134"></a> </span><span class=cF1>goto</span><span class=cF0> hc_false;
<a name="l135"></a> uum=uum-&gt;next;
<a name="l136"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l137"></a>
<a name="l138"></a> #</span><span class=cF1>if</span><span class=cF0> </span><span class=cF3>_CFG_HEAP_DBG</span><span class=cF0>
<a name="l139"></a> </span><span class=cF9>CMemUsed</span><span class=cF0> *um,*um1;
<a name="l140"></a> um1=(&amp;hc-&gt;next_um)(</span><span class=cF1>U8</span><span class=cF0> *)-</span><span class=cF1>offset</span><span class=cF0>(</span><span class=cF9>CMemUsed</span><span class=cF0>.next);
<a name="l141"></a> um=um1-&gt;next;
<a name="l142"></a> </span><span class=cF1>while</span><span class=cF0> (um!=um1) </span><span class=cF7>{</span><span class=cF0>
<a name="l143"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>IsInHeapCtrl</span><span class=cF7>(</span><span class=cF0>um,hc,</span><span class=cF3>FALSE</span><span class=cF7>)</span><span class=cF0>)
<a name="l144"></a> </span><span class=cF1>goto</span><span class=cF0> hc_false;
<a name="l145"></a> um=um-&gt;next;
<a name="l146"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l147"></a>#</span><span class=cF1>endif</span><span class=cF0>
<a name="l148"></a>
<a name="l149"></a> </span><span class=cF5>LBtr</span><span class=cF0>(&amp;hc-&gt;locked_flags,</span><span class=cF3>HClf_LOCKED</span><span class=cF0>);
<a name="l150"></a> </span><span class=cF1>POPFD</span><span class=cF0>
<a name="l151"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l152"></a>
<a name="l153"></a> hc_false:
<a name="l154"></a> </span><span class=cF5>LBtr</span><span class=cF0>(&amp;hc-&gt;locked_flags,</span><span class=cF3>HClf_LOCKED</span><span class=cF0>);
<a name="l155"></a> </span><span class=cF1>POPFD</span><span class=cF0>
<a name="l156"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l157"></a>}
<a name="l158"></a>
<a name="l159"></a>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Memory/Task;Debugging/Heap;Memory/Debugging&quot;</span><span class=cF0>
<a name="l160"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>IsInHeap</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *a,</span><span class=cF9>CTask</span><span class=cF0> *task=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF1>lock</span><span class=cF0>=</span><span class=cF3>TRUE</span><span class=cF0>)
<a name="l161"></a>{</span><span class=cF2>//Check addr if in task's heaps.</span><span class=cF0>
<a name="l162"></a> </span><span class=cF1>if</span><span class=cF0> (!task) task=</span><span class=cF5>Fs</span><span class=cF0>;
<a name="l163"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>TaskValidate</span><span class=cF7>(</span><span class=cF0>task</span><span class=cF7>)</span><span class=cF0> &amp;&amp; </span><span class=cF7>(</span><span class=cF5>IsInHeapCtrl</span><span class=cF0>(a,task-&gt;code_heap,</span><span class=cF1>lock</span><span class=cF0>)||
<a name="l164"></a> task-&gt;data_heap!=task-&gt;code_heap &amp;&amp;
<a name="l165"></a> </span><span class=cF5>IsInHeapCtrl</span><span class=cF0>(a,task-&gt;data_heap,</span><span class=cF1>lock</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0>)
<a name="l166"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l167"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l168"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l169"></a>}
<a name="l170"></a>
<a name="l171"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>HeapWalk</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task=</span><span class=cF3>NULL</span><span class=cF0>)
<a name="l172"></a>{</span><span class=cF2>//Check integrity of task's heaps.</span><span class=cF0>
<a name="l173"></a> </span><span class=cF1>if</span><span class=cF0> (!task) task=</span><span class=cF5>Fs</span><span class=cF0>;
<a name="l174"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>TaskValidate</span><span class=cF7>(</span><span class=cF0>task</span><span class=cF7>)</span><span class=cF0> || !</span><span class=cF5>HeapCtrlWalk</span><span class=cF7>(</span><span class=cF0>task-&gt;code_heap</span><span class=cF7>)</span><span class=cF0> ||
<a name="l175"></a> task-&gt;data_heap!=task-&gt;code_heap &amp;&amp; !</span><span class=cF5>HeapCtrlWalk</span><span class=cF7>(</span><span class=cF0>task-&gt;data_heap</span><span class=cF7>)</span><span class=cF0>)
<a name="l176"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l177"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l178"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l179"></a>}
</span></pre></body>
</html>

51
public/Wb/Adam/AMouse.HC.HTML Executable file
View File

@ -0,0 +1,51 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF0>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Graphics/Misc;Mouse/Ptr&quot;</span><span class=cF0>
<a name="l2"></a></span><span class=cFA>
<a name="l3"></a>&lt;1&gt;/* Graphics Not Rendered in HTML */</span><span class=cF0>
<a name="l4"></a>
<a name="l5"></a></span><span class=cFB>gr</span><span class=cF0>.empty_sprite=</span><span class=cFA>&lt;1&gt;</span><span class=cF0>;
<a name="l6"></a></span><span class=cFA>
<a name="l7"></a>&lt;2&gt;/* Graphics Not Rendered in HTML */</span><span class=cF0>
<a name="l8"></a></span><span class=cFA>
<a name="l9"></a>&lt;3&gt;/* Graphics Not Rendered in HTML */</span><span class=cF0>
<a name="l10"></a>
<a name="l11"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DrawGrabMs</span><span class=cF0>(</span><span class=cF9>CDC</span><span class=cF0> *dc,</span><span class=cF9>I64</span><span class=cF0> x,</span><span class=cF9>I64</span><span class=cF0> y,</span><span class=cF1>Bool</span><span class=cF0> closed)
<a name="l12"></a>{</span><span class=cF2>//This is a callback. See </span><a href="/Wb/Demo/Graphics/Grid.HC.HTML#l1"><span class=cF4>::/Demo/Graphics/Grid.HC</span></a><span class=cF2>.</span><span class=cF0>
<a name="l13"></a> dc-&gt;flags&amp;=~(</span><span class=cF3>DCF_TRANSFORMATION</span><span class=cF0>|</span><span class=cF3>DCF_SYMMETRY</span><span class=cF0>);
<a name="l14"></a> dc-&gt;color=</span><span class=cF3>ROP_EQU</span><span class=cF0>;
<a name="l15"></a> </span><span class=cF1>if</span><span class=cF0> (closed)
<a name="l16"></a> </span><span class=cF5>Sprite3</span><span class=cF0>(dc,x,y,0,</span><span class=cFA>&lt;2&gt;</span><span class=cF0>);
<a name="l17"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l18"></a> </span><span class=cF5>Sprite3</span><span class=cF0>(dc,x,y,0,</span><span class=cFA>&lt;3&gt;</span><span class=cF0>);
<a name="l19"></a>}
<a name="l20"></a></span><span class=cFB>gr</span><span class=cF0>.fp_draw_grab_ms=&amp;</span><span class=cF5>DrawGrabMs</span><span class=cF0>;
</span></pre></body>
</html>

234
public/Wb/Adam/ARegistry.HC.HTML Executable file
View File

@ -0,0 +1,234 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF0>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Registry&quot;</span><span class=cF0>
<a name="l2"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>REGISTRY_FILENAME</span><span class=cF0> </span><span class=cF6>&quot;~/Registry.HC.Z&quot;</span><span class=cF0>
<a name="l3"></a></span><span class=cF9>CDoc</span><span class=cF0> *</span><span class=cFB>sys_registry_doc</span><span class=cF0>=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l4"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cFB>sys_msg_flags</span><span class=cF0>[1]={0};
<a name="l5"></a></span><span class=cF1>F64</span><span class=cF0> </span><span class=cFB>registry_version</span><span class=cF0>;
<a name="l6"></a>
<a name="l7"></a></span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>RegCache</span><span class=cF0>()
<a name="l8"></a>{
<a name="l9"></a> </span><span class=cF1>Bool</span><span class=cF0> old_silent;
<a name="l10"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cFB>sys_registry_doc</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l11"></a> old_silent=</span><span class=cF5>Silent</span><span class=cF0>;
<a name="l12"></a> </span><span class=cFB>sys_registry_doc</span><span class=cF0>=</span><span class=cF5>DocRead</span><span class=cF0>(</span><span class=cF3>REGISTRY_FILENAME</span><span class=cF0>);
<a name="l13"></a> </span><span class=cF5>Silent</span><span class=cF0>(old_silent);
<a name="l14"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l15"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l16"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l17"></a>}
<a name="l18"></a>
<a name="l19"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>RegDft</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *path,</span><span class=cF1>U8</span><span class=cF0> *val,</span><span class=cF1>Bool</span><span class=cF0> is_adam_entry=</span><span class=cF3>FALSE</span><span class=cF0>)
<a name="l20"></a>{</span><span class=cF2>//Add code doc tree branch to registry.</span><span class=cF0>
<a name="l21"></a> </span><span class=cF1>Bool</span><span class=cF0> res,unlock_doc;
<a name="l22"></a> </span><span class=cF5>RegCache</span><span class=cF0>;
<a name="l23"></a> unlock_doc=</span><span class=cF5>DocLock</span><span class=cF0>(</span><span class=cFB>sys_registry_doc</span><span class=cF0>);
<a name="l24"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>DocTreeFind</span><span class=cF7>(</span><span class=cFB>sys_registry_doc</span><span class=cF0>,path</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l25"></a> </span><span class=cF5>DocTreeMake</span><span class=cF0>(</span><span class=cFB>sys_registry_doc</span><span class=cF0>,path);
<a name="l26"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(</span><span class=cFB>sys_registry_doc</span><span class=cF0>,</span><span class=cF6>&quot;%s&quot;</span><span class=cF0>,val);
<a name="l27"></a> </span><span class=cF1>if</span><span class=cF0> (is_adam_entry) {
<a name="l28"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Fs</span><span class=cF0>==</span><span class=cFB>adam_task</span><span class=cF0>)
<a name="l29"></a> </span><span class=cF5>ExePrint</span><span class=cF0>(</span><span class=cF6>&quot;%s&quot;</span><span class=cF0>,val);
<a name="l30"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l31"></a> </span><span class=cF5>Adam</span><span class=cF0>(</span><span class=cF6>&quot;%s&quot;</span><span class=cF0>,val);
<a name="l32"></a> }
<a name="l33"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>DrvIsWritable</span><span class=cF7>(</span><span class=cF0>*</span><span class=cFB>sys_registry_doc</span><span class=cF0>-&gt;filename.name</span><span class=cF7>)</span><span class=cF0>)
<a name="l34"></a> </span><span class=cF5>DocWrite</span><span class=cF0>(</span><span class=cFB>sys_registry_doc</span><span class=cF0>);
<a name="l35"></a> res=</span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l36"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l37"></a> res=</span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l38"></a> </span><span class=cF1>if</span><span class=cF0> (unlock_doc)
<a name="l39"></a> </span><span class=cF5>DocUnlock</span><span class=cF0>(</span><span class=cFB>sys_registry_doc</span><span class=cF0>);
<a name="l40"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l41"></a>}
<a name="l42"></a>
<a name="l43"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>RegExe</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *path)
<a name="l44"></a>{</span><span class=cF2>//Execute doc tree branch in registry.</span><span class=cF0>
<a name="l45"></a> </span><span class=cF5>RegCache</span><span class=cF0>;
<a name="l46"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF5>DocTreeExe</span><span class=cF0>(</span><span class=cFB>sys_registry_doc</span><span class=cF0>,path);
<a name="l47"></a>}
<a name="l48"></a>
<a name="l49"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>RegWrite</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *path,</span><span class=cF1>U8</span><span class=cF0> *fmt,...)
<a name="l50"></a>{</span><span class=cF2>//Rewrite doc tree branch in registry.</span><span class=cF0>
<a name="l51"></a> </span><span class=cF1>Bool</span><span class=cF0> res;
<a name="l52"></a> </span><span class=cF5>RegCache</span><span class=cF0>;
<a name="l53"></a> res=</span><span class=cF5>DocTreeWriteJoin</span><span class=cF0>(</span><span class=cFB>sys_registry_doc</span><span class=cF0>,path,</span><span class=cF3>TRUE</span><span class=cF0>,fmt,argc,argv);
<a name="l54"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l55"></a>}
<a name="l56"></a>
<a name="l57"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>RegCnt</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *path)
<a name="l58"></a>{</span><span class=cF2>//Tree branch cnt in registry.</span><span class=cF0>
<a name="l59"></a> </span><span class=cF9>I64</span><span class=cF0> res=0;
<a name="l60"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *tree_branch,*start_indent,*end_indent;
<a name="l61"></a> </span><span class=cF1>Bool</span><span class=cF0> unlock_doc=</span><span class=cF5>DocLock</span><span class=cF0>(</span><span class=cFB>sys_registry_doc</span><span class=cF0>);
<a name="l62"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>DocTreeFind</span><span class=cF7>(</span><span class=cFB>sys_registry_doc</span><span class=cF0>,path,
<a name="l63"></a> &amp;tree_branch,&amp;start_indent,&amp;end_indent</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l64"></a> end_indent=end_indent-&gt;next;
<a name="l65"></a> </span><span class=cF1>while</span><span class=cF0> (start_indent!=end_indent) {
<a name="l66"></a> res++;
<a name="l67"></a> start_indent=start_indent-&gt;next;
<a name="l68"></a> }
<a name="l69"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l70"></a> </span><span class=cF1>if</span><span class=cF0> (unlock_doc)
<a name="l71"></a> </span><span class=cF5>DocUnlock</span><span class=cF0>(</span><span class=cFB>sys_registry_doc</span><span class=cF0>);
<a name="l72"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l73"></a>}
<a name="l74"></a>
<a name="l75"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>RegAppend</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *path,</span><span class=cF1>U8</span><span class=cF0> *fmt,...)
<a name="l76"></a>{</span><span class=cF2>//Append to doc tree branch in registry.</span><span class=cF0>
<a name="l77"></a> </span><span class=cF1>Bool</span><span class=cF0> res;
<a name="l78"></a> </span><span class=cF5>RegCache</span><span class=cF0>;
<a name="l79"></a> res=</span><span class=cF5>DocTreeAppendJoin</span><span class=cF0>(</span><span class=cFB>sys_registry_doc</span><span class=cF0>,path,</span><span class=cF3>TRUE</span><span class=cF0>,fmt,argc,argv);
<a name="l80"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l81"></a>}
<a name="l82"></a>
<a name="l83"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>OneTimePopUp</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *_flags,</span><span class=cF9>I64</span><span class=cF0> flag_num,</span><span class=cF1>U8</span><span class=cF0> *msg)
<a name="l84"></a>{</span><span class=cF2>//See </span><a href="/Wb/Apps/X-Caliber/X-Caliber.HC.HTML#l1"><span class=cF4>::/Apps/X-Caliber/X-Caliber.HC</span></a><span class=cF2>.</span><span class=cF0>
<a name="l85"></a> </span><span class=cF1>Bool</span><span class=cF0> res=</span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l86"></a> </span><span class=cF9>CDoc</span><span class=cF0> *doc=</span><span class=cF5>DocNew</span><span class=cF0>;
<a name="l87"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_e;
<a name="l88"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>_flags,flag_num</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l89"></a> </span><span class=cF1>if</span><span class=cF0> (msg) </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;%s&quot;</span><span class=cF0>,msg);
<a name="l90"></a> doc_e=</span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;\n$CB,\&quot;Do not show this msg again.\&quot;,LE=1$&quot;</span><span class=cF0>);
<a name="l91"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$CM+CX,0,4$$BT,\&quot;OKAY\&quot;,LE=1$\n&quot;</span><span class=cF0>);
<a name="l92"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>PopUpMenu</span><span class=cF7>(</span><span class=cF0>doc</span><span class=cF7>)</span><span class=cF0>==1 &amp;&amp; doc_e-&gt;de_flags&amp;</span><span class=cF3>DOCEF_CHECKED_COLLAPSED</span><span class=cF0>) {
<a name="l93"></a> </span><span class=cF5>LBts</span><span class=cF0>(_flags,flag_num);
<a name="l94"></a> res=</span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l95"></a> }
<a name="l96"></a> </span><span class=cF5>DocDel</span><span class=cF0>(doc);
<a name="l97"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l98"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l99"></a>}
<a name="l100"></a>
<a name="l101"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>RegOneTimePopUp</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> flag_num,</span><span class=cF1>U8</span><span class=cF0> *msg)
<a name="l102"></a>{</span><span class=cF2>//You're not supposed to make system pop-up flags, only me.</span><span class=cF0>
<a name="l103"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>OneTimePopUp</span><span class=cF7>(</span><span class=cFB>sys_msg_flags</span><span class=cF0>,flag_num,msg</span><span class=cF7>)</span><span class=cF0>)
<a name="l104"></a> </span><span class=cF5>RegWrite</span><span class=cF0>(</span><span class=cF6>&quot;Adam/SysMsgFlags&quot;</span><span class=cF0>,</span><span class=cF6>&quot;sys_msg_flags[0]=0x%X;\n&quot;</span><span class=cF0>,
<a name="l105"></a> </span><span class=cFB>sys_msg_flags</span><span class=cF0>[0]);
<a name="l106"></a>}
<a name="l107"></a>
<a name="l108"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>RegInit</span><span class=cF0>()
<a name="l109"></a>{
<a name="l110"></a> </span><span class=cF1>U8</span><span class=cF0> buf[</span><span class=cF3>STR_LEN</span><span class=cF0>];
<a name="l111"></a> </span><span class=cF1>Bool</span><span class=cF0> version_present;
<a name="l112"></a> </span><span class=cF5>RegDft</span><span class=cF0>(</span><span class=cF6>&quot;Adam/SysMsgFlags&quot;</span><span class=cF0>,</span><span class=cF6>&quot;sys_msg_flags[0]=0;\n&quot;</span><span class=cF0>,</span><span class=cF3>TRUE</span><span class=cF0>);
<a name="l113"></a> </span><span class=cF5>StrPrint</span><span class=cF0>(buf,</span><span class=cF6>&quot;registry_version=%4.3f;\n&quot;</span><span class=cF0>,</span><span class=cFB>sys_os_version</span><span class=cF0>);
<a name="l114"></a> version_present=</span><span class=cF5>RegDft</span><span class=cF0>(</span><span class=cF6>&quot;Adam/SysRegVer&quot;</span><span class=cF0>,buf,</span><span class=cF3>TRUE</span><span class=cF0>);
<a name="l115"></a> </span><span class=cF5>RegExe</span><span class=cF0>(</span><span class=cF6>&quot;Adam&quot;</span><span class=cF0>);
<a name="l116"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cFB>registry_version</span><span class=cF0>!=</span><span class=cFB>sys_os_version</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l117"></a> </span><span class=cF5>RegWrite</span><span class=cF0>(</span><span class=cF6>&quot;Adam/SysRegVer&quot;</span><span class=cF0>,buf);
<a name="l118"></a> </span><span class=cF5>RegExe</span><span class=cF0>(</span><span class=cF6>&quot;Adam&quot;</span><span class=cF0>);
<a name="l119"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l120"></a>}
<a name="l121"></a>
<a name="l122"></a>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Boot/Once;Registry/Once&quot;</span><span class=cF0>
<a name="l123"></a>#</span><span class=cF1>help_file</span><span class=cF0> </span><span class=cF6>&quot;::/Doc/Once&quot;</span><span class=cF0>
<a name="l124"></a>
<a name="l125"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>AOnceFlush</span><span class=cF0>()
<a name="l126"></a>{</span><span class=cF2>//Flush AOnce() buf.</span><span class=cF0>
<a name="l127"></a> </span><span class=cF5>RegWrite</span><span class=cF0>(</span><span class=cF6>&quot;Once/Adam&quot;</span><span class=cF0>,</span><span class=cF6>&quot;&quot;</span><span class=cF0>);
<a name="l128"></a>}
<a name="l129"></a>
<a name="l130"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>OnceFlush</span><span class=cF0>()
<a name="l131"></a>{</span><span class=cF2>//Flush Once() buf.</span><span class=cF0>
<a name="l132"></a> </span><span class=cF5>RegWrite</span><span class=cF0>(</span><span class=cF6>&quot;Once/User&quot;</span><span class=cF0>,</span><span class=cF6>&quot;&quot;</span><span class=cF0>);
<a name="l133"></a>}
<a name="l134"></a>
<a name="l135"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>AOnce</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *fmt,...)
<a name="l136"></a>{</span><span class=cF2>//Add Adam code to </span><a href="/Wb/Home/Registry.HC.HTML#l1"><span class=cF4>~/Registry.HC</span></a><span class=cF2>, executed next boot.</span><span class=cF0>
<a name="l137"></a> </span><span class=cF1>U8</span><span class=cF0> *buf=</span><span class=cF5>StrPrintJoin</span><span class=cF0>(</span><span class=cF3>NULL</span><span class=cF0>,fmt,argc,argv);
<a name="l138"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&amp;</span><span class=cFB>sys_run_level</span><span class=cF0>,</span><span class=cF3>RLf_ONCE_ADAM</span><span class=cF7>)</span><span class=cF0>)
<a name="l139"></a> </span><span class=cF5>AOnceFlush</span><span class=cF0>;
<a name="l140"></a> </span><span class=cF5>RegAppend</span><span class=cF0>(</span><span class=cF6>&quot;Once/Adam&quot;</span><span class=cF0>,</span><span class=cF6>&quot;%s\n&quot;</span><span class=cF0>,buf);
<a name="l141"></a> </span><span class=cF5>Free</span><span class=cF0>(buf);
<a name="l142"></a>}
<a name="l143"></a>
<a name="l144"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>Once</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *fmt,...)
<a name="l145"></a>{</span><span class=cF2>//Add User code to </span><a href="/Wb/Home/Registry.HC.HTML#l1"><span class=cF4>~/Registry.HC</span></a><span class=cF2>, executed next boot.</span><span class=cF0>
<a name="l146"></a> </span><span class=cF1>U8</span><span class=cF0> *buf=</span><span class=cF5>StrPrintJoin</span><span class=cF0>(</span><span class=cF3>NULL</span><span class=cF0>,fmt,argc,argv);
<a name="l147"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&amp;</span><span class=cFB>sys_run_level</span><span class=cF0>,</span><span class=cF3>RLf_ONCE_USER</span><span class=cF7>)</span><span class=cF0>)
<a name="l148"></a> </span><span class=cF5>OnceFlush</span><span class=cF0>;
<a name="l149"></a> </span><span class=cF5>RegAppend</span><span class=cF0>(</span><span class=cF6>&quot;Once/User&quot;</span><span class=cF0>,</span><span class=cF6>&quot;%s\n&quot;</span><span class=cF0>,buf);
<a name="l150"></a> </span><span class=cF5>Free</span><span class=cF0>(buf);
<a name="l151"></a>}
<a name="l152"></a>
<a name="l153"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>AOnceDrv</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> drv_let=0,</span><span class=cF1>U8</span><span class=cF0> *fmt,...)
<a name="l154"></a>{</span><span class=cF2>//Add Adam code to drv </span><a href="/Wb/Home/Registry.HC.HTML#l1"><span class=cF4>~/Registry.HC</span></a><span class=cF2>, executed next boot.</span><span class=cF0>
<a name="l155"></a> </span><span class=cF1>U8</span><span class=cF0> *buf=</span><span class=cF5>StrPrintJoin</span><span class=cF0>(</span><span class=cF3>NULL</span><span class=cF0>,fmt,argc,argv);
<a name="l156"></a> </span><span class=cF9>I64</span><span class=cF0> old_drv_let=*</span><span class=cFB>sys_registry_doc</span><span class=cF0>-&gt;filename.name;
<a name="l157"></a> </span><span class=cF1>if</span><span class=cF0> (drv_let)
<a name="l158"></a> *</span><span class=cFB>sys_registry_doc</span><span class=cF0>-&gt;filename.name=drv_let;
<a name="l159"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&amp;</span><span class=cFB>sys_run_level</span><span class=cF0>,</span><span class=cF3>RLf_ONCE_ADAM</span><span class=cF7>)</span><span class=cF0>)
<a name="l160"></a> </span><span class=cF5>AOnceFlush</span><span class=cF0>;
<a name="l161"></a> </span><span class=cF5>RegAppend</span><span class=cF0>(</span><span class=cF6>&quot;Once/Adam&quot;</span><span class=cF0>,</span><span class=cF6>&quot;%s\n&quot;</span><span class=cF0>,buf);
<a name="l162"></a> </span><span class=cF5>Free</span><span class=cF0>(buf);
<a name="l163"></a> *</span><span class=cFB>sys_registry_doc</span><span class=cF0>-&gt;filename.name=old_drv_let;
<a name="l164"></a>}
<a name="l165"></a>
<a name="l166"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>OnceDrv</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> drv_let=0,</span><span class=cF1>U8</span><span class=cF0> *fmt,...)
<a name="l167"></a>{</span><span class=cF2>//Add User code to drv </span><a href="/Wb/Home/Registry.HC.HTML#l1"><span class=cF4>~/Registry.HC</span></a><span class=cF2>, executed next boot.</span><span class=cF0>
<a name="l168"></a> </span><span class=cF1>U8</span><span class=cF0> *buf=</span><span class=cF5>StrPrintJoin</span><span class=cF0>(</span><span class=cF3>NULL</span><span class=cF0>,fmt,argc,argv);
<a name="l169"></a> </span><span class=cF9>I64</span><span class=cF0> old_drv_let=*</span><span class=cFB>sys_registry_doc</span><span class=cF0>-&gt;filename.name;
<a name="l170"></a> </span><span class=cF1>if</span><span class=cF0> (drv_let)
<a name="l171"></a> *</span><span class=cFB>sys_registry_doc</span><span class=cF0>-&gt;filename.name=drv_let;
<a name="l172"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&amp;</span><span class=cFB>sys_run_level</span><span class=cF0>,</span><span class=cF3>RLf_ONCE_USER</span><span class=cF7>)</span><span class=cF0>)
<a name="l173"></a> </span><span class=cF5>OnceFlush</span><span class=cF0>;
<a name="l174"></a> </span><span class=cF5>RegAppend</span><span class=cF0>(</span><span class=cF6>&quot;Once/User&quot;</span><span class=cF0>,</span><span class=cF6>&quot;%s\n&quot;</span><span class=cF0>,buf);
<a name="l175"></a> </span><span class=cF5>Free</span><span class=cF0>(buf);
<a name="l176"></a> *</span><span class=cFB>sys_registry_doc</span><span class=cF0>-&gt;filename.name=old_drv_let;
<a name="l177"></a>}
<a name="l178"></a>
<a name="l179"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>OnceExe</span><span class=cF0>()
<a name="l180"></a>{</span><span class=cF2>//Execute Once code. Call goes in </span><a href="/Wb/Home/Once..HTML#l1"><span class=cF4>~/Once.HC</span></a><span class=cF2>.</span><span class=cF0>
<a name="l181"></a> </span><span class=cF1>try</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l182"></a>
<a name="l183"></a> </span><span class=cF5>RegDft</span><span class=cF0>(</span><span class=cF6>&quot;Once/Adam&quot;</span><span class=cF0>,</span><span class=cF6>&quot;&quot;</span><span class=cF0>);
<a name="l184"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>RegCnt</span><span class=cF7>(</span><span class=cF6>&quot;Once/Adam&quot;</span><span class=cF7>)</span><span class=cF0>&gt;2) {
<a name="l185"></a> </span><span class=cF5>Adam</span><span class=cF0>(</span><span class=cF6>&quot;RegExe(\&quot;Once/Adam\&quot;);&quot;</span><span class=cF0>);
<a name="l186"></a> </span><span class=cF5>AOnceFlush</span><span class=cF0>;
<a name="l187"></a> }
<a name="l188"></a> </span><span class=cF5>LBts</span><span class=cF0>(&amp;</span><span class=cFB>sys_run_level</span><span class=cF0>,</span><span class=cF3>RLf_ONCE_ADAM</span><span class=cF0>);
<a name="l189"></a>
<a name="l190"></a> </span><span class=cF5>RegDft</span><span class=cF0>(</span><span class=cF6>&quot;Once/User&quot;</span><span class=cF0>,</span><span class=cF6>&quot;&quot;</span><span class=cF0>);
<a name="l191"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>RegCnt</span><span class=cF7>(</span><span class=cF6>&quot;Once/User&quot;</span><span class=cF7>)</span><span class=cF0>&gt;2) {
<a name="l192"></a> </span><span class=cF5>RegExe</span><span class=cF0>(</span><span class=cF6>&quot;Once/User&quot;</span><span class=cF0>);
<a name="l193"></a> </span><span class=cF5>OnceFlush</span><span class=cF0>;
<a name="l194"></a> }
<a name="l195"></a> </span><span class=cF5>LBts</span><span class=cF0>(&amp;</span><span class=cFB>sys_run_level</span><span class=cF0>,</span><span class=cF3>RLf_ONCE_USER</span><span class=cF0>);
<a name="l196"></a>
<a name="l197"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>catch</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l198"></a> </span><span class=cF5>AOnceFlush</span><span class=cF0>;
<a name="l199"></a> </span><span class=cF5>LBts</span><span class=cF0>(&amp;</span><span class=cFB>sys_run_level</span><span class=cF0>,</span><span class=cF3>RLf_ONCE_ADAM</span><span class=cF0>);
<a name="l200"></a> </span><span class=cF5>OnceFlush</span><span class=cF0>;
<a name="l201"></a> </span><span class=cF5>LBts</span><span class=cF0>(&amp;</span><span class=cFB>sys_run_level</span><span class=cF0>,</span><span class=cF3>RLf_ONCE_USER</span><span class=cF0>);
<a name="l202"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l203"></a>}
</span></pre></body>
</html>

440
public/Wb/Adam/ASnd.HC.HTML Executable file
View File

@ -0,0 +1,440 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF0>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Snd&quot;</span><span class=cF0>
<a name="l2"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>SndTaskEndCB</span><span class=cF0>()
<a name="l3"></a>{</span><span class=cF2>//Will turn-off snd when a task gets killed.</span><span class=cF0>
<a name="l4"></a> </span><span class=cF5>Snd</span><span class=cF0>;
<a name="l5"></a> </span><span class=cF5>Exit</span><span class=cF0>;
<a name="l6"></a>}
<a name="l7"></a>
<a name="l8"></a>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Snd/Math;Math&quot;</span><span class=cF0>
<a name="l9"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>F64</span><span class=cF0> </span><span class=cF5>Saw</span><span class=cF0>(</span><span class=cF1>F64</span><span class=cF0> t,</span><span class=cF1>F64</span><span class=cF0> period)
<a name="l10"></a>{</span><span class=cF2>//Sawtooth. 0.0 - 1.0 think &quot;(Sin+1)/2&quot;</span><span class=cF0>
<a name="l11"></a> </span><span class=cF1>if</span><span class=cF0> (period) </span><span class=cF7>{</span><span class=cF0>
<a name="l12"></a> </span><span class=cF1>if</span><span class=cF0> (t&gt;=0.0)
<a name="l13"></a> </span><span class=cF1>return</span><span class=cF0> t%period/period;
<a name="l14"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l15"></a> </span><span class=cF1>return</span><span class=cF0> 1.0+t%period/period;
<a name="l16"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l17"></a> </span><span class=cF1>return</span><span class=cF0> 0.0;
<a name="l18"></a>}
<a name="l19"></a>
<a name="l20"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>F64</span><span class=cF0> </span><span class=cF5>FullSaw</span><span class=cF0>(</span><span class=cF1>F64</span><span class=cF0> t,</span><span class=cF1>F64</span><span class=cF0> period)
<a name="l21"></a>{</span><span class=cF2>//Plus&amp;Minus Sawtooth. 1.0 - -1.0 think &quot;Sin&quot;</span><span class=cF0>
<a name="l22"></a> </span><span class=cF1>if</span><span class=cF0> (period) </span><span class=cF7>{</span><span class=cF0>
<a name="l23"></a> </span><span class=cF1>if</span><span class=cF0> (t&gt;=0.0)
<a name="l24"></a> </span><span class=cF1>return</span><span class=cF0> 2.0*(t%period/period)-1.0;
<a name="l25"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l26"></a> </span><span class=cF1>return</span><span class=cF0> 2.0*(t%period/period)+1.0;
<a name="l27"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l28"></a> </span><span class=cF1>return</span><span class=cF0> 0.0;
<a name="l29"></a>}
<a name="l30"></a>
<a name="l31"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>F64</span><span class=cF0> </span><span class=cF5>Caw</span><span class=cF0>(</span><span class=cF1>F64</span><span class=cF0> t,</span><span class=cF1>F64</span><span class=cF0> period)
<a name="l32"></a>{</span><span class=cF2>//Cawtooth. 1.0 - 0.0 think &quot;(Cos+1)/2&quot;</span><span class=cF0>
<a name="l33"></a> </span><span class=cF1>if</span><span class=cF0> (period) </span><span class=cF7>{</span><span class=cF0>
<a name="l34"></a> </span><span class=cF1>if</span><span class=cF0> (t&gt;=0.0)
<a name="l35"></a> </span><span class=cF1>return</span><span class=cF0> 1.0-t%period/period;
<a name="l36"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l37"></a> </span><span class=cF1>return</span><span class=cF0> -(t%period)/period;
<a name="l38"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l39"></a> </span><span class=cF1>return</span><span class=cF0> 1.0;
<a name="l40"></a>}
<a name="l41"></a>
<a name="l42"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>F64</span><span class=cF0> </span><span class=cF5>FullCaw</span><span class=cF0>(</span><span class=cF1>F64</span><span class=cF0> t,</span><span class=cF1>F64</span><span class=cF0> period)
<a name="l43"></a>{</span><span class=cF2>//Plus&amp;Minus Cawtooth. 1.0 - -1.0 think &quot;Cos&quot;</span><span class=cF0>
<a name="l44"></a> </span><span class=cF1>if</span><span class=cF0> (period) </span><span class=cF7>{</span><span class=cF0>
<a name="l45"></a> </span><span class=cF1>if</span><span class=cF0> (t&gt;=0.0)
<a name="l46"></a> </span><span class=cF1>return</span><span class=cF0> -2.0*(t%period/period)+1.0;
<a name="l47"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l48"></a> </span><span class=cF1>return</span><span class=cF0> -2.0*(t%period/period)-1.0;
<a name="l49"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l50"></a> </span><span class=cF1>return</span><span class=cF0> 1.0;
<a name="l51"></a>}
<a name="l52"></a>
<a name="l53"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>F64</span><span class=cF0> </span><span class=cF5>Tri</span><span class=cF0>(</span><span class=cF1>F64</span><span class=cF0> t,</span><span class=cF1>F64</span><span class=cF0> period)
<a name="l54"></a>{</span><span class=cF2>//Triangle waveform. 0.0 - 1.0 - 0.0</span><span class=cF0>
<a name="l55"></a> </span><span class=cF1>if</span><span class=cF0> (period) </span><span class=cF7>{</span><span class=cF0>
<a name="l56"></a> t=2.0*(</span><span class=cF5>Abs</span><span class=cF7>(</span><span class=cF0>t</span><span class=cF7>)</span><span class=cF0>%period)/period;
<a name="l57"></a> </span><span class=cF1>if</span><span class=cF0> (t&lt;=1.0)
<a name="l58"></a> </span><span class=cF1>return</span><span class=cF0> t;
<a name="l59"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l60"></a> </span><span class=cF1>return</span><span class=cF0> 2.0-t;
<a name="l61"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l62"></a> </span><span class=cF1>return</span><span class=cF0> 0.0;
<a name="l63"></a>}
<a name="l64"></a>
<a name="l65"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>F64</span><span class=cF0> </span><span class=cF5>FullTri</span><span class=cF0>(</span><span class=cF1>F64</span><span class=cF0> t,</span><span class=cF1>F64</span><span class=cF0> period)
<a name="l66"></a>{</span><span class=cF2>//Plus&amp;Minus Triangle waveform. 0.0 - 1.0 - 0.0 - -1.0 -0.0</span><span class=cF0>
<a name="l67"></a> </span><span class=cF1>if</span><span class=cF0> (period) </span><span class=cF7>{</span><span class=cF0>
<a name="l68"></a> t=4.0*(t%period)/period;
<a name="l69"></a> </span><span class=cF1>if</span><span class=cF0> (t&lt;=-1.0) {
<a name="l70"></a> </span><span class=cF1>if</span><span class=cF0> (t&lt;=-3.0)
<a name="l71"></a> </span><span class=cF1>return</span><span class=cF0> t+4.0;
<a name="l72"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l73"></a> </span><span class=cF1>return</span><span class=cF0> -2.0-t;
<a name="l74"></a> } </span><span class=cF1>else</span><span class=cF0> {
<a name="l75"></a> </span><span class=cF1>if</span><span class=cF0> (t&lt;=1.0)
<a name="l76"></a> </span><span class=cF1>return</span><span class=cF0> t;
<a name="l77"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (t&lt;=3.0)
<a name="l78"></a> </span><span class=cF1>return</span><span class=cF0> 2.0-t;
<a name="l79"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l80"></a> </span><span class=cF1>return</span><span class=cF0> t-4.0;
<a name="l81"></a> }
<a name="l82"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l83"></a> </span><span class=cF1>return</span><span class=cF0> 0.0;
<a name="l84"></a>}
<a name="l85"></a>
<a name="l86"></a>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Snd/Music&quot;</span><span class=cF0>
<a name="l87"></a>
<a name="l88"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>class</span><span class=cF0> </span><span class=cF9>CMusicGlbls</span><span class=cF0>
<a name="l89"></a>{
<a name="l90"></a> </span><span class=cF1>U8</span><span class=cF0> *cur_song;
<a name="l91"></a> </span><span class=cF9>CTask</span><span class=cF0> *cur_song_task;
<a name="l92"></a> </span><span class=cF9>I64</span><span class=cF0> octave;
<a name="l93"></a> </span><span class=cF1>F64</span><span class=cF0> note_len;
<a name="l94"></a> </span><span class=cF1>U8</span><span class=cF0> note_map[7];
<a name="l95"></a> </span><span class=cF1>Bool</span><span class=cF0> mute;
<a name="l96"></a> </span><span class=cF9>I64</span><span class=cF0> meter_top,meter_bottom;
<a name="l97"></a> </span><span class=cF1>F64</span><span class=cF0> tempo,stacatto_factor;
<a name="l98"></a>
<a name="l99"></a> </span><span class=cF2>//If you wish to sync with a</span><span class=cF0>
<a name="l100"></a> </span><span class=cF2>//note in a Play() string. 0 is the start</span><span class=cF0>
<a name="l101"></a> </span><span class=cF9>I64</span><span class=cF0> play_note_num;
<a name="l102"></a>
<a name="l103"></a> </span><span class=cF1>F64</span><span class=cF0> tM_correction,last_Beat,last_tM;
<a name="l104"></a>} </span><span class=cFB>music</span><span class=cF0>={</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF3>NULL</span><span class=cF0>,4,1.0,</span><span class=cF7>{</span><span class=cF0>0,2,3,5,7,8,10</span><span class=cF7>}</span><span class=cF0>,</span><span class=cF3>FALSE</span><span class=cF0>,4,4,2.5,0.9,0,0,0,0};
<a name="l105"></a>
<a name="l106"></a>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Snd/Music;Time/Seconds&quot;</span><span class=cF0>
<a name="l107"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>F64</span><span class=cF0> </span><span class=cF5>tM</span><span class=cF0>()
<a name="l108"></a>{</span><span class=cF2>//Time in seconds synced to music subsystem.</span><span class=cF0>
<a name="l109"></a> </span><span class=cF1>return</span><span class=cF0> (</span><span class=cFB>cnts</span><span class=cF0>.jiffies+</span><span class=cFB>music</span><span class=cF0>.tM_correction)/</span><span class=cF3>JIFFY_FREQ</span><span class=cF0>;
<a name="l110"></a>}
<a name="l111"></a>
<a name="l112"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>F64</span><span class=cF0> </span><span class=cF5>Beat</span><span class=cF0>()
<a name="l113"></a>{</span><span class=cF2>//Time in music beats.</span><span class=cF0>
<a name="l114"></a> </span><span class=cF1>F64</span><span class=cF0> res,cur_tM;
<a name="l115"></a> </span><span class=cF1>PUSHFD</span><span class=cF0>
<a name="l116"></a> </span><span class=cF1>CLI</span><span class=cF0>
<a name="l117"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cFB>mp_cnt</span><span class=cF0>&gt;1)
<a name="l118"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF5>LBts</span><span class=cF7>(</span><span class=cF0>&amp;</span><span class=cFB>sys_semas</span><span class=cF0>[</span><span class=cF3>SEMA_TMBEAT</span><span class=cF0>],0</span><span class=cF7>)</span><span class=cF0>)
<a name="l119"></a> </span><span class=cF1>PAUSE</span><span class=cF0>
<a name="l120"></a> cur_tM=</span><span class=cF5>tM</span><span class=cF0>;
<a name="l121"></a> res=</span><span class=cFB>music</span><span class=cF0>.last_Beat;
<a name="l122"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cFB>music</span><span class=cF0>.tempo)
<a name="l123"></a> res+=(cur_tM-</span><span class=cFB>music</span><span class=cF0>.last_tM)*</span><span class=cFB>music</span><span class=cF0>.tempo;
<a name="l124"></a> </span><span class=cFB>music</span><span class=cF0>.last_tM=cur_tM;
<a name="l125"></a> </span><span class=cFB>music</span><span class=cF0>.last_Beat=res;
<a name="l126"></a> </span><span class=cF5>LBtr</span><span class=cF0>(&amp;</span><span class=cFB>sys_semas</span><span class=cF0>[</span><span class=cF3>SEMA_TMBEAT</span><span class=cF0>],0);
<a name="l127"></a> </span><span class=cF1>POPFD</span><span class=cF0>
<a name="l128"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l129"></a>}
<a name="l130"></a>
<a name="l131"></a>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Snd/Music&quot;</span><span class=cF0>
<a name="l132"></a></span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF5>MusicSetOctave</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *st)
<a name="l133"></a>{
<a name="l134"></a> </span><span class=cF9>I64</span><span class=cF0> ch;
<a name="l135"></a> ch=*st++;
<a name="l136"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF6>'0'</span><span class=cF0>&lt;=ch&lt;=</span><span class=cF6>'9'</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l137"></a> </span><span class=cFB>music</span><span class=cF0>.octave=ch-</span><span class=cF6>'0'</span><span class=cF0>;
<a name="l138"></a> ch=*st++;
<a name="l139"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l140"></a> </span><span class=cF1>return</span><span class=cF0> --st;
<a name="l141"></a>}
<a name="l142"></a>
<a name="l143"></a></span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF5>MusicSetMeter</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *st)
<a name="l144"></a>{
<a name="l145"></a> </span><span class=cF9>I64</span><span class=cF0> ch;
<a name="l146"></a> ch=*st++;
<a name="l147"></a> </span><span class=cF1>while</span><span class=cF0> (ch==</span><span class=cF6>'M'</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l148"></a> ch=*st++;
<a name="l149"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF6>'0'</span><span class=cF0>&lt;=ch&lt;=</span><span class=cF6>'9'</span><span class=cF0>) {
<a name="l150"></a> </span><span class=cFB>music</span><span class=cF0>.meter_top=ch-</span><span class=cF6>'0'</span><span class=cF0>;
<a name="l151"></a> ch=*st++;
<a name="l152"></a> }
<a name="l153"></a> </span><span class=cF1>if</span><span class=cF0> (ch==</span><span class=cF6>'/'</span><span class=cF0>)
<a name="l154"></a> ch=*st++;
<a name="l155"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF6>'0'</span><span class=cF0>&lt;=ch&lt;=</span><span class=cF6>'9'</span><span class=cF0>) {
<a name="l156"></a> </span><span class=cFB>music</span><span class=cF0>.meter_bottom=ch-</span><span class=cF6>'0'</span><span class=cF0>;
<a name="l157"></a> ch=*st++;
<a name="l158"></a> }
<a name="l159"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l160"></a> </span><span class=cF1>return</span><span class=cF0> --st;
<a name="l161"></a>}
<a name="l162"></a>
<a name="l163"></a></span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF5>MusicSetNoteLen</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *st)
<a name="l164"></a>{
<a name="l165"></a> </span><span class=cF1>Bool</span><span class=cF0> cont=</span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l166"></a> </span><span class=cF1>do</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l167"></a> </span><span class=cF1>switch</span><span class=cF0> (*st++) {
<a name="l168"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'w'</span><span class=cF0>: </span><span class=cFB>music</span><span class=cF0>.note_len=4.0; </span><span class=cF1>break</span><span class=cF0>;
<a name="l169"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'h'</span><span class=cF0>: </span><span class=cFB>music</span><span class=cF0>.note_len=2.0; </span><span class=cF1>break</span><span class=cF0>;
<a name="l170"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'q'</span><span class=cF0>: </span><span class=cFB>music</span><span class=cF0>.note_len=1.0; </span><span class=cF1>break</span><span class=cF0>;
<a name="l171"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'e'</span><span class=cF0>: </span><span class=cFB>music</span><span class=cF0>.note_len=0.5; </span><span class=cF1>break</span><span class=cF0>;
<a name="l172"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'s'</span><span class=cF0>: </span><span class=cFB>music</span><span class=cF0>.note_len=0.25; </span><span class=cF1>break</span><span class=cF0>;
<a name="l173"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'t'</span><span class=cF0>: </span><span class=cFB>music</span><span class=cF0>.note_len=2.0*</span><span class=cFB>music</span><span class=cF0>.note_len/3.0; </span><span class=cF1>break</span><span class=cF0>;
<a name="l174"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'.'</span><span class=cF0>: </span><span class=cFB>music</span><span class=cF0>.note_len=1.5*</span><span class=cFB>music</span><span class=cF0>.note_len; </span><span class=cF1>break</span><span class=cF0>;
<a name="l175"></a> </span><span class=cF1>default</span><span class=cF0>:
<a name="l176"></a> st--;
<a name="l177"></a> cont=</span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l178"></a> }
<a name="l179"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>while</span><span class=cF0> (cont);
<a name="l180"></a> </span><span class=cF1>return</span><span class=cF0> st;
<a name="l181"></a>}
<a name="l182"></a>
<a name="l183"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>I8</span><span class=cF0> </span><span class=cF5>Note2Ona</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> note,</span><span class=cF9>I64</span><span class=cF0> octave=4)
<a name="l184"></a>{</span><span class=cF2>//Note to ona. Mid C is ona=51, note=3 and octave=4.</span><span class=cF0>
<a name="l185"></a> </span><span class=cF1>if</span><span class=cF0> (note&lt;3)
<a name="l186"></a> </span><span class=cF1>return</span><span class=cF0> (octave+1)*12+note;
<a name="l187"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l188"></a> </span><span class=cF1>return</span><span class=cF0> octave*12+note;
<a name="l189"></a>}
<a name="l190"></a>
<a name="l191"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>I8</span><span class=cF0> </span><span class=cF5>Ona2Note</span><span class=cF0>(</span><span class=cF1>I8</span><span class=cF0> ona)
<a name="l192"></a>{</span><span class=cF2>//Ona to note in octave. Mid C is ona=51, note=3 and octave=4.</span><span class=cF0>
<a name="l193"></a> </span><span class=cF1>return</span><span class=cF0> ona%12;
<a name="l194"></a>}
<a name="l195"></a>
<a name="l196"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>I8</span><span class=cF0> </span><span class=cF5>Ona2Octave</span><span class=cF0>(</span><span class=cF1>I8</span><span class=cF0> ona)
<a name="l197"></a>{</span><span class=cF2>//Ona to octave. Mid C is ona=51, note=3 and octave=4.</span><span class=cF0>
<a name="l198"></a> </span><span class=cF9>I64</span><span class=cF0> note=ona%12,octave=ona/12;
<a name="l199"></a> </span><span class=cF1>if</span><span class=cF0> (note&lt;3)
<a name="l200"></a> </span><span class=cF1>return</span><span class=cF0> octave-1;
<a name="l201"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l202"></a> </span><span class=cF1>return</span><span class=cF0> octave;
<a name="l203"></a>}
<a name="l204"></a>
<a name="l205"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>Play</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *st,</span><span class=cF1>U8</span><span class=cF0> *words=</span><span class=cF3>NULL</span><span class=cF0>)
<a name="l206"></a>{</span><span class=cF2>/* Notes are entered with a capital letter.</span><span class=cF0>
<a name="l207"></a>
<a name="l208"></a></span><span class=cF2>Octaves are entered with a digit and</span><span class=cF0>
<a name="l209"></a></span><span class=cF2>stay set until changed. Mid C is octave 4.</span><span class=cF0>
<a name="l210"></a>
<a name="l211"></a></span><span class=cF2>Durations are entered with</span><span class=cF0>
<a name="l212"></a></span><span class=cF2>'w' whole note</span><span class=cF0>
<a name="l213"></a></span><span class=cF2>'h' half note</span><span class=cF0>
<a name="l214"></a></span><span class=cF2>'q' quarter note</span><span class=cF0>
<a name="l215"></a></span><span class=cF2>'e' eighth note</span><span class=cF0>
<a name="l216"></a></span><span class=cF2>'t' sets to 2/3rds the current duration</span><span class=cF0>
<a name="l217"></a></span><span class=cF2>'.' sets to 1.5 times the current duration</span><span class=cF0>
<a name="l218"></a></span><span class=cF2>durations stay set until changed.</span><span class=cF0>
<a name="l219"></a>
<a name="l220"></a></span><span class=cF2>'(' tie, placed before the note to be extended</span><span class=cF0>
<a name="l221"></a></span><span class=cF4>
<a name="l222"></a></span><a href="/Wb/Adam/ASnd.HC.HTML#l88"><span class=cF4>music.meter_top</span></a><span class=cF2>,</span><a href="/Wb/Adam/ASnd.HC.HTML#l88"><span class=cF4>music.meter_bottom</span></a><span class=cF2> is set with</span><span class=cF0>
<a name="l223"></a></span><span class=cF2>&quot;M3/4&quot;</span><span class=cF0>
<a name="l224"></a></span><span class=cF2>&quot;M4/4&quot;</span><span class=cF0>
<a name="l225"></a></span><span class=cF2>etc.</span><span class=cF0>
<a name="l226"></a>
<a name="l227"></a></span><span class=cF2>Sharp and flat are done with '#' or 'b'.</span><span class=cF0>
<a name="l228"></a>
<a name="l229"></a></span><span class=cF2>The var music.stacatto_factor can</span><span class=cF0>
<a name="l230"></a></span><span class=cF2>be set to a range from 0.0 to 1.0.</span><span class=cF0>
<a name="l231"></a>
<a name="l232"></a></span><span class=cF2>The var music.tempo is quarter-notes</span><span class=cF0>
<a name="l233"></a></span><span class=cF2>per second. It defaults to</span><span class=cF0>
<a name="l234"></a></span><span class=cF2>2.5 and gets faster when bigger.</span><span class=cF0>
<a name="l235"></a></span><span class=cF2>*/</span><span class=cF0>
<a name="l236"></a> </span><span class=cF1>U8</span><span class=cF0> *word,*last_st;
<a name="l237"></a> </span><span class=cF9>I64</span><span class=cF0> note,octave,i=0,ona,timeout_val,timeout_val2;
<a name="l238"></a> </span><span class=cF1>Bool</span><span class=cF0> tie;
<a name="l239"></a> </span><span class=cF1>F64</span><span class=cF0> d,on_jiffies,off_jiffies;
<a name="l240"></a> </span><span class=cFB>music</span><span class=cF0>.play_note_num=0;
<a name="l241"></a> </span><span class=cF1>while</span><span class=cF0> (*st) </span><span class=cF7>{</span><span class=cF0>
<a name="l242"></a> timeout_val=</span><span class=cFB>cnts</span><span class=cF0>.jiffies;
<a name="l243"></a> tie=</span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l244"></a>
<a name="l245"></a> </span><span class=cF1>do</span><span class=cF0> {
<a name="l246"></a> last_st=st;
<a name="l247"></a> </span><span class=cF1>if</span><span class=cF0> (*st==</span><span class=cF6>'('</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l248"></a> tie=</span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l249"></a> st++;
<a name="l250"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l251"></a> st=</span><span class=cF5>MusicSetMeter</span><span class=cF0>(st);
<a name="l252"></a> st=</span><span class=cF5>MusicSetOctave</span><span class=cF0>(st);
<a name="l253"></a> st=</span><span class=cF5>MusicSetNoteLen</span><span class=cF0>(st);
<a name="l254"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l255"></a> } </span><span class=cF1>while</span><span class=cF0> (st!=last_st);
<a name="l256"></a>
<a name="l257"></a> </span><span class=cF1>if</span><span class=cF0> (!*st) </span><span class=cF1>break</span><span class=cF0>;
<a name="l258"></a> note=*st++-</span><span class=cF6>'A'</span><span class=cF0>;
<a name="l259"></a> </span><span class=cF1>if</span><span class=cF0> (note&lt;7) {
<a name="l260"></a> note=</span><span class=cFB>music</span><span class=cF0>.note_map[note];
<a name="l261"></a> octave=</span><span class=cFB>music</span><span class=cF0>.octave;
<a name="l262"></a> </span><span class=cF1>if</span><span class=cF0> (*st==</span><span class=cF6>'b'</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l263"></a> note--;
<a name="l264"></a> </span><span class=cF1>if</span><span class=cF0> (note==2)
<a name="l265"></a> octave--;
<a name="l266"></a> st++;
<a name="l267"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (*st==</span><span class=cF6>'#'</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l268"></a> note++;
<a name="l269"></a> </span><span class=cF1>if</span><span class=cF0> (note==3)
<a name="l270"></a> octave++;
<a name="l271"></a> st++;
<a name="l272"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l273"></a> ona=</span><span class=cF5>Note2Ona</span><span class=cF0>(note,octave);
<a name="l274"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l275"></a> ona=0;
<a name="l276"></a> </span><span class=cF1>if</span><span class=cF0> (words &amp;&amp; </span><span class=cF7>(</span><span class=cF0>word=</span><span class=cF5>LstSub</span><span class=cF0>(i++,words)</span><span class=cF7>)</span><span class=cF0> &amp;&amp; </span><span class=cF5>StrCmp</span><span class=cF7>(</span><span class=cF0>word,</span><span class=cF6>&quot; &quot;</span><span class=cF7>)</span><span class=cF0>)
<a name="l277"></a> </span><span class=cF6>&quot;%s&quot;</span><span class=cF0>,word;
<a name="l278"></a>
<a name="l279"></a> d=</span><span class=cF3>JIFFY_FREQ</span><span class=cF0>*</span><span class=cFB>music</span><span class=cF0>.note_len/</span><span class=cFB>music</span><span class=cF0>.tempo;
<a name="l280"></a> on_jiffies =d*</span><span class=cFB>music</span><span class=cF0>.stacatto_factor;
<a name="l281"></a> off_jiffies =d*(1.0-</span><span class=cFB>music</span><span class=cF0>.stacatto_factor);
<a name="l282"></a>
<a name="l283"></a> timeout_val+=on_jiffies;
<a name="l284"></a> timeout_val2=timeout_val+off_jiffies;
<a name="l285"></a>
<a name="l286"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cFB>music</span><span class=cF0>.mute)
<a name="l287"></a> </span><span class=cF5>Snd</span><span class=cF0>(ona);
<a name="l288"></a> </span><span class=cF5>SleepUntil</span><span class=cF0>(timeout_val);
<a name="l289"></a> </span><span class=cFB>music</span><span class=cF0>.tM_correction+=on_jiffies-</span><span class=cF5>ToI64</span><span class=cF0>(on_jiffies);
<a name="l290"></a>
<a name="l291"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cFB>music</span><span class=cF0>.mute &amp;&amp; !tie)
<a name="l292"></a> </span><span class=cF5>Snd</span><span class=cF0>;
<a name="l293"></a> </span><span class=cF5>SleepUntil</span><span class=cF0>(timeout_val2);
<a name="l294"></a> </span><span class=cFB>music</span><span class=cF0>.tM_correction+=off_jiffies-</span><span class=cF5>ToI64</span><span class=cF0>(off_jiffies);
<a name="l295"></a>
<a name="l296"></a> </span><span class=cFB>music</span><span class=cF0>.play_note_num++;
<a name="l297"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l298"></a>}
<a name="l299"></a>
<a name="l300"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>MusicSettingsRst</span><span class=cF0>()
<a name="l301"></a>{
<a name="l302"></a> </span><span class=cFB>music</span><span class=cF0>.play_note_num=0;
<a name="l303"></a> </span><span class=cFB>music</span><span class=cF0>.stacatto_factor=0.9;
<a name="l304"></a> </span><span class=cFB>music</span><span class=cF0>.tempo=2.5;
<a name="l305"></a> </span><span class=cFB>music</span><span class=cF0>.octave=4;
<a name="l306"></a> </span><span class=cFB>music</span><span class=cF0>.note_len=1.0;
<a name="l307"></a> </span><span class=cFB>music</span><span class=cF0>.meter_top=4;
<a name="l308"></a> </span><span class=cFB>music</span><span class=cF0>.meter_bottom=4;
<a name="l309"></a> </span><span class=cF5>SndRst</span><span class=cF0>;
<a name="l310"></a> </span><span class=cF1>PUSHFD</span><span class=cF0>
<a name="l311"></a> </span><span class=cF1>CLI</span><span class=cF0>
<a name="l312"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cFB>mp_cnt</span><span class=cF0>&gt;1)
<a name="l313"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF5>LBts</span><span class=cF7>(</span><span class=cF0>&amp;</span><span class=cFB>sys_semas</span><span class=cF0>[</span><span class=cF3>SEMA_TMBEAT</span><span class=cF0>],0</span><span class=cF7>)</span><span class=cF0>)
<a name="l314"></a> </span><span class=cF1>PAUSE</span><span class=cF0>
<a name="l315"></a> </span><span class=cFB>music</span><span class=cF0>.last_tM=</span><span class=cF5>tM</span><span class=cF0>;
<a name="l316"></a> </span><span class=cFB>music</span><span class=cF0>.last_Beat=0.0;
<a name="l317"></a> </span><span class=cF5>LBtr</span><span class=cF0>(&amp;</span><span class=cFB>sys_semas</span><span class=cF0>[</span><span class=cF3>SEMA_TMBEAT</span><span class=cF0>],0);
<a name="l318"></a> </span><span class=cF1>POPFD</span><span class=cF0>
<a name="l319"></a>}
<a name="l320"></a>
<a name="l321"></a></span><span class=cF5>MusicSettingsRst</span><span class=cF0>;
<a name="l322"></a>
<a name="l323"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>CurSongTask</span><span class=cF0>()
<a name="l324"></a>{
<a name="l325"></a> </span><span class=cF5>Fs</span><span class=cF0>-&gt;task_end_cb=&amp;</span><span class=cF5>SndTaskEndCB</span><span class=cF0>;
<a name="l326"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>)
<a name="l327"></a> </span><span class=cF5>Play</span><span class=cF0>(</span><span class=cFB>music</span><span class=cF0>.cur_song);
<a name="l328"></a>}
<a name="l329"></a>
<a name="l330"></a>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Snd&quot;</span><span class=cF0>
<a name="l331"></a>
<a name="l332"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>SE_NOISE</span><span class=cF0> 0
<a name="l333"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>SE_SWEEP</span><span class=cF0> 1
<a name="l334"></a>
<a name="l335"></a></span><span class=cF1>class</span><span class=cF0> </span><span class=cF9>CSoundEffectFrame</span><span class=cF0>
<a name="l336"></a>{
<a name="l337"></a> </span><span class=cF9>I32</span><span class=cF0> type;
<a name="l338"></a> </span><span class=cF1>I8</span><span class=cF0> ona1,ona2;
<a name="l339"></a> </span><span class=cF1>F64</span><span class=cF0> duration;
<a name="l340"></a>};
<a name="l341"></a>
<a name="l342"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>SoundEffectEndTaskCB</span><span class=cF0>()
<a name="l343"></a>{
<a name="l344"></a> </span><span class=cF5>Free</span><span class=cF0>(</span><span class=cF5>FramePtr</span><span class=cF7>(</span><span class=cF6>&quot;CSoundEffectFrame&quot;</span><span class=cF7>)</span><span class=cF0>);
<a name="l345"></a> </span><span class=cFB>music</span><span class=cF0>.mute--;
<a name="l346"></a> </span><span class=cF5>SndTaskEndCB</span><span class=cF0>;
<a name="l347"></a>}
<a name="l348"></a>
<a name="l349"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>SoundEffectTask</span><span class=cF0>(</span><span class=cF9>CSoundEffectFrame</span><span class=cF0> *ns)
<a name="l350"></a>{
<a name="l351"></a> </span><span class=cF9>I64</span><span class=cF0> i,ona;
<a name="l352"></a> </span><span class=cF1>F64</span><span class=cF0> t0=</span><span class=cF5>tS</span><span class=cF0>,t,timeout=t0+ns-&gt;duration;
<a name="l353"></a> </span><span class=cF5>FramePtrAdd</span><span class=cF0>(</span><span class=cF6>&quot;CSoundEffectFrame&quot;</span><span class=cF0>,ns);
<a name="l354"></a> </span><span class=cF5>Fs</span><span class=cF0>-&gt;task_end_cb=&amp;</span><span class=cF5>SoundEffectEndTaskCB</span><span class=cF0>;
<a name="l355"></a> </span><span class=cF1>switch</span><span class=cF0> (ns-&gt;type) </span><span class=cF7>{</span><span class=cF0>
<a name="l356"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>SE_NOISE</span><span class=cF0>:
<a name="l357"></a> i=</span><span class=cF5>MaxI64</span><span class=cF0>(ns-&gt;ona2-ns-&gt;ona1,1);
<a name="l358"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF5>tS</span><span class=cF0>&lt;timeout) {
<a name="l359"></a> ona=</span><span class=cF5>RandU16</span><span class=cF0>%i+ns-&gt;ona1;
<a name="l360"></a> </span><span class=cF5>Snd</span><span class=cF0>(ona);
<a name="l361"></a> t=</span><span class=cF5>Clamp</span><span class=cF0>(3000.0/</span><span class=cF5>Ona2Freq</span><span class=cF7>(</span><span class=cF0>ona</span><span class=cF7>)</span><span class=cF0>,1.0,50.0);
<a name="l362"></a> </span><span class=cF1>if</span><span class=cF0> (t+</span><span class=cF5>tS</span><span class=cF0>&gt;timeout)
<a name="l363"></a> t=timeout-</span><span class=cF5>tS</span><span class=cF0>;
<a name="l364"></a> </span><span class=cF5>Sleep</span><span class=cF0>(t);
<a name="l365"></a> }
<a name="l366"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l367"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>SE_SWEEP</span><span class=cF0>:
<a name="l368"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF5>tS</span><span class=cF0>&lt;timeout) {
<a name="l369"></a> t=(</span><span class=cF5>tS</span><span class=cF0>-t0)/ns-&gt;duration;
<a name="l370"></a> ona=(1.0-t)*ns-&gt;ona1+t*ns-&gt;ona2;
<a name="l371"></a> </span><span class=cF5>Snd</span><span class=cF0>(ona);
<a name="l372"></a> t=</span><span class=cF5>Clamp</span><span class=cF0>(3000.0/</span><span class=cF5>Ona2Freq</span><span class=cF7>(</span><span class=cF0>ona</span><span class=cF7>)</span><span class=cF0>,1.0,50.0);
<a name="l373"></a> </span><span class=cF1>if</span><span class=cF0> (t+</span><span class=cF5>tS</span><span class=cF0>&gt;timeout)
<a name="l374"></a> t=timeout-</span><span class=cF5>tS</span><span class=cF0>;
<a name="l375"></a> </span><span class=cF5>Sleep</span><span class=cF0>(t);
<a name="l376"></a> }
<a name="l377"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l378"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l379"></a>}
<a name="l380"></a>
<a name="l381"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>CTask</span><span class=cF0> *</span><span class=cF5>Noise</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> mS,</span><span class=cF1>F64</span><span class=cF0> min_ona,</span><span class=cF1>F64</span><span class=cF0> max_ona)
<a name="l382"></a>{</span><span class=cF2>//Make white noise for given number of mS.</span><span class=cF0>
<a name="l383"></a> </span><span class=cF9>CSoundEffectFrame</span><span class=cF0> *ns;
<a name="l384"></a> </span><span class=cF1>if</span><span class=cF0> (mS&gt;0) </span><span class=cF7>{</span><span class=cF0>
<a name="l385"></a> ns=</span><span class=cF5>MAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CSoundEffectFrame</span><span class=cF7>)</span><span class=cF0>);
<a name="l386"></a> ns-&gt;type=</span><span class=cF3>SE_NOISE</span><span class=cF0>;
<a name="l387"></a> ns-&gt;duration=mS/1000.0;
<a name="l388"></a> ns-&gt;ona1=min_ona;
<a name="l389"></a> ns-&gt;ona2=max_ona;
<a name="l390"></a> </span><span class=cFB>music</span><span class=cF0>.mute++;
<a name="l391"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF5>Spawn</span><span class=cF0>(&amp;</span><span class=cF5>SoundEffectTask</span><span class=cF0>,ns,</span><span class=cF6>&quot;Noise&quot;</span><span class=cF0>,,</span><span class=cF5>Fs</span><span class=cF0>);
<a name="l392"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l393"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>NULL</span><span class=cF0>;
<a name="l394"></a>}
<a name="l395"></a>
<a name="l396"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>CTask</span><span class=cF0> *</span><span class=cF5>Sweep</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> mS,</span><span class=cF1>F64</span><span class=cF0> ona1,</span><span class=cF1>F64</span><span class=cF0> ona2)
<a name="l397"></a>{</span><span class=cF2>//Sweep through freq range in given number of mS.</span><span class=cF0>
<a name="l398"></a> </span><span class=cF9>CSoundEffectFrame</span><span class=cF0> *ns;
<a name="l399"></a> </span><span class=cF1>if</span><span class=cF0> (mS&gt;0) </span><span class=cF7>{</span><span class=cF0>
<a name="l400"></a> ns=</span><span class=cF5>MAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CSoundEffectFrame</span><span class=cF7>)</span><span class=cF0>);
<a name="l401"></a> ns-&gt;type=</span><span class=cF3>SE_SWEEP</span><span class=cF0>;
<a name="l402"></a> ns-&gt;duration=mS/1000.0;
<a name="l403"></a> ns-&gt;ona1=ona1;
<a name="l404"></a> ns-&gt;ona2=ona2;
<a name="l405"></a> </span><span class=cFB>music</span><span class=cF0>.mute++;
<a name="l406"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF5>Spawn</span><span class=cF0>(&amp;</span><span class=cF5>SoundEffectTask</span><span class=cF0>,ns,</span><span class=cF6>&quot;Noise&quot;</span><span class=cF0>,,</span><span class=cF5>Fs</span><span class=cF0>);
<a name="l407"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l408"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>NULL</span><span class=cF0>;
<a name="l409"></a>}
</span></pre></body>
</html>

View File

@ -0,0 +1,292 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF2>/*</span><span class=cF0>
<a name="l2"></a></span><span class=cF2>This file is a stand-alone program</span><span class=cF0>
<a name="l3"></a></span><span class=cF2>which will regenerate processed dictionary</span><span class=cF0>
<a name="l4"></a></span><span class=cF2>files from a raw Project Gutenberg</span><span class=cF0>
<a name="l5"></a></span><span class=cF2>dictionary file.</span><span class=cF0>
<a name="l6"></a>
<a name="l7"></a></span><span class=cF2>See </span><a href="/Wb/Doc/Credits.DD.HTML#l1"><span class=cF4>::/Doc/Credits.DD</span></a><span class=cF2>.</span><span class=cF0>
<a name="l8"></a></span><span class=cF2>*/</span><span class=cF0>
<a name="l9"></a>
<a name="l10"></a></span><span class=cF1>U0</span><span class=cF0> ACDPreprocess(</span><span class=cF1>U8</span><span class=cF0> *in_name,</span><span class=cF1>U8</span><span class=cF0> *out_name)
<a name="l11"></a>{</span><span class=cF2>/*</span><span class=cF0>
<a name="l12"></a></span><span class=cF2>&lt;cr&gt;&lt;nl&gt;--&gt; &lt;nl&gt;</span><span class=cF0>
<a name="l13"></a></span><span class=cF2>$</span><span class=cF0> </span><span class=cF2>--&gt; $$</span><span class=cF0>
<a name="l14"></a></span><span class=cF2>\'89</span><span class=cF0> </span><span class=cF2>--&gt; .</span><span class=cF0>
<a name="l15"></a></span><span class=cF2>*/</span><span class=cF0>
<a name="l16"></a> </span><span class=cF9>I64</span><span class=cF0> ch,i;
<a name="l17"></a> </span><span class=cF1>U8</span><span class=cF0> *src,*dst;
<a name="l18"></a> </span><span class=cF9>CDoc</span><span class=cF0> *doc;
<a name="l19"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_e;
<a name="l20"></a> </span><span class=cF1>if</span><span class=cF0> (doc=</span><span class=cF5>DocRead</span><span class=cF7>(</span><span class=cF0>in_name,</span><span class=cF3>DOCF_PLAIN_TEXT_TABS</span><span class=cF0>|</span><span class=cF3>DOCF_DBL_DOLLARS</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l21"></a> doc_e=doc-&gt;head.next;
<a name="l22"></a> </span><span class=cF1>while</span><span class=cF0> (doc_e!=doc) {
<a name="l23"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;type_u8==</span><span class=cF3>DOCT_TEXT</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l24"></a> src=dst=doc_e-&gt;tag;
<a name="l25"></a> </span><span class=cF1>while</span><span class=cF0> (ch=*src++) {
<a name="l26"></a> </span><span class=cF1>if</span><span class=cF0> (ch==</span><span class=cF6>'\\'</span><span class=cF0> &amp;&amp; *src==</span><span class=cF6>'\''</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l27"></a> src++;
<a name="l28"></a> i=0;
<a name="l29"></a> ch=</span><span class=cF5>ToUpper</span><span class=cF0>(*src++);
<a name="l30"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF6>'0'</span><span class=cF0>&lt;=ch&lt;=</span><span class=cF6>'9'</span><span class=cF0>)
<a name="l31"></a> i+=ch-</span><span class=cF6>'0'</span><span class=cF0>;
<a name="l32"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF6>'A'</span><span class=cF0>&lt;=ch&lt;=</span><span class=cF6>'F'</span><span class=cF0>)
<a name="l33"></a> i+=ch-</span><span class=cF6>'A'</span><span class=cF0>+10;
<a name="l34"></a> i&lt;&lt;=4;
<a name="l35"></a> ch=</span><span class=cF5>ToUpper</span><span class=cF0>(*src++);
<a name="l36"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF6>'0'</span><span class=cF0>&lt;=ch&lt;=</span><span class=cF6>'9'</span><span class=cF0>)
<a name="l37"></a> i+=ch-</span><span class=cF6>'0'</span><span class=cF0>;
<a name="l38"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF6>'A'</span><span class=cF0>&lt;=ch&lt;=</span><span class=cF6>'F'</span><span class=cF0>)
<a name="l39"></a> i+=ch-</span><span class=cF6>'A'</span><span class=cF0>+10;
<a name="l40"></a> *dst++=i;
<a name="l41"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l42"></a> *dst++=ch;
<a name="l43"></a> }
<a name="l44"></a> *dst=0;
<a name="l45"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l46"></a> doc_e=doc_e-&gt;next;
<a name="l47"></a> }
<a name="l48"></a> </span><span class=cF5>StrCpy</span><span class=cF0>(doc-&gt;filename.name,out_name);
<a name="l49"></a> </span><span class=cF5>DocWrite</span><span class=cF0>(doc);
<a name="l50"></a> </span><span class=cF5>DocDel</span><span class=cF0>(doc);
<a name="l51"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l52"></a>}
<a name="l53"></a>
<a name="l54"></a></span><span class=cF9>I64</span><span class=cF0> ACDNextCmd(</span><span class=cF1>U8</span><span class=cF0> **_ptr)
<a name="l55"></a>{
<a name="l56"></a> </span><span class=cF1>U8</span><span class=cF0> *ptr=*_ptr,*ptr2;
<a name="l57"></a> </span><span class=cF9>I64</span><span class=cF0> ch,res=-1;
<a name="l58"></a> </span><span class=cF1>do</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l59"></a> </span><span class=cF1>do</span><span class=cF0> {
<a name="l60"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>ch=*ptr++</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF1>goto</span><span class=cF0> ncmd_done;
<a name="l61"></a> } </span><span class=cF1>while</span><span class=cF0> (ch!=</span><span class=cF6>'&lt;'</span><span class=cF0>);
<a name="l62"></a>
<a name="l63"></a> ptr2=ptr;
<a name="l64"></a> </span><span class=cF1>do</span><span class=cF0> {
<a name="l65"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>ch=*ptr2++</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF1>goto</span><span class=cF0> ncmd_done;
<a name="l66"></a> } </span><span class=cF1>while</span><span class=cF0> (ch!=</span><span class=cF6>'&gt;'</span><span class=cF0>);
<a name="l67"></a> *--ptr2=0;
<a name="l68"></a> res=</span><span class=cF5>LstMatch</span><span class=cF0>(ptr,</span><span class=cF6>&quot;h1\0/h1\0def\0/def\0hw\0/hw\0tt\0/tt\0&quot;</span><span class=cF0>
<a name="l69"></a> </span><span class=cF6>&quot;ety\0@fld\0@cd\0@blockquote\0@wordforms\0@note\0@altname\0@chform\0&quot;</span><span class=cF0>
<a name="l70"></a> </span><span class=cF6>&quot;@cref\0@syn\0/ety\0@/fld\0@/cd\0@/blockquote\0@/wordforms\0@/note\0&quot;</span><span class=cF0>
<a name="l71"></a> </span><span class=cF6>&quot;@/altname\0@/chform\0@/cref\0@/syn\0&quot;</span><span class=cF0>);
<a name="l72"></a> *ptr2++=</span><span class=cF6>'&gt;'</span><span class=cF0>;
<a name="l73"></a> ptr=ptr2;
<a name="l74"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>while</span><span class=cF0> (res&lt;0);
<a name="l75"></a>
<a name="l76"></a> ncmd_done:
<a name="l77"></a> *_ptr=ptr;
<a name="l78"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l79"></a>}
<a name="l80"></a>
<a name="l81"></a></span><span class=cF1>U8</span><span class=cF0> *ACDNextEntry(</span><span class=cF1>U8</span><span class=cF0> **_ptr)
<a name="l82"></a>{
<a name="l83"></a> </span><span class=cF1>U8</span><span class=cF0> *res,*ignore,*ptr=*_ptr,buf[</span><span class=cF3>ACD_BLK_SIZE</span><span class=cF0>],*out_ptr=buf;
<a name="l84"></a> </span><span class=cF9>I64</span><span class=cF0> ch,l;
<a name="l85"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l86"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>) {
<a name="l87"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>ch=*ptr++</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF1>goto</span><span class=cF0> nentry_done;
<a name="l88"></a> </span><span class=cF1>if</span><span class=cF0> (ch!=</span><span class=cF6>'&lt;'</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l89"></a> *out_ptr++=ch;
<a name="l90"></a> </span><span class=cF1>if</span><span class=cF0> (ch==</span><span class=cF6>'$'</span><span class=cF0>)
<a name="l91"></a> *out_ptr++=ch;
<a name="l92"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l93"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l94"></a> }
<a name="l95"></a> ignore=</span><span class=cF6>&quot;b&gt;\0i&gt;\0ppp&gt;\0/b&gt;\0/i&gt;\0/p&gt;\0&quot;</span><span class=cF0>
<a name="l96"></a> </span><span class=cF6>&quot;ets&gt;\0col&gt;\0spn&gt;\0/ets&gt;\0/col&gt;\0/spn&gt;\0er&gt;\0as&gt;\0cs&gt;\0cd&gt;\0ex&gt;\0&quot;</span><span class=cF0>
<a name="l97"></a> </span><span class=cF6>&quot;/er&gt;\0/as&gt;\0/cs&gt;\0/cd&gt;\0/ex&gt;\0&quot;</span><span class=cF0>
<a name="l98"></a> </span><span class=cF6>&quot;note&gt;\0/note&gt;\0blockquote&gt;\0/blockquote&gt;\0&quot;</span><span class=cF0>;
<a name="l99"></a> </span><span class=cF1>while</span><span class=cF0> (*ignore) {
<a name="l100"></a> l=</span><span class=cF5>StrLen</span><span class=cF0>(ignore);
<a name="l101"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>StrNCmp</span><span class=cF7>(</span><span class=cF0>ptr,ignore,l</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l102"></a> ptr+=l;
<a name="l103"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l104"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l105"></a> ignore+=l+1;
<a name="l106"></a> }
<a name="l107"></a> </span><span class=cF1>if</span><span class=cF0> (!*ignore)
<a name="l108"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l109"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l110"></a>nentry_done:
<a name="l111"></a> *out_ptr++=0;
<a name="l112"></a> res=</span><span class=cF5>StrNew</span><span class=cF0>(buf);
<a name="l113"></a> *_ptr=ptr-1;
<a name="l114"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l115"></a>}
<a name="l116"></a>
<a name="l117"></a></span><span class=cF9>I64</span><span class=cF0> ACDCompareWords(</span><span class=cF1>U8</span><span class=cF0> *e1,</span><span class=cF1>U8</span><span class=cF0> *e2)
<a name="l118"></a>{
<a name="l119"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF5>StrICmp</span><span class=cF0>(e1,e2);
<a name="l120"></a>}
<a name="l121"></a>
<a name="l122"></a></span><span class=cF1>U8</span><span class=cF0> *ACDSortWords(</span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF1>start</span><span class=cF0>,</span><span class=cF9>I64</span><span class=cF0> size,</span><span class=cF9>I64</span><span class=cF0> word_cnt)
<a name="l123"></a>{
<a name="l124"></a> </span><span class=cF1>U8</span><span class=cF0> **ptr_array=</span><span class=cF5>MAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>*word_cnt),
<a name="l125"></a> *out_start=</span><span class=cF5>MAlloc</span><span class=cF0>(size),
<a name="l126"></a> *ptr=</span><span class=cF1>start</span><span class=cF0>,*ptr2;
<a name="l127"></a> </span><span class=cF9>I64</span><span class=cF0> i=0;
<a name="l128"></a> </span><span class=cF1>while</span><span class=cF0> (*ptr) </span><span class=cF7>{</span><span class=cF0>
<a name="l129"></a> ptr_array[i++]=ptr;
<a name="l130"></a> ptr+=</span><span class=cF5>StrLen</span><span class=cF0>(ptr)+3;
<a name="l131"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l132"></a> </span><span class=cF6>&quot;Sorting...\n&quot;</span><span class=cF0>; </span><span class=cF5>Sleep</span><span class=cF0>(100);
<a name="l133"></a> </span><span class=cF5>QSortI64</span><span class=cF0>(ptr_array,word_cnt,&amp;ACDCompareWords);
<a name="l134"></a> </span><span class=cF6>&quot;Done...\n&quot;</span><span class=cF0>; </span><span class=cF5>Sleep</span><span class=cF0>(100);
<a name="l135"></a>
<a name="l136"></a> ptr=out_start;
<a name="l137"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;word_cnt;i++) </span><span class=cF7>{</span><span class=cF0>
<a name="l138"></a> ptr2=ptr_array[i];
<a name="l139"></a> </span><span class=cF1>while</span><span class=cF0> (*ptr2)
<a name="l140"></a> *ptr++=*ptr2++;
<a name="l141"></a> *ptr++=*ptr2++; </span><span class=cF2>//zero</span><span class=cF0>
<a name="l142"></a> *ptr++=*ptr2++; </span><span class=cF2>//blk lo</span><span class=cF0>
<a name="l143"></a> *ptr++=*ptr2++; </span><span class=cF2>//blk hi</span><span class=cF0>
<a name="l144"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l145"></a> *ptr++=0;
<a name="l146"></a> </span><span class=cF1>return</span><span class=cF0> out_start;
<a name="l147"></a>}
<a name="l148"></a>
<a name="l149"></a></span><span class=cF1>U0</span><span class=cF0> ACDGen(</span><span class=cF1>U8</span><span class=cF0> *in_file)
<a name="l150"></a>{
<a name="l151"></a> </span><span class=cF9>I64</span><span class=cF0> cmd,size,word_cnt=0,largest_entry=0;
<a name="l152"></a> </span><span class=cF1>U8</span><span class=cF0> *st,*in_ptr=</span><span class=cF5>FileRead</span><span class=cF0>(in_file,&amp;size),*in_start=in_ptr,
<a name="l153"></a> *out_ptr=</span><span class=cF5>MAlloc</span><span class=cF0>(size),*out_start=out_ptr,
<a name="l154"></a> *word_ptr=</span><span class=cF5>MAlloc</span><span class=cF0>(size),*word_start=word_ptr,
<a name="l155"></a> *last_word=</span><span class=cF6>&quot;&quot;</span><span class=cF0>,*def_word_start=out_ptr,
<a name="l156"></a> *sorted_word_start;
<a name="l157"></a> </span><span class=cF9>U16</span><span class=cF0> *d;
<a name="l158"></a> </span><span class=cF1>if</span><span class=cF0> (!in_ptr) </span><span class=cF1>return</span><span class=cF0>;
<a name="l159"></a> </span><span class=cF1>do</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l160"></a> cmd=ACDNextCmd(&amp;in_ptr);
<a name="l161"></a> </span><span class=cF1>if</span><span class=cF0> (cmd==</span><span class=cF3>ACD_H1</span><span class=cF0>) {
<a name="l162"></a>next_word:
<a name="l163"></a> </span><span class=cF1>if</span><span class=cF0> (out_ptr-def_word_start&gt;largest_entry)
<a name="l164"></a> largest_entry=out_ptr-def_word_start;
<a name="l165"></a> def_word_start=out_ptr;
<a name="l166"></a> </span><span class=cF1>if</span><span class=cF0> (st=ACDNextEntry</span><span class=cF7>(</span><span class=cF0>&amp;in_ptr</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l167"></a> </span><span class=cF1>if</span><span class=cF0> (*st) {
<a name="l168"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>StrICmp</span><span class=cF7>(</span><span class=cF0>st,last_word</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l169"></a> word_cnt++;
<a name="l170"></a>
<a name="l171"></a> *word_ptr++=</span><span class=cF3>ACD_WORD_CHAR</span><span class=cF0>;
<a name="l172"></a> last_word=word_ptr;
<a name="l173"></a> </span><span class=cF5>StrCpy</span><span class=cF0>(word_ptr,st);
<a name="l174"></a> word_ptr+=</span><span class=cF5>StrLen</span><span class=cF0>(st)+1;
<a name="l175"></a>
<a name="l176"></a> d=word_ptr;
<a name="l177"></a> *d=(out_ptr-out_start)/</span><span class=cF3>ACD_BLK_SIZE</span><span class=cF0>;
<a name="l178"></a> word_ptr+=2;
<a name="l179"></a>
<a name="l180"></a> *out_ptr++=</span><span class=cF3>ACD_WORD_CHAR</span><span class=cF0>;
<a name="l181"></a> </span><span class=cF5>StrCpy</span><span class=cF0>(out_ptr,st);
<a name="l182"></a> out_ptr+=</span><span class=cF5>StrLen</span><span class=cF0>(st)+1;
<a name="l183"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l184"></a> </span><span class=cF5>Free</span><span class=cF0>(st);
<a name="l185"></a>
<a name="l186"></a> </span><span class=cF1>do</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l187"></a> </span><span class=cF1>do</span><span class=cF0> {
<a name="l188"></a> cmd=ACDNextCmd(&amp;in_ptr);
<a name="l189"></a> </span><span class=cF1>if</span><span class=cF0> (cmd==</span><span class=cF3>ACD_H1</span><span class=cF0>)
<a name="l190"></a> </span><span class=cF1>goto</span><span class=cF0> next_word;
<a name="l191"></a> } </span><span class=cF1>while</span><span class=cF0> (cmd&gt;=0 &amp;&amp; !</span><span class=cF7>(</span><span class=cF0>cmd==</span><span class=cF3>ACD_DEF</span><span class=cF0>||cmd==</span><span class=cF3>ACD_PRONUNCIATION</span><span class=cF0>||
<a name="l192"></a> cmd==</span><span class=cF3>ACD_POS</span><span class=cF0>||cmd==</span><span class=cF3>ACD_EXTRA</span><span class=cF7>)</span><span class=cF0>);
<a name="l193"></a> </span><span class=cF1>if</span><span class=cF0> (cmd==</span><span class=cF3>ACD_DEF</span><span class=cF0>) {
<a name="l194"></a> </span><span class=cF1>if</span><span class=cF0>(st=ACDNextEntry</span><span class=cF7>(</span><span class=cF0>&amp;in_ptr</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l195"></a> </span><span class=cF1>if</span><span class=cF0> (*st) {
<a name="l196"></a> *out_ptr++=</span><span class=cF3>ACD_DEF_CHAR</span><span class=cF0>;
<a name="l197"></a> </span><span class=cF5>StrCpy</span><span class=cF0>(out_ptr,st);
<a name="l198"></a> out_ptr+=</span><span class=cF5>StrLen</span><span class=cF0>(st)+1;
<a name="l199"></a> }
<a name="l200"></a> </span><span class=cF5>Free</span><span class=cF0>(st);
<a name="l201"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l202"></a> } </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (cmd==</span><span class=cF3>ACD_PRONUNCIATION</span><span class=cF0>) {
<a name="l203"></a> </span><span class=cF1>if</span><span class=cF0>(st=ACDNextEntry</span><span class=cF7>(</span><span class=cF0>&amp;in_ptr</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l204"></a> </span><span class=cF1>if</span><span class=cF0> (*st) {
<a name="l205"></a> *out_ptr++=</span><span class=cF3>ACD_PRONUNCIATION_CHAR</span><span class=cF0>;
<a name="l206"></a> </span><span class=cF5>StrCpy</span><span class=cF0>(out_ptr,st);
<a name="l207"></a> out_ptr+=</span><span class=cF5>StrLen</span><span class=cF0>(st)+1;
<a name="l208"></a> }
<a name="l209"></a> </span><span class=cF5>Free</span><span class=cF0>(st);
<a name="l210"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l211"></a> } </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (cmd==</span><span class=cF3>ACD_POS</span><span class=cF0>) {
<a name="l212"></a> </span><span class=cF1>if</span><span class=cF0>(st=ACDNextEntry</span><span class=cF7>(</span><span class=cF0>&amp;in_ptr</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l213"></a> </span><span class=cF1>if</span><span class=cF0> (*st) {
<a name="l214"></a> *out_ptr++=</span><span class=cF3>ACD_POS_CHAR</span><span class=cF0>;
<a name="l215"></a> </span><span class=cF5>StrCpy</span><span class=cF0>(out_ptr,st);
<a name="l216"></a> out_ptr+=</span><span class=cF5>StrLen</span><span class=cF0>(st)+1;
<a name="l217"></a> }
<a name="l218"></a> </span><span class=cF5>Free</span><span class=cF0>(st);
<a name="l219"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l220"></a> } </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (cmd==</span><span class=cF3>ACD_EXTRA</span><span class=cF0>) {
<a name="l221"></a> </span><span class=cF1>if</span><span class=cF0>(st=ACDNextEntry</span><span class=cF7>(</span><span class=cF0>&amp;in_ptr</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l222"></a> </span><span class=cF1>if</span><span class=cF0> (*st) {
<a name="l223"></a> *out_ptr++=</span><span class=cF3>ACD_EXTRA_CHAR</span><span class=cF0>;
<a name="l224"></a> </span><span class=cF5>StrCpy</span><span class=cF0>(out_ptr,st);
<a name="l225"></a> out_ptr+=</span><span class=cF5>StrLen</span><span class=cF0>(st)+1;
<a name="l226"></a> }
<a name="l227"></a> </span><span class=cF5>Free</span><span class=cF0>(st);
<a name="l228"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l229"></a> }
<a name="l230"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>while</span><span class=cF0> (cmd==</span><span class=cF3>ACD_DEF</span><span class=cF0>||cmd==</span><span class=cF3>ACD_PRONUNCIATION</span><span class=cF0>||
<a name="l231"></a> cmd==</span><span class=cF3>ACD_POS</span><span class=cF0>||cmd==</span><span class=cF3>ACD_EXTRA</span><span class=cF0>);
<a name="l232"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l233"></a> </span><span class=cF5>Free</span><span class=cF0>(st);
<a name="l234"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l235"></a> }
<a name="l236"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>while</span><span class=cF0> (cmd&gt;=0);
<a name="l237"></a> *out_ptr++=</span><span class=cF3>ACD_END_CHAR</span><span class=cF0>;
<a name="l238"></a> *word_ptr++=</span><span class=cF3>ACD_END_CHAR</span><span class=cF0>;
<a name="l239"></a>
<a name="l240"></a> </span><span class=cF5>Free</span><span class=cF0>(in_start);
<a name="l241"></a>
<a name="l242"></a> </span><span class=cF6>&quot;Blk Size :%d\n&quot;</span><span class=cF0>,</span><span class=cF3>ACD_BLK_SIZE</span><span class=cF0>;
<a name="l243"></a> </span><span class=cF6>&quot;Blk Cnt :%04X\n&quot;</span><span class=cF0>,(out_ptr-out_start+</span><span class=cF3>ACD_BLK_SIZE</span><span class=cF0>-1)/</span><span class=cF3>ACD_BLK_SIZE</span><span class=cF0>;
<a name="l244"></a> </span><span class=cF6>&quot;Largest Entry :%d\n&quot;</span><span class=cF0>,largest_entry;
<a name="l245"></a> </span><span class=cF6>&quot;Word Count :%d\n&quot;</span><span class=cF0>,word_cnt;
<a name="l246"></a>
<a name="l247"></a> </span><span class=cF5>FileWrite</span><span class=cF0>(</span><span class=cF3>ACD_DEF_FILENAME</span><span class=cF0>,out_start,out_ptr-out_start);
<a name="l248"></a> </span><span class=cF6>&quot;Def File Size :%d\n&quot;</span><span class=cF0>,out_ptr-out_start;
<a name="l249"></a>
<a name="l250"></a> sorted_word_start=ACDSortWords(word_start,word_ptr-word_start,word_cnt);
<a name="l251"></a> </span><span class=cF5>FileWrite</span><span class=cF0>(</span><span class=cF3>ACD_WORD_FILENAME</span><span class=cF0>,sorted_word_start,word_ptr-word_start);
<a name="l252"></a> </span><span class=cF6>&quot;Word File Size:%d\n&quot;</span><span class=cF0>,word_ptr-word_start;
<a name="l253"></a>
<a name="l254"></a> </span><span class=cF5>Free</span><span class=cF0>(out_start);
<a name="l255"></a> </span><span class=cF5>Free</span><span class=cF0>(word_start);
<a name="l256"></a> </span><span class=cF5>Free</span><span class=cF0>(sorted_word_start);
<a name="l257"></a>}
<a name="l258"></a>
<a name="l259"></a></span><span class=cF5>Cd</span><span class=cF0>(</span><span class=cF3>__DIR__</span><span class=cF0>);
<a name="l260"></a>ACDPreprocess(</span><span class=cF6>&quot;DICTIONARY.DD&quot;</span><span class=cF0>,</span><span class=cF6>&quot;DICTIONARY2.DD&quot;</span><span class=cF0>);
<a name="l261"></a>ACDGen(</span><span class=cF6>&quot;DICTIONARY2.DD&quot;</span><span class=cF0>);
</span></pre></body>
</html>

View File

@ -0,0 +1,257 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF0>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;AutoComplete/Dictionary&quot;</span><span class=cF0>
<a name="l2"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF5>ACDDefGet</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *st,</span><span class=cF9>I64</span><span class=cF0> def_num=1)
<a name="l3"></a>{</span><span class=cF2>//MAlloc str holding single dict definition of word.</span><span class=cF0>
<a name="l4"></a> </span><span class=cF9>CFile</span><span class=cF0> *f;
<a name="l5"></a> </span><span class=cF9>CHashGeneric</span><span class=cF0> *tmph;
<a name="l6"></a> </span><span class=cF1>U8</span><span class=cF0> *res=</span><span class=cF3>NULL</span><span class=cF0>,*buf,*in_ptr,
<a name="l7"></a> *st2=</span><span class=cF5>MStrUtil</span><span class=cF0>(st,</span><span class=cF3>SUF_TO_UPPER</span><span class=cF0>);
<a name="l8"></a> tmph=</span><span class=cF5>HashFind</span><span class=cF0>(st2,</span><span class=cFB>ac</span><span class=cF0>.hash_table,</span><span class=cF3>HTT_DICT_WORD</span><span class=cF0>);
<a name="l9"></a> </span><span class=cF5>Free</span><span class=cF0>(st2);
<a name="l10"></a> </span><span class=cF1>if</span><span class=cF0> (tmph) </span><span class=cF7>{</span><span class=cF0>
<a name="l11"></a> </span><span class=cF1>if</span><span class=cF0> (f=</span><span class=cF5>FOpen</span><span class=cF7>(</span><span class=cF3>ACD_DEF_FILENAME</span><span class=cF0>,</span><span class=cF6>&quot;r&quot;</span><span class=cF7>)</span><span class=cF0>) {
<a name="l12"></a> buf=</span><span class=cF5>MAlloc</span><span class=cF0>(</span><span class=cF3>ACD_BLK_SIZE</span><span class=cF0>*2+1);
<a name="l13"></a> buf[</span><span class=cF3>ACD_BLK_SIZE</span><span class=cF0>*2]=0; </span><span class=cF2>//terminate</span><span class=cF0>
<a name="l14"></a> </span><span class=cF5>FBlkRead</span><span class=cF0>(f,buf,tmph-&gt;user_data0*</span><span class=cF3>ACD_BLK_SIZE</span><span class=cF0>/</span><span class=cF3>BLK_SIZE</span><span class=cF0>,
<a name="l15"></a> </span><span class=cF3>ACD_BLK_SIZE</span><span class=cF0>*2/</span><span class=cF3>BLK_SIZE</span><span class=cF0>);
<a name="l16"></a> </span><span class=cF5>FClose</span><span class=cF0>(f);
<a name="l17"></a> in_ptr=buf;
<a name="l18"></a> </span><span class=cF1>while</span><span class=cF0> (in_ptr&lt;buf+</span><span class=cF3>ACD_BLK_SIZE</span><span class=cF0>*2) </span><span class=cF7>{</span><span class=cF0>
<a name="l19"></a> </span><span class=cF1>while</span><span class=cF0> (*in_ptr!=</span><span class=cF3>ACD_WORD_CHAR</span><span class=cF0> &amp;&amp; in_ptr&lt;buf+</span><span class=cF3>ACD_BLK_SIZE</span><span class=cF0>*2)
<a name="l20"></a> in_ptr++;
<a name="l21"></a> </span><span class=cF1>if</span><span class=cF0> (*in_ptr++==</span><span class=cF3>ACD_WORD_CHAR</span><span class=cF0>) {
<a name="l22"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>StrICmp</span><span class=cF7>(</span><span class=cF0>st,in_ptr</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l23"></a> </span><span class=cF1>while</span><span class=cF0> (def_num &amp;&amp; *in_ptr!=</span><span class=cF3>ACD_WORD_CHAR</span><span class=cF0>
<a name="l24"></a> &amp;&amp; in_ptr&lt;buf+</span><span class=cF3>ACD_BLK_SIZE</span><span class=cF0>*2) {
<a name="l25"></a> </span><span class=cF1>if</span><span class=cF0> (*in_ptr==</span><span class=cF3>ACD_DEF_CHAR</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l26"></a> </span><span class=cF1>if</span><span class=cF0> (!--def_num)
<a name="l27"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l28"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l29"></a> in_ptr++;
<a name="l30"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l31"></a> in_ptr++;
<a name="l32"></a> }
<a name="l33"></a> </span><span class=cF1>if</span><span class=cF0> (*in_ptr++==</span><span class=cF3>ACD_DEF_CHAR</span><span class=cF0>) {
<a name="l34"></a> res=</span><span class=cF5>StrNew</span><span class=cF0>(in_ptr);
<a name="l35"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l36"></a> }
<a name="l37"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l38"></a> }
<a name="l39"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l40"></a> </span><span class=cF5>Free</span><span class=cF0>(buf);
<a name="l41"></a> }
<a name="l42"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l43"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l44"></a>}
<a name="l45"></a>
<a name="l46"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF5>ACDDefsGet</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *st)
<a name="l47"></a>{</span><span class=cF2>//MAlloc str with all dict definitions of word.</span><span class=cF0>
<a name="l48"></a> </span><span class=cF9>CFile</span><span class=cF0> *f;
<a name="l49"></a> </span><span class=cF9>CHashGeneric</span><span class=cF0> *tmph;
<a name="l50"></a> </span><span class=cF1>U8</span><span class=cF0> *res=</span><span class=cF3>NULL</span><span class=cF0>,*buf,*in_ptr,*in_ptr2,
<a name="l51"></a> *st2=</span><span class=cF5>MStrUtil</span><span class=cF0>(st,</span><span class=cF3>SUF_TO_UPPER</span><span class=cF0>);
<a name="l52"></a> tmph=</span><span class=cF5>HashFind</span><span class=cF0>(st2,</span><span class=cFB>ac</span><span class=cF0>.hash_table,</span><span class=cF3>HTT_DICT_WORD</span><span class=cF0>);
<a name="l53"></a> </span><span class=cF5>Free</span><span class=cF0>(st2);
<a name="l54"></a> </span><span class=cF1>if</span><span class=cF0> (tmph) </span><span class=cF7>{</span><span class=cF0>
<a name="l55"></a> </span><span class=cF1>if</span><span class=cF0> (f=</span><span class=cF5>FOpen</span><span class=cF7>(</span><span class=cF3>ACD_DEF_FILENAME</span><span class=cF0>,</span><span class=cF6>&quot;r&quot;</span><span class=cF7>)</span><span class=cF0>) {
<a name="l56"></a> buf=</span><span class=cF5>MAlloc</span><span class=cF0>(</span><span class=cF3>ACD_BLK_SIZE</span><span class=cF0>*2+1);
<a name="l57"></a> buf[</span><span class=cF3>ACD_BLK_SIZE</span><span class=cF0>*2]=0; </span><span class=cF2>//terminate</span><span class=cF0>
<a name="l58"></a> </span><span class=cF5>FBlkRead</span><span class=cF0>(f,buf,tmph-&gt;user_data0*</span><span class=cF3>ACD_BLK_SIZE</span><span class=cF0>/</span><span class=cF3>BLK_SIZE</span><span class=cF0>,
<a name="l59"></a> </span><span class=cF3>ACD_BLK_SIZE</span><span class=cF0>*2/</span><span class=cF3>BLK_SIZE</span><span class=cF0>);
<a name="l60"></a> </span><span class=cF5>FClose</span><span class=cF0>(f);
<a name="l61"></a> in_ptr=buf;
<a name="l62"></a> </span><span class=cF1>while</span><span class=cF0> (in_ptr&lt;buf+</span><span class=cF3>ACD_BLK_SIZE</span><span class=cF0>*2) </span><span class=cF7>{</span><span class=cF0>
<a name="l63"></a> </span><span class=cF1>while</span><span class=cF0> (*in_ptr!=</span><span class=cF3>ACD_WORD_CHAR</span><span class=cF0> &amp;&amp; in_ptr&lt;buf+</span><span class=cF3>ACD_BLK_SIZE</span><span class=cF0>*2)
<a name="l64"></a> in_ptr++;
<a name="l65"></a> </span><span class=cF1>if</span><span class=cF0> (*in_ptr++==</span><span class=cF3>ACD_WORD_CHAR</span><span class=cF0>) {
<a name="l66"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>StrICmp</span><span class=cF7>(</span><span class=cF0>st,in_ptr</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l67"></a> in_ptr2=in_ptr;
<a name="l68"></a> in_ptr--;
<a name="l69"></a> </span><span class=cF1>while</span><span class=cF0> (*in_ptr2!=</span><span class=cF3>ACD_WORD_CHAR</span><span class=cF0>
<a name="l70"></a> &amp;&amp; in_ptr2&lt;buf+</span><span class=cF3>ACD_BLK_SIZE</span><span class=cF0>*2) {
<a name="l71"></a> in_ptr2++;
<a name="l72"></a> }
<a name="l73"></a> res=</span><span class=cF5>MAlloc</span><span class=cF0>(in_ptr2+1-in_ptr);
<a name="l74"></a> </span><span class=cF5>MemCpy</span><span class=cF0>(res,in_ptr,in_ptr2-in_ptr);
<a name="l75"></a> res[in_ptr2-in_ptr]=</span><span class=cF3>ACD_END_CHAR</span><span class=cF0>;
<a name="l76"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l77"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l78"></a> }
<a name="l79"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l80"></a> </span><span class=cF5>Free</span><span class=cF0>(buf);
<a name="l81"></a> }
<a name="l82"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l83"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l84"></a>}
<a name="l85"></a>
<a name="l86"></a></span><span class=cF2>/*Fmt of word lst entry:</span><span class=cF0>
<a name="l87"></a></span><span class=cF2> U8 ACD_WORD_CHAR</span><span class=cF0>
<a name="l88"></a></span><span class=cF2> U8 word[] with terminating zero</span><span class=cF0>
<a name="l89"></a></span><span class=cF2> I16 block;</span><span class=cF0>
<a name="l90"></a></span><span class=cF2>*/</span><span class=cF0>
<a name="l91"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF5>ACDWordPtAt</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *st)
<a name="l92"></a>{</span><span class=cF2>//Point to word in word list.</span><span class=cF0>
<a name="l93"></a> </span><span class=cF9>I64</span><span class=cF0> i;
<a name="l94"></a> </span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF1>start</span><span class=cF0>=</span><span class=cFB>acd</span><span class=cF0>.word_lst,*r=</span><span class=cF1>start</span><span class=cF0>,
<a name="l95"></a> *</span><span class=cF1>end</span><span class=cF0>=</span><span class=cFB>acd</span><span class=cF0>.word_lst+</span><span class=cFB>acd</span><span class=cF0>.word_lst_size;
<a name="l96"></a> </span><span class=cF1>if</span><span class=cF0> (!st || !*st)
<a name="l97"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cFB>acd</span><span class=cF0>.word_lst;
<a name="l98"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cFB>acd</span><span class=cF0>.word_lst_size) </span><span class=cF7>{</span><span class=cF0>
<a name="l99"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF1>start</span><span class=cF0>+3&lt;</span><span class=cF1>end</span><span class=cF0>) {
<a name="l100"></a> r=(</span><span class=cF1>start</span><span class=cF0>+</span><span class=cF1>end</span><span class=cF0>)&gt;&gt;1;
<a name="l101"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l102"></a> </span><span class=cF1>while</span><span class=cF0> (*r!=</span><span class=cF3>ACD_WORD_CHAR</span><span class=cF0> &amp;&amp; r&gt;</span><span class=cFB>acd</span><span class=cF0>.word_lst)
<a name="l103"></a> r--;
<a name="l104"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF7>(</span><span class=cF0>r[2]==</span><span class=cF3>ACD_WORD_CHAR</span><span class=cF0>||r[1]==</span><span class=cF3>ACD_WORD_CHAR</span><span class=cF7>)</span><span class=cF0>&amp;&amp;r-3&gt;</span><span class=cFB>acd</span><span class=cF0>.word_lst)
<a name="l105"></a> r--;
<a name="l106"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l107"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l108"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l109"></a> </span><span class=cF1>if</span><span class=cF0> (*r==</span><span class=cF3>ACD_WORD_CHAR</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l110"></a> i=</span><span class=cF5>StrICmp</span><span class=cF0>(st,r+1);
<a name="l111"></a> </span><span class=cF1>if</span><span class=cF0> (i&lt;0)
<a name="l112"></a> </span><span class=cF1>end</span><span class=cF0>=r-1;
<a name="l113"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (i&gt;0)
<a name="l114"></a> </span><span class=cF1>start</span><span class=cF0>=r+</span><span class=cF5>StrLen</span><span class=cF0>(r)+3;
<a name="l115"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l116"></a> </span><span class=cF1>return</span><span class=cF0> r;
<a name="l117"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l118"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l119"></a> }
<a name="l120"></a> r=(</span><span class=cF1>start</span><span class=cF0>+</span><span class=cF1>end</span><span class=cF0>)&gt;&gt;1;
<a name="l121"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>) {
<a name="l122"></a> </span><span class=cF1>while</span><span class=cF0> (*r!=</span><span class=cF3>ACD_WORD_CHAR</span><span class=cF0> &amp;&amp; r&gt;</span><span class=cFB>acd</span><span class=cF0>.word_lst)
<a name="l123"></a> r--;
<a name="l124"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF7>(</span><span class=cF0>r[2]==</span><span class=cF3>ACD_WORD_CHAR</span><span class=cF0>||r[1]==</span><span class=cF3>ACD_WORD_CHAR</span><span class=cF7>)</span><span class=cF0>&amp;&amp;r-3&gt;</span><span class=cFB>acd</span><span class=cF0>.word_lst)
<a name="l125"></a> r--;
<a name="l126"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l127"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l128"></a> }
<a name="l129"></a> </span><span class=cF1>if</span><span class=cF0> (*r==</span><span class=cF3>ACD_WORD_CHAR</span><span class=cF0> &amp;&amp; </span><span class=cF5>StrICmp</span><span class=cF7>(</span><span class=cF0>st,r+1</span><span class=cF7>)</span><span class=cF0>&gt;0)
<a name="l130"></a> r+=</span><span class=cF5>StrLen</span><span class=cF0>(r)+3;
<a name="l131"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l132"></a> </span><span class=cF1>if</span><span class=cF0> (*r==</span><span class=cF3>ACD_WORD_CHAR</span><span class=cF0>)
<a name="l133"></a> </span><span class=cF1>return</span><span class=cF0> r;
<a name="l134"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l135"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cFB>acd</span><span class=cF0>.word_lst;
<a name="l136"></a>}
<a name="l137"></a>
<a name="l138"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACDFillin</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> n)
<a name="l139"></a>{
<a name="l140"></a> </span><span class=cF1>U8</span><span class=cF0> *s;
<a name="l141"></a> </span><span class=cF9>I64</span><span class=cF0> len;
<a name="l142"></a> </span><span class=cF1>if</span><span class=cF0> (0&lt;=n&lt;</span><span class=cFB>acd</span><span class=cF0>.num_fillins) </span><span class=cF7>{</span><span class=cF0>
<a name="l143"></a> s=</span><span class=cFB>acd</span><span class=cF0>.fillins[n]+1;
<a name="l144"></a> len=</span><span class=cF5>StrLen</span><span class=cF0>(s);
<a name="l145"></a> </span><span class=cF1>if</span><span class=cF0> (len&gt;</span><span class=cFB>ac</span><span class=cF0>.partial_len)
<a name="l146"></a> </span><span class=cF5>In</span><span class=cF0>(s+</span><span class=cFB>ac</span><span class=cF0>.partial_len);
<a name="l147"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l148"></a>}
<a name="l149"></a>
<a name="l150"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACDDefsPut</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc=</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF1>U8</span><span class=cF0> *st,</span><span class=cF9>I64</span><span class=cF0> num=-1)
<a name="l151"></a>{</span><span class=cF2>//Put to doc a dictionary definition(s) of a word.</span><span class=cF0>
<a name="l152"></a> </span><span class=cF1>U8</span><span class=cF0> *st2,*st3;
<a name="l153"></a> </span><span class=cF9>I64</span><span class=cF0> ch,i=0;
<a name="l154"></a> </span><span class=cF1>if</span><span class=cF0> (!st) </span><span class=cF1>return</span><span class=cF0>;
<a name="l155"></a> </span><span class=cF1>if</span><span class=cF0> (*st==</span><span class=cF3>ACD_WORD_CHAR</span><span class=cF0>)
<a name="l156"></a> st++;
<a name="l157"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$WW,1$$RED$%s:$FG$\n\n&quot;</span><span class=cF0>,st);
<a name="l158"></a> </span><span class=cF1>if</span><span class=cF0> (num&lt;0) </span><span class=cF7>{</span><span class=cF0>
<a name="l159"></a> </span><span class=cF1>if</span><span class=cF0> (st3=</span><span class=cF5>ACDDefsGet</span><span class=cF7>(</span><span class=cF0>st</span><span class=cF7>)</span><span class=cF0>) {
<a name="l160"></a> st2=st3;
<a name="l161"></a> </span><span class=cF1>while</span><span class=cF0> (ch=*st2++) </span><span class=cF7>{</span><span class=cF0>
<a name="l162"></a> </span><span class=cF1>switch</span><span class=cF0> (ch) {
<a name="l163"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ACD_WORD_CHAR</span><span class=cF0>:
<a name="l164"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l165"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ACD_DEF_CHAR</span><span class=cF0>:
<a name="l166"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$GREEN$(%d)$FG$ %s\n&quot;</span><span class=cF0>,
<a name="l167"></a> ++i,st2);
<a name="l168"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l169"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ACD_PRONUNCIATION_CHAR</span><span class=cF0>:
<a name="l170"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$LTGREEN$%s$FG$\n&quot;</span><span class=cF0>,st2);
<a name="l171"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l172"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ACD_POS_CHAR</span><span class=cF0>:
<a name="l173"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$BLACK$%s$FG$\n&quot;</span><span class=cF0>,st2);
<a name="l174"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l175"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>ACD_EXTRA_CHAR</span><span class=cF0>:
<a name="l176"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$LTBLUE$%s$FG$\n&quot;</span><span class=cF0>,st2);
<a name="l177"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l178"></a> }
<a name="l179"></a> st2+=</span><span class=cF5>StrLen</span><span class=cF0>(st2)+1;
<a name="l180"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l181"></a> </span><span class=cF5>Free</span><span class=cF0>(st3);
<a name="l182"></a> }
<a name="l183"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l184"></a> </span><span class=cF1>while</span><span class=cF0> (st2=</span><span class=cF5>ACDDefGet</span><span class=cF7>(</span><span class=cF0>st,++i</span><span class=cF7>)</span><span class=cF0>) {
<a name="l185"></a> </span><span class=cF1>if</span><span class=cF0> (i==num)
<a name="l186"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;$GREEN$(%d)$FG$ %s\n&quot;</span><span class=cF0>,
<a name="l187"></a> i,st2);
<a name="l188"></a> </span><span class=cF5>Free</span><span class=cF0>(st2);
<a name="l189"></a> }
<a name="l190"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l191"></a>}
<a name="l192"></a>
<a name="l193"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACDPopUpDef</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *st,</span><span class=cF9>I64</span><span class=cF0> num=-1,</span><span class=cF9>CTask</span><span class=cF0> *parent=</span><span class=cF3>NULL</span><span class=cF0>)
<a name="l194"></a>{
<a name="l195"></a> </span><span class=cF1>U8</span><span class=cF0> *buf;
<a name="l196"></a> buf=</span><span class=cF5>MStrPrint</span><span class=cF0>(</span><span class=cF6>&quot;ACDDefsPut(DocPut,\&quot;%s\&quot;,%d);View;&quot;</span><span class=cF0>,st,num);
<a name="l197"></a> </span><span class=cF5>PopUp</span><span class=cF0>(buf,parent);
<a name="l198"></a> </span><span class=cF5>Free</span><span class=cF0>(buf);
<a name="l199"></a>}
<a name="l200"></a>
<a name="l201"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACDDef</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> n,</span><span class=cF9>CTask</span><span class=cF0> *parent=</span><span class=cF3>NULL</span><span class=cF0>)
<a name="l202"></a>{
<a name="l203"></a> </span><span class=cF1>if</span><span class=cF0> (0&lt;=n&lt;</span><span class=cFB>acd</span><span class=cF0>.num_fillins)
<a name="l204"></a> </span><span class=cF5>ACDPopUpDef</span><span class=cF0>(</span><span class=cFB>acd</span><span class=cF0>.fillins[n],-1,parent);
<a name="l205"></a>}
<a name="l206"></a>
<a name="l207"></a>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;AutoComplete&quot;</span><span class=cF0>
<a name="l208"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACFillIn</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> n)
<a name="l209"></a>{
<a name="l210"></a> </span><span class=cF1>U8</span><span class=cF0> *s;
<a name="l211"></a> </span><span class=cF1>if</span><span class=cF0> (0&lt;=--n&lt;</span><span class=cFB>ac</span><span class=cF0>.num_fillins) </span><span class=cF7>{</span><span class=cF0>
<a name="l212"></a> s=</span><span class=cFB>ac</span><span class=cF0>.fillin_matches[n]-&gt;str;
<a name="l213"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>StrLen</span><span class=cF7>(</span><span class=cF0>s</span><span class=cF7>)</span><span class=cF0>&gt;</span><span class=cFB>ac</span><span class=cF0>.partial_len)
<a name="l214"></a> </span><span class=cF5>In</span><span class=cF0>(s+</span><span class=cFB>ac</span><span class=cF0>.partial_len);
<a name="l215"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l216"></a>}
<a name="l217"></a>
<a name="l218"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACMan</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> n,</span><span class=cF9>CTask</span><span class=cF0> *parent_task=</span><span class=cF3>NULL</span><span class=cF0>)
<a name="l219"></a>{
<a name="l220"></a> </span><span class=cF9>CHashAC</span><span class=cF0> *tmpw;
<a name="l221"></a> </span><span class=cF9>CHashSrcSym</span><span class=cF0> *tmph;
<a name="l222"></a> </span><span class=cF1>if</span><span class=cF0> (0&lt;=--n&lt;</span><span class=cFB>ac</span><span class=cF0>.num_fillins &amp;&amp; </span><span class=cF7>(</span><span class=cF0>tmpw=</span><span class=cFB>ac</span><span class=cF0>.fillin_matches[n]</span><span class=cF7>)</span><span class=cF0> &amp;&amp;
<a name="l223"></a> </span><span class=cF7>(</span><span class=cF0>tmph=</span><span class=cF5>HashFind</span><span class=cF0>(tmpw-&gt;str,</span><span class=cF5>Fs</span><span class=cF0>-&gt;hash_table,</span><span class=cF3>HTG_SRC_SYM</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0> &amp;&amp;
<a name="l224"></a> tmph-&gt;src_link)
<a name="l225"></a> </span><span class=cF5>PopUpEd</span><span class=cF0>(tmph-&gt;src_link,parent_task);
<a name="l226"></a>}
</span></pre></body>
</html>

View File

@ -0,0 +1,200 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF0>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;AutoComplete/Dictionary&quot;</span><span class=cF0>
<a name="l2"></a></span><span class=cFB>acd</span><span class=cF0>.has_words=</span><span class=cF5>FileFind</span><span class=cF0>(</span><span class=cF3>ACD_WORD_FILENAME</span><span class=cF0>);
<a name="l3"></a></span><span class=cFB>acd</span><span class=cF0>.has_defs =</span><span class=cF5>FileFind</span><span class=cF0>(</span><span class=cF3>ACD_DEF_FILENAME</span><span class=cF0>)||</span><span class=cF5>FileFind</span><span class=cF0>(</span><span class=cF3>ACD_DEF_FILENAME_Z</span><span class=cF0>);
<a name="l4"></a>
<a name="l5"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACDWordsLoad</span><span class=cF0>()
<a name="l6"></a>{</span><span class=cF2>//Put words from word list into hash table.</span><span class=cF0>
<a name="l7"></a> </span><span class=cF9>I64</span><span class=cF0> size;
<a name="l8"></a> </span><span class=cF9>CHashGeneric</span><span class=cF0> *tmph;
<a name="l9"></a> </span><span class=cF1>U8</span><span class=cF0> *in_ptr,*in_start,*st2;
<a name="l10"></a> </span><span class=cF9>U16</span><span class=cF0> *d;
<a name="l11"></a> </span><span class=cFB>acd</span><span class=cF0>.num_words=0;
<a name="l12"></a> </span><span class=cF1>if</span><span class=cF0> (in_ptr=</span><span class=cF5>FileRead</span><span class=cF7>(</span><span class=cF3>ACD_WORD_FILENAME</span><span class=cF0>,&amp;size</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l13"></a> in_start=in_ptr;
<a name="l14"></a> </span><span class=cF5>Free</span><span class=cF0>(</span><span class=cFB>acd</span><span class=cF0>.word_lst);
<a name="l15"></a> </span><span class=cFB>acd</span><span class=cF0>.word_lst=</span><span class=cF5>AMAlloc</span><span class=cF0>(size);
<a name="l16"></a> </span><span class=cF5>MemCpy</span><span class=cF0>(</span><span class=cFB>acd</span><span class=cF0>.word_lst,in_start,size);
<a name="l17"></a> </span><span class=cFB>acd</span><span class=cF0>.word_lst_size=size;
<a name="l18"></a>
<a name="l19"></a> </span><span class=cF1>while</span><span class=cF0> (in_ptr&lt;in_start+size) {
<a name="l20"></a> </span><span class=cF1>if</span><span class=cF0> (*in_ptr==</span><span class=cF3>ACD_WORD_CHAR</span><span class=cF0>)
<a name="l21"></a> in_ptr++;
<a name="l22"></a> </span><span class=cF1>if</span><span class=cF0> (*in_ptr) </span><span class=cF7>{</span><span class=cF0>
<a name="l23"></a> st2=</span><span class=cF5>MStrUtil</span><span class=cF0>(in_ptr,</span><span class=cF3>SUF_TO_UPPER</span><span class=cF0>);
<a name="l24"></a> tmph=</span><span class=cF5>ACAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CHashGeneric</span><span class=cF7>)</span><span class=cF0>+</span><span class=cF5>StrLen</span><span class=cF7>(</span><span class=cF0>st2</span><span class=cF7>)</span><span class=cF0>+1);
<a name="l25"></a> </span><span class=cF5>StrCpy</span><span class=cF0>(tmph+1,st2);
<a name="l26"></a> </span><span class=cF5>Free</span><span class=cF0>(st2);
<a name="l27"></a> in_ptr+=</span><span class=cF5>StrLen</span><span class=cF0>(in_ptr)+1;
<a name="l28"></a> tmph-&gt;str=tmph+1;
<a name="l29"></a> tmph-&gt;use_cnt=1;
<a name="l30"></a> tmph-&gt;type=</span><span class=cF3>HTT_DICT_WORD</span><span class=cF0>;
<a name="l31"></a> d=in_ptr;
<a name="l32"></a> tmph-&gt;user_data0=*d;
<a name="l33"></a> in_ptr+=2;
<a name="l34"></a> </span><span class=cF5>HashAdd</span><span class=cF0>(tmph,</span><span class=cFB>ac</span><span class=cF0>.hash_table);
<a name="l35"></a> </span><span class=cFB>acd</span><span class=cF0>.num_words++;
<a name="l36"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l37"></a> in_ptr+=3;
<a name="l38"></a> }
<a name="l39"></a> </span><span class=cF5>Free</span><span class=cF0>(in_start);
<a name="l40"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l41"></a>}
<a name="l42"></a>
<a name="l43"></a>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;AutoComplete&quot;</span><span class=cF0>
<a name="l44"></a></span><span class=cF9>CHashAC</span><span class=cF0> *</span><span class=cF5>ACHashAdd</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *w)
<a name="l45"></a>{
<a name="l46"></a> </span><span class=cF9>CHashAC</span><span class=cF0> *tmpw=</span><span class=cF5>HashFind</span><span class=cF0>(w,</span><span class=cFB>ac</span><span class=cF0>.hash_table,</span><span class=cF3>HTT_WORD</span><span class=cF0>);
<a name="l47"></a> </span><span class=cF1>if</span><span class=cF0> (tmpw) </span><span class=cF7>{</span><span class=cF0>
<a name="l48"></a> tmpw-&gt;hits++;
<a name="l49"></a> </span><span class=cF1>return</span><span class=cF0> tmpw;
<a name="l50"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l51"></a> tmpw=</span><span class=cF5>ACAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CHashAC</span><span class=cF7>)</span><span class=cF0>);
<a name="l52"></a> tmpw-&gt;str=</span><span class=cF5>AStrNew</span><span class=cF0>(w);
<a name="l53"></a> tmpw-&gt;type=</span><span class=cF3>HTT_WORD</span><span class=cF0>;
<a name="l54"></a> tmpw-&gt;use_cnt=1;
<a name="l55"></a> tmpw-&gt;hits=1;
<a name="l56"></a> </span><span class=cF5>HashAdd</span><span class=cF0>(tmpw,</span><span class=cFB>ac</span><span class=cF0>.hash_table);
<a name="l57"></a> </span><span class=cFB>ac</span><span class=cF0>.num_words++;
<a name="l58"></a> </span><span class=cF1>return</span><span class=cF0> tmpw;
<a name="l59"></a>}
<a name="l60"></a>
<a name="l61"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACSingleFileAdd</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *buf)
<a name="l62"></a>{
<a name="l63"></a> </span><span class=cF9>I64</span><span class=cF0> ch;
<a name="l64"></a> </span><span class=cF1>U8</span><span class=cF0> *ptr=buf,*ptr2,*ptr3;
<a name="l65"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l66"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>) {
<a name="l67"></a> </span><span class=cF1>if</span><span class=cF0> (ch=*ptr++) </span><span class=cF7>{</span><span class=cF0>
<a name="l68"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cFB>char_bmp_alpha_numeric</span><span class=cF0>,ch</span><span class=cF7>)</span><span class=cF0>)
<a name="l69"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l70"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l71"></a> </span><span class=cF1>return</span><span class=cF0>;
<a name="l72"></a> }
<a name="l73"></a> ptr3=ptr;
<a name="l74"></a> ptr2=ptr;
<a name="l75"></a> ptr--;
<a name="l76"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>) {
<a name="l77"></a> </span><span class=cF1>if</span><span class=cF0> (ch=*ptr2++) </span><span class=cF7>{</span><span class=cF0>
<a name="l78"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cFB>char_bmp_alpha_numeric</span><span class=cF0>,ch</span><span class=cF7>)</span><span class=cF0>)
<a name="l79"></a> *ptr3++=ch;
<a name="l80"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (ch!=</span><span class=cF3>CH_CURSOR</span><span class=cF0>)
<a name="l81"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l82"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l83"></a> ptr2--;
<a name="l84"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l85"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l86"></a> }
<a name="l87"></a> *ptr3=0;
<a name="l88"></a> </span><span class=cF5>ACHashAdd</span><span class=cF0>(ptr);
<a name="l89"></a> ptr=ptr2;
<a name="l90"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l91"></a>}
<a name="l92"></a>
<a name="l93"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACMainFileLstTraverse</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *files_find_mask)
<a name="l94"></a>{
<a name="l95"></a> </span><span class=cF1>U8</span><span class=cF0> *buf;
<a name="l96"></a> </span><span class=cF9>CDirEntry</span><span class=cF0> *tmpde,*tmpde1;
<a name="l97"></a> </span><span class=cF1>try</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l98"></a> tmpde=tmpde1=</span><span class=cF5>FilesFind</span><span class=cF0>(files_find_mask,
<a name="l99"></a> </span><span class=cF3>FUF_RECURSE</span><span class=cF0>|</span><span class=cF3>FUF_JUST_TXT</span><span class=cF0>|</span><span class=cF3>FUF_JUST_FILES</span><span class=cF0>|</span><span class=cF3>FUF_CLUS_ORDER</span><span class=cF0>);
<a name="l100"></a> </span><span class=cF1>while</span><span class=cF0> (tmpde) {
<a name="l101"></a> </span><span class=cF6>&quot;%s\n&quot;</span><span class=cF0>,tmpde-&gt;full_name;
<a name="l102"></a> buf=</span><span class=cF5>FileRead</span><span class=cF0>(tmpde-&gt;full_name);
<a name="l103"></a> </span><span class=cF5>ACSingleFileAdd</span><span class=cF0>(buf);
<a name="l104"></a> </span><span class=cF5>Free</span><span class=cF0>(buf);
<a name="l105"></a> tmpde=tmpde-&gt;next;
<a name="l106"></a> }
<a name="l107"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>catch</span><span class=cF0>
<a name="l108"></a> </span><span class=cF5>Fs</span><span class=cF0>-&gt;catch_except=</span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l109"></a> </span><span class=cF5>DirTreeDel</span><span class=cF0>(tmpde1);
<a name="l110"></a>}
<a name="l111"></a>
<a name="l112"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACProgressTask</span><span class=cF0>(</span><span class=cF1>Bool</span><span class=cF0> *_start_flag)
<a name="l113"></a>{
<a name="l114"></a> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF1>start</span><span class=cF0>=</span><span class=cFB>blkdev</span><span class=cF0>.write_cnt;
<a name="l115"></a> </span><span class=cFB>progress1</span><span class=cF0>=0;
<a name="l116"></a> </span><span class=cFB>progress1_max</span><span class=cF0>=(</span><span class=cF5>Size</span><span class=cF7>(</span><span class=cF3>ACD_DEF_FILENAME_Z</span><span class=cF0>,</span><span class=cF6>&quot;+x+s&quot;</span><span class=cF7>)</span><span class=cF0>+</span><span class=cF3>BLK_SIZE</span><span class=cF0>-1)&gt;&gt;</span><span class=cF3>BLK_SIZE_BITS</span><span class=cF0>;
<a name="l117"></a> </span><span class=cF5>StrCpy</span><span class=cF0>(</span><span class=cFB>progress1_desc</span><span class=cF0>,</span><span class=cF6>&quot;Uncompressing Dictionary&quot;</span><span class=cF0>);
<a name="l118"></a> </span><span class=cF1>start</span><span class=cF0>=</span><span class=cFB>blkdev</span><span class=cF0>.write_cnt;
<a name="l119"></a> *_start_flag=</span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l120"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cFB>progress1</span><span class=cF0>&lt;</span><span class=cFB>progress1_max</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l121"></a> </span><span class=cFB>progress1</span><span class=cF0>=</span><span class=cFB>blkdev</span><span class=cF0>.write_cnt-</span><span class=cF1>start</span><span class=cF0>;
<a name="l122"></a> </span><span class=cF5>Sleep</span><span class=cF0>(10);
<a name="l123"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l124"></a> *</span><span class=cFB>progress1_desc</span><span class=cF0>=</span><span class=cFB>progress1</span><span class=cF0>=</span><span class=cFB>progress1_max</span><span class=cF0>=0;
<a name="l125"></a>}
<a name="l126"></a>
<a name="l127"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACInit</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *mask=</span><span class=cF3>NULL</span><span class=cF0>)
<a name="l128"></a>{</span><span class=cF2>//Read files and build AutoComplete statistics.</span><span class=cF0>
<a name="l129"></a> </span><span class=cF1>Bool</span><span class=cF0> start_flag;
<a name="l130"></a> </span><span class=cF9>CBlkDev</span><span class=cF0> *bd=</span><span class=cF5>Let2BlkDev</span><span class=cF0>;
<a name="l131"></a>
<a name="l132"></a> </span><span class=cF5>LBtr</span><span class=cF0>(&amp;</span><span class=cFB>sys_run_level</span><span class=cF0>,</span><span class=cF3>RLf_AUTO_COMPLETE</span><span class=cF0>);
<a name="l133"></a> </span><span class=cF5>AutoComplete</span><span class=cF0>;
<a name="l134"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF5>LBts</span><span class=cF7>(</span><span class=cF0>&amp;</span><span class=cFB>ac</span><span class=cF0>.flags,</span><span class=cF3>ACf_INIT_IN_PROGRESS</span><span class=cF7>)</span><span class=cF0>)
<a name="l135"></a> </span><span class=cF5>Yield</span><span class=cF0>;
<a name="l136"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>DrvIsWritable</span><span class=cF0> &amp;&amp; </span><span class=cF5>FileFind</span><span class=cF7>(</span><span class=cF3>ACD_DEF_FILENAME_Z</span><span class=cF7>)</span><span class=cF0> &amp;&amp;
<a name="l137"></a> !</span><span class=cF5>FileFind</span><span class=cF7>(</span><span class=cF3>ACD_DEF_FILENAME</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l138"></a> </span><span class=cF1>if</span><span class=cF0> (bd-&gt;type!=</span><span class=cF3>BDT_RAM</span><span class=cF0>) {
<a name="l139"></a> start_flag=</span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l140"></a> </span><span class=cF5>Spawn</span><span class=cF0>(&amp;</span><span class=cF5>ACProgressTask</span><span class=cF0>,&amp;start_flag);
<a name="l141"></a> </span><span class=cF1>while</span><span class=cF0> (!start_flag)
<a name="l142"></a> </span><span class=cF5>Yield</span><span class=cF0>;
<a name="l143"></a> }
<a name="l144"></a> </span><span class=cF5>Move</span><span class=cF0>(</span><span class=cF3>ACD_DEF_FILENAME_Z</span><span class=cF0>,</span><span class=cF3>ACD_DEF_FILENAME</span><span class=cF0>);
<a name="l145"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l146"></a>
<a name="l147"></a> </span><span class=cF5>HashTableDel</span><span class=cF0>(</span><span class=cFB>ac</span><span class=cF0>.hash_table);
<a name="l148"></a> </span><span class=cFB>ac</span><span class=cF0>.hash_table=</span><span class=cF5>HashTableNew</span><span class=cF0>(2048,</span><span class=cFB>adam_task</span><span class=cF0>);
<a name="l149"></a>
<a name="l150"></a> </span><span class=cFB>ac</span><span class=cF0>.num_words=0;
<a name="l151"></a> </span><span class=cF5>Free</span><span class=cF0>(</span><span class=cFB>ac</span><span class=cF0>.cur_word);
<a name="l152"></a> </span><span class=cFB>ac</span><span class=cF0>.cur_word=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l153"></a>
<a name="l154"></a> </span><span class=cF1>if</span><span class=cF0> (mask)
<a name="l155"></a> </span><span class=cF5>ACMainFileLstTraverse</span><span class=cF0>(mask);
<a name="l156"></a>
<a name="l157"></a> </span><span class=cF5>ACDWordsLoad</span><span class=cF0>;
<a name="l158"></a> </span><span class=cF5>LBtr</span><span class=cF0>(&amp;</span><span class=cFB>ac</span><span class=cF0>.flags,</span><span class=cF3>ACf_INIT_IN_PROGRESS</span><span class=cF0>);
<a name="l159"></a> </span><span class=cF5>LBts</span><span class=cF0>(&amp;</span><span class=cFB>sys_run_level</span><span class=cF0>,</span><span class=cF3>RLf_AUTO_COMPLETE</span><span class=cF0>);
<a name="l160"></a> </span><span class=cF5>AutoComplete</span><span class=cF0>(</span><span class=cF3>ON</span><span class=cF0>);
<a name="l161"></a>}
<a name="l162"></a>
<a name="l163"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>AutoCompleteSize</span><span class=cF0>()
<a name="l164"></a>{
<a name="l165"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cFB>ac</span><span class=cF0>.hash_table)
<a name="l166"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF5>HashTableSize2</span><span class=cF0>(</span><span class=cFB>ac</span><span class=cF0>.hash_table)+</span><span class=cF5>MSize2</span><span class=cF0>(</span><span class=cFB>acd</span><span class=cF0>.word_lst);
<a name="l167"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l168"></a> </span><span class=cF1>return</span><span class=cF0> 0;
<a name="l169"></a>}
</span></pre></body>
</html>

View File

@ -0,0 +1,314 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF0>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;AutoComplete/Dictionary&quot;</span><span class=cF0>
<a name="l2"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACDDictWordsAdd</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *st)
<a name="l3"></a>{
<a name="l4"></a> </span><span class=cF9>I64</span><span class=cF0> i;
<a name="l5"></a> </span><span class=cF1>U8</span><span class=cF0> *ptr;
<a name="l6"></a> </span><span class=cF1>if</span><span class=cF0> (st &amp;&amp; *st &amp;&amp; </span><span class=cF7>(</span><span class=cF0>ptr=</span><span class=cF5>ACDWordPtAt</span><span class=cF0>(st)</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l7"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;</span><span class=cF3>ACD_FILLINS_NUM</span><span class=cF0>;i++) {
<a name="l8"></a> </span><span class=cF1>if</span><span class=cF0> (*ptr++!=</span><span class=cF3>ACD_WORD_CHAR</span><span class=cF0>)
<a name="l9"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l10"></a> </span><span class=cF1>if</span><span class=cF0> (i) </span><span class=cF6>'\n'</span><span class=cF0>;
<a name="l11"></a> </span><span class=cFB>acd</span><span class=cF0>.fillins[i]=ptr-1;
<a name="l12"></a> </span><span class=cF6>&quot;$GREEN$'%d'$FG$ %-23ts&quot;</span><span class=cF0>,i,ptr;
<a name="l13"></a> ptr+=</span><span class=cF5>StrLen</span><span class=cF0>(ptr)+3;
<a name="l14"></a> }
<a name="l15"></a> </span><span class=cFB>acd</span><span class=cF0>.num_fillins=i;
<a name="l16"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l17"></a>}
<a name="l18"></a>
<a name="l19"></a>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;AutoComplete&quot;</span><span class=cF0>
<a name="l20"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACDocRst</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> left,</span><span class=cF9>I64</span><span class=cF0> top)
<a name="l21"></a>{
<a name="l22"></a> </span><span class=cF9>CDoc</span><span class=cF0> *doc=</span><span class=cF5>DocPut</span><span class=cF0>;
<a name="l23"></a> </span><span class=cF5>DocRst</span><span class=cF0>(doc,</span><span class=cF3>TRUE</span><span class=cF0>);
<a name="l24"></a> doc-&gt;flags|=</span><span class=cF3>DOCF_SIZE_MIN</span><span class=cF0>;
<a name="l25"></a> </span><span class=cF5>Fs</span><span class=cF0>-&gt;border_src=</span><span class=cF3>BDS_CONST</span><span class=cF0>;
<a name="l26"></a> </span><span class=cF5>Fs</span><span class=cF0>-&gt;border_attr=</span><span class=cF3>LTGRAY</span><span class=cF0>&lt;&lt;4+</span><span class=cF5>DrvTextAttrGet</span><span class=cF0>(</span><span class=cF6>':'</span><span class=cF0>)&amp;15;
<a name="l27"></a> </span><span class=cF5>Fs</span><span class=cF0>-&gt;text_attr =</span><span class=cF3>LTGRAY</span><span class=cF0>&lt;&lt;4+</span><span class=cF3>BLUE</span><span class=cF0>;
<a name="l28"></a> </span><span class=cF5>LBtr</span><span class=cF0>(&amp;</span><span class=cF5>Fs</span><span class=cF0>-&gt;display_flags,</span><span class=cF3>DISPLAYf_SHOW</span><span class=cF0>);
<a name="l29"></a> </span><span class=cF5>WinHorz</span><span class=cF0>(left,</span><span class=cF5>Fs</span><span class=cF0>-&gt;win_right);
<a name="l30"></a> </span><span class=cF5>WinVert</span><span class=cF0>(top,</span><span class=cF5>Fs</span><span class=cF0>-&gt;win_bottom);
<a name="l31"></a> </span><span class=cF5>DocCursor</span><span class=cF0>;
<a name="l32"></a>}
<a name="l33"></a>
<a name="l34"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>ACSkipCrap</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *src,</span><span class=cF9>I64</span><span class=cF0> len)
<a name="l35"></a>{
<a name="l36"></a> </span><span class=cF9>I64</span><span class=cF0> j;
<a name="l37"></a> j=len-1;
<a name="l38"></a> </span><span class=cF1>while</span><span class=cF0> (j&gt;=0) </span><span class=cF7>{</span><span class=cF0>
<a name="l39"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cFB>char_bmp_alpha_numeric</span><span class=cF0>,src[j]</span><span class=cF7>)</span><span class=cF0>)
<a name="l40"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l41"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l42"></a> j--;
<a name="l43"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l44"></a> </span><span class=cF1>return</span><span class=cF0> j+1;
<a name="l45"></a>}
<a name="l46"></a>
<a name="l47"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>ACPriorWordInStr</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *src,</span><span class=cF1>U8</span><span class=cF0> *dst,</span><span class=cF9>I64</span><span class=cF0> len,</span><span class=cF9>I64</span><span class=cF0> buf_size)
<a name="l48"></a>{
<a name="l49"></a> </span><span class=cF9>I64</span><span class=cF0> i,j=0,k;
<a name="l50"></a> i=len-1;
<a name="l51"></a> </span><span class=cF1>while</span><span class=cF0> (i&gt;=0)
<a name="l52"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cFB>char_bmp_alpha_numeric</span><span class=cF0>,src[i]</span><span class=cF7>)</span><span class=cF0>)
<a name="l53"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l54"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l55"></a> i--;
<a name="l56"></a> </span><span class=cF1>if</span><span class=cF0> (i&gt;=-1 &amp;&amp; len&gt;0)
<a name="l57"></a> </span><span class=cF1>for</span><span class=cF0> (k=i+1;k&lt;len &amp;&amp; j&lt;buf_size-1;k++)
<a name="l58"></a> dst[j++]=src[k];
<a name="l59"></a> dst[j]=0;
<a name="l60"></a> </span><span class=cF1>return</span><span class=cF0> i+1;
<a name="l61"></a>}
<a name="l62"></a>
<a name="l63"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACFillInAdd</span><span class=cF0>(</span><span class=cF9>CHashAC</span><span class=cF0> *tmpw)
<a name="l64"></a>{
<a name="l65"></a> </span><span class=cF9>I64</span><span class=cF0> k;
<a name="l66"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cFB>ac</span><span class=cF0>.num_fillins&lt;</span><span class=cF3>AC_FILLINS_NUM</span><span class=cF0> ||
<a name="l67"></a> tmpw-&gt;hits&gt;</span><span class=cFB>ac</span><span class=cF0>.fillin_hits[</span><span class=cFB>ac</span><span class=cF0>.num_fillins-1]) </span><span class=cF7>{</span><span class=cF0>
<a name="l68"></a> </span><span class=cF1>for</span><span class=cF0> (k=</span><span class=cFB>ac</span><span class=cF0>.num_fillins-1;k&gt;=0;k--) {
<a name="l69"></a> </span><span class=cF1>if</span><span class=cF0> (tmpw-&gt;hits&lt;=</span><span class=cFB>ac</span><span class=cF0>.fillin_hits[k])
<a name="l70"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l71"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l72"></a> </span><span class=cFB>ac</span><span class=cF0>.fillin_matches[k+1]=</span><span class=cFB>ac</span><span class=cF0>.fillin_matches[k];
<a name="l73"></a> </span><span class=cFB>ac</span><span class=cF0>.fillin_hits[k+1] =</span><span class=cFB>ac</span><span class=cF0>.fillin_hits[k];
<a name="l74"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l75"></a> }
<a name="l76"></a> </span><span class=cFB>ac</span><span class=cF0>.fillin_matches[k+1]=tmpw;
<a name="l77"></a> </span><span class=cFB>ac</span><span class=cF0>.fillin_hits[k+1] =tmpw-&gt;hits;
<a name="l78"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cFB>ac</span><span class=cF0>.num_fillins&lt;</span><span class=cF3>AC_FILLINS_NUM</span><span class=cF0>)
<a name="l79"></a> </span><span class=cFB>ac</span><span class=cF0>.num_fillins++;
<a name="l80"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l81"></a>}
<a name="l82"></a>
<a name="l83"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACPutChoices</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *focus_l,</span><span class=cF9>CDocEntry</span><span class=cF0> *doc_e,</span><span class=cF9>CTask</span><span class=cF0> *focus_task,
<a name="l84"></a> </span><span class=cF1>Bool</span><span class=cF0> force_refresh)
<a name="l85"></a>{
<a name="l86"></a> </span><span class=cF9>I64</span><span class=cF0> i,data_col;
<a name="l87"></a> </span><span class=cF1>U8</span><span class=cF0> *buf,*buf1,*src=</span><span class=cF3>NULL</span><span class=cF0>,*st;
<a name="l88"></a> </span><span class=cF9>CHashAC</span><span class=cF0> *tmpw;
<a name="l89"></a> </span><span class=cF1>F64</span><span class=cF0> timeout_time=</span><span class=cF5>tS</span><span class=cF0>+0.5;
<a name="l90"></a> </span><span class=cF9>CHashSrcSym</span><span class=cF0> *tmph;
<a name="l91"></a>
<a name="l92"></a> src=</span><span class=cF5>DocScanLine</span><span class=cF0>(focus_l,doc_e,&amp;data_col);
<a name="l93"></a> </span><span class=cF5>DocUnlock</span><span class=cF0>(focus_l);
<a name="l94"></a> i=</span><span class=cF5>StrLen</span><span class=cF0>(src);
<a name="l95"></a> buf =</span><span class=cF5>MAlloc</span><span class=cF0>(</span><span class=cF5>MaxI64</span><span class=cF7>(</span><span class=cF0>i+1,256</span><span class=cF7>)</span><span class=cF0>);
<a name="l96"></a> buf1=</span><span class=cF5>MAlloc</span><span class=cF0>(</span><span class=cF5>MaxI64</span><span class=cF7>(</span><span class=cF0>i+1,256</span><span class=cF7>)</span><span class=cF0>);
<a name="l97"></a> </span><span class=cF1>if</span><span class=cF0> (data_col==-1)
<a name="l98"></a> data_col=0;
<a name="l99"></a> data_col=</span><span class=cF5>ACPriorWordInStr</span><span class=cF0>(src,buf,data_col,256);
<a name="l100"></a> </span><span class=cFB>ac</span><span class=cF0>.partial_len=</span><span class=cF5>StrLen</span><span class=cF0>(buf);
<a name="l101"></a> data_col=</span><span class=cF5>ACSkipCrap</span><span class=cF0>(src,data_col);
<a name="l102"></a> data_col=</span><span class=cF5>ACPriorWordInStr</span><span class=cF0>(src,buf1,data_col,256);
<a name="l103"></a>
<a name="l104"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cFB>ac</span><span class=cF0>.cur_word || </span><span class=cF5>StrCmp</span><span class=cF7>(</span><span class=cFB>ac</span><span class=cF0>.cur_word,buf</span><span class=cF7>)</span><span class=cF0> || force_refresh) </span><span class=cF7>{</span><span class=cF0>
<a name="l105"></a> st=</span><span class=cFB>ac</span><span class=cF0>.cur_word;
<a name="l106"></a> </span><span class=cFB>ac</span><span class=cF0>.cur_word=</span><span class=cF5>AStrNew</span><span class=cF0>(buf);
<a name="l107"></a> </span><span class=cF5>Free</span><span class=cF0>(st);
<a name="l108"></a> </span><span class=cFB>ac</span><span class=cF0>.num_fillins=0;
<a name="l109"></a> </span><span class=cF1>if</span><span class=cF0> (*</span><span class=cFB>ac</span><span class=cF0>.cur_word)
<a name="l110"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;=</span><span class=cFB>ac</span><span class=cF0>.hash_table-&gt;mask &amp;&amp; </span><span class=cF5>tS</span><span class=cF0>&lt;timeout_time;i++) {
<a name="l111"></a> tmpw=</span><span class=cFB>ac</span><span class=cF0>.hash_table-&gt;body[i];
<a name="l112"></a> </span><span class=cF1>while</span><span class=cF0> (tmpw) </span><span class=cF7>{</span><span class=cF0>
<a name="l113"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>MemCmp</span><span class=cF7>(</span><span class=cFB>ac</span><span class=cF0>.cur_word,tmpw-&gt;str,</span><span class=cF5>StrLen</span><span class=cF0>(</span><span class=cFB>ac</span><span class=cF0>.cur_word)</span><span class=cF7>)</span><span class=cF0>)
<a name="l114"></a> </span><span class=cF5>ACFillInAdd</span><span class=cF0>(tmpw);
<a name="l115"></a> tmpw=tmpw-&gt;next;
<a name="l116"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l117"></a> }
<a name="l118"></a> </span><span class=cF5>ACDocRst</span><span class=cF0>(51,13);
<a name="l119"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cFB>ac</span><span class=cF0>.cur_word &amp;&amp; *</span><span class=cFB>ac</span><span class=cF0>.cur_word) {
<a name="l120"></a> </span><span class=cF6>&quot;$PURPLE$Word:%s$FG$\n&quot;</span><span class=cF0>,</span><span class=cFB>ac</span><span class=cF0>.cur_word;
<a name="l121"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;</span><span class=cFB>ac</span><span class=cF0>.num_fillins;i++) </span><span class=cF7>{</span><span class=cF0>
<a name="l122"></a> st=</span><span class=cFB>ac</span><span class=cF0>.fillin_matches[i]-&gt;str;
<a name="l123"></a> </span><span class=cF6>&quot;$GREEN$F%02d$FG$ &quot;</span><span class=cF0>,i+1;
<a name="l124"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>TaskValidate</span><span class=cF7>(</span><span class=cF0>focus_task</span><span class=cF7>)</span><span class=cF0> &amp;&amp;
<a name="l125"></a> </span><span class=cF7>(</span><span class=cF0>tmph=</span><span class=cF5>HashFind</span><span class=cF0>(st,focus_task-&gt;hash_table,</span><span class=cF3>HTG_SRC_SYM</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0> &amp;&amp;
<a name="l126"></a> tmph-&gt;src_link) {
<a name="l127"></a> </span><span class=cF1>if</span><span class=cF0> (tmph-&gt;type&amp;</span><span class=cF3>HTF_PUBLIC</span><span class=cF0>)
<a name="l128"></a> </span><span class=cF6>&quot;$RED$&quot;</span><span class=cF0>;
<a name="l129"></a> </span><span class=cF6>&quot;$TX+UL+L+PU,\&quot;%$Q\&quot;,A=\&quot;%s\&quot;$$FG$\n&quot;</span><span class=cF0>,st,tmph-&gt;src_link;
<a name="l130"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l131"></a> </span><span class=cF6>&quot;%s\n&quot;</span><span class=cF0>,st;
<a name="l132"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l133"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cFB>acd</span><span class=cF0>.has_words)
<a name="l134"></a> </span><span class=cF5>ACDDictWordsAdd</span><span class=cF0>(</span><span class=cFB>ac</span><span class=cF0>.cur_word);
<a name="l135"></a> } </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>FileFind</span><span class=cF7>(</span><span class=cF6>&quot;::/Doc/StandBy.DD.Z&quot;</span><span class=cF7>)</span><span class=cF0>)
<a name="l136"></a> </span><span class=cF5>Type</span><span class=cF0>(</span><span class=cF6>&quot;::/Doc/StandBy.DD.Z&quot;</span><span class=cF0>,0);
<a name="l137"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l138"></a> </span><span class=cF5>Free</span><span class=cF0>(src);
<a name="l139"></a> </span><span class=cF5>Free</span><span class=cF0>(buf);
<a name="l140"></a> </span><span class=cF5>Free</span><span class=cF0>(buf1);
<a name="l141"></a>}
<a name="l142"></a>
<a name="l143"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACTaskNormal</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> sc,</span><span class=cF9>I64</span><span class=cF0> last_sc,
<a name="l144"></a> </span><span class=cF9>CTask</span><span class=cF0> *focus_task,</span><span class=cF9>CTask</span><span class=cF0> *original_focus_task)
<a name="l145"></a>{
<a name="l146"></a> </span><span class=cF9>CDoc</span><span class=cF0> *doc;
<a name="l147"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_e;
<a name="l148"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF7>(</span><span class=cF0>doc=</span><span class=cF5>DocPut</span><span class=cF0>(focus_task)</span><span class=cF7>)</span><span class=cF0> &amp;&amp;
<a name="l149"></a> focus_task!=</span><span class=cF5>Fs</span><span class=cF0> &amp;&amp; </span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&amp;focus_task-&gt;display_flags,</span><span class=cF3>DISPLAYf_SHOW</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l150"></a> </span><span class=cF5>DocLock</span><span class=cF0>(doc);
<a name="l151"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>TaskValidate</span><span class=cF7>(</span><span class=cF0>focus_task</span><span class=cF7>)</span><span class=cF0> &amp;&amp; original_focus_task==</span><span class=cFB>sys_focus_task</span><span class=cF0> &amp;&amp;
<a name="l152"></a> doc &amp;&amp; doc==</span><span class=cF5>DocPut</span><span class=cF7>(</span><span class=cF0>focus_task</span><span class=cF7>)</span><span class=cF0> &amp;&amp; </span><span class=cF7>(</span><span class=cF0>doc_e=doc-&gt;cur_entry</span><span class=cF7>)</span><span class=cF0>) {
<a name="l153"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e==doc) doc_e=doc_e-&gt;last;
<a name="l154"></a> </span><span class=cF1>while</span><span class=cF0> (doc_e-&gt;last!=doc &amp;&amp; </span><span class=cF7>(</span><span class=cF0>doc_e-&gt;type_u8==</span><span class=cF3>DOCT_NEW_LINE</span><span class=cF0> ||
<a name="l155"></a> doc_e-&gt;type_u8==</span><span class=cF3>DOCT_SOFT_NEW_LINE</span><span class=cF7>)</span><span class=cF0>)
<a name="l156"></a> doc_e=doc_e-&gt;last;
<a name="l157"></a> </span><span class=cF1>while</span><span class=cF0> (doc_e-&gt;last-&gt;type_u8!=</span><span class=cF3>DOCT_NEW_LINE</span><span class=cF0> &amp;&amp; doc_e-&gt;last!=doc)
<a name="l158"></a> doc_e=doc_e-&gt;last;
<a name="l159"></a> </span><span class=cF5>ACPutChoices</span><span class=cF0>(doc,doc_e,focus_task,</span><span class=cF5>ToBool</span><span class=cF7>(</span><span class=cF0>sc!=last_sc</span><span class=cF7>)</span><span class=cF0>);
<a name="l160"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l161"></a> </span><span class=cF5>DocUnlock</span><span class=cF0>(doc);
<a name="l162"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l163"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>LBts</span><span class=cF7>(</span><span class=cF0>&amp;</span><span class=cF5>Fs</span><span class=cF0>-&gt;display_flags,</span><span class=cF3>DISPLAYf_SHOW</span><span class=cF7>)</span><span class=cF0>)
<a name="l164"></a> </span><span class=cF5>WinZBufUpdate</span><span class=cF0>;
<a name="l165"></a>}
<a name="l166"></a>
<a name="l167"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACTaskCtrl</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> sc,</span><span class=cF9>I64</span><span class=cF0> last_sc,
<a name="l168"></a> </span><span class=cF9>CTask</span><span class=cF0> *focus_task,</span><span class=cF9>CTask</span><span class=cF0> *original_focus_task)
<a name="l169"></a>{
<a name="l170"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>TaskValidate</span><span class=cF7>(</span><span class=cF0>focus_task</span><span class=cF7>)</span><span class=cF0> &amp;&amp;
<a name="l171"></a> </span><span class=cF7>(</span><span class=cF0>focus_task-&gt;scroll_x || focus_task-&gt;scroll_y</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l172"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>LBtr</span><span class=cF7>(</span><span class=cF0>&amp;</span><span class=cF5>Fs</span><span class=cF0>-&gt;display_flags,</span><span class=cF3>DISPLAYf_SHOW</span><span class=cF7>)</span><span class=cF0>)
<a name="l173"></a> </span><span class=cF5>WinZBufUpdate</span><span class=cF0>;
<a name="l174"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l175"></a> </span><span class=cF1>if</span><span class=cF0> (sc!=last_sc) {
<a name="l176"></a> </span><span class=cF1>if</span><span class=cF0> (sc&amp;</span><span class=cF3>SCF_ALT</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l177"></a> </span><span class=cF5>ACDocRst</span><span class=cF0>(27,3);
<a name="l178"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>TaskValidate</span><span class=cF7>(</span><span class=cF0>original_focus_task</span><span class=cF7>)</span><span class=cF0> &amp;&amp;
<a name="l179"></a> !</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&amp;original_focus_task-&gt;win_inhibit,</span><span class=cF3>WIf_SELF_KEY_DESC</span><span class=cF7>)</span><span class=cF0>)
<a name="l180"></a> </span><span class=cF5>KeyMapFamily</span><span class=cF0>(original_focus_task,0,
<a name="l181"></a> </span><span class=cF5>ToBool</span><span class=cF7>(</span><span class=cF0>!(sc&amp;</span><span class=cF3>SCF_SHIFT</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0>,</span><span class=cF5>ToBool</span><span class=cF7>(</span><span class=cF0>sc&amp;</span><span class=cF3>SCF_SHIFT</span><span class=cF7>)</span><span class=cF0>);
<a name="l182"></a> </span><span class=cF5>KeyMapCtrlAltFamily</span><span class=cF0>(
<a name="l183"></a> </span><span class=cF5>ToBool</span><span class=cF7>(</span><span class=cF0>!(sc&amp;</span><span class=cF3>SCF_SHIFT</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0>,</span><span class=cF5>ToBool</span><span class=cF7>(</span><span class=cF0>sc&amp;</span><span class=cF3>SCF_SHIFT</span><span class=cF7>)</span><span class=cF0>);
<a name="l184"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>TaskValidate</span><span class=cF7>(</span><span class=cF0>original_focus_task</span><span class=cF7>)</span><span class=cF0> &amp;&amp;
<a name="l185"></a> !</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&amp;original_focus_task-&gt;win_inhibit,</span><span class=cF3>WIf_SELF_KEY_DESC</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l186"></a> </span><span class=cF5>ACDocRst</span><span class=cF0>(27,3);
<a name="l187"></a> </span><span class=cF5>KeyMapFamily</span><span class=cF0>(original_focus_task,</span><span class=cF3>SCF_CTRL</span><span class=cF0>,
<a name="l188"></a> </span><span class=cF5>ToBool</span><span class=cF7>(</span><span class=cF0>!(sc&amp;</span><span class=cF3>SCF_SHIFT</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0>,</span><span class=cF5>ToBool</span><span class=cF7>(</span><span class=cF0>sc&amp;</span><span class=cF3>SCF_SHIFT</span><span class=cF7>)</span><span class=cF0>);
<a name="l189"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l190"></a> }
<a name="l191"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>LBts</span><span class=cF7>(</span><span class=cF0>&amp;</span><span class=cF5>Fs</span><span class=cF0>-&gt;display_flags,</span><span class=cF3>DISPLAYf_SHOW</span><span class=cF7>)</span><span class=cF0>)
<a name="l192"></a> </span><span class=cF5>WinZBufUpdate</span><span class=cF0>;
<a name="l193"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l194"></a>}
<a name="l195"></a>
<a name="l196"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACTaskAlt</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> sc,</span><span class=cF9>I64</span><span class=cF0> last_sc,
<a name="l197"></a> </span><span class=cF9>CTask</span><span class=cF0> *,</span><span class=cF9>CTask</span><span class=cF0> *original_focus_task)
<a name="l198"></a>{
<a name="l199"></a> </span><span class=cF1>if</span><span class=cF0> (sc!=last_sc &amp;&amp; </span><span class=cF5>TaskValidate</span><span class=cF7>(</span><span class=cF0>original_focus_task</span><span class=cF7>)</span><span class=cF0> &amp;&amp;
<a name="l200"></a> !</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&amp;original_focus_task-&gt;win_inhibit,</span><span class=cF3>WIf_SELF_KEY_DESC</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l201"></a> </span><span class=cF5>ACDocRst</span><span class=cF0>(27,3);
<a name="l202"></a> </span><span class=cF5>KeyMapFamily</span><span class=cF0>(original_focus_task,</span><span class=cF3>SCF_ALT</span><span class=cF0>,
<a name="l203"></a> </span><span class=cF5>ToBool</span><span class=cF7>(</span><span class=cF0>!(sc&amp;</span><span class=cF3>SCF_SHIFT</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0>,</span><span class=cF5>ToBool</span><span class=cF7>(</span><span class=cF0>sc&amp;</span><span class=cF3>SCF_SHIFT</span><span class=cF7>)</span><span class=cF0>);
<a name="l204"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l205"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>LBts</span><span class=cF7>(</span><span class=cF0>&amp;</span><span class=cF5>Fs</span><span class=cF0>-&gt;display_flags,</span><span class=cF3>DISPLAYf_SHOW</span><span class=cF7>)</span><span class=cF0>)
<a name="l206"></a> </span><span class=cF5>WinZBufUpdate</span><span class=cF0>;
<a name="l207"></a>}
<a name="l208"></a>
<a name="l209"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACTaskEndCB</span><span class=cF0>()
<a name="l210"></a>{
<a name="l211"></a> </span><span class=cFB>ac</span><span class=cF0>.task=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l212"></a> </span><span class=cF5>Exit</span><span class=cF0>;
<a name="l213"></a>}
<a name="l214"></a>
<a name="l215"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ACTask</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0>)
<a name="l216"></a>{
<a name="l217"></a> </span><span class=cF9>CTask</span><span class=cF0> *focus_task,*original_focus_task;
<a name="l218"></a> </span><span class=cF9>I64</span><span class=cF0> ch,scan_code=0,last_scan_code=0;
<a name="l219"></a> </span><span class=cF9>CDoc</span><span class=cF0> *doc;
<a name="l220"></a> </span><span class=cF5>Fs</span><span class=cF0>-&gt;task_end_cb=&amp;</span><span class=cF5>ACTaskEndCB</span><span class=cF0>;
<a name="l221"></a> </span><span class=cF5>DocTermNew</span><span class=cF0>;
<a name="l222"></a> </span><span class=cF5>LBts</span><span class=cF0>(&amp;</span><span class=cF5>Fs</span><span class=cF0>-&gt;display_flags,</span><span class=cF3>DISPLAYf_SHOW</span><span class=cF0>);
<a name="l223"></a> </span><span class=cF5>WinHorz</span><span class=cF0>(51,</span><span class=cF5>Fs</span><span class=cF0>-&gt;win_right);
<a name="l224"></a> </span><span class=cF5>LBts</span><span class=cF0>(&amp;</span><span class=cF5>Fs</span><span class=cF0>-&gt;display_flags,</span><span class=cF3>DISPLAYf_WIN_ON_TOP</span><span class=cF0>);
<a name="l225"></a> </span><span class=cF5>Fs</span><span class=cF0>-&gt;win_inhibit=</span><span class=cF3>WIG_NO_FOCUS_TASK_DFT</span><span class=cF0>;
<a name="l226"></a> </span><span class=cF5>Free</span><span class=cF0>(</span><span class=cFB>ac</span><span class=cF0>.cur_word);
<a name="l227"></a> </span><span class=cFB>ac</span><span class=cF0>.cur_word=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l228"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l229"></a> </span><span class=cF1>if</span><span class=cF0> (scan_code&amp;</span><span class=cF7>(</span><span class=cF3>SCF_CTRL</span><span class=cF0>|</span><span class=cF3>SCF_ALT</span><span class=cF7>)</span><span class=cF0> ||
<a name="l230"></a> </span><span class=cF5>GetTSC</span><span class=cF0>&gt;</span><span class=cF5>KbdMsEvtTime</span><span class=cF0>+</span><span class=cFB>cnts</span><span class=cF0>.time_stamp_freq&gt;&gt;1) {
<a name="l231"></a> last_scan_code=scan_code;
<a name="l232"></a> scan_code=</span><span class=cFB>kbd</span><span class=cF0>.scan_code;
<a name="l233"></a> }
<a name="l234"></a> original_focus_task=focus_task=</span><span class=cFB>sys_focus_task</span><span class=cF0>;
<a name="l235"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF5>TaskValidate</span><span class=cF7>(</span><span class=cF0>focus_task</span><span class=cF7>)</span><span class=cF0> &amp;&amp;
<a name="l236"></a> </span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&amp;focus_task-&gt;task_flags,</span><span class=cF3>TASKf_INPUT_FILTER_TASK</span><span class=cF7>)</span><span class=cF0>)
<a name="l237"></a> focus_task=focus_task-&gt;parent_task;
<a name="l238"></a> </span><span class=cF1>if</span><span class=cF0> (scan_code&amp;</span><span class=cF3>SCF_CTRL</span><span class=cF0>)
<a name="l239"></a> </span><span class=cF5>ACTaskCtrl</span><span class=cF0>(scan_code,last_scan_code,focus_task,original_focus_task);
<a name="l240"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>TaskValidate</span><span class=cF7>(</span><span class=cF0>focus_task</span><span class=cF7>)</span><span class=cF0>) {
<a name="l241"></a> </span><span class=cF1>if</span><span class=cF0> (scan_code&amp;</span><span class=cF3>SCF_ALT</span><span class=cF0>)
<a name="l242"></a> </span><span class=cF5>ACTaskAlt</span><span class=cF0>(scan_code,last_scan_code,focus_task,original_focus_task);
<a name="l243"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l244"></a> </span><span class=cF5>ACTaskNormal</span><span class=cF0>(scan_code,last_scan_code,focus_task,original_focus_task);
<a name="l245"></a> }
<a name="l246"></a> </span><span class=cF5>Sleep</span><span class=cF0>(333);
<a name="l247"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>ScanMsg</span><span class=cF7>(</span><span class=cF0>&amp;ch,,1&lt;&lt;</span><span class=cF3>MSG_KEY_DOWN</span><span class=cF7>)</span><span class=cF0> &amp;&amp; </span><span class=cF7>(</span><span class=cF0>ch==</span><span class=cF3>CH_ESC</span><span class=cF0>||ch==</span><span class=cF3>CH_SHIFT_ESC</span><span class=cF7>)</span><span class=cF0>)
<a name="l248"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l249"></a> doc=</span><span class=cF5>DocPut</span><span class=cF0>;
<a name="l250"></a> </span><span class=cF5>DocLock</span><span class=cF0>(doc);
<a name="l251"></a> </span><span class=cF1>if</span><span class=cF0> (doc-&gt;cur_entry-&gt;de_flags &amp; </span><span class=cF3>DOCEF_LINK</span><span class=cF0>) {
<a name="l252"></a> </span><span class=cF6>''</span><span class=cF0> </span><span class=cF3>CH_SPACE</span><span class=cF0>;
<a name="l253"></a> doc-&gt;cur_entry=doc;
<a name="l254"></a> }
<a name="l255"></a> </span><span class=cF5>DocUnlock</span><span class=cF0>(doc);
<a name="l256"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l257"></a>}
<a name="l258"></a>
<a name="l259"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>AutoComplete</span><span class=cF0>(</span><span class=cF1>Bool</span><span class=cF0> val=</span><span class=cF3>OFF</span><span class=cF0>)
<a name="l260"></a>{</span><span class=cF2>//Turn AutoComplete OFF or ON.</span><span class=cF0>
<a name="l261"></a> </span><span class=cF1>Bool</span><span class=cF0> old_val=</span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l262"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&amp;</span><span class=cFB>ac</span><span class=cF0>.flags,</span><span class=cF3>ACf_INIT_IN_PROGRESS</span><span class=cF7>)</span><span class=cF0>)
<a name="l263"></a> </span><span class=cF5>Sleep</span><span class=cF0>(10);
<a name="l264"></a> </span><span class=cF1>if</span><span class=cF0> (val) </span><span class=cF7>{</span><span class=cF0>
<a name="l265"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&amp;</span><span class=cFB>sys_run_level</span><span class=cF0>,</span><span class=cF3>RLf_AUTO_COMPLETE</span><span class=cF7>)</span><span class=cF0>) {
<a name="l266"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>TaskValidate</span><span class=cF7>(</span><span class=cFB>ac</span><span class=cF0>.task</span><span class=cF7>)</span><span class=cF0>)
<a name="l267"></a> old_val=</span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l268"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l269"></a> </span><span class=cFB>ac</span><span class=cF0>.task=</span><span class=cF5>Spawn</span><span class=cF0>(&amp;</span><span class=cF5>ACTask</span><span class=cF0>,</span><span class=cF3>NULL</span><span class=cF0>,</span><span class=cF6>&quot;AutoComplete&quot;</span><span class=cF0>);
<a name="l270"></a> </span><span class=cF5>TaskWait</span><span class=cF0>(</span><span class=cFB>ac</span><span class=cF0>.task);
<a name="l271"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l272"></a> </span><span class=cF5>WinToTop</span><span class=cF0>(</span><span class=cFB>ac</span><span class=cF0>.task);
<a name="l273"></a> }
<a name="l274"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l275"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>TaskValidate</span><span class=cF7>(</span><span class=cFB>ac</span><span class=cF0>.task</span><span class=cF7>)</span><span class=cF0>) {
<a name="l276"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&amp;</span><span class=cFB>sys_run_level</span><span class=cF0>,</span><span class=cF3>RLf_AUTO_COMPLETE</span><span class=cF7>)</span><span class=cF0>)
<a name="l277"></a> old_val=</span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l278"></a> </span><span class=cF5>Kill</span><span class=cF0>(</span><span class=cFB>ac</span><span class=cF0>.task);
<a name="l279"></a> </span><span class=cF5>DeathWait</span><span class=cF0>(&amp;</span><span class=cFB>ac</span><span class=cF0>.task);
<a name="l280"></a> }
<a name="l281"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l282"></a> </span><span class=cF1>return</span><span class=cF0> old_val;
<a name="l283"></a>}
</span></pre></body>
</html>

View File

@ -0,0 +1,37 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF2>//See </span><a href="/Wb/Doc/AutoComplete.DD.HTML#l1"><span class=cF4>::/Doc/AutoComplete.DD</span></a><span class=cF0>
<a name="l2"></a></span><span class=cF5>Cd</span><span class=cF0>(</span><span class=cF3>__DIR__</span><span class=cF0>);;
<a name="l3"></a>#</span><span class=cF1>include</span><span class=cF0> </span><span class=cF6>&quot;ACFill&quot;</span><span class=cF0>
<a name="l4"></a>#</span><span class=cF1>include</span><span class=cF0> </span><span class=cF6>&quot;ACTask&quot;</span><span class=cF0>
<a name="l5"></a>#</span><span class=cF1>include</span><span class=cF0> </span><span class=cF6>&quot;ACInit&quot;</span><span class=cF0>
<a name="l6"></a></span><span class=cF5>Cd</span><span class=cF0>(</span><span class=cF6>&quot;..&quot;</span><span class=cF0>);;
</span></pre></body>
</html>

103
public/Wb/Adam/CPURep.HC.HTML Executable file
View File

@ -0,0 +1,103 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF0>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Info;Time/CPU Cycles;Processor&quot;</span><span class=cF0>
<a name="l2"></a></span><span class=cF1>class</span><span class=cF0> </span><span class=cF9>CCPURep</span><span class=cF0>
<a name="l3"></a>{
<a name="l4"></a> </span><span class=cF1>Bool</span><span class=cF0> mp_start,mp_end;
<a name="l5"></a> </span><span class=cF9>I64</span><span class=cF0> mp_not_done_flags,
<a name="l6"></a> **swaps,
<a name="l7"></a> **cycles;
<a name="l8"></a>};
<a name="l9"></a>
<a name="l10"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>MPCPURep</span><span class=cF0>(</span><span class=cF9>CCPURep</span><span class=cF0> *cr)
<a name="l11"></a>{
<a name="l12"></a> </span><span class=cF9>I64</span><span class=cF0> swaps=0,cycles_0,cycles_f;
<a name="l13"></a> </span><span class=cF1>while</span><span class=cF0> (!cr-&gt;mp_start)
<a name="l14"></a> </span><span class=cF5>Yield</span><span class=cF0>;
<a name="l15"></a> cycles_0=</span><span class=cF5>GetTSC</span><span class=cF0>;
<a name="l16"></a> </span><span class=cF1>while</span><span class=cF0> (!cr-&gt;mp_end) </span><span class=cF7>{</span><span class=cF0>
<a name="l17"></a> swaps++;
<a name="l18"></a> </span><span class=cF5>Yield</span><span class=cF0>;
<a name="l19"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l20"></a> cycles_f=</span><span class=cF5>GetTSC</span><span class=cF0>;
<a name="l21"></a> cr-&gt;swaps[</span><span class=cF5>Gs</span><span class=cF0>-&gt;num]=swaps;
<a name="l22"></a> cr-&gt;cycles[</span><span class=cF5>Gs</span><span class=cF0>-&gt;num]=cycles_f-cycles_0;
<a name="l23"></a> </span><span class=cF5>LBtr</span><span class=cF0>(&amp;cr-&gt;mp_not_done_flags,</span><span class=cF5>Gs</span><span class=cF0>-&gt;num);
<a name="l24"></a>}
<a name="l25"></a>
<a name="l26"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>CPURep</span><span class=cF0>(</span><span class=cF1>Bool</span><span class=cF0> full=</span><span class=cF3>FALSE</span><span class=cF0>)
<a name="l27"></a>{</span><span class=cF2>//Report number of cores and clock freq.</span><span class=cF0>
<a name="l28"></a> </span><span class=cF9>I64</span><span class=cF0> i,total_swaps,total_cycles;
<a name="l29"></a> </span><span class=cF1>F64</span><span class=cF0> t0,tf;
<a name="l30"></a> </span><span class=cF9>CCPURep</span><span class=cF0> cr;
<a name="l31"></a>
<a name="l32"></a> </span><span class=cF1>if</span><span class=cF0> (!full)
<a name="l33"></a> </span><span class=cF6>&quot;%03X Cores %6h?nHz\n&quot;</span><span class=cF0>,</span><span class=cFB>mp_cnt</span><span class=cF0>,</span><span class=cF5>ToF64</span><span class=cF0>(</span><span class=cFB>cnts</span><span class=cF0>.time_stamp_freq);
<a name="l34"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l35"></a> cr.swaps=</span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>I64</span><span class=cF7>)</span><span class=cF0>*</span><span class=cFB>mp_cnt</span><span class=cF0>);
<a name="l36"></a> cr.cycles=</span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>I64</span><span class=cF7>)</span><span class=cF0>*</span><span class=cFB>mp_cnt</span><span class=cF0>);
<a name="l37"></a> cr.mp_start=cr.mp_end=</span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l38"></a> cr.mp_not_done_flags=1&lt;&lt;</span><span class=cFB>mp_cnt</span><span class=cF0>-1;
<a name="l39"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;</span><span class=cFB>mp_cnt</span><span class=cF0>;i++)
<a name="l40"></a> </span><span class=cF5>Spawn</span><span class=cF0>(&amp;</span><span class=cF5>MPCPURep</span><span class=cF0>,&amp;cr,</span><span class=cF3>NULL</span><span class=cF0>,i);
<a name="l41"></a>
<a name="l42"></a> t0=</span><span class=cF5>tS</span><span class=cF0>;
<a name="l43"></a> cr.mp_start=</span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l44"></a> </span><span class=cF5>Sleep</span><span class=cF0>(2000);
<a name="l45"></a> cr.mp_end=</span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l46"></a> </span><span class=cF1>while</span><span class=cF0> (cr.mp_not_done_flags)
<a name="l47"></a> </span><span class=cF5>Yield</span><span class=cF0>;
<a name="l48"></a> tf=</span><span class=cF5>tS</span><span class=cF0>;
<a name="l49"></a>
<a name="l50"></a> </span><span class=cF6>&quot;\n%03X Cores %6h?nHz\n&quot;</span><span class=cF0>,</span><span class=cFB>mp_cnt</span><span class=cF0>,</span><span class=cF5>ToF64</span><span class=cF0>(</span><span class=cFB>cnts</span><span class=cF0>.time_stamp_freq);
<a name="l51"></a> </span><span class=cF6>&quot;\n Context\n&quot;</span><span class=cF0>
<a name="l52"></a> </span><span class=cF6>&quot;CPU Swaps/s Cycles\n&quot;</span><span class=cF0>
<a name="l53"></a> </span><span class=cF6>&quot;--- ------------- -----------------\n&quot;</span><span class=cF0>;
<a name="l54"></a> total_swaps=0;
<a name="l55"></a> total_cycles=0;
<a name="l56"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;</span><span class=cFB>mp_cnt</span><span class=cF0>;i++) {
<a name="l57"></a> </span><span class=cF6>&quot; %02X %13,d %17,d\n&quot;</span><span class=cF0>,i,
<a name="l58"></a> </span><span class=cF5>ToI64</span><span class=cF0>(cr.swaps[i]/</span><span class=cF7>(</span><span class=cF0>tf-t0</span><span class=cF7>)</span><span class=cF0>),</span><span class=cF5>ToI64</span><span class=cF0>(cr.cycles[i]/</span><span class=cF7>(</span><span class=cF0>tf-t0</span><span class=cF7>)</span><span class=cF0>);
<a name="l59"></a> total_swaps+=cr.swaps[i];
<a name="l60"></a> total_cycles+=cr.cycles[i];
<a name="l61"></a> }
<a name="l62"></a> </span><span class=cF6>&quot;--- ------------- -----------------\n&quot;</span><span class=cF0>;
<a name="l63"></a> </span><span class=cF6>&quot;%03X %13,d %17,d\n&quot;</span><span class=cF0>,i,
<a name="l64"></a> </span><span class=cF5>ToI64</span><span class=cF0>(total_swaps/</span><span class=cF7>(</span><span class=cF0>tf-t0</span><span class=cF7>)</span><span class=cF0>),</span><span class=cF5>ToI64</span><span class=cF0>(total_cycles/</span><span class=cF7>(</span><span class=cF0>tf-t0</span><span class=cF7>)</span><span class=cF0>);
<a name="l65"></a> </span><span class=cF6>&quot;Avg %13,d %17,d\n\n&quot;</span><span class=cF0>,
<a name="l66"></a> </span><span class=cF5>ToI64</span><span class=cF0>(total_swaps/</span><span class=cF7>(</span><span class=cF0>tf-t0</span><span class=cF7>)</span><span class=cF0>/i),</span><span class=cF5>ToI64</span><span class=cF0>(total_cycles/</span><span class=cF7>(</span><span class=cF0>tf-t0</span><span class=cF7>)</span><span class=cF0>/i);
<a name="l67"></a> </span><span class=cF6>&quot;Avg Cycles/Swap: %12.6f\n&quot;</span><span class=cF0>,</span><span class=cF5>ToF64</span><span class=cF0>(total_cycles)/total_swaps;
<a name="l68"></a> </span><span class=cF6>&quot;Avg Time/Swap : %12.6fns\n\n&quot;</span><span class=cF0>,(tf-t0)*1000000000.0*i/total_swaps;
<a name="l69"></a> </span><span class=cF5>Free</span><span class=cF0>(cr.swaps);
<a name="l70"></a> </span><span class=cF5>Free</span><span class=cF0>(cr.cycles);
<a name="l71"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l72"></a>}
</span></pre></body>
</html>

View File

@ -0,0 +1,419 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF1>public</span><span class=cF0> </span><span class=cF9>CCtrl</span><span class=cF0> *</span><span class=cF5>CtrlFindUnique</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *haystack_task,</span><span class=cF9>I64</span><span class=cF0> needle_type)
<a name="l2"></a>{</span><span class=cF2>//Find task ctrl given </span><a href="/Wb/Kernel/KernelA.HH.HTML#l3041"><span class=cF4>ctrl_type</span></a><span class=cF2>.</span><span class=cF0>
<a name="l3"></a> </span><span class=cF9>CCtrl</span><span class=cF0> *c;
<a name="l4"></a> c=haystack_task-&gt;next_ctrl;
<a name="l5"></a> </span><span class=cF1>while</span><span class=cF0> (c!=&amp;haystack_task-&gt;next_ctrl) </span><span class=cF7>{</span><span class=cF0>
<a name="l6"></a> </span><span class=cF1>if</span><span class=cF0> (c-&gt;type==needle_type)
<a name="l7"></a> </span><span class=cF1>return</span><span class=cF0> c;
<a name="l8"></a> c=c-&gt;next;
<a name="l9"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l10"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>NULL</span><span class=cF0>;
<a name="l11"></a>}
<a name="l12"></a>
<a name="l13"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>CtrlsUpdate</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task)
<a name="l14"></a>{
<a name="l15"></a> </span><span class=cF9>CCtrl</span><span class=cF0> *c;
<a name="l16"></a> c=task-&gt;next_ctrl;
<a name="l17"></a> </span><span class=cF1>while</span><span class=cF0> (c!=&amp;task-&gt;next_ctrl) </span><span class=cF7>{</span><span class=cF0>
<a name="l18"></a> </span><span class=cF1>if</span><span class=cF0> (c-&gt;update_derived_vals)
<a name="l19"></a> (*c-&gt;update_derived_vals)(c);
<a name="l20"></a> </span><span class=cF1>if</span><span class=cF0> (c-&gt;flags&amp;</span><span class=cF3>CTRLF_BORDER</span><span class=cF0>) {
<a name="l21"></a> c-&gt;scrn_left =</span><span class=cFB>gr</span><span class=cF0>.pan_text_x+task-&gt;pix_left+c-&gt;left-</span><span class=cF3>FONT_WIDTH</span><span class=cF0>;
<a name="l22"></a> c-&gt;scrn_right =</span><span class=cFB>gr</span><span class=cF0>.pan_text_x+task-&gt;pix_left+c-&gt;right-</span><span class=cF3>FONT_WIDTH</span><span class=cF0>;
<a name="l23"></a> c-&gt;scrn_top =</span><span class=cFB>gr</span><span class=cF0>.pan_text_y+task-&gt;pix_top+c-&gt;top-</span><span class=cF3>FONT_HEIGHT</span><span class=cF0>;
<a name="l24"></a> c-&gt;scrn_bottom=</span><span class=cFB>gr</span><span class=cF0>.pan_text_y+task-&gt;pix_top+c-&gt;bottom-</span><span class=cF3>FONT_HEIGHT</span><span class=cF0>;
<a name="l25"></a> } </span><span class=cF1>else</span><span class=cF0> {
<a name="l26"></a> c-&gt;scrn_left =</span><span class=cFB>gr</span><span class=cF0>.pan_text_x+task-&gt;pix_left+c-&gt;left;
<a name="l27"></a> c-&gt;scrn_right =</span><span class=cFB>gr</span><span class=cF0>.pan_text_x+task-&gt;pix_left+c-&gt;right;
<a name="l28"></a> c-&gt;scrn_top =</span><span class=cFB>gr</span><span class=cF0>.pan_text_y+task-&gt;pix_top+c-&gt;top;
<a name="l29"></a> c-&gt;scrn_bottom=</span><span class=cFB>gr</span><span class=cF0>.pan_text_y+task-&gt;pix_top+c-&gt;bottom;
<a name="l30"></a> }
<a name="l31"></a> c=c-&gt;next;
<a name="l32"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l33"></a>}
<a name="l34"></a>
<a name="l35"></a></span><span class=cFB>fp_update_ctrls</span><span class=cF0>=&amp;</span><span class=cF5>CtrlsUpdate</span><span class=cF0>;
<a name="l36"></a>
<a name="l37"></a></span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>CtrlInsideRect</span><span class=cF0>(</span><span class=cF9>CCtrl</span><span class=cF0> *c,</span><span class=cF9>I64</span><span class=cF0> x,</span><span class=cF9>I64</span><span class=cF0> y)
<a name="l38"></a>{</span><span class=cF2>//scrn coordinates</span><span class=cF0>
<a name="l39"></a> </span><span class=cF1>if</span><span class=cF0> (c-&gt;scrn_left&lt;=x&lt;=c-&gt;scrn_right &amp;&amp;
<a name="l40"></a> c-&gt;scrn_top&lt;=y&lt;=c-&gt;scrn_bottom)
<a name="l41"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l42"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l43"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l44"></a>}
<a name="l45"></a>
<a name="l46"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>Bool</span><span class=cF0> </span><span class=cF5>CtrlInside</span><span class=cF0>(</span><span class=cF9>CCtrl</span><span class=cF0> *c,</span><span class=cF9>I64</span><span class=cF0> x,</span><span class=cF9>I64</span><span class=cF0> y)
<a name="l47"></a>{</span><span class=cF2>//Is x,y inside a ctrl?</span><span class=cF0>
<a name="l48"></a> </span><span class=cF1>if</span><span class=cF0> (c-&gt;flags&amp;</span><span class=cF3>CTRLF_SHOW</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l49"></a> </span><span class=cF1>if</span><span class=cF0> (c-&gt;inside_ctrl)
<a name="l50"></a> </span><span class=cF1>return</span><span class=cF0> (*c-&gt;inside_ctrl)(c,x,y);
<a name="l51"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l52"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF5>CtrlInsideRect</span><span class=cF0>(c,x,y);
<a name="l53"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l54"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l55"></a>}
<a name="l56"></a>
<a name="l57"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DrawCtrls</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task)
<a name="l58"></a>{
<a name="l59"></a> </span><span class=cF9>CCtrl</span><span class=cF0> *c;
<a name="l60"></a> </span><span class=cF9>CDC</span><span class=cF0> *dc=</span><span class=cF5>DCAlias</span><span class=cF0>(</span><span class=cFB>gr</span><span class=cF0>.dc2,task);
<a name="l61"></a> c=task-&gt;next_ctrl;
<a name="l62"></a> </span><span class=cF1>while</span><span class=cF0> (c!=&amp;task-&gt;next_ctrl) </span><span class=cF7>{</span><span class=cF0>
<a name="l63"></a> </span><span class=cF1>if</span><span class=cF0> (c-&gt;flags&amp;</span><span class=cF3>CTRLF_SHOW</span><span class=cF0>) {
<a name="l64"></a> </span><span class=cF1>if</span><span class=cF0> (c-&gt;flags&amp;</span><span class=cF3>CTRLF_BORDER</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l65"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&amp;task-&gt;display_flags,</span><span class=cF3>DISPLAYf_NO_BORDER</span><span class=cF7>)</span><span class=cF0>) {
<a name="l66"></a> </span><span class=cF1>PUSHFD</span><span class=cF0>
<a name="l67"></a> </span><span class=cF1>CLI</span><span class=cF0>
<a name="l68"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF5>LBts</span><span class=cF7>(</span><span class=cF0>&amp;task-&gt;task_flags,</span><span class=cF3>TASKf_TASK_LOCK</span><span class=cF7>)</span><span class=cF0>)
<a name="l69"></a> </span><span class=cF1>PAUSE</span><span class=cF0>
<a name="l70"></a>
<a name="l71"></a> task-&gt;win_left--; </span><span class=cF2>//Allow drawing on border</span><span class=cF0>
<a name="l72"></a> task-&gt;win_right++;
<a name="l73"></a> task-&gt;win_top--;
<a name="l74"></a> task-&gt;win_bottom++;
<a name="l75"></a> </span><span class=cF5>WinDerivedValsUpdate</span><span class=cF0>(task);
<a name="l76"></a>
<a name="l77"></a> </span><span class=cF5>LBtr</span><span class=cF0>(&amp;task-&gt;task_flags,</span><span class=cF3>TASKf_TASK_LOCK</span><span class=cF0>);
<a name="l78"></a> </span><span class=cF1>POPFD</span><span class=cF0>
<a name="l79"></a>
<a name="l80"></a> </span><span class=cF1>if</span><span class=cF0> (c-&gt;draw_it)
<a name="l81"></a> (*c-&gt;draw_it)(dc,c);
<a name="l82"></a>
<a name="l83"></a> </span><span class=cF1>PUSHFD</span><span class=cF0>
<a name="l84"></a> </span><span class=cF1>CLI</span><span class=cF0>
<a name="l85"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF5>LBts</span><span class=cF7>(</span><span class=cF0>&amp;task-&gt;task_flags,</span><span class=cF3>TASKf_TASK_LOCK</span><span class=cF7>)</span><span class=cF0>)
<a name="l86"></a> </span><span class=cF1>PAUSE</span><span class=cF0>
<a name="l87"></a>
<a name="l88"></a> task-&gt;win_left++;
<a name="l89"></a> task-&gt;win_right--;
<a name="l90"></a> task-&gt;win_top++;
<a name="l91"></a> task-&gt;win_bottom--;
<a name="l92"></a> </span><span class=cF5>WinDerivedValsUpdate</span><span class=cF0>(task);
<a name="l93"></a>
<a name="l94"></a> </span><span class=cF5>LBtr</span><span class=cF0>(&amp;task-&gt;task_flags,</span><span class=cF3>TASKf_TASK_LOCK</span><span class=cF0>);
<a name="l95"></a> </span><span class=cF1>POPFD</span><span class=cF0>
<a name="l96"></a> }
<a name="l97"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l98"></a> </span><span class=cF1>if</span><span class=cF0> (c-&gt;draw_it)
<a name="l99"></a> (*c-&gt;draw_it)(dc,c);
<a name="l100"></a> }
<a name="l101"></a> c=c-&gt;next;
<a name="l102"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l103"></a> </span><span class=cF5>DCDel</span><span class=cF0>(dc);
<a name="l104"></a>}
<a name="l105"></a>
<a name="l106"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>WIN_SCROLL_SIZE</span><span class=cF0> 8
<a name="l107"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>WIN_SCROLL_BORDER_BONUS</span><span class=cF0> 4
<a name="l108"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DrawWinScroll</span><span class=cF0>(</span><span class=cF9>CDC</span><span class=cF0> *dc,</span><span class=cF9>CCtrl</span><span class=cF0> *c)
<a name="l109"></a>{
<a name="l110"></a> </span><span class=cF9>CWinScroll</span><span class=cF0> *s=c-&gt;state;
<a name="l111"></a>
<a name="l112"></a> </span><span class=cF1>if</span><span class=cF0> (c-&gt;flags&amp;</span><span class=cF3>CTRLF_CLICKED</span><span class=cF0>)
<a name="l113"></a> dc-&gt;color=s-&gt;color&gt;&gt;4;
<a name="l114"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l115"></a> dc-&gt;color=s-&gt;color&amp;0xF;
<a name="l116"></a> </span><span class=cF5>GrRect</span><span class=cF0>(dc,c-&gt;left,c-&gt;top,c-&gt;right-c-&gt;left+1,c-&gt;bottom-c-&gt;top+1);
<a name="l117"></a>
<a name="l118"></a> </span><span class=cF1>if</span><span class=cF0> (c-&gt;flags&amp;</span><span class=cF3>CTRLF_CLICKED</span><span class=cF0>)
<a name="l119"></a> dc-&gt;color=s-&gt;color&amp;0xF;
<a name="l120"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l121"></a> dc-&gt;color=s-&gt;color&gt;&gt;4;
<a name="l122"></a> </span><span class=cF5>GrRect</span><span class=cF0>(dc,c-&gt;left+2,c-&gt;top+2,c-&gt;right-c-&gt;left+1-4,c-&gt;bottom-c-&gt;top+1-4);
<a name="l123"></a>}
<a name="l124"></a>
<a name="l125"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>WinDerivedScrollValsUpdate</span><span class=cF0>(</span><span class=cF9>CCtrl</span><span class=cF0> *c)
<a name="l126"></a>{
<a name="l127"></a> </span><span class=cF9>CWinScroll</span><span class=cF0> *s=c-&gt;state;
<a name="l128"></a> </span><span class=cF9>I64</span><span class=cF0> range;
<a name="l129"></a> </span><span class=cF1>if</span><span class=cF0> (s-&gt;max&lt;s-&gt;min) s-&gt;max=s-&gt;min;
<a name="l130"></a> </span><span class=cF1>if</span><span class=cF0> (s-&gt;pos&lt;s-&gt;min) s-&gt;pos=s-&gt;min;
<a name="l131"></a> </span><span class=cF1>if</span><span class=cF0> (s-&gt;pos&gt;s-&gt;max) s-&gt;pos=s-&gt;max;
<a name="l132"></a> s-&gt;color=c-&gt;win_task-&gt;border_attr&amp;0xF^0xF+
<a name="l133"></a> (c-&gt;win_task-&gt;border_attr&amp;0xF)&lt;&lt;4;
<a name="l134"></a> range=s-&gt;max-s-&gt;min;
<a name="l135"></a> </span><span class=cF1>if</span><span class=cF0> (!range) range=1;
<a name="l136"></a> </span><span class=cF1>switch</span><span class=cF0> (c-&gt;type) </span><span class=cF7>{</span><span class=cF0>
<a name="l137"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>CTRLT_WIN_HSCROLL</span><span class=cF0>:
<a name="l138"></a> c-&gt;left =</span><span class=cFB>gr</span><span class=cF0>.pan_text_x+</span><span class=cF3>FONT_WIDTH</span><span class=cF0>-</span><span class=cF3>WIN_SCROLL_BORDER_BONUS</span><span class=cF0>+
<a name="l139"></a> (s-&gt;pos-s-&gt;min)*(c-&gt;win_task-&gt;pix_width+2*</span><span class=cF3>WIN_SCROLL_BORDER_BONUS</span><span class=cF0>
<a name="l140"></a> -</span><span class=cF3>WIN_SCROLL_SIZE</span><span class=cF0>)/range;
<a name="l141"></a> c-&gt;right =c-&gt;left+</span><span class=cF3>WIN_SCROLL_SIZE</span><span class=cF0>-1;
<a name="l142"></a> c-&gt;top =</span><span class=cFB>gr</span><span class=cF0>.pan_text_y+</span><span class=cF3>FONT_HEIGHT</span><span class=cF0>+
<a name="l143"></a> (</span><span class=cF3>FONT_WIDTH</span><span class=cF0>-</span><span class=cF3>WIN_SCROLL_SIZE</span><span class=cF0>)/2+c-&gt;win_task-&gt;pix_height;
<a name="l144"></a> c-&gt;bottom=c-&gt;top+</span><span class=cF3>WIN_SCROLL_SIZE</span><span class=cF0>-1;
<a name="l145"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l146"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>CTRLT_WIN_VSCROLL</span><span class=cF0>:
<a name="l147"></a> c-&gt;left =</span><span class=cFB>gr</span><span class=cF0>.pan_text_x+</span><span class=cF3>FONT_WIDTH</span><span class=cF0>+
<a name="l148"></a> (</span><span class=cF3>FONT_WIDTH</span><span class=cF0>-</span><span class=cF3>WIN_SCROLL_SIZE</span><span class=cF0>)/2+c-&gt;win_task-&gt;pix_width;
<a name="l149"></a> c-&gt;right =c-&gt;left+</span><span class=cF3>WIN_SCROLL_SIZE</span><span class=cF0>-1;
<a name="l150"></a> c-&gt;top =</span><span class=cFB>gr</span><span class=cF0>.pan_text_y+</span><span class=cF3>FONT_HEIGHT</span><span class=cF0>-</span><span class=cF3>WIN_SCROLL_BORDER_BONUS</span><span class=cF0>+
<a name="l151"></a> (s-&gt;pos-s-&gt;min)*(c-&gt;win_task-&gt;pix_height+
<a name="l152"></a> 2*</span><span class=cF3>WIN_SCROLL_BORDER_BONUS</span><span class=cF0>-</span><span class=cF3>WIN_SCROLL_SIZE</span><span class=cF0>)/range;
<a name="l153"></a> c-&gt;bottom=c-&gt;top+</span><span class=cF3>WIN_SCROLL_SIZE</span><span class=cF0>-1;
<a name="l154"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l155"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l156"></a>}
<a name="l157"></a>
<a name="l158"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>LeftClickHWinScroll</span><span class=cF0>(</span><span class=cF9>CCtrl</span><span class=cF0> *c,</span><span class=cF9>I64</span><span class=cF0> x,</span><span class=cF9>I64</span><span class=cF0>,</span><span class=cF1>Bool</span><span class=cF0> down)
<a name="l159"></a>{
<a name="l160"></a> </span><span class=cF9>CTask</span><span class=cF0> *task=c-&gt;win_task;
<a name="l161"></a> </span><span class=cF9>CWinScroll</span><span class=cF0> *s=c-&gt;state;
<a name="l162"></a> </span><span class=cF9>I64</span><span class=cF0> range=task-&gt;pix_width+2*</span><span class=cF3>WIN_SCROLL_BORDER_BONUS</span><span class=cF0>-</span><span class=cF3>WIN_SCROLL_SIZE</span><span class=cF0>;
<a name="l163"></a> </span><span class=cF5>LBts</span><span class=cF0>(&amp;s-&gt;flags,</span><span class=cF3>WSSf_SET_TO_POS</span><span class=cF0>);
<a name="l164"></a> s-&gt;pos=(</span><span class=cF7>(</span><span class=cF0>x-(</span><span class=cF3>FONT_WIDTH</span><span class=cF0>-</span><span class=cF3>WIN_SCROLL_BORDER_BONUS</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0>
<a name="l165"></a> *</span><span class=cF7>(</span><span class=cF0>s-&gt;max-s-&gt;min+1</span><span class=cF7>)</span><span class=cF0>+range/2)/range+s-&gt;min;
<a name="l166"></a> </span><span class=cF1>if</span><span class=cF0> (down)
<a name="l167"></a> c-&gt;flags|=</span><span class=cF3>CTRLF_CLICKED</span><span class=cF0>;
<a name="l168"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l169"></a> c-&gt;flags&amp;=~</span><span class=cF3>CTRLF_CLICKED</span><span class=cF0>;
<a name="l170"></a> </span><span class=cF1>if</span><span class=cF0> (c-&gt;update_derived_vals)
<a name="l171"></a> (*c-&gt;update_derived_vals)(c);
<a name="l172"></a>}
<a name="l173"></a>
<a name="l174"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>LeftClickVWinScroll</span><span class=cF0>(</span><span class=cF9>CCtrl</span><span class=cF0> *c,</span><span class=cF9>I64</span><span class=cF0>,</span><span class=cF9>I64</span><span class=cF0> y,</span><span class=cF1>Bool</span><span class=cF0> down)
<a name="l175"></a>{
<a name="l176"></a> </span><span class=cF9>CTask</span><span class=cF0> *task=c-&gt;win_task;
<a name="l177"></a> </span><span class=cF9>CWinScroll</span><span class=cF0> *s=c-&gt;state;
<a name="l178"></a> </span><span class=cF9>I64</span><span class=cF0> range=task-&gt;pix_height+2*</span><span class=cF3>WIN_SCROLL_BORDER_BONUS</span><span class=cF0>-</span><span class=cF3>WIN_SCROLL_SIZE</span><span class=cF0>;
<a name="l179"></a> </span><span class=cF5>LBts</span><span class=cF0>(&amp;s-&gt;flags,</span><span class=cF3>WSSf_SET_TO_POS</span><span class=cF0>);
<a name="l180"></a> s-&gt;pos=(</span><span class=cF7>(</span><span class=cF0>y-(</span><span class=cF3>FONT_HEIGHT</span><span class=cF0>-</span><span class=cF3>WIN_SCROLL_BORDER_BONUS</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0>
<a name="l181"></a> *</span><span class=cF7>(</span><span class=cF0>s-&gt;max-s-&gt;min+1</span><span class=cF7>)</span><span class=cF0>+range/2)/range+s-&gt;min;
<a name="l182"></a> </span><span class=cF1>if</span><span class=cF0> (down)
<a name="l183"></a> c-&gt;flags|=</span><span class=cF3>CTRLF_CLICKED</span><span class=cF0>;
<a name="l184"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l185"></a> c-&gt;flags&amp;=~</span><span class=cF3>CTRLF_CLICKED</span><span class=cF0>;
<a name="l186"></a> </span><span class=cF1>if</span><span class=cF0> (c-&gt;update_derived_vals)
<a name="l187"></a> (*c-&gt;update_derived_vals)(c);
<a name="l188"></a>}
<a name="l189"></a>
<a name="l190"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>WheelChangeWinScroll</span><span class=cF0>(</span><span class=cF9>CCtrl</span><span class=cF0> *c,</span><span class=cF9>I64</span><span class=cF0> delta)
<a name="l191"></a>{
<a name="l192"></a> </span><span class=cF9>CWinScroll</span><span class=cF0> *s=c-&gt;state;
<a name="l193"></a> </span><span class=cF5>LBts</span><span class=cF0>(&amp;s-&gt;flags,</span><span class=cF3>WSSf_SET_TO_POS</span><span class=cF0>);
<a name="l194"></a> s-&gt;pos+=delta;
<a name="l195"></a> </span><span class=cF1>if</span><span class=cF0> (c-&gt;update_derived_vals)
<a name="l196"></a> (*c-&gt;update_derived_vals)(c);
<a name="l197"></a>}
<a name="l198"></a>
<a name="l199"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>WinScrollsInit</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task)
<a name="l200"></a>{
<a name="l201"></a> </span><span class=cF9>CCtrl</span><span class=cF0> *c;
<a name="l202"></a>
<a name="l203"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>CtrlFindUnique</span><span class=cF7>(</span><span class=cF0>task,</span><span class=cF3>CTRLT_WIN_HSCROLL</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l204"></a> c=</span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CCtrl</span><span class=cF7>)</span><span class=cF0>);
<a name="l205"></a> c-&gt;win_task=task;
<a name="l206"></a> c-&gt;flags=</span><span class=cF3>CTRLF_SHOW</span><span class=cF0>|</span><span class=cF3>CTRLF_BORDER</span><span class=cF0>|</span><span class=cF3>CTRLF_CAPTURE_LEFT_MS</span><span class=cF0>;
<a name="l207"></a> c-&gt;type=</span><span class=cF3>CTRLT_WIN_HSCROLL</span><span class=cF0>;
<a name="l208"></a> c-&gt;state=&amp;task-&gt;horz_scroll;
<a name="l209"></a> c-&gt;update_derived_vals=&amp;</span><span class=cF5>WinDerivedScrollValsUpdate</span><span class=cF0>;
<a name="l210"></a> c-&gt;draw_it=&amp;</span><span class=cF5>DrawWinScroll</span><span class=cF0>;
<a name="l211"></a> c-&gt;left_click=&amp;</span><span class=cF5>LeftClickHWinScroll</span><span class=cF0>;
<a name="l212"></a> </span><span class=cF5>QueIns</span><span class=cF0>(c,task-&gt;last_ctrl);
<a name="l213"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l214"></a>
<a name="l215"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>CtrlFindUnique</span><span class=cF7>(</span><span class=cF0>task,</span><span class=cF3>CTRLT_WIN_VSCROLL</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l216"></a> c=</span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CCtrl</span><span class=cF7>)</span><span class=cF0>);
<a name="l217"></a> c-&gt;win_task=task;
<a name="l218"></a> c-&gt;flags=</span><span class=cF3>CTRLF_SHOW</span><span class=cF0>|</span><span class=cF3>CTRLF_BORDER</span><span class=cF0>|</span><span class=cF3>CTRLF_CAPTURE_LEFT_MS</span><span class=cF0>;
<a name="l219"></a> c-&gt;type=</span><span class=cF3>CTRLT_WIN_VSCROLL</span><span class=cF0>;
<a name="l220"></a> c-&gt;state=&amp;task-&gt;vert_scroll;
<a name="l221"></a> c-&gt;update_derived_vals=&amp;</span><span class=cF5>WinDerivedScrollValsUpdate</span><span class=cF0>;
<a name="l222"></a> c-&gt;draw_it=&amp;</span><span class=cF5>DrawWinScroll</span><span class=cF0>;
<a name="l223"></a> c-&gt;left_click=&amp;</span><span class=cF5>LeftClickVWinScroll</span><span class=cF0>;
<a name="l224"></a> c-&gt;wheel_chg=&amp;</span><span class=cF5>WheelChangeWinScroll</span><span class=cF0>;
<a name="l225"></a> </span><span class=cF5>QueIns</span><span class=cF0>(c,task-&gt;last_ctrl);
<a name="l226"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l227"></a> </span><span class=cF5>TaskDerivedValsUpdate</span><span class=cF0>(task);
<a name="l228"></a>}
<a name="l229"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0> 22
<a name="l230"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0> 48
<a name="l231"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>VIEWANGLES_BORDER</span><span class=cF0> 2
<a name="l232"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>VIEWANGLES_SNAP</span><span class=cF0> 2
<a name="l233"></a>
<a name="l234"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DrawViewAnglesCtrl</span><span class=cF0>(</span><span class=cF9>CDC</span><span class=cF0> *dc,</span><span class=cF9>CCtrl</span><span class=cF0> *c)
<a name="l235"></a>{
<a name="l236"></a> </span><span class=cF9>I64</span><span class=cF0> i,j;
<a name="l237"></a> </span><span class=cF9>CViewAngles</span><span class=cF0> *s=c-&gt;state;
<a name="l238"></a>
<a name="l239"></a> dc-&gt;color=s-&gt;cbd;
<a name="l240"></a> </span><span class=cF5>GrRect</span><span class=cF0>(dc, c-&gt;left,c-&gt;top,</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>*4+3,
<a name="l241"></a> </span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>*2+</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>);
<a name="l242"></a> dc-&gt;color=s-&gt;cbg;
<a name="l243"></a> </span><span class=cF5>GrRect</span><span class=cF0>(dc, c-&gt;left+</span><span class=cF3>VIEWANGLES_BORDER</span><span class=cF0>,c-&gt;top+</span><span class=cF3>VIEWANGLES_BORDER</span><span class=cF0>,
<a name="l244"></a> </span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>*4+3-2*</span><span class=cF3>VIEWANGLES_BORDER</span><span class=cF0>,
<a name="l245"></a> </span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>*2+</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>-2*</span><span class=cF3>VIEWANGLES_BORDER</span><span class=cF0>);
<a name="l246"></a> dc-&gt;color=s-&gt;cfg;
<a name="l247"></a> </span><span class=cF5>GrLine</span><span class=cF0>(dc,c-&gt;left+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>,c-&gt;top+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>,
<a name="l248"></a> c-&gt;left+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>,c-&gt;top+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>+
<a name="l249"></a> </span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>-1);
<a name="l250"></a> </span><span class=cF5>GrLine</span><span class=cF0>(dc,c-&gt;left+2*</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>+1,c-&gt;top+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>,
<a name="l251"></a> c-&gt;left+2*</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>+1,c-&gt;top+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>+
<a name="l252"></a> </span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>-1);
<a name="l253"></a> </span><span class=cF5>GrLine</span><span class=cF0>(dc,c-&gt;left+3*</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>+2,c-&gt;top+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>,
<a name="l254"></a> c-&gt;left+3*</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>+2,c-&gt;top+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>+
<a name="l255"></a> </span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>-1);
<a name="l256"></a> </span><span class=cF1>for</span><span class=cF0> (i=1;i&lt;</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>+1;i+=2*</span><span class=cF3>VIEWANGLES_SNAP</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l257"></a> j=2-i/3&amp;1;
<a name="l258"></a> </span><span class=cF5>GrLine</span><span class=cF0>(dc,c-&gt;left+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>-j,c-&gt;bottom-</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>-i,
<a name="l259"></a> c-&gt;left+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>+j,c-&gt;bottom
<a name="l260"></a> -</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>-i);
<a name="l261"></a> </span><span class=cF5>GrLine</span><span class=cF0>(dc,c-&gt;left+2*</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>+1-j,c-&gt;bottom-</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>-i,
<a name="l262"></a> c-&gt;left+2*</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>+1+j,c-&gt;bottom
<a name="l263"></a> -</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>-i);
<a name="l264"></a> </span><span class=cF5>GrLine</span><span class=cF0>(dc,c-&gt;left+3*</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>+2-j,c-&gt;bottom-</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>-i,
<a name="l265"></a> c-&gt;left+3*</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>+2+j,c-&gt;bottom
<a name="l266"></a> -</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>-i);
<a name="l267"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l268"></a>
<a name="l269"></a> dc-&gt;color=s-&gt;cx;
<a name="l270"></a> </span><span class=cF5>GrPrint</span><span class=cF0>(dc,c-&gt;left+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>-</span><span class=cF3>FONT_WIDTH</span><span class=cF0>/2,
<a name="l271"></a> c-&gt;top+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>-</span><span class=cF7>(</span><span class=cF0>1+</span><span class=cF3>FONT_HEIGHT</span><span class=cF7>)</span><span class=cF0>,</span><span class=cF6>&quot;X&quot;</span><span class=cF0>);
<a name="l272"></a> </span><span class=cF5>GrPrint</span><span class=cF0>(dc,c-&gt;left+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>-3*</span><span class=cF3>FONT_WIDTH</span><span class=cF0>/2,
<a name="l273"></a> c-&gt;top+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>+</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>+3,
<a name="l274"></a> </span><span class=cF6>&quot;%3d&quot;</span><span class=cF0>,s-&gt;sx*360/</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>);
<a name="l275"></a> i=c-&gt;left+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>;
<a name="l276"></a> </span><span class=cF1>if</span><span class=cF0> (s-&gt;sx&gt;</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>/2)
<a name="l277"></a> j=-</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>/2+s-&gt;sx;
<a name="l278"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l279"></a> j=s-&gt;sx+</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>/2;
<a name="l280"></a> j=c-&gt;top+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>+</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>-1-j;
<a name="l281"></a> </span><span class=cF5>GrRect</span><span class=cF0>(dc,i-3,j-2,7,5);
<a name="l282"></a> dc-&gt;color=s-&gt;cx^8;
<a name="l283"></a> </span><span class=cF5>GrRect</span><span class=cF0>(dc,i-2,j-1,5,3);
<a name="l284"></a>
<a name="l285"></a> dc-&gt;color=s-&gt;cy;
<a name="l286"></a> </span><span class=cF5>GrPrint</span><span class=cF0>(dc,c-&gt;left+2*</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>+1-</span><span class=cF3>FONT_WIDTH</span><span class=cF0>/2,
<a name="l287"></a> c-&gt;top+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>-</span><span class=cF7>(</span><span class=cF0>1+</span><span class=cF3>FONT_HEIGHT</span><span class=cF7>)</span><span class=cF0>,</span><span class=cF6>&quot;Y&quot;</span><span class=cF0>);
<a name="l288"></a> </span><span class=cF5>GrPrint</span><span class=cF0>(dc,c-&gt;left+2*</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>+1-3*</span><span class=cF3>FONT_WIDTH</span><span class=cF0>/2,
<a name="l289"></a> c-&gt;top+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>+</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>+3,
<a name="l290"></a> </span><span class=cF6>&quot;%3d&quot;</span><span class=cF0>,s-&gt;sy*360/</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>);
<a name="l291"></a> i=c-&gt;left+2*</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>+1;
<a name="l292"></a> </span><span class=cF1>if</span><span class=cF0> (s-&gt;sy&gt;</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>/2)
<a name="l293"></a> j=-</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>/2+s-&gt;sy;
<a name="l294"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l295"></a> j=s-&gt;sy+</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>/2;
<a name="l296"></a> j=c-&gt;top+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>+</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>-1-j;
<a name="l297"></a> </span><span class=cF5>GrRect</span><span class=cF0>(dc,i-3,j-2,7,5);
<a name="l298"></a> dc-&gt;color=s-&gt;cy^8;
<a name="l299"></a> </span><span class=cF5>GrRect</span><span class=cF0>(dc,i-2,j-1,5,3);
<a name="l300"></a>
<a name="l301"></a> dc-&gt;color=s-&gt;cz;
<a name="l302"></a> </span><span class=cF5>GrPrint</span><span class=cF0>(dc,c-&gt;left+3*</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>+2-</span><span class=cF3>FONT_WIDTH</span><span class=cF0>/2,
<a name="l303"></a> c-&gt;top+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>-</span><span class=cF7>(</span><span class=cF0>1+</span><span class=cF3>FONT_HEIGHT</span><span class=cF7>)</span><span class=cF0>,</span><span class=cF6>&quot;Z&quot;</span><span class=cF0>);
<a name="l304"></a> </span><span class=cF5>GrPrint</span><span class=cF0>(dc,c-&gt;left+3*</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>+2-3*</span><span class=cF3>FONT_WIDTH</span><span class=cF0>/2,
<a name="l305"></a> c-&gt;top+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>+</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>+3,
<a name="l306"></a> </span><span class=cF6>&quot;%3d&quot;</span><span class=cF0>,s-&gt;sz*360/</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>);
<a name="l307"></a> i=c-&gt;left+3*</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>+2;
<a name="l308"></a> </span><span class=cF1>if</span><span class=cF0> (s-&gt;sz&gt;</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>/2)
<a name="l309"></a> j=-</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>/2+s-&gt;sz;
<a name="l310"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l311"></a> j=s-&gt;sz+</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>/2;
<a name="l312"></a> j=c-&gt;top+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>+</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>-1-j;
<a name="l313"></a> </span><span class=cF5>GrRect</span><span class=cF0>(dc,i-3,j-2,7,5);
<a name="l314"></a> dc-&gt;color=s-&gt;cz^8;
<a name="l315"></a> </span><span class=cF5>GrRect</span><span class=cF0>(dc,i-2,j-1,5,3);
<a name="l316"></a>}
<a name="l317"></a>
<a name="l318"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>UpdateDerivedViewAnglesCtrl</span><span class=cF0>(</span><span class=cF9>CCtrl</span><span class=cF0> *c)
<a name="l319"></a>{
<a name="l320"></a> </span><span class=cF9>CViewAngles</span><span class=cF0> *s=c-&gt;state;
<a name="l321"></a> c-&gt;left=c-&gt;win_task-&gt;pix_width-(</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>*4+3);
<a name="l322"></a> c-&gt;right=c-&gt;left+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>*4+3;
<a name="l323"></a> c-&gt;top=c-&gt;win_task-&gt;pix_height-(</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>*2+</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>);
<a name="l324"></a> c-&gt;bottom=c-&gt;top+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF0>*2+</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>;
<a name="l325"></a> s-&gt;sx=</span><span class=cF5>ClampI64</span><span class=cF0>(</span><span class=cF5>RoundI64</span><span class=cF7>(</span><span class=cF0>s-&gt;sx,</span><span class=cF3>VIEWANGLES_SNAP</span><span class=cF7>)</span><span class=cF0>,0,</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>-1);
<a name="l326"></a> s-&gt;sy=</span><span class=cF5>ClampI64</span><span class=cF0>(</span><span class=cF5>RoundI64</span><span class=cF7>(</span><span class=cF0>s-&gt;sy,</span><span class=cF3>VIEWANGLES_SNAP</span><span class=cF7>)</span><span class=cF0>,0,</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>-1);
<a name="l327"></a> s-&gt;sz=</span><span class=cF5>ClampI64</span><span class=cF0>(</span><span class=cF5>RoundI64</span><span class=cF7>(</span><span class=cF0>s-&gt;sz,</span><span class=cF3>VIEWANGLES_SNAP</span><span class=cF7>)</span><span class=cF0>,0,</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>-1);
<a name="l328"></a> s-&gt;ax=2*</span><span class=cF3>pi</span><span class=cF0>*s-&gt;sx/</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>;
<a name="l329"></a> s-&gt;ay=2*</span><span class=cF3>pi</span><span class=cF0>*s-&gt;sy/</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>;
<a name="l330"></a> s-&gt;az=2*</span><span class=cF3>pi</span><span class=cF0>*s-&gt;sz/</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>;
<a name="l331"></a>}
<a name="l332"></a>
<a name="l333"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>LeftClickViewAngles</span><span class=cF0>(</span><span class=cF9>CCtrl</span><span class=cF0> *c,</span><span class=cF9>I64</span><span class=cF0> x,</span><span class=cF9>I64</span><span class=cF0> y,</span><span class=cF1>Bool</span><span class=cF0>)
<a name="l334"></a>{
<a name="l335"></a> </span><span class=cF9>CViewAngles</span><span class=cF0> *s=c-&gt;state;
<a name="l336"></a> </span><span class=cF9>I64</span><span class=cF0> i;
<a name="l337"></a> i=</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>-1-(y-</span><span class=cF7>(</span><span class=cF0>c-&gt;top+</span><span class=cF3>VIEWANGLES_SPACING</span><span class=cF7>)</span><span class=cF0>);
<a name="l338"></a> </span><span class=cF1>if</span><span class=cF0> (i&gt;=</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>/2)
<a name="l339"></a> i-=</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>/2;
<a name="l340"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l341"></a> i+=</span><span class=cF3>VIEWANGLES_RANGE</span><span class=cF0>/2;
<a name="l342"></a> </span><span class=cF1>if</span><span class=cF0> (x&lt;c-&gt;left+</span><span class=cF7>(</span><span class=cF0>c-&gt;right-c-&gt;left</span><span class=cF7>)</span><span class=cF0>/3)
<a name="l343"></a> s-&gt;sx=i;
<a name="l344"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (x&lt;c-&gt;left+2*</span><span class=cF7>(</span><span class=cF0>c-&gt;right-c-&gt;left</span><span class=cF7>)</span><span class=cF0>/3)
<a name="l345"></a> s-&gt;sy=i;
<a name="l346"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l347"></a> s-&gt;sz=i;
<a name="l348"></a> </span><span class=cF1>if</span><span class=cF0> (c-&gt;update_derived_vals)
<a name="l349"></a> (*c-&gt;update_derived_vals)(c);
<a name="l350"></a>}
<a name="l351"></a>
<a name="l352"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>CCtrl</span><span class=cF0> *</span><span class=cF5>ViewAnglesNew</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task=</span><span class=cF3>NULL</span><span class=cF0>)
<a name="l353"></a>{</span><span class=cF2>//Create view angle ctrl. See </span><a href="/Wb/Demo/Graphics/Shading.HC.HTML#l1"><span class=cF4>::/Demo/Graphics/Shading.HC</span></a><span class=cF2>.</span><span class=cF0>
<a name="l354"></a> </span><span class=cF9>CCtrl</span><span class=cF0> *c;
<a name="l355"></a> </span><span class=cF9>CViewAngles</span><span class=cF0> *s;
<a name="l356"></a> </span><span class=cF1>if</span><span class=cF0> (!task) task=</span><span class=cF5>Fs</span><span class=cF0>;
<a name="l357"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>c=</span><span class=cF5>CtrlFindUnique</span><span class=cF0>(task,</span><span class=cF3>CTRLT_VIEWING_ANGLES</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l358"></a> s=</span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CViewAngles</span><span class=cF7>)</span><span class=cF0>,task);
<a name="l359"></a> c=</span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CCtrl</span><span class=cF7>)</span><span class=cF0>);
<a name="l360"></a> s-&gt;cbd=</span><span class=cF3>BLUE</span><span class=cF0>;
<a name="l361"></a> s-&gt;cbg=</span><span class=cF3>LTBLUE</span><span class=cF0>;
<a name="l362"></a> s-&gt;cfg=</span><span class=cF3>BLACK</span><span class=cF0>;
<a name="l363"></a> s-&gt;cx=</span><span class=cF3>LTGREEN</span><span class=cF0>;
<a name="l364"></a> s-&gt;cy=</span><span class=cF3>GREEN</span><span class=cF0>;
<a name="l365"></a> s-&gt;cz=</span><span class=cF3>LTGREEN</span><span class=cF0>;
<a name="l366"></a> c-&gt;win_task=task;
<a name="l367"></a> c-&gt;flags=</span><span class=cF3>CTRLF_SHOW</span><span class=cF0>|</span><span class=cF3>CTRLF_CAPTURE_LEFT_MS</span><span class=cF0>;
<a name="l368"></a> c-&gt;type=</span><span class=cF3>CTRLT_VIEWING_ANGLES</span><span class=cF0>;
<a name="l369"></a> c-&gt;state=s;
<a name="l370"></a> c-&gt;draw_it=&amp;</span><span class=cF5>DrawViewAnglesCtrl</span><span class=cF0>;
<a name="l371"></a> c-&gt;left_click=&amp;</span><span class=cF5>LeftClickViewAngles</span><span class=cF0>;
<a name="l372"></a> c-&gt;update_derived_vals=&amp;</span><span class=cF5>UpdateDerivedViewAnglesCtrl</span><span class=cF0>;
<a name="l373"></a> </span><span class=cF5>QueIns</span><span class=cF0>(c,task-&gt;last_ctrl);
<a name="l374"></a> </span><span class=cF5>TaskDerivedValsUpdate</span><span class=cF0>(task);
<a name="l375"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l376"></a> </span><span class=cF1>return</span><span class=cF0> c;
<a name="l377"></a>}
<a name="l378"></a>
<a name="l379"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>ViewAnglesDel</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task=</span><span class=cF3>NULL</span><span class=cF0>)
<a name="l380"></a>{</span><span class=cF2>//Free view angle ctrl.</span><span class=cF0>
<a name="l381"></a> </span><span class=cF9>CCtrl</span><span class=cF0> *c;
<a name="l382"></a> </span><span class=cF1>if</span><span class=cF0> (!task) task=</span><span class=cF5>Fs</span><span class=cF0>;
<a name="l383"></a> </span><span class=cF1>if</span><span class=cF0> (c=</span><span class=cF5>CtrlFindUnique</span><span class=cF7>(</span><span class=cF0>task,</span><span class=cF3>CTRLT_VIEWING_ANGLES</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l384"></a> </span><span class=cF5>QueRem</span><span class=cF0>(c);
<a name="l385"></a> </span><span class=cF5>Free</span><span class=cF0>(c-&gt;state);
<a name="l386"></a> </span><span class=cF5>Free</span><span class=cF0>(c);
<a name="l387"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l388"></a>}
</span></pre></body>
</html>

View File

@ -0,0 +1,122 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF0>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>BTTN_BORDER</span><span class=cF0> 2
<a name="l2"></a>
<a name="l3"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>BTF_DONT_FREE</span><span class=cF0> 1
<a name="l4"></a>
<a name="l5"></a></span><span class=cF1>class</span><span class=cF0> </span><span class=cF9>CCtrlBttnState</span><span class=cF0>
<a name="l6"></a>{
<a name="l7"></a> </span><span class=cF9>I64</span><span class=cF0> state,num_states,flags;
<a name="l8"></a> </span><span class=cF1>U8</span><span class=cF0> *state_texts;
<a name="l9"></a> </span><span class=cF9>CColorROPU32</span><span class=cF0> *state_colors;
<a name="l10"></a>};
<a name="l11"></a>
<a name="l12"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DrawCtrlBttn</span><span class=cF0>(</span><span class=cF9>CDC</span><span class=cF0> *dc,</span><span class=cF9>CCtrl</span><span class=cF0> *c)
<a name="l13"></a>{
<a name="l14"></a> </span><span class=cF9>CCtrlBttnState</span><span class=cF0> *s=c-&gt;state;
<a name="l15"></a> </span><span class=cF9>I64</span><span class=cF0> l;
<a name="l16"></a> </span><span class=cF1>U8</span><span class=cF0> *st;
<a name="l17"></a>
<a name="l18"></a> dc-&gt;color=</span><span class=cF3>BLACK</span><span class=cF0>;
<a name="l19"></a> </span><span class=cF5>GrRect</span><span class=cF0>(dc,c-&gt;left,c-&gt;top,c-&gt;right-c-&gt;left+1,c-&gt;bottom-c-&gt;top+1);
<a name="l20"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>st=</span><span class=cF5>LstSub</span><span class=cF0>(s-&gt;state,s-&gt;state_texts)</span><span class=cF7>)</span><span class=cF0>)
<a name="l21"></a> st=s-&gt;state_texts;
<a name="l22"></a> dc-&gt;color=s-&gt;state_colors[s-&gt;state];
<a name="l23"></a> l=</span><span class=cF5>StrLen</span><span class=cF0>(st);
<a name="l24"></a> </span><span class=cF5>GrRect</span><span class=cF0>(dc,c-&gt;left+</span><span class=cF3>BTTN_BORDER</span><span class=cF0>,c-&gt;top+</span><span class=cF3>BTTN_BORDER</span><span class=cF0>,
<a name="l25"></a> c-&gt;right-c-&gt;left+1-</span><span class=cF3>BTTN_BORDER</span><span class=cF0>*2,
<a name="l26"></a> c-&gt;bottom-c-&gt;top+1-</span><span class=cF3>BTTN_BORDER</span><span class=cF0>*2);
<a name="l27"></a> dc-&gt;color=s-&gt;state_colors[s-&gt;state]^(</span><span class=cF3>WHITE</span><span class=cF0>&lt;&lt;16+</span><span class=cF3>WHITE</span><span class=cF0>);
<a name="l28"></a> </span><span class=cF5>GrPrint</span><span class=cF0>(dc,</span><span class=cF7>(</span><span class=cF0>c-&gt;left+c-&gt;right+1-l*</span><span class=cF3>FONT_WIDTH</span><span class=cF7>)</span><span class=cF0>&gt;&gt;1,
<a name="l29"></a> </span><span class=cF7>(</span><span class=cF0>c-&gt;top+c-&gt;bottom+1-</span><span class=cF3>FONT_HEIGHT</span><span class=cF7>)</span><span class=cF0>&gt;&gt;1,</span><span class=cF6>&quot;%s&quot;</span><span class=cF0>,st);
<a name="l30"></a>}
<a name="l31"></a>
<a name="l32"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>LeftClickCtrlBttn</span><span class=cF0>(</span><span class=cF9>CCtrl</span><span class=cF0> *c,</span><span class=cF9>I64</span><span class=cF0>,</span><span class=cF9>I64</span><span class=cF0>,</span><span class=cF1>Bool</span><span class=cF0> down)
<a name="l33"></a>{
<a name="l34"></a> </span><span class=cF9>CCtrlBttnState</span><span class=cF0> *s=c-&gt;state;
<a name="l35"></a> </span><span class=cF1>if</span><span class=cF0> (down) </span><span class=cF7>{</span><span class=cF0>
<a name="l36"></a> s-&gt;state++;
<a name="l37"></a> </span><span class=cF1>if</span><span class=cF0> (s-&gt;state==s-&gt;num_states)
<a name="l38"></a> s-&gt;state=0;
<a name="l39"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l40"></a>}
<a name="l41"></a>
<a name="l42"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>CCtrl</span><span class=cF0> *</span><span class=cF5>CtrlBttnNew</span><span class=cF0>(</span><span class=cF9>I64</span><span class=cF0> x,</span><span class=cF9>I64</span><span class=cF0> y,</span><span class=cF9>I64</span><span class=cF0> width=-1,</span><span class=cF9>I64</span><span class=cF0> height=-1,
<a name="l43"></a> </span><span class=cF9>I64</span><span class=cF0> num_states=1,</span><span class=cF1>U8</span><span class=cF0> *state_texts,
<a name="l44"></a> </span><span class=cF9>I32</span><span class=cF0> *state_colors,</span><span class=cF9>CCtrlBttnState</span><span class=cF0> *_s=</span><span class=cF3>NULL</span><span class=cF0>)
<a name="l45"></a>{</span><span class=cF2>//Create bttn ctrl. See </span><a href="/Wb/Apps/Strut/Strut.HC.HTML#l1"><span class=cF4>::/Apps/Strut/Strut.HC</span></a><span class=cF2>.</span><span class=cF0>
<a name="l46"></a> </span><span class=cF9>CCtrl</span><span class=cF0> *res;
<a name="l47"></a> </span><span class=cF9>CCtrlBttnState</span><span class=cF0> *s;
<a name="l48"></a> </span><span class=cF9>I64</span><span class=cF0> i,j,l;
<a name="l49"></a> </span><span class=cF1>U8</span><span class=cF0> *st;
<a name="l50"></a> </span><span class=cF1>if</span><span class=cF0> (width&lt;0) </span><span class=cF7>{</span><span class=cF0>
<a name="l51"></a> l=1;
<a name="l52"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;num_states;i++)
<a name="l53"></a> </span><span class=cF1>if</span><span class=cF0> (st=</span><span class=cF5>LstSub</span><span class=cF7>(</span><span class=cF0>i,state_texts</span><span class=cF7>)</span><span class=cF0>) {
<a name="l54"></a> j=</span><span class=cF5>StrLen</span><span class=cF0>(st);
<a name="l55"></a> </span><span class=cF1>if</span><span class=cF0> (j&gt;l) l=j;
<a name="l56"></a> }
<a name="l57"></a> width=</span><span class=cF3>BTTN_BORDER</span><span class=cF0>*4+l*</span><span class=cF3>FONT_WIDTH</span><span class=cF0>;
<a name="l58"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l59"></a> </span><span class=cF1>if</span><span class=cF0> (height&lt;0) height=</span><span class=cF3>BTTN_BORDER</span><span class=cF0>*4+</span><span class=cF3>FONT_HEIGHT</span><span class=cF0>;
<a name="l60"></a> res=</span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CCtrl</span><span class=cF7>)</span><span class=cF0>);
<a name="l61"></a> </span><span class=cF1>if</span><span class=cF0> (_s) </span><span class=cF7>{</span><span class=cF0>
<a name="l62"></a> s=_s;
<a name="l63"></a> </span><span class=cF5>MemSet</span><span class=cF0>(s,0,</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CCtrlBttnState</span><span class=cF7>)</span><span class=cF0>);
<a name="l64"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l65"></a> s=</span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CCtrlBttnState</span><span class=cF7>)</span><span class=cF0>);
<a name="l66"></a> s-&gt;flags=</span><span class=cF3>BTF_DONT_FREE</span><span class=cF0>;
<a name="l67"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l68"></a> s-&gt;num_states=num_states;
<a name="l69"></a> s-&gt;state_texts=state_texts;
<a name="l70"></a> s-&gt;state_colors=state_colors;
<a name="l71"></a> res-&gt;win_task=</span><span class=cF5>Fs</span><span class=cF0>;
<a name="l72"></a> res-&gt;flags=</span><span class=cF3>CTRLF_SHOW</span><span class=cF0>;
<a name="l73"></a> res-&gt;type=</span><span class=cF3>CTRLT_GENERIC</span><span class=cF0>;
<a name="l74"></a> res-&gt;state=s;
<a name="l75"></a> res-&gt;draw_it=&amp;</span><span class=cF5>DrawCtrlBttn</span><span class=cF0>;
<a name="l76"></a> res-&gt;left_click=&amp;</span><span class=cF5>LeftClickCtrlBttn</span><span class=cF0>;
<a name="l77"></a> res-&gt;left=x;
<a name="l78"></a> res-&gt;top=y;
<a name="l79"></a> res-&gt;right=res-&gt;left+width-1;
<a name="l80"></a> res-&gt;bottom=res-&gt;top+height-1;
<a name="l81"></a> </span><span class=cF5>QueIns</span><span class=cF0>(res,</span><span class=cF5>Fs</span><span class=cF0>-&gt;last_ctrl);
<a name="l82"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l83"></a>}
<a name="l84"></a>
<a name="l85"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>CtrlBttnDel</span><span class=cF0>(</span><span class=cF9>CCtrl</span><span class=cF0> *c)
<a name="l86"></a>{</span><span class=cF2>//Free bttn ctrl.</span><span class=cF0>
<a name="l87"></a> </span><span class=cF5>QueRem</span><span class=cF0>(c);
<a name="l88"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>c-&gt;flags&amp;</span><span class=cF3>BTF_DONT_FREE</span><span class=cF7>)</span><span class=cF0>)
<a name="l89"></a> </span><span class=cF5>Free</span><span class=cF0>(c-&gt;state);
<a name="l90"></a> </span><span class=cF5>Free</span><span class=cF0>(c);
<a name="l91"></a>}
</span></pre></body>
</html>

View File

@ -0,0 +1,245 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF1>class</span><span class=cF0> </span><span class=cF9>CTemplateCSSlider</span><span class=cF0>
<a name="l2"></a>{
<a name="l3"></a> </span><span class=cF9>CTemplateCSSlider</span><span class=cF0> *next,*last;
<a name="l4"></a> </span><span class=cF1>U8</span><span class=cF0> *name;
<a name="l5"></a> </span><span class=cF9>I64</span><span class=cF0> num;
<a name="l6"></a>};
<a name="l7"></a>
<a name="l8"></a></span><span class=cF1>class</span><span class=cF0> </span><span class=cF9>CTemplateCS</span><span class=cF0>
<a name="l9"></a>{
<a name="l10"></a> </span><span class=cF9>CTemplateCSSlider</span><span class=cF0> *next_slider,*last_slider;
<a name="l11"></a> </span><span class=cF9>I64</span><span class=cF0> num_sliders,range,spacing,border;
<a name="l12"></a> </span><span class=cF1>U8</span><span class=cF0> *glbl_name;
<a name="l13"></a>};
<a name="l14"></a>
<a name="l15"></a></span><span class=cF9>CTemplateCS</span><span class=cF0> *</span><span class=cF5>CtrlSliderGet</span><span class=cF0>()
<a name="l16"></a>{
<a name="l17"></a> </span><span class=cF9>CTemplateCSSlider</span><span class=cF0> *tmps;
<a name="l18"></a> </span><span class=cF1>U8</span><span class=cF0> *st,pmt[</span><span class=cF3>STR_LEN</span><span class=cF0>];
<a name="l19"></a> </span><span class=cF9>CTemplateCS</span><span class=cF0> *res=</span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CTemplateCS</span><span class=cF7>)</span><span class=cF0>);
<a name="l20"></a>
<a name="l21"></a> </span><span class=cF6>&quot;$PURPLE$Ctrl Slider$FG$\n\n&quot;</span><span class=cF0>;
<a name="l22"></a>
<a name="l23"></a> res-&gt;glbl_name=</span><span class=cF5>GetStr</span><span class=cF0>(</span><span class=cF6>&quot;Glbl Struct Name (ENTER for No Glbl):&quot;</span><span class=cF0>);
<a name="l24"></a> res-&gt;range=</span><span class=cF5>GetI64</span><span class=cF0> (</span><span class=cF6>&quot;Range (%4d):&quot;</span><span class=cF0>,30);
<a name="l25"></a> res-&gt;spacing=</span><span class=cF5>GetI64</span><span class=cF0>(</span><span class=cF6>&quot;Spacing (%4d):&quot;</span><span class=cF0>,20);
<a name="l26"></a> res-&gt;border=</span><span class=cF5>GetI64</span><span class=cF0> (</span><span class=cF6>&quot;Border (%4d):&quot;</span><span class=cF0>,2);
<a name="l27"></a>
<a name="l28"></a> res-&gt;next_slider=res-&gt;last_slider=&amp;res-&gt;next_slider;
<a name="l29"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l30"></a> </span><span class=cF5>StrPrint</span><span class=cF0>(pmt,</span><span class=cF6>&quot;Slider #%d Name:&quot;</span><span class=cF0>,res-&gt;num_sliders+1);
<a name="l31"></a> st=</span><span class=cF5>GetStr</span><span class=cF0>(pmt);
<a name="l32"></a> </span><span class=cF1>if</span><span class=cF0> (!*st) {
<a name="l33"></a> </span><span class=cF5>Free</span><span class=cF0>(st);
<a name="l34"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l35"></a> }
<a name="l36"></a> tmps=</span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CTemplateCSSlider</span><span class=cF7>)</span><span class=cF0>);
<a name="l37"></a> tmps-&gt;name=st;
<a name="l38"></a> </span><span class=cF5>QueIns</span><span class=cF0>(tmps,res-&gt;last_slider);
<a name="l39"></a> tmps-&gt;num=res-&gt;num_sliders++;
<a name="l40"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l41"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l42"></a>}
<a name="l43"></a>
<a name="l44"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>TemplateCtrlSlider</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc)
<a name="l45"></a>{
<a name="l46"></a> </span><span class=cF9>CTask</span><span class=cF0> *task;
<a name="l47"></a> </span><span class=cF9>CTemplateCS</span><span class=cF0> *m=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l48"></a> </span><span class=cF9>CTemplateCSSlider</span><span class=cF0> *tmps;
<a name="l49"></a> </span><span class=cF9>I64</span><span class=cF0> i;
<a name="l50"></a>
<a name="l51"></a> </span><span class=cF5>DocUnlock</span><span class=cF0>(doc);
<a name="l52"></a> </span><span class=cF5>DocRecalc</span><span class=cF0>(doc);
<a name="l53"></a> </span><span class=cF5>DocCaptureUndo</span><span class=cF0>(doc,</span><span class=cF3>TRUE</span><span class=cF0>);
<a name="l54"></a>
<a name="l55"></a> task=</span><span class=cF5>User</span><span class=cF0>(</span><span class=cF6>&quot;CTemplateCS **_m=0x%X;*_m=CtrlSliderGet;\n&quot;</span><span class=cF0>,&amp;m);
<a name="l56"></a> </span><span class=cF1>while</span><span class=cF0> (!m)
<a name="l57"></a> </span><span class=cF5>Yield</span><span class=cF0>;
<a name="l58"></a>
<a name="l59"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,
<a name="l60"></a></span><span class=cF6>&quot;#define SLIDER_RANGE\t%d</span><span class=cF0>
<a name="l61"></a></span><span class=cF6>#define SLIDER_SPACING\t%d</span><span class=cF0>
<a name="l62"></a></span><span class=cF6>#define SLIDER_BORDER\t%d</span><span class=cF0>
<a name="l63"></a>
<a name="l64"></a></span><span class=cF6>class CSliderState</span><span class=cF0>
<a name="l65"></a></span><span class=cF6>{</span><span class=cF0>
<a name="l66"></a></span><span class=cF6>&quot;</span><span class=cF0>,m-&gt;range,m-&gt;spacing,m-&gt;border);
<a name="l67"></a>
<a name="l68"></a> tmps=m-&gt;next_slider;
<a name="l69"></a> </span><span class=cF1>while</span><span class=cF0> (tmps!=&amp;m-&gt;next_slider) </span><span class=cF7>{</span><span class=cF0>
<a name="l70"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot; I64 %s;\n&quot;</span><span class=cF0>,tmps-&gt;name);
<a name="l71"></a> tmps=tmps-&gt;next;
<a name="l72"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l73"></a> </span><span class=cF1>if</span><span class=cF0> (*m-&gt;glbl_name)
<a name="l74"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;} %s;\n&quot;</span><span class=cF0>,m-&gt;glbl_name);
<a name="l75"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l76"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;};\n&quot;</span><span class=cF0>);
<a name="l77"></a>
<a name="l78"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,
<a name="l79"></a></span><span class=cF6>&quot;</span><span class=cF0>
<a name="l80"></a></span><span class=cF6>U0 DrawCtrlSlider(CDC *dc,CCtrl *c)</span><span class=cF0>
<a name="l81"></a></span><span class=cF6>{</span><span class=cF0>
<a name="l82"></a></span><span class=cF6> CSliderState *s=c-&gt;state;</span><span class=cF0>
<a name="l83"></a>
<a name="l84"></a></span><span class=cF6> dc-&gt;color=LTRED;</span><span class=cF0>
<a name="l85"></a></span><span class=cF6> GrRect(dc, c-&gt;left,c-&gt;top,%d*SLIDER_SPACING+%d,SLIDER_SPACING*2+SLIDER_RANGE);</span><span class=cF0>
<a name="l86"></a></span><span class=cF6> dc-&gt;color=BLUE;</span><span class=cF0>
<a name="l87"></a></span><span class=cF6> GrRect(dc, c-&gt;left+SLIDER_BORDER,c-&gt;top+SLIDER_BORDER,</span><span class=cF0>
<a name="l88"></a></span><span class=cF6> %d*SLIDER_SPACING+%d-2*SLIDER_BORDER,SLIDER_SPACING*2</span><span class=cF0>
<a name="l89"></a></span><span class=cF6> +SLIDER_RANGE-2*SLIDER_BORDER);</span><span class=cF0>
<a name="l90"></a></span><span class=cF6> dc-&gt;color=BLACK;</span><span class=cF0>
<a name="l91"></a></span><span class=cF6>&quot;</span><span class=cF0>,m-&gt;num_sliders+1,m-&gt;num_sliders,m-&gt;num_sliders+1,m-&gt;num_sliders);
<a name="l92"></a>
<a name="l93"></a> </span><span class=cF1>for</span><span class=cF0> (i=0;i&lt;m-&gt;num_sliders;i++)
<a name="l94"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,
<a name="l95"></a></span><span class=cF6>&quot; GrLine(dc,c-&gt;left+%d*SLIDER_SPACING+%d,c-&gt;top+SLIDER_SPACING,</span><span class=cF0>
<a name="l96"></a></span><span class=cF6> c-&gt;left+%d*SLIDER_SPACING+%d,c-&gt;top+SLIDER_SPACING+SLIDER_RANGE-1);</span><span class=cF0>
<a name="l97"></a></span><span class=cF6>&quot;</span><span class=cF0>,i+1,i,i+1,i);
<a name="l98"></a>
<a name="l99"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot; dc-&gt;color=LTRED;\n&quot;</span><span class=cF0>);
<a name="l100"></a>
<a name="l101"></a> tmps=m-&gt;next_slider;
<a name="l102"></a> </span><span class=cF1>while</span><span class=cF0> (tmps!=&amp;m-&gt;next_slider) </span><span class=cF7>{</span><span class=cF0>
<a name="l103"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,
<a name="l104"></a></span><span class=cF6>&quot; GrPrint(dc,c-&gt;left+%d*SLIDER_SPACING+%d-FONT_WIDTH/2,</span><span class=cF0>
<a name="l105"></a></span><span class=cF6> c-&gt;top+SLIDER_SPACING+SLIDER_RANGE+3,</span><span class=cF0>
<a name="l106"></a></span><span class=cF6> \&quot;%%d\&quot;,s-&gt;%s*10/SLIDER_RANGE);\n&quot;</span><span class=cF0>,
<a name="l107"></a> tmps-&gt;num+1,tmps-&gt;num,tmps-&gt;name);
<a name="l108"></a> tmps=tmps-&gt;next;
<a name="l109"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l110"></a>
<a name="l111"></a> tmps=m-&gt;next_slider;
<a name="l112"></a> </span><span class=cF1>while</span><span class=cF0> (tmps!=&amp;m-&gt;next_slider) </span><span class=cF7>{</span><span class=cF0>
<a name="l113"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,
<a name="l114"></a> </span><span class=cF6>&quot; GrRect(dc,c-&gt;left+%d*SLIDER_SPACING+%d-3,&quot;</span><span class=cF0>
<a name="l115"></a> </span><span class=cF6>&quot;c-&gt;top+SLIDER_SPACING+SLIDER_RANGE-1-s-&gt;%s-2,7,5);\n&quot;</span><span class=cF0>,
<a name="l116"></a> tmps-&gt;num+1,tmps-&gt;num,tmps-&gt;name);
<a name="l117"></a> tmps=tmps-&gt;next;
<a name="l118"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l119"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot; dc-&gt;color=YELLOW;\n&quot;</span><span class=cF0>);
<a name="l120"></a>
<a name="l121"></a> tmps=m-&gt;next_slider;
<a name="l122"></a> </span><span class=cF1>while</span><span class=cF0> (tmps!=&amp;m-&gt;next_slider) </span><span class=cF7>{</span><span class=cF0>
<a name="l123"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot; GrRect(dc,c-&gt;left+%d*SLIDER_SPACING+%d-2,&quot;</span><span class=cF0>
<a name="l124"></a> </span><span class=cF6>&quot;c-&gt;top+SLIDER_SPACING+SLIDER_RANGE-1-s-&gt;%s-1,5,3);\n&quot;</span><span class=cF0>,
<a name="l125"></a> tmps-&gt;num+1,tmps-&gt;num,tmps-&gt;name);
<a name="l126"></a> tmps=tmps-&gt;next;
<a name="l127"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l128"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,
<a name="l129"></a></span><span class=cF6>&quot;}</span><span class=cF0>
<a name="l130"></a>
<a name="l131"></a></span><span class=cF6>U0 UpdateDerivedCtrlSlider(CCtrl *c)</span><span class=cF0>
<a name="l132"></a></span><span class=cF6>{</span><span class=cF0>
<a name="l133"></a></span><span class=cF6> CSliderState *s=c-&gt;state;</span><span class=cF0>
<a name="l134"></a></span><span class=cF6> c-&gt;left=c-&gt;win_task-&gt;pix_width/2-(SLIDER_SPACING*3+2)/2;</span><span class=cF0>
<a name="l135"></a></span><span class=cF6> c-&gt;right=c-&gt;left+%d*SLIDER_SPACING+%d;</span><span class=cF0>
<a name="l136"></a></span><span class=cF6> c-&gt;top=c-&gt;win_task-&gt;pix_height/2-(SLIDER_SPACING*2+SLIDER_RANGE)/2;</span><span class=cF0>
<a name="l137"></a></span><span class=cF6> c-&gt;bottom=c-&gt;top+SLIDER_SPACING*2+SLIDER_RANGE;</span><span class=cF0>
<a name="l138"></a></span><span class=cF6>&quot;</span><span class=cF0>,m-&gt;num_sliders+1,m-&gt;num_sliders);
<a name="l139"></a>
<a name="l140"></a> tmps=m-&gt;next_slider;
<a name="l141"></a> </span><span class=cF1>while</span><span class=cF0> (tmps!=&amp;m-&gt;next_slider) </span><span class=cF7>{</span><span class=cF0>
<a name="l142"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot; s-&gt;%s=ClampI64(s-&gt;%s,0,SLIDER_RANGE-1);\n&quot;</span><span class=cF0>,
<a name="l143"></a> tmps-&gt;name,tmps-&gt;name);
<a name="l144"></a> tmps=tmps-&gt;next;
<a name="l145"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l146"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,
<a name="l147"></a></span><span class=cF6>&quot;}</span><span class=cF0>
<a name="l148"></a>
<a name="l149"></a></span><span class=cF6>U0 LeftClickSlider(CCtrl *c,I64 x,I64 y,Bool down)</span><span class=cF0>
<a name="l150"></a></span><span class=cF6>{</span><span class=cF0>
<a name="l151"></a></span><span class=cF6> no_warn down;</span><span class=cF0>
<a name="l152"></a></span><span class=cF6> CSliderState *s=c-&gt;state;</span><span class=cF0>
<a name="l153"></a></span><span class=cF6>&quot;</span><span class=cF0>);
<a name="l154"></a>
<a name="l155"></a> tmps=m-&gt;next_slider;
<a name="l156"></a> </span><span class=cF1>while</span><span class=cF0> (tmps!=&amp;m-&gt;next_slider) </span><span class=cF7>{</span><span class=cF0>
<a name="l157"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot; &quot;</span><span class=cF0>);
<a name="l158"></a> </span><span class=cF1>if</span><span class=cF0> (tmps!=m-&gt;next_slider)
<a name="l159"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;else &quot;</span><span class=cF0>);
<a name="l160"></a> </span><span class=cF1>if</span><span class=cF0> (tmps-&gt;next==&amp;m-&gt;next_slider)
<a name="l161"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;\n&quot;</span><span class=cF0>);
<a name="l162"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l163"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot;if (x&lt;c-&gt;left+%d*SLIDER_SPACING+%d+SLIDER_SPACING/2)\n&quot;</span><span class=cF0>,
<a name="l164"></a> tmps-&gt;num+1,tmps-&gt;num);
<a name="l165"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot; s-&gt;%s=SLIDER_RANGE-1-(y-(c-&gt;top+SLIDER_SPACING));\n&quot;</span><span class=cF0>,
<a name="l166"></a> tmps-&gt;name);
<a name="l167"></a> tmps=tmps-&gt;next;
<a name="l168"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l169"></a>
<a name="l170"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,
<a name="l171"></a></span><span class=cF6>&quot; if (c-&gt;update_derived_vals)</span><span class=cF0>
<a name="l172"></a></span><span class=cF6> (*c-&gt;update_derived_vals)(c);</span><span class=cF0>
<a name="l173"></a></span><span class=cF6>}</span><span class=cF0>
<a name="l174"></a>
<a name="l175"></a></span><span class=cF6>CCtrl *SliderNew()</span><span class=cF0>
<a name="l176"></a></span><span class=cF6>{</span><span class=cF0>
<a name="l177"></a></span><span class=cF6> CCtrl *c=CAlloc(sizeof(CCtrl));</span><span class=cF0>
<a name="l178"></a></span><span class=cF6> c-&gt;win_task=Fs;</span><span class=cF0>
<a name="l179"></a></span><span class=cF6> c-&gt;flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_MS;</span><span class=cF0>
<a name="l180"></a></span><span class=cF6> c-&gt;type=CTRLT_GENERIC;</span><span class=cF0>
<a name="l181"></a></span><span class=cF6>&quot;</span><span class=cF0>);
<a name="l182"></a> </span><span class=cF1>if</span><span class=cF0> (*m-&gt;glbl_name)
<a name="l183"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot; c-&gt;state=&amp;%s;\n&quot;</span><span class=cF0>
<a name="l184"></a> </span><span class=cF6>&quot; MemSet(&amp;%s,0,sizeof(CSliderState));\n&quot;</span><span class=cF0>,m-&gt;glbl_name,m-&gt;glbl_name);
<a name="l185"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l186"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc, </span><span class=cF6>&quot; c-&gt;state=CAlloc(sizeof(CSliderState));\n&quot;</span><span class=cF0>);
<a name="l187"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,
<a name="l188"></a></span><span class=cF6>&quot; c-&gt;draw_it=&amp;DrawCtrlSlider;</span><span class=cF0>
<a name="l189"></a></span><span class=cF6> c-&gt;left_click=&amp;LeftClickSlider;</span><span class=cF0>
<a name="l190"></a></span><span class=cF6> c-&gt;update_derived_vals=&amp;UpdateDerivedCtrlSlider;</span><span class=cF0>
<a name="l191"></a></span><span class=cF6> QueIns(c,Fs-&gt;last_ctrl);</span><span class=cF0>
<a name="l192"></a></span><span class=cF6> TaskDerivedValsUpdate;</span><span class=cF0>
<a name="l193"></a></span><span class=cF6> return c;</span><span class=cF0>
<a name="l194"></a></span><span class=cF6>}</span><span class=cF0>
<a name="l195"></a>
<a name="l196"></a></span><span class=cF6>U0 SliderDel(CCtrl *c)</span><span class=cF0>
<a name="l197"></a></span><span class=cF6>{</span><span class=cF0>
<a name="l198"></a></span><span class=cF6> QueRem(c);</span><span class=cF0>
<a name="l199"></a></span><span class=cF6>&quot;</span><span class=cF0>);
<a name="l200"></a> </span><span class=cF1>if</span><span class=cF0> (!*m-&gt;glbl_name)
<a name="l201"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,</span><span class=cF6>&quot; Free(c-&gt;state);\n&quot;</span><span class=cF0>);
<a name="l202"></a> </span><span class=cF5>DocPrint</span><span class=cF0>(doc,
<a name="l203"></a></span><span class=cF6>&quot; Free(c);</span><span class=cF0>
<a name="l204"></a></span><span class=cF6>}</span><span class=cF0>
<a name="l205"></a></span><span class=cF6>&quot;</span><span class=cF0>);
<a name="l206"></a>
<a name="l207"></a> </span><span class=cF5>Kill</span><span class=cF0>(task); </span><span class=cF2>//This frees memory.</span><span class=cF0>
<a name="l208"></a>
<a name="l209"></a> </span><span class=cF5>RegOneTimePopUp</span><span class=cF0>(</span><span class=cF3>ARf_MANAGE_SLIDER</span><span class=cF0>,
<a name="l210"></a> </span><span class=cF6>&quot;Modify the code to your heart's content.\n&quot;</span><span class=cF0>
<a name="l211"></a> </span><span class=cF6>&quot;The code is no longer managed.\n&quot;</span><span class=cF0>);
<a name="l212"></a>
<a name="l213"></a> </span><span class=cF5>DocLock</span><span class=cF0>(doc);
<a name="l214"></a>}
</span></pre></body>
</html>

View File

@ -0,0 +1,39 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF5>Cd</span><span class=cF0>(</span><span class=cF3>__DIR__</span><span class=cF0>);;
<a name="l2"></a>
<a name="l3"></a>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Ctrls&quot;</span><span class=cF0>
<a name="l4"></a>#</span><span class=cF1>help_file</span><span class=cF0> </span><span class=cF6>&quot;::/Doc/Ctrls&quot;</span><span class=cF0>
<a name="l5"></a>#</span><span class=cF1>include</span><span class=cF0> </span><span class=cF6>&quot;CtrlsA&quot;</span><span class=cF0>
<a name="l6"></a>#</span><span class=cF1>include</span><span class=cF0> </span><span class=cF6>&quot;CtrlsBttn&quot;</span><span class=cF0>
<a name="l7"></a>#</span><span class=cF1>include</span><span class=cF0> </span><span class=cF6>&quot;CtrlsSlider&quot;</span><span class=cF0>
<a name="l8"></a></span><span class=cF5>Cd</span><span class=cF0>(</span><span class=cF6>&quot;..&quot;</span><span class=cF0>);;
</span></pre></body>
</html>

251
public/Wb/Adam/DevInfo.HC.HTML Executable file
View File

@ -0,0 +1,251 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF0>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;PCI;Processor;Devices;Info&quot;</span><span class=cF0>
<a name="l2"></a>
<a name="l3"></a></span><span class=cF2>//The file was downloaded from</span><span class=cF0>
<a name="l4"></a></span><span class=cF2>//http://www.pcidatabase.com/reports.php?type=tab-delimeted</span><span class=cF0>
<a name="l5"></a>
<a name="l6"></a>#</span><span class=cF1>define</span><span class=cF0> </span><span class=cF3>PCI_DEV_FILE</span><span class=cF0> </span><span class=cF6>&quot;::/Misc/PCIDevices.DD.Z&quot;</span><span class=cF0>
<a name="l7"></a>
<a name="l8"></a></span><span class=cF2>/****</span><span class=cF0>
<a name="l9"></a></span><span class=cF2>//1) Download http://www.pcidatabase.com/reports.php?type=tab-delimeted</span><span class=cF0>
<a name="l10"></a></span><span class=cF2>//2) Rename to ::/Misc/PCIDevices.DD.Z</span><span class=cF0>
<a name="l11"></a></span><span class=cF2>//3) ToDolDoc(&quot;::/Misc/PCIDevices.DD.Z&quot;);</span><span class=cF0>
<a name="l12"></a></span><span class=cF2>//4) Edit and remove file header and tail</span><span class=cF0>
<a name="l13"></a></span><span class=cF2>//5) Text find-and-replace &quot;=0A=&quot; with &quot;&quot;. (Doesn't seem necessary anmore.)</span><span class=cF0>
<a name="l14"></a></span><span class=cF2>//6) Run PCIDevFileGen(). (Doesn't seem necessary anmore.)</span><span class=cF0>
<a name="l15"></a>
<a name="l16"></a></span><span class=cF2>public U0 PCIDevFileGen()</span><span class=cF0>
<a name="l17"></a></span><span class=cF2>{</span><span class=cF0>
<a name="l18"></a></span><span class=cF2> Bool first=TRUE,del=FALSE,del2=FALSE,cont=FALSE;</span><span class=cF0>
<a name="l19"></a></span><span class=cF2> CDoc *doc=DocRead(PCI_DEV_FILE,</span><span class=cF0>
<a name="l20"></a> </span><span class=cF2>DOCF_PLAIN_TEXT|DOCF_DBL_DOLLARS|DOCF_NO_CURSOR);</span><span class=cF0>
<a name="l21"></a></span><span class=cF2> CDocEntry *doc_e=doc-&gt;head.next,*doc_e2;</span><span class=cF0>
<a name="l22"></a></span><span class=cF2> while (doc_e!=doc) {</span><span class=cF0>
<a name="l23"></a></span><span class=cF2> doc_e2=doc_e-&gt;next;</span><span class=cF0>
<a name="l24"></a></span><span class=cF2> if (first) {</span><span class=cF0>
<a name="l25"></a></span><span class=cF2> if (doc_e-&gt;type_u8==DOCT_TEXT) {</span><span class=cF0>
<a name="l26"></a> </span><span class=cF2>if (doc_e-&gt;tag[0]==';')</span><span class=cF0>
<a name="l27"></a> </span><span class=cF2> del=TRUE;</span><span class=cF0>
<a name="l28"></a></span><span class=cF2> }</span><span class=cF0>
<a name="l29"></a></span><span class=cF2> first=FALSE;</span><span class=cF0>
<a name="l30"></a></span><span class=cF2> }</span><span class=cF0>
<a name="l31"></a></span><span class=cF2> if (doc_e-&gt;type_u8==DOCT_TEXT &amp;&amp; doc_e-&gt;tag[StrLen(doc_e-&gt;tag)-1]=='=' &amp;&amp;</span><span class=cF0>
<a name="l32"></a> </span><span class=cF2> doc_e2-&gt;type_u8==DOCT_NEW_LINE) {</span><span class=cF0>
<a name="l33"></a></span><span class=cF2> doc_e-&gt;tag[StrLen(doc_e-&gt;tag)-1]=CH_SPACE;</span><span class=cF0>
<a name="l34"></a></span><span class=cF2> cont=TRUE;</span><span class=cF0>
<a name="l35"></a></span><span class=cF2> }</span><span class=cF0>
<a name="l36"></a></span><span class=cF2> del2=del;</span><span class=cF0>
<a name="l37"></a></span><span class=cF2> if (doc_e-&gt;type_u8==DOCT_NEW_LINE) {</span><span class=cF0>
<a name="l38"></a></span><span class=cF2> first=TRUE;</span><span class=cF0>
<a name="l39"></a></span><span class=cF2> del2=FALSE;</span><span class=cF0>
<a name="l40"></a></span><span class=cF2> if (cont) {</span><span class=cF0>
<a name="l41"></a> </span><span class=cF2>del=TRUE;</span><span class=cF0>
<a name="l42"></a> </span><span class=cF2>cont=FALSE;</span><span class=cF0>
<a name="l43"></a></span><span class=cF2> }</span><span class=cF0>
<a name="l44"></a></span><span class=cF2> }</span><span class=cF0>
<a name="l45"></a></span><span class=cF2> if (del)</span><span class=cF0>
<a name="l46"></a></span><span class=cF2> DocEntryDel(doc,doc_e);</span><span class=cF0>
<a name="l47"></a></span><span class=cF2> del=del2;</span><span class=cF0>
<a name="l48"></a></span><span class=cF2> doc_e=doc_e2;</span><span class=cF0>
<a name="l49"></a></span><span class=cF2> }</span><span class=cF0>
<a name="l50"></a></span><span class=cF2> DocWrite(doc);</span><span class=cF0>
<a name="l51"></a></span><span class=cF2>}</span><span class=cF0>
<a name="l52"></a></span><span class=cF2>****/</span><span class=cF0>
<a name="l53"></a>
<a name="l54"></a></span><span class=cF2>//</span><a href="/Wb/Misc/PCIDevices.DD.HTML#l1"><span class=cF4>::/Misc/PCIDevices.DD</span></a><span class=cF0>
<a name="l55"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>PCILookUpSingle</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc,</span><span class=cF9>I64</span><span class=cF0> m,</span><span class=cF9>I64</span><span class=cF0> d,</span><span class=cF1>U8</span><span class=cF0> **_vendor,</span><span class=cF1>U8</span><span class=cF0> **_dev)
<a name="l56"></a>{
<a name="l57"></a> </span><span class=cF1>Bool</span><span class=cF0> first=</span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l58"></a> </span><span class=cF1>U8</span><span class=cF0> buf[8],*vendor=</span><span class=cF3>NULL</span><span class=cF0>,*</span><span class=cFB>dev</span><span class=cF0>=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l59"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_e=doc-&gt;head.next;
<a name="l60"></a> </span><span class=cF1>while</span><span class=cF0> (doc_e!=doc) </span><span class=cF7>{</span><span class=cF0>
<a name="l61"></a> </span><span class=cF1>if</span><span class=cF0> (first) {
<a name="l62"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;type_u8==</span><span class=cF3>DOCT_TEXT</span><span class=cF0> &amp;&amp; doc_e-&gt;tag[0]!=</span><span class=cF6>';'</span><span class=cF0> &amp;&amp;
<a name="l63"></a> </span><span class=cF5>StrLen</span><span class=cF7>(</span><span class=cF0>doc_e-&gt;tag</span><span class=cF7>)</span><span class=cF0>&gt;=4) </span><span class=cF7>{</span><span class=cF0>
<a name="l64"></a> buf[0](</span><span class=cF9>U16</span><span class=cF0>)=</span><span class=cF6>'0x'</span><span class=cF0>;
<a name="l65"></a> buf[2](</span><span class=cF9>U32</span><span class=cF0>)=doc_e-&gt;tag(</span><span class=cF9>U32</span><span class=cF0> *)[0];
<a name="l66"></a> buf[6]=0;
<a name="l67"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Str2I64</span><span class=cF7>(</span><span class=cF0>buf</span><span class=cF7>)</span><span class=cF0>==m) {
<a name="l68"></a> doc_e=doc_e-&gt;next-&gt;next;
<a name="l69"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;type_u8==</span><span class=cF3>DOCT_TEXT</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l70"></a> vendor=</span><span class=cF5>AStrNew</span><span class=cF0>(doc_e-&gt;tag);
<a name="l71"></a> first=</span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l72"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l73"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l74"></a> }
<a name="l75"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l76"></a> first=</span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l77"></a> }
<a name="l78"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;type_u8==</span><span class=cF3>DOCT_NEW_LINE</span><span class=cF0>)
<a name="l79"></a> first=</span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l80"></a> doc_e=doc_e-&gt;next;
<a name="l81"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l82"></a>
<a name="l83"></a> </span><span class=cF1>if</span><span class=cF0> (vendor) </span><span class=cF7>{</span><span class=cF0>
<a name="l84"></a> </span><span class=cF1>while</span><span class=cF0> (doc_e!=doc) {
<a name="l85"></a> </span><span class=cF1>if</span><span class=cF0> (first) </span><span class=cF7>{</span><span class=cF0>
<a name="l86"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;type_u8==</span><span class=cF3>DOCT_TAB</span><span class=cF0>) {
<a name="l87"></a> doc_e=doc_e-&gt;next;
<a name="l88"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;type_u8==</span><span class=cF3>DOCT_TEXT</span><span class=cF0> &amp;&amp; </span><span class=cF5>StrLen</span><span class=cF7>(</span><span class=cF0>doc_e-&gt;tag</span><span class=cF7>)</span><span class=cF0>&gt;=4) </span><span class=cF7>{</span><span class=cF0>
<a name="l89"></a> buf[0](</span><span class=cF9>U16</span><span class=cF0>)=</span><span class=cF6>'0x'</span><span class=cF0>;
<a name="l90"></a> buf[2](</span><span class=cF9>U32</span><span class=cF0>)=doc_e-&gt;tag(</span><span class=cF9>U32</span><span class=cF0> *)[0];
<a name="l91"></a> buf[6]=0;
<a name="l92"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Str2I64</span><span class=cF7>(</span><span class=cF0>buf</span><span class=cF7>)</span><span class=cF0>==d) {
<a name="l93"></a> doc_e=doc_e-&gt;next-&gt;next;
<a name="l94"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;type_u8==</span><span class=cF3>DOCT_TEXT</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l95"></a> </span><span class=cFB>dev</span><span class=cF0>=</span><span class=cF5>AStrNew</span><span class=cF0>(doc_e-&gt;tag);
<a name="l96"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l97"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l98"></a> }
<a name="l99"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l100"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l101"></a> </span><span class=cF1>break</span><span class=cF0>;
<a name="l102"></a> first=</span><span class=cF3>FALSE</span><span class=cF0>;
<a name="l103"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l104"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;type_u8==</span><span class=cF3>DOCT_NEW_LINE</span><span class=cF0>)
<a name="l105"></a> first=</span><span class=cF3>TRUE</span><span class=cF0>;
<a name="l106"></a> doc_e=doc_e-&gt;next;
<a name="l107"></a> }
<a name="l108"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l109"></a>
<a name="l110"></a> </span><span class=cF1>if</span><span class=cF0> (vendor)
<a name="l111"></a> *_vendor=vendor;
<a name="l112"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l113"></a> *_vendor=</span><span class=cF5>AStrNew</span><span class=cF0>(</span><span class=cF6>&quot;Unknown&quot;</span><span class=cF0>);
<a name="l114"></a>
<a name="l115"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cFB>dev</span><span class=cF0>)
<a name="l116"></a> *_dev=</span><span class=cFB>dev</span><span class=cF0>;
<a name="l117"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l118"></a> *_dev=</span><span class=cF5>AStrNew</span><span class=cF0>(</span><span class=cF6>&quot;Unknown&quot;</span><span class=cF0>);
<a name="l119"></a>}
<a name="l120"></a>
<a name="l121"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>PCILookUpDevs</span><span class=cF0>()
<a name="l122"></a>{
<a name="l123"></a> </span><span class=cF9>CPCIDev</span><span class=cF0> *tmppci;
<a name="l124"></a> </span><span class=cF9>I64</span><span class=cF0> w1,w2,b,d,f,timeout=32*8*2;
<a name="l125"></a> </span><span class=cF9>CDoc</span><span class=cF0> *doc;
<a name="l126"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cFB>dev</span><span class=cF0>.pci_head.next!=&amp;</span><span class=cFB>dev</span><span class=cF0>.pci_head)
<a name="l127"></a> </span><span class=cF1>return</span><span class=cF0>;
<a name="l128"></a> doc=</span><span class=cF5>DocRead</span><span class=cF0>(</span><span class=cF3>PCI_DEV_FILE</span><span class=cF0>,</span><span class=cF3>DOCF_PLAIN_TEXT</span><span class=cF0>|</span><span class=cF3>DOCF_NO_CURSOR</span><span class=cF0>);
<a name="l129"></a> </span><span class=cF1>for</span><span class=cF0> (b=0;b&lt;</span><span class=cFB>sys_pci_busses</span><span class=cF0>;b++)
<a name="l130"></a> </span><span class=cF1>for</span><span class=cF0> (d=0;d&lt;32;d++)
<a name="l131"></a> </span><span class=cF1>for</span><span class=cF0> (f=0;f&lt;8;f++) </span><span class=cF7>{</span><span class=cF0>
<a name="l132"></a> w1=</span><span class=cF5>PCIReadU16</span><span class=cF0>(b,d,f,0);
<a name="l133"></a> </span><span class=cF1>if</span><span class=cF0> (w1!=0xFFFF) {
<a name="l134"></a> tmppci=</span><span class=cF5>ACAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CPCIDev</span><span class=cF7>)</span><span class=cF0>);
<a name="l135"></a> tmppci-&gt;bus=b;
<a name="l136"></a> tmppci-&gt;</span><span class=cFB>dev</span><span class=cF0>=d;
<a name="l137"></a> tmppci-&gt;fun=f;
<a name="l138"></a> tmppci-&gt;vendor=w1;
<a name="l139"></a> tmppci-&gt;dev_id=w2=</span><span class=cF5>PCIReadU16</span><span class=cF0>(b,d,f,2);
<a name="l140"></a> tmppci-&gt;sub_code=</span><span class=cF5>PCIReadU8</span><span class=cF0>(b,d,f,0xA);
<a name="l141"></a> tmppci-&gt;base_code=</span><span class=cF5>PCIReadU8</span><span class=cF0>(b,d,f,0xB);
<a name="l142"></a> </span><span class=cF5>PCILookUpSingle</span><span class=cF0>(doc,w1,w2,&amp;tmppci-&gt;vendor_str,&amp;tmppci-&gt;dev_id_str);
<a name="l143"></a> </span><span class=cF5>QueIns</span><span class=cF0>(tmppci,</span><span class=cFB>dev</span><span class=cF0>.pci_head.last);
<a name="l144"></a> timeout=32*8*2;
<a name="l145"></a> } </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cFB>sys_pci_busses</span><span class=cF0>==256 &amp;&amp; --timeout&lt;=0)
<a name="l146"></a> </span><span class=cF1>goto</span><span class=cF0> lud_done;
<a name="l147"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l148"></a>lud_done:
<a name="l149"></a> </span><span class=cF5>DocDel</span><span class=cF0>(doc);
<a name="l150"></a>}
<a name="l151"></a>
<a name="l152"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>PCIRep</span><span class=cF0>()
<a name="l153"></a>{</span><span class=cF2>//Report description of PCI devices.</span><span class=cF0>
<a name="l154"></a> </span><span class=cF9>CPCIDev</span><span class=cF0> *tmppci;
<a name="l155"></a> </span><span class=cF6>&quot;PCI Busses:%d\n&quot;</span><span class=cF0>,</span><span class=cFB>sys_pci_busses</span><span class=cF0>;
<a name="l156"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>FileFind</span><span class=cF7>(</span><span class=cF3>PCI_DEV_FILE</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l157"></a> </span><span class=cF6>&quot;You don't have the PCI device file.\n&quot;</span><span class=cF0>;
<a name="l158"></a> </span><span class=cF1>return</span><span class=cF0>;
<a name="l159"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l160"></a> </span><span class=cF5>PCILookUpDevs</span><span class=cF0>;
<a name="l161"></a> tmppci=</span><span class=cFB>dev</span><span class=cF0>.pci_head.next;
<a name="l162"></a> </span><span class=cF1>while</span><span class=cF0> (tmppci!=&amp;</span><span class=cFB>dev</span><span class=cF0>.pci_head) </span><span class=cF7>{</span><span class=cF0>
<a name="l163"></a> </span><span class=cF6>&quot;%02X:%02X:%01X %02X%02X $GREEN$%s $CYAN$%s$FG$\n&quot;</span><span class=cF0>,
<a name="l164"></a> tmppci-&gt;bus,tmppci-&gt;</span><span class=cFB>dev</span><span class=cF0>,tmppci-&gt;fun,
<a name="l165"></a> tmppci-&gt;base_code,tmppci-&gt;sub_code,
<a name="l166"></a> tmppci-&gt;vendor_str,tmppci-&gt;dev_id_str;
<a name="l167"></a> tmppci=tmppci-&gt;next;
<a name="l168"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l169"></a>}
<a name="l170"></a>
<a name="l171"></a>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;Info;Memory/Info&quot;</span><span class=cF0>
<a name="l172"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>MemBIOSRep</span><span class=cF0>()
<a name="l173"></a>{</span><span class=cF2>//Report the memory ranges reported by the BIOS at boot.</span><span class=cF0>
<a name="l174"></a> </span><span class=cF9>U16</span><span class=cF0> *m01=</span><span class=cFD>MEM_E801</span><span class=cF0>;
<a name="l175"></a> </span><span class=cF9>CMemE820</span><span class=cF0> *m20=</span><span class=cFD>MEM_E820</span><span class=cF0>;
<a name="l176"></a> </span><span class=cF9>CMemRange</span><span class=cF0> *tmpmr;
<a name="l177"></a> </span><span class=cF6>&quot;Standard Addresses\n&quot;</span><span class=cF0>
<a name="l178"></a> </span><span class=cF6>&quot;000A0000-000BFFFF VGA\n&quot;</span><span class=cF0>
<a name="l179"></a> </span><span class=cF6>&quot;FEE00000-FEE00FFF See $LK,\&quot;APIC\&quot;,A=\&quot;MN:LAPIC_BASE\&quot;$\n\n&quot;</span><span class=cF0>
<a name="l180"></a> </span><span class=cF6>&quot;32 Bit Device Mem\n&quot;</span><span class=cF0>;
<a name="l181"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF5>LBts</span><span class=cF7>(</span><span class=cF0>&amp;</span><span class=cFB>sys_semas</span><span class=cF0>[</span><span class=cF3>SEMA_DEV_MEM</span><span class=cF0>],0</span><span class=cF7>)</span><span class=cF0>)
<a name="l182"></a> </span><span class=cF5>Yield</span><span class=cF0>;
<a name="l183"></a> tmpmr=</span><span class=cFB>dev</span><span class=cF0>.mem32_head.next;
<a name="l184"></a> </span><span class=cF1>while</span><span class=cF0> (tmpmr!=&amp;</span><span class=cFB>dev</span><span class=cF0>.mem32_head) </span><span class=cF7>{</span><span class=cF0>
<a name="l185"></a> </span><span class=cF6>&quot;%02X:%016X-%016X\n&quot;</span><span class=cF0>,
<a name="l186"></a> tmpmr-&gt;type,tmpmr-&gt;base,tmpmr-&gt;base+tmpmr-&gt;size-1;
<a name="l187"></a> tmpmr=tmpmr-&gt;next;
<a name="l188"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l189"></a> </span><span class=cF5>LBtr</span><span class=cF0>(&amp;</span><span class=cFB>sys_semas</span><span class=cF0>[</span><span class=cF3>SEMA_DEV_MEM</span><span class=cF0>],0);
<a name="l190"></a>
<a name="l191"></a> </span><span class=cF6>&quot;\nBIOS Memory Report 15:E801\n&quot;</span><span class=cF0>
<a name="l192"></a> </span><span class=cF6>&quot;01:0000000000000000-%016X\n&quot;</span><span class=cF0>,0x100000+m01[0]&lt;&lt;10-1;
<a name="l193"></a> </span><span class=cF6>&quot;01:0000000001000000-%016X\n&quot;</span><span class=cF0>,</span><span class=cF3>SYS_16MEG_AREA_LIMIT</span><span class=cF0>+m01[1]&lt;&lt;16-1;
<a name="l194"></a>
<a name="l195"></a> </span><span class=cF1>if</span><span class=cF0> (m20-&gt;type) </span><span class=cF7>{</span><span class=cF0>
<a name="l196"></a> </span><span class=cF6>'\n'</span><span class=cF0>;
<a name="l197"></a> </span><span class=cF6>&quot;BIOS Memory Report 15:E820\n&quot;</span><span class=cF0>;
<a name="l198"></a> </span><span class=cF1>while</span><span class=cF0> (m20-&gt;type) {
<a name="l199"></a> </span><span class=cF6>&quot;%02X:%016X-%016X\n&quot;</span><span class=cF0>,m20-&gt;type,m20-&gt;base,m20-&gt;base+m20-&gt;len-1;
<a name="l200"></a> m20++;
<a name="l201"></a> }
<a name="l202"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l203"></a>}
<a name="l204"></a>
<a name="l205"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>MemPageRep</span><span class=cF0>()
<a name="l206"></a>{</span><span class=cF2>//Page Table Report.</span><span class=cF0>
<a name="l207"></a> </span><span class=cF6>&quot;MAPPED\t :%010X with &quot;</span><span class=cF0>,</span><span class=cFB>mem_mapped_space</span><span class=cF0>;
<a name="l208"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&amp;</span><span class=cFB>mem_page_size</span><span class=cF0>,30</span><span class=cF7>)</span><span class=cF0>)
<a name="l209"></a> </span><span class=cF6>&quot;$RED$1GIG$FG$ pages\n&quot;</span><span class=cF0>;
<a name="l210"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l211"></a> </span><span class=cF6>&quot;$RED$2MEG$FG$ pages\n&quot;</span><span class=cF0>;
<a name="l212"></a> </span><span class=cF6>&quot;PML2\t :%010X 2MEG :%08X\n&quot;</span><span class=cF0>,
<a name="l213"></a> *</span><span class=cFD>MEM_PML2</span><span class=cF0>(</span><span class=cF9>U64</span><span class=cF0> *),*</span><span class=cFD>MEM_2MEG_NUM</span><span class=cF0>(</span><span class=cF9>U64</span><span class=cF0> *);
<a name="l214"></a> </span><span class=cF6>&quot;PML3\t :%010X 1GIG :%08X\n&quot;</span><span class=cF0>,
<a name="l215"></a> *</span><span class=cFD>MEM_PML3</span><span class=cF0>(</span><span class=cF9>U64</span><span class=cF0> *),*</span><span class=cFD>MEM_1GIG_NUM</span><span class=cF0>(</span><span class=cF9>U64</span><span class=cF0> *);
<a name="l216"></a> </span><span class=cF6>&quot;PML4\t :%010X 512GIG:%08X\n&quot;</span><span class=cF0>,
<a name="l217"></a> *</span><span class=cFD>MEM_PML4</span><span class=cF0>(</span><span class=cF9>U64</span><span class=cF0> *),*</span><span class=cFD>MEM_512GIG_NUM</span><span class=cF0>(</span><span class=cF9>U64</span><span class=cF0> *);
<a name="l218"></a> </span><span class=cF6>&quot;FIXED_AREA:%010X\n&quot;</span><span class=cF0>,</span><span class=cF3>SYS_FIXED_AREA</span><span class=cF0>;
<a name="l219"></a> </span><span class=cF6>&quot;HEAP_BASE :%010X\nHEAP_LIMIT:%010X\n&quot;</span><span class=cF0>,</span><span class=cFB>mem_heap_base</span><span class=cF0>,</span><span class=cFB>mem_heap_limit</span><span class=cF0>;
<a name="l220"></a>}
</span></pre></body>
</html>

View File

@ -0,0 +1,173 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF0>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;DolDoc/Bin&quot;</span><span class=cF0>
<a name="l2"></a>
<a name="l3"></a></span><span class=cF9>CDocBin</span><span class=cF0> *</span><span class=cF5>DocBinFindNum</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *haystack_doc,</span><span class=cF9>I64</span><span class=cF0> needle_num)
<a name="l4"></a>{
<a name="l5"></a> </span><span class=cF9>CDocBin</span><span class=cF0> *b=haystack_doc-&gt;bin_head.next;
<a name="l6"></a> </span><span class=cF1>while</span><span class=cF0> (b!=&amp;haystack_doc-&gt;bin_head) </span><span class=cF7>{</span><span class=cF0>
<a name="l7"></a> </span><span class=cF1>if</span><span class=cF0> (b-&gt;num==needle_num)
<a name="l8"></a> </span><span class=cF1>return</span><span class=cF0> b;
<a name="l9"></a> b=b-&gt;next;
<a name="l10"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l11"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>NULL</span><span class=cF0>;
<a name="l12"></a>}
<a name="l13"></a>
<a name="l14"></a></span><span class=cF9>CDocBin</span><span class=cF0> *</span><span class=cF5>DocBinFindTag</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *haystack_doc,</span><span class=cF1>U8</span><span class=cF0> *needle_tag)
<a name="l15"></a>{
<a name="l16"></a> </span><span class=cF9>CDocBin</span><span class=cF0> *b;
<a name="l17"></a> </span><span class=cF1>if</span><span class=cF0> (needle_tag) </span><span class=cF7>{</span><span class=cF0>
<a name="l18"></a> b=haystack_doc-&gt;bin_head.next;
<a name="l19"></a> </span><span class=cF1>while</span><span class=cF0> (b!=&amp;haystack_doc-&gt;bin_head) {
<a name="l20"></a> </span><span class=cF1>if</span><span class=cF0> (b-&gt;tag &amp;&amp; !</span><span class=cF5>StrCmp</span><span class=cF7>(</span><span class=cF0>b-&gt;tag,needle_tag</span><span class=cF7>)</span><span class=cF0>)
<a name="l21"></a> </span><span class=cF1>return</span><span class=cF0> b;
<a name="l22"></a> b=b-&gt;next;
<a name="l23"></a> }
<a name="l24"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l25"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>NULL</span><span class=cF0>;
<a name="l26"></a>}
<a name="l27"></a>
<a name="l28"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DocBinsValidate</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc)
<a name="l29"></a>{
<a name="l30"></a> </span><span class=cF1>Bool</span><span class=cF0> unlock=</span><span class=cF5>DocLock</span><span class=cF0>(doc);
<a name="l31"></a> </span><span class=cF9>CDocBin</span><span class=cF0> *b,*b1;
<a name="l32"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_e,*doc_e2;
<a name="l33"></a> </span><span class=cF9>I64</span><span class=cF0> renum_num=0;
<a name="l34"></a> b=doc-&gt;bin_head.next;
<a name="l35"></a> </span><span class=cF1>while</span><span class=cF0> (b!=&amp;doc-&gt;bin_head) </span><span class=cF7>{</span><span class=cF0>
<a name="l36"></a> b-&gt;use_cnt=0;
<a name="l37"></a> b-&gt;tmp_use_cnt=0;
<a name="l38"></a> b-&gt;renum_num=-1;
<a name="l39"></a> </span><span class=cF5>Free</span><span class=cF0>(b-&gt;tag);
<a name="l40"></a> b-&gt;tag=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l41"></a> b=b-&gt;next;
<a name="l42"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l43"></a> doc_e=doc-&gt;head.next;
<a name="l44"></a> </span><span class=cF1>while</span><span class=cF0> (doc_e!=doc) </span><span class=cF7>{</span><span class=cF0>
<a name="l45"></a> doc_e2=doc_e-&gt;next;
<a name="l46"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;de_flags &amp; </span><span class=cF3>DOCEF_HAS_BIN</span><span class=cF0>) {
<a name="l47"></a> </span><span class=cF1>if</span><span class=cF0> (b=doc_e-&gt;bin_data=</span><span class=cF5>DocBinFindNum</span><span class=cF7>(</span><span class=cF0>doc,doc_e-&gt;bin_num</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l48"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;de_flags &amp; </span><span class=cF3>DOCEF_BIN_PTR_LINK</span><span class=cF0>)
<a name="l49"></a> b-&gt;tmp_use_cnt=</span><span class=cF3>I32_MAX</span><span class=cF0>;
<a name="l50"></a> </span><span class=cF1>if</span><span class=cF0> (!b-&gt;use_cnt++)
<a name="l51"></a> b-&gt;renum_num=++renum_num;
<a name="l52"></a> doc_e-&gt;bin_num=b-&gt;renum_num;
<a name="l53"></a> </span><span class=cF1>if</span><span class=cF0> (!b-&gt;tag &amp;&amp; doc_e-&gt;de_flags&amp;</span><span class=cF3>DOCEF_TAG</span><span class=cF0> &amp;&amp; doc_e-&gt;tag &amp;&amp; *doc_e-&gt;tag)
<a name="l54"></a> b-&gt;tag=</span><span class=cF5>StrNew</span><span class=cF0>(doc_e-&gt;tag,doc-&gt;mem_task);
<a name="l55"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l56"></a> </span><span class=cF5>RawPrint</span><span class=cF0>(3000,</span><span class=cF6>&quot;Bin Not Found&quot;</span><span class=cF0>);
<a name="l57"></a> doc_e-&gt;type=doc_e-&gt;de_flags=0;
<a name="l58"></a> doc_e-&gt;type_u8=</span><span class=cF3>DOCT_ERROR</span><span class=cF0>;
<a name="l59"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l60"></a> }
<a name="l61"></a> doc_e=doc_e2;
<a name="l62"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l63"></a>
<a name="l64"></a> b=doc-&gt;bin_head.next;
<a name="l65"></a> doc-&gt;cur_bin_num=1;
<a name="l66"></a> </span><span class=cF1>while</span><span class=cF0> (b!=&amp;doc-&gt;bin_head) </span><span class=cF7>{</span><span class=cF0>
<a name="l67"></a> b1=b-&gt;next;
<a name="l68"></a> </span><span class=cF1>if</span><span class=cF0> (!b-&gt;use_cnt) {
<a name="l69"></a> </span><span class=cF5>QueRem</span><span class=cF0>(b);
<a name="l70"></a> </span><span class=cF5>Free</span><span class=cF0>(b-&gt;data);
<a name="l71"></a> </span><span class=cF5>Free</span><span class=cF0>(b);
<a name="l72"></a> } </span><span class=cF1>else</span><span class=cF0> {
<a name="l73"></a> b-&gt;num=b-&gt;renum_num;
<a name="l74"></a> </span><span class=cF1>if</span><span class=cF0> (b-&gt;num&gt;=doc-&gt;cur_bin_num)
<a name="l75"></a> doc-&gt;cur_bin_num=b-&gt;num+1;
<a name="l76"></a> }
<a name="l77"></a> b=b1;
<a name="l78"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l79"></a> </span><span class=cF1>if</span><span class=cF0> (unlock)
<a name="l80"></a> </span><span class=cF5>DocUnlock</span><span class=cF0>(doc);
<a name="l81"></a>}
<a name="l82"></a>
<a name="l83"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DocBinDel</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc,</span><span class=cF9>CDocBin</span><span class=cF0> *b)
<a name="l84"></a>{
<a name="l85"></a> </span><span class=cF1>if</span><span class=cF0> (doc &amp;&amp; b &amp;&amp; b-&gt;use_cnt) </span><span class=cF7>{</span><span class=cF0>
<a name="l86"></a> b-&gt;use_cnt--;
<a name="l87"></a> </span><span class=cF1>if</span><span class=cF0> (!b-&gt;use_cnt) {
<a name="l88"></a> </span><span class=cF5>QueRem</span><span class=cF0>(b);
<a name="l89"></a> </span><span class=cF5>Free</span><span class=cF0>(b-&gt;tag);
<a name="l90"></a> </span><span class=cF5>Free</span><span class=cF0>(b-&gt;data);
<a name="l91"></a> </span><span class=cF5>Free</span><span class=cF0>(b);
<a name="l92"></a> }
<a name="l93"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l94"></a> </span><span class=cF5>RawPrint</span><span class=cF0>(3000,</span><span class=cF6>&quot;DocBinDel&quot;</span><span class=cF0>);
<a name="l95"></a>}
<a name="l96"></a>
<a name="l97"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>DocBinPtrRst</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc,</span><span class=cF9>CDocEntry</span><span class=cF0> *doc_e)
<a name="l98"></a>{
<a name="l99"></a> </span><span class=cF1>U8</span><span class=cF0> *st,*st2;
<a name="l100"></a> </span><span class=cF9>CDoc</span><span class=cF0> *doc2;
<a name="l101"></a> </span><span class=cF9>CDocBin</span><span class=cF0> *tmpb,*tmpb2;
<a name="l102"></a> </span><span class=cF9>I64</span><span class=cF0> i,bin_num=0;
<a name="l103"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;de_flags&amp;</span><span class=cF3>DOCEF_HAS_BIN</span><span class=cF0> &amp;&amp;
<a name="l104"></a> doc_e-&gt;bin_ptr_link &amp;&amp; </span><span class=cF5>StrLen</span><span class=cF7>(</span><span class=cF0>doc_e-&gt;bin_ptr_link</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l105"></a> bin_num=doc_e-&gt;bin_num;
<a name="l106"></a> st=</span><span class=cF5>StrNew</span><span class=cF0>(doc_e-&gt;bin_ptr_link);
<a name="l107"></a> st2=</span><span class=cF5>StrNew</span><span class=cF0>(st);
<a name="l108"></a> </span><span class=cF5>StrLastRem</span><span class=cF0>(st,</span><span class=cF6>&quot;,&quot;</span><span class=cF0>,st2);
<a name="l109"></a> i=</span><span class=cF5>Str2I64</span><span class=cF0>(st2);
<a name="l110"></a> </span><span class=cF1>if</span><span class=cF0> (i&gt;0||*st2) {
<a name="l111"></a> doc2=</span><span class=cF5>DocRead</span><span class=cF0>(st);
<a name="l112"></a> </span><span class=cF1>if</span><span class=cF0> (i&gt;0 &amp;&amp; </span><span class=cF7>(</span><span class=cF0>tmpb2=</span><span class=cF5>DocBinFindNum</span><span class=cF0>(doc2,i)</span><span class=cF7>)</span><span class=cF0> ||
<a name="l113"></a> i==0 &amp;&amp; </span><span class=cF7>(</span><span class=cF0>tmpb2=</span><span class=cF5>DocBinFindTag</span><span class=cF0>(doc2,st2)</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l114"></a> i=1;
<a name="l115"></a> </span><span class=cF1>if</span><span class=cF0> (bin_num&gt;0) {
<a name="l116"></a> </span><span class=cF1>if</span><span class=cF0> (tmpb=</span><span class=cF5>DocBinFindNum</span><span class=cF7>(</span><span class=cF0>doc,bin_num</span><span class=cF7>)</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l117"></a> i=tmpb-&gt;use_cnt;
<a name="l118"></a> </span><span class=cF5>DocBinDel</span><span class=cF0>(doc,tmpb);
<a name="l119"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l120"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l121"></a> bin_num=doc-&gt;cur_bin_num++;
<a name="l122"></a> tmpb=</span><span class=cF5>MAllocIdent</span><span class=cF0>(tmpb2,doc-&gt;mem_task);
<a name="l123"></a> tmpb-&gt;use_cnt=i;
<a name="l124"></a> tmpb-&gt;data=</span><span class=cF5>MAllocIdent</span><span class=cF0>(tmpb2-&gt;data,doc-&gt;mem_task);
<a name="l125"></a> tmpb-&gt;num=bin_num;
<a name="l126"></a> doc_e-&gt;bin_data=tmpb;
<a name="l127"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e-&gt;de_flags&amp;</span><span class=cF3>DOCEF_TAG</span><span class=cF0> &amp;&amp; doc_e-&gt;tag &amp;&amp; *doc_e-&gt;tag)
<a name="l128"></a> tmpb-&gt;tag=</span><span class=cF5>StrNew</span><span class=cF0>(doc_e-&gt;tag,doc-&gt;mem_task);
<a name="l129"></a> </span><span class=cF1>else</span><span class=cF0>
<a name="l130"></a> tmpb-&gt;tag=</span><span class=cF3>NULL</span><span class=cF0>;
<a name="l131"></a> </span><span class=cF5>QueIns</span><span class=cF0>(tmpb,doc-&gt;bin_head.last);
<a name="l132"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0>
<a name="l133"></a> bin_num=0;
<a name="l134"></a> </span><span class=cF5>DocDel</span><span class=cF0>(doc2);
<a name="l135"></a> } </span><span class=cF1>else</span><span class=cF0>
<a name="l136"></a> bin_num=0;
<a name="l137"></a> </span><span class=cF5>Free</span><span class=cF0>(st2);
<a name="l138"></a> </span><span class=cF5>Free</span><span class=cF0>(st);
<a name="l139"></a> doc_e-&gt;bin_num=bin_num;
<a name="l140"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l141"></a> </span><span class=cF1>return</span><span class=cF0> bin_num;
<a name="l142"></a>}
</span></pre></body>
</html>

View File

@ -0,0 +1,683 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="generator" content="TempleOS V5.03">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="/style/templeos.css">
<script src="/script/templeos.js"></script>
<style type="text/css">
.cF0{color:#000000;background-color:#ffffff;}
.cF1{color:#0000aa;background-color:#ffffff;}
.cF2{color:#00aa00;background-color:#ffffff;}
.cF3{color:#00aaaa;background-color:#ffffff;}
.cF4{color:#aa0000;background-color:#ffffff;}
.cF5{color:#aa00aa;background-color:#ffffff;}
.cF6{color:#aa5500;background-color:#ffffff;}
.cF7{color:#aaaaaa;background-color:#ffffff;}
.cF8{color:#555555;background-color:#ffffff;}
.cF9{color:#5555ff;background-color:#ffffff;}
.cFA{color:#55ff55;background-color:#ffffff;}
.cFB{color:#55ffff;background-color:#ffffff;}
.cFC{color:#ff5555;background-color:#ffffff;}
.cFD{color:#ff55ff;background-color:#ffffff;}
.cFE{color:#ffff55;background-color:#ffffff;}
.cFF{color:#ffffff;background-color:#ffffff;}
</style>
</head>
<body>
<pre id="content">
<a name="l1"></a><span class=cF0>#</span><span class=cF1>help_index</span><span class=cF0> </span><span class=cF6>&quot;DolDoc/Editor&quot;</span><span class=cF0>
<a name="l2"></a>
<a name="l3"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>EdCurU8</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc)
<a name="l4"></a>{</span><span class=cF2>//Return cur U8. See </span><a href="/Wb/Adam/DolDoc/DocCodeTools.HC.HTML#l387"><span class=cF4>EdRenumAsm</span></a><span class=cF2> for an example.</span><span class=cF0>
<a name="l5"></a> </span><span class=cF1>Bool</span><span class=cF0> unlock=</span><span class=cF5>DocLock</span><span class=cF0>(doc);
<a name="l6"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_ce=doc-&gt;cur_entry;
<a name="l7"></a> </span><span class=cF9>I64</span><span class=cF0> res=-1;
<a name="l8"></a> </span><span class=cF1>if</span><span class=cF0> (doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_TEXT</span><span class=cF0> &amp;&amp;
<a name="l9"></a> doc_ce-&gt;min_col&lt;=doc-&gt;cur_col&lt;doc_ce-&gt;max_col)
<a name="l10"></a> res=doc_ce-&gt;tag[doc-&gt;cur_col];
<a name="l11"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_TAB</span><span class=cF0>)
<a name="l12"></a> res=</span><span class=cF6>'\t'</span><span class=cF0>;
<a name="l13"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_NEW_LINE</span><span class=cF0> ||
<a name="l14"></a> doc_ce-&gt;type_u8==</span><span class=cF3>DOCT_SOFT_NEW_LINE</span><span class=cF0>)
<a name="l15"></a> res=</span><span class=cF6>'\n'</span><span class=cF0>;
<a name="l16"></a> </span><span class=cF1>if</span><span class=cF0> (unlock)
<a name="l17"></a> </span><span class=cF5>DocUnlock</span><span class=cF0>(doc);
<a name="l18"></a> </span><span class=cF1>return</span><span class=cF0> res;
<a name="l19"></a>}
<a name="l20"></a>
<a name="l21"></a></span><span class=cF1>public</span><span class=cF0> </span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>EdCursorLeft</span><span class=cF0>(</span><span class=cF9>CDoc</span><span class=cF0> *doc,</span><span class=cF9>I64</span><span class=cF0> sc=</span><span class=cF3>I64_MIN</span><span class=cF0>)
<a name="l22"></a>{</span><span class=cF2>//Move cursor left. Might need a call to </span><a href="/Wb/Adam/DolDoc/DocRecalc.HC.HTML#l256"><span class=cF4>DocRecalc</span></a><span class=cF2>().</span><span class=cF0>
<a name="l23"></a></span><span class=cF2>//See </span><a href="/Wb/Adam/DolDoc/DocCodeTools.HC.HTML#l387"><span class=cF4>EdRenumAsm</span></a><span class=cF2> for an example.</span><span class=cF0>
<a name="l24"></a> </span><span class=cF1>U8</span><span class=cF0> *dst;
<a name="l25"></a> </span><span class=cF1>Bool</span><span class=cF0> unlock=</span><span class=cF5>DocLock</span><span class=cF0>(doc);
<a name="l26"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_ce=doc-&gt;cur_entry,*original_ce=doc_ce,*doc_ne;
<a name="l27"></a> </span><span class=cF9>I64</span><span class=cF0> cc=doc-&gt;cur_col,y=doc_ce-&gt;y;
<a name="l28"></a> </span><span class=cF1>if</span><span class=cF0> (sc!=</span><span class=cF3>I64_MIN</span><span class=cF0>) sc=sc.u32[0];
<a name="l29"></a> </span><span class=cF1>if</span><span class=cF0> (sc&gt;=0 &amp;&amp; sc&amp;</span><span class=cF3>SCF_CTRL</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
<a name="l30"></a> </span><span class=cF1>while</span><span class=cF0> (doc_ce-&gt;last!=doc &amp;&amp; </span><span class=cF7>(</span><span class=cF0>doc_ce-&gt;last-&gt;y==y ||
<a name="l31"></a> doc_ce-&gt;de_flags &amp; (</span><span class=cF3>DOCEF_SKIP</span><span class=cF0>|</span><span class=cF3>DOCEF_FILTER_SKIP</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0>)
<a name="l32"></a> doc_ce=doc_ce-&gt;last; </span><span class=cF2>//TODO: sel? recurse?</span><span class=cF0>
<a name="l33"></a> cc=doc_ce-&gt;min_col;
<a name="l34"></a> </span><span class=cF7>}</span><span class=cF0> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF7>{</span><span class=cF0>
<a name="l35"></a> </span><span class=cF1>if</span><span class=cF0> (cc&gt;doc_ce-&gt;min_col) {
<a name="l36"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>IsEditableText</span><span class=cF7>(</span><span class=cF0>doc_ce</span><span class=cF7>)</span><span class=cF0> &amp;&amp; cc&lt;doc_ce-&gt;max_col) </span><span class=cF7>{</span><span class=cF0>
<a name="l37"></a> dst=doc_ce-&gt;tag+cc;
<a name="l38"></a> doc_ne=</span><span class=cF5>DocEntryNewTag</span><span class=cF0>(doc,doc_ce,dst);
<a name="l39"></a> *dst=0;
<a name="l40"></a> doc_ce-&gt;max_col=cc;
<a name="l41"></a> </span><span class=cF5>QueIns</span><span class=cF0>(doc_ne,doc_ce);
<a name="l42"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l43"></a> cc--;
<a name="l44"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>IsEditableText</span><span class=cF7>(</span><span class=cF0>doc_ce</span><span class=cF7>)</span><span class=cF0> &amp;&amp; cc&gt;doc_ce-&gt;min_col) </span><span class=cF7>{</span><span class=cF0>
<a name="l45"></a> dst=doc_ce-&gt;tag+cc;
<a name="l46"></a> doc_ne=</span><span class=cF5>DocEntryNewTag</span><span class=cF0>(doc,doc_ce,dst);
<a name="l47"></a> *dst=0;
<a name="l48"></a> doc_ce-&gt;max_col=cc;
<a name="l49"></a> </span><span class=cF5>QueIns</span><span class=cF0>(doc_ne,doc_ce);