Files
harbour-core/harbour/source/rtl/alert.prg
Viktor Szakats 56267f28dd 2007-04-14 12:40 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* harbour/include/hbstdgen.ch
   * harbour/include/box.ch
   * harbour/include/hbclass.ch
   * harbour/include/hbcommon.ch
   * harbour/include/hbextern.ch
   * harbour/include/hbgetcmt.ch
   * harbour/include/hbsetup.ch
   * harbour/include/ord.ch
   * harbour/source/rdd/dbdelim.prg
   * harbour/source/rdd/dbfuncs.prg
   * harbour/source/rdd/dbjoin.prg
   * harbour/source/rdd/dblist.prg
   * harbour/source/rdd/dbsort.prg
   * harbour/source/rdd/dbstrux.prg
   * harbour/source/rdd/dbtotal.prg
   * harbour/source/rdd/dbupdat.prg
   * harbour/source/rdd/rddord.prg
   * harbour/source/rtl/alert.prg
   * harbour/source/rtl/browdb.prg
   * harbour/source/rtl/browdbx.prg
   * harbour/source/rtl/checkbox.prg
   * harbour/source/rtl/dircmd.prg
   * harbour/source/rtl/getsys.prg
   * harbour/source/rtl/input.prg
   * harbour/source/rtl/mssgline.prg
   * harbour/source/rtl/pushbtn.prg
   * harbour/source/rtl/radiobtn.prg
   * harbour/source/rtl/radiogrp.prg
   * harbour/source/rtl/setfunc.prg
   * harbour/source/rtl/setta.prg
   * harbour/source/rtl/tbcolumn.prg
   * harbour/source/rtl/tget.prg
   * harbour/source/rtl/tgetint.prg
   * harbour/source/rtl/tmenuitm.prg
   * harbour/source/rtl/tpopup.prg
   * harbour/source/rtl/ttopbar.prg
   * harbour/source/rtl/typefile.prg
   * harbour/source/vm/harbinit.prg
   * harbour/utils/hbrun/external.prg
   * harbour/utils/hbtest/rt_main.ch
     + Following #defines are now available by default without
       the need to #include "hbsetup.ch". These are of course
       also available for applications as defined at Harbour
       build time:
       HB_EXTENSION
       HB_C52_UNDOC
       HB_C52_STRICT
       HB_COMPAT_C53
       HB_COMPAT_XPP
       HB_COMPAT_VO
       HB_COMPAT_FLAGSHIP
       HB_COMPAT_FOXPRO
       HB_COMPAT_DBASE
       HB_COMPAT_CLIP
       HB_COMPAT_XHB
       HB_SHORTNAMES
       HB_FILE_VER_STATIC

   * harbour/source/compiler/hbusage.c
     * Mail address update.
2007-04-14 10:41:54 +00:00

152 lines
3.7 KiB
Plaintext

/*
* $Id$
*/
/*
* Harbour Project source code:
* ALERT() function
*
* Released to Public Domain by Vladimir Kazimirchik <v_kazimirchik@yahoo.com>
* www - http://www.harbour-project.org
*
*/
/*
* The following parts are Copyright of the individual authors.
* www - http://www.harbour-project.org
*
* Copyright 1999-2001 Viktor Szakats <viktor.szakats@syenar.hu>
* Changes for higher Clipper compatibility, console mode, extensions
* __NONOALERT()
*
* See doc/license.txt for licensing terms.
*
*/
#include "box.ch"
#include "common.ch"
#include "inkey.ch"
#include "setcurs.ch"
#include "hbgtinfo.ch"
/* TOFIX: Clipper defines a clipped window for Alert() [vszakats] */
/* NOTE: Clipper will return NIL if the first parameter is not a string, but
this is not documented. This implementation converts the first
parameter to a string if another type was passed. You can switch back
to Clipper compatible mode by defining constant
HB_C52_STRICT. [vszakats] */
/* NOTE: Clipper handles these buttons { "Ok", "", "Cancel" } in a buggy way.
This is fixed. [vszakats] */
/* NOTE: nDelay parameter is a Harbour extension. */
#ifdef HB_C52_UNDOC
STATIC s_lNoAlert
#endif
FUNCTION Alert( xMessage, aOptions, cColorNorm, nDelay )
LOCAL cMessage, cLine, cColorHigh
LOCAL aOptionsOK
LOCAL nEval
LOCAL lFirst
#ifdef HB_C52_UNDOC
DEFAULT s_lNoAlert TO hb_argCheck( "NOALERT" )
IF s_lNoAlert
RETURN NIL
ENDIF
#endif
#ifdef HB_C52_STRICT
IF !ISCHARACTER( xMessage )
RETURN NIL
ENDIF
cMessage := StrTran( xMessage, ";", Chr( 10 ) )
#else
IF PCount() == 0
RETURN NIL
ENDIF
cMessage := ""
IF ISARRAY( xMessage )
lFirst := .T.
FOR nEval := 1 TO Len( xMessage )
IF ISCHARACTER( cLine := xMessage[ nEval ] )
cMessage += IIF( lFirst, "", Chr( 10 ) ) + cLine
lFirst := .F.
ENDIF
NEXT
ELSE
DO CASE
CASE ValType( xMessage ) $ "CM" ; cMessage := StrTran( xMessage, ";", Chr( 10 ) )
CASE ValType( xMessage ) == "N" ; cMessage := LTrim( Str( xMessage ) )
CASE ValType( xMessage ) == "D" ; cMessage := DToC( xMessage )
CASE ValType( xMessage ) == "L" ; cMessage := iif( xMessage, ".T.", ".F." )
CASE ValType( xMessage ) == "O" ; cMessage := xMessage:className + " Object"
CASE ValType( xMessage ) == "S" ; cMessage := "@" + xMessage:Name + "()"
CASE ValType( xMessage ) == "B" ; cMessage := "{||...}"
OTHERWISE ; cMessage := "NIL"
ENDCASE
ENDIF
#endif
IF !ISARRAY( aOptions )
aOptions := {}
ENDIF
IF !ISCHARACTER( cColorNorm ) .or. EMPTY( cColorNorm )
cColorNorm := "W+/R" // first pair color (Box line and Text)
cColorHigh := "W+/B" // second pair color (Options buttons)
ELSE
cColorHigh := StrTran( StrTran( iif( At( "/", cColorNorm ) == 0, "N", SubStr( cColorNorm, At( "/", cColorNorm ) + 1 ) ) + "/" +;
iif( At( "/", cColorNorm ) == 0, cColorNorm, Left( cColorNorm, At( "/", cColorNorm ) - 1 ) ), "+", "" ), "*", "" )
ENDIF
IF nDelay == NIL
nDelay := 0
ENDIF
aOptionsOK := {}
FOR nEval := 1 TO Len( aOptions )
IF ISCHARACTER( aOptions[ nEval ] ) .AND. !Empty( aOptions[ nEval ] )
AAdd( aOptionsOK, aOptions[ nEval ] )
ENDIF
NEXT
IF Len( aOptionsOK ) == 0
aOptionsOK := { 'Ok' }
#ifdef HB_C52_STRICT
/* NOTE: Clipper allows only four options [vszakats] */
ELSEIF Len( aOptionsOK ) > 4
aSize( aOptionsOK, 4 )
#endif
ENDIF
RETURN HB_gtAlert( cMessage, aOptionsOK, cColorNorm, cColorHigh, nDelay );
#ifdef HB_C52_UNDOC
PROCEDURE __NONOALERT()
s_lNoAlert := .F.
RETURN
#endif