1193 lines
36 KiB
Plaintext
1193 lines
36 KiB
Plaintext
/*
|
|
* $Id$
|
|
*/
|
|
|
|
/*
|
|
* Harbour Project source code:
|
|
* HBDOC document Extractor
|
|
*
|
|
* Copyright 2000 Luiz Rafael Culik <culik@sl.conex.net>
|
|
* www - http://www.harbour-project.org
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version, with one exception:
|
|
*
|
|
* The exception is that if you link the Harbour Runtime Library (HRL)
|
|
* and/or the Harbour Virtual Machine (HVM) with other files to produce
|
|
* an executable, this does not by itself cause the resulting executable
|
|
* to be covered by the GNU General Public License. Your use of that
|
|
* executable is in no way restricted on account of linking the HRL
|
|
* and/or HVM code into it.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA (or visit
|
|
* their web site at http://www.gnu.org/).
|
|
*
|
|
*/
|
|
|
|
/*
|
|
* File......: HBDOC.PRG
|
|
* Author....: Luiz Rafael Culik
|
|
* Date......: $Date$
|
|
* Revision..: $Revision$
|
|
* Log file..: $Logfile: $
|
|
*
|
|
*
|
|
* Modification history:
|
|
* ---------------------
|
|
*
|
|
* V1.00
|
|
* 2000/01/05 Initial Version. Based on Leo Letendre FT_DOC
|
|
*
|
|
* 2000/01/06 Added the ProccAlso Function
|
|
*
|
|
* 2000/01/08 Fixed the Line between the Title and the Text
|
|
* Functions Description is now in font Arial size 12
|
|
* V1.01
|
|
* 2000/01/09 Added RTF Source output Format
|
|
*
|
|
* 2000/01/11 Remove the code to add the Author name and Source file
|
|
* Name to the output file.
|
|
*
|
|
* V1.02
|
|
* 2000/01/12 Added suport for WWW output Format
|
|
* Striped out the "<" and ">" delimeter for WWW outPut,
|
|
* since the "<>" are HTML Command delimeters
|
|
* Output files names are in lower case to Linux Compatibility
|
|
*
|
|
* 2000/01/13 Added the link for the HARBOUR GPL LICENSE
|
|
* 2000/01/14 Fixed a bug on generating the HTML file
|
|
* 2000/01/15 Strip out the for Norton guides controls characters
|
|
* when generating HTML and RTF output
|
|
*
|
|
* V1.03
|
|
* 2000/01/16 Added Code to generate Norton Guide Source code
|
|
*
|
|
* V1.04
|
|
* 2000/01/17 Added Code to generate TROFF files
|
|
* 2000/01/18 Added Cleanup procedure when Generating Norton Guide
|
|
*
|
|
* V1.05
|
|
* 2000/01/22 Added Code to generate OS2 IPF files
|
|
*
|
|
* V1.06
|
|
* 2000/01/25 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.
|
|
*
|
|
* V1.07
|
|
* Added back the "<" and ">" symbols
|
|
* Fixed the links on the Harbour.htm file
|
|
* Fixed the help text when hbdoc is called with out any parameter
|
|
*/
|
|
|
|
#ifdef __HARBOUR__
|
|
#define NANFOR
|
|
#endif
|
|
|
|
#include "directry.ch"
|
|
#include "fileio.ch"
|
|
#include "inkey.ch"
|
|
#include 'hbdocdef.ch'
|
|
// output lines on the screen
|
|
|
|
#define INFILELINE 10
|
|
#define MODULELINE 12
|
|
#define LINELINE 14
|
|
#define ERRORLINE 20
|
|
#define LONGLINE 78
|
|
#define LONGONELINE 66
|
|
|
|
// The delimiter
|
|
MEMVAR aDirList
|
|
MEMVAR aDocInfo
|
|
MEMVAR aLinkInfo
|
|
MEMVAR aAuthorList
|
|
MEMVAR lAscii
|
|
MEMVAR lContinuous
|
|
MEMVAR lAuthor
|
|
MEMVAR lRtf
|
|
MEMVAR lNgi
|
|
MEMVAR lOs2
|
|
MEMVAR lWww
|
|
MEMVAR lNorton
|
|
MEMVAR aWWW
|
|
MEMVAR lTroff
|
|
STATIC cTitle:=''
|
|
/*
|
|
*/
|
|
|
|
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
|
|
*+
|
|
*+ Function MAIN()
|
|
*+
|
|
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
|
|
*+
|
|
FUNCTION MAIN( cFlags, cLinkName, cAtFile )
|
|
|
|
// LOCAL variables:
|
|
// NG/EH input
|
|
|
|
LOCAL aExtensions := { "*.ch", "*.prg", "*.c", "*.asm", "*.txt" }
|
|
LOCAL i
|
|
LOCAL j
|
|
LOCAL nItem
|
|
LOCAL nHpj
|
|
LOCAL cItem:=''
|
|
LOCAL nPos
|
|
LOCAL cCompiler // Compiler type
|
|
// Include norton compatable switch for EH
|
|
LOCAL lDone // Done with a loop
|
|
LOCAL cMi // Name params
|
|
LOCAL cLName // Name params
|
|
LOCAL cFName // Name params
|
|
LOCAL aName // Tokenized name
|
|
LOCAL nLen // Length of the token array
|
|
LOCAL oHtm
|
|
LOCAL oHtm1
|
|
LOCAL ppp
|
|
LOCAL cTemp
|
|
PUBLIC theHandle
|
|
PUBLIC aDirList
|
|
PUBLIC aDocInfo := {}
|
|
PUBLIC aLinkInfo := {}
|
|
PUBLIC aAuthorList := {}
|
|
PUBLIC lAscii := .F. // Create ascii output instead of NG/EH input
|
|
PUBLIC lContinuous := .F. // Create continuous ascii output instead of
|
|
PUBLIC lAuthor := .T. // Include author in output of ascii output
|
|
PUBLIC lRtf := .F.
|
|
PUBLIC lNgi := .F.
|
|
PUBLIC lOs2 := .F.
|
|
PUBLIC lWww := .F.
|
|
PUBLIC lNorton := .F.
|
|
PUBLIC aWWW := {}
|
|
PUBLIC lTroff := .f.
|
|
|
|
// The following variables are used to allow one to change the delimiter
|
|
// around the keywords.
|
|
|
|
//
|
|
// Entry Point
|
|
//
|
|
|
|
// Delete log file if present
|
|
|
|
IF FILE( "hbdocerr.log" )
|
|
DELETE FILE "hbdocerr.log"
|
|
ENDIF
|
|
|
|
// See if flag is there
|
|
|
|
IF .NOT. EMPTY( cFlags )
|
|
IF LEFT( cFlags, 1 ) == "-" .OR. LEFT( cFlags, 1 ) == "/"
|
|
IF ( cFlags := UPPER( RIGHT( cFlags, 3 ) ) ) == "TXT"
|
|
lAscii := .T.
|
|
lContinuous := .F.
|
|
ELSEIF cFlags = "HPC"
|
|
lNorton := .T.
|
|
ELSEIF cFlags = "NGI"
|
|
lNgi := .T.
|
|
ELSEIF cFlags = "OS2"
|
|
lOs2 := .T.
|
|
ELSEIF cFlags = "RTF"
|
|
lRtf := .T.
|
|
ELSEIF cFlags = "HTM"
|
|
lWww := .T.
|
|
ELSEIF cFlags = "TRF"
|
|
lTroff := .t.
|
|
ELSEIF cFlags = "DOC"
|
|
lAscii := .T.
|
|
lContinuous := .T.
|
|
lAuthor := .F.
|
|
ENDIF
|
|
ELSE
|
|
cAtFIle := cLinkName
|
|
cLinkName := cFlags
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Get the linkfile name and get the info in it
|
|
|
|
IF cLinkName = NIL
|
|
?? "Harbour Doc Extractor"
|
|
? "Copyright 1999-2000, http://www.harbour-project.org"
|
|
? ""
|
|
? "Syntax: hbdoc [options] <linkname> [<ifile>]"
|
|
? ""
|
|
? "Options: /txt Create an ASCII file instead of a Norton Guide"
|
|
? " /con Create an ASCII file without formfeeds"
|
|
? " /hpc Helpc source file"
|
|
? " /ngi Adds the -NG switch to EHC command for compile for"
|
|
? " DOS/Windows/Linux."
|
|
? " /rtf Winhelp source code for Windows"
|
|
? " /os2 OS/2 help source code For OS/2"
|
|
? " /htm Generate HTML output"
|
|
? " /trf Gerenate Linux TROFF code"
|
|
? " /doc Create continuous ASCII file w/o author information"
|
|
? " "
|
|
? "Notes: - Only one option can be specified at a time."
|
|
? " - <linkname> is the name of the Norton Guide Link file."
|
|
? " - <iFile> is a file containing a list of files to process"
|
|
? " otherwise *.prg, *.c, *.asm, *.ch and *.txt are used."
|
|
RETURN NIL
|
|
ENDIF
|
|
|
|
// check to see if input files are present
|
|
IF .NOT. FILE( cLinkName )
|
|
? "Link file Not Found:", cLinkName
|
|
RETURN NIL
|
|
ENDIF
|
|
|
|
IF .NOT. EMPTY( cAtFIle ) .AND. .NOT. FILE( cAtFile )
|
|
? "Indirect file Not Found:", cAtFile
|
|
RETURN NIL
|
|
ENDIF
|
|
|
|
CLEAR SCREEN
|
|
SET CURSOR OFF
|
|
ReadLinkFile( cLinkName )
|
|
cCompiler := fill_Link_info( cLinkName )
|
|
|
|
// See if ngi subdirectory is present
|
|
IF lNorton
|
|
IF EMPTY( DIRECTORY( "hdf.*", "D" ) )
|
|
FT_MKDIR( "hdf" )
|
|
ENDIF
|
|
ELSEIF lRtf
|
|
IF EMPTY( DIRECTORY( "rtf.*", "D" ) )
|
|
FT_MKDIR( "rtf" )
|
|
ENDIF
|
|
ELSEIF lWww
|
|
IF EMPTY( DIRECTORY( "htm.*", "D" ) )
|
|
FT_MKDIR( "htm" )
|
|
ENDIF
|
|
ELSEIF lNgi
|
|
IF EMPTY( DIRECTORY( "ngi.*", "D" ) )
|
|
FT_MKDIR( "ngi" )
|
|
ENDIF
|
|
ELSEIF lTroff
|
|
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
|
|
|
|
// Loop through each of the types of files
|
|
|
|
FOR i := 1 TO LEN( aExtensions )
|
|
|
|
// Get the list of
|
|
|
|
// aDirList=DIRECTORY(&cDir+aExtensions[i])
|
|
aDirList := DIRECTORY( aExtensions[ i ] )
|
|
|
|
// If there are any files then process them
|
|
|
|
IF LEN( aDirList ) > 0
|
|
|
|
IF lAscii
|
|
ASCIIFiles()
|
|
ELSEIF lNorton
|
|
ProcessFiles()
|
|
ELSEIF lRtf
|
|
ProcessRtf()
|
|
ELSEIF lWww
|
|
ProcessWww()
|
|
ELSEIF lNgi
|
|
ProcessiNg()
|
|
ELSEIF lTroff
|
|
ProcessTroff()
|
|
ELSEIF lOs2
|
|
ProcessOs2()
|
|
ENDIF
|
|
ENDIF
|
|
NEXT
|
|
ELSE
|
|
// an indirect file was given so read it and use it
|
|
|
|
aDirList := ReadAtFile( cAtFile )
|
|
|
|
// If there are any files then process them
|
|
|
|
IF LEN( aDirList ) > 0
|
|
|
|
IF lAscii
|
|
ASCIIFILES()
|
|
ELSEIF lNorton
|
|
ProcessFiles()
|
|
ELSEIF lRtf
|
|
ProcessRtf()
|
|
ELSEIF lWww
|
|
ProcessWww()
|
|
ELSEIF lNgi
|
|
ProcessiNg()
|
|
ELSEIF lTroff
|
|
ProcessTroff()
|
|
ELSEIF lOs2
|
|
ProcessOs2()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
// Now build text files for norton compiler based upon link file
|
|
// first sort based upon category and filename. Not Fast but easy.
|
|
|
|
@ INFILELINE, 0 CLEAR TO INFILELINE, MAXCOL()
|
|
@ MODULELINE, 0 CLEAR TO MODULELINE, MAXCOL()
|
|
@ LINELINE, 0 CLEAR TO LINELINE, MAXCOL()
|
|
@ INFILELINE, 30 SAY "Sorting input files"
|
|
|
|
ASORT( aDocInfo,,, { | a, b | UPPER( a[ 1 ] + " " + a[ 2 ] ) < UPPER( b[ 1 ] + " " + b[ 2 ] ) } )
|
|
|
|
// Now actually build the info
|
|
|
|
@ INFILELINE, 0 CLEAR TO INFILELINE, MAXCOL()
|
|
IF lnorton
|
|
@ INFILELINE, 30 SAY "Assembling " + IIF( lAscii, "documentation", "HelpC" ) ;
|
|
+ " input files"
|
|
ELSEIF lRTF
|
|
@ INFILELINE, 30 SAY "Assembling " + IIF( lAscii, "documentation", "WINHELP" ) ;
|
|
+ " input files"
|
|
ELSEIF lWww
|
|
@ INFILELINE, 30 SAY "Assembling " + IIF( lAscii, "documentation", "Html" ) ;
|
|
+ " input files"
|
|
ELSEIF lNgi
|
|
@ INFILELINE, 30 SAY "Assembling " + IIF( lAscii, "documentation", "NG" ) ;
|
|
+ " input files"
|
|
ELSEIF lTroff
|
|
@ INFILELINE, 30 SAY "Assembling " + IIF( lAscii, "documentation", "TROFF" ) ;
|
|
+ " input files"
|
|
|
|
ENDIF
|
|
|
|
IF FILE( "assembl.bat" )
|
|
DELETE FILE "assembl.bat"
|
|
ENDIF
|
|
SET ALTERNATE TO "assembl.bat"
|
|
SET ALTERNATE ON
|
|
SET CONSOLE OFF
|
|
|
|
? "@Echo OFF"
|
|
? "ECHO Assembling input files"
|
|
|
|
IF lNorton
|
|
FOR i := 1 TO LEN( aDocInfo )
|
|
|
|
// Find match
|
|
|
|
nItem := ASCAN( aLinkInfo, { | a | UPPER( ALLTRIM( a[ 1 ] ) ) == UPPER( ALLTRIM( aDocInfo[ i, 1 ] ) ) } )
|
|
IF nItem > 0
|
|
|
|
IF i = 1 .OR. .NOT. ( ALLTRIM( aDocInfo[ i - 1, 1 ] ) == ALLTRIM( aDocInfo[ i, 1 ] ) )
|
|
// Make the first copy
|
|
? "ECHO Creating", aLinkinfo[ nItem, 2 ]
|
|
? "COPY hdf\" + ALLTRIM( aDocInfo[ i, 4 ] ) + " HarDoc.hdf > NUL"
|
|
|
|
ELSE
|
|
// This may be slow but I don't have to worry about line length
|
|
? "TYPE hdf\" + ALLTRIM( aDocInfo[ i, 4 ] ) + " >> HarDoc.hdf "
|
|
ENDIF
|
|
aLinkInfo[ nItem, 3 ] = .T.
|
|
ELSE
|
|
// Write the error message
|
|
SET ALTERNATE TO
|
|
SET ALTERNATE OFF
|
|
SET CONSOLE ON
|
|
WRITE_ERROR( "Category not found: " + aDocInfo[ i, 1 ],,,, aDocInfo[ i, 4 ] )
|
|
@ ERRORLINE, 0 CLEAR TO ERRORLINE, MAXCOL()
|
|
@ ERRORLINE, 20 SAY "Category not found: " + aDocInfo[ i, 1 ] + " in " + aDocInfo[ i, 4 ]
|
|
SET ALTERNATE TO "assembl.bat" ADDITIVE
|
|
SET ALTERNATE ON
|
|
SET CONSOLE OFF
|
|
ENDIF
|
|
|
|
NEXT
|
|
ELSEIF lRtf
|
|
nHpj := FCREATE( 'HARBOUR.HPJ' )
|
|
FWRITE( nHpj, '[OPTIONS]' + CRLF )
|
|
FWRITE( nHpj, 'HCW=1' + CRLF )
|
|
FWRITE( nHpj, 'COMPRESS=60 Hall Zeck' + CRLF )
|
|
FWRITE( nHpj, 'LCID=0x416 0x0 0x0 ;Português (brasileiro)' + CRLF )
|
|
FWRITE( nHpj, 'REPORT=Yes' + CRLF )
|
|
FWRITE( nHpj, 'CONTENTS=IDH_OVERVIEW' + CRLF )
|
|
FWRITE( nHpj, 'TITLE='+cTitle + CRLF )
|
|
FWRITE( nHpj, 'COPYRIGHT=Harbour (C) http://www.harbour-project.org' + CRLF )
|
|
FWRITE( nHpj, 'HLP=.\'+ lower(substr(cLinkName,1,AT(".",cLinkName)-1)) +".hlp"+ CRLF )
|
|
FWRITE( nHpj, 'ROOT=' + CURDIR() + "\RTF" + CRLF )
|
|
FWRITE( nHpj, 'CNT=.\Harbour.cnt' + CRLF )
|
|
FWRITE( nHpj, '[FILES]' + CRLF )
|
|
FWRITE( nHpj, "harbour.rtf" + CRLF )
|
|
FWRITE( nHpj, '[CONFIG]' + CRLF + 'contents()' + CRLF + 'prev()' + CRLF + 'next()' + CRLF + 'BrowseButtons()' + CRLF )
|
|
FWRITE( nHpj, '[WINDOWS]' + CRLF + 'Commands="Harbour Commands",(653,102,360,600),20736,(r14876671),(r12632256),f3' + CRLF + 'Error="Harbour Run Time Errors",(653,102,360,600),20736,(r14876671),(r12632256),f3' + CRLF + 'Tools="Harbour Tools",(653,102,360,600),20736,(r14876671),(r12632256),f3' + CRLF + 'Class="Harbour OOP Commands",(653,102,360,600),20736,(r14876671),(r12632256),f3' + CRLF + 'Funca="Harbour Run Time Functions A-M",(653,102,360,600),20736,(r14876671),(r12632256),f3' + CRLF + 'Funcn="Harbour Run Time Functions N-_",(653,102,360,600),20736,(r14876671),(r12632256),f3' + CRLF + 'Main="HARBOUR",(117,100,894,873),60672,(r14876671),(r12632256),f3' + CRLF )
|
|
FCLOSE( nHpj )
|
|
ELSEIF lWWW
|
|
|
|
asort(adocinfo,,,{|x,y| x[1]+x[2]<y[1]+y[2]})
|
|
do while .t.
|
|
citem:=adocinfo[1,1]
|
|
// citem:=
|
|
// oHtm1:WriteLink('hb'+strtran(adocinfo[1,1]," ","")+'.htm',cItem)
|
|
ohtm:=THTML():new('htm\hb'+citem+'.htm')
|
|
ohtm:WriteText('<h2>'+adocinfo[1,1]+'</h2><br>')
|
|
ohtm:WriteText("<ul>")
|
|
|
|
for ppp:=1 to len(adocinfo)
|
|
|
|
if citem ==adocinfo[ppp,1]
|
|
oHtm:Writelink(adocinfo[ppp,4],UpperLower(adocinfo[ppp,2]))
|
|
else
|
|
ohtm:WriteText("</ul>")
|
|
ohtm:close()
|
|
citem:=adocinfo[ppp,1]
|
|
ohtm:=THTML():new('htm\hb'+strtran(adocinfo[ppp,1]," ","")+'.htm')
|
|
ohtm:WriteText('<h2>'+adocinfo[ppp,1]+'</h2><br>')
|
|
ohtm:WriteText("<ul>")
|
|
oHtm:Writelink(adocinfo[ppp,4],UpperLower(adocinfo[ppp,2]))
|
|
endif
|
|
next
|
|
if ppp>len(adocinfo)
|
|
exit
|
|
endif
|
|
enddo
|
|
ohtm:close()
|
|
oHtm1 := THTML():New( "htm\harbour.htm" )
|
|
oHtm1:WriteTitle( "Harbour Reference Guide" )
|
|
oHtm1:WriteText( "<H1>Harbour Reference Guide</H1>" )
|
|
oHtm1:WriteText( "<H2>HARBOUR</H2>" + hb_osnEwline() + '<UL>' )
|
|
oHtm1:WriteLink( "overview", UpperLower( "Harbour Read me" ) )
|
|
oHtm1:WriteLink( "license", UpperLower( "Harbour License" ) )
|
|
oHtm1:WriteLink( "http://www.gnu.org/copyleft/gpl.html", "GNU License" )
|
|
oHtm1:WriteLink( "compileroptions.htm", "Compiler Options" )
|
|
oHtm1:WriteLink( "harbourextension.htm", "Harbour Extensions" )
|
|
oHtm1:WriteText( "</UL>" )
|
|
oHtm1:WriteText( "<H2>Alphabetical list of functions by Categorie</H2>" )
|
|
ohtm1:writetext('<ul>')
|
|
|
|
do while .t.
|
|
citem:=alltrim(rtrim(ltrim(adocinfo[1,1])))
|
|
// citem:=strtran(adocinfo[1,1]," ","")
|
|
ohtm1:WriteLink('hb'+strtran(adocinfo[1,1]," ","")+'.htm',UpperLower(cItem))
|
|
for ppp:=1 to len(adocinfo)
|
|
|
|
if citem<>adocinfo[ppp,1]
|
|
citem:=alltrim(rtrim(ltrim(adocinfo[ppp,1])))
|
|
ohtm1:WriteLink('hb'+strtran(adocinfo[ppp,1]," ","")+'.htm',UpperLower(cItem))
|
|
|
|
// citem:=strtran(adocinfo[ppp,1]," ","")
|
|
endif
|
|
next
|
|
if ppp>len(adocinfo)
|
|
exit
|
|
endif
|
|
enddo
|
|
|
|
ohtm1:writetext('</ul>')
|
|
ohtm1:close()
|
|
/*
|
|
oHtm := THTML():New( "htm\harbour.htm" )
|
|
|
|
/*
|
|
ASORT( awww,,, { | x, y | x[ 1 ] < y[ 1 ] } )
|
|
|
|
FOR nPos := 1 TO LEN( aWww )
|
|
cTemp := aWww[ nPos, 1 ]
|
|
IF LEFT( cTemp, 1 ) >= "A" .AND. LEFT( cTemp, 1 ) < "N" .AND. AT( "()", cTemp ) > 0
|
|
oHtm:WriteLink( LOWER( aWww[ nPos, 2 ] ), UpperLower( aWww[ nPos, 1 ] ) )
|
|
ENDIF
|
|
NEXT
|
|
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:WriteText( "</ul>" )
|
|
oHtm:Writetext( "<h2>Commands</h2>" )
|
|
oHtm:WriteText( "<UL>" )
|
|
FOR nPos := 1 TO LEN( aWww )
|
|
cTemp := aWww[ nPos, 1 ]
|
|
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:WriteText( "</ul>" )
|
|
oHtm:WriteText( "<h2>Run Time Error</h2>" )
|
|
oHtm:WriteText( "<ul>" )
|
|
FOR nPos := 1 TO LEN( aWww )
|
|
cTemp := aWww[ nPos, 1 ]
|
|
IF AT( "()", cTemp ) == 0 .AND. 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
|
|
oHtm:WriteText( "</ul>" )
|
|
*/
|
|
oHtm:Close()
|
|
ELSEIF lNgi
|
|
SET ALTERNATE TO "assembl.bat" ADDITIVE
|
|
SET ALTERNATE ON
|
|
SET CONSOLE OFF
|
|
|
|
ENDIF
|
|
|
|
// Now assemble the output
|
|
IF .NOT. lAscii
|
|
|
|
? "REM Compile the sources"
|
|
? "Echo Compiling the sources"
|
|
IF lNorton
|
|
? "Helpc /W31 hardoc.hdf"
|
|
? "REM Link the files"
|
|
? "Echo Linking library"
|
|
? "hcw hardoc.hpj"
|
|
? " "
|
|
ELSEIF lRtf
|
|
|
|
? "REM Link the files"
|
|
? "Echo Linking library"
|
|
? "hcw harbour.hpj"
|
|
? " "
|
|
|
|
ELSEIF lNgi
|
|
? "Processing Input Files"
|
|
SET ALTERNATE TO
|
|
SET ALTERNATE OFF
|
|
SET CONSOLE ON
|
|
ProcNgiInput()
|
|
SET ALTERNATE TO "assembl.bat" ADDITIVE
|
|
SET ALTERNATE ON
|
|
SET CONSOLE OFF
|
|
? 'Copy ngi\overview.ngi .'
|
|
? 'Copy ngi\License.ngi .'
|
|
? 'Copy ngi\Funcam.txt .'
|
|
? 'Copy ngi\funcn_.txt .'
|
|
? 'copy ngi\comm.txt .'
|
|
? 'Compiling Sources'
|
|
? 'ngxc overview.ngi'
|
|
? 'ngxc license.ngi'
|
|
? 'ngxc funcam.txt'
|
|
? 'ngxc funcn_.txt '
|
|
? 'ngxc comm.txt'
|
|
? 'Linking the Guide'
|
|
? 'ngxl '+cLinkName
|
|
? 'del ngi\*.*'
|
|
? 'del *.ngo'
|
|
ENDIF
|
|
|
|
@ INFILELINE, 0 CLEAR TO INFILELINE, MAXCOL()
|
|
@ INFILELINE, 30 SAY "Writing summary file"
|
|
|
|
ENDIF
|
|
|
|
SET ALTERNATE TO "hbdoc.log"
|
|
SET ALTERNATE ON
|
|
SET CONSOLE OFF
|
|
FOR i := 1 TO LEN( aDocInfo )
|
|
? PAD( aDocInfo[ i, 1 ], 15 ), PAD( aDocInfo[ i, 2 ], 15 ), PAD( aDocInfo[ i, 4 ], 15 )
|
|
NEXT
|
|
|
|
// Send out list of authors
|
|
|
|
/* @ INFILELINE, 0 CLEAR TO INFILELINE, MAXCOL()
|
|
@ INFILELINE, 30 SAY "Sorting Author file"
|
|
|
|
FOR i := 1 TO LEN( aAuthorList )
|
|
|
|
aName := ListAsArray( aAuthorList[ i, 1 ], " " )
|
|
nLen := 0
|
|
AEVAL( aName, { | a, b | nLen := IIF( !EMPTY( a ), b, nLen ) }, 1, LEN( aName ) )
|
|
|
|
IF nLen > 0
|
|
cFName := aName[ 1 ]
|
|
|
|
IF nLen > 1
|
|
// Middle initial
|
|
cMI := aName[ 2 ]
|
|
IF !( LEN( cMi ) = 1 .OR. ( LEN( cMi ) = 2 .AND. RIGHT( cMi, 1 ) = "." ) )
|
|
cMi := NIL
|
|
ENDIF
|
|
// Last name
|
|
cLName := ""
|
|
FOR j := IIF( !EMPTY( cMi ), 3, 2 ) TO nLen
|
|
cLname := ALLTRIM( cLName ) + " " + aName[ j ]
|
|
NEXT
|
|
cLName := LTRIM( cLName )
|
|
ENDIF
|
|
|
|
// Add to array
|
|
|
|
aAuthorList[ i, 3 ] = cLName + "," + cFname + IIF( !EMPTY( cMi ), " " + cMi, " " )
|
|
|
|
ENDIF
|
|
|
|
NEXT
|
|
// sort the list bring any CIS ID to the top so it gets printed out
|
|
|
|
ASORT( aAuthorList,,, { | a, b | IIF( UPPER( a[ 3 ] ) == UPPER( b[ 3 ] ), a[ 2 ] > b[ 2 ], ;
|
|
UPPER( a[ 3 ] ) < UPPER( b[ 3 ] ) ) } )
|
|
|
|
@ INFILELINE, 0 CLEAR TO INFILELINE, MAXCOL()
|
|
@ INFILELINE, 30 SAY "Writing Author file"
|
|
|
|
IF LEN( aAuthorList ) > 1
|
|
i := 2
|
|
lDone := .F.
|
|
DO WHILE !lDone
|
|
|
|
IF UPPER( ALLTRIM( aAuthorList[ i, 1 ] ) ) == UPPER( ALLTRIM( aAuthorList[ i - 1, 1 ] ) )
|
|
|
|
// Remove duplicate names but capture a CIS ID if we don't have one
|
|
|
|
IF EMPTY( aAuthorList[ i - 1, 2 ] ) .AND. !EMPTY( aAuthorList[ i, 2 ] )
|
|
aAuthorList[ i - 1, 2 ] = aAuthorList[ i, 2 ]
|
|
ENDIF
|
|
ADEL( aAuthorList, i )
|
|
ASIZE( aAuthorList, LEN( aAuthorList ) - 1 )
|
|
ELSE
|
|
i ++
|
|
ENDIF
|
|
lDone := ( i > LEN( aAuthorList ) )
|
|
ENDDO
|
|
ENDIF
|
|
|
|
// Now write it out
|
|
|
|
SET ALTERNATE TO "author.txt"
|
|
SET ALTERNATE ON
|
|
SET CONSOLE OFF
|
|
|
|
FOR i := 1 TO LEN( aAuthorList )
|
|
|
|
? " ", aAuthorList[ i, 1 ], IIF( !EMPTY( aAuthorList[ i, 2 ] ), "[" + aAuthorList[ i, 2 ] + "]", "" )
|
|
|
|
NEXT
|
|
|
|
SET CONSOLE ON
|
|
SET ALTERNATE OFF
|
|
SET ALTERNATE TO
|
|
|
|
*/
|
|
|
|
@ MAXROW(), 0 SAY "Execute ASSEMBL.BAT to compile and link Guides"
|
|
|
|
// Return to caller
|
|
|
|
RETURN NIL
|
|
|
|
// End of MAIN()
|
|
|
|
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
|
|
*+
|
|
*+ Function ListAsArray2()
|
|
*+
|
|
*+ Called from ( genng.prg ) 1 - function procngialso2()
|
|
*+ ( genng1.prg ) 1 - function procngialso2()
|
|
*+ ( genos2.prg ) 1 - function procos2also()
|
|
*+ ( gentrf.prg ) 1 - function proctroffalso()
|
|
*+
|
|
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
|
|
*+
|
|
FUNCTION ListAsArray2( cList, cDelimiter )
|
|
|
|
LOCAL nPos
|
|
LOCAL aList := {} // Define an empty array
|
|
|
|
IF cDelimiter = NIL
|
|
cDelimiter := ","
|
|
ENDIF
|
|
//
|
|
DO WHILE ( nPos := AT( cDelimiter, cList ) ) != 0
|
|
AADD( aList, SUBSTR( cList, 1, nPos - 1 ) ) // Add a new element
|
|
cList := SUBSTR( cList, nPos + 1 )
|
|
ENDDO
|
|
AADD( aList, cList ) // Add final element
|
|
//
|
|
RETURN aList // Return the array
|
|
|
|
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
|
|
*+
|
|
*+ Function StripNgControls()
|
|
*+
|
|
*+ Called from ( genhpc.prg ) 3 - function processfiles()
|
|
*+ ( gentrf.prg ) 2 - function processtroff()
|
|
*+
|
|
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
|
|
*+
|
|
FUNCTION StripNgControls( cString )
|
|
|
|
LOCAL nPos
|
|
LOCAL lStriped := .f.
|
|
|
|
nPos := AT( "^b", cString )
|
|
IF nPos > 0
|
|
cString := SUBSTR( cString, nPos + 3 )
|
|
lStriped := .t.
|
|
ELSE
|
|
IF !lStriped
|
|
cString := cString
|
|
ENDIF
|
|
ENDIF
|
|
|
|
nPos := AT( "^b^", cString )
|
|
IF nPos > 0
|
|
cString := SUBSTR( cString, 1, nPos - 1 )
|
|
lStriped := .t.
|
|
ELSE
|
|
IF !lStriped
|
|
cString := cString
|
|
ENDIF
|
|
ENDIF
|
|
|
|
nPos := AT( "^CFE", cString )
|
|
IF nPos > 0
|
|
cString := SUBSTR( cString, nPos + 5 )
|
|
lStriped := .t.
|
|
ELSE
|
|
IF !lStriped
|
|
cString := cString
|
|
ENDIF
|
|
ENDIF
|
|
|
|
nPos := AT( "^a1f", cString )
|
|
IF nPos > 0
|
|
cString := SUBSTR( cString, nPos + 5 )
|
|
lStriped := .t.
|
|
ELSE
|
|
IF !lStriped
|
|
cString := cString
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN cString
|
|
|
|
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
|
|
*+
|
|
*+ Function StripFiles()
|
|
*+
|
|
*+ Called from ( genasc.prg ) 1 - function asciifiles()
|
|
*+ ( genhpc.prg ) 1 - function processfiles()
|
|
*+ ( genhtm.prg ) 1 - function processwww()
|
|
*+ ( genhtm1.prg ) 1 - function processwww()
|
|
*+ ( genhtm2.prg ) 1 - function processwww()
|
|
*+ ( genng.prg ) 1 - function processing()
|
|
*+ ( genng1.prg ) 1 - function processing()
|
|
*+ ( genos2.prg ) 1 - function processos2()
|
|
*+ ( genrtf.prg ) 1 - function processrtf()
|
|
*+ ( gentrf.prg ) 1 - function processtroff()
|
|
*+
|
|
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
|
|
*+
|
|
FUNCTION StripFiles( cString )
|
|
|
|
//
|
|
// This routine and all accompaning database structures are
|
|
// Copyright (C) 1993 Leo J. Letendre. All rights reserved.
|
|
//
|
|
// Purpose: Determine the position of the first non-blank character
|
|
//
|
|
// Modification History:
|
|
// Version Date Who Notes
|
|
// V1.00 10/30/93 LJL Initial Version
|
|
//
|
|
// Calling parameters: cString - The string to remove filenames from
|
|
//
|
|
// Returns: <cString> with filenames removed
|
|
//
|
|
// Notes: For example: func.ngo:FUNC1() proc.ngo:PROC1()
|
|
// becomes: FUNC1() PROC1()
|
|
// -
|
|
// LOCAL variables:
|
|
LOCAL nColon // location of colon
|
|
LOCAL nSpace // location of space prior to colon
|
|
|
|
// Look for a colon
|
|
|
|
DO WHILE ( nColon := AT( ":", cString ) ) > 0
|
|
|
|
// find the space prior to it
|
|
nSpace := RAT( " ", LEFT( cString, nColon ) )
|
|
IF nSpace > 0
|
|
cString := STUFF( cString, nSpace + 1, nColon - nSpace, "" )
|
|
ELSE
|
|
cString := STUFF( cString, 1, nColon, "" )
|
|
ENDIF
|
|
ENDDO
|
|
|
|
RETURN cString
|
|
|
|
// End of StripFiles
|
|
|
|
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
|
|
*+
|
|
*+ Function FirstNB()
|
|
*+
|
|
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
|
|
*+
|
|
FUNCTION FirstNB( cString )
|
|
|
|
//
|
|
// This routine and all accompaning database structures are
|
|
// Copyright (C) 1992 Leo J. Letendre. All rights reserved.
|
|
//
|
|
// Purpose: Determine the position of the first non-blank character
|
|
//
|
|
// Modification History:
|
|
// Version Date Who Notes
|
|
// V1.00 10/10/92 LJL Initial Version
|
|
//
|
|
// Calling parameters: cString - The string to test
|
|
//
|
|
// Notes: None
|
|
// -
|
|
// LOCAL variables:
|
|
LOCAL nLen := LEN( cString )
|
|
LOCAL nReturn := 0
|
|
LOCAL i
|
|
|
|
//
|
|
// Entry Point
|
|
//
|
|
i := 1
|
|
IF !EMPTY( cString )
|
|
DO WHILE nReturn = 0 .AND. i < LEN( cString )
|
|
IF SUBSTR( cString, i, 1 ) != " "
|
|
nReturn := i
|
|
ELSE
|
|
i ++
|
|
ENDIF
|
|
ENDDO
|
|
ENDIF
|
|
|
|
RETURN nReturn
|
|
|
|
// End of file FirstNB
|
|
|
|
/***
|
|
* ListAsArray( <cList>, <cDelimiter> ) --> aList
|
|
* Convert a delimited string to an array
|
|
* Taken from Clipper supplied routines 1/2/90
|
|
*
|
|
*/
|
|
|
|
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
|
|
*+
|
|
*+ Function ListAsArray()
|
|
*+
|
|
*+ Called from ( genng.prg ) 1 - function procngialso()
|
|
*+ ( genng1.prg ) 1 - function procngialso()
|
|
*+ ( hbdoc.prg ) 1 - function main()
|
|
*+
|
|
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
|
|
*+
|
|
FUNCTION ListAsArray( cList, cDelimiter )
|
|
|
|
LOCAL nPos
|
|
LOCAL aList := {} // Define an empty array
|
|
|
|
IF cDelimiter = NIL
|
|
cDelimiter := ","
|
|
ENDIF
|
|
//
|
|
DO WHILE ( nPos := AT( cDelimiter, cList ) ) != 0
|
|
AADD( aList, '"' + SUBSTR( cList, 1, nPos - 1 ) + '"' ) // Add a new element
|
|
cList := SUBSTR( cList, nPos + 1 )
|
|
ENDDO
|
|
AADD( aList, '"' + cList + '"' ) // Add final element
|
|
//
|
|
RETURN aList // Return the array
|
|
|
|
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
|
|
*+
|
|
*+ Function ReadLN()
|
|
*+
|
|
*+ Called from ( genasc.prg ) 5 - function asciifiles()
|
|
*+ ( genhpc.prg ) 5 - function processfiles()
|
|
*+ ( genhtm.prg ) 7 - function processwww()
|
|
*+ 2 - function formathtmbuff()
|
|
*+ 2 - function prochtmdesc()
|
|
*+ ( genhtm1.prg ) 7 - function processwww()
|
|
*+ 2 - function formathtmbuff()
|
|
*+ 2 - function prochtmdesc()
|
|
*+ ( genhtm2.prg ) 6 - function processwww()
|
|
*+ 2 - function formathtmbuff()
|
|
*+ 2 - function prochtmdesc()
|
|
*+ ( genng.prg ) 6 - function processing()
|
|
*+ 4 - function procngiinput()
|
|
*+ 2 - function procngdesc()
|
|
*+ 2 - function formatngbuff()
|
|
*+ ( genng1.prg ) 6 - function processing()
|
|
*+ 4 - function procngiinput()
|
|
*+ 2 - function procngdesc()
|
|
*+ 2 - function formatngbuff()
|
|
*+ ( genos2.prg ) 6 - function processos2()
|
|
*+ 2 - function formatos2buff()
|
|
*+ 2 - function procos2desc()
|
|
*+ ( genrtf.prg ) 6 - function processrtf()
|
|
*+ 2 - function procrtfdesc()
|
|
*+ 2 - function formatrtfbuff()
|
|
*+ ( gentrf.prg ) 5 - function processtroff()
|
|
*+ ( hbdoc.prg ) 1 - function readatfile()
|
|
*+ 2 - function fill_link_info()
|
|
*+
|
|
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
|
|
*+
|
|
FUNCTION ReadLN( leof )
|
|
|
|
LOCAL cBuffer := ""
|
|
|
|
cBuffer := FT_FREADLN()
|
|
FT_FSKIP( 1 )
|
|
lEof := FT_FEOF()
|
|
|
|
RETURN cBuffer
|
|
// End of ReadLN
|
|
|
|
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
|
|
*+
|
|
*+ Function ReadAtFile()
|
|
*+
|
|
*+ Called from ( hbdoc.prg ) 1 - function main()
|
|
*+
|
|
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
|
|
*+
|
|
FUNCTION ReadAtFile( cAtFile )
|
|
|
|
//
|
|
// This routine and all accompaning database structures are
|
|
// Copyright (C) 1992 Leo J. Letendre.
|
|
//
|
|
// Purpose: read in the users list of files to act on
|
|
//
|
|
// Modification History:
|
|
// Version Date Who Notes
|
|
// V1.00 1/1/92 LJL Initial Version
|
|
//
|
|
// Calling parameters: cAtFile - The name of the file containing a list of
|
|
// files to be processed
|
|
//
|
|
// Returns: an array containing information that looks like it came
|
|
// from DIRECTORY() but only has the name present.
|
|
//
|
|
// Notes:
|
|
// -
|
|
// LOCAL variables:
|
|
LOCAL aDirList := {}
|
|
LOCAL cBuffer
|
|
LOCAL lEof
|
|
LOCAL nCount := 0
|
|
|
|
//
|
|
// Entry Point
|
|
//
|
|
IF FT_FUSE( cAtFile ) <> NIL
|
|
|
|
// Read each line
|
|
lEof := .F.
|
|
DO WHILE .NOT. lEof
|
|
|
|
cBuffer := ALLTRIM( ReadLN( @lEof ) )
|
|
IF .NOT. EMPTY( cBuffer )
|
|
AADD( aDirList, ARRAY( F_LEN ) )
|
|
nCount ++
|
|
aDirList[ nCount, F_NAME ] = UPPER( cBuffer )
|
|
ENDIF
|
|
ENDDO
|
|
ENDIF
|
|
|
|
FT_FUSE()
|
|
|
|
RETURN aDirList
|
|
|
|
// End of ReadAtFile
|
|
|
|
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
|
|
*+
|
|
*+ Function WRITE_ERROR()
|
|
*+
|
|
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
|
|
*+
|
|
FUNCTION WRITE_ERROR( cDescrip, cBadLine, nLineCnt, nMax, cFile )
|
|
|
|
// This routine will send error messages to the error log - hbdocerr.log
|
|
//
|
|
// Calling parameters: cDesc - Description of info being written
|
|
// cBadLine - The offending line - IF NIL then just
|
|
// output cDesc and filename
|
|
// nLineCnt - The line number of the bad line
|
|
// nMax - The maximum length of the bad line
|
|
// cFile - The file currently being processed
|
|
//
|
|
// Returns: NIL
|
|
//
|
|
// Entry point
|
|
//
|
|
// Point output to the log file
|
|
SET ALTERNATE TO "hbdocerr.log" ADDITIVE
|
|
SET CONSOLE OFF
|
|
SET ALTERNATE ON
|
|
|
|
// Send out the output
|
|
IF cBadLine = NIL
|
|
? cDescrip, "in file", cFile
|
|
? " "
|
|
ELSE
|
|
? "Line too long in file", cFile, "at line", ALLTRIM( STR( nLineCnt, 10, 0 ) )
|
|
? "Reading", cDescrip, "information when line greater than", STR( nMax, 2, 0 ), "encountered:"
|
|
? cBadLine
|
|
? " "
|
|
ENDIF
|
|
|
|
// Turn off the log file and return
|
|
|
|
SET ALTERNATE OFF
|
|
SET CONSOLE ON
|
|
SET ALTERNATE TO
|
|
|
|
RETURN NIL
|
|
|
|
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
|
|
*+
|
|
*+ Function fill_link_info()
|
|
*+
|
|
*+ Called from ( hbdoc.prg ) 1 - function main()
|
|
*+
|
|
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
|
|
*+
|
|
FUNCTION fill_link_info( cLinkName )
|
|
|
|
//
|
|
// This routine and all accompaning database structures are
|
|
// Copyright (C) 1992 Leo J. Letendre.
|
|
//
|
|
// Purpose: read the link information to learn how to assemble database files
|
|
//
|
|
// Modification History:
|
|
// Version Date Who Notes
|
|
// V1.00 1/22/92 LJL Initial Version
|
|
// V1.01 4/25/92 LJL Get the compiler type based upon
|
|
// "object" file extension
|
|
//
|
|
// Calling parameters: cLinkName - The name of the link file
|
|
//
|
|
// Returns: cCompiler - The name of the compiler to use
|
|
//
|
|
// Notes: looks for the !menu command and then reads the lines after it to
|
|
// get the catagories and filenames associated with each.
|
|
// -
|
|
// LOCAL variables:
|
|
LOCAL cBuffer
|
|
LOCAL lEof
|
|
LOCAL cSpace
|
|
LOCAL cCategory
|
|
LOCAL cFile
|
|
LOCAL nReadHandle
|
|
LOCAL lMenuMode := .F. // Menu infomation being read
|
|
LOCAL lGetType := .T. // Get the compiled file type to determine complier
|
|
LOCAL cCompiler // Compiler Type
|
|
//
|
|
// Entry Point
|
|
//
|
|
nReadHandle := FT_FUSE( cLinkName )
|
|
lEof := .F.
|
|
|
|
DO WHILE .NOT. lEof
|
|
|
|
// Read a line
|
|
cBuffer := UPPER( ReadLN( @lEof ) )
|
|
if AT("!NAME:",cBuffer)>0
|
|
cTitle:=Substr(cBuffer,AT(":",cBuffer)+1)
|
|
Endif
|
|
// Does it have a !menu?
|
|
|
|
IF AT( "!MENU", cBuffer ) > 0
|
|
lMenuMode := .T.
|
|
cBuffer := UPPER( ReadLN( @lEof ) )
|
|
ELSEIF LEFT( cBuffer, 1 ) = "!"
|
|
lMenuMode := .F.
|
|
ENDIF
|
|
|
|
// If we are in menu mode and the line has information on it then parse it
|
|
|
|
cBuffer := ALLTRIM( cBuffer )
|
|
|
|
IF .NOT. EMPTY( cBuffer ) .AND. lMenuMode
|
|
cSpace := AT( " ", cBuffer )
|
|
cCategory := UPPER( RTRIM( LEFT( cBuffer, cSpace - 1 ) ) )
|
|
cFile := UPPER( LTRIM( SUBSTR( cBuffer, cSpace ) ) )
|
|
IF lGetType
|
|
cCompiler := IIF( ".NGO" $ cFile, "NGXC", "EHC" )
|
|
lGetType := .NOT. ( ".NGO" $ cFile .OR. "EHO" $ cFile )
|
|
ENDIF
|
|
cFile := STRTRAN( cFile, IIF( cCompiler = "NGXC", ".NGO", ".EHO" ), ".TXT" )
|
|
AADD( aLinkInfo, { cCategory, cFile, .F. } )
|
|
ENDIF
|
|
|
|
ENDDO
|
|
|
|
// Close the file
|
|
|
|
FT_FUSE()
|
|
// Return to caller
|
|
|
|
RETURN cCompiler
|
|
|
|
*+ EOF: HBDOC.PRG
|
|
|
|
STATIC FUNCTION ReadLinkFile( cFile )
|
|
|
|
LOCAL cBuffer := ''
|
|
LOCAL NPOS := 0
|
|
LOCAL nlenpos
|
|
Local cLine
|
|
Local cVer:=''
|
|
LOCAL aLocDoc := {}
|
|
Local nH:=FT_FUSE(cFile)
|
|
DO WHILE FREADline( nH, @cBuffer, 4096 )
|
|
cBuffer := TRIM( SUBSTR( cBuffer, 1 ) )
|
|
AADD( Alocdoc, CbUFFER )
|
|
ENDDO
|
|
|
|
FT_FUSE()
|
|
frename(CFILE,substr(cfile,1,at('.',cFile)-1)+'.old')
|
|
cVer:=docver()
|
|
nH:=fcreate(cfile)
|
|
for nPos:=1 to len(aLocdoc)
|
|
cLine:=alocdoc[nPos]
|
|
if at("%HB_VERSION%",cLine)>0
|
|
cLine:=strtran(cLine,'%HB_VERSION%',cVer)
|
|
endif
|
|
IF AT("%HB_BLDDATE%",cLine)>0
|
|
SET CENTURY ON
|
|
cLine:=strtran(cLine,'%HB_BLDDATE%',DTOC(date()))
|
|
SET CENTURY Off
|
|
endif
|
|
FWRITE(nH,cLine+HB_OSNEWLINE())
|
|
NEXT
|
|
FCLOSE(nh)
|
|
RETURN nil
|
|
|
|
|
|
FUNCTION DocVer()
|
|
local cVersion:=version()
|
|
local cReturn:=''
|
|
cReturn:=substr(cVersion,9,4)
|
|
|
|
RETURN cReturn
|
|
|