FT_HEX2DEC

FT_HEX2DEC()
 Convert a hex number to decimal

 Syntax

     FT_HEX2DEC( <cHexNum> ) -> nDecNum

 Arguments

    <cHexNum> is a character string representing a hex number.

 Returns

    A decimal number.

 Description

    Converts a hexadecimal number to a BASE 10 decimal number.
    Useful for using FT_INT86().

 Examples

    FT_INT86( HEX2DEC( "21" ), aRegs )

    Converts 21h, the Dos Interrupt, to its decimal equivalent,
    33, for use by FT_INT86().

 Source: HEX2DEC.PRG

 Author: Robert A. DiFalco

 

FT_ESCCODE

FT_ESCCODE()
 Convert Lotus style escape codes

 Syntax

      FT_ESCCODE( <cASCII> )  -> <cPrinterFormat>

 Arguments

     <cASCII> is the ASCII representation of the printer control
                codes in Lotus 123 format (e.g. "27E" for Chr(27)+"E")

                "\nnn" will be converted to Chr(nnn)
                "\\" will be converted to "\"

 Returns

     The binary version of an ASCII coded printer setup string.

 Description

     This function is useful for allowing the user to enter printer
     control codes in Lotus-style ASCII format, and then having
     this function convert that code to the format that the printer
     needs to receive.

 Examples

     cSetup = "15"          // default = Epson compressed print
     UserInput( @cSetup )     // Let user modify setup code
     SET DEVICE TO PRINT      // get ready to print
     ?? FT_ESCCODE( cSetup )  // Output the converted code

 Source: PRTESC.PRG

 Author: Steven Tyrakowski

 

FT_E2D

FT_E2D()
 Convert scientific notation string to a decimal
------------------------------------------------------------------------------

 Syntax

            FT_E2D( <cNumE> )  -> <nDec>

 Arguments

                <cNumE>   Scientific notation string to convert

 Returns

                <nDec>    Decimal number

 Description

                Given a string in the format  x.yEz, the decimal
                equivalent is returned.

 Examples

                ? FT_E2D( "1.23E1" )
                  -> 12.3

                ? FT_E2D( "-1.235E1" )
                  -> -12.35

                ? ft_d2e( "5.43E-6" )
                  -> 0.0000543

 Source: E2D.PRG

 Author: Gary Baren

See Also: FT_D2E()

FT_DEC2BIN

FT_DEC2BIN()
 Convert decimal to binary

 Syntax

      FT_DEC2BIN( <nNum> ) -> cBinaryNumber

 Arguments

     <nNum> is the numeric expression to be converted.

 Returns

     A character string representing <nNum> in binary format.

 Description

     This function can be used in conjunction with any bit-wise
     operations.

 Examples

     QOut( FT_DEC2BIN(255) )        // "11111111"
     QOut( FT_DEC2BIN(2) )          // "00000010"

 Source: DECTOBIN.PRG

 Author: Greg Lief

FT_D2E

FT_D2E()
 Convert decimal to scientific notation
------------------------------------------------------------------------------

 Syntax

            FT_D2E( <nDec>, <nPrecision> )  -> <cNumE>

 Arguments

                <nDec>         Decimal number to convert

                <nPrecision>   Number of decimal places in result.
                     Defaults to 6 decimal places.

 Returns

                <cNumE>        A string representing a number in
                     scientific notation

 Description

                Given a decimal number and the desired precision,
                a string representing the equivalent in scientific
                notation is returned.

 Examples

                ? FT_D2E( 12.345, 2 )
                  -> 1.23E1

                ? FT_D2E( -12.345, 3 )
                  -> -1.235E1

                ? FT_D2E( 0.00000543, 2 )
                  -> 5.43E-6

 Source: D2E.PRG

 Author: Gary Baren

See Also: FT_E2D()



FT_BYT2HEX

FT_BYT2HEX()
 Convert byte to hexadecimal version of its binary value

 Syntax

      FT_BYT2HEX( cByte ) -> cHexValue

 Arguments

     <cByte> is the byte to convert.

 Returns

     Three-character string, consisting of two digits of hexadecimal
     notation and letter 'h' to signify hex.  Returns NIL if parameters are
     faulty.

 Description

     Can be used to show results of bit manipulation, both before and after.

     This function is presented to illustrate that bit-wise operations
     are possible with Clipper code.  For greater speed, write .C or
     .ASM versions and use the Clipper Extend system.

 Examples

     These three code lines perform a bitwise AND on bytes with values of
     CHR(20) and CHR(36), and deliver the result as a string in hexadecimal
     format, using 'h' to signify hexadecimal.

          ? FT_BYT2HEX(CHR(20))         // byte1: '14h'
          ? FT_BYT2HEX(CHR(36))         // byte2: '24h'

          ? FT_BYT2HEX(FT_BYTEAND(CHR(20), CHR(36)))
                             // result: '04h'

     For a demonstration of Clipper bit manipulations, compile and
     link the program BITTEST.PRG in the Nanforum Toolkit source code.

 Source: BYT2HEX.PRG

 Author: Forest Belt, Computer Diagnostic Services, Inc.

See Also: FT_BYT2BIT()



FT_BYT2BIT

FT_BYT2BIT()
 Convert byte to string of 1's and 0's

 Syntax

      FT_BYT2BIT( <cByte> ) -> cBitPattern

 Arguments

     <cByte> is the byte to convert.

 Returns

     9-character string, consisting of 1's and 0's, representing bits 0
     through 7 of parameter byte, with space between bits 3 and 4.  Returns
     NIL if parameters are faulty.

 Description

     Can be used to show results of bit manipulation, both before and after.
     Binary representation follows right-to-left convention of bit position
     numbering, 0 through 7.  Space between high and low nibbles for clarity
     and easy comparison to hexadecimal notation.

     This function is presented to illustrate that bit-wise operations
     are possible with Clipper code.  For greater speed, write .C or
     .ASM versions and use the Clipper Extend system.

 Examples

     These three code lines perform a bitwise AND on bytes with values of
     CHR(20) and CHR(36), and deliver the result as a string in binary (bit)
     format.

          ? FT_BYT2BIT(CHR(20))         // byte1: '0001 0100'
          ? FT_BYT2BIT(CHR(36))         // byte2: '0010 0100'

          ? FT_BYT2BIT(FT_BYTEAND(CHR(20), CHR(36)))
                             // result: '0000 0100'

     For a demonstration of Clipper bit manipulations, compile and
     link the program BITTEST.PRG in the Nanforum Toolkit source code.

 Source: BYT2BIT.PRG

 Author: Forest Belt, Computer Diagnostic Services, Inc.

See Also: FT_BYT2HEX()

 

Faster Migration

Quick Start to Migration

Chapter I – Text to text conversion

Section 2 – Faster Migration

Well …

Forget about all those mysterious DOS / console / command modes, batch processing, etc.

If you have tongs, don’t burn your hand!

Yes we have; so let’s use it:

Step : 1

Begin with making / assigning  a folder for your works; FE : C:\MyWorks

Note : Working in a separate and clean folder is important.

Step : 2

Build a “Harbour Project”  file : say MyTest01.hbp; and put a line into it :

My1stProg.prg

Step : 3

Build a a program  file : say My1stProg.prg ; and write your very first program:

REQUEST HB_GT_WIN_DEFAULT
PROCEDURE Main
   SETMODE( 25, 80 )
   CLIENTE = SPACE( 15 )
   @ 10, 15 SAY "Customer : " GET CLIENTE
   READ
   @ 12, 0
   ? CLIENTE
   WAIT
RETURN

Step : 4

Open your .hbp file with HMG-IDE and press “Run” button.

VeryFirstHarbourProject

That’s all !

Any other problem / question ?

Happy HMG’ing 😀

 

 

 

 

 

 

 

 

Quick Start to Migration

Chapter I – Text to text conversion

In Clipper world, “migration” means “convert a DOS based Clipper program to Windows”. This is a dream of every Clipper – DOS programmer.

 Before all, we need clarify some terms:

May be found multiple ways for convert a DOS based Clipper program to Windows. In general, DOS programs are runs in “text” mode and Windows program runs in “Graphic” mode; and this is what meant by term “migration”.

Converting a text mode program to directly GUI (Graphical User Interface) is a painful job. First, we need to find a Compiler with GUI support, or a GUI library usable with a specific compiler. If we have more than one opportunity ( yes, it is so ) we need make a choice between them.

For make a right selection we need learn, understand specialties of each option and differences between them.

Believe me, this is an endless way 😦

Instead, let’s begin with simpler thing: convert a DOS text mode program to Windows text mode program.

Question: Without GUI, what meaning will be to migrate from DOS to Windows?

Answer: Good question and like all good question, answer isn’t easy.

First, modern OSs moves away day to day from DOS conditions; memory problems, screen problems, codepage problems, etc… By the time, building / running 16 bit executable becomes more difficult day to day.

Whereas Harbour already is a 32 / 64 bit compiler.

Second, all DOS Compilers for Clipper are commercial and registration required products; furthermore they are almost out of sold for this days; what compiler you could use?

And third, Harbour is best free compiler and the best way to use a free GUI tool for xBase language.

So, beginning with using Harbour in text mode is the best start point, I think.

First step is downloading and install HMG or Harbour. If you didn’t past this step yet please refer previous articles in this section or “Links” page of this blog.

The easiest way for using Harbour compiler is calling hbmk2, the wonderful project maker for Harbour compiler.

Depending your installation, hbmk2 may be in different locations; such as C:\Harbour\bin or c:\hmg\harbour\bin or anything else.

Hereafter I will assume that your hbmk2 is in C:\hmg\Harbour\bin. If your installation is different, please modify above examples.

Second step is assign an empty folder (directory) for work / test affairs; say C:\test.

And the third step is copying your Clipper program(s) to this folder.

But don’t rush; we have some precautions:

– Better way is starting with a single-program project; if you haven’t written a new one. Don’t uses for now projects have multiple program file.

 – Your program may have some “national” characters and these characters may be differently shown between DOS and Windows. If so, you may want fix manually these differences via a Windows based text editor. Or use a program if you have one. Harbour has a clever tool (HB_OEMTOANSI() function) is usable for this purpose.

 – In Clipper it’s possible a program file without module (procedure / function) definition. If you have such file(s), enclose your code with PROCEDURE — RETURN statement pair.

– Every Harbour project must have one and only one MAIN module (procedure / function). The first procedure / function in your single program file will be considered as MAIN module of your project. (In HMG, name of this module must be “main” also).

– Almost all Clipper commands, statement, functions, pseudo functions, manifest constants etc are usable almost in the same ways with Clipper. May be exist some very few and very rare differences, and of course solving methods for its.

For compile process we will use command box (DOS / console window) of Windows. You can open a console window, with the menu Start -> Run -> cmd or selecting it in the “Command Prompt” from the Start Menu \ All Programs.

 – “Command / console window” size may not appropriate for easy use. You may

      – use a MODE ( DOS ) command :

         MODE CON LINES=54 COLS=148

       or

   – adding a SetMode() statement at the beginning of MAIN module of your project. For example:

       SetMode( 25,  80 )  // 25 line 80 column same as standard 
                           // DOS screen ( but not full screen ! )
       SetMode( 48, 128 )  // 48 line 128 column, may be more readable

Now, we are ready to begin: Enter this command in console window :

 C:\hmg\harbour\bin hbmk2 <mainPrgName>

You don’t need any SET command (such as PATH etc) before this command; hbmk2 will find all necessary paths / files.

For running executable after compile, add a -run switch to the command line :

 C:\hmg\harbour\bin hbmk2 <mainPrgName> -run

Of course, you need supply name of your main .prg file in place of <mainPrgName>.

Note that you don’t need a separate “linking” step; hbmk2 will do everything for you.

You may use this

 C:\hmg\harbour\bin hbmk2 <mainPrgName>

command via a batch ( .bat ) command file (such as “build.bat”) too. In this way you can apply compiling process without console window; run .bat file by double click in the Windows Explorer. In this case you may need add a PAUSE command at end of .bat file.

That’s all.

You know, a program file may contains more than one module (procedure / function). So you may develop your project by adding new modules to your single program file.

In this step you don’t need trying extra features, extensions of Harbour. Before that adventure your primary need is to convert existing project Clipper to Harbour.

When you reach a level of multiple-program file project:

– Basic rules are the same: the first module in the your program file is MAIN module of your project.

If your .prg files contains:

  SET PROCEDURE TO <procedure_File_Name>

 and / or

   #include <procedure_File_Name>

 you may or may not continue using these statement.

 – The shortest way for compiling a multiple-file project is use a .hbp ( Harbour Projet ) file. This is a text file and its simplest form is a file contains list of your .prg files. For example:

myprog01.prg
myprog02.prg
myprog03.prg
myprog04.prg

and the compile command is the same :

  C:\hmg\harbour\bin hbmk2 <mainProjectFileName>

In this case you don’t need to use SET PROC… and #include … statement and this is the better way.

Because hbmk2 applies “incremental” compiling, that is compiles only modified files.

Under normal circumstances, any module in any program file is callable in anywhere in the project. If you have some modules that exclusive to this program file, you may use STATIC keyword at the beginning of PROCEDURE / FUNCTION statement. For example:

STATIC FUNCTION OpenTable()

With this syntax you will prevent calling this module outside of this .prg file and the possibility of using this module name into other .prg files.

Example :

Take “A typical Harbour Program” in the “Harbour Sample” page.

As seen at .pdf file by given link, this sample program borrowed from official reference guide of a Clipper compiler. That is, in fact this is a Clipper program and it will may compile with Harbour and run without any modification.

Let’s try.

– Copy and paste this sample and save in your PC with a name say “typical.prg”.

– Comment out the line for now.

 #include "Database.prg" // Contains generic database functions

– Call hbmk2:

 C:\hmg\harbour\bin hbmk2 typical -run

 Note: While working / playing on programs, you may encounter some error messages like:

  Error F0029  Can't open #include file xxx
  Error E0002  Redefinition of procedure or function xxx
  Error: Referenced, missing, but unknown function(s): xxx
  undefined reference to HB_FUN_xxx

 Please don’t panic !

    “Error” is salt and pepper of programming play ! 😉

 The worst situation isn’t getting error, but is unable to stay !

   The “HB_FUN_xxx” may be seen weird at first meet. The “HB_FUN_” is a prefix given by system ( compiler ) to your function; so you need search erroneous point into tour program files without this prefix.

Now, let’s continue to our “typical” program:

If you compile the program with commented out #include … line, possibly it will work, by opening main menu:

Typical_1

But what’s that?

When selected a menu item (except “Quit”) we can’t see other than an empty screen!

Again, don’t panic!

This situation too is not very rare !

If you use vertical scroll bar of command / console window, you will notice that your screen is considerably much longer than seen !

To avoid this conflict, ( as stated above ) we need use a SetMode() function call at top of our Main() procedure ( but AFTER LOCAL statement ! ) :

  SetMode( 24, 79 )

 And now everything is OK.

Typical_2

In fact, not really everything, we have a few “fine adjustment”.

Cut and paste the section after “// Database.prg” to a separate “Database.prg” file, un-comment the “#include …” line and then re-compile.

In this case we have a “multiple prg” project. As stated earlier, better way is using a .hbp file instead of “#include …” statements.

Now comment out ( or delete now ) the #include line.

Build a new text file with name “typical.hbp” and with this content :

Typical.prg
DataBase.prg

And recall hbmk2 without any modification :

C:\hmg\harbour\bin hbmk2 typical -run

That’s all !

Congratulations !

Now you have a multiple-prg project  !

HMG Samples

About HMG Samples

Language Related

 Arrays

Array Arithmetic

Load / Save ANY array

Conversion

DOS -> Windows Character Conversion

National Issues

National Alternate Collating Sequence

National Change Case

 Windows

Tracking Mouse

Controls

Browse

Quick Search    

Combo box

Dynamic ComboBox

Edit Box

Word wrap in EditBox

 Grid

Get Data Into Grid via IDE

Text Box

Auto fill in text box

Search in and Fill Box (SFilBox) 

Tree

Tree Menu

Two Methods for Tree

Functions

 Drives, Directories and Files

Drives and Directories

Directory List

Fill Directory List

PutFile() with default file name

Messages

HMG Message Functions

Message for multiple values

Message Extended

Where Is It ?

Improvements in Message functions

Miscellaneous

Is application running ?

Get Process ID

Simple Error Handling

Funny

Cuckoo Clock

Untouchable window

Warn Lazy User

Pegs Game

Drawing

Play Draw

Draw Border

Printing

 Text Mode

Using printer under Windows 

Obsolete ways

Send to File

Print File

GUI Mode

HMG Print

 HMG Print ( Mini Print ) for beginners in 10 easy steps

Print a plain text file by HMG Print – 1

HMG Report

HMG HPDF

HMG_HPDF — Bill

Unicode

HMG Unicode

Utilities

Color Codes

DB Validate 

Hex View

Mini Agenda

DBA : Data Base Assistant

Low-Level DBU

x-Base Modul List

Mini Search Machine (2014)