5 <title>Mu -
516read-line.mu
</title>
6 <meta name=
"Generator" content=
"Vim/8.2">
7 <meta name=
"plugin-version" content=
"vim8.1_v2">
8 <meta name=
"syntax" content=
"none">
9 <meta name=
"settings" content=
"number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
10 <meta name=
"colorscheme" content=
"minimal-light">
13 pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
14 body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
16 * { font-size:12pt; font-size: 1em; }
17 .PreProc { color: #c000c0; }
18 .Special { color: #ff6060; }
20 .Constant { color: #008787; }
21 .Delimiter { color: #c000c0; }
22 .muFunction { color: #af5f00; text-decoration: underline; }
23 .muComment { color: #005faf; }
30 /* function to open any folds containing a jumped-to line before jumping to it */
34 lineNum
= window
.location
.hash
;
35 lineNum
= lineNum
.substr(1); /* strip off '#' */
37 if (lineNum
.indexOf('L') == -1) {
38 lineNum
= 'L'+lineNum
;
40 var lineElem
= document
.getElementById(lineNum
);
41 /* Always jump to new location even if the line was hidden inside a fold, or
42 * we corrected the raw number to a line ID.
45 lineElem
.scrollIntoView(true);
49 if ('onhashchange' in window
) {
50 window
.onhashchange
= JumpToLine
;
56 <body onload='JumpToLine();'
>
57 <a href='https://github.com/akkartik/mu/blob/main/
516read-line.mu'
>https://github.com/akkartik/mu/blob/main/
516read-line.mu
</a>
58 <pre id='vimCodeElement'
>
59 <span id=
"L1" class=
"LineNr"> 1 </span><span class=
"muComment"># read line from keyboard into stream while also echoing to screen
</span>
60 <span id=
"L2" class=
"LineNr"> 2 </span><span class=
"muComment"># abort on stream overflow
</span>
61 <span id=
"L3" class=
"LineNr"> 3 </span><span class=
"PreProc">fn
</span> <span class=
"muFunction"><a href='
516read-line.mu.html#L3'
>read-line-from-keyboard
</a></span> keyboard: (addr keyboard), out: (addr stream byte),
<a href='
500fake-screen.mu.html#L16'
>screen
</a>: (addr
<a href='
500fake-screen.mu.html#L16'
>screen
</a>), fg: int, bg: int
<span class=
"Delimiter">{
</span>
62 <span id=
"L4" class=
"LineNr"> 4 </span> <a href='
106stream.subx.html#L20'
>clear-stream
</a> out
63 <span id=
"L5" class=
"LineNr"> 5 </span> $read-line-from-keyboard:
<span class=
"PreProc">loop
</span>:
<span class=
"Delimiter">{
</span>
64 <span id=
"L6" class=
"LineNr"> 6 </span> <a href='
500fake-screen.mu.html#L316'
>draw-cursor
</a> <a href='
500fake-screen.mu.html#L16'
>screen
</a>,
<span class=
"Constant">0x20</span>/space
65 <span id=
"L7" class=
"LineNr"> 7 </span> <span class=
"PreProc">var
</span> key/eax: byte
<span class=
"Special"><-
</span> <a href='
102keyboard.subx.html#L21'
>read-key
</a> keyboard
66 <span id=
"L8" class=
"LineNr"> 8 </span> compare key,
<span class=
"Constant">0xa</span>/newline
67 <span id=
"L9" class=
"LineNr"> 9 </span> <span class=
"PreProc">break-if-=
</span>
68 <span id=
"L10" class=
"LineNr">10 </span> compare key,
<span class=
"Constant">0</span>
69 <span id=
"L11" class=
"LineNr">11 </span> <span class=
"PreProc">loop-if-=
</span>
70 <span id=
"L12" class=
"LineNr">12 </span> compare key,
<span class=
"Constant">8</span>/backspace
71 <span id=
"L13" class=
"LineNr">13 </span> <span class=
"Delimiter">{
</span>
72 <span id=
"L14" class=
"LineNr">14 </span> <span class=
"PreProc">break-if-!=
</span>
73 <span id=
"L15" class=
"LineNr">15 </span> <a href='
115write-byte.subx.html#L79'
>undo-append-byte
</a> out
74 <span id=
"L16" class=
"LineNr">16 </span> <a href='
501draw-text.mu.html#L84'
>draw-code-point-at-cursor-over-full-screen
</a> <a href='
500fake-screen.mu.html#L16'
>screen
</a>,
<span class=
"Constant">0x20</span>/space, fg
<span class=
"Constant">0</span>/bg
<span class=
"muComment"># clear cursor
</span>
75 <span id=
"L17" class=
"LineNr">17 </span> <a href='
501draw-text.mu.html#L3'
>move-cursor-left
</a> <a href='
500fake-screen.mu.html#L16'
>screen
</a>
76 <span id=
"L18" class=
"LineNr">18 </span> <a href='
501draw-text.mu.html#L3'
>move-cursor-left
</a> <a href='
500fake-screen.mu.html#L16'
>screen
</a>
77 <span id=
"L19" class=
"LineNr">19 </span> <a href='
501draw-text.mu.html#L84'
>draw-code-point-at-cursor-over-full-screen
</a> <a href='
500fake-screen.mu.html#L16'
>screen
</a>,
<span class=
"Constant">0x20</span>/space, fg
<span class=
"Constant">0</span>/bg
<span class=
"muComment"># clear old cursor
</span>
78 <span id=
"L20" class=
"LineNr">20 </span> <a href='
501draw-text.mu.html#L3'
>move-cursor-left
</a> <a href='
500fake-screen.mu.html#L16'
>screen
</a>
79 <span id=
"L21" class=
"LineNr">21 </span> <span class=
"PreProc">loop
</span> $read-line-from-keyboard:
<span class=
"PreProc">loop
</span>
80 <span id=
"L22" class=
"LineNr">22 </span> <span class=
"Delimiter">}
</span>
81 <span id=
"L23" class=
"LineNr">23 </span> <span class=
"PreProc">var
</span> key2/eax: int
<span class=
"Special"><-
</span> copy key
82 <span id=
"L24" class=
"LineNr">24 </span> <a href='
115write-byte.subx.html#L12'
>append-byte
</a> out, key2
83 <span id=
"L25" class=
"LineNr">25 </span> <span class=
"PreProc">var
</span> c/eax: code-point
<span class=
"Special"><-
</span> copy key2
84 <span id=
"L26" class=
"LineNr">26 </span> <a href='
501draw-text.mu.html#L84'
>draw-code-point-at-cursor-over-full-screen
</a> <a href='
500fake-screen.mu.html#L16'
>screen
</a>, c, fg bg
85 <span id=
"L27" class=
"LineNr">27 </span> <span class=
"PreProc">loop
</span>
86 <span id=
"L28" class=
"LineNr">28 </span> <span class=
"Delimiter">}
</span>
87 <span id=
"L29" class=
"LineNr">29 </span> <span class=
"muComment"># clear cursor
</span>
88 <span id=
"L30" class=
"LineNr">30 </span> <a href='
501draw-text.mu.html#L84'
>draw-code-point-at-cursor-over-full-screen
</a> <a href='
500fake-screen.mu.html#L16'
>screen
</a>,
<span class=
"Constant">0x20</span>/space, fg bg
89 <span id=
"L31" class=
"LineNr">31 </span><span class=
"Delimiter">}
</span>
93 <!-- vim: set foldmethod=manual : -->