2009-02-16 23:55 UTC+0100 Francesco Saverio Giudice (info/at/fsgiudice.com)

+ harbour/contrib/hbblat
  + harbour/contrib/hbblat/blatcls.prg
  + harbour/contrib/hbblat/blatwrp.c
  + harbour/contrib/hbblat/common.mak
  + harbour/contrib/hbblat/hbblat.ch
  + harbour/contrib/hbblat/make_b32.bat
  + harbour/contrib/hbblat/make_vc.bat
  + harbour/contrib/hbblat/Makefile
  + harbour/contrib/hbblat/syntax.txt
  + harbour/contrib/hbblat/tests
  + harbour/contrib/hbblat/tests/blatcmd.prg
  + harbour/contrib/hbblat/tests/blattest.prg
  + harbour/contrib/hbblat/tests/f_listtext.txt
  + harbour/contrib/hbblat/tests/f_ps.txt
  + harbour/contrib/hbblat/tests/f_sample.txt
  + harbour/contrib/hbblat/tests/f_sample1.txt
  + harbour/contrib/hbblat/tests/f_subjectline.txt
  + harbour/contrib/hbblat/tests/hbmk.bat
    + Added BLAT wrapper class

  * harbour/contrib/make_b32_all.bat
  * harbour/contrib/make_vc_all.bat
    * added above contrib

  * harbour/source/vm/hvm.c
    * added missing ;
This commit is contained in:
Francesco Saverio Giudice
2009-02-16 23:01:32 +00:00
parent cf97f6830e
commit c26dea6c63
20 changed files with 1910 additions and 3 deletions

View File

@@ -8,6 +8,34 @@
2009-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org)
*/
2009-02-16 23:55 UTC+0100 Francesco Saverio Giudice (info/at/fsgiudice.com)
+ harbour/contrib/hbblat
+ harbour/contrib/hbblat/blatcls.prg
+ harbour/contrib/hbblat/blatwrp.c
+ harbour/contrib/hbblat/common.mak
+ harbour/contrib/hbblat/hbblat.ch
+ harbour/contrib/hbblat/make_b32.bat
+ harbour/contrib/hbblat/make_vc.bat
+ harbour/contrib/hbblat/Makefile
+ harbour/contrib/hbblat/syntax.txt
+ harbour/contrib/hbblat/tests
+ harbour/contrib/hbblat/tests/blatcmd.prg
+ harbour/contrib/hbblat/tests/blattest.prg
+ harbour/contrib/hbblat/tests/f_listtext.txt
+ harbour/contrib/hbblat/tests/f_ps.txt
+ harbour/contrib/hbblat/tests/f_sample.txt
+ harbour/contrib/hbblat/tests/f_sample1.txt
+ harbour/contrib/hbblat/tests/f_subjectline.txt
+ harbour/contrib/hbblat/tests/hbmk.bat
+ Added BLAT wrapper class
* harbour/contrib/make_b32_all.bat
* harbour/contrib/make_vc_all.bat
* added above contrib
* harbour/source/vm/hvm.c
* added missing ;
2009-02-16 21:19 UTC+0100 Viktor Szakats (harbour.01 syenar hu)
- tests/hbmk_gnu.bat
- Removed.

View File

@@ -0,0 +1,18 @@
#
# $Id$
#
ROOT = ../../
C_SOURCES = \
blatwrp.c \
PRG_SOURCES= \
blatcls.prg \
PRG_HEADERS=\
blat.ch \
LIBNAME=hbblat
include $(TOP)$(ROOT)config/lib.cf

View File

@@ -0,0 +1,982 @@
/*
* $Id$
*/
/*
* Harbour Project source code:
* BLAT wrapper library interface code.
*
* Copyright 2007-2009 Francesco Saverio Giudice <info@fsgiudice.com>
* 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, or (at your option)
* any later version.
*
* 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 software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
*
* As a special exception, the Harbour Project gives permission for
* additional uses of the text contained in its release of Harbour.
*
* The exception is that, if you link the Harbour libraries 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 Harbour library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released by the Harbour
* Project under the name Harbour. If you copy code from other
* Harbour Project or Free Software Foundation releases into a copy of
* Harbour, as the General Public License permits, the exception does
* not apply to the code that you add in this way. To avoid misleading
* anyone as to the status of such modified files, you must delete
* this exception notice from them.
*
* If you write modifications of your own for Harbour, it is your choice
* whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*
*/
#include "common.ch"
#include "hbblat.ch"
#include "hbclass.ch"
CLASS HBBlat
PROTECTED:
VAR nBlatError AS NUMERIC INIT BLAT_SUCCESS // Will contains numerical error returned from BLAT
VAR cBlatError AS STRING INIT "" // Will contains error string returned from BLAT
VAR nError AS NUMERIC INIT BLAT_SUCCESS
VAR cError AS STRING INIT ""
VAR aErrors AS ARRAY INIT {}
VAR cCommand AS STRING INIT ""
VAR cVersion AS STRING INIT "0.1"
VAR cBlatVersion AS STRING INIT "2.6.2"
VAR lChecked AS LOGICAL INIT FALSE
EXPORTED:
// Installation
VAR lSaveSettings AS LOGICAL INIT FALSE // store common settings to the Windows Registry. Takes the
// same parameters as -install, and is only for SMTP settings.
METHOD SaveSettings( ... ) INLINE ::Install( "SMTP", ... )
//VAR lInstall AS LOGICAL INIT FALSE
METHOD Install( cService, cServerAddress, cSenderEmailAddress, nTries, nPort, cProfile, cUsername, cPassword ) VIRTUAL // TODO
// Basics
VAR cOptionFile AS STRING
VAR cTO AS STRING // recipient list (comma separated)
VAR cTOFile AS STRING // recipient list filename
VAR cCC AS STRING // carbon copy recipient list (comma separated)
VAR cCCFile AS STRING // cc recipient list filename
VAR cBCC AS STRING // blind carbon copy recipient list (comma separated)
VAR cBCCFile AS STRING // bcc recipient list filename
VAR nMaxNames AS NUMERIC INIT 0 // send to groups of x number of recipients
VAR lToUndiscloseRecipients AS LOGICAL INIT FALSE // set To: header to Undisclosed Recipients if not using the ::cTo and ::cCC options
VAR cSubject AS STRING // subject line
VAR lSuppressSubject AS LOGICAL INIT FALSE // suppress subject line if it is not defined
VAR cSubjectFile AS STRING // file containing subject line
VAR cBody AS STRING // message body
VAR cBodyFile AS STRING // file containing the message body
VAR cSignatureFile AS STRING // text file containing your email signature
VAR cTagFile AS STRING // text file containing taglines, to be randomly chosen
VAR cPostScriptumFile AS STRING // final message text, possibly for unsubscribe instructions
// Registry Overrides
VAR cProfile AS STRING // Send using cProfile profile (using server, user, and port)
VAR lShowProfiles AS LOGICAL INIT FALSE // list all profiles in the Registry
VAR cServerSMTP AS STRING // specify SMTP server to be used (optionally, addr:port)
VAR cServerNNTP AS STRING // specify NNTP server to be used (optionally, addr:port)
VAR cServerPOP3 AS STRING // specify POP3 server to be used (optionally, addr:port) when POP3 access is required before sending email
VAR cServerIMAP AS STRING // specify IMAP server to be used (optionally, addr:port) when IMAP access is required before sending email
VAR cMailFrom AS STRING
VAR cFrom AS STRING
VAR cReplyTo AS STRING
VAR cReturnPath AS STRING
VAR cSender AS STRING
VAR nPortSMTP AS NUMERIC // Blat default 25
VAR nPortNNTP AS NUMERIC // Blat default 119
VAR nPortPOP3 AS NUMERIC // Blat default 110
VAR nPortIMAP AS NUMERIC // Blat default 143
VAR cUserAUTH AS STRING
VAR cPasswordAUTH AS STRING
VAR cUserPOP3 AS STRING
VAR cPasswordPOP3 AS STRING
VAR cUserIMAP AS STRING
VAR cPasswordIMAP AS STRING
// Miscellaneous RFC header switches
VAR cOrganization AS STRING
VAR cUserAgent AS STRING
VAR cXHeader AS STRING
VAR lNoBlatHomePage AS LOGICAL INIT TRUE
VAR lNoBlatXHeader AS LOGICAL INIT TRUE
VAR lRequestDisposition AS LOGICAL INIT FALSE
VAR lRequestReturnReceipt AS LOGICAL INIT FALSE
VAR cCharSet AS STRING
VAR cUserHeader1 AS STRING
VAR cUserHeader2 AS STRING
VAR cDSN AS STRING // Delivery Status Notifications (RFC 3461): n = never, s = successful, f = failure, d = delayed - can be used together, however N takes precedence
VAR lEHBase64 AS LOGICAL INIT FALSE // use base64 for encoding headers, if necessary
VAR lEHQuoted AS LOGICAL INIT FALSE // use quoted-printable for encoding headers, if necessary
VAR lLowPriority AS LOGICAL INIT FALSE
VAR lHighPriority AS LOGICAL INIT FALSE
VAR nSensitivity AS NUMERIC INIT -1 // set message sensitity 0 for personal, 1 for private, 2 for company-confidential
// Attachment and encoding options
VAR aAttachBinFiles AS ARRAY
VAR cAttachBinFiles AS STRING
VAR aAttachTextFiles AS ARRAY
VAR cAttachTextFiles AS STRING
VAR aAttachInlineFiles AS ARRAY
VAR cAttachInlineFiles AS STRING
VAR aHtmlEmbeddedFiles AS ARRAY
VAR cHtmlEmbeddedFiles AS STRING // embed file(s) in HTML. Object tag in HTML must specify content-id using cid: tag. eg: <img src="cid:image.jpg">
VAR cAttachListBinFile AS STRING
VAR cAttachListTextFile AS STRING
VAR cAttachListEmbeddedFile AS STRING
VAR lSendBinaryBase64 AS LOGICAL INIT FALSE
VAR lSendBinaryUUEncoded AS LOGICAL INIT FALSE
VAR lSendEnrichedText AS LOGICAL INIT FALSE
VAR lUnicode AS LOGICAL INIT FALSE
VAR lHtml AS LOGICAL INIT FALSE
VAR cAlternateText AS STRING
VAR cAlternateTextFile AS STRING
VAR lMime AS LOGICAL INIT FALSE // MIME Quoted-Printable Content-Transfer-Encoding
VAR lAskFor8BitMime AS LOGICAL INIT FALSE // ask for 8bit data support when sending MIME
VAR nMultipartSize AS NUMERIC // send multipart messages, breaking attachments on <size> KB boundaries, where <size> is per 1000 bytes
VAR lNoMultipartMessage AS LOGICAL INIT FALSE // do not allow multipart messages
// NNTP specific options
VAR cGroups AS STRING // list of newsgroups (comma separated)
// Other options
VAR lXtndXmit AS LOGICAL INIT FALSE // Attempt to use POP3 to transmit when accessing POP3 first
VAR lHelp AS LOGICAL INIT FALSE // displays this help (also -?, /?, -help or /help)
VAR lQuiet AS LOGICAL INIT TRUE // suppresses all output to the screen
VAR lDebug AS LOGICAL INIT FALSE // echoes server communications to a log file or screen (overrides -q if echoes to the screen)
VAR cLogFile AS STRING // log everything but usage to <file>
VAR lLogTimestamp AS LOGICAL INIT FALSE // when -log is used, a timestamp is added to each log line
VAR lLogOverwrite AS LOGICAL INIT FALSE // when -log is used, overwrite the log file
VAR nTimeout AS NUMERIC INIT 60 // set timeout to 'n' seconds. Blat will wait 'n' seconds for server responses
VAR nTry AS NUMERIC INIT 1 // -1 == INFINITE, how many times blat should try to send (1 to 'INFINITE')
VAR lBinary AS LOGICAL INIT FALSE // do not convert ASCII | (pipe, 0x7c) to CrLf in the message body
VAR cHostname AS STRING // select the hostname used to send the message via SMTP this is typically your local machine name
VAR lRaw AS LOGICAL INIT FALSE // do not add CR/LF after headers
VAR nDelay AS NUMERIC INIT 1 // wait x seconds between messages being sent when used with -maxnames or -multipart
VAR cCommentChar AS STRING // use this character to mark the start of commments in options files and recipient list files. The default is ;
VAR lSuperDebug AS LOGICAL INIT FALSE // hex/ascii dump the data between Blat and the server
VAR lSuperDebugText AS LOGICAL INIT FALSE // ascii dump the data between Blat and the server
// Other
VAR lIgnoreErrors AS LOGICAL INIT FALSE
// Methods
METHOD Send()
METHOD Command( cCommand ) VIRTUAL
METHOD Error()
METHOD ErrorString()
METHOD GetErrors()
METHOD Check()
METHOD BlatError()
METHOD BlatErrorString()
METHOD TranslateBlatError( nErr )
METHOD GetCommand()
METHOD GetVersion() INLINE ::cVersion
METHOD GetBlatVersion() INLINE ::cBlatVersion
ENDCLASS
METHOD Send() CLASS HBBlat
::Check()
IF ::nError == BLAT_SUCCESS
::nBlatError := hb_BlatSend( ::cCommand )
IF ::nBlatError <> 0
::nError := ::nBlatError
::cError := BLAT_TEXT_ERROR
ELSE
::cError := BLAT_TEXT_SUCCESS
ENDIF
::cBlatError := ::TranslateBlatError( ::nBlatError )
ENDIF
RETURN ::nError
PROCEDURE Check() CLASS HBBlat
// Not using registry, so every parameter has to be explicity set
// No control apart from existence
IF !::lChecked
::cCommand := ""
// The Basics ----------------------------------
// to
IF ::cTO == NIL .AND. ::cTOFile == NIL .AND. !::lToUndiscloseRecipients
::nError := BLAT_ERR_MISSING_TO
::cError := ::TranslateBlatError( BLAT_ERR_MISSING_TO )
aAdd( ::aErrors, { ::nError, ::cError } )
IF !::lIgnoreErrors
RETURN
ENDIF
ELSE
IF !( ::cTO == NIL )
::cCommand += " -to " + ::cTo
ENDIF
ENDIF
// tofile - optional
IF !( ::cTOFile == NIL )
IF !File( ::cTOFile )
::nError := BLAT_ERR_MISSING_TOFILE
::cError := ::TranslateBlatError( BLAT_ERR_MISSING_TOFILE ) + ": " + ::cToFile
aAdd( ::aErrors, { ::nError, ::cError } )
IF !::lIgnoreErrors
RETURN
ENDIF
ELSE
::cCommand += " -tf " + ::cToFile
ENDIF
ENDIF
// cc - optional
IF !( ::cCC == NIL )
::cCommand += " -cc " + ::cCC
ENDIF
// ccfile - optional
IF !( ::cCCFile == NIL )
IF !File( ::cCCFile )
::nError := BLAT_ERR_MISSING_CCFILE
::cError := ::TranslateBlatError( BLAT_ERR_MISSING_CCFILE ) + ": " + ::cCCFile
aAdd( ::aErrors, { ::nError, ::cError } )
IF !::lIgnoreErrors
RETURN
ENDIF
ELSE
::cCommand += " -cf " + ::cCCFile
ENDIF
ENDIF
// bcc - optional
IF !( ::cBCC == NIL )
::cCommand += " -bcc " + ::cBCC
ENDIF
// bccfile - optional
IF !( ::cBCCFile == NIL )
IF !File( ::cBCCFile )
::nError := BLAT_ERR_MISSING_BCCFILE
::cError := ::TranslateBlatError( BLAT_ERR_MISSING_BCCFILE ) + ": " + ::cBCCFile
aAdd( ::aErrors, { ::nError, ::cError } )
IF !::lIgnoreErrors
RETURN
ENDIF
ELSE
::cCommand += " -bf " + ::cBCCFile
ENDIF
ENDIF
// nMaxNames
IF !( ::nMaxNames == NIL ) .AND. ::nMaxNames > 0
::cCommand += ' -maxNames ' + LTrim( Str( ::nMaxNames ) )
ENDIF
// lToUndiscloseRecipients
IF ::lToUndiscloseRecipients
::cCommand += " -ur"
ENDIF
// cSubject - optional
IF !( ::cSubject == NIL )
::cCommand += ' -subject "' + ::cSubject + '"'
ENDIF
// lSuppressSubject
IF ::lSuppressSubject
::cCommand += " -ss"
ENDIF
// cSubjectFile - optional
IF !( ::cSubjectFile == NIL )
IF !File( ::cSubjectFile )
::nError := BLAT_ERR_MISSING_SUBJECTFILE
::cError := ::TranslateBlatError( BLAT_ERR_MISSING_SUBJECTFILE ) + ": " + ::cSubjectFile
aAdd( ::aErrors, { ::nError, ::cError } )
IF !::lIgnoreErrors
RETURN
ENDIF
ELSE
::cCommand += ' -sf ' + ::cSubjectFile
ENDIF
ENDIF
// bodyfile - optional
IF !( ::cBodyFile == NIL )
IF !File( ::cBodyFile )
::nError := BLAT_ERR_MISSING_BODYFILE
::cError := ::TranslateBlatError( BLAT_ERR_MISSING_BODYFILE ) + ": " + ::cBodyFile
aAdd( ::aErrors, { ::nError, ::cError } )
IF !::lIgnoreErrors
RETURN
ENDIF
ELSE
::cCommand += " -bodyF " + ::cBodyFile
ENDIF
ENDIF
// body
IF ::cBody == NIL .AND. ::cBodyFile == NIL
::nError := BLAT_ERR_MISSING_BODY
::cError := ::TranslateBlatError( BLAT_ERR_MISSING_BODY )
aAdd( ::aErrors, { ::nError, ::cError } )
IF !::lIgnoreErrors
RETURN
ENDIF
ELSE
IF HB_ISSTRING( ::cBody )
::cCommand += ' -body "' + ::cBody + '"'
ELSE
IF !File( ::cBodyFile )
::nError := BLAT_ERR_MISSING_BODYFILE
::cError := ::TranslateBlatError( BLAT_ERR_MISSING_BODYFILE ) + ": " + ::cBodyFile
aAdd( ::aErrors, { ::nError, ::cError } )
IF !::lIgnoreErrors
RETURN
ENDIF
ELSE
::cCommand += " -bodyF " + ::cBodyFile
ENDIF
ENDIF
ENDIF
// cSignatureFile
IF !( ::cSignatureFile == NIL )
IF !File( ::cSignatureFile )
::nError := BLAT_ERR_MISSING_SIGNATUREFILE
::cError := ::TranslateBlatError( BLAT_ERR_MISSING_SIGNATUREFILE ) + ": " + ::cSignatureFile
aAdd( ::aErrors, { ::nError, ::cError } )
IF !::lIgnoreErrors
RETURN
ENDIF
ELSE
::cCommand += ' -sig ' + ::cSignatureFile
ENDIF
ENDIF
// cTagFile
IF !( ::cTagFile == NIL )
IF !File( ::cTagFile )
::nError := BLAT_ERR_MISSING_TAGFILE
::cError := ::TranslateBlatError( BLAT_ERR_MISSING_TAGFILE ) + ": " + ::cTagFile
aAdd( ::aErrors, { ::nError, ::cError } )
IF !::lIgnoreErrors
RETURN
ENDIF
ELSE
::cCommand += ' -tag ' + ::cTagFile
ENDIF
ENDIF
// cPostScriptumFile - optional
IF !( ::cPostScriptumFile == NIL )
IF !File( ::cPostScriptumFile )
::nError := BLAT_ERR_MISSING_PSFILE
::cError := ::TranslateBlatError( BLAT_ERR_MISSING_PSFILE ) + ": " + ::cPostScriptumFile
aAdd( ::aErrors, { ::nError, ::cError } )
IF !::lIgnoreErrors
RETURN
ENDIF
ELSE
::cCommand += ' -ps ' + ::cPostScriptumFile
ENDIF
ENDIF
// Registry overrides ------------------------------
// cProfile
IF !( ::cProfile == NIL )
::cCommand += " -p " + ::cProfile
ENDIF
// lShowProfiles
IF ::lShowProfiles
::cCommand += " -profile"
ENDIF
// cServerSMTP
IF ::cServerSMTP == NIL
::nError := BLAT_ERR_MISSING_SERVERSMTP
::cError := ::TranslateBlatError( BLAT_ERR_MISSING_SERVERSMTP )
aAdd( ::aErrors, { ::nError, ::cError } )
IF !::lIgnoreErrors
RETURN
ENDIF
ELSE
::cCommand += " -server " + ::cServerSMTP
ENDIF
// cServerNNTP
IF !( ::cServerNNTP == NIL )
::cCommand += " -serverNNTP " + ::cServerNNTP
ENDIF
// cServerPOP3
IF !( ::cServerPOP3 == NIL )
::cCommand += " -serverPOP3 " + ::cServerPOP3
ENDIF
// cServerIMAP
IF !( ::cServerIMAP == NIL )
::cCommand += " -serverIMAP " + ::cServerIMAP
ENDIF
// cMailFrom
IF !( ::cMailFrom == NIL )
::cCommand += " -mailfrom " + ::cMailFrom
ENDIF
// cFrom
IF ::cFrom == NIL
::nError := BLAT_ERR_MISSING_FROM
::cError := ::TranslateBlatError( BLAT_ERR_MISSING_FROM )
aAdd( ::aErrors, { ::nError, ::cError } )
IF !::lIgnoreErrors
RETURN
ENDIF
ELSE
::cCommand += " -f " + ::cFrom
ENDIF
// cReplyTo
IF !( ::cReplyTo == NIL )
::cCommand += ' -replyto ' + ::cReplyTo
ENDIF
// cReplyTo
IF !( ::cReplyTo == NIL )
::cCommand += ' -replyto ' + ::cReplyTo
ENDIF
// cReturnPath
IF !( ::cReturnPath == NIL )
::cCommand += ' -returnpath ' + ::cReturnPath
ENDIF
// cSender
IF !( ::cSender == NIL )
::cCommand += ' -sender ' + ::cSender
ENDIF
// nPortSMTP
IF !( ::nPortSMTP == NIL ) .AND. ::nPortSMTP > 0
::cCommand += ' -portSMTP ' + LTrim( Str( ::nPortSMTP ) )
ENDIF
// nPortNNTP
IF !( ::nPortNNTP == NIL ) .AND. ::nPortNNTP > 0
::cCommand += ' -portNNTP ' + LTrim( Str( ::nPortNNTP ) )
ENDIF
// nPortPOP3
IF !( ::nPortPOP3 == NIL ) .AND. ::nPortPOP3 > 0
::cCommand += ' -portPOP3 ' + LTrim( Str( ::nPortPOP3 ) )
ENDIF
// nPortIMAP
IF !( ::nPortIMAP == NIL ) .AND. ::nPortIMAP > 0
::cCommand += ' -portIMAP ' + LTrim( Str( ::nPortIMAP ) )
ENDIF
// cUserAUTH
IF !( ::cUserAUTH == NIL )
::cCommand += ' -u ' + ::cUserAUTH
ENDIF
// cPasswordAUTH
IF !( ::cPasswordAUTH == NIL )
::cCommand += ' -pw ' + ::cPasswordAUTH
ENDIF
// cUserPOP3
IF !( ::cUserPOP3 == NIL )
::cCommand += ' -pu ' + ::cUserPOP3
ENDIF
// cPasswordPOP3
IF !( ::cPasswordPOP3 == NIL )
::cCommand += ' -ppw ' + ::cPasswordPOP3
ENDIF
// cUserIMAP
IF !( ::cUserIMAP == NIL )
::cCommand += ' -iu ' + ::cUserIMAP
ENDIF
// cPasswordIMAP
IF !( ::cPasswordIMAP == NIL )
::cCommand += ' -ipw ' + ::cPasswordIMAP
ENDIF
// Miscellaneous RFC header switches ----------------------
// cOrganization
IF !( ::cOrganization == NIL )
::cCommand += ' -organization ' + ::cOrganization
ENDIF
// cUserAgent
IF !( ::cUserAgent == NIL )
::cCommand += ' -ua ' + ::cUserAgent
ENDIF
// cXHeader
IF !( ::cXHeader == NIL )
::cCommand += ' -x ' + ::cXHeader
ENDIF
// NoBlatHeader
IF ::lNoBlatXHeader
::cCommand += " -noh2"
ENDIF
// No Blat Home Page
// Add only if ::lNoBlatXHeader is FALSE
IF !::lNoBlatXHeader
IF ::lNoBlatHomePage
::cCommand += " -noh"
ENDIF
ENDIF
// lRequestDisposition
IF ::lRequestDisposition
::cCommand += " -d"
ENDIF
// lRequestReturnReceipt
IF ::lRequestReturnReceipt
::cCommand += " -r"
ENDIF
// cCharSet
IF !( ::cCharSet == NIL )
::cCommand += ' -charset ' + ::cCharSet
ENDIF
// cUserHeader1
IF !( ::cUserHeader1 == NIL )
::cCommand += ' -a1 ' + ::cUserHeader1
ENDIF
// cUserHeader2
IF !( ::cUserHeader2 == NIL )
::cCommand += ' -a2 ' + ::cUserHeader2
ENDIF
// cDSN
IF HB_ISSTRING( ::cDSN )
IF ( "n" $ Lower( ::cDSN ) .OR. "s" $ Lower( ::cDSN ) .OR. ;
"f" $ Lower( ::cDSN ) .OR. "d" $ Lower( ::cDSN ) )
::cCommand += " -dsn " + ::cDSN
ELSE
::nError := BLAT_ERR_WRONG_DSN
::cError := ::TranslateBlatError( BLAT_ERR_WRONG_DSN ) + ": " + ::cDSN
aAdd( ::aErrors, { ::nError, ::cError } )
IF !::lIgnoreErrors
RETURN
ENDIF
ENDIF
ENDIF
// lEHBase64
IF ::lEHBase64
::cCommand += " -hdrencb"
ENDIF
// lEHQuoted
IF ::lEHQuoted
::cCommand += " -hdrencq"
ENDIF
// lHighPriority / lLowPriority - if both == FALSE, priority is standard
IF ::lHighPriority
::cCommand += " -priority 1"
ELSEIF ::lLowPriority
::cCommand += " -priority 0"
ENDIF
// nSensitivity
IF !( ::nSensitivity == NIL ) .AND. aScan( { 0, 1, 2 }, ::nSensitivity ) > 0
::cCommand += " -sensitivity " + LTrim( Str( ::nSensitivity ) )
ENDIF
// Attachment and encoding options --------
// Attach Binary Files
IF !Empty( ::aAttachBinFiles )
IF ::cAttachBinFiles == NIL
::cAttachBinFiles := ""
ELSE
::cAttachBinFiles += ","
ENDIF
::cAttachBinFiles += ArrayToString( ::aAttachBinFiles )
ENDIF
IF HB_ISSTRING( ::cAttachBinFiles )
::cCommand += " -attach " + ::cAttachBinFiles
ENDIF
// Attach Text Files
IF !Empty( ::aAttachTextFiles )
IF ::cAttachTextFiles == NIL
::cAttachTextFiles := ""
ELSE
::cAttachTextFiles += ","
ENDIF
::cAttachTextFiles += ArrayToString( ::aAttachTextFiles )
ENDIF
IF HB_ISSTRING( ::cAttachTextFiles )
::cCommand += " -attacht " + ::cAttachTextFiles
ENDIF
// Attach INLINE Files
IF !Empty( ::aAttachInlineFiles )
IF ::cAttachInlineFiles == NIL
::cAttachInlineFiles := ""
ELSE
::cAttachInlineFiles += ","
ENDIF
::cAttachInlineFiles += ArrayToString( ::aAttachInlineFiles )
ENDIF
IF HB_ISSTRING( ::cAttachInlineFiles )
::cCommand += " -attachi " + ::cAttachInlineFiles
ENDIF
// Attach Html Embedded Files
IF !Empty( ::aHtmlEmbeddedFiles )
IF ::cHtmlEmbeddedFiles == NIL
::cHtmlEmbeddedFiles := ""
ELSE
::cHtmlEmbeddedFiles += ","
ENDIF
::cHtmlEmbeddedFiles += ArrayToString( ::aHtmlEmbeddedFiles )
ENDIF
IF HB_ISSTRING( ::cHtmlEmbeddedFiles )
::cCommand += " -embed " + ::cHtmlEmbeddedFiles
ENDIF
// cAttachListBinFile - optional
IF !( ::cAttachListBinFile == NIL )
IF !File( ::cAttachListBinFile )
::nError := BLAT_ERR_MISSING_ATTACHLISTBINFILE
::cError := ::TranslateBlatError( BLAT_ERR_MISSING_ATTACHLISTBINFILE ) + ": " + ::cAttachListBinFile
aAdd( ::aErrors, { ::nError, ::cError } )
IF !::lIgnoreErrors
RETURN
ENDIF
ELSE
::cCommand += " -af " + ::cAttachListBinFile
ENDIF
ENDIF
// cAttachListTextFile - optional
IF !( ::cAttachListTextFile == NIL )
IF !File( ::cAttachListTextFile )
::nError := BLAT_ERR_MISSING_ATTACHLISTTEXTFILE
::cError := ::TranslateBlatError( BLAT_ERR_MISSING_ATTACHLISTTEXTFILE ) + ": " + ::cAttachListTextFile
aAdd( ::aErrors, { ::nError, ::cError } )
IF !::lIgnoreErrors
RETURN
ENDIF
ELSE
::cCommand += " -atf " + ::cAttachListTextFile
ENDIF
ENDIF
// cAttachListEmbeddedFile - optional
IF !( ::cAttachListEmbeddedFile == NIL )
IF !File( ::cAttachListEmbeddedFile )
::nError := BLAT_ERR_MISSING_ATTACHLISTEMBEDDEDFILE
::cError := ::TranslateBlatError( BLAT_ERR_MISSING_ATTACHLISTEMBEDDEDFILE ) + ": " + ::cAttachListEmbeddedFile
aAdd( ::aErrors, { ::nError, ::cError } )
IF !::lIgnoreErrors
RETURN
ENDIF
ELSE
::cCommand += " -aef " + ::cAttachListEmbeddedFile
ENDIF
ENDIF
// lSendBinaryBase64 - optional
IF ::lSendBinaryBase64
::cCommand += " -base64"
ENDIF
// lSendBinaryUUEncoded - optional
IF ::lSendBinaryUUEncoded
::cCommand += " -uuencode"
ENDIF
// lSendEnrichedText - optional
IF ::lSendEnrichedText
::cCommand += " -enriched"
ENDIF
// lUnicode - optional
IF ::lUnicode
::cCommand += " -unicode"
ENDIF
// lHtml - optional
IF ::lHtml
::cCommand += " -html"
ENDIF
// cAlternateText - optional
IF !( ::cAlternateText == NIL )
::cCommand += ' -alttext ' + ::cAlternateText
ENDIF
// cAlternateTextFile - optional
IF !( ::cAlternateTextFile == NIL )
IF !File( ::cAlternateTextFile )
::nError := BLAT_ERR_MISSING_ALTERNATETEXTFILE
::cError := ::TranslateBlatError( BLAT_ERR_MISSING_ALTERNATETEXTFILE ) + ": " + ::cAlternateTextFile
aAdd( ::aErrors, { ::nError, ::cError } )
IF !::lIgnoreErrors
RETURN
ENDIF
ELSE
::cCommand += " -alttextf " + ::cAlternateTextFile
ENDIF
ENDIF
// lMime - optional
IF ::lMime
::cCommand += " -mime"
ENDIF
// lAskFor8BitMime - optional
IF ::lAskFor8BitMime
::cCommand += " -8bitmime"
ENDIF
// nMultipartSize - optional
IF !( ::nMultipartSize == NIL ) .AND. ::nMultipartSize > 0
::cCommand += " -multipart " + LTrim( Str( ::nMultipartSize ) )
ENDIF
// lNoMultipartMessage - optional
IF ::lNoMultipartMessage
::cCommand += " -nomps"
ENDIF
// NNTP specific options ------------------
// cGroups - optional
IF HB_ISSTRING( ::cGroups )
::cCommand += " -groups " + ::cGroups
ENDIF
// Other options --------------------------
// lXtndXmit
IF ::lXtndXmit
::cCommand += " -xtndxmit"
ENDIF
/* NOT IMPLEMENTED
// lHelp
IF ::lHelp
::cCommand += " -h"
ENDIF
*/
// lQuiet
IF ::lQuiet
::cCommand += " -q"
ENDIF
// lDebug
IF ::lDebug
::cCommand += " -debug"
ENDIF
// cLogFile
IF !( ::cLogFile == NIL )
::cCommand += ' -log ' + ::cLogFile
ENDIF
// lLogTimestamp
IF ::lLogTimestamp
::cCommand += " -timestamp"
ENDIF
// lLogOverwrite
IF ::lLogOverwrite
::cCommand += " -overwritelog"
ENDIF
// nTimeout
IF !( ::nTimeout == NIL ) .AND. ::nTimeout > 0
::cCommand += " -ti " + LTrim( Str( ::nTimeout ) )
ENDIF
// nTry
IF !( ::nTry == NIL )
IF ::nTry == BLAT_TRY_INFINITE_KEY
::cCommand += " -try " + BLAT_TRY_INFINITE_VALUE
ELSEIF ::nTry >= 0
::cCommand += " -try " + LTrim( Str( ::nTry ) )
ENDIF
ENDIF
// lBinary
IF ::lBinary
::cCommand += " -binary"
ENDIF
// cHostname
IF !( ::cHostname == NIL )
::cCommand += ' -hostname ' + ::cHostname
ENDIF
// lRaw
IF ::lRaw
::cCommand += " -raw"
ENDIF
// nDelay
IF !( ::nDelay == NIL ) .AND. ::nDelay > 0
::cCommand += " -delay " + LTrim( Str( ::nDelay ) )
ENDIF
// cCommentChar
IF !( ::cCommentChar == NIL )
::cCommand += ' -comment ' + ::cCommentChar
ENDIF
// lSuperDebug
IF ::lSuperDebug
::cCommand += " -superdebug"
ENDIF
// lSuperDebugT
IF ::lSuperDebugText
::cCommand += " -superdebugT"
ENDIF
//--------------------------------------------------
// Check done
::lChecked := TRUE
ENDIF
RETURN
METHOD GetCommand() CLASS HBBlat
IF !::lChecked
::Check()
ENDIF
RETURN ::cCommand
METHOD Error() CLASS HBBlat
RETURN ::nError
METHOD ErrorString() CLASS HBBlat
RETURN ::cError
METHOD GetErrors() CLASS HBBlat
RETURN ::aErrors
METHOD BlatError() CLASS HBBlat
RETURN ::nBlatError
METHOD BlatErrorString() CLASS HBBlat
RETURN ::cBlatError
METHOD TranslateBlatError( nErr ) CLASS HBBlat
LOCAL cError, nPos
// TODO: add function that returns language error array
LOCAL aErrors := { ;
{ BLAT_ERR_UNKNONW , BLAT_TEXT_ERR_UNKNOWN } ,;
{ BLAT_SUCCESS , BLAT_TEXT_SUCCESS } ,;
{ BLAT_ERR_MESSAGE_NOT_ACCEPTED , BLAT_TEXT_ERR_MESSAGE_NOT_ACCEPTED } ,;
{ BLAT_ERR_MISSING_FROM , BLAT_TEXT_ERR_MISSING_FROM } ,;
{ BLAT_ERR_MISSING_TO , BLAT_TEXT_ERR_MISSING_TO } ,;
{ BLAT_ERR_MISSING_TOFILE , BLAT_TEXT_ERR_MISSING_TOFILE } ,;
{ BLAT_ERR_MISSING_BODY , BLAT_TEXT_ERR_MISSING_BODY } ,;
{ BLAT_ERR_MISSING_BODYFILE , BLAT_TEXT_ERR_MISSING_BODYFILE } ,;
{ BLAT_ERR_MISSING_SERVERSMTP , BLAT_TEXT_ERR_MISSING_SERVERSMTP } ,;
{ BLAT_ERR_MISSING_SUBJECTFILE , BLAT_TEXT_ERR_MISSING_SUBJECTFILE } ,;
{ BLAT_ERR_MISSING_CCFILE , BLAT_TEXT_ERR_MISSING_CCFILE } ,;
{ BLAT_ERR_MISSING_BCCFILE , BLAT_TEXT_ERR_MISSING_BCCFILE } ,;
{ BLAT_ERR_MISSING_PSFILE , BLAT_TEXT_ERR_MISSING_PSFILE } ,;
{ BLAT_ERR_MISSING_ATTACHLISTBINFILE , BLAT_TEXT_ERR_MISSING_ATTACHLISTBINFILE } ,;
{ BLAT_ERR_MISSING_ATTACHLISTTEXTFILE , BLAT_TEXT_ERR_MISSING_ATTACHLISTTEXTFILE } ,;
{ BLAT_ERR_MISSING_ATTACHLISTEMBEDDEDFILE , BLAT_TEXT_ERR_MISSING_ATTACHLISTEMBEDDEDFILE } ,;
{ BLAT_ERR_MISSING_ALTERNATETEXTFILE , BLAT_TEXT_ERR_MISSING_ALTERNATETEXTFILE } ,;
{ BLAT_ERR_MISSING_SIGNATUREFILE , BLAT_TEXT_ERR_MISSING_SIGNATUREFILE } ,;
{ BLAT_ERR_MISSING_TAGFILE , BLAT_TEXT_ERR_MISSING_TAGFILE } ,;
{ BLAT_ERR_WRONG_DSN , BLAT_TEXT_ERR_WRONG_DSN } ,;
{ BLAT_ERR_LOGICAL_EXPECTED , BLAT_TEXT_ERR_LOGICAL_EXPECTED } ,;
{ BLAT_ERR_STRING_EXPECTED , BLAT_TEXT_ERR_STRING_EXPECTED } ;
}
nPos := aScan( aErrors, {|e| e[1] == nErr }, 2 )
IF nPos == 0
cError := aErrors[ 1, 2 ] // BLAT_TEXT_ERR_UNKNOWN has to be first error
ELSE
cError := aErrors[ nPos, 2 ]
ENDIF
/*
SWITCH nErr
CASE BLAT_SUCCESS
cError := BLAT_TEXT_SUCCESS
EXIT
CASE BLAT_ERR_MESSAGE_NOT_ACCEPTED
cError := BLAT_TEXT_ERR_MESSAGE_NOT_ACCEPTED
EXIT
CASE
OTHERWISE
cError := BLAT_TEXT_ERR_UNKNOWN
END
*/
RETURN cError
STATIC FUNCTION ArrayToString( aArray )
LOCAL cString := ""
LOCAL nLen := Len( aArray )
LOCAL cElem
FOR EACH cElem IN aArray
cString += cElem + IIF( cElem:__enumIndex() < nLen, ",", "" )
NEXT
RETURN cString

View File

@@ -0,0 +1,95 @@
/*
* $Id$
*/
/*
* Harbour Project source code:
* BLAT wrapper library interface code.
*
* Copyright 2007-2009 Francesco Saverio Giudice <info@fsgiudice.com>
* 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, or (at your option)
* any later version.
*
* 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 software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
*
* As a special exception, the Harbour Project gives permission for
* additional uses of the text contained in its release of Harbour.
*
* The exception is that, if you link the Harbour libraries 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 Harbour library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released by the Harbour
* Project under the name Harbour. If you copy code from other
* Harbour Project or Free Software Foundation releases into a copy of
* Harbour, as the General Public License permits, the exception does
* not apply to the code that you add in this way. To avoid misleading
* anyone as to the status of such modified files, you must delete
* this exception notice from them.
*
* If you write modifications of your own for Harbour, it is your choice
* whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*
*/
/* NOTE: we need this to prevent base types redefinition */
#define _CLIPDEFS_H
#define HB_OS_WIN_32_USED
#include "hbapi.h"
#include "hbapiitm.h"
#include "hbstack.h"
#include "hbapierr.h"
#include "hbapifs.h"
/* ---------------------------------------------------------------------------*/
extern int cSend( char *szCmd );
/* ---------------------------------------------------------------------------*/
HB_FUNC( HB_BLATSEND ) // void BlatSend( char *szCmd )
{
if ( hb_pcount() == 1 &&
hb_parinfo( 1 ) & HB_IT_STRING
)
{
char *szCmd;
int iRet;
/* Retrieve command */
szCmd = hb_parcx( 1 );
/* Send command to blat */
iRet = cSend( szCmd );
/* Return result */
hb_retni( iRet );
}
else
// Parameter error
hb_errRT_BASE_SubstR( EG_ARG, 0, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
}
/* ---------------------------------------------------------------------------*/

View File

@@ -0,0 +1,17 @@
#
# $Id$
#
LIBNAME = $(LIBPREF)hbblat
LIB_PATH = $(LIB_DIR)\$(LIBNAME)$(LIBEXT)
PRG_HEADERS = \
blat.ch \
LIB_OBJS = \
$(OBJ_DIR)\blatwrp$(OBJEXT) \
$(OBJ_DIR)\blatcls$(OBJEXT) \
all: \
$(LIB_PATH) \

View File

@@ -0,0 +1,200 @@
/*
* $Id$
*/
/*
* Harbour Project source code:
* BLAT wrapper library interface code.
*
* Copyright 2007-2009 Francesco Saverio Giudice <info@fsgiudice.com>
* 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, or (at your option)
* any later version.
*
* 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 software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
*
* As a special exception, the Harbour Project gives permission for
* additional uses of the text contained in its release of Harbour.
*
* The exception is that, if you link the Harbour libraries 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 Harbour library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released by the Harbour
* Project under the name Harbour. If you copy code from other
* Harbour Project or Free Software Foundation releases into a copy of
* Harbour, as the General Public License permits, the exception does
* not apply to the code that you add in this way. To avoid misleading
* anyone as to the status of such modified files, you must delete
* this exception notice from them.
*
* If you write modifications of your own for Harbour, it is your choice
* whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*
*/
/*
Code Description
2 The server actively denied our connection.
The mail server doesn't like the sender name.
1 Unable to open SMTP socket
SMTP get line did not return 220
command unable to write to socket
Server does not like To: address
Mail server error accepting message data.
0 OK
1 File name (message text) not given
1 Bad argument given
2 File (message text) does not exist
3 Error reading the file (message text) or attached file
4 File (message text) not of type FILE_TYPE_DISK
5 Error Reading File (message text)
12 -server or -f options not specified and not found in registry
13 Error opening temporary file in temp directory
Gensock Error Code Descriptions
case 4001: printf("Error: Malloc failed (possibly out of memory)."); break;
case 4002: printf("Error: Error sending data."); break;
case 4003: printf("Error: Error initializing gensock.dll."); break;
case 4004: printf("Error: Version not supported."); break;
case 4005: printf("Error: The winsock version specified by gensock is not supported by this winsock.dll."); break;
case 4006: printf("Error: Network not ready."); break;
case 4007: printf("Error: Can't resolve (mailserver) hostname."); break;
case 4008: printf("Error: Can't create a socket (too many simultaneous links?)"); break;
case 4009: printf("Error: Error reading socket."); break;
case 4010: printf("Error: Not a socket."); break;
case 4011: printf("Error: Busy."); break;
case 4012: printf("Error: Error closing socket."); break;
case 4013: printf("Error: Wait a bit (possible timeout)."); break;
case 4014: printf("Error: Can't resolve service."); break;
case 4015: printf("Error: Can't connect to mailserver (timed out if winsock.dll error 10060)"); break;
case 4016: printf("Error: Connection to mailserver was dropped."); break;
case 4017: printf("Error: Mail server refused connection."); break;
default: printf("error %d in function '%s'", retval, function);
*/
#ifndef _HBBLAT_CH
#define _HBBLAT_CH
/*
Numeric Errors
*/
#define BLAT_ERR_UNKNONW -1
#define BLAT_SUCCESS 0
#define BLAT_ERR_MESSAGE_NOT_ACCEPTED 1
#define BLAT_ERR_MISSING_FROM 1000
#define BLAT_ERR_MISSING_TO 1001
#define BLAT_ERR_MISSING_TOFILE 1002
#define BLAT_ERR_MISSING_BODY 1003
#define BLAT_ERR_MISSING_BODYFILE 1004
#define BLAT_ERR_MISSING_SERVERSMTP 1005
#define BLAT_ERR_MISSING_SUBJECTFILE 1006
#define BLAT_ERR_MISSING_CCFILE 1007
#define BLAT_ERR_MISSING_BCCFILE 1008
#define BLAT_ERR_MISSING_PSFILE 1009
#define BLAT_ERR_MISSING_ATTACHLISTBINFILE 1010
#define BLAT_ERR_MISSING_ATTACHLISTTEXTFILE 1011
#define BLAT_ERR_MISSING_ATTACHLISTEMBEDDEDFILE 1012
#define BLAT_ERR_MISSING_ALTERNATETEXTFILE 1013
#define BLAT_ERR_MISSING_SIGNATUREFILE 1014
#define BLAT_ERR_MISSING_TAGFILE 1015
#define BLAT_ERR_WRONG_DSN 1016
#define BLAT_ERR_LOGICAL_EXPECTED 2000
#define BLAT_ERR_STRING_EXPECTED 2001
/*
Text Errors
*/
#define BLAT_TEXT_ERROR "Blat Error"
#define BLAT_TEXT_ERR_UNKNOWN "Unknown error"
#define BLAT_TEXT_SUCCESS "Ok"
#define BLAT_TEXT_ERR_MESSAGE_NOT_ACCEPTED "Message not accepted by server"
#define BLAT_TEXT_ERR_MISSING_FROM "Missing From: parameter"
#define BLAT_TEXT_ERR_MISSING_TO "Missing To: parameter"
#define BLAT_TEXT_ERR_MISSING_TOFILE "ToFile file not found"
#define BLAT_TEXT_ERR_MISSING_BODY "Missing message body"
#define BLAT_TEXT_ERR_MISSING_BODYFILE "Message body file not found"
#define BLAT_TEXT_ERR_MISSING_SERVERSMTP "Missing SMTP server"
#define BLAT_TEXT_ERR_MISSING_SUBJECTFILE "Subject file not found"
#define BLAT_TEXT_ERR_MISSING_CCFILE "CC file not found"
#define BLAT_TEXT_ERR_MISSING_BCCFILE "BCC file not found"
#define BLAT_TEXT_ERR_MISSING_PSFILE "PS file not found"
#define BLAT_TEXT_ERR_MISSING_ATTACHLISTBINFILE "Attach List Bin file not found"
#define BLAT_TEXT_ERR_MISSING_ATTACHLISTTEXTFILE "Attach List Text file not found"
#define BLAT_TEXT_ERR_MISSING_ATTACHLISTEMBEDDEDFILE "Attach List Embedded file not found"
#define BLAT_TEXT_ERR_MISSING_ALTERNATETEXTFILE "Alternate Text file not found"
#define BLAT_TEXT_ERR_MISSING_SIGNATUREFILE "Signature file not found"
#define BLAT_TEXT_ERR_MISSING_TAGFILE "Tag file not found"
#define BLAT_TEXT_ERR_WRONG_DSN "Wrong DSN values (admitted: n, s, f, d)"
#define BLAT_TEXT_ERR_LOGICAL_EXPECTED "Logical var expected"
#define BLAT_TEXT_ERR_STRING_EXPECTED "String var expected"
/*
BLAT ERRORS
*/
#define BLAT_ERR_CANT_MALLOC 4001
#define BLAT_ERR_SENDING_DATA 4002
#define BLAT_ERR_INITIALIZING 4003
#define BLAT_ERR_VER_NOT_SUPPORTED 4004
#define BLAT_ERR_EINVAL 4005
#define BLAT_ERR_SYS_NOT_READY 4006
#define BLAT_ERR_CANT_RESOLVE_HOSTNAME 4007
#define BLAT_ERR_CANT_GET_SOCKET 4008
#define BLAT_ERR_READING_SOCKET 4009
#define BLAT_ERR_NOT_A_SOCKET 4010
#define BLAT_ERR_BUSY 4011
#define BLAT_ERR_CLOSING 4012
#define BLAT_WAIT_A_BIT 4013
#define BLAT_ERR_CANT_RESOLVE_SERVICE 4014
#define BLAT_ERR_CANT_CONNECT 4015
#define BLAT_ERR_NOT_CONNECTED 4016
#define BLAT_ERR_CONNECTION_REFUSED 4017
#define BLAT_ERR_NO_ERROR_CODE -5000 /* this is returned by misbehaving stacks that
* fail, but don't set an error code
*/
#define BLAT_TRY_INFINITE_KEY -1
#define BLAT_TRY_INFINITE_VALUE 'INFINITE'
#endif // _HBBLAT_CH

View File

@@ -0,0 +1,66 @@
@echo off
rem
rem $Id$
rem
if not "%HB_DIR_BLAT%" == "" goto DIR_OK
echo ---------------------------------------------------------------
echo IMPORTANT: You'll need blat dll from here:
echo http://blat.sourceforge.net/ (Download section)
echo and this envvar to be set to successfully build this library:
echo set HB_DIR_BLAT=C:\Blat
echo ---------------------------------------------------------------
goto POST_EXIT
:DIR_OK
set CFLAGS=
set _HB_DLL_NAME=blat
set _HB_DLL_DIR=%HB_DIR_BLAT%\full
rem ---------------------------------------------------------------
call ..\mtpl_b32.bat %1 %2 %3 %4 %5 %6 %7 %8 %9
rem ---------------------------------------------------------------
if "%HB_DIR_BLAT%" == "" goto POST_EXIT
set _HB_INSTALL_PREFIX=%HB_INSTALL_PREFIX%
if "%_HB_INSTALL_PREFIX%" == "" set _HB_INSTALL_PREFIX=..\..
set _HB_LIB_INSTALL=%HB_LIB_INSTALL%
if "%_HB_LIB_INSTALL%" == "" set _HB_LIB_INSTALL=%_HB_INSTALL_PREFIX%\lib
if "%1" == "clean" goto POST_CLEAN
if "%1" == "Clean" goto POST_CLEAN
if "%1" == "CLEAN" goto POST_CLEAN
if "%1" == "install" goto POST_INSTALL
if "%1" == "Install" goto POST_INSTALL
if "%1" == "INSTALL" goto POST_INSTALL
:POST_BUILD
implib -a ..\..\lib\%_HB_CC_NAME%\%_HB_DLL_NAME%.lib "%_HB_DLL_DIR%\%_HB_DLL_NAME%.dll" >> %_HB_MAKELOG%
goto POST_EXIT
:POST_CLEAN
if exist ..\..\lib\%_HB_CC_NAME%\%_HB_DLL_NAME%.lib del ..\..\lib\%_HB_CC_NAME%\%_HB_DLL_NAME%.lib > nul
if exist ..\..\lib\%_HB_CC_NAME%\%_HB_DLL_NAME%.exp del ..\..\lib\%_HB_CC_NAME%\%_HB_DLL_NAME%.exp > nul
if exist %_HB_LIB_INSTALL%\%_HB_DLL_NAME%.lib del %_HB_LIB_INSTALL%\%_HB_DLL_NAME%.lib > nul
goto POST_EXIT
:POST_INSTALL
if exist %_HB_LIB_INSTALL%\%_HB_DLL_NAME%.lib del %_HB_LIB_INSTALL%\%_HB_DLL_NAME%.lib
if exist ..\..\lib\%_HB_CC_NAME%\%_HB_DLL_NAME%.lib copy ..\..\lib\%_HB_CC_NAME%\%_HB_DLL_NAME%.lib %_HB_LIB_INSTALL%
goto POST_EXIT
:POST_EXIT
set CFLAGS=
set _HB_DLL_NAME=
set _HB_DLL_DIR=
set _HB_INSTALL_PREFIX=
set _HB_LIB_INSTALL=

View File

@@ -0,0 +1,65 @@
@echo off
rem
rem $Id$
rem
if not "%HB_DIR_BLAT%" == "" goto DIR_OK
echo ---------------------------------------------------------------
echo IMPORTANT: You'll need blat dll from here:
echo http://blat.sourceforge.net/ (Download section)
echo and this envvar to be set to successfully build this library:
echo set HB_DIR_BLAT=C:\Blat
echo ---------------------------------------------------------------
goto POST_EXIT
:DIR_OK
set CFLAGS=
set _HB_DLL_NAME=blat
set _HB_DLL_DIR=%HB_DIR_BLAT%\full
rem ---------------------------------------------------------------
call ..\mtpl_vc.bat %1 %2 %3 %4 %5 %6 %7 %8 %9
rem ---------------------------------------------------------------
set _HB_INSTALL_PREFIX=%HB_INSTALL_PREFIX%
if "%_HB_INSTALL_PREFIX%" == "" set _HB_INSTALL_PREFIX=..\..
set _HB_LIB_INSTALL=%HB_LIB_INSTALL%
if "%_HB_LIB_INSTALL%" == "" set _HB_LIB_INSTALL=%_HB_INSTALL_PREFIX%\lib
if "%1" == "clean" goto POST_CLEAN
if "%1" == "Clean" goto POST_CLEAN
if "%1" == "CLEAN" goto POST_CLEAN
if "%1" == "install" goto POST_INSTALL
if "%1" == "Install" goto POST_INSTALL
if "%1" == "INSTALL" goto POST_INSTALL
:POST_BUILD
rem Use supplied .lib file.
if not exist ..\..\lib\%_HB_CC_NAME%\%_HB_DLL_NAME%.lib copy "%HB_DIR_BLAT%\full\%_HB_DLL_NAME%.lib" ..\..\lib\%_HB_CC_NAME%\%_HB_DLL_NAME%.lib > nul
goto POST_EXIT
:POST_CLEAN
if exist ..\..\lib\%_HB_CC_NAME%\%HB_DLL_NAME%.lib del ..\..\lib\%_HB_CC_NAME%\%HB_DLL_NAME%.lib > nul
if exist ..\..\lib\%_HB_CC_NAME%\%HB_DLL_NAME%.exp del ..\..\lib\%_HB_CC_NAME%\%HB_DLL_NAME%.exp > nul
if exist %_HB_LIB_INSTALL%\%HB_DLL_NAME%.lib del %_HB_LIB_INSTALL%\%HB_DLL_NAME%.lib > nul
goto POST_EXIT
:POST_INSTALL
if exist %_HB_LIB_INSTALL%\%HB_DLL_NAME%.lib del %_HB_LIB_INSTALL%\%HB_DLL_NAME%.lib
if exist ..\..\lib\%_HB_CC_NAME%\%HB_DLL_NAME%.lib copy ..\..\lib\%_HB_CC_NAME%\%HB_DLL_NAME%.lib %_HB_LIB_INSTALL%
goto POST_EXIT
:POST_EXIT
set CFLAGS=
set _HB_DLL_NAME=
set _HB_DLL_DIR=
set _HB_INSTALL_PREFIX=
set _HB_LIB_INSTALL=

View File

@@ -0,0 +1,183 @@
Blat v2.6.2 w/GSS encryption (build : Feb 25 2007 12:06:19)
Win32 console utility to send mail via SMTP or post to usenet via NNTP
by P.Mendes,M.Neal,G.Vollant,T.Charron,T.Musson,H.Pesonen,A.Donchey,C.Hyde
http://www.blat.net
syntax:
Blat <filename> -to <recipient> [optional switches (see below)]
Blat -SaveSettings -f <sender email addy> -server <server addr>
[-port <port>] [-try <try>] [-profile <profile>]
[-u <login id>] [-pwd <password>]
or
Blat -install <server addr> <sender's addr> [<try>[<port>[<profile>]]] [-q]
Blat -profile [-delete | "<default>"] [profile1] [profileN] [-q]
Blat -h
-------------------------------- Installation ---------------------------------
-SaveSettings : store common settings to the Windows Registry. Takes the
same parameters as -install, and is only for SMTP settings.
-install[SMTP|NNTP|POP3|IMAP] <server addr> <sender email addr> [<try n times>
[<port> [<profile> [<username> [<password>]]]]]
: set server, sender, number of tries and port for profile
(<try n times> and <port> may be replaced by '-')
port defaults are SMTP=25, NNTP=119, POP3=110, IMAP=143
default profile can be specified with a '-'
username and/or password may be stored to the registry
order of options is specific
use -installNNTP for storing NNTP information
use -installPOP3 for storing POP3 information
(sender and try are ignored, use '-' in place of these)
use -installIMAP for storing IMAP information
(sender and try are ignored, use '-' in place of these)
--------------------------------- The Basics ----------------------------------
<filename> : file with the message body to be sent
if your message body is on the command line, use a hyphen (-)
as your first argument, and -body followed by your message
if your message will come from the console/keyboard, use the
hyphen as your first argument, but do not use -body option.
-of <file> : text file containing more options (also -optionfile)
-to <recipient> : recipient list (also -t) (comma separated)
-tf <file> : recipient list filename
-cc <recipient> : carbon copy recipient list (also -c) (comma separated)
-cf <file> : cc recipient list filename
-bcc <recipient>: blind carbon copy recipient list (also -b)
(comma separated)
-bf <file> : bcc recipient list filename
-maxNames <x> : send to groups of <x> number of recipients
-ur : set To: header to Undisclosed Recipients if not using the
-to and -cc options
-subject <subj> : subject line, surround with quotes to include spaces(also -s)
-ss : suppress subject line if not defined
-sf <file> : file containing subject line
-bodyF <file> : file containing the message body
-body <text> : message body, surround with quotes (") to include spaces
-sig <file> : text file containing your email signature
-tag <file> : text file containing taglines, to be randomly chosen
-ps <file> : final message text, possibly for unsubscribe instructions
----------------------------- Registry overrides ------------------------------
-p <profile> : send with server, user, and port defined in <profile>
: use username and password if defined in <profile>
-profile : list all profiles in the Registry
-server <addr> : specify SMTP server to be used (optionally, addr:port)
-serverSMTP <addr>
: same as -server
-serverNNTP <addr>
: specify NNTP server to be used (optionally, addr:port)
-serverPOP3 <addr>
: specify POP3 server to be used (optionally, addr:port)
when POP3 access is required before sending email
-serverIMAP <addr>
: specify IMAP server to be used (optionally, addr:port)
when IMAP access is required before sending email
-f <sender> : override the default sender address (must be known to server)
-i <addr> : a 'From:' address, not necessarily known to the server
-port <port> : port to be used on the SMTP server, defaults to SMTP (25)
-portSMTP <port>: same as -port
-portNNTP <port>: port to be used on the NNTP server, defaults to NNTP (119)
-portPOP3 <port>: port to be used on the POP3 server, defaults to POP3 (110)
-portIMAP <port>: port to be used on the IMAP server, defaults to IMAP (110)
-u <username> : username for AUTH LOGIN (use with -pw)
-pw <password> : password for AUTH LOGIN (use with -u)
-pu <username> : username for POP3 LOGIN (use with -ppw)
-ppw <password> : password for POP3 LOGIN (use with -pu)
-iu <username> : username for IMAP LOGIN (use with -ppw)
-ipw <password> : password for IMAP LOGIN (use with -pu)
---------------------- Miscellaneous RFC header switches ----------------------
-organization <organization>
: Organization field (also -o and -org)
-ua : include User-Agent header line instead of X-Mailer
-x <X-Header: detail>
: custom 'X-' header. eg: -x "X-INFO: Blat is Great!"
-noh : prevent X-Mailer/User-Agent header from showing Blat homepage
-noh2 : prevent X-Mailer header entirely
-d : request disposition notification
-r : request return receipt
-charset <cs> : user defined charset. The default is ISO-8859-1
-a1 <header> : add custom header line at the end of the regular headers
-a2 <header> : same as -a1, for a second custom header line
-dsn <nsfd> : use Delivery Status Notifications (RFC 3461)
n = never, s = successful, f = failure, d = delayed
can be used together, however N takes precedence
-hdrencb : use base64 for encoding headers, if necessary
-hdrencq : use quoted-printable for encoding headers, if necessary
-priority <pr> : set message priority 0 for low, 1 for high
-sensitivity <s> : set message sensitity 0 for personal, 1 for private,
2 for company-confidential
----------------------- Attachment and encoding options -----------------------
-attach <file> : attach binary file(s) to message (filenames comma separated)
-attacht <file> : attach text file(s) to message (filenames comma separated)
-attachi <file> : attach text file(s) as INLINE (filenames comma separated)
-embed <file> : embed file(s) in HTML. Object tag in HTML must specify
content-id using cid: tag. eg: <img src="cid:image.jpg">
-af <file> : file containing list of binary file(s) to attach (comma
separated)
-atf <file> : file containing list of text file(s) to attach (comma
separated)
-aef <file> : file containing list of embed file(s) to attach (comma
separated)
-base64 : send binary files using base64 (binary MIME)
-uuencode : send binary files UUEncoded
-enriched : send an enriched text message (Content-Type=text/enriched)
-unicode : message body is in 16- or 32-bit Unicode format
-html : send an HTML message (Content-Type=text/html)
-alttext <text> : plain text for use as alternate text
-alttextf <file>: plain text file for use as alternate text
-mime : MIME Quoted-Printable Content-Transfer-Encoding
-8bitmime : ask for 8bit data support when sending MIME
-multipart <size>
: send multipart messages, breaking attachments on <size>
KB boundaries, where <size> is per 1000 bytes
-nomps : do not allow multipart messages
---------------------------- NNTP specific options ----------------------------
-groups <usenet groups>
: list of newsgroups (comma separated)
-------------------------------- Other options --------------------------------
-xtndxmit : Attempt to use POP3 to transmit when accessing POP3 first
-h : displays this help (also -?, /?, -help or /help)
-q : suppresses all output to the screen
-debug : echoes server communications to a log file or screen
(overrides -q if echoes to the screen)
-log <file> : log everything but usage to <file>
-timestamp : when -log is used, a timestamp is added to each log line
-overwritelog : when -log is used, overwrite the log file
-ti <n> : set timeout to 'n' seconds. Blat will wait 'n' seconds for
server responses
-try <n times> : how many times blat should try to send (1 to 'INFINITE')
-binary : do not convert ASCII | (pipe, 0x7c) to CrLf in the message
body
-hostname <hst> : select the hostname used to send the message via SMTP
this is typically your local machine name
-raw : do not add CR/LF after headers
-delay <x> : wait x seconds between messages being sent when used with
-maxnames or -multipart
-comment <char> : use this character to mark the start of commments in
options files and recipient list files. The default is ;
-superdebug : hex/ascii dump the data between Blat and the server
-superdebugT : ascii dump the data between Blat and the server
-------------------------------------------------------------------------------
Note that if the '-i' option is used, <sender> is included in 'Reply-to:'
and 'Sender:' fields in the header of the message.
Optionally, the following options can be used instead of the -f and -i
options:
-mailfrom <addr> The RFC 821 MAIL From: statement
-from <addr> The RFC 822 From: statement
-replyto <addr> The RFC 822 Reply-To: statement
-returnpath <addr> The RFC 822 Return-Path: statement
-sender <addr> The RFC 822 Sender: statement
For backward consistency, the -f and -i options have precedence over these
RFC 822 defined options. If both -f and -i options are omitted then the
RFC 821 MAIL FROM statement will be defaulted to use the installation-defined
default sender address.

View File

@@ -0,0 +1,110 @@
/*
* $Id$
*/
/*
* Harbour Project source code:
* HBBLAT sample blat pure command interface
*
* Copyright 2007-2009 Francesco Saverio Giudice <info@fsgiudice.com>
* 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, or (at your option)
* any later version.
*
* 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 software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
*
* As a special exception, the Harbour Project gives permission for
* additional uses of the text contained in its release of Harbour.
*
* The exception is that, if you link the Harbour libraries 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 Harbour library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released by the Harbour
* Project under the name Harbour. If you copy code from other
* Harbour Project or Free Software Foundation releases into a copy of
* Harbour, as the General Public License permits, the exception does
* not apply to the code that you add in this way. To avoid misleading
* anyone as to the status of such modified files, you must delete
* this exception notice from them.
*
* If you write modifications of your own for Harbour, it is your choice
* whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*
*/
#include "common.ch"
PROCEDURE Main()
LOCAL cCmd := GetParams()
LOCAL nRet
? "Simple BLAT Command interface"
? "Paramenters: ", cCmd
IF Empty( cCmd )
? "Try with -? option"
ELSE
? "Sending parameters to blat"
nRet := hb_BlatSend( cCmd )
? nRet
ENDIF
RETURN
STATIC FUNCTION GetParams()
LOCAL cCmd := WAPI_GetCommandLine()
LOCAL n
// Search first space after program name
n := AT( " ", cCmd )
IF n > 0
// remove program name
cCmd := SubStr( cCmd, n + 1 )
ELSE
// empty params list
cCmd := ""
ENDIF
RETURN cCmd
//-----------------------------------------
// TODO: move to hbwin lib
#pragma BEGINDUMP
#define HB_OS_WIN_32_USED
#include <windows.h>
#include "hbapi.h"
#include "hbapiitm.h"
#include "hbstack.h"
#include "hbapierr.h"
#include "hbapifs.h"
/* GetCommandLine() returns entire command line as a single string */
HB_FUNC( WAPI_GETCOMMANDLINE )
{
hb_retc( GetCommandLine() );
}
#pragma ENDDUMP

View File

@@ -0,0 +1,127 @@
/*
* $Id$
*/
/*
* Harbour Project source code:
* HBBLAT sample test file
*
* Copyright 2007-2009 Francesco Saverio Giudice <info@fsgiudice.com>
* 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, or (at your option)
* any later version.
*
* 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 software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
*
* As a special exception, the Harbour Project gives permission for
* additional uses of the text contained in its release of Harbour.
*
* The exception is that, if you link the Harbour libraries 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 Harbour library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released by the Harbour
* Project under the name Harbour. If you copy code from other
* Harbour Project or Free Software Foundation releases into a copy of
* Harbour, as the General Public License permits, the exception does
* not apply to the code that you add in this way. To avoid misleading
* anyone as to the status of such modified files, you must delete
* this exception notice from them.
*
* If you write modifications of your own for Harbour, it is your choice
* whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*
*/
#include "common.ch"
#include "hbblat.ch"
#define ADDRESS_FROM "yourname@domain.com" // put here your address from
#define ADDRESS_TO "hbblat_test@fsgiudice.com" // this mail can be used for tests
//#define ADDRESS_CC "another@domain.com"
#define SERVER_SMTP "your.stmpserver.com" // put your smtp server here
PROCEDURE Main()
//LOCAL cCmd
LOCAL nRet
LOCAL oBlat := HBBlat():New()
?
? "HBBlat test"
WITH OBJECT oBlat
:cFrom := ADDRESS_FROM
:cTo := ADDRESS_TO
//:cUserAUTH := "myaccount@mydomain.org"
//:cPasswordAUTH := "mypassword"
//:cHostname := "mail.anydomain.com"
//:cCC := ADDRESS_CC
//:cCCFile := "f_cc.txt"
//:cBCC := "info@fsgiudice.com"
//:cBCCFile := "f_bcc.txt"
//:cBodyFile := "c.bat"
:cBody := e"Body part\n\rEnd Body"
:cServerSMTP := SERVER_SMTP
:cSubject := "Test from Blat"
//:lSuppressSubject := TRUE
//:cSubjectFile := "f_subjectline.txt"
//:lToUndiscloseRecipients := TRUE
:cPostScriptumFile := "f_ps.txt"
:lRequestDisposition := TRUE // does not work ???
:lRequestReturnReceipt := TRUE
:cAttachTextFiles := "f_subjectline.txt"
:aAttachTextFiles := { "f_ps.txt", "blattest.prg", "blatcmd.prg" }
:cAttachListTextFile := "f_listtext.txt"
:cLogFile := "log.txt"
:lLogTimestamp := TRUE
:lDebug := TRUE
:lLogOverwrite := TRUE
//:lSuperDebug := TRUE // This display internal checking
END
? "Checking options ..."
//oBlat:Check()
?
? "Command .........: ", oBlat:GetCommand() // Not necessary - this show complete command line sent to blat
? "Sending mail ..."
? "Return Value ....: ", nRet := oBlat:Send()
? "Error String ....: ", oBlat:ErrorString()
// Blat error
? "Blat Error ......: ", oBlat:BlatError()
? "Blat Error String: ", oBlat:BlatErrorString()
?
? IIF( nRet == 0, "mail sent correctly!", "mail NOT sent" )
?
RETURN
//-----------------------------------------

View File

@@ -0,0 +1,2 @@
f_sample.txt
f_sample1.txt

View File

@@ -0,0 +1,2 @@
This is postscriptum file.
Have to be added to end of body text.

View File

@@ -0,0 +1 @@
Sample text

View File

@@ -0,0 +1 @@
Sample text 1

View File

@@ -0,0 +1 @@
Subject from file

View File

@@ -0,0 +1,7 @@
@rem
@rem $Id$
@rem
@set HB_USER_LIBS=hbblat.lib blat.lib
@..\..\..\bin\hbmk %* -I..

View File

@@ -55,6 +55,7 @@ for %%n in ( %_HB_DIRS% ) do %COMSPEC% /c %_HB_BATWORKER% %%n %1 %2 %3 %4 %5 %6
set _HB_DIRS=rddado rddsql xhb
if not "%HB_INC_ALLEGRO%%HB_DIR_ALLEGRO%" == "" set _HB_DIRS=%_HB_DIRS% gtalleg
if not "%HB_INC_APOLLO%%HB_DIR_APOLLO%" == "" set _HB_DIRS=%_HB_DIRS% hbapollo
if not "%HB_DIR_BLAT%" == "" set _HB_DIRS=%_HB_DIRS% hbblat
if not "%HB_INC_CURL%%HB_DIR_CURL%" == "" set _HB_DIRS=%_HB_DIRS% hbcurl
if not "%HB_INC_FIREBIRD%%HB_DIR_FIREBIRD%" == "" set _HB_DIRS=%_HB_DIRS% hbfbird
if not "%HB_INC_FREEIMAGE%%HB_DIR_FREEIMAGE%" == "" set _HB_DIRS=%_HB_DIRS% hbfimage
@@ -79,4 +80,4 @@ del %_HB_BATWORKER% > nul
set _HB_DIRS=
set _HB_BATWORKER=
set HB_SHOW_ERRORS=
set HB_SHOW_ERRORS=

View File

@@ -55,6 +55,7 @@ for %%n in ( %_HB_DIRS% ) do %COMSPEC% /c %_HB_BATWORKER% %%n %1 %2 %3 %4 %5 %6
set _HB_DIRS=rddado rddsql xhb
if not "%HB_INC_ALLEGRO%%HB_DIR_ALLEGRO%" == "" set _HB_DIRS=%_HB_DIRS% gtalleg
if not "%HB_INC_APOLLO%%HB_DIR_APOLLO%" == "" set _HB_DIRS=%_HB_DIRS% hbapollo
if not "%HB_DIR_BLAT%" == "" set _HB_DIRS=%_HB_DIRS% hbblat
if not "%HB_INC_CURL%%HB_DIR_CURL%" == "" set _HB_DIRS=%_HB_DIRS% hbcurl
if not "%HB_INC_FIREBIRD%%HB_DIR_FIREBIRD%" == "" set _HB_DIRS=%_HB_DIRS% hbfbird
if not "%HB_INC_FREEIMAGE%%HB_DIR_FREEIMAGE%" == "" set _HB_DIRS=%_HB_DIRS% hbfimage
@@ -79,4 +80,4 @@ del %_HB_BATWORKER% > nul
set _HB_DIRS=
set _HB_BATWORKER=
set HB_SHOW_ERRORS=
set HB_SHOW_ERRORS=

View File

@@ -6635,7 +6635,7 @@ static void hb_vmPushStatic( USHORT uiStatic )
static void hb_vmPushStaticByRef( USHORT uiStatic )
{
HB_STACK_TLS_PRELOAD
PHB_ITEM pTop, pBase
PHB_ITEM pTop, pBase;
HB_TRACE(HB_TR_DEBUG, ("hb_vmPushStaticByRef(%hu)", uiStatic));