summary refs log blame commit diff stats
path: root/INSTALL
blob: 5fc5ca6b8dd6ce871c2c146227e187695c49d90a (plain) (tree)
1
2
3
4
5
6
7
8
9
10

          
 
                                   
 

                                                                   
                                                                            

 






                                                                       


                                                                
















                                                                           







                                                                        
Installing
==========

You don't need to install anything.

You can run ranger by simply starting the executable file ranger.py
in the top directory of this package.
Use the --clean option and it will leave no trace whatsoever on your system.


If you insist on conventionally install it, use the package manager
of your operating system.  If there is no package or it is out of date,
you can also follow these instructions:


Step by step
============

(This is all done automagically if you type `sudo make install',
though you might want to read the Makefile first)

0. Make sure you have a recent version of python, including the
   curses module, which is the case if this shell command prints no errors:
   python -c 'import curses'


1. Copy the file "ranger.py" into any of the directories in the PATH
   environment variable, for example to "/usr/bin/ranger"


2. Copy the directory "ranger" into one of the python module search
   paths, for example to "/usr/lib/python2.6/site-packages/ranger".

   Ensure that the path is listed by the command:
   python -c 'import sys; print("\n".join(sys.path))'


Uninstalling
============

Use your package manager to uninstall ranger.  If you manually installed
it, revert the steps described above.

Ranger can also create a configuration directory at ~/.ranger which
you might want to remove as well.
pan class="w"> { color: #8a8a8a; } .LineNr { } .Constant { color: #008787; } .SpecialChar { color: #d70000; } .Normal { color: #000000; background-color: #a8a8a8; padding-bottom: 1px; } .subxFunction { color: #af5f00; text-decoration: underline; } --> </style> <script type='text/javascript'> <!-- /* function to open any folds containing a jumped-to line before jumping to it */ function JumpToLine() { var lineNum; lineNum = window.location.hash; lineNum = lineNum.substr(1); /* strip off '#' */ if (lineNum.indexOf('L') == -1) { lineNum = 'L'+lineNum; } var lineElem = document.getElementById(lineNum); /* Always jump to new location even if the line was hidden inside a fold, or * we corrected the raw number to a line ID. */ if (lineElem) { lineElem.scrollIntoView(true); } return true; } if ('onhashchange' in window) { window.onhashchange = JumpToLine; } --> </script> </head> <body onload='JumpToLine();'> <a href='https://github.com/akkartik/mu/blob/main/linux/ex8.subx'>https://github.com/akkartik/mu/blob/main/linux/ex8.subx</a> <pre id='vimCodeElement'> <span id="L1" class="LineNr"> 1 </span><span class="subxComment"># Example reading commandline arguments: compute length of first arg.</span> <span id="L2" class="LineNr"> 2 </span><span class="subxComment">#</span> <span id="L3" class="LineNr"> 3 </span><span class="subxComment"># To run:</span> <span id="L4" class="LineNr"> 4 </span><span class="subxComment"># $ bootstrap/bootstrap translate ex8.subx -o ex8</span> <span id="L5" class="LineNr"> 5 </span><span class="subxComment"># $ bootstrap/bootstrap run ex8 abc de fghi</span> <span id="L6" class="LineNr"> 6 </span><span class="subxComment"># Expected result:</span> <span id="L7" class="LineNr"> 7 </span><span class="subxComment"># $ echo $?</span> <span id="L8" class="LineNr"> 8 </span><span class="subxComment"># 3 # length of 'abc'</span> <span id="L9" class="LineNr"> 9 </span><span class="subxComment">#</span> <span id="L10" class="LineNr">10 </span><span class="subxComment"># At the start of a SubX program:</span> <span id="L11" class="LineNr">11 </span><span class="subxComment"># argc: *esp</span> <span id="L12" class="LineNr">12 </span><span class="subxComment"># argv[0]: *(esp+4)</span> <span id="L13" class="LineNr">13 </span><span class="subxComment"># argv[1]: *(esp+8)</span> <span id="L14" class="LineNr">14 </span><span class="subxComment"># ...</span> <span id="L15" class="LineNr">15 </span><span class="subxComment"># Locals start from esp-4 downwards.</span> <span id="L16" class="LineNr">16 </span> <span id="L17" class="LineNr">17 </span>== code <span id="L18" class="LineNr">18 </span><span class="subxComment"># instruction effective address register displacement immediate</span> <span id="L19" class="LineNr">19 </span><span class="subxS1Comment"># . op subop mod rm32 base index scale r32</span> <span id="L20" class="LineNr">20 </span><span class="subxS1Comment"># . 1-3 bytes 3 bits 2 bits 3 bits 3 bits 3 bits 2 bits 2 bits 0/1/2/4 bytes 0/1/2/4 bytes</span> <span id="L21" class="LineNr">21 </span> <span id="L22" class="LineNr">22 </span><span class="SpecialChar">Entry</span>: <span id="L23" class="LineNr">23 </span> <span class="subxS1Comment"># . prologue</span> <span id="L24" class="LineNr">24 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span> <span id="L25" class="LineNr">25 </span> <span class="subxComment"># eax = ascii-length(argv[1])</span> <span id="L26" class="LineNr">26 </span> <span class="subxS2Comment"># . . push args</span> <span id="L27" class="LineNr">27 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+8)</span> <span id="L28" class="LineNr">28 </span> <span class="subxS2Comment"># . . call</span> <span id="L29" class="LineNr">29 </span> e8/call <a href='ex8.subx.html#L37'>ascii-length</a>/disp32 <span id="L30" class="LineNr">30 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L31" class="LineNr">31 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> <span id="L32" class="LineNr">32 </span> <span id="L33" class="LineNr">33 </span> <span class="subxComment"># exit(eax)</span> <span id="L34" class="LineNr">34 </span> 89/copy 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy eax to ebx</span> <span id="L35" class="LineNr">35 </span> e8/call <a href='000init.subx.html#L18'>syscall_exit</a>/disp32 <span id="L36" class="LineNr">36 </span> <span id="L37" class="LineNr">37 </span><span class="subxFunction">ascii-length</span>: <span class="subxComment"># s: (addr array byte) -&gt; n/eax</span> <span id="L38" class="LineNr">38 </span> <span class="subxComment"># edx = s</span> <span id="L39" class="LineNr">39 </span> 8b/copy 1/mod/*+disp8 4/rm32/sib 4/base/esp 4/index/none <span class="Normal"> . </span> 2/r32/edx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esp+4) to edx</span> <span id="L40" class="LineNr">40 </span> <span class="subxComment"># var result/eax = 0</span> <span id="L41" class="LineNr">41 </span> b8/copy-to-eax 0/imm32 <span id="L42" class="LineNr">42 </span><span class="Constant">$ascii-length:loop</span>: <span id="L43" class="LineNr">43 </span> <span class="subxComment"># var c/ecx = *s</span> <span id="L44" class="LineNr">44 </span> 8a/copy-byte 0/mod/* 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/CL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edx to CL</span> <span id="L45" class="LineNr">45 </span> <span class="subxComment"># if (c == '\0') break</span> <span id="L46" class="LineNr">46 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32/null <span class="subxComment"># compare ecx</span> <span id="L47" class="LineNr">47 </span> 74/jump-if-= $ascii-length:end/disp8 <span id="L48" class="LineNr">48 </span> <span class="subxComment"># ++s</span> <span id="L49" class="LineNr">49 </span> 42/increment-edx <span id="L50" class="LineNr">50 </span> <span class="subxComment"># ++result</span> <span id="L51" class="LineNr">51 </span> 40/increment-eax <span id="L52" class="LineNr">52 </span> <span class="subxComment"># loop</span> <span id="L53" class="LineNr">53 </span> eb/jump $ascii-length:<span class="Constant">loop</span>/disp8 <span id="L54" class="LineNr">54 </span><span class="Constant">$ascii-length:end</span>: <span id="L55" class="LineNr">55 </span> <span class="subxComment"># return eax</span> <span id="L56" class="LineNr">56 </span> c3/return <span id="L57" class="LineNr">57 </span> <span id="L58" class="LineNr">58 </span>== data <span id="L59" class="LineNr">59 </span> <span id="L60" class="LineNr">60 </span><span class="subxS2Comment"># . . vim&#0058;nowrap:textwidth=0</span> </pre> </body> </html> <!-- vim: set foldmethod=manual : -->