See Changelog 20000217 09:00

This commit is contained in:
Luiz Rafael Culik
2000-02-17 11:11:52 +00:00
parent 6291c11d67
commit a037b3dd6d
23 changed files with 221 additions and 162 deletions

View File

@@ -1,3 +1,27 @@
20000217-09:00 GMT-3 Luiz Rafael Culik <culik@sl.conex.net>
*doc/vm.txt
doc/harbext.txt
doc/tracing.txt
doc/statics.txt
doc/readme.txt
doc/pragma.txt
doc/pcode.txt
doc/gmake.txt
doc/cvshowto.txt
doc/compiler.txt
*Small formating by Brian Hays
*source/rtl/typefile.prg
*Fixed a worning reported by Victor
*utils/hbdoc/hbdoc.prg
*utils/hbdoc/genos2.prg
*utils/hbdoc/gentrf.prg
*utils/hbdoc/genng.prg
*utils/hbdoc/genhtm.prg
*utils/hbdoc/genrtf.prg
*utils/hbdoc/genhpc.prg
*utils/hbdoc/genasc.prg
*Small fixes
20000217-10:08 GMT+3 Alexander Kresin
* source/pp/hbpplib.c
* added hb_comp_files declaration to fix error while hbrun compiling

View File

@@ -27,12 +27,12 @@
* The Harbour command line options:
* =================================
*
* /a automatic memvar declaration"
* /a automatic memvar declaration
* -----------------
* This causes that all variables declared by PRIVATE or PUBLIC
* statements are automatically declared as MEMVAR variables.
* This causes all variables declared by PARAMETER, PRIVATE or PUBLIC
* statements to be automatically declared as MEMVAR variables.
*
* /b debug info"
* /b debug info
* -----------------
* The compiler generates all information required for debugging
*
@@ -47,7 +47,7 @@
* is equal to 0 if there are no errors in compiled
* source file.
* /es1 - all warnings are ignored and exit code returned by
* the compiler is set to non-zero value.
* the compiler is set to a non-zero value.
* /es2 - all warnings are treated as errors and no output
* file is created. The exit code is set to non-zero
* value.
@@ -71,33 +71,33 @@
* the output file. The PROCLINE() function will return 0 for
* modules compiled using this option.
*
* /m compile module only
* /m compile current module only
* -----------------
*
* /n no implicit starting procedure
* -----------------
* The compiler does not create a procedure with the same name as
* the compiled file. This causes that any declarations placed
* before the first PROCEDURE or FUNCTION statement have the file
* the compiled file. This means that any declarations placed
* before the first PROCEDURE or FUNCTION statement have file-
* wide scope and can be accessed/used in all functions/procedures
* defined in the compiled source file. All executable statements
* placed on the beginning of the file and before the first
* placed at the beginning of the file and before the first
* PROCEDURE/FUNCTION statement are ignored.
*
* /o<path> object file drive and/or path
* /o<path> output file drive and/or path
* -----------------
*
* /p generate pre-processed output (.ppo) file
* -----------------
* The compiler creates the file that contain the result of
* pre-processing of the source file.
* The compiler only creates the file that contains the result of
* pre-processing the source file.
*
* /q quiet
* -----------------
* The compiler does not print any messages during compiling
* (except the copyright info).
*
* /q0 be really quiet and don't display even copyright info
* /q0 be really quiet and don't display even the copyright info
*
* /r[<lib>] request linker to search <lib> (or none)
* -----------------
@@ -109,10 +109,10 @@
*
* /t<path> path for temp file creation
* -----------------
* Currently not used in Harbour (the Harbour compile does not
* create any temporary files at this moment).
* Currently not used in Harbour (the Harbour compiler does not
* create any temporary files).
*
* /u[<file>] use command def set in <file> (or none)
* /u[<file>] use command definition set in <file> (or none)
* -----------------
* Not supported yet.
*
@@ -127,7 +127,7 @@
*
* /w0 - no warnings
* /w or /w1 - Clipper compatible warnings
* /w2 - some usefull warnings missed in Clipper
* /w2 - some useful warnings missed in Clipper
* /w3 - warnings generated for Harbour language extensions
*
* /x[<prefix>] set symbol init function name prefix (for .c only)
@@ -142,9 +142,9 @@
* -----------------
* The Harbour compiler uses the FLEX and YACC utilities to parse
* the source code and to generate the required output file. This
* option allows to trace the activity of these utilities.
* option traces the activity of these utilities.
*
* /z suppress shortcutting (.and. & .or.)
* /z suppress logical shortcutting (.and. & .or.)
* -----------------
*
* /10 restrict symbol length to 10 characters
@@ -165,25 +165,25 @@
* =============================================================
*
* NOTE:
* If you want 100% compatible compiler and runtime libraries then
* you have to define HARBOUR_STRICT_CLIPPER_COMPATIBILITY option. This
* option should be defined in include/hbsetup.h file (in fact this
* option is placed into comment by default - you need remove /* */
* characters only). This change have to be done before invoking
* If you want a 100% compatible compile and runtime libraries then
* you have to define HARBOUR_STRICT_CLIPPER_COMPATIBILITY. This
* option should be defined in the file include/hbsetup.h (in fact this
* option is placed in a comment by default - you need to remove the
* /* */ characters only). This change has to be done before invoking
* the make utility.
*
*
* Handling of undeclared variables
* --------------------------------
* When a value is assigned to an undeclared variable and '-v'
* command line option is not used then the Clipper compiler assumes
* When a value is assigned to an undeclared variable and the '-v'
* command line option is not used, then the Clipper compiler assumes
* that the variable is a PRIVATE or a PUBLIC variable and generates
* POPM (pop memvar) opcode.
*
* When a value of undeclared variable is accessed and '-v' command
* line option is not used the Clipper compiler generates PUSHV (push
* variable) opcode that determines the type of variable at runtime.
* If the field with requested name exists in a current workarea then
* When the value of an undeclared variable is accessed and the '-v'
* command line option is not used, the Clipper compiler generates PUSHV
* (push variable) opcode that determines the type of variable at runtime.
* If a field with the requested name exists in the current workarea then
* its value is used. If there is no field then a PRIVATE or a PUBLIC
* variable is used (if exists).
*
@@ -221,19 +221,19 @@
* -----------------------------------------------
* The Clipper compiler uses the special opcode PUSHP to pass a
* reference to an undeclared variable ( '@' operator ). The type of
* passed variable is checked at runtime (field or memvar). However the
* field variables cannot be passed by the reference. It causes that
* passed variable is checked at runtime (field or memvar). However,
* field variables cannot be passed by reference. This means that
* Clipper checks the memvar variable only and doesn't look for a field.
* This is the reason why the Harbour compiler uses the usual
* PUSHMEMVARREF opcode in such cases. Notice that the runtime behavior
* is the same in Clipper and in Harbour - the generated opcodes are
* different only.
* is the same in Clipper and in Harbour - only the generated opcodes
* are different.
*
*
* Handling of object messages
* ---------------------------
* The HARBOUR_STRICT_CLIPPER_COMPATIBILITY setting determines
* the way the chained send messages are handled.
* the way chained send messages are handled.
*
* For example, the following code:
*
@@ -249,9 +249,9 @@
*
* in non-strict mode.
*
* In practice in Clipper it will call COUNT() function two times:
* the first time before addition and the second one after addition,
* in Harbour COUNT() function will be called only once, before addition.
* In practice, Clipper will call the COUNT() function two times:
* the first time before addition and the second one after addition.
* In Harbour, COUNT() will be called only once, before addition.
*
* The Harbour (non-strict) method is:
* 1) faster
@@ -263,9 +263,9 @@
* Initialization of static variables
* ----------------------------------
*
* There is a difference in handling of initialization of static
* There is a difference in the initialization of static
* variables that are initialized with a codeblock that refers to
* a local variarble. For example:
* a local variable. For example:
*
* PROCEDURE TEST()
* LOCAL MyLocalVar
@@ -276,22 +276,22 @@
*
* RETURN
*
* The above code compiles fine in Clipper however it generates a
* The above code compiles fine in Clipper, but it generates a
* runtime error Error/BASE 1132 Bound error: array access
* Called form (b)STATICS$(0)
*
* In Harbour this code generates a compile time error:
* Error E0009 Illegal variable (b) initializer: 'MyLocalVar'
*
* Both Clipper and Harbour are handing all local variables used in a
* Both Clipper and Harbour are handling all local variables used in a
* codeblock in a special way: they are detached from the local stack
* of function/procedure where they are declared. This allows to access
* these variables after the exit from a function/procedure. However
* of function/procedure where they are declared. This allows access to
* these variables after the exit from a function/procedure. However,
* all static variables are initialized in a separate procedure
* ('STATICS$' in Clipper and '(_INITSTATICS)' in Harbour) before the
* main procedure and before all INIT procedures. The local variables
* don't exist on the eval stack when static variables are initialized
* then they cannot be detached.
* don't exist on the eval stack when static variables are initialized,
* so they cannot be detached.
*
* $END$
*/

View File

@@ -2,7 +2,7 @@
* $Id$
*/
Here's how to upload you changes to the CVS server
Here's how to upload your changes to the CVS server
==================================================
1.) Do the changes in the source, and in parallel modify ChangeLog
@@ -15,10 +15,10 @@ Here's how to upload you changes to the CVS server
8.) New email message, paste the new ChangeLog entry
9.) Copy and paste the date&time to the subject after "CHANGELOG: "
10.) The CVS pops up a window with the changed filenames
11.) Check if all the changed filenames are referred in the ChangeLog entry,
11.) Check if all the changed filenames are referred in the ChangeLog entry,
if not, make the corrections and start again
12.) Paste the date&time to the CVS window, save, exit
13.) CVS is now uploading,
13.) CVS is now uploading,
if there are any errors, make the corrections and start again
14.) Send the email message containing the changes
15.) Go offline

View File

@@ -18,9 +18,9 @@ usually more powerful than any native make.
Each directory in the project contains one makefile, called Makefile,
which lists the data (file names, directory names, etc.) that is used
to determine how to bring ever target up to date within that
to determine how to bring every target up to date within that
directory. There are no rules in the Makefiles, to keep them
platform-independent. The rules itself are included from the
platform-independent. The rules themselves are included from the
"appropriate" configuration file.
For example, this could be the Makefile for the VM library:
@@ -125,7 +125,7 @@ compiled with gcc). This has two advantages:
USAGE
=====
To use the system, you need to install GNU-make 3.75 or later in your
To use the system, you need to install GNU-make 3.75 or later on your
system. To check this, type "make -v"; you should see
GNU Make version 3.75, by Richard Stallman and Roland McGrath.
@@ -248,4 +248,4 @@ program in tests/working by using the build batch file. For example,
can also be used for modules that aren't in the Makefile. You can also
pass parameters to the program. For example, 'build readfile harbour.ini'
will rebuild the readfile.prg program and run it with 'harbour.ini' as a
command line parameter.
command line parameter.

View File

@@ -5,13 +5,34 @@
Language extensions:
--------------------
* Classes generation and management (Clipper never provided this)
* @<FunctionName>() --> returns the pointer (address) to a function
* Class TGetList --> object oriented support for GetLists management
* ProcName() support for methods names.
* Memory() new returned values.
* Class generation and management.
Clipper only allowed creation of objects from a few standard
classes.
In Harbour, you can create your own classes--complete with
Methods, Instance Variables, Class Variables and Inheritance.
Entire applications can be designed and coded in Object Oriented
style.
* @<FunctionName>()
Returns the pointer (address) to a function.
* Class TGetList
Object oriented support for GetLists management.
* ProcName() support for class Method names.
Class Methods can be retrieved from the call stack.
* Memory() has new return values.
See hbmemory.ch
* Transform() --> new function in format string
@0 Make a zero padded string out of the number.
* Optional Compile Time STRONG TYPE declaration (and compile time TYPE
MISMATCH warnings) Ex.: LOCAL/STATIC Var AS ...
MISMATCH warnings)
Example: LOCAL/STATIC Var AS ...
* The Harbour debugger provides new interesting classes:
- Class TDbWindow could be the foundation for a generic multiplatform
- Class TForm

View File

@@ -5,7 +5,7 @@
The Clipper OBJ and pcode model (GNU|Open|Clipper project)
==========================================================
Lets consider the following Clipper sample Test.prg:
Let's consider the following Clipper sample Test.prg:
function Main()
@@ -15,7 +15,7 @@ function Main()
return nil
Once it gets compiled into a OBJ, what is there inside it ?
Once it gets compiled into a OBJ, what is there inside it?
In fact, what we get is the equivalent to the following C language
application:
@@ -29,23 +29,23 @@ void MAIN( void )
VirtualMachine( pcode, symbols );
}
Basically, Test.prg source code has been converted into a sequence
of pcode bytes contained into the array pcode[] = { ... } and all our MAIN()
function does is invoke, at run-time, a Clipper VirtualMachine() that will
of pcode bytes contained in the array pcode[] = { ... }. All our MAIN()
function does is invoke, at run-time, a Clipper VirtualMachine() that will
process those pcode bytes.
Lets review the Test.prg pcode structure in more detail:
Let's review the Test.prg pcode structure in more detail:
0000 (2A) LINE 0 2A 00 00
0003 (2A) LINE 3 2A 03 00
0006 (13) SYMF [QOUT] 13 02 00
0009 (01) PUSHC "Hello world!" 01 ...
0018 (27) DO(1) 27 01 00
001B (2A) LINE 5 2A 05 00
001B (2A) LINE 5 2A 05 00
001E (7B) UNDEF 7B
001F (79) SAVE_RET 79
0020 (1E) JMP 0023 1E 00 00
0020 (1E) JMP 0023 1E 00 00
0023 (60) ENDPROC 60
@@ -61,10 +61,10 @@ pcode.h
...
So finally it may looks like:
So finally it will look like:
BYTE pcode[] = { LINE, 0, 0,
LINE, 3, 0,
BYTE pcode[] = { LINE, 0, 0,
LINE, 3, 0,
SYMF, 2, 0,
PUSHC, 'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!', '0',
DO, 1, 0,
@@ -75,17 +75,17 @@ BYTE pcode[] = { LINE, 0, 0,
ENDPROC };
And what is it SYMBOL symbols[] ? Clipper creates a symbol table into
the OBJ that later on will be used to create a dynamic symbol table
shared by the entire application. Each of those symbols have the following
And what is SYMBOL symbols[] ? Clipper creates a symbol table in
the OBJ that later on will be used to create a dynamic symbol table
shared by the entire application. Each of those symbols has the following
structure:
typedef struct
{
char * szName; // Clipper infact keeps an array here (11 bytes).
char * szName; // Clipper in fact keeps an array here (11 bytes).
BYTE bScope;
LPVOID pVoid;
} SYMBOL;
} SYMBOL;
#define PUBLIC 0 // the scope of the function!
@@ -93,34 +93,34 @@ SYMBOL symbols[] = { { "MAIN", PUBLIC, MAIN },
{ "QQOUT", PUBLIC, QQOUT } };
Lets remember that the name of a function (MAIN, QQOUT) it is the address of the
function, so our symbol table will be ready to use it to jump and execute any
Let's remember that the name of a function (MAIN, QQOUT) is the address of the
function, so our symbol table will be ready to use it to jump and execute any
linked function.
In fact, the pcode SYMF 2, 0 in our sample, will instruct the VirtualMachine()
to use the 2 symbol which it is QQOUT.
to use the 2 symbol, which is QQOUT.
Lets read the pcode:
Let's read the pcode:
LINE 0, 0 => We are located at line 0
LINE 3, 0 => We are located at line 3
SYMF 2, 0 => We are going to call QQOUT from our symbol table
PUSHC ... => This string is going to be used as a parameter
DO 1, 0 => ok, jump to QQOUT and remember we have just suplied 1 parameter
DO 1, 0 => ok, jump to QQOUT and remember we have just supplied 1 parameter
LINE 5, 0 => We are back from QQOUT and we are located at line 5
UNDEF => we are going to return this value (NIL)
SAVE_RET => Ok, return it
JMP 0 => We don't jump to elsewhere, just continue to next pcode byte
ENDPROC => This is the end. We have completed this function execution
All these instructions will be evaluated from our VirtualMachine() function
(Clipper names it _plankton()). All functions end using ENDPROC, so when
the VirtualMachine() finds ENDPROC it knows it has reached the end of a
All these instructions will be evaluated from our VirtualMachine() function
(Clipper names it _plankton()). All functions end using ENDPROC, so when
the VirtualMachine() finds ENDPROC it knows it has reached the end of a
function pcode.
Now that we clearly understand this basic model we are ready to start
implementing 'production rules' on our yacc (clipper.y) syntax to generate
the specific output file (test.c) with the above structure (or we could
the specific output file (test.c) with the above structure (or we could
easily just generate the OBJ file for it).
to be continued...

View File

@@ -5,13 +5,14 @@
INTRODUCTION
============
This file explains what is and how to use the #pragma directive
with Harbour.
with Harbour. Primarily, it gives you control over the compiler's
command-line switches within your source code.
WHAT IS
=======
The #pragma is a directive used inside the source code in many compilers
to change the behaviour of the compiler at compile time.
to change the behavior of the compiler at compile time.
USAGE
@@ -53,13 +54,13 @@ This is the list of the supported commands and switches:
* WARNINGLEVEL =<nLevel> /W<nLevel>
* SHORTCUTTING =<On/Off> /Z<+/->
The switches have the same behaviour as the corresponding compiler ones
and the commands are sinonyms for the switches.
The switches have the same behavior as the corresponding compiler ones
and the commands are synonyms for the switches.
* TRACEPRAGMAS
This command shows pragma activity at compile time when enabled.
NOTE: You can use the abbreviated commands mode by typing only the
NOTE: You can use the abbreviated command mode by typing only the
first eight chars.
@@ -79,8 +80,8 @@ function Test()
return nil
This is the same as calling Harbour with the -n switch in the command line,
but with the great benefit that if you forgot to pass the switch if will be
used anyway because it is included inside the source.
but with the great benefit that if you forgot to pass the switch, it will
be used anyway because it is included inside the source.
===========
Dec 1, 1999

View File

@@ -3,7 +3,8 @@
*/
The Harbour project
The Harbour Project
************************************************************************
* This file contains information on obtaining, installing, and using *
@@ -44,10 +45,6 @@ in order to create a functioning program.
Please test running Harbour against your Clipper source code and report
any problems that might occur.
Very important: The preprocessor functionality is not built in yet. So
you may test only Clipper language without preprocessor commands, etc.
Installation
------------
@@ -57,7 +54,7 @@ Installation
directories.
2. Compile Harbour using your C compiler. Make files for different
platforms are included in the <WHERE ARE THEY?> directory.
platforms are included in the HARBOUR\HARBOUR directory.
--- COPYRIGHT ---
@@ -67,7 +64,7 @@ What copyright information do we have
--- LICENCE ---
Information about the License for usage of Harbour is available in the
file LICENCE.TXT (when we have a license)
file LICENCE.TXT.
--- DISCLAIMER ---

View File

@@ -3,20 +3,20 @@
*/
I just started implementing Classes and objects creation when I realized
Harbour is not managing statics variables yet (Harbour recognizes them but
Harbour is not managing static variables yet (Harbour recognizes them but
does not generate the proper pcode for them).
So I would like to make an introduction to statics variables management as
So I would like to make an introduction to static variables management as
it is a sophisticated system that Harbour is going to implement.
It is something publically known that Clipper statics variables are
located at the bottom of the data segment. This has caused all kind of
It is something publically known that Clipper static variables are
located at the bottom of the data segment. This has caused all kinds of
troubles. This is why when I designed Five I did it in a way that could not
cause any trouble in the future.
In Harbour all statics variables (and I mean on all PRGs) are stored in
just one Harbour array (a Clipper language array), this guaranties that we
may have as many statics variables as desired without limits (just limited
In Harbour all static variables (and I mean on all PRGs) are stored in
just one Harbour array (a Clipper language array), this guarantees that we
may have as many static variables as desired without limits (just limited
by the available memory). This aStatics array is not visible from the
application (PRG level).
@@ -39,10 +39,10 @@ defined statics:
_SFRAME --> tell the stack from what location into aStatics are ours.
_STATICS is just called once from an entire PRG from an init function
named _INITSTATICS (STATICS$ and SINIT in Clipper). That function stores on
_STATICS is just called once for an entire PRG from an init function
named _INITSTATICS (STATICS$ and SINIT in Clipper). That function stores in
a tricky place (its own function pointer in the symbol table!) our statics
base, and later on _SFRAME simply takes it from there and set it in the
base, and later on _SFRAME simply takes it from there and sets it in the
stack. That _INITSTATICS function will perform whatever initialization our
global statics may have defined in that PRG).

View File

@@ -69,19 +69,19 @@ compilation run-time
----------- ----------- ----------------------------------------
HB_TR_INFO HB_TR_ERROR All calls with levels HB_DEBUG are
erased from the code, so they have no
performance effect; only calls with
levels HB_TR_ERROR, HB_TR_FATAL and
HB_TR_ALWAYS are printed.
performance effect; only calls with
levels HB_TR_ERROR, HB_TR_FATAL and
HB_TR_ALWAYS are printed.
HB_TR_WARNING HB_TR_INFO All calls with levels HB_INFO and
HB_DEBUG are erased from the code, so
they have no performance effect; only
calls with levels HB_TR_WARNING,
HB_TR_ERROR, HB_TR_FATAL and
HB_TR_ALWAYS are printed. Notice how
setting HB_TR_INFO at run-time has no
effect, since the code was compiled with
a lower tracing level.
they have no performance effect; only
calls with levels HB_TR_WARNING,
HB_TR_ERROR, HB_TR_FATAL and
HB_TR_ALWAYS are printed. Notice how
setting HB_TR_INFO at run-time has no
effect, since the code was compiled with
a lower tracing level.
For example, I compile Harbour on WinNT with gcc (MINGW32), so I
usually set the C_USR environment variable like this:
@@ -143,7 +143,7 @@ query and set the trace level. From C code:
* To query the current tracing state, and optionally change the
current state to a given value (which should be in the range [0,1],
otherwise the current state remains unchanged):
otherwise the current state remains unchanged):
hb_tracestate(state);
@@ -161,7 +161,7 @@ query and set the trace level. From C code:
* To query the current tracing level, and optionally change the
current level to a given value (which should be in the range [0,5],
otherwise the current level remains unchanged):
otherwise the current level remains unchanged):
hb_tracelevel(level);

View File

@@ -25,17 +25,18 @@ opcodes)
VM( pcode, local symbols )
The VM may invoke the VM (itself) again. This let the Clipper language to
The VM may invoke the VM (itself) again. This lets the Clipper language
access Clipper functions and methods and external C language functions again
and again. The VM organizes these multiple accesses in a ordered and full
controlled way and implements services to access these multiple execution
levels (ProcName(), ProcLine(), debugging, and stack variables access).
and again. The VM organizes these multiple accesses in an ordered and
fully controlled way, and implements services to access these multiple
execution levels (ProcName(), ProcLine(), debugging, and stack variables
access).
The VM subsystems are continuously used by the main execution loop. Lets
The VM subsystems are continuously used by the main execution loop. Let's
review these VM subsystems:
The startup: Controls the initialization of the different VM subsystems and
it is invoked at the beginning of the application. It also controls the
The startup: Controls the initialization of the different VM subsystems.
It is invoked at the beginning of the application. It also controls the
exiting of the application.
The stack: The VM does not use the stack of the computer directly, it uses
@@ -290,7 +291,7 @@ compiler and VM.
Question :
I see that, for example, Harbour have an opcode named "PUSHWORD"(06),
I see that, for example, Harbour has an opcode named "PUSHWORD"(06),
while Valkyre calls it "PUSHW"(3B): Different names, different codes.
Isn't it desirable that Harbour pCode be binary-compatible with Clipper? I
mean, by doing so, Harbour VM could interpret Clipper pCode and
@@ -298,10 +299,10 @@ vice-versa.
Answer :
Harbour opcodes are defined at pcode.h. We are trying to use a very easy to
Harbour opcodes are defined in pcode.h. We are trying to use very easy to
remember mnemonics, so PUSHWORD seems easier than PUSHW. The opcodes values
are meaningless as they are just used by a C language switch sentence (in
fact there is a powerfull optimization which it is to use the pcode opcodes
fact there is a powerful optimization which is to use the pcode opcodes
themselves as an index to a VM functions pointers array, so VM execution
speed may increase. Clipper uses it).

View File

@@ -67,9 +67,9 @@ IF cFile == NIL
Eval(ErrorBlock(), err)
ENDIF
nReadHandle := FT_FUSE(cFile)
nHandle := FT_FUSE(cFile)
IF nReadHandle <0
IF nHandle <0
err := ErrorNew()
err:severity := ES_ERROR
err:genCode := EG_OPEN

View File

@@ -47,8 +47,8 @@
#define MODULELINE 12
#define LINELINE 14
#define ERRORLINE 20
#define LONGLINE 78
#define LONGONELINE 66
#define LONGLINE 100
#define LONGONELINE 86
#define CRLF HB_OSNewLine()
// The delimiter
#define DELIM "$" // keyword delimiter

View File

@@ -47,8 +47,8 @@
#define MODULELINE 12
#define LINELINE 14
#define ERRORLINE 20
#define LONGLINE 78
#define LONGONELINE 66
#define LONGLINE 100
#define LONGONELINE 86
#define CRLF HB_OSNewLine()
// The delimiter
#define DELIM "$" // keyword delimiter

View File

@@ -5,4 +5,4 @@ rem
hbdoc -htm categ.lnk hrbtools.rsp
cd htm
start harbour.htm
rem start harbour.htm

View File

@@ -47,8 +47,8 @@
#define MODULELINE 12
#define LINELINE 14
#define ERRORLINE 20
#define LONGLINE 78
#define LONGONELINE 66
#define LONGLINE 100
#define LONGONELINE 86
#define CRLF HB_OSNewLine()
// The delimiter
#define DELIM "$" // keyword delimiter
@@ -238,7 +238,7 @@ FUNCTION ProcessWww()
FOR j := 1 TO LEN( cTemp )
cChar := SUBSTR( cTemp, j, 1 )
IF ( cChar >= "0" .AND. cChar <= "9" ) .OR. ;
( cChar >= "A" .AND. cChar <= "Z" ) .OR. cChar = "_"
( cChar >= "A" .AND. cChar <= "Z" ) .OR. cChar = "_"
cFileName += cChar
ENDIF
NEXT
@@ -527,8 +527,9 @@ FUNCTION ProcWwwAlso( nWriteHandle, cSeeAlso )
xPos := AT( " ", xTemp )
IF xPos > 0
nLen -= LEN( xTemp ) + 3
cTemp := xTemp
xTemp:=Substr(xTemp,1,xPos-1 ) + Substr(xTemp,xPos+1)
ELSE
nLen -= LEN( xTemp ) + 2
@@ -549,8 +550,9 @@ FUNCTION ProcWwwAlso( nWriteHandle, cSeeAlso )
xPos := AT( " ", xTemp )
IF xPos > 0
nLen -= LEN( xTemp ) + 3
cTemp := xTemp
cTemp := xTemp
xTemp:=Substr(xTemp,1,xPos-1 )+Substr(xTemp,xPos+1)
ELSE
nLen -= LEN( xTemp ) + 2
@@ -560,7 +562,7 @@ FUNCTION ProcWwwAlso( nWriteHandle, cSeeAlso )
ENDIF
nWriteHandle:WriteLink( ALLTRIM( cTemp ) )
nWriteHandle:WriteLink( ALLTRIM( xTemp ),cTemp )
cSeeAlso := SUBSTR( cSeeAlso, nPos + 1 )
IF nLen == 0 .OR. nLen < 0

View File

@@ -48,7 +48,7 @@
#define LINELINE 14
#define ERRORLINE 20
#define LONGLINE 78
#define LONGONELINE 78
#define LONGONELINE 66
#define CRLF HB_OSNewLine()
// The delimiter
#define DELIM "$" // keyword delimiter

View File

@@ -47,8 +47,8 @@
#define MODULELINE 12
#define LINELINE 14
#define ERRORLINE 20
#define LONGLINE 78
#define LONGONELINE 66
#define LONGLINE 100
#define LONGONELINE 86
#define CRLF HB_OSNewLine()
// The delimiter
#define DELIM "$" // keyword delimiter

View File

@@ -47,8 +47,8 @@
#define MODULELINE 12
#define LINELINE 14
#define ERRORLINE 20
#define LONGLINE 78
#define LONGONELINE 66
#define LONGLINE 100
#define LONGONELINE 86
#define CRLF HB_OSNewLine()
// The delimiter
#define DELIM "$" // keyword delimiter

View File

@@ -47,8 +47,8 @@
#define MODULELINE 12
#define LINELINE 14
#define ERRORLINE 20
#define LONGLINE 78
#define LONGONELINE 66
#define LONGLINE 100
#define LONGONELINE 86
#define CRLF HB_OSNewLine()
// The delimiter
#define DELIM "$" // keyword delimiter

View File

@@ -4,7 +4,7 @@
/*
* Harbour Project source code:
* HBDOC document Extractoy
* HBDOC document Extractor
*
* Copyright 2000 Luiz Rafael Culik <culik@sl.conex.net>
* www - http://www.harbour-project.org
@@ -463,14 +463,15 @@ FUNCTION MAIN( cFlags, cLinkName, cAtFile )
ELSEIF lWWW
oHtm := THTML():New( "htm\harbour.htm" )
oHtm:WriteTitle( "Harbour Reference Guide" )
oHtm:WriteText('<center><img src="http://www.flexsys-ci.com/harbour-project/images/bannerhrblt.gif" ALIGN="MIDDLE"></IMG></center>')
oHtm:WritePar( "HARBOUR" )
oHtm:WriteLink( "overview",UpperLower("Harbour Read me" ))
oHtm:WriteLink( "license", UpperLower("Harbour License" ))
oHtm:WriteLink( "http://www.gnu.org/copyleft/gpl.html","GNU License" )
oHtm:WriteLink( "compileroptions.htm","Compiler Options")
oHtm:WritePar( "" )
oHtm:WritePar("")
oHtm:WritePar( "Functions A-M" )
oHtm:WritePar("")
ASORT( awww,,,{|x,y| x[1]<y[1] })
FOR nPos := 1 TO LEN( aWww )
@@ -479,24 +480,32 @@ FUNCTION MAIN( cFlags, cLinkName, cAtFile )
oHtm:WriteLink( Lower(aWww[ nPos ,2]),UpperLower(aWww[nPos,1] ))
ENDIF
NEXT
oHtm:WritePar("")
oHtm:WritePar( "Functions N-_" )
oHtm:WritePar("")
FOR nPos := 1 TO LEN( aWww )
cTemp := aWww[ nPos,1 ]
IF LEFT( cTemp, 1 ) >= "N" .AND. LEFT( cTemp, 1 ) < "_" .AND. AT( "()", cTemp ) > 0
oHtm:WriteLink(Lower(aWww[ nPos ,2]),UpperLower(aWww[nPos,1] ) )
ENDIF
NEXT
oHtm:WritePar("")
oHtm:WritePar( "Commands" )
oHtm:WritePar("")
FOR nPos := 1 TO LEN( aWww )
cTemp := aWww[ nPos,1 ]
IF AT( "()", cTemp ) == 0 .AND. ctemp <> "LICENSE" .AND. cTemp <> "OVERVIEW" .and. cTemp<>"Compiler Options"
IF AT( "()", cTemp ) == 0 .AND. ctemp <> "LICENSE" .AND. cTemp <> "OVERVIEW" .and. cTemp<>"Compiler Options" ;
.AND. UPPER(Left(ctemp,4)) <>"BASE" .AND. UPPER(LEFT(cTemp,4))<>"TERM" .and. UPPER(LEFT(cTemp,5))<>"TOOLS"
oHtm:WriteLink( Lower(aWww[ nPos ,2]),UpperLower(aWww[nPos,1]))
ENDIF
NEXT
oHtm:WritePar("")
oHtm:WritePar( "Run Time Error" )
oHtm:WritePar("")
FOR nPos := 1 TO LEN( aWww )
cTemp := aWww[ nPos,1 ]
IF AT( "()", cTemp ) == 0 .AND. Left(ctemp,4) =="BASE" .AND. left(cTemp,4)=="TERM" .and. left(cTemp,5)=="TOOLS"
IF AT( "()", cTemp ) == 0 .OR. UPPER(Left(ctemp,4)) =="BASE" .OR. UPPER(LEFT(cTemp,4))=="TERM" .OR. UPPER(LEFT(cTemp,5))=="TOOLS"
oHtm:WriteLink( Lower(aWww[ nPos ,2]),UpperLower(aWww[nPos,1]))
ENDIF
NEXT

View File

@@ -63,7 +63,6 @@
..\..\source\rtl\pvalue.c
..\..\source\rtl\readkey.prg
..\..\source\rtl\readme.prg
..\..\source\rtl\readvar.prg
..\..\source\rtl\samples.c
..\..\source\rtl\set.c
..\..\source\rtl\setcolor.c
@@ -90,3 +89,5 @@
..\..\source\rtl\word.c
..\..\source\rtl\xhelp.c
..\..\source\rtl\xsavescr.prg
..\..\doc\subcodes.txt
..\..\doc\compiler.txt

View File

@@ -63,7 +63,6 @@
..\..\source\rtl\pvalue.c
..\..\source\rtl\readkey.prg
..\..\source\rtl\readme.prg
..\..\source\rtl\readvar.prg
..\..\source\rtl\samples.c
..\..\source\rtl\set.c
..\..\source\rtl\setcolor.c
@@ -91,6 +90,7 @@
..\..\source\rtl\xhelp.c
..\..\source\rtl\xsavescr.prg
..\..\source\tools\asciisum.c
..\..\source\tools\strasint.c
..\..\source\tools\ascpos.c
..\..\source\tools\atdiff.c
..\..\source\tools\chareven.c
@@ -104,25 +104,28 @@
..\..\source\tools\ctcrypt.c
..\..\source\tools\dates2.c
..\..\source\tools\datesx.c
..\..\source\tools\dbftools.c
..\..\source\tools\fileread.prg
..\..\source\tools\hb_f.c
..\..\source\tools\html.prg
..\..\source\tools\io.c
..\..\source\tools\mathx.c
..\..\source\tools\nconvert.prg
..\..\source\tools\ng.prg
..\..\source\tools\numtxten.prg
..\..\source\tools\numtxthu.prg
..\..\source\tools\os2.prg
..\..\source\tools\rtf.prg
..\..\source\tools\ng.prg
..\..\source\tools\strasint.c
..\..\source\tools\strcount.c
..\..\source\tools\strleft.c
..\..\source\tools\strcspn.c
..\..\source\tools\strdiff.c
..\..\source\tools\strexpan.c
..\..\source\tools\strfmt.c
..\..\source\tools\stringp.prg
..\..\source\tools\stringsx.c
..\..\source\tools\strleft.c
..\..\source\tools\strpbrk.c
..\..\source\tools\strright.c
..\..\source\tools\strpbrk.c
..\..\source\tools\troff.prg
..\..\doc\subcodes.txt
..\..\doc\compiler.txt