<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
- <title>GMQCC by graphitemaster</title>
+ <title>GMQCC</title>
<link rel="stylesheet" href="stylesheets/styles.css">
<link rel="stylesheet" href="stylesheets/pygment_trac.css">
<h1 class="header">GMQCC</h1>
<p class="header">An Improved Quake C Compiler</p>
<ul>
- <li class="download"><a href="https://github.com/graphitemaster/gmqcc/zipball/master">Download ZIP</a></li>
- <li class="download"><a href="https://github.com/graphitemaster/gmqcc/tarball/master">Download TAR</a></li>
+ <li class="buttons"><a href=index.html>Index</a></li>
+ <li class="download"><a href="https://github.com/graphitemaster/gmqcc/archive/0.1.zip">Download v0.1</a></li>
<li class="buttons"><a href="https://github.com/graphitemaster/gmqcc/issues">Issues</a></li>
<li class="buttons"><a href="doc.html">Documentation</a></li>
<li class="buttons"><a href="https://github.com/graphitemaster/gmqcc">View On GitHub</a></li>
<li class="wiki"><a class="wiki" href="#cdoc">Compiler Documentation</a></li>
<li class="wiki"><a class="wiki" href="#bdoc">Building Documentation</a></li>
<li class="wiki"><a class="wiki" href="#tdoc">Testsuite Documentation</a></li>
+ <li class="wiki"><a class="wiki" href="#vdoc">Virtual Machine Documentation</a></li>
</ul>
<h1><a name="cdoc">Compiler Documentation</a></h1>
<h3>Defaults Flag</h3>
<td>What it represents</td>
</tr>
<tr>
- <td>GMQCC</td>
+ <td>__STD_GMQCC__</td>
<td>Specifies the current selected standard is gmqcc.</td>
</tr>
<tr>
- <td>FTEQCC</td>
+ <td>__STD_FTEQCC__</td>
<td>Specifies the current selected standard is fteqcc.</td>
</tr>
<tr>
- <td>QCC</td>
+ <td>__STD_QCC__</td>
<td>Specifies the current selected standard is qcc.</td>
</tr>
-
+ <tr>
+ <td>GMQCC</td>
+ <td>Defined always regardless of the selected standard</td>
+ </tr>
<tr>
<td>__STD_VERSION_MINOR__</td>
<td>Specifies the current selected stanadards minor version number.</td>
<td>-fperl-logic</td>
<td>Enables perl evalutaion/logic</td>
</tr>
+ <tr>
+ <td>-ftranslatable-strings</td>
+ <td>Enables translatable strings via .po file</td>
+ </tr>
+ <tr>
+ <td>-finitialized-nonconstants</td>
+ <td>Prevents initializations from becoming constant unless 'const' is specified as a qualifer</td>
+ </tr>
+ <tr>
+ <td>-fassign-function-types</td>
+ <td>Allows function types to be assignable even if their signature is invariant</td>
+ </tr>
+ <tr>
+ <td>-flno</td>
+ <td>Enables generation of progs.lno for engine VM backtraces</td>
+ </tr>
</table>
<h3>Warning options</h3>
<table border="0">
<td>-Wmultifile-if</td>
<td>Enables warnings about multifile if statements</td>
</tr>
+ <tr>
+ <td>-Wdouble-declaration</td>
+ <td>Enables warnings about double declarations</td>
+ </tr>
+ <tr>
+ <td>-Wconst-var</td>
+ <td>Enables warnings about 'const var' and 'var const'</td>
+ </tr>
+ <tr>
+ <td>-Wmultibyte-character</td>
+ <td>Enables warnings about use of multibyte characters</td>
+ </tr>
+ <tr>
+ <td>-Wternary-precedence</td>
+ <td>Enables warnings about ternary expressions whos precedence may be not what expected</td>
+ </tr>
+ </table>
+ <table border="0">
+ <tr><td>Options</td><td>What it does</td></tr>
+ <tr>
+ <td>-Otail-recursion</td>
+ <td>Enables tail recursion optimization</td>
+ </tr>
</table>
<p>
- Individual warnings may be disabled with -Wno<warning>
+ Individual warnings may be disabled with -Wno-<warning>
<pre>$ gmqcc -Wno-frame-macros # disables frame duplication warning</pre>
</p>
<h3>Miscellaneous options</h3>
<td>-memchk</td>
<td>Turns on compiler memory leak checker</td>
</tr>
-
<tr>
<td>-Whelp or -W?</td>
<td>Lists all warning options</td>
</tr>
-
<tr>
<td>-fhelp or -f?</td>
<td>Lists all code generation options</td>
</tr>
+ <tr>
+ <td>-redirout=<file></td>
+ <td>Redirect stdout to any file.</td>
+ </tr>
+ <tr>
+ <td>-redirerr=<file></td>
+ <td>Redirect stderr to any file.</td>
+ </tr>
+ <tr>
+ <td>-nocolor</td>
+ <td>Turn off colored stdout/stderr.</td>
+ </tr>
</table>
<h1><a name="bdoc">Building Documentation</a></h1>
that need not be set), as well as missing tags, and error accordingly
which will result in that task failing.
</p>
-
+ <h1><a name="vdoc">Quake C Virtual Machine Documentation</a></h1>
+ <p>
+ Included with GMQCC is a minimal implementation of the QCVM used in many game
+ engines. It's primarly used for the testsuite, but you may also use it as a
+ standalone runtime, or even embed it with existing appliciations.
+ </p>
+ <h2>Running The Standalone VM</h2>
+ <p>
+ To run the standalone application you need to have a compiled progs.dat, with an
+ entry function named main The main function can have any amount of arguments
+ as the standalone executor allows main to be invoked with your choice of arguments.
+ An example of invoking the VM:
+ <pre>$ ./qcvm progs.dat -float 200 #execute passing in 200 as a float to main</pre>
+ If main doesn't require arguments:
+ <pre>$ ./qcvm progs.dat #call main with no arguments</pre>
+
+ The standalone executor supports the following arguments for passing arguments to main 
+
+ <table border="0">
+ <tr>
+ <td>Argument</td>
+ <td>What it does</td>
+ </tr>
+ <tr>
+ <td>-string</td>
+ <td>Passes in a string to main</td>
+ </tr>
+ <tr>
+ <td>-float</td>
+ <td>Passes in a float to main</td>
+ </tr>
+ <tr>
+ <td>-vector</td>
+ <td>Passes in a vector to main</td>
+ </tr>
+ </table>
+
+ The order in which the arguments are expected for main, must be preserved, for
+ example if main 's signature is the following:
+ <pre>void main(float a, vector b)</pre>
+
+ Then to pass the arguments you'd use the same order:
+ <pre>$ ./qcvm -float 200 -vector '1 2 3'</pre>
+
+ <h3>Additional Arguments</h3>
+ The standalone virtual machine has the following optional command line arguments:
+ <table border="0">
+ <tr>
+ <td>Argument</td>
+ <td>What it does</td>
+ </tr>
+ <tr>
+ <td>-trace</td>
+ <td>Trace the execution call hierarchy.</td>
+ </tr>
+ <tr>
+ <td>-profile</td>
+ <td>Profile the bytecode to find hotspots.</td>
+ </tr>
+ <tr>
+ <td>-info</td>
+ <td>Get info of the running bytecode.</td>
+ </tr>
+ <tr>
+ <td>-disasm</td>
+ <td>Dissasemble the bytecode into assembly.</td>
+ </tr>
+ <tr>
+ <td>-printdefs</td>
+ <td>Prints all definitions for the bytecode running.</td>
+ </tr>
+ <tr>
+ <td>-printfields</td>
+ <td>Prints all fields for the bytecode running.</td>
+ </tr>
+ </table>
+
+ <h3>Builtins</h3>
+ The standalone virtual machine includes the following builtins.
+ <table border="0">
+ <tr>
+ <td>Builtin</td>
+ <td>Number</td>
+ </tr>
+ <tr><td>print</td><td>1</td></tr>
+ <tr><td>ftos</td><td>2</td></tr>
+ <tr><td>spawn</td><td>3</td></tr>
+ <tr><td>kill</td><td>4</td></tr>
+ <tr><td>vtos</td><td>5</td></tr>
+ <tr><td>error</td><td>6</td></tr>
+ <tr><td>vlen</td><td>7</td></tr>
+ <tr><td>etos</td><td>8</td></tr>
+ <tr><td>stof</td><td>9</td></tr>
+ </table>
+ </p>
<h3>Support or Contact</h3>
<p>Having trouble with GMQCC? Join our IRC channel at #kf-engine on irc.freenode.net or contact <a href="mailto:cube2killfild@gmail.com">Us</a>
</section>