See Changelog 20000128

This commit is contained in:
Luiz Rafael Culik
2000-01-28 17:53:27 +00:00
parent a00350eef2
commit f14c3433f0
14 changed files with 1469 additions and 1259 deletions

View File

@@ -1,3 +1,19 @@
20000128-20:3 GMT+3 Luiz Rafael Culik <culik@sl.conex.net>
*source/rdd/dbcmd.c
*source/rtl/arrays.c
*Enhaced the Docs
*doc/whatnew.txt
*Description of the program that extract documention from source code forget the OS2 and TROFF output
20000115-20:3 GMT+3 Luiz Rafael Culik <culik@sl.conex.net>
* ngdoc/ft_helpc.prg
* Fixed some erros
* source/tools/rtf.prg
* source/tools/ng.prg
* source/tools/os2.prg
* source/tools/troff.prg
* Fixed the aligment of text on generating the source files
20000127-12:54 GMT+1 Patrick Mast <harbour@PatrickMast.com>
* doc/whatsnew.txt
* updated for build 31

View File

@@ -49,7 +49,7 @@ Build #31 2000-01-27
ISAFFIRM(), ISNEGATIVE(), NATIONMSG(), _NATSORTVER(), _NATMSGVER()
- Added Harbour compiler tracing (i.e., debug output)
- Many changes, fixes, and enhancements to documentation
- Program added to extract documentation from source code and create NG and HLP files
- Program added to extract documentation from source code and create NG,HLP ,OS2 IPF and TROFF output files
- Compile time expression optimizer.
- Some preprocessor fixes
- Added ADS RDD

View File

@@ -58,4 +58,4 @@ troff.c : troff.prg harbour.exe
.c.obj:
bcc32 -c -O2 -Iinclude -o$@ $<
tlib lib\b32\hbgt.lib -+$@,,
tlib lib\b32\hbgt.lib -+$@,,

View File

@@ -45,7 +45,16 @@
*
* 1/18/2000 Added Cleanup procedure when Generating Norton Guide
*
* V1.05
* 1/22/2000 Added Code to generate OS2 IPF files
*
* V1.06
* 1/25/2000 Fixed some error that was not generating a valid RTF File
* Removed Call TO HB_OEMTOANSI() on the rountines to generate the .Ngi
* and Rtf files.
* Added support to generate the Docs from .Txt files, See doc\Subcodes.txt
* for header file.
*
*/
/*
@@ -136,6 +145,8 @@ STATIC cTest := DELIM + 'TESTS' + DELIM
STATIC cStatus := DELIM + 'STATUS' + DELIM
STATIC cPlat := DELIM + 'PLATFORMS' + DELIM
STATIC cFiles := DELIM + 'FILES' + DELIM
STATIC cSubCode := DELIM + 'SUBCODE' + DELIM
STATIC cFunction := DELIM + 'FUNCTION' +DELIM
STATIC theHandle
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
@@ -144,10 +155,10 @@ STATIC theHandle
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
FUNCTION FT_HELPC( cFlags, cLinkName, cAtFile, cDir )
FUNCTION FT_HELPC( cFlags, cLinkName, cAtFile )
// LOCAL variables:
LOCAL aExtensions := { "*.PRG", "*.C", "*.ASM", "*.CH" }
LOCAL aExtensions := { "*.PRG", "*.C", "*.ASM", "*.CH" , "*.TXT" }
LOCAL i
LOCAL j
LOCAL nItem
@@ -657,14 +668,17 @@ STATIC FUNCTION ProcessFiles
// -
// LOCAL variables:
#define D_NORMAL 1
#define D_ARG 2
#define D_SYNTAX 3
#define D_IGNORE 4
#define D_SEEALSO 5
#define D_INCLUDE 6
#define D_ONELINE 7
#define D_STATUS 8
#define D_NORMAL 1
#define D_ARG 2
#define D_SYNTAX 3
#define D_IGNORE 4
#define D_SEEALSO 5
#define D_INCLUDE 6
#define D_ONELINE 7
#define D_STATUS 8
#define D_TESTS 9
#define D_FUNCTIONS 10
LOCAL i
LOCAL j
LOCAL nFiles := LEN( aDirList )
@@ -782,7 +796,7 @@ STATIC FUNCTION ProcessFiles
IF lDoc
// 1) function name
IF AT( cFunc, cBuffer ) > 0 .OR. AT( cComm, cBuffer ) > 0
IF AT( cFunc, cBuffer ) > 0 .OR. AT( cComm, cBuffer ) > 0 .OR. AT(cSubCode,cBuffer) > 0
cBuffer := ReadLN( @lEof )
nLineCnt ++
// Save the function name
@@ -926,17 +940,7 @@ STATIC FUNCTION ProcessFiles
nMode := D_NORMAL
lAddBlank := .T.
ELSEIF AT( cTest, cBuffer ) > 0
IF !lBlankLine
FWRITE( nWriteHandle, CRLF )
ENDIF
FWRITE( nWriteHandle, ".par bold on" + CRLF )
FWRITE( nWriteHandle, " Tests" + CRLF )
FWRITE( nWriteHandle, ".endpar" + CRLF )
nMode := D_NORMAL
lAddBlank := .T.
nMode=D_TESTS
ELSEIF AT( cCompl, cBuffer ) > 0
IF !lBlankLine
@@ -971,6 +975,18 @@ STATIC FUNCTION ProcessFiles
nMode := D_NORMAL
lAddBlank := .T.
ELSEIF AT( cFunction, cBuffer ) > 0
IF !lBlankLine
FWRITE( nWriteHandle, CRLF )
ENDIF
FWRITE( nWriteHandle, ".par bold on" + CRLF )
FWRITE( nWriteHandle, " Function" + CRLF )
FWRITE( nWriteHandle, ".endpar" + CRLF )
nMode := D_NORMAL
lAddBlank := .T.
ELSEIF AT( cStatus, cBuffer ) > 0
nMode := D_STATUS
ELSEIF AT( cSee, cBuffer ) > 0
@@ -1038,7 +1054,15 @@ STATIC FUNCTION ProcessFiles
FWRITE( nWriteHandle, ".endpar" + CRLF )
ENDIF
ProcStatus( nWriteHandle, StripNgControls( cBuffer ) )
ELSEIF nMode=D_TESTS
IF !EMPTY(cBuffer)
FWRITE( nWriteHandle, ".par bold on" + CRLF )
FWRITE( nWriteHandle, " Tests" + CRLF )
FWRITE( nWriteHandle, ".endpar" + CRLF )
FWRITE( nWriteHandle, CRLF )
ENDIF
FWRITE( nWriteHandle,StripNgControls( cBuffer ) +CRLF)
ELSE
// unknown data from somewhere
@@ -2233,7 +2257,8 @@ STATIC FUNCTION ProcessRtf
// Now close down this little piece
lDoc := .F.
IF .NOT. EMPTY( cSeeAlso )
oRtf:WritePar( "See Also" ):EndPar()
oRtf:WritePar(""):EndPar()
oRtf:WriteParBold( "See Also" )
ProcRtfalso( oRtf, cSeealso )
ENDIF
@@ -2248,7 +2273,7 @@ STATIC FUNCTION ProcessRtf
IF lDoc
// 1) function name
IF AT( cFunc, cBuffer ) > 0 .OR. AT( cComm, cBuffer ) > 0
IF AT( cFunc, cBuffer ) > 0 .OR. AT( cComm, cBuffer ) > 0 .OR. AT( cSubCode, cBuffer ) >0
cBuffer := ReadLN( @lEof )
nLineCnt ++
// Save the function name
@@ -2330,7 +2355,7 @@ STATIC FUNCTION ProcessRtf
// Now start writing out what we know
oRtf:WriteTitle( PAD( cFuncName, 21 ), cFuncName )
oRtf:WriteParBold( cOneLine )
oRtf:WritePar( HB_OEMTOANSI( cBar ) ):EndPar()
oRtf:WritePar( cBar ):EndPar()
// 4) all other stuff
ELSE
@@ -2401,6 +2426,7 @@ STATIC FUNCTION ProcessRtf
IF !lBlankLine
oRtf:WritePar( "" ):EndPar()
ENDIF
oRtf:WritePar( "" ):EndPar()
oRtf:WriteParBold( " Compilance" )
nMode := D_NORMAL
lAddBlank := .T.
@@ -2422,6 +2448,16 @@ STATIC FUNCTION ProcessRtf
nMode := D_NORMAL
lAddBlank := .T.
ELSEIF AT( cFunction, cBuffer ) > 0
IF !lBlankLine
oRtf:WritePar( "" ):EndPar()
ENDIF
oRtf:WriteParBold( " Functions" )
nMode := D_NORMAL
lAddBlank := .T.
ELSEIF AT( cSee, cBuffer ) > 0
nMode := D_SEEALSO
ELSEIF AT( cInc, cBuffer ) > 0
@@ -2445,6 +2481,8 @@ STATIC FUNCTION ProcessRtf
/* nNonBlank:=FirstNB(cBuffer)
cBuffer=STUFF(cBuffer,nNonBlank,0,"^a1f ")*/
oRtf:WritePar( cBuffer ):EndPar()
oRtf:WritePar(""):EndPar()
ELSEIF nMode = D_ARG
IF LEN( cBuffer ) > LONGLINE
write_error( "Arguments", cBuffer, nLineCnt, ;
@@ -2469,6 +2507,7 @@ STATIC FUNCTION ProcessRtf
lAddBlank := .F.
ENDIF
oRtf:WritePar( StripNgControls( cBuffer ) ):EndPar()
ELSEIF nMode = D_SEEALSO
IF .NOT. EMPTY( cBuffer )
cSeeAlso := StripFiles( ALLTRIM( cBuffer ) )
@@ -2484,10 +2523,20 @@ STATIC FUNCTION ProcessRtf
ENDIF
ELSEIF nMode = D_STATUS
IF !EMPTY( cBuffer )
oRtf:WritePar(""):EndPar()
oRtf:WriteParBold( "Status" )
oRtf:WritePar(""):EndPar()
xaddblank:=.T.
ELSE
oRtf:WritePar(""):EndPar()
xAddBlank:=.T.
ENDIF
ProcStatusRtf( oRtf, cBuffer )
IF !xAddBlank
oRtf:WritePar(""):EndPar()
xaddblank:=.T.
ENDIF
xAddBlank:=.F.
ELSE
// unknown data from somewhere
@@ -2507,7 +2556,7 @@ STATIC FUNCTION ProcessRtf
NEXT
RETURN NIL
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function ProcRtfAlso()
@@ -2585,8 +2634,9 @@ RETURN nil
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
FUNCTION ProcStatus( nWriteHandle, cBuffer )
IF SUBSTR( ALLTRIM( cBuffer ), 1 ) == "R"
IF LEN( ALLTRIM( cBuffer ) ) > 1
FWRITE( nWriteHandle, cBuffer + CRLF )
ELSEIF SUBSTR( ALLTRIM( cBuffer ), 1 ) == "R"
FWRITE( nWriteHandle, " Ready" + CRLF )
ELSEIF SUBSTR( ALLTRIM( cBuffer ), 1 ) == "S"
FWRITE( nWriteHandle, " Started" + CRLF )
@@ -2602,8 +2652,9 @@ RETURN nil
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
FUNCTION ProcStatusRTF( nWriteHandle, cBuffer )
IF SUBSTR( ALLTRIM( cBuffer ), 1 ) == "R"
IF LEN( ALLTRIM(cBuffer) ) >1
nWriteHandle:WritePar( cBuffer ):EndPar()
ELSEIF SUBSTR( ALLTRIM( cBuffer ), 1 ) == "R"
nWriteHandle:WritePar( " Ready" ):EndPar()
ELSEIF SUBSTR( ALLTRIM( cBuffer ), 1 ) == "S"
nWriteHandle:WritePar( " Started" ):EndPar()
@@ -2756,7 +2807,7 @@ STATIC FUNCTION ProcessWww
IF lDoc
// 1) function name
IF AT( cFunc, cBuffer ) > 0 .OR. AT( cComm, cBuffer ) > 0
IF AT( cFunc, cBuffer ) > 0 .OR. AT( cComm, cBuffer ) > 0 .OR. AT( cSubCode, cBuffer ) >0
cBuffer := ReadLN( @lEof )
nLineCnt ++
// Save the function name
@@ -2928,6 +2979,15 @@ STATIC FUNCTION ProcessWww
ENDIF
oHtm:WriteParBold( " Files" )
nMode := D_NORMAL
lAddBlank := .T.
ELSEIF AT( cFunction, cBuffer ) > 0
IF !lBlankLine
oHtm:WritePar( "" )
ENDIF
oHtm:WriteParBold( " Functions" )
nMode := D_NORMAL
lAddBlank := .T.
@@ -3116,8 +3176,9 @@ RETURN nil
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
FUNCTION ProcStatusWww( nWriteHandle, cBuffer )
IF SUBSTR( ALLTRIM( cBuffer ), 1 ) == "R"
IF LEN( ALLTRIM( cBuffer ) ) >1
nWriteHandle:WritePar( cBuffer)
ELSEIF SUBSTR( ALLTRIM( cBuffer ), 1 ) == "R"
nWriteHandle:WritePar( " Ready" )
ELSEIF SUBSTR( ALLTRIM( cBuffer ), 1 ) == "S"
nWriteHandle:WritePar( " Started" )
@@ -3333,7 +3394,7 @@ STATIC FUNCTION ProcessNgi
IF lDoc
// 1) function name
IF AT( cFunc, cBuffer ) > 0 .OR. AT( cComm, cBuffer ) > 0
IF AT( cFunc, cBuffer ) > 0 .OR. AT( cComm, cBuffer ) > 0 .OR. AT( cSubCode, cBuffer ) >0
cBuffer := ReadLN( @lEof )
nLineCnt ++
// Save the function name
@@ -3415,7 +3476,7 @@ STATIC FUNCTION ProcessNgi
// Now start writing out what we know
oNgi:WriteTitle( PAD( cFuncName, 21 ) + cOneLine, cFuncName )
oNgi:WritePar( cOneLine )
oNgi:WritePar( HB_OEMTOANSI( cBar ) )
oNgi:WritePar( cBar )
// 4) all other stuff
ELSE
@@ -3507,6 +3568,15 @@ STATIC FUNCTION ProcessNgi
nMode := D_NORMAL
lAddBlank := .T.
ELSEIF AT( cFunction, cBuffer ) > 0
IF !lBlankLine
oNgi:WritePar( "" )
ENDIF
oNgi:WriteParBold( " Functions" )
nMode := D_NORMAL
lAddBlank := .T.
ELSEIF AT( cSee, cBuffer ) > 0
nMode := D_SEEALSO
ELSEIF AT( cInc, cBuffer ) > 0
@@ -4009,7 +4079,7 @@ STATIC FUNCTION ProcessTroff
IF lDoc
// 1) function name
IF AT( cFunc, cBuffer ) > 0 .OR. AT( cComm, cBuffer ) > 0
IF AT( cFunc, cBuffer ) > 0 .OR. AT( cComm, cBuffer ) > 0 .OR. AT( cSubCode, cBuffer ) >0
cBuffer := ReadLN( @lEof )
nLineCnt ++
// Save the function name
@@ -4432,7 +4502,7 @@ STATIC FUNCTION ProcessOs2
IF lDoc
// 1) function name
IF AT( cFunc, cBuffer ) > 0 .OR. AT( cComm, cBuffer ) > 0
IF AT( cFunc, cBuffer ) > 0 .OR. AT( cComm, cBuffer ) > 0 .OR. AT( cSubCode, cBuffer ) >0
cBuffer := ReadLN( @lEof )
nLineCnt ++
// Save the function name
@@ -4599,6 +4669,15 @@ STATIC FUNCTION ProcessOs2
ENDIF
oOs2:WriteParBold( " Files" )
nMode := D_NORMAL
lAddBlank := .T.
ELSEIF AT( cFunction, cBuffer ) > 0
IF !lBlankLine
oOs2:WritePar( "" )
ENDIF
oOs2:WriteParBold( " Function" )
nMode := D_NORMAL
lAddBlank := .T.

View File

@@ -47,6 +47,7 @@ source\rtl\memvarbl.prg
source\rtl\memvars.c
source\rtl\menuto.prg
source\rtl\mlcount.c
source\rtl\mlpos.c
source\rtl\mouseapi.c
source\rtl\mousexxx.c
source\rtl\msgxxx.c
@@ -87,39 +88,3 @@ source\rtl\wait.prg
source\rtl\word.c
source\rtl\xhelp.c
source\rtl\xsavescr.prg
source\tools\asciisum.c
source\tools\ascpos.c
source\tools\atdiff.c
source\tools\chareven.c
source\tools\charmix.c
source\tools\charodd.c
source\tools\chrcount.c
source\tools\chrfirst.c
source\tools\chrtotal.c
source\tools\ctchksum.c
source\tools\ctchrmix.c
source\tools\ctcrypt.c
source\tools\dates2.c
source\tools\datesx.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\numtxten.prg
source\tools\numtxthu.prg
source\tools\rtf.prg
source\tools\ng.prg
source\tools\strasint.c
source\tools\strcount.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

File diff suppressed because it is too large Load Diff

View File

@@ -786,6 +786,47 @@ static void hb_arrayNewRagged( PHB_ITEM pArray, int iDimension )
hb_arrayNewRagged( hb_arrayGetItemPtr( pArray, ulElements-- ), iDimension );
}
}
/* $DOC$
* $FUNCNAME$
* ARRAY()
* $CATEGORY$
* ARRAY
* $ONELINER$
* Create an uninitialized array of specified length
* $SYNTAX$
* ARRAY(<nElements> [, <nElements>...]) --> aArray
* $ARGUMENTS$
* <nElements> is the number of elements in the specified dimension.
* $RETURNS$
* ARRAY() returns an array of specified dimensions.
* $DESCRIPTION$
* This function returns an uninitialized array with the lenght of
* <nElements>.Nested arrays are uninitialized whitin the same array
* pointer reference if additional parameters are specified.
* Establishing a memory variable with the same name as the array
* may destroy the original array and release the entire contents of
* the array.This is,of course, on the data storage type of either array
* or the variable with the same name as the array.
* $EXAMPLES$
* FUNCTION Main()
* LOCAL aArray:=Array(10)
* LOCAL x:=1
* FOR x:=1 to LEN(aArray)
* aArray[x]:=Array(x)
* NEXT
* Return Nil
* $STATUS$
* R
* $SEEALSO$
* AADD(),ADEL(),AFILL(),AINS()
* $COMPLIANCE$
* This Function is CA-CLIPPER Compilance in all Cases, except
* that arrays in Harbour can have an unlimited number of dimensions,
* while Clipper has a limmit of 4096 array elements.
* $INCLUDE$
*
* $END$
*/
HARBOUR HB_ARRAY( void )
{
@@ -816,6 +857,42 @@ HARBOUR HB_ARRAY( void )
hb_arrayNewRagged( &hb_stack.Return, 1 );
}
}
/* $DOC$
* $FUNCNAME$
* AADD()
* $CATEGORY$
* ARRAY
* $ONELINER$
* Dinamically adda an element to an array
* $SYNTAX$
* AADD(<aArray>[, <xValue>]) --> Value
* $ARGUMENTS$
* <aArray> The name of an array
*
* <xValue> Element to add to array <aArray>
* $RETURNS$
* The value of <xValue> if specified,otherwise this function
* returns a NIL value.
* $DESCRIPTION$
* This function dinamically increase the lenght of the array
* named <aArray> by one element and stores the value of <xValue>to
* that newly created element.
* <xValue> may be an array reference pointer, which in turn may be
* stored to an array's subscript position.
* $EXAMPLES$
* LOCAL aArray:={}
* AADD(aArray,10)
* FOR x:=1 to 10
* AADD(aArray,x)
* NEXT
* $STATUS$
* R
* $SEEALSO$
* AINS(),ASIZE()
* $INCLUDE$
*
* $END$
*/
HARBOUR HB_AADD( void )
{
@@ -844,6 +921,44 @@ HARBOUR HB_AADD( void )
/* NOTE: CA-Cl*pper 5.3 and older will return NIL on bad parameter, 5.3a,b
will throw a runtime error. [vszel] */
/* $DOC$
* $FUNCNAME$
* ASIZE()
* $CATEGORY$
* ARRAY
* $ONELINER$
* Adjust the size of an array
* $SYNTAX$
* ASIZE(<aArray>, <nLen>) --> aTarget
* $ARGUMENTS$
* <aArray> Name od array to be dinamically altered
*
* <nLen> Numeric value representing the new size of <aArray>
* $RETURNS$
* ASIZE() returns an array pointer reference to <aTarget>.
* $DESCRIPTION$
* This function will dinamically increase or decrease the size
* of <aArray> by ajusting the lenght of the array to <nLen> subscript
* positions.
* If the lenght of the array <aArray> is shortened,those former
* subscripts positions are lost.If the lenght of the array is lenghtened
* a NIL data value is assigned to the new subscript position.
* $EXAMPLES$
* aArray := { 1 } // Result: aArray is { 1 }
* ASIZE(aArray, 3) // Result: aArray is { 1, NIL, NIL }
* ASIZE(aArray, 1) // Result: aArray is { 1 }
* $TESTS$
* $STATUS$
* R
* $COMPLIANCE$
* If HB_COMPAT_C53 is defined, the function generates an Error,
* else it will return the array itself.
* $SEEALSO$
* AADD(),ADEL(),AFILL(),AINS()
* $INCLUDE$
*
* $END$
*/
HARBOUR HB_ASIZE( void )
{
@@ -862,6 +977,36 @@ HARBOUR HB_ASIZE( void )
hb_errRT_BASE( EG_ARG, 2023, NULL, "ASIZE" );
#endif
}
/* $DOC$
* $FUNCNAME$
* ATAIL()
* $CATEGORY$
* ARRAY
* $ONELINER$
* Returns the rightmost element of an array
* $SYNTAX$
* ATAIL(<aArray>) --> Element
* $ARGUMENTS$
* <aArray> is the array.
* $RETURNS$
* Atail() return the expression of the last element in the array.
* $DESCRIPTION$
* This function return the value of the last element in the array named
* <aArray>.This function does not alter the size of the array or any of
* the subscript values.
* $EXAMPLES$
* LOCAL array:= {"Harbour", "is", "Supreme", "Power"}
* ? ATAIL(aArray)
* $TESTS$
* $STATUS$
* R
* $COMPLIANCE$
* $SEEALSO$
* LEN(),ARRAY(),ASIZE(),AADD()
* $INCLUDE$
*
* $END$
*/
HARBOUR HB_ATAIL( void )
{
@@ -870,6 +1015,43 @@ HARBOUR HB_ATAIL( void )
if( pArray )
hb_arrayLast( pArray, &hb_stack.Return );
}
/* $DOC$
* $FUNCNAME$
* AINS()
* $CATEGORY$
* ARRAY
* $ONELINER$
* Insert a NIL valueat an array subscript position.
* $SYNTAX$
* AINS(<aArray>, <nPos>) --> aTarget
* $ARGUMENTS$
* <aArray> Array name.
*
* <nPos> Subscript position in <aArray>
* $RETURNS$
* AINS() returns a array pointer reference to <aTarget>.
* $DESCRIPTION$
* This function inserts a NIL value in the array named <aArray>
* at the <nPos>th position.
* All array elements starting with the <nPos>th position will be
* shifted down one subscript position in the array list and the last
* item in the array will be removed completly.In other words,if an array
* element were to be inserted at the fifth subscript position, the element
* previosly in the fifth position would now be located at sixth position.
* The lenght of the array <aArray> will remain unchanged
* $EXAMPLES$
* LOCAL aArray:={"Harbour","is","Power!","!!!"}
* AINS(aArray,4)
* $TESTS$
* $STATUS$
* R
* $COMPLIANCE$
* $SEEALSO$
* AADD(),ACOPY(),ADEL(),AEVAL(),AFILL(),ASIZE()
* $INCLUDE$
*
* $END$
*/
HARBOUR HB_AINS( void )
{
@@ -883,6 +1065,44 @@ HARBOUR HB_AINS( void )
hb_itemReturn( pArray ); /* AIns() returns the array itself */
}
}
/* $DOC$
* $FUNCNAME$
* ADEL()
* $CATEGORY$
* ARRAY
* $ONELINER$
* Delete an element form an array.
* $SYNTAX$
* ADEL(<aArray>, <nPos>) --> aTarget
* $ARGUMENTS$
* <aArray> Name of array from which an element is to be removed.
*
* <nPos> Subcript of the element to be removed.
* $RETURNS$
* ADEL() Returns an array pointer reference to <aTarget>.
* $DESCRIPTION$
* This function deletes the element found at <nPos> subscript
* position in the array <aArray>.All arrays elements in the array
* <aArray> below the given subscript position <nPos> will move up
* one position in the array.In other words,what was formerly the
* sixth subscript position will become the fifth subscript position.
* The lenght of the array <aArray> will remain unchanged,as the last
* element array become a NIL data type.
* $EXAMPLES$
* LOCAL aArray
* aArray := { "Harbour","is","Power" } // Result: aArray is
*
* ADEL(aArray, 2) // Result: aArray is
* $TESTS$
* $STATUS$
* R
* $COMPLIANCE$
* $SEEALSO$
* ACOPY(),AINS(),AFILL()
* $INCLUDE$
*
* $END$
*/
HARBOUR HB_ADEL( void )
{
@@ -896,6 +1116,51 @@ HARBOUR HB_ADEL( void )
hb_itemReturn( pArray ); /* ADel() returns the array itself */
}
}
/* $DOC$
* $FUNCNAME$
* AFILL()
* $CATEGORY$
* ARRAY
* $ONELINER$
* Fill an array with a specified value
* $SYNTAX$
* AFILL(<aArray>, <xValue>,
* [<nStart>], [<nCount>]) --> aTarget
* $ARGUMENTS$
* <aArray> Name of array to be filled.
*
* <xValue> Expression to be globally filled in <aArray>
*
* <nStart> Subscript starting position
*
* <nCount> Number of subscript to be filled
* $RETURNS$
* AFILL() returns an array pointer to <aTarget>.
* $DESCRIPTION$
* This function fill each element of a array named <aArray> with
* the value <xValue>.If specified,<nStart> denotes the beginning
* element to be filled and the array elements will continue to be
* filled for <nCount> positions. If Not specified, the value of
* <nStart> will be 1, and the value of <nCount> will be the value
* of LEN(<aArray>);thus,all subscript positions in the array <aArray>
* will be filled with the value of <xValue>.
* This function will work on only a single dimension of <aArray>.
* If there are array pointer references within a subscript <aArray>,
* those value will be lost, since this function will overwrite those
* values with new values.
* $EXAMPLES$
* LOCAL aTest:={Nil,0,1,2}
* Afill(aTest,5)
* $TESTS$
* $STATUS$
* R
* $COMPLIANCE$
* $SEEALSO$
* AADD(),AEVAL(),DBSTRUCT(),DIRECTORY()
* $INCLUDE$
*
* $END$
*/
HARBOUR HB_AFILL( void )
{
@@ -919,6 +1184,60 @@ HARBOUR HB_AFILL( void )
hb_itemReturn( pArray ); /* AFill() returns the array itself */
}
}
/* $DOC$
* $FUNCNAME$
* ASCAN()
* $CATEGORY$
* ARRAY
* $ONELINER$
* Scan array elements for a specified condition
* $SYNTAX$
* ASCAN(<aTarget>, <xSearch>,
* [<nStart>], [<nCount>]) --> nStoppedAt
* $ARGUMENTS$
* <aTarget> Name of array to be scaned.
*
* <xSearch> Expression to search for withing <aTarget>
*
* <nStart> Beggining subscript position at witch to start the
* search.
*
* <nCount> Number of elements to scan with <aTarget>.
* position. If this argument is not specified, all elements from the
* $RETURNS$
* <nStoppedAt> A numeric value of subscript position where <xSearch>
* was found.
* $DESCRIPTION$
* This function scan the content of array named <aTarget> for the
* value of <xSearch>. The return value is the position in the
* array <aTarget> in which <xSearch> was found. If it was not
* found, the return value will be 0.
* If specified, the beginnig subscript position at which to start
* scanning may be set with the value passed as <nStart>. The default
* is 1.
* If specified, the number of array elements to scan may be set with
* the value passed as <nCount>. The default is the number of elements
* in the array <aTarget>.
* If <xSearch> is a code block, the operation of the function is slighty
* different.Each array subscript pointer reference is passed to the
* code block to be evaluated.The scanning routine will continue until the
* value obtainded from the code block is a logical true (.T.) or until
* the end of the array has been reached.
* $EXAMPLES$
* aDir:=Directory("*.prg")
* AScan(aDir,,,{|x,y| x[1]="Test.prg"})
* $TESTS$
* $STATUS$
* R
* $COMPLIANCE$
* This function is not CA-Clipper compatible. Clipper ASCAN() is
* affected by the SET EXACT ON/OFF Condition
* $SEEALSO$
* ACOMP(),AEVAL()
* $INCLUDE$
*
* $END$
*/
HARBOUR HB_ASCAN( void )
{
@@ -938,57 +1257,50 @@ HARBOUR HB_ASCAN( void )
else
hb_retnl( 0 );
}
/* $DOC$
* $FUNCNAME$
* AEVAL()
* AEVAL()
* $CATEGORY$
* ARRAY
* ARRAY
* $ONELINER$
* Evaluated the subscript element of an array
* Evaluated the subscript element of an array
* $SYNTAX$
* AEVAL(<aArray>, <bBlock>,
* AEVAL(<aArray>, <bBlock>,
* [<nStart>], [<nCount>]) --> aArray
*
* $ARGUMENTS$
* <aArray> Is the array to be evaluated.
* <aArray> Is the array to be evaluated.
*
* <bBlock> Is a code block to evaluate for each element processed.
* <bBlock> Is a code block to evaluate for each element processed.
*
* <nStart> The beggining array element to evaluate.
*
* <nCount> The number of elements to process.
* <nStart> The beggining array element to evaluate.
*
* <nCount> The number of elements to process.
* $RETURNS$
* AEVAL() returns an array pointer reference.
*
* AEVAL() returns an array pointer reference.
* $DESCRIPTION$
* This function will evaluate and process the subscript elements
* in <aArray>. A code block passed as <bBlock> defines the
* operation to be executed on each element of the array. All
* elements in <aArray> will be evaluated unless specified by a
* beggining subscript position in <nStart> for <nCount> elements.
* This function will evaluate and process the subscript elements
* in <aArray>. A code block passed as <bBlock> defines the
* operation to be executed on each element of the array. All
* elements in <aArray> will be evaluated unless specified by a
* beggining subscript position in <nStart> for <nCount> elements.
*
* Two parameters are passed to the code block <bBlock>. The
* individual elements in an array are the first parameter and the
* subscript position is the second.
* Two parameters are passed to the code block <bBlock>. The
* individual elements in an array are the first parameter and the
* subscript position is the second.
*
* AEVAL() does not replace a FOR...NEXT loop for processing arrays.
* If a array is an autonomous unit,AEVAL() is appropriate.If the
* array is to be altered or if elements are to be reevalueted, a
* FOR...NEXT loop is more appropriate.
* AEVAL() does not replace a FOR...NEXT loop for processing arrays.
* If a array is an autonomous unit,AEVAL() is appropriate.If the
* array is to be altered or if elements are to be reevalueted, a
* FOR...NEXT loop is more appropriate.
* $EXAMPLES$
*
* $TESTS$
*
* $STATUS$
* R
* R
* $COMPLIANCE$
*
* $SEEALSO$
* EVAL(),DBEVAL()
* EVAL(),DBEVAL()
* $INCLUDE$
*
*
* $END$
*/
@@ -1012,63 +1324,62 @@ HARBOUR HB_AEVAL( void )
else
hb_errRT_BASE( EG_ARG, 2017, NULL, "AEVAL" );
}
/* $DOC$
* $FUNCNAME$
* ACOPY()
* ACOPY()
* $CATEGORY$
* ARRAY
* ARRAY
* $ONELINER$
* Copy elements from one array to another
* Copy elements from one array to another
* $SYNTAX$
* ACOPY(<aSource>, <aTarget>,
* ACOPY(<aSource>, <aTarget>,
* [<nStart>], [<nCount>], [<nTargetPos>]) --> aTarget
*
* $ARGUMENTS$
* <aSource> is the array to copy elements from.
* <aSource> is the array to copy elements from.
*
* <aTarget> is the array to copy elements to.
* <aTarget> is the array to copy elements to.
*
* <nStart> is the beggining subscript position to copy from <aSource>
* <nStart> is the beggining subscript position to copy from <aSource>
*
* <nCount> the number of subscript elements to copy from <aSource>
*
* <nTargetPos> the starting subscript position in <aTarget> to copy
* elements to
* <nCount> the number of subscript elements to copy from <aSource>.
*
* <nTargetPos> the starting subscript position in <aTarget> to copy
* elements to.
* $RETURNS$
* ACOPY() returns an array pointer reference
* ACOPY() returns an array pointer reference
* $DESCRIPTION$
* This function copies array elements from <aSource> to <aTarget>.
* <nStart> is the beggining element to be copied from <aSource>;the
* default is 1.
* <nCount> is the number of element to be copied from <aSource>;the
* default is the entire array.
* <nTargetPos> is the subscript number in the target array,<aTarget>,
* to witch array elements are to be copied;the default is 1
* This function will copy all data types in <aSource> to <aTarget>.
* If an array element in <aSource> is a pointer reference to another
* array, that array pointer will be copied to <aTarget>; not all
* subdimensions will be copied from one array to the next. This must
* be accomplished via the ACLONE() function.
* This function copies array elements from <aSource> to <aTarget>.
* <nStart> is the beggining element to be copied from <aSource>;the
* default is 1.
* <nCount> is the number of element to be copied from <aSource>;the
* default is the entire array.
* <nTargetPos> is the subscript number in the target array,<aTarget>,
* to witch array elements are to be copied;the default is 1
* This function will copy all data types in <aSource> to <aTarget>.
* If an array element in <aSource> is a pointer reference to another
* array, that array pointer will be copied to <aTarget>; not all
* subdimensions will be copied from one array to the next. This must
* be accomplished via the ACLONE() function.
*
* ^b note
* If array <aSource> is larger then <aTarget>, array elements will
* start copying at <nTargetPos> and continue copying until the end of
* array <aTarget> is reached. The ACOPY() function doesn't append
* subscript positions to the target array, the size of the target
* array <aTarget> remains constant.
* Note
* If array <aSource> is larger then <aTarget>, array elements will
* start copying at <nTargetPos> and continue copying until the end of
* array <aTarget> is reached. The ACOPY() function doesn't append
* subscript positions to the target array, the size of the target
* array <aTarget> remains constant.
* $EXAMPLES$
* LOCAL nCount := 2, nStart := 1, aOne, aTwo
* aOne := {"HABOUR"," is ","POWER"}
* aTwo := {"CLIPPER"," was ","POWER"}
* ACOPY(aOne, aTwo, nStart, nCount)
* $TESTS$
*
* $STATUS$
* R
* R
* $COMPLIANCE$
*
* $SEEALSO$
* ACLONE(),ADEL(),AEVAL(),AFILL(),AINS(),ASORT()
* ACLONE(),ADEL(),AEVAL(),AFILL(),AINS(),ASORT()
* $INCLUDE$
*
*
* $END$
*/
@@ -1097,37 +1408,45 @@ HARBOUR HB_ACOPY( void )
}
}
/* NOTE: Clipper will return NIL if the parameter is not an array. [vszel] */
/* NOTE: [vszel] */
/* $DOC$
* $FUNCNAME$
* ACLONE()
* ACLONE()
* $CATEGORY$
* ARRAY
* ARRAY
* $ONELINER$
* Duplicate a multidimensional array
* Duplicate a multidimensional array
* $SYNTAX$
* ACLONE(<aSource>) --> aDuplicate
* ACLONE(<aSource>) --> aDuplicate
* $ARGUMENTS$
* <aSource> Name of the array to be cloned.
* <aSource> Name of the array to be cloned.
* $RETURNS$
* ACLONE() A new array pointer reference complete with nested array
* values.
* ACLONE() A new array pointer reference complete with nested array
* values.
* $DESCRIPTION$
* This function makes a complete copy of the array expressed as
* <aSource> and return a cloned set of array values.This provides
* a complete
* This function makes a complete copy of the array expressed as
* <aSource> and return a cloned set of array values.This provides
* a complete
* $EXAMPLES$
* This example creates an array then duplicates it using
* ACLONE(). The first array is then altered, but the duplicate copy is
* unaffected:
*
* LOCAL aOne, aTwo
* aOne := {"Harbour"," is ","POWER"}
* aTwo := ACLONE(aOne) // Result: aTwo is {1, 2, 3}
* aOne[1] := "The Harbour Compiler" // Result: aOne is {99, 2, 3}
* // aTwo is still {1, 2, 3}
* $TESTS$
*
* $STATUS$
* R
* R
* $COMPLIANCE$
* NOTE: Clipper will return NIL if the parameter is not an array.
* Clipper will return NIL if the parameter is not an array.
* $SEEALSO$
* ACOPY(),ADEL(),AINS(),ASIZE()
* ACOPY(),ADEL(),AINS(),ASIZE()
* $INCLUDE$
*
*
* $END$
*/
@@ -1142,3 +1461,4 @@ HARBOUR HB_ACLONE( void )
hb_itemRelease( pDstArray );
}
}

View File

@@ -184,7 +184,7 @@ return __objHasMsg( oObject, cSymbol ) .and. ;
* $PLATFORMS$
* $FILES$
* $SEEALSO$
* __ObjGetMethodList(),__ObjGetValueList,__objHasData(),__objHasMethod()
* __ObjGetMethodList(),__ObjGetValueList(),__objHasData(),__objHasMethod()
* $END$
*/
@@ -569,7 +569,7 @@ return oObject
* $PLATFORMS$
* $FILES$
* $SEEALSO$
* __objAddInline(),__objAddMethod(),__objDelData(),__objGetMsgList(),__ObjGetValueList(),__objHasData() ,__ObjSetValueList()
* __objAddInline(),__objAddMethod(),__objDelData(),__objGetMsgList(),__ObjGetValueList(),__objHasData(),__ObjSetValueList()
* $END$
*/

View File

@@ -120,7 +120,7 @@
* $COMPLIANCE$
* This is a new Harbour Tools class
* $SEEALSO$
* TClass
* TClass()
* $END$
*/

View File

@@ -36,26 +36,22 @@
/* $DOC$
* $FUNCNAME$
* ISBIN()
*
* $CATEGORY$
* Conversion
* $ONELINER$
* Check if the value is a Binary Number
* $SYNTAX$
* ISBIN(<CN>) -><CNR>
*
* $ARGUMENTS$
* <CN> STRING TO BE CHECKED
* $RETURNS$
*
* ^b .T.^b IF THE STRING IS BYNARY
* ^b .F.^b^ IF NOT
* .T. IF THE STRING IS BYNARY
* .F. IF NOT
* $DESCRIPTION$
* ^b check if the passed string is a bynary number or not
* check if the passed string is a bynary number or not
* $EXAMPLES$
*
* $SEEALSO$
* ISOCTAL(), ISDEC(), ISHEXA()
* ISOCTAL(),ISDEC(),ISHEXA()
* $INCLUDE$
*
* $END$
@@ -75,27 +71,22 @@ FUNCTION IsBin(cString)
/* $DOC$
* $FUNCNAME$
* ISOCTAL()
*
* $CATEGORY$
* Conversion
* $ONELINER$
* Check if the value is a Octal Number
* $SYNTAX$
* ISOCTAL(<CN>) -><CNR>
*
* $ARGUMENTS$
* <CN> STRING TO BE CHECKED
* $RETURNS$
*
* ^b .T.^b IF THE STRING IS OCTAL
* ^b .F.^b^ IF NOT
*
* .T. IF THE STRING IS OCTAL
* .F. IF NOT
* $DESCRIPTION$
* ^b check if the passed string is a octal number or not
* check if the passed string is a octal number or not
* $EXAMPLES$
*
* $SEEALSO$
* ISBIN(), ISDEC(), ISHEXA()
* ISBIN(),ISDEC(),ISHEXA()
* $INCLUDE$
*
* $END$
@@ -115,25 +106,22 @@ FUNCTION IsOctal(cString)
/* $DOC$
* $FUNCNAME$
* ISDEC()
*
* $CATEGORY$
* Conversion
* $ONELINER$
* Check if the value is a Decimal Number
* $SYNTAX$
* ISDEC(<CN>) -><CNR>
*
* $ARGUMENTS$
* <CN> STRING TO BE CHECKED
* $RETURNS$
* ^b .T.^b IF THE STRING IS DECIMAL
* ^b .F.^b^ IF NOT
* .T. IF THE STRING IS DECIMAL
* .F. IF NOT
* $DESCRIPTION$
* ^b check if the passed string is a decimal number or not
* check if the passed string is a decimal number or not
* $EXAMPLES$
*
* $SEEALSO$
* ISOCTAL(), ISBIN(), ISHEXA()
* ISOCTAL(),ISBIN(),ISHEXA()
* $INCLUDE$
*
* $END$
@@ -153,25 +141,22 @@ FUNCTION IsDec(cString)
/* $DOC$
* $FUNCNAME$
* ISHEXA()
*
* $CATEGORY$
* Conversion
* $ONELINER$
* Check if the value is a Hexal Number
* $SYNTAX$
* ISHEXA(<CN>) -><CNR>
*
* $ARGUMENTS$
* <CN> STRING TO BE CHECKED
* $RETURNS$
* ^b .T.^b IF THE STRING IS HEXA
* ^b .F.^b^ IF NOT
* .T. IF THE STRING IS HEXA
* .F. IF NOT
* $DESCRIPTION$
* ^b check if the passed string is a hexa number or not
* check if the passed string is a hexa number or not
* $EXAMPLES$
*
* $SEEALSO$
* ISOCTAL(), ISDEC(), ISBIN()
* ISOCTAL(),ISDEC(),ISBIN()
* $INCLUDE$
*
* $END$
@@ -191,24 +176,23 @@ FUNCTION IsHexa(cString)
/* $DOC$
* $FUNCNAME$
* DECTOBIN()
*
* $CATEGORY$
* Conversion
* $ONELINER$
* Converts a Decimal Value to Binary
* $SYNTAX$
* DECTOBIN(<CN>) -><CNR>
*
* $ARGUMENTS$
* <CN> NUMBER TO BE CONVERTED
* $RETURNS$
* <CNR> NUMBER CONVERTED
* $DESCRIPTION$
*
* This function converts a string <CN> from an decimal value
* to an binary value.
* $EXAMPLES$
*
* $SEEALSO$
*
* Dectohexa(),dectooctal()
* $INCLUDE$
*
* $END$
@@ -227,24 +211,23 @@ FUNCTION DecToBin(nNumber)
/* $DOC$
* $FUNCNAME$
* DECTOOCTAL()
*
* $CATEGORY$
* Conversion
* $ONELINER$
* Converts a Decimal Value to Octal
* $SYNTAX$
* DECTOOCTAL(<CN>) -><CNR>
*
* $ARGUMENTS$
* <CN> NUMBER TO BE CONVERTED
* $RETURNS$
* <CNR> NUMBER CONVERTED
* $DESCRIPTION$
*
* This function converts a string <CN> from an decimal value
* to an octal value.
* $EXAMPLES$
*
* $SEEALSO$
*
* Dectohexa(),dectobin()
* $INCLUDE$
*
* $END$
@@ -263,24 +246,23 @@ FUNCTION DecToOctal(nNumber)
/* $DOC$
* $FUNCNAME$
* DECTOHEXA()
*
* $CATEGORY$
* Conversion
* $ONELINER$
* Converts a Decimal Value to Hexa
* $SYNTAX$
* DECTOHEXA(<CN>) -><CNR>
*
* $ARGUMENTS$
* <CN> NUMBER TO BE CONVERTED
* $RETURNS$
* <CNR> NUMBER CONVERTED
* $DESCRIPTION$
*
* This function converts a string <CN> from an decimal value
* to an hexadecimal value.
* $EXAMPLES$
*
* $SEEALSO$
*
* Dectobin(),dectoctal()
* $INCLUDE$
*
* $END$
@@ -299,24 +281,23 @@ FUNCTION DecToHexa(nNumber)
/* $DOC$
* $FUNCNAME$
* BIntODEC()
*
* $CATEGORY$
* Conversion
* $ONELINER$
* Converts a Binary Value to Decimal
* $SYNTAX$
* BIntODEC(<CN>) -><CNR>
*
* $ARGUMENTS$
* <CN> NUMBER TO BE CONVERTED
* $RETURNS$
* <CNR> NUMBER CONVERTED
* $DESCRIPTION$
*
* This function converts a string <CN> from an binary value
* to a numeric decimal value.
* $EXAMPLES$
*
* $SEEALSO$
*
* OctaltoDec(),HexatoDec()
* $INCLUDE$
*
* $END$
@@ -335,24 +316,23 @@ FUNCTION BinToDec(cString)
/* $DOC$
* $FUNCNAME$
* OCTALTODEC()
*
* $CATEGORY$
* Conversion
* $ONELINER$
* Converts a Octal Value to Decimal
* $SYNTAX$
* OCTALTODEC(<CN>) -><CNR>
*
* $ARGUMENTS$
* <CN> NUMBER TO BE CONVERTED
* $RETURNS$
* <CNR> NUMBER CONVERTED
* $DESCRIPTION$
*
* This function converts a string <CN> from an octal value
* to a numeric decimal value.
* $EXAMPLES$
*
* $SEEALSO$
*
* BintoDec(),HexatoDec()
* $INCLUDE$
*
* $END$
@@ -371,29 +351,29 @@ FUNCTION OctalToDec(cString)
/* $DOC$
* $FUNCNAME$
* HEXATODEC()
* HEXATODEC()
* $CATEGORY$
* Conversion
* $ONELINER$
* Converts a Hexa Value to Decimal
* Converts a Hexa Value to Decimal
* $SYNTAX$
* HEXATODEC(<CN>) -><CNR>
*
* HEXATODEC(<CN>) -><CNR>
* $ARGUMENTS$
* <CN> NUMBER TO BE CONVERTED
* <CN> NUMBER TO BE CONVERTED
* $RETURNS$
* <CNR> NUMBER CONVERTED
* <CNR> NUMBER CONVERTED
* $DESCRIPTION$
*
* This function converts a string <CN> from an hexadecimal value
* to a numeric decimal value.
* $EXAMPLES$
*
* $SEEALSO$
*
* OctaltoDec(),BintoDec()
* $INCLUDE$
*
* $END$
*/
FUNCTION HexaToDec(cString)
local nNumber:=0,nX:=0
local cNewString:=AllTrim(cString)
@@ -404,4 +384,4 @@ FUNCTION HexaToDec(cString)
NEXT nX
RETURN nNumber
* EOF: NCONVERT.PRG

View File

@@ -66,14 +66,14 @@ RETURN Self
METHOD WritePar( cPar ) CLASS TNortonGuide
FWRITE( Self:nHandle, ALLTRIM( cPar ) + CRLF )
FWRITE( Self:nHandle, HB_OEMTOANSI( cPar ) + CRLF )
RETURN Self
METHOD WriteParBold( cPar ) CLASS TNortonGuide
FWRITE( Self:nHandle, '^b' + ALLTRIM( cPar ) + '^b^' + CRLF )
Self:WritePar("")
FWRITE( Self:nHandle, '^b' + HB_OEMTOANSI( cPar ) + '^b^' + CRLF )
Self:WritePar("")
RETURN Self
METHOD WriteTitle( cTopic, cTitle ) CLASS TNortonGuide
@@ -82,7 +82,7 @@ METHOD WriteTitle( cTopic, cTitle ) CLASS TNortonGuide
LOCAL nPos
LOCAL cWrite
cTopic := ALLTRIM( cTopic )
cTopic := HB_OEMTOANSI( cTopic )
FWRITE( Self:nHandle, "!Short: " + cTopic + CRLF )
@@ -140,9 +140,7 @@ RETURN Self
* oNg:WritePar( "See the Links Above" )
* oNg:Close()
* RETURN Nil
*
* $TESTS$
*
* $STATUS$
* R
* $COMPLIANCE$
@@ -150,7 +148,6 @@ RETURN Self
* $PLATFORMS$
* ALL
* $FILES$
*
* $SEEALSO$
* TCLASS()
* $END$

View File

@@ -77,7 +77,7 @@ RETURN Self
METHOD WritePar( cPar ) CLASS TOs2
FWRITE( Self:nHandle, ".br"+CRLF+Self:DostoOs2Text(ALLTRIM( cPar )) + CRLF )
FWRITE( Self:nHandle, ".br"+CRLF+Self:DostoOs2Text( cPar ) + CRLF )
RETURN Self
@@ -100,9 +100,6 @@ METHOD WriteTitle( cTopic, cTitle ) CLASS TOs2
ELSE // Just in case that nItem>0 so the Link is already referenced
nItem:=ASCAN(Self:aLinkRef,{|a| a[1]==cTopic})
ENDIF
// IF nItem==0
// nItem:=Self:nRef
// ENDIF
fWrite(Self:nHandle,':title.'+ALLTRIM(cTitle)+CRLF)

View File

@@ -111,8 +111,9 @@ METHOD WriteHeader() CLASS TRTF
RETURN Self
METHOD WritePar( cPar ) CLASS TRTF
FWRITE( Self:nHandle, '\pard{\cf1\fs20 ' + ALLTRIM( cPar ) )
cPar:=StrTran(cPar,"{","\{")
cPar:=StrTran(cPar,"}","\}")
FWRITE( Self:nHandle, '\pard{\cf1\fs30 ' + HB_OEMTOANSI(" ")+ HB_OEMTOANSI(cPar ))
RETURN Self
METHOD EndPar() CLASS TRTF
@@ -123,8 +124,9 @@ RETURN Self
METHOD WriteParBold( cPar ) CLASS TRTF
FWRITE( Self:nHandle, '\pard{\plain\cf1\f2\fs20\i\b\qc ' + ALLTRIM( cPar ) + ' }\par' + CRLF )
cPar:=StrTran(cPar,"{","\{")
cPar:=StrTran(cPar,"}","\}")
FWRITE( Self:nHandle, '\pard{\plain\cf1\f2\fs30\i\b\qc ' + ALLTRIM(HB_OEMTOANSI( cPar )) + ' }\par' + CRLF )
RETURN Self
METHOD WriteTitle( cTitle, cTopic ) CLASS TRTF
@@ -136,12 +138,13 @@ METHOD WriteTitle( cTitle, cTopic ) CLASS TRTF
nPos := AT( "()", cTitle )
IF nPos > 0
cTemp := ALLTRIM( STRTRAN( cTitle, "()", "xx" ) )
cTemp := ALLTRIM( HB_OEMTOANSI(STRTRAN( cTitle, "()", "xx" ) ))
ELSE
cTemp := ALLTRIM( cTitle )
cTemp := HB_OEMTOANSI(ALLTRIM( cTitle ))
cTemp :=STRTRAN( cTemp,"@", "x" )
ENDIF
cTopic := ALLTRIM( cTopic )
cTopic := ALLTRIM( HB_OEMTOANSI(cTopic ))
cWrite := '{\f2' + CRLF + ;
' #{\footnote \pard\plain \fs20 # ' + "IDH_"+cTemp + ' }' + CRLF + ;
@@ -151,7 +154,7 @@ METHOD WriteTitle( cTitle, cTopic ) CLASS TRTF
FWRITE( Self:nHandle, cWrite )
Self:WritePar( cTopic ):EndPar()
Self:WriteParBold( cTopic )
RETURN Self
@@ -167,7 +170,7 @@ RETURN Self
METHOD WriteLink( cLink ) CLASS TRTF
FWRITE( Self:nHandle, '\pard{\cf1\fs20 {\f2\uldb ' + ALLTRIM( cLink ) + '}{\v\f2 ' + "IDH_"+ALLTRIM( STRTRAN( cLink, "()", "xx" ) ) + '} }\par' + CRLF )
FWRITE( Self:nHandle, '\pard{\cf1\fs30 {\f2\uldb ' + ALLTRIM( HB_OEMTOANSI(cLink) ) + '}{\v\f2 ' + "IDH_"+IF(AT( "()",cLink)>0 , ALLTRIM( HB_OEMTOANSI(STRTRAN( cLink, "()", "xx" ) )),ALLTRIM( HB_OEMTOANSI(STRTRAN( cLink, "@", "x" )) )) + '} }\par' + CRLF )
RETURN Self

View File

@@ -48,7 +48,6 @@ CLASS TTROFF
DATA cFile
DATA nHandle
METHOD New( cFile )
METHOD WritePar( cPar )
METHOD WriteLink( clink )
METHOD CLOSE()
@@ -138,3 +137,57 @@ METHOD WriteLink( cLink ) CLASS TTROFF
RETURN Self
*+ EOF: TROFF.PRG
*+ EOF: RTF.PRG
/* $DOC$
* $FUNCNAME$
* TTroff()
* $CATEGORY$
* Harbour Tools
* $ONELINER$
* Troff Class
* $SYNTAX$
* oTroff:=TTrof():New(<cFile>)
* $ARGUMENTS$
* <cFile> Name of the RTF file to create
* $RETURNS$
* An instance of the TTroff Class
* $DESCRIPTION$
* TRtf() is a class that create the Norton Guide Source
* Code of the same name you pass to the constructor.
* The class methods are as follows:
* New(<cFile>) Create a new instance of the THtml class.
* Close() Close the create file
* WriteTitle(<cTopic>,<cTitle>) Write the file title
* WritePar(<cPar>) Writes a paragrafer
* WriteParBold(<cPar>) Same as WritePar(), but the text is bold style.
* WriteLink(<cLink>) Write a link to another topic
* WriteText() Writes a text with out formating
* $EXAMPLES$
* FUNCTION MAIN()
*
* LOCAL oTroff
* oTroff := TTroff():New( "tr\harbour.ngi" )
* oTroff:WriteTitle( "Harbour Reference Guide" )
* oTroff:WritePar( "HARBOUR" )
* oTroff:WriteLink( "OverView" )
* oTroff:WriteLink( "License" )
*
* oTroff:WritePar( "See the Links Above" )
* oTroff:Close()
*
* RETURN Nil
*
* $TESTS$
*
* $STATUS$
* R
* $COMPLIANCE$
* This is a new Harbour Tools class
* $PLATFORMS$
* ALL
* $FILES$
*
* $SEEALSO$
* TCLASS()
* $END$
*/