See Changelog 2000-01-22 13:40 GMT +3

This commit is contained in:
Luiz Rafael Culik
2000-01-22 15:52:28 +00:00
parent cbb5164f3b
commit 39a1fdaaed
8 changed files with 448 additions and 18 deletions

View File

@@ -1,3 +1,8 @@
2000-01-22 13:40 GMT+3 Luiz Rafael Culik <culik@sl.conex.net>
* ngdoc/ft_helpc.prg
*Added support for OS2 IPF source code
+source/tools/os2.prg
Support class for FT_HELPC generate OS2 IPF files
2000-01-22 10:22 GMT+1 Patrick Mast <harbour@PatrickMast.com>
* source/rtl/environ.c (From Jose Lalin)
! Getenv accepts a default value to return when the envvar is not found

View File

@@ -14,7 +14,7 @@ ft_helpc.c : ft_helpc.prg
bin\harbour $< /n /ongdoc\ /iinclude /p /DNANFOR
ft_helpc.exe: ft_helpc.obj
echo -v -O2 > bld.32
echo -O2 > bld.32
echo -engdoc\ft_helpc.exe >> bld.32
echo -Iinclude >> bld.32
echo ngdoc\ft_helpc.c >> bld.32

View File

@@ -11,4 +11,5 @@ make -fgt.b32 >> make.err
make -frdd.b32 >> make.err
make -frunner.b32 >> make.err
make -fregress.b32 >> make.err
make -fft_helpc.b32 >> make.err
notepad make.err

View File

@@ -44,7 +44,7 @@
* 1/17/2000 Added Code to generate TROFF files
*
* 1/18/2000 Added Cleanup procedure when Generating Norton Guide
* and Winhelp File
*
*
*/
@@ -261,7 +261,10 @@ FUNCTION FT_HELPC( cFlags, cLinkName, cAtFile, cDir )
IF EMPTY( DIRECTORY( "tr.*", "D" ) )
FT_MKDIR( "tr" )
ENDIF
ELSEIF lOs2
IF EMPTY( DIRECTORY( "ipf.*", "D" ) )
FT_MKDIR( "ipf" )
ENDIF
ENDIF
IF cAtFile = NIL // use all files in directory
@@ -290,6 +293,8 @@ FUNCTION FT_HELPC( cFlags, cLinkName, cAtFile, cDir )
ProcessNgi()
ELSEIF lTroff
ProcessTroff()
ELSEIF lOs2
ProcessOs2()
ENDIF
ENDIF
NEXT
@@ -314,7 +319,8 @@ FUNCTION FT_HELPC( cFlags, cLinkName, cAtFile, cDir )
ProcessNgi()
ELSEIF lTroff
ProcessTroff()
ELSEIF lOs2
ProcessOs2()
ENDIF
ENDIF
@@ -410,7 +416,7 @@ FUNCTION FT_HELPC( cFlags, cLinkName, cAtFile, cDir )
// Find match
nItem :=1
nItem := 1
IF nItem > 0
IF i = 1 .OR. .NOT. ( ALLTRIM( aDocInfo[ i - 1, 1 ] ) == ALLTRIM( aDocInfo[ i, 1 ] ) )
@@ -490,9 +496,8 @@ FUNCTION FT_HELPC( cFlags, cLinkName, cAtFile, cDir )
? "REM Link the files"
? "Echo Linking library"
? "hcrtf harbour.hpj"
? "hcw harbour.hpj"
? " "
? 'del rtf\*.*'
ELSEIF lNgi
? "Processing Input Files"
@@ -3602,7 +3607,6 @@ RETURN aAlso
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
FUNCTION ProcNgiInput()
LOCAL aFiles := {}
@@ -3982,18 +3986,16 @@ STATIC FUNCTION ProcessTroff
// Now close down this little piece
lDoc := .F.
IF .NOT. EMPTY( cSeeAlso )
oTroff:WriteText('.ft B'+CRLF+"See Also:"+CRLF+'.ft R')
oTroff:WriteText( '.ft B' + CRLF + "See Also:" + CRLF + '.ft R' )
FOR nAlso := 1 TO LEN( aalso )
IF nAlso == 1
oTroff:WriteLink( aalso[ nAlso ] )
oTroff:WriteLink( aalso[ nAlso ] )
ELSE
oTroff:WriteLink( "," + aalso[ nAlso ] )
ENDIF
NEXT
ENDIF
otroff:Close()
@@ -4229,7 +4231,7 @@ STATIC FUNCTION ProcessTroff
otroff:WritePar( StripNgControls( cBuffer ) )
ELSEIF nMode = D_SEEALSO
IF .NOT. EMPTY( cBuffer )
cSeeAlso := ProcTroffAlso(StripFiles( ALLTRIM( cBuffer ) ))
cSeeAlso := ProcTroffAlso( StripFiles( ALLTRIM( cBuffer ) ) )
ENDIF
ELSEIF nMode = D_INCLUDE
// read next line
@@ -4264,10 +4266,426 @@ STATIC FUNCTION ProcessTroff
FT_FUSE()
NEXT
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function ProcTroffAlso()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
FUNCTION ProcTroffAlso( cSeealso )
aAlso := {}
aAlso := ListAsArray2( cSeealso, "," )
RETURN aAlso
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Static Function ProcessOs2()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
STATIC FUNCTION ProcessOs2
//
// Copyright (C) 2000 Luiz Rafael Culik
//
// Purpose: Process each of the files in the directory
// and generate .tr file format output
// Modification History:
// Version Date Who Notes
// V1.00 1/20/2000 LRC Initial Version
//
// Calling parameters: None
//
// Notes: None
// -
// 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
LOCAL i
LOCAL j
LOCAL nFiles
LOCAL nCommentLen
LOCAL lEof
LOCAL lDoc
LOCAL lDone
LOCAL cBuffer
LOCAL nEnd
LOCAL nCount
LOCAL cBar := "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"
LOCAL nMode
LOCAL cAuthor
LOCAL cCISID
LOCAL cFuncName
LOCAL cOneLine
LOCAL cCategory
LOCAL cFileName
LOCAL nLineCnt
LOCAL cSeeAlso
LOCAL cTemp
LOCAL cChar
LOCAL nNonBlank
LOCAL lBlankLine := .F. // Blank line encountered and sent out
LOCAL lAddBlank := .F. // Need to add a blank line if next line is not blank
adirlist := DIRECTORY( '*.prg' )
nFiles := LEN( aDirList )
//
// Entry Point
//
// Put up information labels
@ INFILELINE, 20 SAY "Extracting: "
@ MODULELINE, 20 SAY "Documenting: "
// loop through all of the files
oOs2 := tOS2():new( "ipf\Harbour.ipf" )
FOR i := 1 TO nFiles
// Open file for input
nCommentLen := IIF( AT( ".ASM", UPPER( aDirList[ i, F_NAME ] ) ) > 0, 2, 3 )
nReadHandle := FT_FUSE( aDirList[ i, F_NAME ] )
@ INFILELINE, 33 CLEAR TO INFILELINE, MAXCOL()
@ INFILELINE, 33 SAY PAD( aDirList[ i, F_NAME ], 47 )
@ MODULELINE, 33 CLEAR TO LINELINE, MAXCOL()
@ LINELINE, 27 SAY "Line:"
nLineCnt := 0
IF nReadHandle < 0
write_error( "Can't open file: (Dos Error " + STR( FERROR() ) + ")",,,, aDirList[ i, F_NAME ] )
@ ERRORLINE, 0 CLEAR TO ERRORLINE, MAXCOL()
@ ERRORLINE, 20 SAY "Can't open file: (Dos Error " + STR( FERROR() ) + ") File=" + aDirList[ i, F_NAME ]
LOOP
ENDIF
lEof := .F.
lDoc := .F.
// First find the author
DO WHILE .NOT. lEof
// Read a line
cBuffer := TRIM( SUBSTR( ReadLN( @lEof ), nCommentLen ) )
nLineCnt ++
IF nLineCnt % 10 = 0
@ LINELINE, 33 SAY STR( nLineCnt, 5, 0 )
ENDIF
// check to see if we are in doc mode or getting out of doc mode
IF AT( cDoc, cBuffer ) > 0
IF lDoc
write_error( cDoc + " encountered during extraction of Doc" ;
+ " at line" + STR( nLinecnt, 5, 0 ),,,, aDirList[ i, F_NAME ] )
ENDIF
lDoc := .T.
cBuffer := TRIM( SUBSTR( ReadLN( @lEof ), ;
nCommentLen ) )
nLineCnt ++
cCategory := cFuncName := cSeeAlso := ""
nMode := D_IGNORE
ELSEIF AT( cEnd, cBuffer ) > 0
IF .NOT. lDoc
write_error( cEnd + " encountered outside of Doc area at line" ;
+ STR( nLinecnt, 5, 0 ),,,, aDirList[ i, F_NAME ] )
ELSE
// Add a new entry to our list of files
IF EMPTY( cCategory )
write_error( "Blank Category",,,, aDirList[ i, F_NAME ] )
cCategory := "Unknown"
ENDIF
IF EMPTY( cFuncName )
write_error( "Blank Function Name",,,, aDirList[ i, F_NAME ] )
cFuncName := "Unknown"
ENDIF
AADD( aDocInfo, { cCategory, cFuncName, cOneLine, cFileName } )
// Now close down this little piece
lDoc := .F.
IF .NOT. EMPTY( cSeeAlso )
oOs2:WritePar( ".br" + CRLF + "See Also:" )
FOR nAlso := 1 TO LEN( aalso )
IF nAlso == 1
oOs2:WriteLink( aalso[ nAlso ] )
ELSE
oOs2:WriteLink( aalso[ nAlso ] )
ENDIF
NEXT
ENDIF
nMode := D_IGNORE
ENDIF
@ MODULELINE, 33 CLEAR TO MODULELINE, MAXCOL()
ENDIF
// Act on the input
IF lDoc
// 1) function name
IF AT( cFunc, cBuffer ) > 0 .OR. AT( cComm, cBuffer ) > 0
cBuffer := ReadLN( @lEof )
nLineCnt ++
// Save the function name
cFuncName := UPPER( ALLTRIM( SUBSTR( cBuffer, nCommentLen ) ) )
@ MODULELINE, 33 CLEAR TO MODULELINE, MAXCOL()
@ MODULELINE, 33 SAY cFuncName
nMode := D_NORMAL
// Open a new file
IF AT( "FT_", cFuncName ) > 0
cTemp := SUBSTR( cFuncName, 4 )
ELSE
cTemp := cFuncName
ENDIF
IF ( nEnd := AT( "(", cTemp ) ) > 0
cTemp := LEFT( cTemp, nEnd - 1 )
ENDIF
cFileName := ""
// Strip off any other non-alphabetic/numeric characters
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 = "_"
cFileName += cChar
ENDIF
NEXT
// See if file name is present already. If so then modify
cFileName := LEFT( cFileName, 21 )
nEnd := 1
nCount := 0
DO WHILE nEnd > 0
nEnd := ASCAN( aDocInfo, { | a | a[ 4 ] == cFileName + ".ipf" } )
IF nEnd > 0
// This will break if there are more than 10 files with the same first
// seven characters. We take our chances.
IF LEN( cFileName ) = 21
cFileName := STUFF( cFileName, 21, 1, STR( nCount, 1, 0 ) )
ELSE
cFileName += STR( nCount, 1, 0 )
ENDIF
nCount ++
ENDIF
ENDDO
// Add on the extension
IF oOs2:nHandle < 1
? "Error creating", cFileName, ".ipf"
write_error( "Error creating",,,, cFileName + ".ipf" )
ENDIF
// 2) Category
ELSEIF AT( cCat, cBuffer ) > 0
cBuffer := ReadLN( @lEof )
nLineCnt ++
// get the category
cCategory := UPPER( ALLTRIM( SUBSTR( cBuffer, nCommentLen ) ) )
// 3) One line description
ELSEIF AT( cOne, cBuffer ) > 0
cBuffer := ReadLN( @lEof )
nLineCnt ++
cOneLine := ALLTRIM( SUBSTR( cBuffer, nCommentLen ) )
IF LEN( cOneLine ) > LONGONELINE
write_error( "OneLine", cOneLine, nLineCnt, LONGONELINE, ;
aDirList[ i, F_NAME ] )
ENDIF
nMode := D_ONELINE
// Now start writing out what we know
oOs2:WriteTitle( PAD( cFuncName, 21 ), cFuncName )
oOs2:WriteParBold( cOneLine )
// 4) all other stuff
ELSE
IF AT( cSyn, cBuffer ) > 0
oOs2:WriteParBold( " Syntax" )
nMode := D_SYNTAX
lAddBlank := .T.
ELSEIF AT( cArg, cBuffer ) > 0
IF !lBlankLine
oOs2:WriteParBold( " Arguments" )
ENDIF
nMode := D_ARG
lAddBlank := .T.
ELSEIF AT( cRet, cBuffer ) > 0
IF !lBlankLine
oOs2:WritePar( "" )
ENDIF
oOs2:WriteParBold( " Returns" )
nMode := D_ARG
lAddBlank := .T.
ELSEIF AT( cDesc, cBuffer ) > 0
IF !lBlankLine
oOs2:WritePar( "" )
ENDIF
oOs2:WriteParBold( " Description" )
nMode := D_NORMAL
lAddBlank := .T.
ELSEIF AT( cExam, cBuffer ) > 0
IF !lBlankLine
oOs2:WritePar( "" )
ENDIF
oOs2:WriteParBold( " Examples" )
nMode := D_NORMAL
lAddBlank := .T.
ELSEIF AT( cTest, cBuffer ) > 0
IF !lBlankLine
oOs2:WritePar( "" )
ENDIF
oOs2:WriteParBold( " Tests" )
nMode := D_NORMAL
lAddBlank := .T.
ELSEIF AT( cStatus, cBuffer ) > 0
nMode := D_STATUS
ELSEIF AT( cCompl, cBuffer ) > 0
IF !lBlankLine
oOs2:WritePar( "" )
ENDIF
oOs2:WriteParBold( " Compilance" )
nMode := D_NORMAL
lAddBlank := .T.
ELSEIF AT( cPlat, cBuffer ) > 0
IF !lBlankLine
oOs2:WritePar( "" )
ENDIF
oOs2:WriteParBold( " Plataforms" )
nMode := D_NORMAL
lAddBlank := .T.
ELSEIF AT( cFiles, cBuffer ) > 0
IF !lBlankLine
oOs2:WritePar( "" )
ENDIF
oOs2:WriteParBold( " Files" )
nMode := D_NORMAL
lAddBlank := .T.
ELSEIF AT( cSee, cBuffer ) > 0
nMode := D_SEEALSO
ELSEIF AT( cInc, cBuffer ) > 0
nMode := D_INCLUDE
// All other input is trimmed of comments and sent out
ELSE
// translate any \$ into $
cBuffer := STRTRAN( cBuffer, "\" + DELIM, DELIM )
IF nMode = D_SYNTAX
IF LEN( cBuffer ) > LONGLINE
write_error( "Syntax", cBuffer, nLineCnt, ;
LONGLINE, aDirList[ i, F_NAME ] )
ENDIF
lBlankLine := EMPTY( cBuffer )
IF lAddBlank
oOs2:WritePar( "" )
lAddBlank := .F.
ENDIF
/* nNonBlank:=FirstNB(cBuffer)
cBuffer=STUFF(cBuffer,nNonBlank,0,"^a1f ")*/
oOs2:WritePar( cBuffer )
ELSEIF nMode = D_ARG
IF LEN( cBuffer ) > LONGLINE
write_error( "Arguments", cBuffer, nLineCnt, ;
LONGLINE, aDirList[ i, F_NAME ] )
ENDIF
lBlankLine := EMPTY( cBuffer )
IF lAddBlank
oOs2:WritePar( "" )
lAddBlank := .F.
ENDIF
cBuffer := STRTRAN( cBuffer, "<", "<", 1 )
cBuffer := STRTRAN( cBuffer, ">", ">", 1 )
oOs2:WritePar( StripNgControls( cBuffer ) )
ELSEIF nMode = D_NORMAL
IF LEN( cBuffer ) > LONGLINE
write_error( "General", cBuffer, nLineCnt, ;
LONGLINE, aDirList[ i, F_NAME ] )
ENDIF
lBlankLine := EMPTY( cBuffer )
IF lAddBlank
oOs2:WritePar( "" )
lAddBlank := .F.
ENDIF
oOs2:WritePar( StripNgControls( cBuffer ) )
ELSEIF nMode = D_SEEALSO
IF .NOT. EMPTY( cBuffer )
cSeeAlso := ProcTroffAlso( StripFiles( ALLTRIM( cBuffer ) ) )
ENDIF
ELSEIF nMode = D_INCLUDE
// read next line
IF .NOT. EMPTY( cBuffer )
IF !lBlankLine
oOs2:WritePar( "" )
ENDIF
oOs2:WritePar( " Header File: " ;
+ ALLTRIM( cBuffer ) )
ENDIF
ELSEIF nMode = D_STATUS
IF !EMPTY( cBuffer )
oOs2:WriteParBold( "Status" )
ENDIF
ProcStatuswww( oOs2, cBuffer )
ELSE
// unknown data from somewhere
write_error( "Unknown Data Type " + cBuffer,, ;
nLineCnt, ;
LONGONELINE, aDirList[ i, F_NAME ] )
ENDIF
ENDIF
ENDIF
ENDIF
ENDDO
// Close down the input file
FT_FUSE()
NEXT
oOs2:Close()
RETURN NIL
*+ EOF: FT_HELPC.PRG

View File

@@ -1,6 +1,5 @@
/*
=======
* $Id$
*/

View File

@@ -1,3 +1,6 @@
/*
* $Id$
*/
/*
* Harbour Project source code:

View File

@@ -1,6 +1,7 @@
/*
* $Id$
*/
* $Id$
*/
/*
* Harbour Project source code:

View File

@@ -1,3 +1,6 @@
/*
* $Id$
*/
/*
* Harbour Project source code:
@@ -98,7 +101,7 @@ METHOD WriteTitle( cTopic, cTitle ) CLASS TTROFF
cWriteTemp := cTemp + CRLF + ;
'.in 0i' + CRLF + ;
'.br' + CRLF + ;
'\l 6.24i ' + CRLF + ;
"\l'6.24i" + CRLF + ;
'.br' + CRLF
FWRITE( Self:nHandle, cWriteTopic )
FWRITE( Self:nHandle, cWriteTitle )