mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2024-12-31 17:56:30 +00:00
1b75d91002
Add arg to SATARep to specify drive types to show. Add checks in AHCIPortInit to verify port signatures, add helper method to get signatures from port.
155 lines
15 KiB
HTML
Executable file
155 lines
15 KiB
HTML
Executable file
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html;charset=US-ASCII">
|
|
<meta name="generator" content="ZealOS V0.13">
|
|
<style type="text/css">
|
|
body {background-color:#fef1f0;}
|
|
.cF0{color:#000000;background-color:#fef1f0;}
|
|
.cF1{color:#0148a4;background-color:#fef1f0;}
|
|
.cF2{color:#3b7901;background-color:#fef1f0;}
|
|
.cF3{color:#057c7e;background-color:#fef1f0;}
|
|
.cF4{color:#bb2020;background-color:#fef1f0;}
|
|
.cF5{color:#9e42ae;background-color:#fef1f0;}
|
|
.cF6{color:#b57901;background-color:#fef1f0;}
|
|
.cF7{color:#b2b6af;background-color:#fef1f0;}
|
|
.cF8{color:#555753;background-color:#fef1f0;}
|
|
.cF9{color:#678fbb;background-color:#fef1f0;}
|
|
.cFA{color:#82bc49;background-color:#fef1f0;}
|
|
.cFB{color:#0097a2;background-color:#fef1f0;}
|
|
.cFC{color:#e26a6a;background-color:#fef1f0;}
|
|
.cFD{color:#c671bc;background-color:#fef1f0;}
|
|
.cFE{color:#c7ab00;background-color:#fef1f0;}
|
|
.cFF{color:#fef1f0;background-color:#fef1f0;}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<pre style="font-family:monospace;font-size:12pt">
|
|
<a name="l1"></a><span class=cF2>//See </span><span class=cF4><u>TextBase Layer</u></span><span class=cF2>.</span><span class=cF0>
|
|
<a name="l2"></a>
|
|
<a name="l3"></a>#</span><span class=cF1>define</span><span class=cF0> ATTR (</span><span class=cF3>BLACK</span><span class=cF0> << </span><span class=cFE>12</span><span class=cF0> + </span><span class=cF3>WHITE</span><span class=cF0> << </span><span class=cFE>8</span><span class=cF0>)
|
|
<a name="l4"></a>
|
|
<a name="l5"></a></span><span class=cF9>U32</span><span class=cF0> </span><span class=cFB>text</span><span class=cF0>[</span><span class=cF3>TEXT_ROWS</span><span class=cF0>][</span><span class=cF3>TEXT_COLS</span><span class=cF0>];
|
|
<a name="l6"></a>
|
|
<a name="l7"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>DrawIt</span><span class=cF0>(</span><span class=cF9>CTask</span><span class=cF0> *task, </span><span class=cF9>CDC</span><span class=cF0> *)
|
|
<a name="l8"></a>{ </span><span class=cF2>//</span><a href="https://zeal-operating-system.github.io/ZealOS/System/Gr/GrGlobals.CC.html#l3"><span class=cF4>gr.text_base</span></a><span class=cF2> gets clear 60fps, so we must use our own permanent text array.</span><span class=cF0>
|
|
<a name="l9"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(</span><span class=cFB>gr</span><span class=cF0>.text_base + </span><span class=cF3>TEXT_COLS</span><span class=cF0>, </span><span class=cFB>text</span><span class=cF0>, </span><span class=cF7>(</span><span class=cF3>TEXT_ROWS</span><span class=cF0> - </span><span class=cFE>1</span><span class=cF7>)</span><span class=cF0> * </span><span class=cF3>TEXT_COLS</span><span class=cF0> * </span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>U32</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l10"></a>
|
|
<a name="l11"></a> </span><span class=cF2>// You can copy it this way, if you like:</span><span class=cF0>
|
|
<a name="l12"></a> </span><span class=cF2>//</span><span class=cF0> </span><span class=cF2>I64 i, j;</span><span class=cF0>
|
|
<a name="l13"></a> </span><span class=cF2>//</span><span class=cF0> </span><span class=cF2>for (j = 0; j < TEXT_ROWS; j++)</span><span class=cF0>
|
|
<a name="l14"></a> </span><span class=cF2>//</span><span class=cF0> </span><span class=cF2>for (i = 0; i < TEXT_COLS; i++)</span><span class=cF0>
|
|
<a name="l15"></a> </span><span class=cF2>//</span><span class=cF0> </span><span class=cF2> TextChar(task,, i, j, text[j][i]);</span><span class=cF0>
|
|
<a name="l16"></a>
|
|
<a name="l17"></a> </span><span class=cF5>TextPrint</span><span class=cF0>(task, </span><span class=cFE>0</span><span class=cF0>, </span><span class=cFE>0</span><span class=cF0>, ATTR >> </span><span class=cFE>8</span><span class=cF0>, </span><span class=cF6>"Draw a maze with left bttn."</span><span class=cF0>);
|
|
<a name="l18"></a> </span><span class=cF5>TextPrint</span><span class=cF0>(task, </span><span class=cFE>0</span><span class=cF0>, </span><span class=cFE>1</span><span class=cF0>, ATTR >> </span><span class=cFE>8</span><span class=cF0>, </span><span class=cF6>"Solve maze starting at right click."</span><span class=cF0>);
|
|
<a name="l19"></a>}
|
|
<a name="l20"></a>
|
|
<a name="l21"></a>#</span><span class=cF1>define</span><span class=cF0> STACK_SIZE </span><span class=cFE>2048</span><span class=cF0>
|
|
<a name="l22"></a></span><span class=cF2>//We would put these as local vars</span><span class=cF0>
|
|
<a name="l23"></a></span><span class=cF2>//in SolveMaze() but the system stack size</span><span class=cF0>
|
|
<a name="l24"></a></span><span class=cF2>//is limited, so it's a bad habit. The heap</span><span class=cF0>
|
|
<a name="l25"></a></span><span class=cF2>//is the normal ZealOS technique, but</span><span class=cF0>
|
|
<a name="l26"></a></span><span class=cF2>//it's a pain in this case.</span><span class=cF0>
|
|
<a name="l27"></a></span><span class=cF9>I64</span><span class=cF0> stack_ptr, stack_x [STACK_SIZE],
|
|
<a name="l28"></a> stack_y [STACK_SIZE],
|
|
<a name="l29"></a> stack_dir[STACK_SIZE];
|
|
<a name="l30"></a>
|
|
<a name="l31"></a></span><span class=cF2>//Four directions:</span><span class=cF0>
|
|
<a name="l32"></a></span><span class=cF2>//</span><span class=cF0> </span><span class=cF2>0=Up, 1=right,2=down,3=left</span><span class=cF0>
|
|
<a name="l33"></a></span><span class=cF9>I64</span><span class=cF0> dir_x[</span><span class=cFE>4</span><span class=cF0>] = { </span><span class=cFE>0</span><span class=cF0>, +</span><span class=cFE>1</span><span class=cF0>, </span><span class=cFE>0</span><span class=cF0>, -</span><span class=cFE>1</span><span class=cF0>}, </span><span class=cF2>// Could use </span><a href="https://zeal-operating-system.github.io/ZealOS/System/Gr/GrMath.CC.html#l5"><span class=cF4>gr_x_offsets2</span></a><span class=cF2>,</span><a href="https://zeal-operating-system.github.io/ZealOS/System/Gr/GrMath.CC.html#l6"><span class=cF4>gr_y_offsets2</span></a><span class=cF0>
|
|
<a name="l34"></a> dir_y[</span><span class=cFE>4</span><span class=cF0>] = {+</span><span class=cFE>1</span><span class=cF0>, </span><span class=cFE>0</span><span class=cF0>, -</span><span class=cFE>1</span><span class=cF0>, </span><span class=cFE>0</span><span class=cF0>};
|
|
<a name="l35"></a>
|
|
<a name="l36"></a></span><span class=cF1>U0</span><span class=cF0> SolveMaze(</span><span class=cF9>I64</span><span class=cF0> x, </span><span class=cF9>I64</span><span class=cF0> y)
|
|
<a name="l37"></a>{
|
|
<a name="l38"></a> </span><span class=cF9>I64</span><span class=cF0> dir = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l39"></a>
|
|
<a name="l40"></a> stack_ptr = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l41"></a> stack_x[stack_ptr] = x;
|
|
<a name="l42"></a> stack_y[stack_ptr] = y;
|
|
<a name="l43"></a> stack_dir[stack_ptr++] = dir;
|
|
<a name="l44"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>)
|
|
<a name="l45"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l46"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cFE>0</span><span class=cF0> <= x < </span><span class=cF5>MinI64</span><span class=cF0>(</span><span class=cF5>Fs</span><span class=cF0>->win_width, </span><span class=cF3>TEXT_COLS</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0> ||
|
|
<a name="l47"></a> !</span><span class=cF7>(</span><span class=cFE>0</span><span class=cF0> <= y < </span><span class=cF5>MinI64</span><span class=cF0>(</span><span class=cF5>Fs</span><span class=cF0>->win_height, </span><span class=cF3>TEXT_ROWS</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0> )
|
|
<a name="l48"></a> {
|
|
<a name="l49"></a> </span><span class=cF5>Beep</span><span class=cF0>;
|
|
<a name="l50"></a> </span><span class=cF5>Beep</span><span class=cF0>;
|
|
<a name="l51"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l52"></a> }
|
|
<a name="l53"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cFB>text</span><span class=cF0>[y][x].u8[</span><span class=cFE>0</span><span class=cF0>])
|
|
<a name="l54"></a> </span><span class=cFB>text</span><span class=cF0>[y][x] = </span><span class=cF6>'.'</span><span class=cF0> + ATTR;
|
|
<a name="l55"></a> x += dir_x[dir];
|
|
<a name="l56"></a> y += dir_y[dir];
|
|
<a name="l57"></a></span><span class=cF2>//u8.[0] is the ASCII</span><span class=cF0>
|
|
<a name="l58"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cFB>text</span><span class=cF0>[y][x].u8[</span><span class=cFE>0</span><span class=cF0>])
|
|
<a name="l59"></a> {
|
|
<a name="l60"></a> x -= dir_x[dir];
|
|
<a name="l61"></a> y -= dir_y[dir];
|
|
<a name="l62"></a> </span><span class=cF1>if</span><span class=cF0> (++dir == </span><span class=cFE>4</span><span class=cF0>)
|
|
<a name="l63"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l64"></a> </span><span class=cF1>if</span><span class=cF0> (--stack_ptr < </span><span class=cFE>0</span><span class=cF0>)
|
|
<a name="l65"></a> </span><span class=cF1>return</span><span class=cF0>;
|
|
<a name="l66"></a> x = stack_x[stack_ptr];
|
|
<a name="l67"></a> y = stack_y[stack_ptr];
|
|
<a name="l68"></a> dir = stack_dir[stack_ptr];
|
|
<a name="l69"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l70"></a> }
|
|
<a name="l71"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l72"></a> {
|
|
<a name="l73"></a> dir = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l74"></a> stack_x[stack_ptr] = x;
|
|
<a name="l75"></a> stack_y[stack_ptr] = y;
|
|
<a name="l76"></a> stack_dir[stack_ptr++] = dir;
|
|
<a name="l77"></a> </span><span class=cF1>if</span><span class=cF0> (stack_ptr == STACK_SIZE)
|
|
<a name="l78"></a> </span><span class=cF1>return</span><span class=cF0>;
|
|
<a name="l79"></a> </span><span class=cF5>Sleep</span><span class=cF0>(</span><span class=cFE>100</span><span class=cF0>);
|
|
<a name="l80"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>CharScan</span><span class=cF0>)
|
|
<a name="l81"></a> </span><span class=cF5>throw</span><span class=cF0>;
|
|
<a name="l82"></a> }
|
|
<a name="l83"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l84"></a>}
|
|
<a name="l85"></a>
|
|
<a name="l86"></a></span><span class=cF1>U0</span><span class=cF0> Maze()
|
|
<a name="l87"></a>{
|
|
<a name="l88"></a> </span><span class=cF9>I64</span><span class=cF0> ch, x, y;
|
|
<a name="l89"></a>
|
|
<a name="l90"></a> </span><span class=cF5>SettingsPush</span><span class=cF0>; </span><span class=cF2>//See </span><a href="https://zeal-operating-system.github.io/ZealOS/System/TaskSettings.CC.html#l3"><span class=cF4>SettingsPush</span></a><span class=cF0>
|
|
<a name="l91"></a> </span><span class=cF5>AutoComplete</span><span class=cF0>;
|
|
<a name="l92"></a> </span><span class=cF5>WinBorder</span><span class=cF0>;
|
|
<a name="l93"></a> </span><span class=cF5>WinMax</span><span class=cF0>;
|
|
<a name="l94"></a> </span><span class=cF5>DocCursor</span><span class=cF0>;
|
|
<a name="l95"></a> </span><span class=cF5>DocClear</span><span class=cF0>;
|
|
<a name="l96"></a> </span><span class=cF5>Fs</span><span class=cF0>->draw_it = &</span><span class=cF5>DrawIt</span><span class=cF0>;
|
|
<a name="l97"></a> </span><span class=cF5>Fs</span><span class=cF0>->win_inhibit = </span><span class=cF3>WIG_TASK_DEFAULT</span><span class=cF0> - </span><span class=cF3>WIF_SELF_FOCUS</span><span class=cF0> - </span><span class=cF3>WIF_SELF_BORDER</span><span class=cF0>;
|
|
<a name="l98"></a>
|
|
<a name="l99"></a> </span><span class=cF1>try</span><span class=cF0>
|
|
<a name="l100"></a> </span><span class=cF1>do</span><span class=cF0>
|
|
<a name="l101"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l102"></a> </span><span class=cF5>MemSet</span><span class=cF0>(</span><span class=cFB>text</span><span class=cF0>, </span><span class=cFE>0</span><span class=cF0>, </span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cFB>text</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l103"></a> </span><span class=cF1>while</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>ch = </span><span class=cF5>CharScan</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l104"></a> {
|
|
<a name="l105"></a> x = </span><span class=cFB>mouse</span><span class=cF0>.pos_text.x - </span><span class=cF5>Fs</span><span class=cF0>->win_left - </span><span class=cF5>Fs</span><span class=cF0>->scroll_x / </span><span class=cF3>FONT_WIDTH</span><span class=cF0>;
|
|
<a name="l106"></a> y = </span><span class=cFB>mouse</span><span class=cF0>.pos_text.y - </span><span class=cF5>Fs</span><span class=cF0>->win_top - </span><span class=cF5>Fs</span><span class=cF0>->scroll_y / </span><span class=cF3>FONT_HEIGHT</span><span class=cF0>;
|
|
<a name="l107"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cFB>mouse</span><span class=cF0>.lb && !</span><span class=cFB>winmgr</span><span class=cF0>.grab_scroll)
|
|
<a name="l108"></a> </span><span class=cFB>text</span><span class=cF0>[y][x] = </span><span class=cF3>CH_SPACE</span><span class=cF0> + </span><span class=cF3>ATTRF_INVERT</span><span class=cF0> + ATTR;
|
|
<a name="l109"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cFB>mouse</span><span class=cF0>.rb && !</span><span class=cFB>winmgr</span><span class=cF0>.grab_scroll)
|
|
<a name="l110"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l111"></a> </span><span class=cFB>text</span><span class=cF0>[y][x] = </span><span class=cF6>'*'</span><span class=cF0>+ATTR;
|
|
<a name="l112"></a> SolveMaze(x, y);
|
|
<a name="l113"></a> ch = </span><span class=cF5>CharGet</span><span class=cF0>;
|
|
<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>Refresh</span><span class=cF0>;
|
|
<a name="l117"></a> }
|
|
<a name="l118"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l119"></a> </span><span class=cF1>while</span><span class=cF0> (ch != </span><span class=cF3>CH_SHIFT_ESC</span><span class=cF0> && ch != </span><span class=cF3>CH_ESC</span><span class=cF0>);
|
|
<a name="l120"></a>
|
|
<a name="l121"></a> </span><span class=cF1>catch</span><span class=cF0>
|
|
<a name="l122"></a> </span><span class=cF5>PutExcept</span><span class=cF0>;
|
|
<a name="l123"></a> </span><span class=cF5>SettingsPop</span><span class=cF0>;
|
|
<a name="l124"></a>}
|
|
<a name="l125"></a>
|
|
<a name="l126"></a>Maze;
|
|
</span></pre></body>
|
|
</html>
|