Commit Graph

25 Commits

Author SHA1 Message Date
Viktor Szakats
c7a2b185d6 2011-01-31 15:48 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* src/rtl/dirdrive.c
    + Added HB_DIRCREATE(), which is same as MAKEDIR() C5.3 function,
      but it's always available, not just when HB_COMPAT_C53 is enabled.
    + Added HB_DIRDELETE(), which is same as DIRREMOVE() C5.3 function,
      but it's always available, not just when HB_COMPAT_C53 is enabled.

   * contrib/hbnetio/tests/netiotst.prg
   * contrib/hbnetio/tests/netiot03.prg
   * contrib/hbfimage/tests/fitest.prg
   * contrib/hbide/idesaveload.prg
   * utils/hbmk2/hbmk2.prg
   * utils/hbrun/hbrun.prg
   * tests/wcecon.prg
   * tests/flink.prg
   * bin/hb3rdpat.hbs
   * examples/hbdoc2/gentpl.prg
     * Replaced MakeDir() with universally available hb_DirCreate().
     ; TODO: same in config/postinst.hbs (delayed to avoid a million
             false bug reports)

  * src/rtl/Makefile
  + src/rtl/hbfilehi.prg
    + Added generic file/dir/path handling functions.
      They are taken from hbmk2 code, added parameter checking,
      did two minor change to DirBuild() to be generic,
      renamed to have HB_ prefix.
      Please note the parameter list and any details are
      subject to change yet, IOW these APIs are not yet finalized:

         hb_cwd() -> <cPath>
         hb_PathNormalize( <cPath> ) -> <cPath>
         hb_PathMakeAbsolute( <cPathRel>, <cPathAbs> ) -> <cPath>
         hb_PathMakeRelative( <cPathBase>, <cPathTarget>, <lForceRelative> ) -> <cPath>
         hb_DirAddPathSep( <cDir> ) -> <cDir>
         hb_DirDelPathSep( <cDir> ) -> <cDir>
         hb_DirBuild( <cDir> ) -> <lSuccess>
         hb_DirUnbuild( <cDir> ) -> <lSuccess>
         hb_FNameDirGet( <cFileName> ) -> <cDir>
         hb_FNameNameGet( <cFileName> ) -> <cName>
         hb_FNameNameExtGet( <cFileName> ) -> <cNameExt>
         hb_FNameExtGet( <cFileName> ) -> <cExt>
         hb_FNameExtDef( <cFileName>, <cDefExt> ) -> <cFileName>
         hb_FNameExtSet( <cFileName>, <cExt> ) -> <cFileName>
         hb_FNameDirExtSet( <cFileName>, <cDirNew>, <cExtNew> ) -> <cFileName>

    ; TODO: Review, clean interface.
    ; TODO: Use these functions in .hbs files, utils, hbide.

  * include/harbour.hbx
    * Updated.

  * utils/hbmk2/hbmk2.prg
    * One internal function renamed.
2011-01-31 14:49:20 +00:00
Viktor Szakats
3742c1f6f6 2011-01-30 20:00 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* src/rtl/Makefile
  - src/rtl/base64.prg
  + src/rtl/base64d.c
    + Replaced HB_BASE64DECODE() with an optimized C implementation.
      The core code is borrowed from libb64 project
      (http://sourceforge.net/projects/libb64) and has been places
      to public domain by author Chris Venter.
      I've reformatted the code and made some minor modifications.
      I had used the Harbour license for the whole file.
      This code is 50-100 times faster than old Harbour code doing
      the same job. Please review it, especially the buffer size
      calculation.
      BTW the C code uses a unique trick called 'Duff's device'.
2011-01-30 19:00:54 +00:00
Mindaugas Kavaliauskas
a6e74ed2b9 2010-10-23 21:15 UTC+0300 Mindaugas Kavaliauskas (dbtopas/at/dbtopas.lt)
- harbour/include/hbnsctp.ch
  - harbour/include/hbnsctp.h
  - harbour/src/rtl/hbnsctp.c
  - harbour/src/rtl/hbnsctph.c
  + harbour/include/hblpp.ch
  + harbour/include/hblpp.h
  + harbour/src/rtl/hblpp.c
  + harbour/src/rtl/hblpphb.c
  * harbour/src/rtl/Makefile
    * NSCTP -> LPP
2010-10-22 18:16:35 +00:00
Mindaugas Kavaliauskas
1eb1c40a5c 2010-10-21 03:18 UTC+0300 Mindaugas Kavaliauskas (dbtopas/at/dbtopas.lt)
* harbour/contrib/hbmysql/hbmysql.hbp
  * harbour/contrib/sddmy/sddmy.hbp
    * added alternative mysql library path 
  + harbour/include/hbnsctp.ch
  + harbour/include/hbnsctp.h
  * harbour/src/rtl/Makefile
  + harbour/src/rtl/hbnsctp.c
  + harbour/src/rtl/hbnsctph.c
    + added NSCTP (Not Stream Control Transfer Protocol) functions.
      Both C and PRG interfaces functions provided.
    ; Idea, protocol description, name, function description, samples
      are presented at the beginning of hbnsctph.c file. I only put 
      function syntax here to help ChangeLog be a source of 
      documentation:
        hb_nsctpCreate( hSocket ) --> hNSCTP
        hb_nsctpDestroy( hNSTP )
        hb_nsctpError( hNSCTP ) --> nError
        hb_nsctpSetLimit( hNSCTP, nLimit )
        hb_nsctpSend( hNSCTP, cBuf [, nTimeout = FOREVER ] ) --> lSuccess
        hb_nsctpRecv( hNSCTP, @cBuf [, nTimeout = FOREVER ] ) --> lSuccess
        hb_nsctpSendLen( hNSCTP ) --> nBytesSent
        hb_nsctpRecvLen( hNSCTP ) --> nBytesReceived
2010-10-21 00:19:19 +00:00
Mindaugas Kavaliauskas
c3e272aaf1 2010-09-08 18:15 UTC+0300 Mindaugas Kavaliauskas (dbtopas/at/dbtopas.lt)
+ harbour/src/rtl/hbjson.c
    + added JavaScript Object Notation (JSON) encoder, decoder functions

    ; C level functions:
        char * hb_jsonEncode( PHB_ITEM pValue, HB_SIZE * pnLen );
           pValue  - value to encode;
           pnLen   - if pnLen is not NULL, length of returned buffer is 
                     stored to *pnLen;
           returns pointer to encoded JSON buffer. buffer must be fried 
              by the caller.
      
        HB_SIZE hb_jsonDecode( const char * szSource, PHB_ITEM pValue );
           szSource - JSON source;
           pValue   - item to store decoded value. Item value is 
                      undetermined in case of error;
           returns number of bytes decoded from the buffer. This allows 
              to use the remaining part of the buffer for some other 
              purposes. Returns 0 on error.
    
      Harbour level functions:
        hb_jsonDecode( cJSON, @xValue ) --> nLengthDecoded
        hb_jsonEncode( xValue ) --> cJSON
    
      Note:
        - Harbour types unsupported by JSON (date, timestamp, etc.) are 
          encoded as null values;
        - strings are encoded in UTF-8;
        - JSON encode functions are safe for recursive arrays and hashes. 
          Recursive part of array or hash will be stored as null. JSON 
          encoder still allows to use same structure in the leaves, in 
          this case content will be duplicate. 
          I.e.:
             xI := {1, NIL}
             xI[2] := xI
             ? hb_jsonEncode( xI )  // [1,null]
          but:
             xI := {1, .T.}
             xI := {2, xI, xI}
             ? hb_jsonEncode( xI )  // [2,[1,true],[1,true]]
2010-09-08 15:13:52 +00:00
Viktor Szakats
5a6facdcc2 2010-08-07 11:59 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* contrib/make.hbs
    + Generalized the way dynamic lib dependencies are found 
      to make it work on *nix systems, too.

  * include/harbour.hbx
  + src/rtl/libnamec.c
  * src/rtl/libname.prg
  * src/rtl/Makefile
    + Added HB_LIBEXT() and HB_LIBPREFIX() functions.

  * utils/hbmk2/hbmk2.prg
    + Added "platform", "compiler", "cpu", "buildname", "dynsuffix" 
      to --hbinfo returned data.

  * INSTALL
    + Documented HB_BUILD_CONTRIB_DYN setting. The default is
      'no', and if set to 'yes', the build system will create
      dynamic lib versions of the contribs.

  * src/Makefile
  * utils/hbformat/Makefile
  * utils/hbi18n/Makefile
  * utils/hbtest/Makefile
  * config/global.mk
  * config/dos/watcom.mk
  * config/dos/djgpp.mk
  * config/dyn.mk
  * config/rules.mk
  * INSTALL
    * Renamed HB_BUILD_DLL to HB_BUILD_DYN.
2010-08-07 10:00:21 +00:00
Viktor Szakats
abfa725104 2010-08-06 15:15 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* ChangeLog
  * include/harbour.hbx
  * src/rtl/Makefile
  + src/rtl/libname.prg
  + tests/libname.prg
    + Added HB_LIBNAME( <cDynLibName>[, <cDynLibDir> ] ) -> <cOSDynLibName>
      Serves to convert a raw dynlib name, f.e. "hbct" to OS specific
      notation, by adding platform specific extension, lib name prefix and
      optional directory

  * utils/hbmk2/hbmk2.prg
    ! Fixed dynlib prefix for symbian
2010-08-06 13:16:35 +00:00
Viktor Szakats
929b57a7e0 2010-07-29 00:36 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* src/rtl/Makefile
  * include/hbapifs.h
  * include/hbextern.ch
  + src/rtl/fslink.c
  + tests/flink.prg
    + Added new C level functions to create file links:

       HB_BOOL hb_fsLink( const char * pszExisting, const char * pszNewFile );
       HB_BOOL hb_fsLinkSym( const char * pszTarget, const char * pszNewFile );

    + Added new Harbour level functions to create file links:

       HB_FLINK( <cExistingFileName>, <cNewFileName> ) -> <nSuccess>
       HB_FLINKSYM( <cTargetFileName>, <cNewFileName> ) -> <nSuccess>

    ; They work on POSIX and Windows Vista/7 systems.

  * src/rtl/fserr.c
    + Mapped Windows error ERROR_PRIVILEGE_NOT_HELD to DOS error 5.
2010-07-28 22:38:23 +00:00
Viktor Szakats
96e069c19e 2010-07-12 18:44 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* include/hbextern.ch
  * src/rtl/Makefile
  + src/rtl/hbdoc.prg
    + Added __HBDOC_LOADDIR() internal RTL function to read
      NFDOC formatted documentation source directories into
      memory. The result will be a list of hashes which contain
      the raw content of doc files. The function does format
      validation (but not content) and add all agreed-on metadata
      to the hashes.
      It's a start and I hope others can join to create new
      layers of function for below functionality:
         - doc content validation
         - pre-formatting
         - output generators
      The goal is to avoid local solutions and standardize
      the format.

  + tests/hbdoctst.prg
    + Added small test app which will find and parse all
      documentation inside the Harbour source tree and
      save them in .hbd (serialized doc hash) format.
      Such .hdb files can be generated by the build process
      in the future, so tools like HBIDE can use the content
      to display intellisense or built-in help.
    ; TODO: HBQT doc/html should be removed as it's 
            hbdoc tools' job to convert HBDOC source 
            format to html or whatever else format needed.

  * harbour.spec
  * debian/rules
  - doc/man
  + src/pp/hbpp.1
  + src/main/harbour.1
  + utils/hbmk2/hbmk2.1
  + utils/hbtest/hbtest.1
  + utils/hbrun/hbrun.1
    * Moved man doc files to their own component dirs.

  * doc/Makefile
  * doc/en/Makefile
  + doc/clipper.txt
  - doc/en/clipper.txt
    * Moved non-NFDOC formatted doc file to doc dir.

  * doc/en/Makefile
    ! Fixed missing 1stread.txt

  * doc/en/hb_apigt.txt
  * doc/en/hbinet.txt
  * doc/en/tbrowse.txt
  * doc/en/hb_apifs.txt
    ! Fixed NFDOC non-standard entries.

  * bin/hbxpatch.hbs
    ! Fixed detecting dirs. (could cause errors only in rare cases)

  * contrib/hbdoc2/tmplates.prg
    * Formatting.
2010-07-12 16:47:24 +00:00
Viktor Szakats
388945fedf 2010-07-05 00:57 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* src/common/hbver.c
  * src/rtl/Makefile    [t]
  * src/rdd/Makefile    [t]
  * include/hbdefs.h
  * include/hbsetup.h
  + config/bsd/pcc.mk
  * config/rules.mk     [t]
    + First step to add support for pcc (Portable C Compiler) on bsd.
    ; Patch by Tamas Tevesz.
    ; TODO: ? I guess the -gc3 and -l disabler hacks are temporary.
            (in files marked with [t])
2010-07-04 22:58:12 +00:00
Mindaugas Kavaliauskas
f6ad555233 2010-06-09 18:37 UTC+0300 Mindaugas Kavaliauskas (dbtopas/at/dbtopas.lt)
+ harbour/src/rtl/hbcomhb.c
  * harnour/src/rtl/Makefile
  * harbour/include/hbextern.ch
    + added wrapper functions for Serial communication port API
      The list of exported functions is:
        HB_COMCLOSE( nPort )  --> lSuccess
        HB_COMDISCARDCHAR( nPort, nChar | cChar ) --> lSuccess
        HB_COMERRORCHAR( nPort, nChar | cChar ) --> lSuccess
        HB_COMFLOWCHARS( nPort, nXONchar | cXONchar, nXOFFchar | cXOFFchar ) --> lSuccess
        HB_COMFLOWCONTROL( nPort, @iValue, nFlow ) --> lSuccess
        HB_COMFLOWSET( nPort, nFlow ) --> lSuccess
        HB_COMFLUSH( nPort, [ nType = HB_COM_IOFLUSH ] ) --> lSuccess
        HB_COMGETDEVICE( nPort )  --> cDeviceName
        HB_COMGETERROR( nPort ) --> nError
        HB_COMGETOSERROR( nPort ) --> nError
        HB_COMINIT( nPort, nBaud, cParity, nSize, nStop ) --> lSuccess
        HB_COMINPUTCOUNT( nPort ) --> nCount
        HB_COMINPUTSTATE( nPort ) --> nState
        HB_COMLASTNUM() --> nLastPortNumber
        HB_COMLSR( nPort, @nValue ) --> lSuccess
        HB_COMMCR( nPort, @nValue, nClear, nSet ) --> lSuccess
        HB_COMMSR( nPort, @nValue ) --> lSuccess
        HB_COMOPEN( nPort ) --> lSuccess
        HB_COMOUTPUTCOUNT( nPort ) --> nCount
        HB_COMOUTPUTSTATE( nPort ) --> nState
        HB_COMSENDBREAK( nPort, [ nDuration = 50 ] ) --> lSuccess
        HB_COMSETDEVICE( nPort, cDeviceName ) --> lSuccess
        HB_COMRECV( nPort, @cBuffer, [ nLen = LEN( cBuffer ) ], [ nTimeout = 0 ] ) --> nBytesRecv
        HB_COMSEND( nPort, cBuffer, [ nLen = LEN( cBuffer ) ], [ nTimeout = 0 ] ) --> nBytesSent

  + harbour/include/hbcom.ch
  * harbour/include/hbapicom.h
    * moved HB_COM_* constants to .ch file

  + harbour/examples/commouse
  + harbour/examples/commouse/commouse.prg
    + sample application to decode and display COM port mouse data.
      Two types of mouse protocol is supported. You just need to 
      find COM port mouse! :) 

  * harbour/src/rtl/hbcom.c
    ! fixed timeouts on Windows platform (thanks Przemek!)
2010-06-09 15:37:23 +00:00
Mindaugas Kavaliauskas
b9836e09ef 2010-06-08 21:54 UTC+0300 Mindaugas Kavaliauskas (dbtopas/at/dbtopas.lt)
+ harbour/src/rtl/hbsockhb.c
    + added wrapper functions for Harbour socket API
      The list of exported functions is:
        HB_SOCKETGETERROR() --> nSocketError
        HB_SOCKETGETOSERROR() --> nOSError 
        HB_SOCKETERRORSTRING( [ nSocketErrror = hb_socketGetError() ] ) --> cError
        HB_SOCKETGETSOCKNAME( hSocket ) --> aAddr | NIL
        HB_SOCKETGETPEERNAME( hSocket ) --> aAddr | NIL
        HB_SOCKETOPEN( [ nDomain = HB_SOCKET_PF_INET ] , [ nType = HB_SOCKET_PT_STREAM ], [ nProtocol = 0 ] ) --> hSocket
        HB_SOCKETCLOSE( hSocket ) --> nSuccess
        HB_SOCKETSHUTDOWN( hSocket, [ nMode = HB_SOCKET_SHUT_RDWR ] ) --> nSuccess
        HB_SOCKETBIND( hSocket, aAddr ) --> nSuccess
        HB_SOCKETLISTEN( hSocket, [ iQueueLen = 10 ] ) --> nSuccess
        HB_SOCKETACCEPT( hSocket, [ @aAddr ], [ nTimeout = FOREVER ] ) --> nSuccess
        HB_SOCKETCONNECT( hSocket, aAddr, [ nTimeout = FOREVER ] ) --> nSuccess
        HB_SOCKETSEND( hSocket, cBuffer, [ nLen = LEN( cBuffer ) ], [ nFlags = 0 ], [ nTimeout = FOREVER ] ) --> nBytesSent
        HB_SOCKETSENDTO( hSocket, cBuffer, [ nLen = LEN( cBuffer ) ], [ nFlags = 0 ], aAddr, [ nTimeout = FOREVER ] ) --> nBytesSent
        HB_SOCKETRECV( hSocket, @cBuffer, [ nLen = LEN( cBuffer ) ], [ nFlags = 0 ], [ nTimeout = FOREVER ] ) --> nBytesRecv
        HB_SOCKETRECVFROM( hSocket, @cBuffer, [ nLen = LEN( cBuffer ) ], [ nFlags = 0 ], @aAddr, [ nTimeout = FOREVER ] ) --> nBytesRecv
        HB_SOCKETSETBLOCKINGIO( hSocket, lValue ) --> nSuccess
        HB_SOCKETSETNODELAY( hSocket, lValue ) --> nSuccess
        HB_SOCKETSETREUSEADDR( hSocket, lValue ) --> nSuccess
        HB_SOCKETSETKEEPALIVE( hSocket, lValue ) --> nSuccess
        HB_SOCKETSETBROADCAST( hSocket, lValue ) --> nSuccess
        HB_SOCKETSETSNDBUFSIZE( hSocket, nValue ) --> nSuccess
        HB_SOCKETSETRCVBUFSIZE( hSocket, nValue ) --> nSuccess
        HB_SOCKETGETSNDBUFSIZE( hSocket, @nValue ) --> nSuccess
        HB_SOCKETGETRCVBUFSIZE( hSocket, @nValue ) --> nSuccess
        HB_SOCKETSETMULTICAST( hSocket,  cAddr ) --> nSuccess
        HB_SOCKETSELECTREAD( hSocket,  [ nTimeout = FOREVER ] ) --> nRet
        HB_SOCKETSELECTWRITE( hSocket,  [ nTimeout = FOREVER ] ) --> nRet
        HB_SOCKETSELECTWRITEEX( hSocket,  [ nTimeout = FOREVER ] ) --> nRet
        HB_SOCKETSELECT( aRead, lSetRead, aWrite, lSetWrite, aExcep, lSetExcep, [ nTimeout = FOREVER ] ) --> nRet
        HB_SOCKETRESOLVEINETADDR( cAddr, nPort ) --> aAddr | NIL
        HB_SOCKETRESOLVEADDR( cAddr, [ nFamily = HB_SOCKET_AF_INET ] ) --> cResolved
        HB_SOCKETGETHOSTS( cAddr, [ nFamily = HB_SOCKET_AF_INET ] ) --> aHosts
        HB_SOCKETGETIFACES( [ nFamily ], [ lNoAliases ] ) --> aIfaces

  + harbour/examples/udpds
  + harbour/examples/udpds/udpds.prg
    + added UDP Discovery Server sample

      This module demonstrates a simple UDP Discovery Server
     
      If you run some service on the network (ex., netio), you need to
      know server IP address and configure client to connect to this
      address. UDPDS helps client to find server address (or addresses
      of multiple servers) on local network. UDPDS should be run in
      parallel to real server (ex., netio). Server part of UDPDS uses
      threads, so, it should be compiled in MT mode.
     
      Server functions:
        UDPDS_Start( nPort, cName [, cVersion ] ) --> hServer
        UDPDS_Stop( hServer ) 
        
      Client function:
        UDPDS_Find( nPort, cName ) --> { {"ip_addr_1", "version_1"}, ... }

    ; Please add .hbc, .hbp files, if it is required. This module requires 
      only a standard harbour runtime library and MT VM.
2010-06-08 18:54:58 +00:00
Viktor Szakats
e4196785d1 2010-05-17 20:47 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* include/hbextern.ch
  * src/rtl/Makefile
  + src/rtl/memvarhb.prg
    + Added:
        HB_MVSAVE( <cFileName>, [<cMask>], [<lIncludeMask>] )
        HB_MVRESTORE( <cFileName>, [<lAdditive>], [<cMask>], [<lIncludeMask>] )

      They serve the same purpose with same interface
      and similar behavior to __MVSAVE()/__MVRESTORE()
      (and __MSAVE()/__MRESTORE(), and 'SAVE TO' command),
      only that they support longer than 10 char variable names.
      It is not possible to add such support in Clipper-style
      .mem files, so these functions will create an incompatible
      file format with default '.hbv' extension.

    ; TOFIX: __MVRESTORE() restores variables as PRIVATEs
             while HB_MVRESTORE() as PUBLIC.
    ; NOTE: GETLIST exclusion is solved with simple trick,
            as I couldn't find how it's solved in __MVSAVE().
    ; Consider this experimental solution to the problem.

  * contrib/hbmysql/tmysql.prg
    % STOD( "" ) -> STOD()

  * contrib/hbide/ideprojmanager.prg
    ! -hbexec -> -hbexe

  * src/rtl/typefile.prg
    ! __TYPEFILE(): Fixed both RTEs to be Clipper compatible.
2010-05-17 18:49:23 +00:00
Przemyslaw Czerpak
9d13008427 2010-05-12 02:26 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/external/minizip/ioapi.h
    ! fixed FreeBSD and HAIKU builds

  * harbour/src/rtl/fserr.c
    * added translation for EPERM

  * harbour/include/Makefile
  + harbour/include/hbapicom.h
  * harbour/src/rtl/Makefile
  + harbour/src/rtl/hbcom.c
    + added Harbour multiplatform serial port C API (hb_com*() functions).
      implemented code for *nixes, MS-Windows and OS2. DOS is not supported
      yet. Please make test on different platforms.
    ; few notes about this code:
      termios (*nix) based builds:
         - reading LSR is not supported
         - duration in break signal is fixed (at least 0.25 seconds, and not
           more that 0.5 seconds)
         - DTR/DSR hardware flow control is not supported
         - setting error character is not supported
         - discard card is supported only on few platforms
         - checking input/output flow state is not supported
         - if some platforms do not support some termio extensions then
           compile time warnings TODO_* should be generated.
      MS-Windows builds:
         - discard card is not supported
      OS2 builds:
         - checking for input flow state is not supported
         - discard card is not supported
      In all builds not all RS-232 hardware flags/state are available.
      OS2 build supports most of them,

      This code needs to be extensively tested. I wrote it without any
      serious tests. Especially OS2 builds should be verified by OS2
      users. I wrote this port using only documentation which OS2 API
      available in the Internet.

      DOS is not supported yet though it's possible to compile termio code
      for *nixes with DJGPP. Anyhow it would be very nice if we can add
      our own DOS serial port code. I would like to ask if any of you
      has low level serial port code in C for DOS (i.e. used with Clipper)
      and can send it to us so we can use it with Harbour. I have my
      own serial port library for Clipper but it's written in assembler
      and it's much wider then sth what we need so it cannot be easy
      adopted for Harbour.

  * harbour/contrib/hbct/Makefile
  + harbour/contrib/hbct/ctcom1.c
  + harbour/contrib/hbct/ctcom.ch
  + harbour/contrib/hbct/ctcom2.c
    + added CT3 compatible COM_*() functions.
    + added CT3 compatible XMOBLOCK(), XMOCHECK(), ZEROINSERT() and
      ZEROREMOVE() functions.
    + added new CT COM function:
         COM_DEVNAME( <nComPort> [, <cNewName> ] ) -> <cPrevName>
      which can be used to specify device name for given port in modern
      systems which do not give direct hardware access for the process.
    ; few notes about CT3 COM_*() functions in Harbour.
      In COM_OPEN() only 1-st parameter is significant, input/output buffer
      sizes and trap mode parameters are ignored. In modern OS-es such
      functionality is controlled by OS and usually buffered read/write
      is always enabled. The sizes of IO buffers can be used only as
      suggested IO buffer size for OS in some systems. It's possible that
      these additional parameters will be used in DOS builds in the future.
      COM_READ() does not support 2-nd parameter <lNoDelete>. It can be
      implemented but because we do not have direct access to OS buffers
      then we will have to emulate it ourselves what is rather inefficient.
      Anyhow I can implement it if users think it's critical.
      In COM_CRC() I fixed few CT3 bugs so it's not bug compatible with CT3,
      i.e. it works correctly for 8 bit and smaller polynomials instead of
      returning 0 or supports much larger polynomials up to 64bits.
      For 16/17 bit polynomials it gives the same results as CT3 so for most
      common usage it should be binary compatible with CT3.
      In ZEROREMOVE() I fixed decoding some wrong CCITT strings which does
      not have trailing 0 so it returns empty string "" for such corrupted
      data. If someone needs original CT3 behavior for some broken code then
      is can be enabled by HB_CT3_ZEROREMOVE_BUG macro.

      I haven't implemented few functions.
      COM_GETIO(), COM_SETIO(), COM_GETIRQ(), COM_SETIRQ() are not portable
      and can be implemented only for really few platforms, i.e. for DOS
      when/if we add support for serial ports to Harbour DOS builds.
      Similar functionality for all other platforms gives our new function
      COM_DEVNAME().
      COM_KEY(), COM_SKEY() and COM_EVENT() are also not implemented.
      To make them well we should add support for asynchronous events to HVM
      and such extension is still unavailable. Some simulation can be
      implemented using idle tasks but this can be done also by final
      Harbour users so I decided to not make it.

      Please test it - I've never used CT3 COM_*() API with Clipper.

  * harbour/contrib/hbct/dummy.c
    * removed dummy CT3 serial communication functions
    ; such files with dummy functions introduces very serious problems for
      user code because they do not respect original module granularity
      effectively breaking overloading only chosen functions so it breaks
      also some real Clipper code.
2010-05-12 00:27:04 +00:00
Przemyslaw Czerpak
fec547542c 2010-05-06 21:33 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/src/rtl/Makefile
  * harbour/src/rtl/hbznet.c
  + harbour/src/rtl/hbinetz.c
    * moved HB_INETCOMPRESS() function to separate file

  * harbour/include/hbexprb.c
    ! fixed my very bad C&P typo (2010-02-04 19:14 UTC+0100) which caused
      that dummy value was left on HVM stack after post decrementation used
      as statement. This dummy value could break construciton like FOR EACH,
      WITH OBJECT, BEGIN SEQUENCE. Here is self contain example which can
      be used to exploit the problem:
            proc main()
               begin sequence
                  p()
               end sequence
            return
            proc p()
               local nTemp := 0
               begin sequence
                  nTemp--
               end sequence
            return
      Many thanks to Heinz Bergen who reduced his code to similar small
      example.
2010-05-06 19:34:02 +00:00
Viktor Szakats
4d1a8cc1a3 2010-04-28 19:05 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* src/rtl/Makefile
  * src/rtl/getsys.prg
  + src/rtl/getsyshb.prg
    ! Moved HB_GETREADVAR() to separate source file.
    ! HB_GETREADVAR() fixed to use HB_ASCIIUPPER() like
      TGETLIST():GETREADVAR() instead of UPPER().

  * src/rtl/tgetlist.prg
    % TGETLIST():GETREADVAR() now can use HB_GETREADVAR()
      instead of duplicating the code locally.

  * INSTALL
    + Added sort of "disclaimer" note to HB_BUILD_IMPLIB option.

  * include/hbextern.ch
    + Added missing TBREADER().
2010-04-28 17:06:52 +00:00
Viktor Szakats
fe38540ca2 2010-02-20 12:55 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* include/hbsetup.ch
  * src/common/hbverdsp.c
    - Deleted HB_COMPAT_FLAGSHIP, HB_COMPAT_FOXPRO.

  * include/hbextern.ch
  * src/rtl/seconds.c
    + Added HB_SECONDSCPU()
      (native Harbour version of FlagShip specific SECONDSCPU())

  * tests/memtst.prg
  * tests/speedold.prg
  * tests/speedtst.prg
  * tests/vidtest.prg
    * Changed to use HB_SECONDSCPU().
    + Added translation from SECONDSCPU() to HB_SECONDSCPU() when
      built for FlagShip (where applicable).

  * include/hbextern.ch
  * src/rtl/Makefile
  - src/rtl/strpeek.c
  - src/rtl/secondfs.c
  * contrib/Makefile
  + contrib/hbfship
  + contrib/hbfship/Makefile
  + contrib/hbfship/hbfship.hbc
  + contrib/hbfship/secondfs.c
  + contrib/hbfship/strpeek.c
    - Moved FlagShip specific function from core to new hbfship lib.
    * Changed SECONDSCPU() to be just a wrapper over core HB_SECONDSCPU().
    ; INCOMPATIBLE: If you used SECONDSCPU() function, change it to
                    HB_SECONDSCPU(), or add hbfship to your lib list.
                    If you used STRPEEK() or STRPOKE() functions,
                    add hbfship to your lib list.

  * utils/hbmk2/examples/contribf.hbc
    + Added hbfship.
2010-02-20 11:57:17 +00:00
Viktor Szakats
73aa1fd7d5 2010-02-20 04:29 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
- src/rtl/browdbx.prg
  - src/rtl/mousex.c
  * src/rtl/tbcolumn.prg
  - src/rtl/philesx.c
  * src/rtl/Makefile
  - src/rtl/thfuncx.prg
  - src/rtl/oemansix.c
  - src/rtl/tthreadx.prg
  - src/rtl/tgetx.prg
  - src/rtl/idlex.c
  * src/rtl/browdb.prg
  - src/rtl/typefilx.prg
  - src/rtl/binnumx.c
  * src/rtl/tbrowse.prg
  - src/rdd/dbjoinx.prg
  - src/rdd/dblistx.prg
  - src/rdd/dbtotalx.prg
  - src/rdd/dbstruxx.prg
  - src/rdd/dbsortx.prg
  * src/rdd/Makefile
  - src/rdd/dbcmdx.c
  - src/rdd/dbdetacx.c
  - src/rdd/dbupdatx.prg
  - src/rdd/dbfuncsx.prg
  * include/hbextern.ch
  * contrib/xpp/xppextrn.ch
  * contrib/xpp/binnumx.c
  * contrib/xpp/tthreadx.prg
    * Synced contrib/xpp compatibility lib source with core.
    - Deleted Xbase++ compatibility functions from core.
    ; NOTE: INCOMPATIBLE. If you use Xbase++ function, you should now link 
            xpp lib. (the name of the lib is not yet finalized)
    ; TODO: Clean remaining four HB_COMPAT_XPP guards and delete this 
            build-time option from core.
2010-02-20 03:31:25 +00:00
Viktor Szakats
83bbb7b34d 2010-02-17 03:06 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* src/rtl/fstemp.c
    ! Using hb_fsTempDir() in HB_FTEMPCREATEEX() instead of
      old solution. This should fix it for some non-*nix
      platforms where *nix specific TEMPDIR envvar was used
      to determine temp directory.

  * contrib/hbwin/Makefile
  * include/Makefile
  * src/rtl/Makefile
  - contrib/hbwin/hbdyn.ch
  + include/hbdyn.ch
  - contrib/hbwin/hbdyn.c
  + src/rtl/hbdyn.c
  - contrib/hbwin/win_dllc.c
  + src/rtl/hbdynhb.c
  - contrib/hbwin/tests/testdll.c
  + tests/testdyn.c
  - contrib/hbwin/tests/testdll.prg
  + tests/testdyn.prg
  - contrib/hbwin/tests/testdll1.prg
  + tests/testdyn1.prg
  - contrib/hbwin/hbdyn.h
  * include/hbapi.h
    * Moved dynamic library call related functions to
      core (RTL).
    * Windows specific test code (currently all) guarded
      for platform.
    * Changed default calling convention to cdecl.
      Tests adaptd accordingly.
    * Terminology change: 'dll' -> 'dynamic library'
    ; HB_DYNCALL() is now part of core Harbour, and it's 
      platform independent. It's platform (ABI) dependent though,
      and currently x64 and x86/stdcall/syscall/cdecl 
      is supported and these were tested (except OS/2 syscall).

  * contrib/hbwin/hbwin.h
  * contrib/hbwin/win_misc.c
  * contrib/hbwin/legacycd.c
    * Low level hbwin_getprocaddress() function moved
      to legacy file and made static.

  * contrib/xpp/Makefile
  * contrib/xpp/dllx.c
  * contrib/xpp/xpp.hbc
    + Enabled DLL*() functions for all platforms.
    - Deleted dependence on hbwin library.

  * contrib/xpp/tests/testdll.prg
    * Windows specific parts (currently the whole test) guarded
      for platform.

  * contrib/hbct/Makefile
  - contrib/hbct/diskhb.prg
  * contrib/hbct/disk.c
  * contrib/xhb/Makefile
  + contrib/xhb/diskhb.prg
    * GETVOLINFO() moved from hbct to xhb.

  * ChangeLog
    * Marked some TODO/TOFIX items as DONE.
2010-02-17 02:09:17 +00:00
Viktor Szakats
d8df983663 2010-02-01 01:28 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* src/rtl/Makefile
  * src/rtl/cdpapi.c
  + src/rtl/cdpapihb.c
  * include/hbapicdp.h
    + Moved Harbour level functions to a separate file.
      I had to rename and publish three static functions.
      Eventually the low level part should go to hbcommon lib.
    ; TODO: HB_CDPLIST() is still to be moved, I couldn't find out elegant
            low-level API to solve it.
2010-02-01 00:29:02 +00:00
Viktor Szakats
892efc393d 2010-01-13 17:12 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* src/rtl/Makefile
  + src/rtl/strclear.c
  * include/hbextern.ch
    + Added HB_STRCLEAR() function to safely clear the content 
      of a string variable.
      Notice that this method by itself can only work if the 
      string variable has no other references, and generally 
      you have to code carefully to avoid creating unwanted 
      copies of the string when passing it around in an app.
      So this is no silver bullet, but rather just one component 
      to solve this problem.

  * contrib/hbnetio/utils/netiosrv.prg
    + Added steps to avoid having the password stored in memory, 
      while the server is running.

  * src/rtl/philes.c
    % Minor cleanup.
2010-01-13 16:13:29 +00:00
Przemyslaw Czerpak
86c9511f2f 2010-01-06 07:27 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/src/rtl/gtwin/gtwin.c
    + added support for HB_GTI_ISUNICODE

  * harbour/include/hbapifs.h
    * added missing 'extern' in some declarations

  * harbour/include/hbzlib.ch
    + added HB_ZLIB_STRATEGY_* constants
    + added HB_ZLIB_COMPRESSION_DISABLE

  * harbour/include/Makefile
  + harbour/include/hbznet.h
  * harbour/include/hbextern.ch
  * harbour/src/rtl/Makefile
  * harbour/src/rtl/hbinet.c
  + harbour/src/rtl/hbznet.c
    + added support for ZLIB compression in stream sockets.
    + added .prg function:
         HB_INETCOMPRESS( <pSocket>, [<nCompressionLevel>], [<nStrategy>] )
      which enables ZLIB compression for given HB_INET*() socket.
      <pSocket> is a socket created by one of HB_INET*() functions
      <nCompressionLevel> is compression factor between 1 (fastest) and
                          9 (best) (see HB_ZLIB_COMPRESSION_*)
                          0 (none) disable compression on output data
                          but decompression is still working.
      <nStrategy> is used to tune compression algorithm,
                  see HB_ZLIB_STRATEGY_*
      The compression must be enabled on both connection sides, i.e.
      on the server side:
         conn := hb_inetAccept( sock )
         hb_inetCompress( conn )
      and on the client side:
         sock := hb_inetConnect( cServer, nPort )
         hb_inetCompress( sock )
      in the same moment but it's not necessary to enable it at the
      beginning of connection. It can be done later, i.e. when both
      sides agree to enable connection using some custom protocol.
      The compression has effect only on stream connections, i.e.
      TCP and it's ignored in datagram connections like UDP.
      This function can be executed more then once changing the compression
      parameters but it causes that all data in readahead decompression
      buffer is discarded. When called with HB_ZLIB_COMPRESSION_DISABLE
      as <nCompressionLevel> then support for stream compression is removed
      and sockets works again in raw mode.
      The compression level and strategy do not have to be the same on both
      connection sides. Each side can chose the best settings for data it's
      going to send.

      This code was written in a way which allows to easy implement
      alternative compression methods or other extensions like encryption
      in existing HB_INET*() sockets also by non core code. The public C
      functions declared in hbznet.h allows to use this extension with raw
      harbour sockets two.
2010-01-06 06:27:38 +00:00
Przemyslaw Czerpak
c3e0439921 2009-10-17 01:22 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/src/rtl/Makefile
  + harbour/src/rtl/hbbffnc.c
  * harbour/include/hbextern.ch
    + added PRG functions for BlowFish encryption:
         hb_blowfishKey( <cPass> ) -> <bfKey>
         hb_blowfishEncrypt( <bfKey>, <cData> ) -> <cCryptedData>
         hb_blowfishDecrypt( <bfKey>, <cCryptedData> ) -> <cData>
      On errors above functions return NIL.
      Warning: the size of encrypted data is padded to 64bit (8 bytes)
      so it's bigger then original one.
2009-10-16 23:22:41 +00:00
Przemyslaw Czerpak
864d74c6a5 2009-10-16 20:02 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/src/rtl/Makefile
  + harbour/src/rtl/hbbfish.c
  * harbour/include/Makefile
  + harbour/include/hbbfish.h
    + added support for BlowFish encryption at C level:
      hb_blowfishInit(), hb_blowfishEncrypt(), hb_blowfishDecrypt()
      This code implements BlowFish algorithm designed by Bruce Schneier.
      The description of BlowFish algorithm can be found at:
         http://www.schneier.com/paper-blowfish-fse.html
      This code uses for initial s-boxes and p-array values PI hex digits
      taken from tables public at:
         http://www.schneier.com/blowfish.html
      which can be downloaded from:
         http://www.schneier.com/code/constants.txt
      This should be quite fast implementation (probably much faster
      then reference one) but please remember that in BlowFish algorithm
      startup initialization of encryption tables is intentionally
      designed to be expensive to strongly reduce the efficiency of
      brute force attacks so call hb_blowfishInit() once for each
      new password and then reuse initialized encryption tables in
      hb_blowfishEncrypt() and hb_blowfishDecrypt().
      I'll add .prg functions later.
      TODO: add some asymmetric key encryption.
2009-10-16 18:02:57 +00:00
Viktor Szakats
1b080a03f9 2009-10-09 16:53 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
- source
  + src
  * src/Makefile
  * src/dynlib/mt/Makefile
  * src/dynlib/Makefile
  * INSTALL
  * Makefile
  * ChangeLog
  * harbour.spec
  * mpkg_tgz.sh
    * Renamed 'source' dir to 'src' to move closer to other FOSS 
      projects. It's also easier to type, plus it has the side 
      effect that some cmdlines will be shorter in the 
      build process.
2009-10-09 14:54:14 +00:00