From a037b3dd6dadf83419c8e3c4f2bd6d783341674b Mon Sep 17 00:00:00 2001 From: Luiz Rafael Culik Date: Thu, 17 Feb 2000 11:11:52 +0000 Subject: [PATCH] See Changelog 20000217 09:00 --- harbour/ChangeLog | 24 +++++++++ harbour/doc/compiler.txt | 92 ++++++++++++++++---------------- harbour/doc/cvshowto.txt | 6 +-- harbour/doc/gmake.txt | 8 +-- harbour/doc/harbext.txt | 33 +++++++++--- harbour/doc/pcode.txt | 50 ++++++++--------- harbour/doc/pragma.txt | 17 +++--- harbour/doc/readme.txt | 11 ++-- harbour/doc/statics.txt | 20 +++---- harbour/doc/tracing.txt | 24 ++++----- harbour/doc/vm.txt | 21 ++++---- harbour/source/rtl/typefile.prg | 4 +- harbour/utils/hbdoc/genasc.prg | 4 +- harbour/utils/hbdoc/genhpc.prg | 4 +- harbour/utils/hbdoc/genhtm.bat | 2 +- harbour/utils/hbdoc/genhtm.prg | 16 +++--- harbour/utils/hbdoc/genng.prg | 2 +- harbour/utils/hbdoc/genos2.prg | 4 +- harbour/utils/hbdoc/genrtf.prg | 4 +- harbour/utils/hbdoc/gentrf.prg | 4 +- harbour/utils/hbdoc/hbdoc.prg | 17 ++++-- harbour/utils/hbdoc/hrb.rsp | 3 +- harbour/utils/hbdoc/hrbtools.rsp | 13 +++-- 23 files changed, 221 insertions(+), 162 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 2a49c88c16..893827720a 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,27 @@ +20000217-09:00 GMT-3 Luiz Rafael Culik + *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 diff --git a/harbour/doc/compiler.txt b/harbour/doc/compiler.txt index 57ce7c865c..7e474d1baf 100644 --- a/harbour/doc/compiler.txt +++ b/harbour/doc/compiler.txt @@ -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 object file drive and/or path + * /o 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[] request linker to search (or none) * ----------------- @@ -109,10 +109,10 @@ * * /t 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[] use command def set in (or none) + * /u[] use command definition set in (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[] 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$ */ diff --git a/harbour/doc/cvshowto.txt b/harbour/doc/cvshowto.txt index 91cd5dca12..4dbafff295 100644 --- a/harbour/doc/cvshowto.txt +++ b/harbour/doc/cvshowto.txt @@ -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 diff --git a/harbour/doc/gmake.txt b/harbour/doc/gmake.txt index f11340eef8..225c393c1f 100644 --- a/harbour/doc/gmake.txt +++ b/harbour/doc/gmake.txt @@ -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. \ No newline at end of file +command line parameter. diff --git a/harbour/doc/harbext.txt b/harbour/doc/harbext.txt index d055cbd212..40afbb6a7b 100644 --- a/harbour/doc/harbext.txt +++ b/harbour/doc/harbext.txt @@ -5,13 +5,34 @@ Language extensions: -------------------- -* Classes generation and management (Clipper never provided this) -* @() --> 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. + +* @() + 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 diff --git a/harbour/doc/pcode.txt b/harbour/doc/pcode.txt index 838a0f27f8..17bd14856b 100644 --- a/harbour/doc/pcode.txt +++ b/harbour/doc/pcode.txt @@ -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... diff --git a/harbour/doc/pragma.txt b/harbour/doc/pragma.txt index 57babe0568..88b4e7633c 100644 --- a/harbour/doc/pragma.txt +++ b/harbour/doc/pragma.txt @@ -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 = /W * SHORTCUTTING = /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 diff --git a/harbour/doc/readme.txt b/harbour/doc/readme.txt index b10d31729d..f5985fe64f 100644 --- a/harbour/doc/readme.txt +++ b/harbour/doc/readme.txt @@ -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 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 --- diff --git a/harbour/doc/statics.txt b/harbour/doc/statics.txt index cbb2a4257a..7632f3cae0 100644 --- a/harbour/doc/statics.txt +++ b/harbour/doc/statics.txt @@ -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). diff --git a/harbour/doc/tracing.txt b/harbour/doc/tracing.txt index c57f628037..ccbe81a473 100644 --- a/harbour/doc/tracing.txt +++ b/harbour/doc/tracing.txt @@ -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); diff --git a/harbour/doc/vm.txt b/harbour/doc/vm.txt index 4593e19622..babb9e8573 100644 --- a/harbour/doc/vm.txt +++ b/harbour/doc/vm.txt @@ -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). diff --git a/harbour/source/rtl/typefile.prg b/harbour/source/rtl/typefile.prg index d412c8d5b6..86c0dc9fea 100644 --- a/harbour/source/rtl/typefile.prg +++ b/harbour/source/rtl/typefile.prg @@ -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 diff --git a/harbour/utils/hbdoc/genasc.prg b/harbour/utils/hbdoc/genasc.prg index 8d7afcd58e..a46bdcc877 100644 --- a/harbour/utils/hbdoc/genasc.prg +++ b/harbour/utils/hbdoc/genasc.prg @@ -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 diff --git a/harbour/utils/hbdoc/genhpc.prg b/harbour/utils/hbdoc/genhpc.prg index a52b251f5e..2f38835318 100644 --- a/harbour/utils/hbdoc/genhpc.prg +++ b/harbour/utils/hbdoc/genhpc.prg @@ -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 diff --git a/harbour/utils/hbdoc/genhtm.bat b/harbour/utils/hbdoc/genhtm.bat index 4e9aadfd34..1080b915c0 100644 --- a/harbour/utils/hbdoc/genhtm.bat +++ b/harbour/utils/hbdoc/genhtm.bat @@ -5,4 +5,4 @@ rem hbdoc -htm categ.lnk hrbtools.rsp cd htm -start harbour.htm +rem start harbour.htm diff --git a/harbour/utils/hbdoc/genhtm.prg b/harbour/utils/hbdoc/genhtm.prg index 882806b74e..a693e934a4 100644 --- a/harbour/utils/hbdoc/genhtm.prg +++ b/harbour/utils/hbdoc/genhtm.prg @@ -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 diff --git a/harbour/utils/hbdoc/genng.prg b/harbour/utils/hbdoc/genng.prg index 9e0ca23b16..da99daf56e 100644 --- a/harbour/utils/hbdoc/genng.prg +++ b/harbour/utils/hbdoc/genng.prg @@ -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 diff --git a/harbour/utils/hbdoc/genos2.prg b/harbour/utils/hbdoc/genos2.prg index 99f4608b8f..d54b914996 100644 --- a/harbour/utils/hbdoc/genos2.prg +++ b/harbour/utils/hbdoc/genos2.prg @@ -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 diff --git a/harbour/utils/hbdoc/genrtf.prg b/harbour/utils/hbdoc/genrtf.prg index c6704bc5b8..bc0255d7f0 100644 --- a/harbour/utils/hbdoc/genrtf.prg +++ b/harbour/utils/hbdoc/genrtf.prg @@ -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 diff --git a/harbour/utils/hbdoc/gentrf.prg b/harbour/utils/hbdoc/gentrf.prg index ff2461d1e2..ab80bc332a 100644 --- a/harbour/utils/hbdoc/gentrf.prg +++ b/harbour/utils/hbdoc/gentrf.prg @@ -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 diff --git a/harbour/utils/hbdoc/hbdoc.prg b/harbour/utils/hbdoc/hbdoc.prg index 83c645e888..f8f5f0592f 100644 --- a/harbour/utils/hbdoc/hbdoc.prg +++ b/harbour/utils/hbdoc/hbdoc.prg @@ -4,7 +4,7 @@ /* * Harbour Project source code: - * HBDOC document Extractoy + * HBDOC document Extractor * * Copyright 2000 Luiz Rafael Culik * 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('
') 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]= "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 diff --git a/harbour/utils/hbdoc/hrb.rsp b/harbour/utils/hbdoc/hrb.rsp index 7affe60064..177550e1b2 100644 --- a/harbour/utils/hbdoc/hrb.rsp +++ b/harbour/utils/hbdoc/hrb.rsp @@ -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 diff --git a/harbour/utils/hbdoc/hrbtools.rsp b/harbour/utils/hbdoc/hrbtools.rsp index 20b4b307b8..c7a8b6e46a 100644 --- a/harbour/utils/hbdoc/hrbtools.rsp +++ b/harbour/utils/hbdoc/hrbtools.rsp @@ -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