about summary refs log tree commit diff stats
path: root/mu-init.subx
blob: 984e4ff7a3a1d39bf187429e86fbffa8a7902139 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# Initialize the minimal runtime for Mu programs.
#
# See translate_mu for how this file is used.
#
# Mu programs start at a function called 'main' with this signature:
#   fn main args: (addr array (addr array byte)) -> exit-status/ebx: int
# If your program doesn't need commandline arguments you can drop it:
#   fn main -> exit-status/ebx: int
#
# Notice that the output must be in ebx, so that the exit() syscall can pick
# it up.

== code

Entry:
    # we don't use ebp in Entry; just initialize it
    bd/copy-to-ebp 0/imm32
    # - save argc and argv
    # var argc-and-argv/esi
    89/<- %esi 4/r32/esp
$Entry:initialize-heap:
    # - initialize the heap
    (new-segment *Heap-size Heap)
$Entry:initialize-args:
    # - convert argv from null-terminated 'kernel' strings to length-prefixed Mu strings
    # var argc/edx: int
    8b/-> *esi 2/r32/edx
    # argc is in words; convert it to bytes
    c1/shift 4/subop/left %edx 2/imm8
    # var tmp/ebx: handle
    68/push 0/imm32
    68/push 0/imm32
    89/<- %ebx 4/r32/esp
    # var args/edi: (addr array (addr array byte))
    (allocate-array Heap %edx %ebx)
    (lookup *ebx *(ebx+4))  # => eax
    89/<- %edi 0/r32/eax
    # var curr/ecx: (addr kernel-string) = argv
    8d/copy-address *(esi+4) 1/r32/ecx
    # var max/edx: (addr kernel-string) = argv+4+argc
    8d/copy-address *(ecx+edx) 2/r32/edx
    # var dest/esi: (addr (addr array byte)) = args+4
    8d/copy-address *(edi+4) 6/r32/esi
    {
      # if (curr >= max) break
      39/compare %ecx 2/r32/edx
      73/jump-if-addr>= break/disp8
      # *dest = kernel-string-to-string(*curr)
      (kernel-string-to-string Heap *ecx %ebx)
      (lookup *ebx *(ebx+4))  # => eax
      89/<- *esi 0/r32/eax
      # curr += 4
      81 0/subop/add %ecx 4/imm32
      # dest += 4
      81 0/subop/add %esi 4/imm32
      #
      eb/jump loop/disp8
    }
    # - run Mu program
    (main %edi)  # => ebx
    # - exit
    (syscall_exit)
do */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><title>Python: module ranger.gui.widgets.filelist</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head><body bgcolor="#f0f0f8">

<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="heading">
<tr bgcolor="#7799ee">
<td valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong><a href="ranger.html"><font color="#ffffff">ranger</font></a>.<a href="ranger.gui.html"><font color="#ffffff">gui</font></a>.<a href="ranger.gui.widgets.html"><font color="#ffffff">widgets</font></a>.filelist</strong></big></big></font></td
><td align=right valign=bottom
><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:/home/hut/work/ranger/ranger/gui/widgets/filelist.py">/home/hut/work/ranger/ranger/gui/widgets/filelist.py</a></font></td></tr></table>
    <p><tt>The&nbsp;<a href="#FileList">FileList</a>&nbsp;widget&nbsp;displays&nbsp;the&nbsp;contents&nbsp;of&nbsp;a&nbsp;directory&nbsp;or&nbsp;file.</tt></p>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ee77aa">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Classes</strong></big></font></td></tr>
    
<tr><td bgcolor="#ee77aa"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><dl>
<dt><font face="helvetica, arial"><a href="ranger.gui.widgets.html#Widget">ranger.gui.widgets.Widget</a>(<a href="ranger.gui.displayable.html#Displayable">ranger.gui.displayable.Displayable</a>)
</font></dt><dd>
<dl>
<dt><font face="helvetica, arial"><a href="ranger.gui.widgets.filelist.html#FileList">FileList</a>
</font></dt></dl>
</dd>
</dl>
 <p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#000000" face="helvetica, arial"><a name="FileList">class <strong>FileList</strong></a>(<a href="ranger.gui.widgets.html#Widget">ranger.gui.widgets.Widget</a>)</font></td></tr>
    
<tr><td bgcolor="#ffc8d8"><tt>&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><dl><dt>Method resolution order:</dt>
<dd><a href="ranger.gui.widgets.filelist.html#FileList">FileList</a></dd>
<dd><a href="ranger.gui.widgets.html#Widget">ranger.gui.widgets.Widget</a></dd>
<dd><a href="ranger.gui.displayable.html#Displayable">ranger.gui.displayable.Displayable</a></dd>
<dd><a href="ranger.shared.html#EnvironmentAware">ranger.shared.EnvironmentAware</a></dd>
<dd><a href="ranger.shared.html#FileManagerAware">ranger.shared.FileManagerAware</a></dd>
<dd><a href="ranger.shared.html#Awareness">ranger.shared.Awareness</a></dd>
<dd><a href="ranger.shared.settings.html#SettingsAware">ranger.shared.settings.SettingsAware</a></dd>
<dd><a href="builtins.html#object">builtins.object</a></dd>
</dl>
<hr>
Methods defined here:<br>
<dl><dt><a name="FileList-__init__"><strong>__init__</strong></a>(self, win, level)</dt></dl>

<dl><dt><a name="FileList-click"><strong>click</strong></a>(self, event)</dt><dd><tt>Handle&nbsp;a&nbsp;MouseEvent</tt></dd></dl>

<dl><dt><a name="FileList-draw"><strong>draw</strong></a>(self)</dt><dd><tt>Call&nbsp;either&nbsp;<a href="#FileList-draw_file">draw_file</a>()&nbsp;or&nbsp;<a href="#FileList-draw_directory">draw_directory</a>()</tt></dd></dl>

<dl><dt><a name="FileList-draw_directory"><strong>draw_directory</strong></a>(self)</dt><dd><tt>Draw&nbsp;the&nbsp;contents&nbsp;of&nbsp;a&nbsp;directory</tt></dd></dl>

<dl><dt><a name="FileList-draw_file"><strong>draw_file</strong></a>(self)</dt><dd><tt>Draw&nbsp;a&nbsp;preview&nbsp;of&nbsp;the&nbsp;file,&nbsp;if&nbsp;the&nbsp;settings&nbsp;allow&nbsp;it</tt></dd></dl>

<dl><dt><a name="FileList-finalize"><strong>finalize</strong></a>(self)</dt></dl>

<dl><dt><a name="FileList-get_scroll_begin"><strong>get_scroll_begin</strong></a>(self)</dt><dd><tt>Determines&nbsp;scroll_begin&nbsp;(the&nbsp;position&nbsp;of&nbsp;the&nbsp;first&nbsp;displayed&nbsp;file)</tt></dd></dl>

<dl><dt><a name="FileList-has_preview"><strong>has_preview</strong></a>(self)</dt></dl>

<dl><dt><a name="FileList-poke"><strong>poke</strong></a>(self)</dt></dl>

<dl><dt><a name="FileList-scroll"><strong>scroll</strong></a>(self, relative)</dt><dd><tt>scroll&nbsp;by&nbsp;n&nbsp;lines</tt></dd></dl>

<dl><dt><a name="FileList-set_scroll_begin"><strong>set_scroll_begin</strong></a>(self)</dt><dd><tt>Updates&nbsp;the&nbsp;scroll_begin&nbsp;value</tt></dd></dl>

<hr>
Data and other attributes defined here:<br>
<dl><dt><strong>display_infostring</strong> = False</dl>

<dl><dt><strong>main_display</strong> = False</dl>

<dl><dt><strong>postpone_drawing</strong> = False</dl>

<dl><dt><strong>scroll_begin</strong> = 0</dl>

<dl><dt><strong>target</strong> = None</dl>

<hr>
Methods inherited from <a href="ranger.gui.displayable.html#Displayable">ranger.gui.displayable.Displayable</a>:<br>
<dl><dt><a name="FileList-__contains__"><strong>__contains__</strong></a>(self, item)</dt><dd><tt>Is&nbsp;item&nbsp;inside&nbsp;the&nbsp;boundaries?<br>
item&nbsp;can&nbsp;be&nbsp;an&nbsp;iterable&nbsp;like&nbsp;[y,&nbsp;x]&nbsp;or&nbsp;an&nbsp;object&nbsp;with&nbsp;x&nbsp;and&nbsp;y&nbsp;methods.</tt></dd></dl>

<dl><dt><a name="FileList-__nonzero__"><strong>__nonzero__</strong></a>(self)</dt><dd><tt>Always&nbsp;True</tt></dd></dl>

<dl><dt><a name="FileList-color"><strong>color</strong></a>(self, keylist<font color="#909090">=None</font>, *keys)</dt><dd><tt>Change&nbsp;the&nbsp;colors&nbsp;from&nbsp;now&nbsp;on.</tt></dd></dl>

<dl><dt><a name="FileList-color_at"><strong>color_at</strong></a>(self, y, x, wid, keylist<font color="#909090">=None</font>, *keys)</dt><dd><tt>Change&nbsp;the&nbsp;colors&nbsp;at&nbsp;the&nbsp;specified&nbsp;position</tt></dd></dl>

<dl><dt><a name="FileList-color_reset"><strong>color_reset</strong></a>(self)</dt><dd><tt>Change&nbsp;the&nbsp;colors&nbsp;to&nbsp;the&nbsp;default&nbsp;colors</tt></dd></dl>

<dl><dt><a name="FileList-contains_point"><strong>contains_point</strong></a>(self, y, x)</dt><dd><tt>Test&nbsp;if&nbsp;the&nbsp;point&nbsp;lies&nbsp;within&nbsp;the&nbsp;boundaries&nbsp;of&nbsp;this&nbsp;object</tt></dd></dl>

<dl><dt><a name="FileList-destroy"><strong>destroy</strong></a>(self)</dt><dd><tt>Called&nbsp;when&nbsp;the&nbsp;object&nbsp;is&nbsp;destroyed.<br>
Override&nbsp;this!</tt></dd></dl>

<dl><dt><a name="FileList-press"><strong>press</strong></a>(self, key)</dt><dd><tt>Called&nbsp;when&nbsp;a&nbsp;key&nbsp;is&nbsp;pressed&nbsp;and&nbsp;self.<strong>focused</strong>&nbsp;is&nbsp;True.<br>
Override&nbsp;this!</tt></dd></dl>

<dl><dt><a name="FileList-resize"><strong>resize</strong></a>(self, y, x, hei<font color="#909090">=None</font>, wid<font color="#909090">=None</font>)</dt><dd><tt>Resize&nbsp;the&nbsp;widget</tt></dd></dl>

<hr>
Data and other attributes inherited from <a href="ranger.gui.displayable.html#Displayable">ranger.gui.displayable.Displayable</a>:<br>
<dl><dt><strong>colorscheme</strong> = None</dl>

<dl><dt><strong>focused</strong> = False</dl>

<dl><dt><strong>visible</strong> = True</dl>

<dl><dt><strong>win</strong> = None</dl>

<hr>
Data and other attributes inherited from <a href="ranger.shared.html#EnvironmentAware">ranger.shared.EnvironmentAware</a>:<br>
<dl><dt><strong>env</strong> = None</dl>

<hr>
Data and other attributes inherited from <a href="ranger.shared.html#FileManagerAware">ranger.shared.FileManagerAware</a>:<br>
<dl><dt><strong>fm</strong> = None</dl>

<hr>
Data descriptors inherited from <a href="ranger.shared.html#Awareness">ranger.shared.Awareness</a>:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><tt>dictionary&nbsp;for&nbsp;instance&nbsp;variables&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><tt>list&nbsp;of&nbsp;weak&nbsp;references&nbsp;to&nbsp;the&nbsp;object&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
<hr>
Data and other attributes inherited from <a href="ranger.shared.settings.html#SettingsAware">ranger.shared.settings.SettingsAware</a>:<br>
<dl><dt><strong>settings</strong> = &lt;ranger.ext.openstruct.OpenStruct object at 0x154e450&gt;</dl>

</td></tr></table></td></tr></table>
</body></html>