[project @ 2003-08-27 14:11:16 by panne]
[ghc-hetmet.git] / ghc / docs / users_guide / utils.sgml
index 5260a1f..a0769b7 100644 (file)
        <title>Ctags and Etags for Haskell: <command>hasktags</command></title>
        <indexterm><primary><command>hasktags</command></primary></indexterm>
        <indexterm><primary>CTAGS for Haskell</primary></indexterm>
-       
+
        <para><command>hasktags</command> is a very simple Haskell program that produces ctags "tags" and etags "TAGS" files for Haskell programs.</para>
-       
+
        <para>When loaded into an editor such an NEdit, Vim, or Emacs, this allows one to easily navigate around a multi-file program, finding definitions of functions, types, and constructors.</para>
-       
+
        <para>Invocation Syntax:</para>
-       
+
 <screen>
-hasktags files 
+hasktags files
 </screen>
 
 <para>This will read all the files listed in <option>files</option> and produce a ctags "tags" file and an etags "TAGS" file in the current directory.</para>
-       
+
        <para>Example usage</para>
-       
+
 <screen>
 find -name \*.\*hs | xargs hasktags
 </screen>
 
 <para>This will find all haskell source files in the current directory and below, and create tags files indexing them in the current directory.</para>
-       
+
        <para><command>hasktags</command> is a simple program that uses simple
-       parsing rules to find definitions of functions, constructors, and types. It isn't guranteed to find everything, and will sometimes create false index entries, but it usually gets the job done fairly well. In particular, at present, functions are only indexed if a type signature is given for them.</para>        
-       
+       parsing rules to find definitions of functions, constructors, and types. It isn't guranteed to find everything, and will sometimes create false index entries, but it usually gets the job done fairly well. In particular, at present, functions are only indexed if a type signature is given for them.</para>
+
        <para>Before hasktags, there used to be <command>fptags</command> and <command>hstags</command>, which did essentially the same job, however neither of these seem to be maintained any more.</para>
 
 <sect2>
@@ -46,7 +46,7 @@ find -name \*.\*hs | xargs hasktags
 
 
 </sect2>
-       
+
 </sect1>
 
 <!-- comment: hstags doesn't work anymore
@@ -184,6 +184,14 @@ tags:
 
       <variablelist>
        <varlistentry>
+         <term><literal>-o FILE</literal> or
+         <literal>&ndash;&ndash;output=FILE</literal></term>
+         <listitem>
+           <para>Name of the Haskell file.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
          <term><literal>-t FILE</literal> or
          <literal>&ndash;&ndash;template=FILE</literal></term>
          <listitem>
@@ -251,40 +259,33 @@ tags:
        </varlistentry>
 
        <varlistentry>
-         <term><literal>-o FILE</literal> or
-         <literal>&ndash;&ndash;output=FILE</literal></term>
-         <listitem>
-           <para>Name of the Haskell file.</para>
-         </listitem>
-       </varlistentry>
-
-       <varlistentry>
-         <term><literal>&ndash;&ndash;help</literal></term>
+         <term><literal>&ndash;&ndash;no-compile</literal></term>
          <listitem>
-           <para>Display a summary of the available flags.</para>
+           <para>Stop after writing out the intermediate C program to disk.
+           The file name for the intermediate C program is the input file name
+           with <literal>.hsc</literal> replaced with <literal>_hsc_make.c</literal>.</para>
          </listitem>
        </varlistentry>
 
        <varlistentry>
-         <term><literal>&ndash;&ndash;version</literal></term>
+         <term><literal>-?</literal> or <literal>&ndash;&ndash;help</literal></term>
          <listitem>
-           <para>Output version information.</para>
+           <para>Display a summary of the available flags and exit successfully.</para>
          </listitem>
        </varlistentry>
 
        <varlistentry>
-         <term><literal>&ndash;&ndash;no-compile</literal></term>
+         <term><literal>-V</literal> or <literal>&ndash;&ndash;version</literal></term>
          <listitem>
-           <para>Stop after writing out the intermediate C program to disk.
-           The file name for the intermediate C program is the input file name
-           with <literal>.hsc</literal> replaced with <literal>_hsc_make.c</literal>.</para>
+           <para>Output version information and exit successfully.</para>
          </listitem>
        </varlistentry>
       </variablelist>
 
-      <para>The input file should end with .hsc. Output files by
-      default get names with the <literal>.hsc</literal> suffix
-      replaced:</para>
+      <para>The input file should end with .hsc (it should be plain
+      Haskell source only; literate Haskell is not supported at the
+      moment). Output files by default get names with the
+      <literal>.hsc</literal> suffix replaced:</para>
 
       <informaltable>
        <tgroup cols=2>
@@ -443,8 +444,8 @@ tags:
          <term><literal>#peek struct_type, field</literal></term>
          <listitem>
            <para>A function that peeks a field of a C struct will be
-           output.  It will have the type 
-              <literal>Storable b => Ptr a -> IO b</literal>.  
+           output.  It will have the type
+              <literal>Storable b => Ptr a -> IO b</literal>.
 
             The intention is that <literal>#peek</literal> and
             <literal>#poke</literal> can be used for implementing the
@@ -458,7 +459,7 @@ tags:
        <varlistentry>
          <term><literal>#poke struct_type, field</literal></term>
          <listitem>
-           <para>Similarly for poke. It will have the type 
+           <para>Similarly for poke. It will have the type
               <literal>Storable b => Ptr a -> b -> IO ()</literal>.</para>
          </listitem>
        </varlistentry>
@@ -472,6 +473,25 @@ tags:
        </varlistentry>
 
        <varlistentry>
+         <term><literal>#offset struct_type, field</literal></term>
+         <listitem>
+           <para>Computes the offset, in bytes, of
+           <literal>field</literal> in
+           <literal>struct_type</literal>. It will have type
+           <literal>Int</literal>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term><literal>#size struct_type</literal></term>
+         <listitem>
+               <para>Computes the size, in bytes, of
+               <literal>struct_type</literal>. It will have type
+               <literal>Int</literal>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
          <term><literal>#enum type, constructor, value, value, ...</literal></term>
          <listitem>
            <para>A shortcut for multiple definitions which use
@@ -512,7 +532,7 @@ tags:
       prefixed by <literal>hsc_</literal> that handles the construct
       by emitting the expansion to stdout. See
       <filename>template-hsc.h</filename> for examples.</para>
-      
+
       <para>Such macros can also be defined directly in the
       source. They are useful for making a <literal>#let</literal>-like
       macro whose expansion uses other <literal>#let</literal> macros.