hi										06.01.2020

here Verion 0.17

change : now include path for DBF

add : Checkbox "Verbose" which can be used "on-fly" to speed up

fixed : if "underflow" or "overflow" now display YesNo Box.
it is recommend to BREAK loop with "Yes" ... but sometimes it still fail

i do my best but i can't "Garantie" than it produce right Code with "your" Source.
please send me a (small) Sample if you found a Problem ( HMG Snytax still not include in this Version)

---
hi,										31.12.2019

now i have clean up Click Code to use for GUI Mode
some Function i have deleted as they are not used in GUI Mode

as i say this is a Cl*pper Code Formatter which does not know #xCommand Syntax like HMG use.

it is the next Step we can do now but i need working HMG Sample that fail with CLICK.EXE.
so please try CLICK and send me some small(!) Sample. i will try to find a Concept.

---

unpack all to a Folder, start IDE and load CLICK.HBP 

! Note : if you have a old CLICK.HBP delete PRB_STAK.PRG from Filelist
also CLICK.hbc is not need any more.

when CLICK.EXE start 1st time it will create CLICK.INI

CASE_OF_COMMANDS=UPPER
CASE_OF_FUNCTIONS=UPPER
CASE_OF_BOOLEAN=UPPER

INDENT_FUNCTIONS=YES
INDENT_DO_CASE=YES
INDENT_LOCALS=NO

VERBOSE=YES

RUNMODE=S87
ALIGN_CLASS_IN_THE_ALIGNER=NO
 

If you want it QUICK without Output use
VERBOSE=NO

using RUNMODE=S87 will automatic disable PREPROCESS_WITH_DECLARATION_BUSTER

Option ALIGN_CLASS_IN_THE_ALIGNER is for Classy Style so you have to check if it work with harbour Style

so run CLICK on Source Code and tell me how long it take on "your" PC


---

KeyWords & DBF

to change Command or Function into "UPPER" it new to know a Keyword
you find them in CLICK.INI

File LIBREAD.PRG was for Cl*pper to read from LIB but it does not work with Xbase++ so i have not touch it.
i have made a *.KEY File which are add at start. this is not include in this Original Code.


Deleted Files (not complett )

------------------ PRB_POP.PRG ------------------ 

PROCEDURE CLR_MSG()
   THISSCRN := ''
RETURN

PROCEDURE CNT( CSTRING, NLINENUM )
RETURN

FUNCTION Amaxstrlen( ANARRAY )
LOCAL ARLEN
LOCAL THISLEN
LOCAL max     := 0
LOCAL x
   IF ISARRAY( ANARRAY )
      ARLEN := LEN( ANARRAY )
      FOR x := 1 TO ARLEN
         THISLEN := LEN( ANARRAY[ X ] )
         IF THISLEN > max
            max := THISLEN
         ENDIF
      NEXT

   ENDIF
RETURN max

FUNCTION ASK_FOR( SOME_TXT, Getvar, PICVAR, BORDCOLOR, MAINCOLOR )
LOCAL GETLIST  := {}
LOCAL INCOLOR
LOCAL INCURSOR
LOCAL ARLEN
LOCAL VCNT
LOCAL RETVAL
LOCAL CROW
LOCAL CCOL
	   DEFAULT BORDCOLOR TO 'G+/GR'
   DEFAULT MAINCOLOR TO 'GR+/GR,W+/B,,,W+/N'
   IF !ISARRAY( SOME_TXT )
      SOME_TXT := { SOME_TXT }
   ENDIF
   ARLEN := LEN( SOME_TXT ) + 2
   ASIZE( SOME_TXT, ARLEN )
   DO CASE
      CASE ISCHARACTER( Getvar )
         VCNT := c( Getvar )
      CASE ISDATE( Getvar )
         VCNT := 35
      CASE ISNUMBER( Getvar )
         VCNT := c( PICVAR )
      OTHERWISE
         VCNT := 10
   ENDCASE
   SOME_TXT[ ARLEN - 1 ] := ''
   SOME_TXT[ ARLEN ] := SPACE( ( ( 50 / 2 ) - VCNT ) * 2 )
   * POP_MSG( SOME_TXT, .f., BORDCOLOR, MAINCOLOR )
   MsgInfo( "Problem with Getvar Type " + VALTYPE( Getvar ) )
RETURN RETVAL

PROCEDURE CLS( NEWCOLOR, BKGCHR )
   DEFAULT NEWCOLOR TO 'GB+/N,R/W,,,W+/N'
   DEFAULT BKGCHR TO 177
RETURN

FUNCTION FULLDATE( ANYDATE )
   DEFAULT ANYDATE TO DATE()
RETURN CMONTH( ANYDATE ) + ' ' + LTRIM( STR( DAY( ANYDATE ), 2 ) ) + ', ' + STR( YEAR( ANYDATE ), 4 )

------------------ PRB_STAK.PRG ------------------ 

PROCEDURE PUTSCREEN( t, l, b, r )
   DEFAULT t TO 0
   DEFAULT l TO 0
   DEFAULT b TO MAXROW()
   DEFAULT r TO MAXCOL()
RETURN

PROCEDURE GETSCREEN( lOption )
   DEFAULT lOption TO 1
RETURN

------------------ PROFILE.PRG ------------------ 

FUNCTION ProfileDate( cFile, cSection, cKey, dDefault )
//
//  This function reads a date from the specified .INI file.
//
//  Parameters: cFile    - The .INI file name to be used
//              cSection - The section from which to read
//              cKey     - The key value for which to search
//              dDefault - The default date if not found (optional)
//
//     Returns: dDate - The date value read from the file.
//
LOCAL retval
   DEFAULT dDefault TO CTOD( '' )
   retval := dDefault
   BEGIN SEQUENCE
      IF INI_NAME <> cFile
         IF !init_profile( cFile )
            BREAK
         ENDIF
      ENDIF
      retval := ProfileString( cFile, cSection, cKey, '' )
      IF EMPTY( retval )
         retval := dDefault
      ELSE
         retval := CTOD( retval )
      ENDIF
   END SEQUENCE
RETURN retval

function SetProfile( cFile, cSection, cKey, xValue )
//
//  This function writes a value to the .INI file specified.
//
//  Parameters: cFile    - The .INI file name to be used
//              cSection - The section for which to search
//              cKey     - The key value for which to search
//              xValue   - The new value to be written
//
//     Returns: .T. if successful, .F. otherwise.
//

Remember: When implementing this section that init_profile() throws away
anything that is empty line, comment (//) and anything that is not
either a section header or a line with no = sign.

This means that this section absolutely cannot rely on init_profile()
and must have it's own file reader/writer

return lRetCode

------------------ EOF ------------------