Browse Source

All switches and directives OK, and Peters changes to unit format

michael 27 years ago
parent
commit
718de16a58
1 changed files with 548 additions and 156 deletions
  1. 548 156
      docs/prog.tex

+ 548 - 156
docs/prog.tex

@@ -23,6 +23,9 @@
 \usepackage{html}
 \usepackage{html}
 \latex{\usepackage{multicol}}
 \latex{\usepackage{multicol}}
 \latex{\usepackage{fpcman}}
 \latex{\usepackage{fpcman}}
+\usepackage{fancyheadings}
+\pagestyle{fancy}
+\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
 \html{\input{fpc-html.tex}}
 \html{\input{fpc-html.tex}}
 % define the version number here, and not in the fpc.sty !!!
 % define the version number here, and not in the fpc.sty !!!
 \newcommand{\remark}[1]{\par$\rightarrow$\textbf{#1}\par}
 \newcommand{\remark}[1]{\par$\rightarrow$\textbf{#1}\par}
@@ -67,12 +70,25 @@ updated. If you find something which isn't correct, or you think something
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \chapter{Compiler directives}
 \chapter{Compiler directives}
 \label{ch:CompSwitch}
 \label{ch:CompSwitch}
+
 \fpc supports compiler directives in your source file. They are not the same
 \fpc supports compiler directives in your source file. They are not the same
 as Turbo Pascal directives, although some are supported for compatibility.
 as Turbo Pascal directives, although some are supported for compatibility.
 There is a distinction between local and global directives; local directives
 There is a distinction between local and global directives; local directives
 take effect from the moment they are encountered, global directives have an
 take effect from the moment they are encountered, global directives have an
 effect on all of the compiled code.
 effect on all of the compiled code.
 
 
+Many switches have a long form also. If they do, then the name of the
+long form is given also. For long switches, the + or - character to switch
+the option on or off, may be replaced by \var{ON} or \var{OFF} keywords.
+
+Thus \verb|{$I+}| is equivalent to \verb|{$IOCHECKS ON}| or 
+\verb|{$IOCHECKS +}| and 
+\verb|{$C-}| is equivalent to \verb|{$ASSERTIONS OFF}| or
+\verb|{$ASSERTIONS -}|
+
+The long forms of the switches are the same as their Delphi 
+counterparts.
+
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % Local switches
 % Local switches
 \section{Local directives}
 \section{Local directives}
@@ -82,6 +98,58 @@ compiler's behaviour from the moment they're encountered until the moment
 another switch annihilates their behaviour, or the end of the unit or
 another switch annihilates their behaviour, or the end of the unit or
 program is reached.
 program is reached.
 
 
+\subsection{\var{\$DEFINE} : Define a symbol}
+
+The directive
+\begin{verbatim}
+{$DEFINE name}
+\end{verbatim}
+defines the symbol \var{name}. This symbol remains defined until the end of
+the current module, or until a \var{\$UNDEF name} directive is encountered.
+
+If \var{name} is already defined, this has no effect. \var{Name} is case
+insensitive.
+
+
+\subsection{\var{\$ELSE} : Switch conditional compilation}
+
+The \var{\{\$ELSE \}} switches between compiling and ignoting the source
+text delimited by the preceding \var{\{\$IFxxx\}} and following 
+\var{\{\$ENDIF\}}. Any text after the \var{ELSE} keyword but before the 
+brace is ignored: 
+\begin{verbatim}
+{$ELSE some ignored text}
+\end{verbatim}
+is the same as
+\begin{verbatim}
+{$ELSE}
+\end{verbatim}
+This is useful for indication what switch is meant.
+
+\subsection{\var{\$ENDIF} : End conditional compilation}
+
+The \var{\{\$ENDIF\}} directive ends the conditional compilation initiated by the
+last \var{\{\$IFxxx\}} directive. Any text after the \var{ENDIF} keyword but
+before the closing brace is ignored:
+\begin{verbatim}
+{$ENDIF some ignored text}
+\end{verbatim}
+is the same as
+\begin{verbatim}
+{$ENDIF}
+\end{verbatim}
+This is useful for indication what switch is meant to be ended.
+
+\subsection{\var{\$ERROR} : Generate error message}
+
+The following code
+\begin{verbatim}
+{$ERROR This code is erroneous !}
+\end{verbatim}
+will display an error message when the compiler encounters it, 
+and increase the error count of the compiler. 
+The compiler will continue to compile, but no code will be emitted.
+
 \subsection{\var{\$F} : Far or near functions}
 \subsection{\var{\$F} : Far or near functions}
 This directive is recognized for compatibility with Turbo Pascal. Under the
 This directive is recognized for compatibility with Turbo Pascal. Under the
 32-bit programming model, the concept of near and far calls have no meaning,
 32-bit programming model, the concept of near and far calls have no meaning,
@@ -132,10 +200,103 @@ displayed in that case is:
 testf.pp(3) Warning: NEAR ignored
 testf.pp(3) Warning: NEAR ignored
 \end{verbatim}
 \end{verbatim}
 
 
-\subsection{\var{\$I} : Input/Output checking}
-The \var{\{\$I-\}} directive tells the compiler not to generate input/output
-checking code in your program. If you compile using the \var{-Ci} compiler
-switch, the \fpc compiler inserts input/output
+\subsection{\var{\$FATAL} : Generate fatal error message}
+
+The following code
+\begin{verbatim}
+{$FATAL This code is erroneous !}
+\end{verbatim}
+will display an error message when the compiler encounters it, and trigger
+and increase the error count of the compiler. 
+The compiler will immediatly stop the compilation process.
+
+
+\subsection{\var{\$H} or \var{\$LONGSTRINGS} : Use AnsiStrings}
+
+If \var{\{\$LONGSTRINGS ON\}} is specified, the keyword \var{String} (no
+length specifier) will be treated as \var{AnsiString}, and the compiler 
+will treat the corresponding varible as an ansistring, and will 
+generate corresponding code. 
+
+By default, the use of ansistrings is off, corresponding to \var{\{\$H-\}}.
+
+This feature is still experimental, and should be used with caution for the
+time being.
+
+\subsection{\var{\$HINT} : Generate hint message}
+
+If the generation of hints is turned on, through the \var{-vh} command-line
+option or the \var{\{\$HINTS ON\}} directive, then
+\begin{verbatim}
+{$Hint This code should be optimized }
+\end{verbatim}
+will display a hint message when the compiler encounters it.
+
+\subsection{\var{\$HINTS} : Emit hints}
+
+\var{\{\$HINTS ON\}} switches the generation of hints on. 
+\var{\{\$HINTS OFF\}} switches the generation of hints off. 
+Contrary to the command-line option \var{-vh} this is a local switch, 
+this is useful for checking parts of your code.
+
+\subsection{\var{\$IF} : Start conditional compilation}
+
+The directive \var{\{\$IF expr\}} will continue the compilation
+if the boolean expression \var{expr} evaluates to \var{true}. If the 
+compilation evaluates to false, then the source are skipped to the first
+\var{\{\$ELSE\}} or \var{\{\$ENDIF\}} directive.
+
+The compiler must be able to evaluate the expression at compile time.
+This means that you cannot use variables or constants that are defined in
+the source. Macros and symbols may be used, however.   
+
+More information on this can be found in the section about 
+conditionals.
+
+\subsection{\var{\$IFDEF} : Start conditional compilation}
+
+The \var{\{\$IFDEF name\}} will skip the compilation of the text that
+follows it if the symbol \var{name} is not defined. If it is defined, then
+compilation continues as if the directive wasn't there. 
+
+\subsection{\var{\$IFNDEF} : Start conditional compilation}
+
+The \var{\{\$IFNDEF name\}} will skip the compilation of the text that
+follows it if the symbol \var{name} is defined. If it is not defined, then
+compilation continues as if the directive wasn't there. 
+
+\subsection{\var{\$IFOPT} : Start conditional compilation}
+
+The \var{\{\$IFOPT switch\}} will skip the compilation of the text that
+follows it if the switch \var{switch} is currently not in the specified 
+state.  If it is in the specified state, then compilation continues as if the directive 
+wasn't there. 
+
+As an example:
+\begin{verbatim}
+{$IFOPT M+}
+  Writeln ('Compiled with type information');
+{$ENDIF}
+\end{verbatim}
+Will compile the writeln statement if generation of type information is on.
+
+\subsection{\var{\$INFO} : Generate info message}
+
+If the generation of info is turned on, through the \var{-vi} command-line
+option, then 
+\begin{verbatim}
+{$INFO This was coded on a rainy day by Bugs Bunny }
+\end{verbatim}
+will display an info message when the compiler encounters it.
+
+
+\subsection{\var{\$I} or \var{\$IOCHECK} : Input/Output checking}
+The \var{\{\$I-\}} or \var{\{\$IOCHECK OFF\}} directive tells the compiler 
+not to generate input/output checking code in your program. By default, the
+compiler does not generate this code, you must switch it on using the
+\var{-Ci} command-lne switch.
+
+If you compile using the \var{-Ci} compiler switch, the \fpc compiler inserts input/output
 checking code after every input/output call in your program. If an error
 checking code after every input/output call in your program. If an error
 occurred during input or output, then a run-time error will be generated.
 occurred during input or output, then a run-time error will be generated.
 Use this switch if you wish to avoid this behavior.
 Use this switch if you wish to avoid this behavior.
@@ -161,10 +322,11 @@ if IOResult<>0 then
 ...
 ...
 \end{verbatim}
 \end{verbatim}
 
 
-\subsection{\var{\$I} : Include file }
-The \var{\{\$I filename\}} directive tells the compiler to read further
-statements from the file \var{filename}. The statements read there will be
-inserted as if they occurred in the current file.
+\subsection{\var{\$I} or \var{\$INCLUDE} : Include file }
+The \var{\{\$I filename\}} or \var{\{\$INCLUDE filename\}} directive 
+tells the compiler to read further statements from the file \var{filename}. 
+The statements read there will be inserted as if they occurred in the 
+current file.
 
 
 The compiler will append the \file{.pp} extension to the file if you don't
 The compiler will append the \file{.pp} extension to the file if you don't
 specify an extension yourself. Do not put the filename between quotes, as
 specify an extension yourself. Do not put the filename between quotes, as
@@ -178,32 +340,32 @@ a block in one file (with a \var{Begin} keyword) and end it in another (with
 a \var{End} keyword). The smallest entity in an include file must be a token,
 a \var{End} keyword). The smallest entity in an include file must be a token,
 i.e. an identifier, keyword or operator.
 i.e. an identifier, keyword or operator.
 
 
-\subsection{\var{\$L} : Link object file}
-The \var{\{\$L filename\}} directive tells the compiler that the file \file{filename}
-should be linked to your program. You can only use this directive in a
-program. If you do use it in a unit, the compiler will not complain, but
-simply ignores the directive.
+The compiler will look for the file to include in the following places:
 
 
-The compiler will {\em not} look for the file in the unit path.
-The name will be passed to the linker {\em exactly} as you've typed it.
+\begin{enumerate}
+\item It will look in the path specified in the incude file name. 
+\item It will look in the directory where the current source file is.
+\item it will look in all directories specified in the include file search
+path.
+\end{enumerate}
+You can add files to the include file search path with the \var{-I} 
+command-line option.
 
 
-Since the files name is passed directly to the linker, this means that on
-\linux systems, the name is case sensitive, and must be typed exactly as it
-appears on your system.
+\subsection{\var{\$I} or \var{\$INCLUDE} : Include compiler info}
 
 
-{\em Remark :} Take care that the object file you're linking is in a
-format the linker understands. Which format this is, depends on the platform
-you're on. Typing \var{ld} on the command line gives a list of formats
-\var{ld} knows about.
-
-You can pass other files and options to the linker using the \var{-k}
-command-line option. You can specify more than one of these options, and
-they will be passed to the linker, in the order that you specified them on
-the command line, just before the names of the object files that must be
-linked.
+In this form:
+\begin{verbatim}
+{$INCLUDE %xxx%}
+\end{verbatim}
+where \var{xxx} is one of \var{TIME}, \var{DATE}, \var{FPCVERSION} or
+\var{FPCTARGET}, will generate a macro with the value of these things.
+If \var{xxx} is none of the above, then it is assumed to be the value of
+an environment variable. It's value will be fetched.
 
 
 % Assembler type
 % Assembler type
-\subsection{\var{\$I386\_XXX} : Specify assembler format (Intel x86 only)}
+\subsection{\var{\$I386\_XXX} : Specify assembler format}
+This switch can only be used in the i386 assembler.
+
 This switch informs the compiler what kind of assembler it can expect in an
 This switch informs the compiler what kind of assembler it can expect in an
 \var{asm} block. The \var{XXX} should be replaced by one of the following:
 \var{asm} block. The \var{XXX} should be replaced by one of the following:
 \begin{description}
 \begin{description}
@@ -217,8 +379,74 @@ These switches are local, and retain their value to the end of the unit that
 is compiled, unless they are replaced by another directive of the same type.
 is compiled, unless they are replaced by another directive of the same type.
 The command-line switch that corresponds to this switch is \var{-R}.
 The command-line switch that corresponds to this switch is \var{-R}.
 
 
+\subsection{\var{\$L} or \var{\$LINK} : Link object file}
+The \var{\{\$L filename\}} or \var{\{\$LINK filename\}} directive 
+tells the compiler that the file \file{filename} should be linked to 
+your program. 
+
+the compiler will look for this file in the following way:
+
+\begin{enumerate}
+\item It will look in the path specified in the object file name. 
+\item It will look in the directory where the current source file is.
+\item it will look in all directories specified in the object file search path.
+\end{enumerate}
+You can add files to the object file search path with the \var{-Fo}
+option.
+
+On \linux systems, the name is case sensitive, and must be typed 
+exactly as it appears on your system.
+
+{\em Remark :} Take care that the object file you're linking is in a
+format the linker understands. Which format this is, depends on the platform
+you're on. Typing \var{ld} on the command line gives a list of formats
+\var{ld} knows about.
+
+You can pass other files and options to the linker using the \var{-k}
+command-line option. You can specify more than one of these options, and
+they will be passed to the linker, in the order that you specified them on
+the command line, just before the names of the object files that must be
+linked.
+
+\subsection{\var{\$LINKLIB} : Link to a library}
+The \var{\{\$LINKLIB name\}} will link to a library \file{name}.
+This has the effect of passing \var{-lname} to the linker. 
+
+As an example, consider the following unit:
+\begin{verbatim}
+unit getlen;
+
+interface
+{$LINKLIB c}
+
+function strlen (P : pchar) : longint;cdecl;
+
+implementation
+
+function strlen (P : pchar) : longint;cdecl;external;
+
+end.
+\end{verbatim}
+If one would issue the command the command
+\begin{verbatim}
+ppc386 foo.pp
+\end{verbatim}
+where foo.pp has the above unit in its \var{uses} clause, 
+then the compiler would link your program to the c library, by passing the
+linker the \var{-lc} option.
+
+The same effect could be obtained by removing the linklib directive in the
+above unit, and specify \var{-k-lc} on the command-line:
+\begin{verbatim}
+ppc386 -k-lc foo.pp
+\end{verbatim}
+
+\subsection{\var{\$M} or \var{\$TYPEINFO} : Generate type info}
 
 
-\subsection{\var{\$MMX} : MMX support (Intel x86 only)}
+This switch is recognized for Delphi compatibility only since the generation
+of type information isn't fully implemented yet.
+ 
+\subsection{\var{\$MMX} : Intel MMX support}
 As of version 0.9.8, \fpc supports optimization for the \textbf{MMX} Intel
 As of version 0.9.8, \fpc supports optimization for the \textbf{MMX} Intel
 processor (see also \ref{ch:MMXSupport}). This optimizes certain code parts for the \textbf{MMX} Intel
 processor (see also \ref{ch:MMXSupport}). This optimizes certain code parts for the \textbf{MMX} Intel
 processor, thus greatly improving speed. The speed is noticed mostly when
 processor, thus greatly improving speed. The speed is noticed mostly when
@@ -260,6 +488,23 @@ end.
 See, however, the chapter on MMX (\ref{ch:MMXSupport}) for more information
 See, however, the chapter on MMX (\ref{ch:MMXSupport}) for more information
 on this topic.
 on this topic.
 
 
+\subsection{\var{\$NOTE} : Generate note message}
+
+If the generation of notes is turned on, through the \var{-vn} command-line
+option or the \var{\{\$NOTES ON\}} directive, then
+\begin{verbatim}
+{$NOTE Ask Santa Claus to look at this code }
+\end{verbatim}
+will display a note message when the compiler encounters it.
+
+
+\subsection{\var{\$NOTES} : Emit notes}
+
+\var{\{\$NOTES ON\}} switches the generation of notes on. 
+\var{\{\$NOTES OFF\}} switches the generation of notes off.
+ Contrary to the command-line option \var{-vn} this
+is a local switch, this is useful for checking parts of your code.
+
 \subsection{\var{\$OUTPUT\_FORMAT} : Specify the output format}
 \subsection{\var{\$OUTPUT\_FORMAT} : Specify the output format}
 \var{\{\$OUTPUT\_FORMAT format\}} has the same functionality as the \var{-A}
 \var{\{\$OUTPUT\_FORMAT format\}} has the same functionality as the \var{-A}
 command-line option : It tells the compiler what kind of object file must be
 command-line option : It tells the compiler what kind of object file must be
@@ -275,12 +520,123 @@ obj  & OMF file.\\
 wasm & assembler for the Watcom assembler. \\ \hline
 wasm & assembler for the Watcom assembler. \\ \hline
 \end{FPCltable}
 \end{FPCltable}
 
 
-\subsection{\var{\$V} : Var-string checking}
+\subsection{\var{\$P} or \var{\$OPENSTRINGS} : Use open strings}
+
+This switch is provided for compatibility only, as open strings aren't
+implemented yet.
+
+\subsection{\var{\$PACKENUM} : Minimum enumeration type size}
+
+This directive tells the compiler the minimum number of bytes it should
+use when storing enumerated types. It is of the following form:
+\begin{verbatim}
+{$PACKENUM xxx}
+{$MINENUMSIZE xxx}
+\end{verbatim}
+Where the form with \var{\$MINENUMSIZE} is for Delphi compatibility.
+var{xxx} can be one of \var{1,2} or \var{4}, or \var{NORMAL} or
+\var{DEFAULT}, corresponding to the default value of 4.
+
+
+As an alternative form one can use \var{\{\$Z1\}}, \var{\{\$Z2\}} 
+\var{\{\$Z4\}}. Contrary to Delphi, the default size is 4 bytes
+(\var{\{\$Z4\}}).
+
+So the follwoing code
+\begin{verbatim}
+{$PACKENUM 1}
+Type
+  Days = (monday, tuesday, wednesday, thursday, friday, 
+          saturday, sunday);
+\end{verbatim}
+will use 1 byte to store a variable of type \var{Days}, wheras it nomally
+would use 4 bytes. The above code is equivalent to
+\begin{verbatim}
+{$Z1}
+Type
+  Days = (monday, tuesday, wednesday, thursday, friday, 
+          saturday, sunday);
+\end{verbatim}
+
+\subsection{\var{\$PACKRECORDS} : Alignment of record elements}
+
+This directive controls the byte alignment of the elements in a record,
+object or class type definition.
+
+It is of the following form:
+\begin{verbatim}
+{$PACKRECORDS xx}
+\end{verbatim}
+
+Where \var{xxx} is one of 1,2,4,16 or \var{NORMAL} or \var{DEFAULT}. 
+This means that the elements of a record will be aligned on 1,2, 4 or 
+16 byte boundaries. Thus, the size of a record will always be a multiple of
+the alignment size.
+The default alignment (which can be selected with \var{DEFAULT}) is 2, 
+contrary to Turbo Pascal, where it is 1.
+
+More information of this can be found in the reference guide, in the section
+about record types.
+
+\subsection{\var{\$STOP} : Generate fatal error message}
+
+The following code
+\begin{verbatim}
+{$STOP This code is erroneous !}
+\end{verbatim}
+will display an error message when the compiler encounters it.
+The compiler will immediatly stop the compilation process.
+
+It has the same effect as the \var{\{\$FATAL\}} directive.
+
+
+\subsection{\var{\$UNDEF} : Undefine a symbol}
 
 
-When in the \var{+} state, the compiler checks that strings passed as
-parameters are of the same, identical, string type as the declared
+The directive
+\begin{verbatim}
+{$UNDEF name}
+\end{verbatim}
+un-defines the symbol \var{name} if it was previously defined.
+\var{Name} is case insensitive.
+
+
+\subsection{\var{\$V} or \var{\$VARSTRINGCHECKS} : Var-string checking}
+
+When in the \var{+} or \var{ON} state, the compiler checks that strings 
+passed as parameters are of the same, identical, string type as the declared
 parameters of the procedure.
 parameters of the procedure.
 
 
+\subsection{\var{\$WAIT} : Wait for enter key press}
+
+If the compiler encaounters a
+\begin{verbatim}
+{$WAIT }
+\end{verbatim}
+directive, it will resume compiling only after the user has pressed the
+enter key. If the generation of info messages is turned on, then the compiler 
+will display the follwing message:
+\begin{verbatim}
+Press <return> to continue
+\end{verbatim}
+before waiting for a keypress. Careful ! this may interfere with automatic
+compilation processes. It should be used for debuggig purposes only.
+
+\subsection{\var{\$WARNING} : Generate warning message}
+
+If the generation of warnings is turned on, through the \var{-vw} 
+command-line option or the \var{\{\$WARNINGS ON\}} directive, then
+\begin{verbatim}
+{$WARNING This is dubious code }
+\end{verbatim}
+will display a warning message when the compiler encounters it.
+
+\subsection{\var{\$WARNINGS} : Emit warnings}
+
+\var{\{\$WARNINGS ON\}} switches the generation of warnings on. 
+\var{\{\$WARNINGS OFF\}} switches the generation of warnings off. 
+Contrary to the command-line option \var{-vw} this
+is a local switch, this is useful for checking parts of your code.
+
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % Global switches
 % Global switches
 \section{Global directives}
 \section{Global directives}
@@ -289,13 +645,13 @@ Global directives affect the whole of the compilation process. That is why
 they also have a command - line counterpart. The command-line counterpart is
 they also have a command - line counterpart. The command-line counterpart is
 given for each of the directives.
 given for each of the directives.
 
 
-\subsection{\var{\$A} : Align Data}
+\subsection{\var{\$A} or \var{\$ALIGN}: Align Data}
 
 
 This switch is recognized for Turbo Pascal Compatibility, but is not
 This switch is recognized for Turbo Pascal Compatibility, but is not
 yet implemented. The alignment of data will be different in any case, since
 yet implemented. The alignment of data will be different in any case, since
 \fpc is a 32-bit compiler.
 \fpc is a 32-bit compiler.
 
 
-\subsection{\var{\$B} : Complete boolean evaluation}
+\subsection{\var{\$B} or \var{\$BOOLEVAL}: Complete boolean evaluation}
 
 
 This switch is understood by the \fpc compiler, but is ignored. The compiler
 This switch is understood by the \fpc compiler, but is ignored. The compiler
 always uses shortcut evaluation, i.e. the evaluation of a boolean expression
 always uses shortcut evaluation, i.e. the evaluation of a boolean expression
@@ -308,9 +664,10 @@ If False and Bofu then
   ...
   ...
 \end{verbatim}
 \end{verbatim}
 
 
-\subsection{\var{\$D} : Debugging symbols}
+\subsection{\var{\$D} or \var{\$DEBUGINFO}: Debugging symbols}
 
 
-When this switch is on, the compiler inserts GNU debugging information in
+When this switch is on (\var{\{\$DEBUGINFO ON\}}), 
+the compiler inserts GNU debugging information in
 the executable. The effect of this switch is the same as the command-line
 the executable. The effect of this switch is the same as the command-line
 switch \var{-g}. By default, insertion of debugging information is off.
 switch \var{-g}. By default, insertion of debugging information is off.
 
 
@@ -352,12 +709,25 @@ long as the only type used is single or real.
 
 
 This option is recognised for Turbo Pascal compatibility, but is ignored,
 This option is recognised for Turbo Pascal compatibility, but is ignored,
 
 
-\subsection{\var{\$L} : Local symbol information}
+\subsection{\var{\$L} or \var{\$LOCALSYMBOLS}: Local symbol information}
 
 
 This switch (not to be confused with the \var{\{\$L file\}} file linking
 This switch (not to be confused with the \var{\{\$L file\}} file linking
 directive) is recognised for Turbo Pascal compatibility, but is ignored.
 directive) is recognised for Turbo Pascal compatibility, but is ignored.
 generation of symbol information is controlled by the \var{\$D} switch.
 generation of symbol information is controlled by the \var{\$D} switch.
 
 
+\subsection{\var{\$M} or \var{\$MEMORY}: Memory sizes}
+
+This switch can be used to set the heap and stacksize. It's format is as
+follows:
+\begin{verbatim}
+{$M StackSize,HeapSize}
+\end{verbatim}
+Wher \var{StackSize} and \var{HeapSize} should be two integer values,
+greater than 1024. The first number sets the size of the stack, and the
+second the size of the heap. (Stack setting is ignored under \linux).
+The two numbers can be set on the command line using the \var{-Ch}
+(and \var{-Cs} switches.
+ 
 \subsection{\var{\$N} : Numeric processing }
 \subsection{\var{\$N} : Numeric processing }
 
 
 This switch is recognised for Turbo Pascal compatibility, but is otherwise
 This switch is recognised for Turbo Pascal compatibility, but is otherwise
@@ -369,10 +739,10 @@ mathematics.
 This switch is recognised for Turbo Pascal compatibility, but is otherwise
 This switch is recognised for Turbo Pascal compatibility, but is otherwise
 ignored.
 ignored.
 
 
-\subsection{\var{\$Q} : Overflow checking}
-The \var{\{\$Q+\}} directive turns on integer overflow checking.
-This means that the compiler inserts code to check for overflow when doing
-computations with an integer.
+\subsection{\var{\$Q} \var{\$OVERFLOWCHECKS}: Overflow checking}
+The \var{\{\$Q+\}} or \var{\{\$OVERFLOWCHECKS ON\}} directive turns on 
+integer overflow checking. This means that the compiler inserts code 
+to check for overflow when doing computations with integers.
 When an overflow occurs, the run-time library will print a message
 When an overflow occurs, the run-time library will print a message
 \var{Overflow at xxx}, and exit the program with exit code 215.
 \var{Overflow at xxx}, and exit the program with exit code 215.
 
 
@@ -388,7 +758,7 @@ generation.
 The generation of overflow checking code can also be controlled
 The generation of overflow checking code can also be controlled
 using the \var{-Co} command line compiler option (see \userref).
 using the \var{-Co} command line compiler option (see \userref).
 
 
-\subsection{\var{\$R} : Range checking}
+\subsection{\var{\$R} or \var{\$RANGECHECKS} : Range checking}
 By default, the computer doesn't generate code to check the ranges of array
 By default, the computer doesn't generate code to check the ranges of array
 indices, enumeration types, subrange types, etc. Specifying the
 indices, enumeration types, subrange types, etc. Specifying the
 \var{\{\$R+\}} switch tells the computer to generate code to check these
 \var{\{\$R+\}} switch tells the computer to generate code to check these
@@ -396,7 +766,7 @@ indices. If, at run-time, an index or enumeration type is specified that is
 out of the declared range of the compiler, then a run-time error is
 out of the declared range of the compiler, then a run-time error is
 generated, and the program exits with exit code 201.
 generated, and the program exits with exit code 201.
 
 
-The \var{\{\$R-\}} switch tells the compiler not to generate range checking
+The \var{\{\$RANGECHECKS OFF\}} switch tells the compiler not to generate range checking
 code. This may result in faulty program behaviour, but no run-time errors
 code. This may result in faulty program behaviour, but no run-time errors
 will be generated.
 will be generated.
 
 
@@ -415,11 +785,19 @@ Specifying \var{\{\$S-\}} will turn generation of stack-checking code off.
 The command-line compiler switch \var{-Ct} has the same effect as the
 The command-line compiler switch \var{-Ct} has the same effect as the
 \var{\{\$S+\}} directive.
 \var{\{\$S+\}} directive.
 
 
+\subsection{\var{\$T} or \var{\$TYPEDADDRESS} : Typed address operator (@)}
 
 
-\subsection{\var{\$X} : Extended syntax}
+In the \var{\{\$T+\}} or \var{\{\$TYPEDADDRESS ON\}} state the @ operator,
+when applied to a variable, returns a result of type \var{\^{}T}, if the 
+type of the variable is \var{T}. In the \var{\{\$T-\}} state, the result is
+always an untyped pointer, which is assignment compatible with all other 
+pointer types.
+
+\subsection{\var{\$X} or \var{\$EXTENDEDSYNTAX} : Extended syntax}
 Extended syntax allows you to drop the result of a function. This means that
 Extended syntax allows you to drop the result of a function. This means that
 you can use a function call as if it were a procedure. Standard this feature
 you can use a function call as if it were a procedure. Standard this feature
-is on. You can switch it off using the \var{\{\$X-\}} directive.
+is on. You can switch it off using the \var{\{\$X-\}} or
+\var{\{\$EXTENDEDSYNTAX OFF\}}directive.
 
 
 The following, for instance, will not compile :
 The following, for instance, will not compile :
 \begin{verbatim}
 \begin{verbatim}
@@ -441,6 +819,12 @@ you an extra variable.
 The command-line compiler switch \var{-Sa1} has the same effect as the
 The command-line compiler switch \var{-Sa1} has the same effect as the
 \var{\{\$X+\}} directive.
 \var{\{\$X+\}} directive.
 
 
+\subsection{\var{\$Y} or \var{\$REFERENCEINFO} : Insert Browser information}
+
+This switch controls the generation of browser inforation. It is recognized
+for compatibility with Turbo Pascal and Delphi only, as Browser information
+generation is not yet fully supported.
+
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % Using conditionals and macros
 % Using conditionals and macros
@@ -840,10 +1224,12 @@ some substantial differences, as will be explained in the following.
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % Intel syntax
 % Intel syntax
-\section{Intel syntax (Intel x86 only) }
+\section{Intel syntax}
 \label{se:Intel}
 \label{se:Intel}
 
 
-As of version 0.9.7, \fpc supports Intel syntax in it's \var{asm} blocks.
+As of version 0.9.7, \fpc supports Intel syntax for the Intel family of Ix86
+processors  in it's \var{asm} blocks.
+
 The Intel syntax in your \var{asm} block is converted to AT\&T syntax by the
 The Intel syntax in your \var{asm} block is converted to AT\&T syntax by the
 compiler, after which it is inserted in the compiled source.
 compiler, after which it is inserted in the compiled source.
 The supported assembler constructs are a subset of the normal assembly
 The supported assembler constructs are a subset of the normal assembly
@@ -979,9 +1365,10 @@ The Intel inline assembler supports the following macros :
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % AT&T syntax
 % AT&T syntax
-\section{AT\&T Syntax (Intel x86 only) }
+\section{AT\&T Syntax}
 \label{se:AttSyntax}
 \label{se:AttSyntax}
-\fpc uses the \gnu \var{as} assembler to generate its object files. Since
+\fpc uses the \gnu \var{as} assembler to generate its object files for
+the Intel Ix86 processors . Since
 the \gnu assembler uses AT\&T assembly syntax, the code you write should
 the \gnu assembler uses AT\&T assembly syntax, the code you write should
 use the same syntax. The differences between AT\&T and Intel syntax as used
 use the same syntax. The differences between AT\&T and Intel syntax as used
 in Turbo Pascal are summarized in the following:
 in Turbo Pascal are summarized in the following:
@@ -1136,9 +1523,7 @@ popstack & Right-to-left & Caller  & No \\ \hline
 More about this can be found in \seec{Linking} on linking.
 More about this can be found in \seec{Linking} on linking.
 
 
 
 
-
-
-\subsection{ Intel x86 calling conventions }
+\subsection{ Ix86 calling conventions }
 
 
 Standard entry code for procedures and functions is as follows on the
 Standard entry code for procedures and functions is as follows on the
 x86 architecture:
 x86 architecture:
@@ -1159,7 +1544,7 @@ To have more information on function return values take a look at the
 \seec{RegConvs} section.
 \seec{RegConvs} section.
 
 
 
 
-\subsection{ Motorola 680x0 calling conventions }
+\subsection{ M680x0 calling conventions }
 
 
 Standard entry code for procedures and functions is as follows on the
 Standard entry code for procedures and functions is as follows on the
 680x0 architecture:
 680x0 architecture:
@@ -1185,7 +1570,7 @@ To have more information on function return values take a look at the
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % Telling the compiler what registers have changed
 % Telling the compiler what registers have changed
-\section{Telling the compiler what registers have changed}
+\section{Signalling changed registers}
 \label{se:RegChanges}
 \label{se:RegChanges}
 When the compiler uses variables, it sometimes stores them, or the result of
 When the compiler uses variables, it sometimes stores them, or the result of
 some calculations, in the processor registers. If you insert assembler code
 some calculations, in the processor registers. If you insert assembler code
@@ -1343,7 +1728,7 @@ However, the \var{[ C ]} directive is no longer supoerted as of version
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % Linking an object file in your program
 % Linking an object file in your program
-\section{Explicitly linking an object file in your program}
+\section{Linking to an object file}
 \label{se:LinkIn}
 \label{se:LinkIn}
 
 
 Having declared the external function that resides in an object file,
 Having declared the external function that resides in an object file,
@@ -1412,8 +1797,9 @@ and your Pascal program in \file{fibo.pp}.
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % Linking your program to a library
 % Linking your program to a library
-\section{Linking your program to a library}
+\section{Linking to a library}
 \label{se:LinkOut}
 \label{se:LinkOut}
+
 To link your program to a library, the procedure depends on how you declared
 To link your program to a library, the procedure depends on how you declared
 the external procedure. If you used thediffers a little from the
 the external procedure. If you used thediffers a little from the
 procedure when you link in an object file. although the declaration step
 procedure when you link in an object file. although the declaration step
@@ -1757,7 +2143,7 @@ set up the stack. Then it calls the main program.
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % MMX Support
 % MMX Support
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\chapter{MMX support (Intel x86 only) }
+\chapter{Intel MMX support}
 \label{ch:MMXSupport}
 \label{ch:MMXSupport}
 
 
 \section{What is it about ?}
 \section{What is it about ?}
@@ -2183,7 +2569,7 @@ ReleaseTempHeap;
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % Accessing DOS memory under the GO32 extender
 % Accessing DOS memory under the GO32 extender
-\section{Accessing \dos memory under the Go32 extender (Intel x86 only) }
+\section{using \dos memory under the Go32 extender}
 \label{se:AccessingDosMemory}
 \label{se:AccessingDosMemory}
 
 
 Because \fpc is a 32 bit compiler, and uses a \dos extender, accessing DOS
 Because \fpc is a 32 bit compiler, and uses a \dos extender, accessing DOS
@@ -2587,6 +2973,8 @@ set in the unit flags
 implementation part.
 implementation part.
 \end{enumerate}
 \end{enumerate}
 
 
+\section{reading ppufiles}
+
 We will first create an object ppufile which will be used below. We are
 We will first create an object ppufile which will be used below. We are
 opening unit \file{test.ppu} as an example.
 opening unit \file{test.ppu} as an example.
 
 
@@ -2609,7 +2997,7 @@ begin
 end;
 end;
 \end{verbatim}
 \end{verbatim}
 
 
-\emph{ Remark: }  When a function fails (for example not enough bytes left in an
+Note: When a function fails (for example not enough bytes left in an
 entry) it sets the \var{ppufile.error} variable.
 entry) it sets the \var{ppufile.error} variable.
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -2631,48 +3019,55 @@ tppuheader=packed record
   end;                 
   end;                 
 \end{verbatim}
 \end{verbatim}
 
 
-The header is already read by the ppufile.open command. You can access all
-fields using ppufile.header which holds the current header record
+The header is already read by the \var{ppufile.open} command. 
+You can access all fields using \var{ppufile.header} which holds 
+the current header record.
+
+\begin{tabular}{lp{10cm}}
+\raggedright
+field & description \\ \hline
+\var{id} & 
+this is allways 'PPU', can be checked with
+\mbox{\var{function ppufile.CheckPPUId:boolean;}} \\
+\var{ver} & ppu version, currently '015', can be checked with
+\mbox{\var{function ppufile.GetPPUVersion:longint;}} (returns 15) \\
+\var{compiler}
+ & compiler version used to create the unit. Doesn't contain the
+	 patchlevel. Currently 0.99 where 0 is the high byte and 99 the
+	 low byte \\
+\var{cpu} & cpu for which this unit is created.
+          0 = i386
+          1 = m68k \\
+\var{target} & target for which this unit is created, this depends also on the
+	 cpu! 
+
+	 For i386:
+\begin{tabular}[t]{ll}
+0 & Go32v1 \\
+1 & Go32V2 \\
+2 & Linux-i386 \\
+3 & OS/2 \\
+4 & Win32
+\end{tabular}
 
 
-\begin{description}
-\item[\var{id}] this is always 'PPU' \\
-  \var{function ppufile.CheckPPUId:boolean;}
-\item[\var{ver}] ppu version, currently '015' \\
-  \var{function ppufile.GetPPUVersion:longint;} (returns 15)
-\item[\var{compiler}] compiler version used to create the unit. Doesn't contain the
-patchlevel. Currently 0.99 where 0 is the high byte and 99 the low byte
-\item[\var{cpu}]      cpu for which this unit is created
-  \begin{description}
-     \item[0] i386
-     \item[1] m68k
-  \end{description}
-\item[\var{target}]  target for which this unit is created, this
-depends also on the cpu!
-For i386:
-  \begin{description}
-    \item[\var{0}] Go32v1
-    \item[\var{1}] Go32V2
-    \item[\var{2}] Linux-i386
-    \item[\var{3}] OS/2
-    \item[\var{4}] Win32 (Windows 95/98/NT)
-  \end{description}
 For m68k:
 For m68k:
-  \begin{description}
-    \item[\var{0}] Amiga
-    \item[\var{1}] Mac68k
-    \item[\var{2}] Atari
-    \item[\var{3}] Linux-m68k
-  \end{description}
-
-\item[\var{flags}] the unit flags, contains a combination of
-the uf\_ constants which are definied in \file{ppu.pas}
-\item[\var{size}] size of this unit without this header
-\item[\var{checksum}] checksum of the interface parts of this
-unit, which determine if a unit is changed or not,
-so other units can see if they need to be recompiled
-\end{description}
+\begin{tabular}[t]{ll}
+0 & Amiga \\
+1 & Mac68k \\
+2 & Atari \\
+3 & Linux-m68k
+\end{tabular} \\
+\var{flag} & 
+the unit flags, contains a combination of the uf\_ constants which
+are definied in \file{ppu.pas} \\
+\var{size} & size of this unit without this header \\
+\var{checksum} & 
+  checksum of the interface parts of this unit, which determine if
+         a unit is changed or not, so other units can see if they need to
+	 be recompiled 
+\\ \hline
+\end{tabular}
 
 
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % The sections
 % The sections
 \section{The sections}
 \section{The sections}
 
 
@@ -2689,20 +3084,22 @@ Each entry starts with an entryheader.
   end;      
   end;      
 \end{verbatim}
 \end{verbatim}
 
 
-\begin{description}
-\item[\var{id}] this is 1 or 2 and can be check if it the entry is correctly
+\begin{tabular}{lp{10cm}}
+field & Description \\ \hline
+id & this is 1 or 2 and can be check if it the entry is correctly
 found. 1 means its a main entry, which says that it is part of the
 found. 1 means its a main entry, which says that it is part of the
 basic layout as explained before. 2 toggles that it it a sub entry
 basic layout as explained before. 2 toggles that it it a sub entry
-of a record or object
-\item[\var{nr}] contains the ib constant number which determines what kind of
-entry it is
-\item[\var{size}] size of this entry without the header, can be used to skip entries
-very easily.
-\end{description}
+of a record or object \\
+nr & contains the ib constant number which determines what kind of
+entry it is \\
+size & size of this entry without the header, can be used to skip entries
+very easily. \\ \hline
+\end{tabular}
 
 
-To read an entry you can simply call \var{ppufile.readentry:byte} it returns the
-\var{tppuentry.nr} field, which holds the type of the entry. A common way how
-this works is (example is for the symbols):
+To read an entry you can simply call \var{ppufile.readentry:byte}, 
+it returns the
+\var{tppuentry.nr} field, which holds the type of the entry. 
+A common way how this works is (example is for the symbols):
 
 
 \begin{verbatim}
 \begin{verbatim}
   repeat
   repeat
@@ -2716,47 +3113,45 @@ this works is (example is for the symbols):
 \end{verbatim}
 \end{verbatim}
 
 
 Then you can parse each entry type yourself. \var{ppufile.readentry} will take
 Then you can parse each entry type yourself. \var{ppufile.readentry} will take
-care of skipping unread byte in the entry an read the next entry
+care of skipping unread bytes in the entry an read the next entry
 correctly! A special function is \var{skipuntilentry(untilb:byte):boolean;}
 correctly! A special function is \var{skipuntilentry(untilb:byte):boolean;}
-which will read the ppufile until it finds entry untilb in the main
-entrys.
+which will read the ppufile until it finds entry \var{untilb} in the main
+entries.
 
 
-Parsing an entry can be done with \var{ppufile.get<type>} functions. The
+Parsing an entry can be done with \var{ppufile.getxxx} functions. The
 available functions are:
 available functions are:
-
 \begin{verbatim}
 \begin{verbatim}
-    procedure ppufile.getdata(var b;len:longint);
-    function  getbyte:byte;                                                     
-    function  getword:word;                                                     
-    function  getlongint:longint;                                               
-    function  getreal:ppureal;                                                  
-    function  getstring:string;      
+procedure ppufile.getdata(var b;len:longint);
+function  getbyte:byte;                                                     
+function  getword:word;                                                     
+function  getlongint:longint;                                               
+function  getreal:ppureal;                                                  
+function  getstring:string;      
 \end{verbatim}
 \end{verbatim}
 
 
 To check if you're at the end of an entry you can use the following
 To check if you're at the end of an entry you can use the following
 function:
 function:
 
 
 \begin{verbatim}
 \begin{verbatim}
-   function  EndOfEntry:boolean;                                               
+function  EndOfEntry:boolean;                                               
 \end{verbatim}
 \end{verbatim}
+{\em notes:}
+\begin{enumerate}
+\item \var{ppureal} is the best real that exists for the cpu where the
+unit is created for. Currently it is \var{extended} for i386 and 
+\var{single} for m68k.
+\item the \var{ibobjectdef} and \var{ibrecorddef} have stored a definition 
+and symbol section for themselves. So you'll need a recursive call. See
+\file{ppudump.pp} for a correct implementation.
+\end{enumerate}
 
 
-\emph{ Remark: } ppureal is the bestreal that is possible for the cpu where the
-unit is created for. Currently its extended for i386 and single for m68k.
-
-\emph{ Remark: }  the ibobjectdef and ibrecorddef have stored a definition and
-symbol section for themselves. So you'll need a recursive call. See
-\file{ppudump.pas} for a good implementation.
-
-For a complete list of entries and what their fields contain can be found
-in \file{ppudump.pp}
+A complete list of entries and what their fields contain can be found
+in \file{ppudump.pp}.
 
 
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Creating ppufiles
 \section{Creating ppufiles}
 \section{Creating ppufiles}
 
 
-To create a new ppufile works almost the same as writing. First you need
+Creating a new ppufile works almost the same as writing. First you need
 to init the object and call create:
 to init the object and call create:
-
 \begin{verbatim}
 \begin{verbatim}
   ppufile:=new(pppufile,'output.ppu');
   ppufile:=new(pppufile,'output.ppu');
   ppufile.create;
   ppufile.create;
@@ -2764,7 +3159,6 @@ to init the object and call create:
 
 
 After that you can simply write all needed entries. You'll have to take
 After that you can simply write all needed entries. You'll have to take
 care that you write at least the basic entries for the sections:
 care that you write at least the basic entries for the sections:
-
 \begin{verbatim}
 \begin{verbatim}
   ibendinterface
   ibendinterface
   ibenddefs
   ibenddefs
@@ -2775,38 +3169,36 @@ care that you write at least the basic entries for the sections:
 \end{verbatim}
 \end{verbatim}
 
 
 Writing an entry is a little different than reading it. You need to first
 Writing an entry is a little different than reading it. You need to first
-put everything in the entry with \var{ppufile.put<type>}:
-
+put everything in the entry with ppufile.putxxx:
 \begin{verbatim}
 \begin{verbatim}
-    procedure putdata(var b;len:longint);
-    procedure putbyte(b:byte);                                                  
-    procedure putword(w:word);                                                  
-    procedure putlongint(l:longint);                                            
-    procedure putreal(d:ppureal);                                               
-    procedure putstring(s:string);
+procedure putdata(var b;len:longint);                                       
+procedure putbyte(b:byte);                                                  
+procedure putword(w:word);                                                  
+procedure putlongint(l:longint);                                            
+procedure putreal(d:ppureal);                                               
+procedure putstring(s:string); 
 \end{verbatim}
 \end{verbatim}
 
 
 After putting all the things in the entry you need to call
 After putting all the things in the entry you need to call
-\var{ppufile.writeentry(ibnr:byte)} where \var{ibnr}
-is the entry number you're writing.
+\var{ppufile.writeentry(ibnr:byte)} where \var{ibnr} is the entry number 
+you're writing.
 
 
-At the end of the file you need to call ppufile.writeheader to write the
-new header to the file. This takes automaticly care of the new size of the
-ppufile. When that's also done you can call \var{ppufile.close} and dispose the
+At the end of the file you need to call \var{ppufile.writeheader} to write the
+new header to the file. This takes automatically care of the new size of the
+ppufile. When that is also done you can call \var{ppufile.close} and dispose the
 object.
 object.
 
 
 Extra functions/variables available for writing are:
 Extra functions/variables available for writing are:
-
 \begin{verbatim}
 \begin{verbatim}
-    ppufile.NewHeader;                                           
-    ppufile.NewEntry;
+ppufile.NewHeader;                                           
+ppufile.NewEntry;   
 \end{verbatim}
 \end{verbatim}
-
-this will give you a clean header or entry. Normally called automaticly
-in \var{ppufile.writeentry()}, so you can't forget it.
+This will give you a clean header or entry. Normally called automatically
+in \var{ppufile.writeentry}, so you can't forget it.
 \begin{verbatim}
 \begin{verbatim}
-ppufile.flush;
+ppufile.flush;                                                            
 \end{verbatim}
 \end{verbatim}
+
 to flush the current buffers to the disk
 to flush the current buffers to the disk
 \begin{verbatim}
 \begin{verbatim}
 ppufile.do_crc:boolean;
 ppufile.do_crc:boolean;