- several spelling mistakes fixed (after 2nd review)

+ smallint range defined
+ Dec procedure example for function overloading precised (is defined
replaced by 'could' since Dec is inline in compiler now).
+ Export with function overloading will work correctly (name is still
mangled) - it seems only cdecl does not mangle the name.
* fixed problem in my last commit : cdecl is for C calling convention, not
for GCC (since on BeOS the calling convention is stdcall anyways)...
+ IndexChar / IndexDWord / IndexWord had incorrect formatting
+ Ofs() and Seg() had incorrect formatting - Ptr() : DoMapping no longer exists
This commit is contained in:
carl 2001-08-25 03:06:48 +00:00
parent fc1b58c22c
commit c037fd4a48

View File

@ -556,6 +556,7 @@ The integer types, and their ranges and sizes, that are predefined in
Type & Range & Size in bytes \\ \hline
Byte & 0 .. 255 & 1 \\
Shortint & -128 .. 127 & 1\\
Smallint & -32768 .. 32767 & 2\\
Integer & -32768 .. 32767 & 2\footnote{The integer type is redefined as
longint if you are in Delphi or ObjFPC mode, and then has size 4} \\
Word & 0 .. 65535 & 2 \\
@ -1169,8 +1170,8 @@ For \var{Trec7}, \var{B} is aligned on a 4 byte boundary, since it's size --
7 -- is larger than 4. However, in \var{Trec8}, it is aligned on a 8-byte
boundary, since 8 is the first power of two that is greater than 7, thus
making the total size of the record 16.
As from version 0.9.3, \fpc supports also the 'packed record', this is a
record where all the elements are byte-aligned.
\fpc supports also the 'packed record', this is a record where all the
elements are byte-aligned.
Thus the two following declarations are equivalent:
\begin{verbatim}
{$PackRecords 1}
@ -1219,10 +1220,9 @@ Delete element & \var{exclude} \\ \hline
\end{FPCltable}
You can compare two sets with the \var{<>} and \var{=} operators, but not
(yet) with the \var{<} and \var{>} operators.
As of compiler version 0.9.5, the compiler stores small sets (less than 32
elements) in a Longint, if the type range allows it. This allows for faster
processing and decreases program size. Otherwise, sets are stored in 32
bytes.
The compiler stores small sets (less than 32 elements) in a Longint, if the
type range allows it. This allows for faster processing and decreases
program size. Otherwise, sets are stored in 32 bytes.
\subsection{File types}
File types are types that store a sequence of some base type, which can be
any type except another file type. It can contain (in principle) an infinite
@ -1378,8 +1378,8 @@ Pascal it isn't necessary to use the address operator (\var{@})
when assigning a procedural type variable, whereas in \fpc it is required
(unless you use the \var{-So} switch, in which case you can drop the address
operator.)
\begin{remark} The modifiers concerning the calling conventions (\var{cdecl},
\var{pascal}, \var{stdcall} and \var{popstack} stick to the declaration;
\begin{remark} The modifiers concerning the calling conventions
must be the same as the declaration;
i.e. the following code would give an error:
\begin{verbatim}
Type TOneArgCcall = Procedure (Var X : integer);cdecl;
@ -1933,7 +1933,7 @@ need. \var{DefaultHandler} is declared as follows:
\end{verbatim}
In addition to the message method with a \var{Integer} identifier,
\fpc also supports a messae method with a string identifier:
\fpc also supports a message method with a string identifier:
\begin{verbatim}
Procedure TMyObject.MyStrHandler(Var Msg); Message 'OnClick';
\end{verbatim}
@ -2475,7 +2475,7 @@ Operator & Operation \\ \hline
\var{or} & logical or \\
\var{xor} & logical xor \\ \hline
\end{FPCltable}
\begin{remark} Boolean expressions are ALWAYS evaluated with short-circuit
\begin{remark} Boolean expressions are always evaluated with short-circuit
evaluation. This means that from the moment the result of the complete
expression is known, evaluation is stopped and the result is returned.
For instance, in the following expression:
@ -2688,7 +2688,7 @@ end;
\end{verbatim}
The compiler will generate a \var{Duplicate case label} error when compiling
this, because the 3 also appears (implicitly) in the range \var{1..5}. This
is similar to Delhpi syntax.
is similar to Delphi syntax.
\end{remark}
The following are valid case statements:
\begin{verbatim}
@ -2991,9 +2991,10 @@ This will tell the compiler that it should save and restore the contents of
the \var{EAX} and \var{EBX} registers when it encounters this asm statement.
\fpc supports various styles of assembler syntax. By default, \var{AT\&T}
syntax is assumed. You can change the default assembler style with the
\var{\{\$asmmode xxx\}} switch in your code, or the \var{-R} command-line
option. More about this can be found in the \progref.
syntax is assumed for the 80386 and compatibles platform. You can change
the default assembler style with the \var{\{\$asmmode xxx\}} switch in
your code, or the \var{-R} command-line option. More about this can be
found in the \progref.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@ -3272,8 +3273,8 @@ The parameter lists must differ at least in one of it's elements type.
When the compiler encounters a function call, it will look at the function
parameters to decide which one of the defined functions it should call.
This can be useful if you want to define the same function for different
types. For example, in the RTL, the \var{Dec} procedure is
is defined as:
types. For example, in the RTL, the \var{Dec} procedure could be
defined as:
\begin{verbatim}
...
Dec(Var I : Longint;decrement : Longint);
@ -3288,8 +3289,8 @@ function call, and looks if there is a function definition which matches the
specified parameter list. If the compiler finds such a function, a call is
inserted to that function. If no such function is found, a compiler error is
generated.
You cannot have overloaded functions that have a \var{cdecl} or \var{export}
modifier (Technically, because these two modifiers prevent the mangling of
You cannot have overloaded functions that have a \var{cdecl} modifier
(Technically, because this modifier prevents the mangling of
the function name by the compiler).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@ -3443,13 +3444,13 @@ end.
code, thus it is case sensitive.
\end{remark}
The \var{Alias} modifier, combined with the \var{Public} modifier, make a
powerful tool for making externally accessible object files.
powerful tool for making externally accessible symbols in pascal object files.
\subsection{cdecl}
\label{se:cdecl}
The \var{cdecl} modifier can be used to declare a function that uses a C
type calling convention. This must be used if you wish to access functions in
an object file generated by the GCC compiler. It allows you to use the function in
an object file generated by standard C compilers. It allows you to use the function in
your code, and at linking time, you must link the object file containing the
\var{C} implementation of the function or procedure.
As an example:
@ -3609,7 +3610,6 @@ listed in \seet{Modifs}.
Modifier & Why not supported ? \\ \hline
Near & \fpc is a 32-bit compiler.\\
Far & \fpc is a 32-bit compiler. \\
%External & Replaced by \var{C} modifier. \\ \hline
\end{FPCltable}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@ -4406,11 +4406,6 @@ be inserted in the assembler generated by the compiler.
You can still use conditionals in your assembler, the compiler will
recognise it, and treat it as any other conditionals.
\begin{remark}
Before version 0.99.1, \fpc did not support reference to variables by
their names in the assembler parts of your code.
\end{remark}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Assembler procedures and functions
\section{Assembler procedures and functions}
@ -5531,7 +5526,7 @@ Function Filesize (Var F : Any file type) : Longint;
\Description
\var{Filesize} returns the total number of records in file \var{F}.
It cannot be invoked with a file of type \var{Text}. (under \linux and \unix, this
also means that it cannot be invoked on pipes.)
also means that it cannot be invoked on pipes).
If \var{F} is empty, 0 is returned.
\Errors
None.
@ -5643,7 +5638,7 @@ Procedure Freemem (Var P : pointer; Count : Longint);
\Description
\var{Freemem} releases the memory occupied by the pointer \var{P}, of size
\var{Count} (in bytes), and returns it to the heap. \var{P} should point to the memory
allocated to a dynamical variable.
allocated to a dynamic variable.
\Errors
An error will occur when \var{P} doesn't point to the heap.
\SeeAlso
@ -5810,6 +5805,7 @@ The position is zero-based.
\begin{function}{IndexChar}
\Declaration
function IndexChar(var buf;len:longint;b:char):longint;
\Declaration
function IndexChar0(var buf;len:longint;b:char):longint;
\Description
\var{IndexChar} searches the memory at \var{buf} for maximally \var{len}
@ -5829,6 +5825,7 @@ a null character is found, and returns -1 in that case.
\begin{function}{IndexDWord}
\Declaration
function IndexDWord(var buf;len:longint;DW:DWord):longint;
\Description
\var{IndexChar} searches the memory at \var{buf} for maximally \var{len}
positions for the DWord \var{DW} and returns it's position if it found one.
If \var{DW} is not found then -1 is returned.
@ -5845,6 +5842,7 @@ The position is zero-based.
\begin{function}{IndexWord}
\Declaration
function IndexWord(var buf;len:longint;W:word):longint;
\Description
\var{IndexChar} searches the memory at \var{buf} for maximally \var{len}
positions for the Word \var{W} and returns it's position if it found one.
If \var{W} is not found then -1 is returned.
@ -6018,7 +6016,7 @@ Procedure LongJmp (Var env : Jmp\_Buf; Value : Longint);
\Description
\var{LongJmp} jumps to the adress in the \var{env} \var{jmp\_buf},
and resores the registers that were stored in it at the corresponding
and restores the registers that were stored in it at the corresponding
\seef{SetJmp} call.
In effect, program flow will continue at the \var{SetJmp} call, which will
return \var{value} instead of 0. If you pas a \var{value} equal to zero, it will be
@ -6193,7 +6191,7 @@ None.
\begin{function}{Ofs}
\Declaration
Function Ofs Var X : Longint;
Function Ofs (Var X) : Longint;
\Description
\var{Ofs} returns the offset of the address of a variable.
@ -6334,10 +6332,7 @@ segment \var{Sel} and offset \var{Off}.
\begin{enumerate}
\item In the 32-bit flat-memory model supported by \fpc, this
function is obsolete.
\item The returned address is simply the offset. If you recompile
the RTL with \var{-dDoMapping} defined, then the compiler returns the
following : \var{ptr := pointer(\$e0000000+sel shl 4+off)} under \dos, or
\var{ptr := pointer(sel shl 4+off)} on other OSes.
\item The returned address is simply the offset.
\end{enumerate}
\end{remark}
\Errors
@ -6459,7 +6454,7 @@ Procedure Reset (Var F : Any File Type[; L : Longint]);
If \var{F} is an untyped or typed file, then it is opened according to
the mode specified in \var{filemode}.
If \var{F} is an untyped file, the record size can be specified in
the optional parameter \var{L}. Default a value of 128 is used.
the optional parameter \var{L}. A default value of 128 is used.
File sharing is not taken into account when calling \var{Reset}.
\Errors
@ -6605,7 +6600,7 @@ A run-time error is generated if the file \var{F} isn't opened.
\begin{function}{Seg}
\Declaration
Function Seg Var X : Longint;
Function Seg (Var X) : Longint;
\Description
\var{Seg} returns the segment of the address of a variable.
@ -6681,7 +6676,7 @@ Procedure SetTextBuf (Var f : Text; Var Buf[; Size : Word]);
\var{SetTextBuf} assigns an I/O buffer to a text file. The new buffer is
located at \var{Buf} and is \var{Size} bytes long. If \var{Size} is omitted,
then \var{SizeOf(Buf)} is assumed.
The standard buffer of any text file is 128 bytes long. For heavy I/0
The standard buffer of any text file is 128 bytes long. For heavy I/O
operations this may prove too slow. The \var{SetTextBuf} procedure allows
you to set a bigger buffer for your application, thus reducing the number of
system calls, and thus reducing the load on the system resources.