Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations gkittelson on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Buttons Disappear on In-Code Window 1

Status
Not open for further replies.

Scott24x7

Programmer
Jul 12, 2001
2,826
JP
Hi all,
I've had as my core error handler in place since Fox 2... It was always fine until VFP came along, and for years I kind of tolerated this, but since I'm "back in the game" and very rusty, I get a lot more errors popping up when I run the app. So finally this has started to annoy me, and I'm hoping someone can help.

Basically what happens is, when an error occurs, my ON ERROR runs a small window in code, so there is no issue with forms and other complexities. BUT, it has a problem. I have 3 buttons (Retry, Cancel, Quit to OS), but as soon as the mouse passes over them, they vanish. I have no idea why this happens. It never happened in DOS, or Mac or Win 3.11 under VFP 2.6, and by the time I was doing early VFP code, it was not a big deal, as I didn't make as many mistakes as I do now.

The code is:
Code:
ON ERROR DO BADNEWS WITH ERROR(), MESSAGE(), MESSAGE(1),SYS(16), LINENO()
*
SET CONSOLE ON
SET PRINTER OFF
SET DEVICE TO SCREEN
*
CLEAR TYPEAHEAD
*
    SET CONSOLE &XCONSOLE
	SET PRINTER &XPRINTER
    SET DEVICE TO &XDEVICE
*
    DO SETONERR
*
DEFINE WINDOW SYSERRWIND;
	FROM 8,5 TO 20,125 IN SCREEN;
	TITLE 'APPLICATION ERROR INTERRUPT';
	FOOTER 'Retry, Cancel, Quit to OS';
	DOUBLE FLOAT NOGROW SHADOW;
	COLOR SCHEME 7 
MOVE WINDOW SYSERRWIND CENTER
ACTIVATE WINDOW SYSERRWIND
*
@ 0,2 SAY 'Error No:'
@ 0,14 SAY M.XERROR PICTURE '#,###'
@ 1,2 SAY 'Error Msg:'
@ 1,14 SAY M.XMSG
@ 2,2 SAY 'Prog Code:'
@ 2,14 SAY LEFT(M.XCODE,120)
@ 3,2 SAY 'Program:'
@ 3,14 SAY M.XMODULE
@ 4,2 SAY 'Line No:'
@ 4,14 SAY M.XLINENO PICTURE '##,###'
@ 5,2 SAY 'Data File:'
@ 5,14 SAY M.XCURDBF
@ 6,2 SAY 'Data Field:'
@ 6,14 SAY M.XGETFIELD
*
DO CASE
CASE RDLEVEL() > 5
	DO CASE
		CASE _DOS
			M.NEWBUTTON = '<R>etry, <C>ancel, or <O>S?'
		CASE _WINDOWS
			M.NEWBUTTON = '<R>etry, <C>ancel, or <O>S?'
		CASE _MAC
			M.NEWBUTTON = '<R>etry, <C>ancel, or <O>S?'
	ENDCASE
	@ 8,10 SAY M.NEWBUTTON COLOR SCHEME glCLRDLG
*
	DO WHILE .T.
		M.RVALUE = INKEY(0,'HM')
		M.BUTTONOPT = UPPER(CHR((M.RVALUE)))
		IF M.BUTTONOPT $ 'RFDW'
			EXIT
		ENDIF

I've left out some of the code that ignores certain errors for brevity, otherwise this would be a long bit of code, but the key "problem" area is there. I am just not sure what I'm doing wrong that causes them to vanish.

Any ideas?

Best Regards,
Scott
ATS, CDCE, CTIA, CTDC

"Everything should be made as simple as possible, and no simpler."[hammer]
 
You're making use of DEFINE WINDOW and @SAY. All of that can have the effect of vanishing buttons etc. when themes are in effect.
Create a form instead, you won't want to switch themes off.

Bye, Olaf.
 
Olaf,
I'm sure you can correct me if I'm wrong, and maybe this was resolved in a later version of VFP, but I remember an "aversion" to using a form during the error routine, because some very bad things might have happened precluding anything (especially a "READ EVENTS") from happening, leaving you in a "hung state" in VFP which forces you to go to OS level to kill the running app (and/or Dev interactive mode). All highly undesirable...
Is this an unfounded fear now?


Best Regards,
Scott
ATS, CDCE, CTIA, CTDC

"Everything should be made as simple as possible, and no simpler."[hammer]
 
Scott,

I won't try to find correct your code (I think Olaf has already done that). But I would say very firmly that "3 buttons (Retry, Cancel, Quit to OS)" is just about the worst thing you can do in an error handler, for several reasons.

First, how is a user supposed to know which button to press? In almost every case, they are likely to choose Retry, because it is the only option that doesn't immediately close the application. But there are only a very few errors where Retry is appropriate, and the chances are that the user won't understand those, or recognise them when they see them.

And what is the difference between Cancel and Quit? I doubt if a user would see any distinction. In any case, when running in production (from an EXE), they both do the same thing.

What does "Quit to OS" mean? I know, and you know, that OS stands for operating system, but how many users would know that? And even if they did, what does that mean in the Windows environment? You are always "in the OS", so how can you quit to it?

In my experience, the only effective error-handler is one that doesn't give the user any choices whatever. You need to tell 'em that an error has occurred, provide some mechanism for reporting it (preferably behind the scenes without the user's involvement), then politely and decisively quit.

Final word: All of the above assumes that the error-handler you are describing is used in your production application. If you are using it only during development, that's an entirely different matter. But the best way to handle errors in development is not to trap them all. Just let VFP bring up its standard Suspend / Ignore / Cancel prompt. Then use that to debug the error in whatever way is appropriate.

Mike

__________________________________
Mike Lewis (Edinburgh, Scotland)

Visual FoxPro articles, tips and downloads
 
Sorry Mike, I should have mentioned that.
This is design time only. Users never get to see this, which is why I never worried about the buttons disappearing in the past.
As I mentioned, the Quit to OS is legacy... this was used all the way back to Fox 2, and I had systems written in Mac, Dos, Windows and Unix, so I have those environment tests _Mac, _Dos, etc.
I'm fine to get rid of those now, but the underlying point is my error handler buttons... And Quit meant "Leave the app and FP", Cancel meant "Return to interactive Environment" and Quit to OS is determined if it's running in Dev environment or as an .EXE

They all make sense to me, which for this part is all I'm worried about.
In any case... my question still stands about forms in error routines, and read events, which is one thing this "form" doesn't have (read event) associated with it. That is by design.


Best Regards,
Scott
ATS, CDCE, CTIA, CTDC

"Everything should be made as simple as possible, and no simpler."[hammer]
 
In any case... my question still stands about forms in error routines, and read events, which is one thing this "form" doesn't have (read event) associated with it. That is by design.

You're fishing for issues that don't exist.

The problem with running ANY code in an error routine is that errors fire the error routine again. You're in danger of recursion beyond the limits. If you're sure your code is clean, no problem.
 
Scott,

Given that this code is only intended for the development environment, then by all means ignore by previous strictures and injunctions. But I stand by my last point: Why do you need an error-handler when you are running in the development environment?

When VFP generates an error in the DE, you would normally want to deal with it in one of the following ways:

- Suspend the program, and go immediately to the debugger so you can see what line of code you are on, the state of the current variables, and so on. Or perhaps go to the data session window so that you can browse the active tables.

- Decide that you can ignore the error for now; carry on with the test, and come back to the error later.

- Cancel the current test.

Those three possibilities equate to the three buttons - Suspend, Ignore, Cancel - that are provided by the built-in error-handler. There's no need to do anything else.

Also, to continue Dan's point, the more stuff you put in an error-handler, the more likely it is that something else will go wrong after the error has been reported.

Mike

__________________________________
Mike Lewis (Edinburgh, Scotland)

Visual FoxPro articles, tips and downloads
 
Mike,

Why do you need an error-handler when you are running in the development environment?

Ah... you may be missing the ridiculously valuable point of my error handler...
It captures that state of virtually EVERYTHING at play in the state of the environment. I can't tell you how ridiculously useful this has been over the years.

Here's a "dump" of one the Memo field from the error capturing:

Code:
GLQUITAPP   Pub    L  .F.
GLQUITOPT   Pub    L  .F.
GLUSERID    Pub    L  .F.
GLAXSLEVEL  Pub    L  .F.
GLMENUOFF   Pub    L  .F.
GLTIPSTATE  Pub    L  .T.
GLPRODUCTION
            Pub    L  .F.
GLSTRTDEFA  Pub    C  "T:\DEVELOPMENT\FOXTEST\DCIDE"
GLSTRTPATH  Pub    C  "\DEVELOPMENT\FOXTEST\DCIDE;DBFS\;LABELS\;REPO
                      RTS\;UTILDRV\;"\DEVELOPMENT\FOXTEST\DCIDE\DBFS
                      \"\;\DEVELOPMENT\FOXTEST\DCIDE\DBFS\"
GLCLRUSRWIND
            Pub    N  1           (         1.00000000)
GLCLRUSRMNU
            Pub    N  2           (         2.00000000)
GLCLRMNUBAR
            Pub    N  3           (         3.00000000)
GLCLRMNUPOP
            Pub    N  4           (         4.00000000)
GLCLRDLG    Pub    N  5           (         5.00000000)
GLCLRALRTPOP
            Pub    N  12          (        12.00000000)
GLCLRDLGPOP
            Pub    N  6           (         6.00000000)
GLCLRALRT   Pub    N  7           (         7.00000000)
GLCLRWIND   Pub    N  8           (         8.00000000)
GLCLRPOP    Pub    N  9           (         9.00000000)
GLCLRBROW   Pub    N  10          (        10.00000000)
GLCLRRPRT   Pub    N  11          (        11.00000000)
GLDFWINBORD
            Pub    C  "SYSTEM"
GLRINGBELL  Pub    C  ""
GLSAVEENVT  Pub    L  .F.
GLLOCALDRV  Pub    C  ""\DEVELOPMENT\FOXTEST\DCIDE\"\"
GLSYSDEFA   Pub    C  ""\DEVELOPMENT\FOXTEST\DCIDE\"\"
GLFREEMEM   Pub    N  640         (       640.00000000)
GLSYSPATH   Pub    C  ""\DEVELOPMENT\FOXTEST\DCIDE\"\"
GLDATADRV1  Pub    C  ""\DEVELOPMENT\FOXTEST\DCIDE\DBFS\"\"
GLDATADRV2  Pub    C  ""\DEVELOPMENT\FOXTEST\DCIDE\DBFS\""
GLUTILDRV   Pub    C  ""\DEVELOPMENT\FOXTEST\DCIDE\"\"
GLDSKPRNDRV
            Pub    C  ""
GLXMITDRV   Pub    C  ""
GLASCFILEDRV
            Pub    C  ""
GLUPLOADDRV
            Pub    C  ""
GLACTIVEGET
            Pub    C  "N/W*"
GCUSERID    Priv   C  "spayton        "  startup
GCUSERNAME  Priv   C  "Scott Payton"  startup
GNACCESSLEVEL
            Priv   N  3           (         3.00000000)  startup
MAIN        Priv   O  FORM  startup
SPLASH      Priv   O  .NULL.  startup
LOGIN       Priv   O  .NULL.  startup
[highlight #FCE94F]DATACENTER  Priv   O  LARGEFORMBASE  startup
XERROR      Priv   N  107         (       107.00000000)  pro2eror
XMSG        Priv   C  "Operator/operand type mismatch."  pro2eror
XCODE       Priv   C  "..."  pro2eror
XMODULE     Priv   C  "T:\DEVELOPMENT\FOXTEST\DCIDE\DCIDE.EXE"  pro2eror
XLINENO     Priv   N  80          (        80.00000000)  pro2eror[/highlight]
XPRINTER    Priv   C  "OFF"  pro2eror
XCONSOLE    Priv   C  "ON"  pro2eror
XDEVICE     Priv   C  "SCREEN"  pro2eror
XLASTKEY    Priv   N  113         (       113.00000000)  pro2eror
XCURDBF     Priv   C  ""  pro2eror
XGETFIELD   Priv   C  ""  pro2eror
XDFLTDRIVE  Priv   C  "T:"  pro2eror
XRUNMEM     Priv   C  "655360"  pro2eror
XPRNDEVICE  Priv   C  ""  pro2eror
XCURDIR     Priv   C  "\DEVELOPMENT\FOXTEST\DCIDE"  pro2eror
XTOPWIN     Priv   C  "FRMDATACENTERCENTRAL"  pro2eror
XLOCKED     Priv   C  ""  pro2eror
XMISSING    Priv   C  ""  pro2eror
NEWBUTTON   Priv   C  "Cancel"  pro2eror
OPSYS       Priv   C  "\<OS"  pro2eror
BUTTONOPT   Priv   C  "C"  pro2eror
LSTEXT      Priv   C  "2438106.TXT"  saverror
LMTEXT      Priv   C  "2438113.TXT"  saverror
   66 variables defined,    811 bytes used

Processor is Pentium
Procedure file: COMMON.FXP
File search path: \DEVELOPMENT\FOXTEST\DCIDE;DBFS\;LABELS\;REPORTS\;UTILDRV\;"\DEVELOPMENT\FOXTEST\DCIDE\DBFS\"\;\DEVELOPMENT\FOXTEST\DCIDE\DBFSDefault directory: T:\DEVELOPMENT\FOXTEST\DCIDE
Print file/device:  
Work area   =    1
Margin      =    0
Decimals    =    2
Memowidth   =   50
Typeahead   =   20
Blocksize   =   64
Reprocess   =  Automatic
Refresh     = 5, 5.000 SECONDS
DDE Timeout =    2000
DDE Safety  = on

Code page: 1252
Collating sequence: Machine
Compiler code page: 1252
Date format: American
Macro Hot Key = 
UDF parameters are passed by: VALUE
On Error:        DO BADNEWS WITH ERROR(), MESSAGE(), MESSAGE(1),SYS(16), LINENO()
On Shutdown:     DO CloseApp IN COMMON.PRG
Textmerge Options
          Delimiters:  Left = <<  Right = >>
          Show

Alternate  - off    Blink      - on     Clear      - on     Console    - off    Echo       - off    Fields     - off    Help       - on     Mouse      - on     Optimize   - on     Space      - on     Textmerge  - off 
ANSI       - on     Brstatus   - off    Color      - on     Cursor     - on     Escape     - off    Fixed      - off    Intensity  - on     Multilocks - off    Print      - off    Status Bar - off    Title      - off 
Asserts    - off    Carry      - off    Compatible - off    Deleted    - on     Exact      - off    Fullpath   - on     Lock       - off    Near       - off    Readborder - on     Sysmenus   - on     Unique     - off 
Bell       - off    Century    - on     Confirm    - off    Device     - scrn   Exclusive  - off    Heading    - off    Logerrors  - off    Null       - off    Safety     - off    Talk       - off 




Declared DLLs:
BARCODE_AvailableDirectionFlags                           c:\windows\system32\eztwain4.dll
BARCODE_EngineName                                  c:\windows\system32\eztwain4.dll
BARCODE_GetDirectionFlags                           c:\windows\system32\eztwain4.dll
BARCODE_GetRect                                     c:\windows\system32\eztwain4.dll
BARCODE_GetText                                     c:\windows\system32\eztwain4.dll
BARCODE_IsAvailable                                 c:\windows\system32\eztwain4.dll
BARCODE_IsEngineAvailable                           c:\windows\system32\eztwain4.dll
BARCODE_NoZone                                      c:\windows\system32\eztwain4.dll
BARCODE_ReadableCodes                               c:\windows\system32\eztwain4.dll
BARCODE_Recognize                                   c:\windows\system32\eztwain4.dll
BARCODE_SelectedEngine                              c:\windows\system32\eztwain4.dll
BARCODE_SelectEngine                                c:\windows\system32\eztwain4.dll
BARCODE_SetDirectionFlags                           c:\windows\system32\eztwain4.dll
BARCODE_SetLicenseKey                               c:\windows\system32\eztwain4.dll
BARCODE_SetZone                                     c:\windows\system32\eztwain4.dll
BARCODE_Text                                        c:\windows\system32\eztwain4.dll
BARCODE_Type                                        c:\windows\system32\eztwain4.dll
BARCODE_TypeName                                    c:\windows\system32\eztwain4.dll
BARCODE_Version                                     c:\windows\system32\eztwain4.dll
CONTAINER_Array                                     c:\windows\system32\eztwain4.dll
CONTAINER_ContainsValue                             c:\windows\system32\eztwain4.dll
CONTAINER_ContainsValueInt                           c:\windows\system32\eztwain4.dll
CONTAINER_Copy                                      c:\windows\system32\eztwain4.dll
CONTAINER_CurrentIndex                              c:\windows\system32\eztwain4.dll
CONTAINER_CurrentValue                              c:\windows\system32\eztwain4.dll
CONTAINER_CurrentValueInt                           c:\windows\system32\eztwain4.dll
CONTAINER_DefaultIndex                              c:\windows\system32\eztwain4.dll
CONTAINER_DefaultValue                              c:\windows\system32\eztwain4.dll
CONTAINER_DefaultValueInt                           c:\windows\system32\eztwain4.dll
CONTAINER_DeleteItem                                c:\windows\system32\eztwain4.dll
CONTAINER_Enumeration                               c:\windows\system32\eztwain4.dll
CONTAINER_Equal                                     c:\windows\system32\eztwain4.dll
CONTAINER_FindValue                                 c:\windows\system32\eztwain4.dll
CONTAINER_FindValueInt                              c:\windows\system32\eztwain4.dll
CONTAINER_FloatValue                                c:\windows\system32\eztwain4.dll
CONTAINER_Format                                    c:\windows\system32\eztwain4.dll
CONTAINER_Free                                      c:\windows\system32\eztwain4.dll
CONTAINER_GetItemFrame                              c:\windows\system32\eztwain4.dll
CONTAINER_GetStringValue                            c:\windows\system32\eztwain4.dll
CONTAINER_Handle                                    c:\windows\system32\eztwain4.dll
CONTAINER_InsertItem                                c:\windows\system32\eztwain4.dll
CONTAINER_IntValue                                  c:\windows\system32\eztwain4.dll
CONTAINER_IsValid                                   c:\windows\system32\eztwain4.dll
CONTAINER_ItemCount                                 c:\windows\system32\eztwain4.dll
CONTAINER_ItemType                                  c:\windows\system32\eztwain4.dll
CONTAINER_MaxValue                                  c:\windows\system32\eztwain4.dll
CONTAINER_MaxValueInt                               c:\windows\system32\eztwain4.dll
CONTAINER_MinValue                                  c:\windows\system32\eztwain4.dll
CONTAINER_MinValueInt                               c:\windows\system32\eztwain4.dll
CONTAINER_OneValue                                  c:\windows\system32\eztwain4.dll
CONTAINER_Range                                     c:\windows\system32\eztwain4.dll
CONTAINER_SelectCurrentItem                           c:\windows\system32\eztwain4.dll
CONTAINER_SelectCurrentValue                           c:\windows\system32\eztwain4.dll
CONTAINER_SelectDefaultItem                           c:\windows\system32\eztwain4.dll
CONTAINER_SelectDefaultValue                           c:\windows\system32\eztwain4.dll
CONTAINER_SetItem                                   c:\windows\system32\eztwain4.dll
CONTAINER_SetItemFrame                              c:\windows\system32\eztwain4.dll
CONTAINER_SetItemInt                                c:\windows\system32\eztwain4.dll
CONTAINER_SetItemString                             c:\windows\system32\eztwain4.dll
CONTAINER_StepSize                                  c:\windows\system32\eztwain4.dll
CONTAINER_StepSizeInt                               c:\windows\system32\eztwain4.dll
CONTAINER_StringValue                               c:\windows\system32\eztwain4.dll
CONTAINER_TypeSize                                  c:\windows\system32\eztwain4.dll
CONTAINER_Unwrap                                    c:\windows\system32\eztwain4.dll
CONTAINER_Wrap                                      c:\windows\system32\eztwain4.dll
DIB_AdjustBC                                        c:\windows\system32\eztwain4.dll
DIB_Allocate                                        c:\windows\system32\eztwain4.dll
DIB_AlmostEqual                                     c:\windows\system32\eztwain4.dll
DIB_ApplyToneMap8                                   c:\windows\system32\eztwain4.dll
DIB_AutoContrast                                    c:\windows\system32\eztwain4.dll
DIB_AutoCrop                                        c:\windows\system32\eztwain4.dll
DIB_AutoDeskew                                      c:\windows\system32\eztwain4.dll
DIB_Avg                                             c:\windows\system32\eztwain4.dll
DIB_AvgColumn                                       c:\windows\system32\eztwain4.dll
DIB_AvgRegion                                       c:\windows\system32\eztwain4.dll
DIB_AvgRow                                          c:\windows\system32\eztwain4.dll
DIB_BitsPerPixel                                    c:\windows\system32\eztwain4.dll
DIB_BitsPerSample                                   c:\windows\system32\eztwain4.dll
DIB_Blt                                             c:\windows\system32\eztwain4.dll
DIB_BltMask                                         c:\windows\system32\eztwain4.dll
DIB_BufferPageCount                                 c:\windows\system32\eztwain4.dll
DIB_CanGetFromClipboard                             c:\windows\system32\eztwain4.dll
DIB_CloseInDC                                       c:\windows\system32\eztwain4.dll
DIB_ColorCount                                      c:\windows\system32\eztwain4.dll
DIB_ColorModel                                      c:\windows\system32\eztwain4.dll
DIB_ColorTableB                                     c:\windows\system32\eztwain4.dll
DIB_ColorTableG                                     c:\windows\system32\eztwain4.dll
DIB_ColorTableR                                     c:\windows\system32\eztwain4.dll
DIB_ComponentCopy                                   c:\windows\system32\eztwain4.dll
DIB_Compression                                     c:\windows\system32\eztwain4.dll
DIB_ConversionColorCount                            c:\windows\system32\eztwain4.dll
DIB_ConversionThreshold                             c:\windows\system32\eztwain4.dll
DIB_ConvertToFormat                                 c:\windows\system32\eztwain4.dll
DIB_ConvertToPixelType                              c:\windows\system32\eztwain4.dll
DIB_Convolve                                        c:\windows\system32\eztwain4.dll
DIB_Copy                                            c:\windows\system32\eztwain4.dll
DIB_Correlate                                       c:\windows\system32\eztwain4.dll
DIB_Create                                          c:\windows\system32\eztwain4.dll
DIB_CreatePalette                                   c:\windows\system32\eztwain4.dll
DIB_CrossCorrelate                                  c:\windows\system32\eztwain4.dll
DIB_Darkness                                        c:\windows\system32\eztwain4.dll
DIB_Depth                                           c:\windows\system32\eztwain4.dll
DIB_DeskewAngle                                     c:\windows\system32\eztwain4.dll
DIB_DrawLine                                        c:\windows\system32\eztwain4.dll
DIB_DrawOnWindow                                    c:\windows\system32\eztwain4.dll
DIB_DrawText                                        c:\windows\system32\eztwain4.dll
DIB_DrawToDC                                        c:\windows\system32\eztwain4.dll
DIB_EnumeratePrinters                               c:\windows\system32\eztwain4.dll
DIB_Equal                                           c:\windows\system32\eztwain4.dll
DIB_ErrorDiffuse                                    c:\windows\system32\eztwain4.dll
DIB_FilePageCount                                   c:\windows\system32\eztwain4.dll
DIB_Fill                                            c:\windows\system32\eztwain4.dll
DIB_FillRectWithColor                               c:\windows\system32\eztwain4.dll
DIB_FillRectWithColorAlpha                           c:\windows\system32\eztwain4.dll
DIB_FindAdaptiveGlobalThreshold                           c:\windows\system32\eztwain4.dll
DIB_FlipHorizontal                                  c:\windows\system32\eztwain4.dll
DIB_FlipVertical                                    c:\windows\system32\eztwain4.dll
DIB_FormatOfBuffer                                  c:\windows\system32\eztwain4.dll
DIB_FormatOfFile                                    c:\windows\system32\eztwain4.dll
DIB_ForwardDCT                                      c:\windows\system32\eztwain4.dll
DIB_Free                                            c:\windows\system32\eztwain4.dll
DIB_FreeArray                                       c:\windows\system32\eztwain4.dll
DIB_FromBitmap                                      c:\windows\system32\eztwain4.dll
DIB_FromClipboard                                   c:\windows\system32\eztwain4.dll
DIB_GetBrightRects                                  c:\windows\system32\eztwain4.dll
DIB_GetCropRect                                     c:\windows\system32\eztwain4.dll
DIB_GetFilePageCount                                c:\windows\system32\eztwain4.dll
DIB_GetFromClipboard                                c:\windows\system32\eztwain4.dll
DIB_GetHistogram                                    c:\windows\system32\eztwain4.dll
DIB_GetPrinterName                                  c:\windows\system32\eztwain4.dll
DIB_GetPrintToFit                                   c:\windows\system32\eztwain4.dll
DIB_GetTextColor                                    c:\windows\system32\eztwain4.dll
DIB_Height                                          c:\windows\system32\eztwain4.dll
DIB_HorizontalCorrelation                           c:\windows\system32\eztwain4.dll
DIB_HorizontalDifference                            c:\windows\system32\eztwain4.dll
DIB_InPlaceRotate90                                 c:\windows\system32\eztwain4.dll
DIB_InUseCount                                      c:\windows\system32\eztwain4.dll
DIB_IsBlank                                         c:\windows\system32\eztwain4.dll
DIB_IsChocolate                                     c:\windows\system32\eztwain4.dll
DIB_IsCompressed                                    c:\windows\system32\eztwain4.dll
DIB_IsValid                                         c:\windows\system32\eztwain4.dll
DIB_IsVanilla                                       c:\windows\system32\eztwain4.dll
DIB_IsViewOpen                                      c:\windows\system32\eztwain4.dll
DIB_LoadArrayFromBuffer                             c:\windows\system32\eztwain4.dll
DIB_LoadArrayFromFilename                           c:\windows\system32\eztwain4.dll
DIB_LoadFaxData                                     c:\windows\system32\eztwain4.dll
DIB_LoadFromBuffer                                  c:\windows\system32\eztwain4.dll
DIB_LoadFromFilename                                c:\windows\system32\eztwain4.dll
DIB_LoadPage                                        c:\windows\system32\eztwain4.dll
DIB_LoadPageFromBuffer                              c:\windows\system32\eztwain4.dll
DIB_LoadPagesFromFilename                           c:\windows\system32\eztwain4.dll
DIB_MaxError                                        c:\windows\system32\eztwain4.dll
DIB_MeanFilter                                      c:\windows\system32\eztwain4.dll
DIB_MedianFilter                                    c:\windows\system32\eztwain4.dll
DIB_Negate                                          c:\windows\system32\eztwain4.dll
DIB_OpenInDC                                        c:\windows\system32\eztwain4.dll
DIB_PageCountOfBuffer                               c:\windows\system32\eztwain4.dll
DIB_PaintMask                                       c:\windows\system32\eztwain4.dll
DIB_PhysicalHeight                                  c:\windows\system32\eztwain4.dll
DIB_PhysicalWidth                                   c:\windows\system32\eztwain4.dll
DIB_PixelType                                       c:\windows\system32\eztwain4.dll
DIB_Posterize                                       c:\windows\system32\eztwain4.dll
DIB_Print                                           c:\windows\system32\eztwain4.dll
DIB_PrintArray                                      c:\windows\system32\eztwain4.dll
DIB_PrinterName                                     c:\windows\system32\eztwain4.dll
DIB_PrintFile                                       c:\windows\system32\eztwain4.dll
DIB_PrintJobBegin                                   c:\windows\system32\eztwain4.dll
DIB_PrintJobEnd                                     c:\windows\system32\eztwain4.dll
DIB_PrintNoPrompt                                   c:\windows\system32\eztwain4.dll
DIB_PrintPage                                       c:\windows\system32\eztwain4.dll
DIB_ProjectColumns                                  c:\windows\system32\eztwain4.dll
DIB_ProjectRows                                     c:\windows\system32\eztwain4.dll
DIB_PutOnClipboard                                  c:\windows\system32\eztwain4.dll
DIB_ReadData                                        c:\windows\system32\eztwain4.dll
DIB_ReadPixelChannel                                c:\windows\system32\eztwain4.dll
DIB_ReadPixelGray                                   c:\windows\system32\eztwain4.dll
DIB_ReadPixelRGB                                    c:\windows\system32\eztwain4.dll
DIB_ReadRow                                         c:\windows\system32\eztwain4.dll
DIB_ReadRowChannel                                  c:\windows\system32\eztwain4.dll
DIB_ReadRowGray                                     c:\windows\system32\eztwain4.dll
DIB_ReadRowRGB                                      c:\windows\system32\eztwain4.dll
DIB_ReadRowSafe                                     c:\windows\system32\eztwain4.dll
DIB_ReadRowSample                                   c:\windows\system32\eztwain4.dll
DIB_RegionCopy                                      c:\windows\system32\eztwain4.dll
DIB_Resample                                        c:\windows\system32\eztwain4.dll
DIB_ResetTextDrawing                                c:\windows\system32\eztwain4.dll
DIB_Resize                                          c:\windows\system32\eztwain4.dll
DIB_Rotate180                                       c:\windows\system32\eztwain4.dll
DIB_Rotate90                                        c:\windows\system32\eztwain4.dll
DIB_RowBytes                                        c:\windows\system32\eztwain4.dll
DIB_SamplesPerPixel                                 c:\windows\system32\eztwain4.dll
DIB_ScaledCopy                                      c:\windows\system32\eztwain4.dll
DIB_ScaleToGray                                     c:\windows\system32\eztwain4.dll
DIB_SelectPageToLoad                                c:\windows\system32\eztwain4.dll
DIB_SetColorCount                                   c:\windows\system32\eztwain4.dll
DIB_SetColorModel                                   c:\windows\system32\eztwain4.dll
DIB_SetColorTableRGB                                c:\windows\system32\eztwain4.dll
DIB_SetConversionColorCount                           c:\windows\system32\eztwain4.dll
DIB_SetConversionThreshold                           c:\windows\system32\eztwain4.dll
DIB_SetGrayColorTable                               c:\windows\system32\eztwain4.dll
DIB_SetNextPrintJobPageCount                           c:\windows\system32\eztwain4.dll
DIB_SetPrintToFit                                   c:\windows\system32\eztwain4.dll
DIB_SetResolution                                   c:\windows\system32\eztwain4.dll
DIB_SetResolutionInt                                c:\windows\system32\eztwain4.dll
DIB_SetTextAngle                                    c:\windows\system32\eztwain4.dll
DIB_SetTextBackgroundColor                           c:\windows\system32\eztwain4.dll
DIB_SetTextColor                                    c:\windows\system32\eztwain4.dll
DIB_SetTextFace                                     c:\windows\system32\eztwain4.dll
DIB_SetTextFormat                                   c:\windows\system32\eztwain4.dll
DIB_SetTextHeight                                   c:\windows\system32\eztwain4.dll
DIB_SetViewImage                                    c:\windows\system32\eztwain4.dll
DIB_SetViewOption                                   c:\windows\system32\eztwain4.dll
DIB_SimpleThreshold                                 c:\windows\system32\eztwain4.dll
DIB_Size                                            c:\windows\system32\eztwain4.dll
DIB_SkewByDegrees                                   c:\windows\system32\eztwain4.dll
DIB_SmartThreshold                                  c:\windows\system32\eztwain4.dll
DIB_Smooth                                          c:\windows\system32\eztwain4.dll
DIB_Sobel                                           c:\windows\system32\eztwain4.dll
DIB_SpecifyPrinter                                  c:\windows\system32\eztwain4.dll
DIB_SwapRedBlue                                     c:\windows\system32\eztwain4.dll
DIB_TextColor                                       c:\windows\system32\eztwain4.dll
DIB_Thumbnail                                       c:\windows\system32\eztwain4.dll
DIB_ToDibSection                                    c:\windows\system32\eztwain4.dll
DIB_VerticalCorrelation                             c:\windows\system32\eztwain4.dll
DIB_View                                            c:\windows\system32\eztwain4.dll
DIB_ViewClose                                       c:\windows\system32\eztwain4.dll
DIB_Width                                           c:\windows\system32\eztwain4.dll
DIB_WriteArrayToBuffer                              c:\windows\system32\eztwain4.dll
DIB_WriteArrayToFilename                            c:\windows\system32\eztwain4.dll
DIB_WriteRow                                        c:\windows\system32\eztwain4.dll
DIB_WriteRowChannel                                 c:\windows\system32\eztwain4.dll
DIB_WriteRowSafe                                    c:\windows\system32\eztwain4.dll
DIB_WriteRowSample                                  c:\windows\system32\eztwain4.dll
DIB_WriteToBuffer                                   c:\windows\system32\eztwain4.dll
DIB_WriteToFilename                                 c:\windows\system32\eztwain4.dll
DIB_XResolution                                     c:\windows\system32\eztwain4.dll
DIB_XResolutionInt                                  c:\windows\system32\eztwain4.dll
DIB_YResolution                                     c:\windows\system32\eztwain4.dll
DIB_YResolutionInt                                  c:\windows\system32\eztwain4.dll
DOC_AppendImage                                     c:\windows\system32\eztwain4.dll
DOC_CreateEmpty                                     c:\windows\system32\eztwain4.dll
DOC_CurPos                                          c:\windows\system32\eztwain4.dll
DOC_DeleteImage                                     c:\windows\system32\eztwain4.dll
DOC_DeleteImages                                    c:\windows\system32\eztwain4.dll
DOC_Destroy                                         c:\windows\system32\eztwain4.dll
DOC_ExtractImages                                   c:\windows\system32\eztwain4.dll
DOC_Filename                                        c:\windows\system32\eztwain4.dll
DOC_Image                                           c:\windows\system32\eztwain4.dll
DOC_ImageCount                                      c:\windows\system32\eztwain4.dll
DOC_InsertImage                                     c:\windows\system32\eztwain4.dll
DOC_InsertImageArray                                c:\windows\system32\eztwain4.dll
DOC_IsModified                                      c:\windows\system32\eztwain4.dll
DOC_MoveImage                                       c:\windows\system32\eztwain4.dll
DOC_OpenForUpdate                                   c:\windows\system32\eztwain4.dll
DOC_OpenReadOnly                                    c:\windows\system32\eztwain4.dll
DOC_Reset                                           c:\windows\system32\eztwain4.dll
DOC_Save                                            c:\windows\system32\eztwain4.dll
DOC_SaveAs                                          c:\windows\system32\eztwain4.dll
DOC_SetCurPos                                       c:\windows\system32\eztwain4.dll
DOC_SetImage                                        c:\windows\system32\eztwain4.dll
DOC_SetModified                                     c:\windows\system32\eztwain4.dll
DOC_WriteToFile                                     c:\windows\system32\eztwain4.dll
OCR_ClearText                                       c:\windows\system32\eztwain4.dll
OCR_EngineName                                      c:\windows\system32\eztwain4.dll
OCR_GetAutoRotatePagesToPDF                           c:\windows\system32\eztwain4.dll
OCR_GetCharPositions                                c:\windows\system32\eztwain4.dll
OCR_GetCharSizes                                    c:\windows\system32\eztwain4.dll
OCR_GetResolution                                   c:\windows\system32\eztwain4.dll
OCR_GetText                                         c:\windows\system32\eztwain4.dll
OCR_IsAvailable                                     c:\windows\system32\eztwain4.dll
OCR_IsEngineAvailable                               c:\windows\system32\eztwain4.dll
OCR_RecognizeDib                                    c:\windows\system32\eztwain4.dll
OCR_RecognizeDibZone                                c:\windows\system32\eztwain4.dll
OCR_SelectDefaultEngine                             c:\windows\system32\eztwain4.dll
OCR_SelectedEngine                                  c:\windows\system32\eztwain4.dll
OCR_SelectEngine                                    c:\windows\system32\eztwain4.dll
OCR_SetAutoRotatePagesToPDF                           c:\windows\system32\eztwain4.dll
OCR_SetEngineKey                                    c:\windows\system32\eztwain4.dll
OCR_SetEnginePath                                   c:\windows\system32\eztwain4.dll
OCR_SetLineBreak                                    c:\windows\system32\eztwain4.dll
OCR_Text                                            c:\windows\system32\eztwain4.dll
OCR_TextLength                                      c:\windows\system32\eztwain4.dll
OCR_TextOrientation                                 c:\windows\system32\eztwain4.dll
OCR_Version                                         c:\windows\system32\eztwain4.dll
OCR_WritePage                                       c:\windows\system32\eztwain4.dll
OCR_WriteTextToPDF                                  c:\windows\system32\eztwain4.dll
PDF_DocumentProperty                                c:\windows\system32\eztwain4.dll
PDF_DrawInvisibleText                               c:\windows\system32\eztwain4.dll
PDF_DrawText                                        c:\windows\system32\eztwain4.dll
PDF_GetAutoSearchable                               c:\windows\system32\eztwain4.dll
PDF_GetCompression                                  c:\windows\system32\eztwain4.dll
PDF_GetDocumentProperty                             c:\windows\system32\eztwain4.dll
PDF_GetPDFACompliance                               c:\windows\system32\eztwain4.dll
PDF_GetPermissions                                  c:\windows\system32\eztwain4.dll
PDF_GetTextVisible                                  c:\windows\system32\eztwain4.dll
PDF_IsEncrypted                                     c:\windows\system32\eztwain4.dll
PDF_IsOneOfOurs                                     c:\windows\system32\eztwain4.dll
PDF_SelectedPageSize                                c:\windows\system32\eztwain4.dll
PDF_SelectPageSize                                  c:\windows\system32\eztwain4.dll
PDF_SetAuthor                                       c:\windows\system32\eztwain4.dll
PDF_SetAutoSearchable                               c:\windows\system32\eztwain4.dll
PDF_SetCompression                                  c:\windows\system32\eztwain4.dll
PDF_SetCreator                                      c:\windows\system32\eztwain4.dll
PDF_SetKeywords                                     c:\windows\system32\eztwain4.dll
PDF_SetOpenPassword                                 c:\windows\system32\eztwain4.dll
PDF_SetOwnerPassword                                c:\windows\system32\eztwain4.dll
PDF_SetPDFACompliance                               c:\windows\system32\eztwain4.dll
PDF_SetPermissions                                  c:\windows\system32\eztwain4.dll
PDF_SetSubject                                      c:\windows\system32\eztwain4.dll
PDF_SetTextHorizontalScaling                           c:\windows\system32\eztwain4.dll
PDF_SetTextSize                                     c:\windows\system32\eztwain4.dll
PDF_SetTextVisible                                  c:\windows\system32\eztwain4.dll
PDF_SetTitle                                        c:\windows\system32\eztwain4.dll
PDF_SetUserPassword                                 c:\windows\system32\eztwain4.dll
PDF_WriteOcrText                                    c:\windows\system32\eztwain4.dll
TWAIN_AbortAllPendingXfers                           c:\windows\system32\eztwain4.dll
TWAIN_Acquire                                       c:\windows\system32\eztwain4.dll
TWAIN_AcquireCompressed                             c:\windows\system32\eztwain4.dll
TWAIN_AcquireCount                                  c:\windows\system32\eztwain4.dll
TWAIN_AcquiredFileCount                             c:\windows\system32\eztwain4.dll
TWAIN_AcquireFile                                   c:\windows\system32\eztwain4.dll
TWAIN_AcquireImagesToFiles                           c:\windows\system32\eztwain4.dll
TWAIN_AcquireMemoryBlock                            c:\windows\system32\eztwain4.dll
TWAIN_AcquireMultipage                              c:\windows\system32\eztwain4.dll
TWAIN_AcquireMultipageFile                           c:\windows\system32\eztwain4.dll
TWAIN_AcquirePagesToFiles                           c:\windows\system32\eztwain4.dll
TWAIN_AcquireToArray                                c:\windows\system32\eztwain4.dll
TWAIN_AcquireToFilename                             c:\windows\system32\eztwain4.dll
TWAIN_ApplicationLicense                            c:\windows\system32\eztwain4.dll
TWAIN_AutoClickButton                               c:\windows\system32\eztwain4.dll
TWAIN_BeginAcquireMemory                            c:\windows\system32\eztwain4.dll
TWAIN_BeginMultipageFile                            c:\windows\system32\eztwain4.dll
TWAIN_BlankDiscardCount                             c:\windows\system32\eztwain4.dll
TWAIN_Blocked                                       c:\windows\system32\eztwain4.dll
TWAIN_BreakModalLoop                                c:\windows\system32\eztwain4.dll
TWAIN_BuildName                                     c:\windows\system32\eztwain4.dll
TWAIN_CanDoDuplex                                   c:\windows\system32\eztwain4.dll
TWAIN_ClearAutoCropSize                             c:\windows\system32\eztwain4.dll
TWAIN_ClearError                                    c:\windows\system32\eztwain4.dll
TWAIN_CloseSource                                   c:\windows\system32\eztwain4.dll
TWAIN_CloseSourceManager                            c:\windows\system32\eztwain4.dll
TWAIN_Compression                                   c:\windows\system32\eztwain4.dll
TWAIN_CustomData                                    c:\windows\system32\eztwain4.dll
TWAIN_DefaultSourceName                             c:\windows\system32\eztwain4.dll
TWAIN_DibWritePage                                  c:\windows\system32\eztwain4.dll
TWAIN_DisableExtendedInfo                           c:\windows\system32\eztwain4.dll
TWAIN_DisableParent                                 c:\windows\system32\eztwain4.dll
TWAIN_DisableSource                                 c:\windows\system32\eztwain4.dll
TWAIN_DoSettingsDialog                              c:\windows\system32\eztwain4.dll
TWAIN_DS                                            c:\windows\system32\eztwain4.dll
TWAIN_EasyBuild                                     c:\windows\system32\eztwain4.dll
TWAIN_EasyVersion                                   c:\windows\system32\eztwain4.dll
TWAIN_EmptyMessageQueue                             c:\windows\system32\eztwain4.dll
TWAIN_EnableDuplex                                  c:\windows\system32\eztwain4.dll
TWAIN_EnableExtendedInfo                            c:\windows\system32\eztwain4.dll
TWAIN_EnableSource                                  c:\windows\system32\eztwain4.dll
TWAIN_EnableSourceUiOnly                            c:\windows\system32\eztwain4.dll
TWAIN_EndAcquireMemory                              c:\windows\system32\eztwain4.dll
TWAIN_EndMultipageFile                              c:\windows\system32\eztwain4.dll
TWAIN_EndXfer                                       c:\windows\system32\eztwain4.dll
TWAIN_ErrorBox                                      c:\windows\system32\eztwain4.dll
TWAIN_ExtendedInfoFloat                             c:\windows\system32\eztwain4.dll
TWAIN_ExtendedInfoInt                               c:\windows\system32\eztwain4.dll
TWAIN_ExtendedInfoItemCount                           c:\windows\system32\eztwain4.dll
TWAIN_ExtendedInfoItemType                           c:\windows\system32\eztwain4.dll
TWAIN_ExtendedInfoString                            c:\windows\system32\eztwain4.dll
TWAIN_ExtensionFromFormat                           c:\windows\system32\eztwain4.dll
TWAIN_FileCopy                                      c:\windows\system32\eztwain4.dll
TWAIN_Fix32ToFloat                                  c:\windows\system32\eztwain4.dll
TWAIN_FormatFromExtension                           c:\windows\system32\eztwain4.dll
TWAIN_FormatOfFile                                  c:\windows\system32\eztwain4.dll
TWAIN_FormatVersion                                 c:\windows\system32\eztwain4.dll
TWAIN_Get                                           c:\windows\system32\eztwain4.dll
TWAIN_GetAutoContrast                               c:\windows\system32\eztwain4.dll
TWAIN_GetAutoCrop                                   c:\windows\system32\eztwain4.dll
TWAIN_GetAutoCropOptions                            c:\windows\system32\eztwain4.dll
TWAIN_GetAutoDeskew                                 c:\windows\system32\eztwain4.dll
TWAIN_GetAutoNegate                                 c:\windows\system32\eztwain4.dll
TWAIN_GetAutoOCR                                    c:\windows\system32\eztwain4.dll
TWAIN_GetBitDepth                                   c:\windows\system32\eztwain4.dll
TWAIN_GetBlankPageMode                              c:\windows\system32\eztwain4.dll
TWAIN_GetBlankPageThreshold                           c:\windows\system32\eztwain4.dll
TWAIN_GetBuildName                                  c:\windows\system32\eztwain4.dll
TWAIN_GetCapBool                                    c:\windows\system32\eztwain4.dll
TWAIN_GetCapCurrent                                 c:\windows\system32\eztwain4.dll
TWAIN_GetCapFix32                                   c:\windows\system32\eztwain4.dll
TWAIN_GetCapUint16                                  c:\windows\system32\eztwain4.dll
TWAIN_GetCapUint32                                  c:\windows\system32\eztwain4.dll
TWAIN_GetConditionCode                              c:\windows\system32\eztwain4.dll
TWAIN_GetCurrent                                    c:\windows\system32\eztwain4.dll
TWAIN_GetCurrentResolution                           c:\windows\system32\eztwain4.dll
TWAIN_GetCurrentThreshold                           c:\windows\system32\eztwain4.dll
TWAIN_GetCurrentUnits                               c:\windows\system32\eztwain4.dll
TWAIN_GetCustomData                                 c:\windows\system32\eztwain4.dll
TWAIN_GetCustomDataToFile                           c:\windows\system32\eztwain4.dll
TWAIN_GetDefault                                    c:\windows\system32\eztwain4.dll
TWAIN_GetDefaultImageLayout                           c:\windows\system32\eztwain4.dll
TWAIN_GetDefaultSourceName                           c:\windows\system32\eztwain4.dll
TWAIN_GetDisableParent                              c:\windows\system32\eztwain4.dll
TWAIN_GetDuplexSupport                              c:\windows\system32\eztwain4.dll
TWAIN_GetExtendedInfoFrame                           c:\windows\system32\eztwain4.dll
TWAIN_GetExtendedInfoString                           c:\windows\system32\eztwain4.dll
TWAIN_GetExtensionFromFormat                           c:\windows\system32\eztwain4.dll
TWAIN_GetFileAppendFlag                             c:\windows\system32\eztwain4.dll
TWAIN_GetHideUI                                     c:\windows\system32\eztwain4.dll
TWAIN_GetImageInfo                                  c:\windows\system32\eztwain4.dll
TWAIN_GetImageLayout                                c:\windows\system32\eztwain4.dll
TWAIN_GetImageReadyTimeout                           c:\windows\system32\eztwain4.dll
TWAIN_GetIndicators                                 c:\windows\system32\eztwain4.dll
TWAIN_GetJpegQuality                                c:\windows\system32\eztwain4.dll
TWAIN_GetLastErrorText                              c:\windows\system32\eztwain4.dll
TWAIN_GetLastViewPosition                           c:\windows\system32\eztwain4.dll
TWAIN_GetLazyWriting                                c:\windows\system32\eztwain4.dll
TWAIN_GetMultipageFormat                            c:\windows\system32\eztwain4.dll
TWAIN_GetMultiTransfer                              c:\windows\system32\eztwain4.dll
TWAIN_GetNextSourceName                             c:\windows\system32\eztwain4.dll
TWAIN_GetPaperDimensions                            c:\windows\system32\eztwain4.dll
TWAIN_GetPixelType                                  c:\windows\system32\eztwain4.dll
TWAIN_GetQAMode                                     c:\windows\system32\eztwain4.dll
TWAIN_GetResultCode                                 c:\windows\system32\eztwain4.dll
TWAIN_GetSaveFormat                                 c:\windows\system32\eztwain4.dll
TWAIN_GetSourceIdentity                             c:\windows\system32\eztwain4.dll
TWAIN_GetSourceList                                 c:\windows\system32\eztwain4.dll
TWAIN_GetSourceName                                 c:\windows\system32\eztwain4.dll
TWAIN_GetStopOnEmpty                                c:\windows\system32\eztwain4.dll
TWAIN_GetTiffCompression                            c:\windows\system32\eztwain4.dll
TWAIN_GetTiffStripSize                              c:\windows\system32\eztwain4.dll
TWAIN_GetTiffTagAscii                               c:\windows\system32\eztwain4.dll
TWAIN_GetXResolution                                c:\windows\system32\eztwain4.dll
TWAIN_GetYResolution                                c:\windows\system32\eztwain4.dll
TWAIN_HasControllableUI                             c:\windows\system32\eztwain4.dll
TWAIN_HasFeeder                                     c:\windows\system32\eztwain4.dll
TWAIN_InHouseApplicationLicense                           c:\windows\system32\eztwain4.dll
TWAIN_IsAutoFeedOn                                  c:\windows\system32\eztwain4.dll
TWAIN_IsAvailable                                   c:\windows\system32\eztwain4.dll
TWAIN_IsCapAvailable                                c:\windows\system32\eztwain4.dll
TWAIN_IsDcxAvailable                                c:\windows\system32\eztwain4.dll
TWAIN_IsDone                                        c:\windows\system32\eztwain4.dll
TWAIN_IsDuplexEnabled                               c:\windows\system32\eztwain4.dll
TWAIN_IsExtendedInfoEnabled                           c:\windows\system32\eztwain4.dll
TWAIN_IsExtendedInfoSupported                           c:\windows\system32\eztwain4.dll
TWAIN_IsFeederLoaded                                c:\windows\system32\eztwain4.dll
TWAIN_IsFeederSelected                              c:\windows\system32\eztwain4.dll
TWAIN_IsFileExtensionAvailable                           c:\windows\system32\eztwain4.dll
TWAIN_IsFormatAvailable                             c:\windows\system32\eztwain4.dll
TWAIN_IsGifAvailable                                c:\windows\system32\eztwain4.dll
TWAIN_IsJpegAvailable                               c:\windows\system32\eztwain4.dll
TWAIN_IsMultipageAvailable                           c:\windows\system32\eztwain4.dll
TWAIN_IsMultipageFileOpen                           c:\windows\system32\eztwain4.dll
TWAIN_IsPaperDetectable                             c:\windows\system32\eztwain4.dll
TWAIN_IsPdfAvailable                                c:\windows\system32\eztwain4.dll
TWAIN_IsPngAvailable                                c:\windows\system32\eztwain4.dll
TWAIN_IsTiffAvailable                               c:\windows\system32\eztwain4.dll
TWAIN_IsViewOpen                                    c:\windows\system32\eztwain4.dll
TWAIN_LastErrorCode                                 c:\windows\system32\eztwain4.dll
TWAIN_LastErrorText                                 c:\windows\system32\eztwain4.dll
TWAIN_LastOutputFile                                c:\windows\system32\eztwain4.dll
TWAIN_LoadSourceManager                             c:\windows\system32\eztwain4.dll
TWAIN_LogFile                                       c:\windows\system32\eztwain4.dll
TWAIN_LogFileName                                   c:\windows\system32\eztwain4.dll
TWAIN_Mgr                                           c:\windows\system32\eztwain4.dll
TWAIN_MultipageCount                                c:\windows\system32\eztwain4.dll
TWAIN_NextSourceName                                c:\windows\system32\eztwain4.dll
TWAIN_OpenDefaultSource                             c:\windows\system32\eztwain4.dll
TWAIN_OpenSource                                    c:\windows\system32\eztwain4.dll
TWAIN_OpenSourceManager                             c:\windows\system32\eztwain4.dll
TWAIN_PagesInFile                                   c:\windows\system32\eztwain4.dll
TWAIN_PixelFlavor                                   c:\windows\system32\eztwain4.dll
TWAIN_PlanarChunky                                  c:\windows\system32\eztwain4.dll
TWAIN_PrintFile                                     c:\windows\system32\eztwain4.dll
TWAIN_ProbablyHasFlatbed                            c:\windows\system32\eztwain4.dll
TWAIN_PromptForOpenFilename                           c:\windows\system32\eztwain4.dll
TWAIN_PromptToContinue                              c:\windows\system32\eztwain4.dll
TWAIN_QuerySupport                                  c:\windows\system32\eztwain4.dll
TWAIN_RecordError                                   c:\windows\system32\eztwain4.dll
TWAIN_RegisterApp                                   c:\windows\system32\eztwain4.dll
TWAIN_RenewTrialLicense                             c:\windows\system32\eztwain4.dll
TWAIN_ReportLastError                               c:\windows\system32\eztwain4.dll
TWAIN_ReportLeaks                                   c:\windows\system32\eztwain4.dll
TWAIN_Reset                                         c:\windows\system32\eztwain4.dll
TWAIN_ResetAll                                      c:\windows\system32\eztwain4.dll
TWAIN_ResetColorResponse                            c:\windows\system32\eztwain4.dll
TWAIN_ResetGrayResponse                             c:\windows\system32\eztwain4.dll
TWAIN_ResetImageLayout                              c:\windows\system32\eztwain4.dll
TWAIN_ResetRegion                                   c:\windows\system32\eztwain4.dll
TWAIN_ResetTiffTags                                 c:\windows\system32\eztwain4.dll
TWAIN_SelectFeeder                                  c:\windows\system32\eztwain4.dll
TWAIN_SelectImageSource                             c:\windows\system32\eztwain4.dll
TWAIN_SelfTest                                      c:\windows\system32\eztwain4.dll
TWAIN_Set                                           c:\windows\system32\eztwain4.dll
TWAIN_SetApplicationKey                             c:\windows\system32\eztwain4.dll
TWAIN_SetAppTitle                                   c:\windows\system32\eztwain4.dll
TWAIN_SetAutoBright                                 c:\windows\system32\eztwain4.dll
TWAIN_SetAutoContrast                               c:\windows\system32\eztwain4.dll
TWAIN_SetAutoCrop                                   c:\windows\system32\eztwain4.dll
TWAIN_SetAutoCropOptions                            c:\windows\system32\eztwain4.dll
TWAIN_SetAutoCropSize                               c:\windows\system32\eztwain4.dll
TWAIN_SetAutoCropSizeRange                           c:\windows\system32\eztwain4.dll
TWAIN_SetAutoDeskew                                 c:\windows\system32\eztwain4.dll
TWAIN_SetAutoFeed                                   c:\windows\system32\eztwain4.dll
TWAIN_SetAutoNegate                                 c:\windows\system32\eztwain4.dll
TWAIN_SetAutoOCR                                    c:\windows\system32\eztwain4.dll
TWAIN_SetAutoScan                                   c:\windows\system32\eztwain4.dll
TWAIN_SetBitDepth                                   c:\windows\system32\eztwain4.dll
TWAIN_SetBlankPageMode                              c:\windows\system32\eztwain4.dll
TWAIN_SetBlankPageThreshold                           c:\windows\system32\eztwain4.dll
TWAIN_SetBrightness                                 c:\windows\system32\eztwain4.dll
TWAIN_SetCapability                                 c:\windows\system32\eztwain4.dll
TWAIN_SetCapBool                                    c:\windows\system32\eztwain4.dll
TWAIN_SetCapFix32                                   c:\windows\system32\eztwain4.dll
TWAIN_SetCapFix32R                                  c:\windows\system32\eztwain4.dll
TWAIN_SetCapOneValue                                c:\windows\system32\eztwain4.dll
TWAIN_SetCapString                                  c:\windows\system32\eztwain4.dll
TWAIN_SetColorResponse                              c:\windows\system32\eztwain4.dll
TWAIN_SetCompression                                c:\windows\system32\eztwain4.dll
TWAIN_SetContrast                                   c:\windows\system32\eztwain4.dll
TWAIN_SetCurrentPixelType                           c:\windows\system32\eztwain4.dll
TWAIN_SetCurrentResolution                           c:\windows\system32\eztwain4.dll
TWAIN_SetCurrentUnits                               c:\windows\system32\eztwain4.dll
TWAIN_SetCustomData                                 c:\windows\system32\eztwain4.dll
TWAIN_SetCustomDataFromFile                           c:\windows\system32\eztwain4.dll
TWAIN_SetDefaultScanAnotherPagePrompt                           c:\windows\system32\eztwain4.dll
TWAIN_SetFileAppendFlag                             c:\windows\system32\eztwain4.dll
TWAIN_SetFrame                                      c:\windows\system32\eztwain4.dll
TWAIN_SetGamma                                      c:\windows\system32\eztwain4.dll
TWAIN_SetGrayResponse                               c:\windows\system32\eztwain4.dll
TWAIN_SetHideUI                                     c:\windows\system32\eztwain4.dll
TWAIN_SetHighlight                                  c:\windows\system32\eztwain4.dll
TWAIN_SetImageLayout                                c:\windows\system32\eztwain4.dll
TWAIN_SetImageReadyTimeout                           c:\windows\system32\eztwain4.dll
TWAIN_SetIndicators                                 c:\windows\system32\eztwain4.dll
TWAIN_SetJpegQuality                                c:\windows\system32\eztwain4.dll
TWAIN_SetLazyWriting                                c:\windows\system32\eztwain4.dll
TWAIN_SetLightPath                                  c:\windows\system32\eztwain4.dll
TWAIN_SetLogFolder                                  c:\windows\system32\eztwain4.dll
TWAIN_SetLogName                                    c:\windows\system32\eztwain4.dll
TWAIN_SetMultipageFormat                            c:\windows\system32\eztwain4.dll
TWAIN_SetMultiTransfer                              c:\windows\system32\eztwain4.dll
TWAIN_SetOutputPageCount                            c:\windows\system32\eztwain4.dll
TWAIN_SetPaperSize                                  c:\windows\system32\eztwain4.dll
TWAIN_SetPdfAuthor                                  c:\windows\system32\eztwain4.dll
TWAIN_SetPdfCreator                                 c:\windows\system32\eztwain4.dll
TWAIN_SetPdfKeywords                                c:\windows\system32\eztwain4.dll
TWAIN_SetPdfSubject                                 c:\windows\system32\eztwain4.dll
TWAIN_SetPdfTitle                                   c:\windows\system32\eztwain4.dll
TWAIN_SetPixelFlavor                                c:\windows\system32\eztwain4.dll
TWAIN_SetPixelType                                  c:\windows\system32\eztwain4.dll
TWAIN_SetPlanarChunky                               c:\windows\system32\eztwain4.dll
TWAIN_SetQAMode                                     c:\windows\system32\eztwain4.dll
TWAIN_SetRegion                                     c:\windows\system32\eztwain4.dll
TWAIN_SetResolution                                 c:\windows\system32\eztwain4.dll
TWAIN_SetResolutionInt                              c:\windows\system32\eztwain4.dll
TWAIN_SetSaveFormat                                 c:\windows\system32\eztwain4.dll
TWAIN_SetScanAnotherPagePrompt                           c:\windows\system32\eztwain4.dll
TWAIN_SetShadow                                     c:\windows\system32\eztwain4.dll
TWAIN_SetStopOnEmpty                                c:\windows\system32\eztwain4.dll
TWAIN_SetThreshold                                  c:\windows\system32\eztwain4.dll
TWAIN_SetTiffCompression                            c:\windows\system32\eztwain4.dll
TWAIN_SetTiffDocumentName                           c:\windows\system32\eztwain4.dll
TWAIN_SetTiffImageDescription                           c:\windows\system32\eztwain4.dll
TWAIN_SetTiffStripSize                              c:\windows\system32\eztwain4.dll
TWAIN_SetTiffTagBytes                               c:\windows\system32\eztwain4.dll
TWAIN_SetTiffTagDouble                              c:\windows\system32\eztwain4.dll
TWAIN_SetTiffTagLong                                c:\windows\system32\eztwain4.dll
TWAIN_SetTiffTagRational                            c:\windows\system32\eztwain4.dll
TWAIN_SetTiffTagRationalArray                           c:\windows\system32\eztwain4.dll
TWAIN_SetTiffTagShort                               c:\windows\system32\eztwain4.dll
TWAIN_SetTiffTagString                              c:\windows\system32\eztwain4.dll
TWAIN_SetTiffTagUndefined                           c:\windows\system32\eztwain4.dll
TWAIN_SetTiled                                      c:\windows\system32\eztwain4.dll
TWAIN_SetUnits                                      c:\windows\system32\eztwain4.dll
TWAIN_SetViewOption                                 c:\windows\system32\eztwain4.dll
TWAIN_SetXferCount                                  c:\windows\system32\eztwain4.dll
TWAIN_SetXferMech                                   c:\windows\system32\eztwain4.dll
TWAIN_SetXResolution                                c:\windows\system32\eztwain4.dll
TWAIN_SetYResolution                                c:\windows\system32\eztwain4.dll
TWAIN_Shutdown                                      c:\windows\system32\eztwain4.dll
TWAIN_SingleMachineLicense                           c:\windows\system32\eztwain4.dll
TWAIN_SourceName                                    c:\windows\system32\eztwain4.dll
TWAIN_State                                         c:\windows\system32\eztwain4.dll
TWAIN_SupportsFileXfer                              c:\windows\system32\eztwain4.dll
TWAIN_SuppressErrorMessages                           c:\windows\system32\eztwain4.dll
TWAIN_Testing123                                    c:\windows\system32\eztwain4.dll
TWAIN_TiffTagAscii                                  c:\windows\system32\eztwain4.dll
TWAIN_Tiled                                         c:\windows\system32\eztwain4.dll
TWAIN_ToFix32                                       c:\windows\system32\eztwain4.dll
TWAIN_ToFix32R                                      c:\windows\system32\eztwain4.dll
TWAIN_UniversalLicense                              c:\windows\system32\eztwain4.dll
TWAIN_UnloadSourceManager                           c:\windows\system32\eztwain4.dll
TWAIN_UserClosedSource                              c:\windows\system32\eztwain4.dll
TWAIN_ViewClose                                     c:\windows\system32\eztwain4.dll
TWAIN_ViewFile                                      c:\windows\system32\eztwain4.dll
TWAIN_WritePageAndFree                              c:\windows\system32\eztwain4.dll
TWAIN_WriteToLog                                    c:\windows\system32\eztwain4.dll
TWAIN_XferMech                                      c:\windows\system32\eztwain4.dll
UPLOAD_AddCookie                                    c:\windows\system32\eztwain4.dll
UPLOAD_AddFormField                                 c:\windows\system32\eztwain4.dll
UPLOAD_AddHeader                                    c:\windows\system32\eztwain4.dll
UPLOAD_ClearResponse                                c:\windows\system32\eztwain4.dll
UPLOAD_DibsSeparatelyToURL                           c:\windows\system32\eztwain4.dll
UPLOAD_DibsToURL                                    c:\windows\system32\eztwain4.dll
UPLOAD_DibToURL                                     c:\windows\system32\eztwain4.dll
UPLOAD_EnableProgressBar                            c:\windows\system32\eztwain4.dll
UPLOAD_FilesToURL                                   c:\windows\system32\eztwain4.dll
UPLOAD_GetResponse                                  c:\windows\system32\eztwain4.dll
UPLOAD_IsAvailable                                  c:\windows\system32\eztwain4.dll
UPLOAD_IsEnabledProgressBar                           c:\windows\system32\eztwain4.dll
UPLOAD_MaxFiles                                     c:\windows\system32\eztwain4.dll
UPLOAD_Response                                     c:\windows\system32\eztwain4.dll
UPLOAD_ResponseLength                               c:\windows\system32\eztwain4.dll
UPLOAD_SetProxy                                     c:\windows\system32\eztwain4.dll
UPLOAD_Version                                      c:\windows\system32\eztwain4.dll

GLQUITAPP   Pub    L  .F.
GLQUITOPT   Pub    L  .F.
GLUSERID    Pub    L  .F.
GLAXSLEVEL  Pub    L  .F.
GLMENUOFF   Pub    L  .F.
GLTIPSTATE  Pub    L  .T.
GLPRODUCTION
            Pub    L  .F.
GLSTRTDEFA  Pub    C  "T:\DEVELOPMENT\FOXTEST\DCIDE"
GLSTRTPATH  Pub    C  "\DEVELOPMENT\FOXTEST\DCIDE;DBFS\;LABELS\;REPO
                      RTS\;UTILDRV\;"\DEVELOPMENT\FOXTEST\DCIDE\DBFS
                      \"\;\DEVELOPMENT\FOXTEST\DCIDE\DBFS\"
GLCLRUSRWIND
            Pub    N  1           (         1.00000000)
GLCLRUSRMNU
            Pub    N  2           (         2.00000000)
GLCLRMNUBAR
            Pub    N  3           (         3.00000000)
GLCLRMNUPOP
            Pub    N  4           (         4.00000000)
GLCLRDLG    Pub    N  5           (         5.00000000)
GLCLRALRTPOP
            Pub    N  12          (        12.00000000)
GLCLRDLGPOP
            Pub    N  6           (         6.00000000)
GLCLRALRT   Pub    N  7           (         7.00000000)
GLCLRWIND   Pub    N  8           (         8.00000000)
GLCLRPOP    Pub    N  9           (         9.00000000)
GLCLRBROW   Pub    N  10          (        10.00000000)
GLCLRRPRT   Pub    N  11          (        11.00000000)
GLDFWINBORD
            Pub    C  "SYSTEM"
GLRINGBELL  Pub    C  ""
GLSAVEENVT  Pub    L  .F.
GLLOCALDRV  Pub    C  ""\DEVELOPMENT\FOXTEST\DCIDE\"\"
GLSYSDEFA   Pub    C  ""\DEVELOPMENT\FOXTEST\DCIDE\"\"
GLFREEMEM   Pub    N  640         (       640.00000000)
GLSYSPATH   Pub    C  ""\DEVELOPMENT\FOXTEST\DCIDE\"\"
GLDATADRV1  Pub    C  ""\DEVELOPMENT\FOXTEST\DCIDE\DBFS\"\"
GLDATADRV2  Pub    C  ""\DEVELOPMENT\FOXTEST\DCIDE\DBFS\""
GLUTILDRV   Pub    C  ""\DEVELOPMENT\FOXTEST\DCIDE\"\"
GLDSKPRNDRV
            Pub    C  ""
GLXMITDRV   Pub    C  ""
GLASCFILEDRV
            Pub    C  ""
GLUPLOADDRV
            Pub    C  ""
GLACTIVEGET
            Pub    C  "N/W*"
GCUSERID    Priv   C  "spayton        "  startup
GCUSERNAME  Priv   C  "Scott Payton"  startup
GNACCESSLEVEL
            Priv   N  3           (         3.00000000)  startup
MAIN        Priv   O  FORM  startup
SPLASH      Priv   O  .NULL.  startup
LOGIN       Priv   O  .NULL.  startup
DATACENTER  Priv   O  LARGEFORMBASE  startup
XERROR      Priv   N  107         (       107.00000000)  pro2eror
XMSG        Priv   C  "Operator/operand type mismatch."  pro2eror
XCODE       Priv   C  "..."  pro2eror
XMODULE     Priv   C  "T:\DEVELOPMENT\FOXTEST\DCIDE\DCIDE.EXE"  pro2eror
XLINENO     Priv   N  80          (        80.00000000)  pro2eror
XPRINTER    Priv   C  "OFF"  pro2eror
XCONSOLE    Priv   C  "ON"  pro2eror
XDEVICE     Priv   C  "SCREEN"  pro2eror
XLASTKEY    Priv   N  113         (       113.00000000)  pro2eror
XCURDBF     Priv   C  ""  pro2eror
XGETFIELD   Priv   C  ""  pro2eror
XDFLTDRIVE  Priv   C  "T:"  pro2eror
XRUNMEM     Priv   C  "655360"  pro2eror
XPRNDEVICE  Priv   C  ""  pro2eror
XCURDIR     Priv   C  "\DEVELOPMENT\FOXTEST\DCIDE"  pro2eror
XTOPWIN     Priv   C  "FRMDATACENTERCENTRAL"  pro2eror
XLOCKED     Priv   C  ""  pro2eror
XMISSING    Priv   C  ""  pro2eror
NEWBUTTON   Priv   C  "Cancel"  pro2eror
OPSYS       Priv   C  "\<OS"  pro2eror
BUTTONOPT   Priv   C  "C"  pro2eror
LSTEXT      Priv   C  "2438106.TXT"  saverror
LMTEXT      Priv   C  "2438113.TXT"  saverror
   66 variables defined,    811 bytes used
16318 variables available

Print System Memory Variables

_ALIGNMENT  Pub    C  "LEFT"
_ASCIICOLS  Pub    N  80          (        80.00000000)
_ASCIIROWS  Pub    N  63          (        63.00000000)
_ASSIST     Pub    C  ""
_BEAUTIFY   Pub    C  "C:\PROGRAM FILES (X86)\MICROSOFT VISUAL FOXPR
                      O 9\BEAUTIFY.APP"
_BOX        Pub    L  .T.
_BROWSER    Pub    C  "C:\PROGRAM FILES (X86)\MICROSOFT VISUAL FOXPR
                      O 9\BROWSER.APP"
_BUILDER    Pub    C  "C:\PROGRAM FILES (X86)\MICROSOFT VISUAL FOXPR
                      O 9\BUILDER.APP"
_CALCMEM    Pub    N  0.00        (         0.00000000)
_CALCVALUE  Pub    N  0.00        (         0.00000000)
_CODESENSE  Pub    C  "C:\PROGRAM FILES (X86)\MICROSOFT VISUAL FOXPR
                      O 9\FOXCODE.APP"
_CONVERTER  Pub    C  "C:\PROGRAM FILES (X86)\MICROSOFT VISUAL FOXPR
                      O 9\CONVERT.APP"
_COVERAGE   Pub    C  "C:\PROGRAM FILES (X86)\MICROSOFT VISUAL FOXPR
                      O 9\COVERAGE.APP"
_CUROBJ     Pub    N  -1          (        -1.00000000)
_DBLCLICK   Pub    N  0.50        (         0.50000000)
_DIARYDATE  Pub    D  08/25/2015
_DOS        Pub    L  .F.
_FOXCODE    Pub    C  "C:\USERS\SCOTT\APPDATA\ROAMING\MICROSOFT\VISU
                      AL FOXPRO 9\FOXCODE.DBF"
_FOXDOC     Pub    C  ""
_FOXGRAPH   Pub    C  ""
_FOXREF     Pub    C  "C:\PROGRAM FILES (X86)\MICROSOFT VISUAL FOXPR
                      O 9\FOXREF.APP"
_FOXTASK    Pub    C  "C:\USERS\SCOTT\APPDATA\ROAMING\MICROSOFT\VISU
                      AL FOXPRO 9\FOXTASK.DBF"
_GALLERY    Pub    C  "C:\PROGRAM FILES (X86)\MICROSOFT VISUAL FOXPR
                      O 9\GALLERY.APP"
_GENGRAPH   Pub    C  "C:\PROGRAM FILES (X86)\MICROSOFT VISUAL FOXPR
                      O 9\WIZARDS\WZGRAPH.APP"
_GENHTML    Pub    C  "C:\PROGRAM FILES (X86)\MICROSOFT VISUAL FOXPR
                      O 9\GENHTML.PRG"
_GENMENU    Pub    C  "C:\PROGRAM FILES (X86)\MICROSOFT VISUAL FOXPR
                      O 9\GENMENU.FXP"
_GENPD      Pub    C  ""
_GENSCRN    Pub    C  ""
_GENXTAB    Pub    C  "C:\PROGRAM FILES (X86)\MICROSOFT VISUAL FOXPR
                      O 9\VFPXTAB.PRG"
_GETEXPR    Pub    C  ""
_INCLUDE    Pub    C  ""
_INCSEEK    Pub    N  0.50        (         0.50000000)
_INDENT     Pub    N  0           (         0.00000000)
_LMARGIN    Pub    N  0           (         0.00000000)
_MAC        Pub    L  .F.
_MENUDESIGNERPub    C  ""
_MLINE      Pub    N  33          (        33.00000000)
_OBJECTBROWSERPub    C  "C:\PROGRAM FILES (X86)\MICROSOFT VISUAL FOXPR
                      O 9\OBJECTBROWSER.APP"
_PADVANCE   Pub    C  "FORMFEED"
_PAGENO     Pub    N  12          (        12.00000000)
_PAGETOTAL  Pub    N  0           (         0.00000000)
_PBPAGE     Pub    N  1           (         1.00000000)
_PCOLNO     Pub    N  22          (        22.00000000)
_PCOPIES    Pub    N  1           (         1.00000000)
_PDRIVER    Pub    C  ""
_PDSETUP    Pub    C  ""
_PECODE     Pub    C  ""
_PEJECT     Pub    C  "NONE"
_PEPAGE     Pub    N  32767       (     32767.00000000)
_PLENGTH    Pub    N  66          (        66.00000000)
_PLINENO    Pub    N  9           (         9.00000000)
_PLOFFSET   Pub    N  0           (         0.00000000)
_PPITCH     Pub    C  "DEFAULT"
_PQUALITY   Pub    L  .F.
_PRETEXT    Pub    C  ""
_PSCODE     Pub    C  ""
_PSPACING   Pub    N  1           (         1.00000000)
_PWAIT      Pub    L  .F.
_REPORTBUILDERPub    C  "C:\PROGRAM FILES (X86)\MICROSOFT VISUAL FOXPR
                      O 9\REPORTBUILDER.APP"
_REPORTOUTPUTPub    C  "C:\PROGRAM FILES (X86)\MICROSOFT VISUAL FOXPR
                      O 9\REPORTOUTPUT.APP"
_REPORTPREVIEWPub    C  "C:\PROGRAM FILES (X86)\MICROSOFT VISUAL FO
 
Scott said:
I remember an "aversion" to using a form during the error routine, because some very bad things might have happened ...leaving you in a "hung state" in VFP.
I never learned this to be an issue in any VFP version.

If an error handler can show a window you define by DEFINE WINDOW, it can also show a normal form, in the end both are C++ TForm classes with a hwnd.
I'm doing an error handler at design time too, allowing me to see more than the native error message, eg. showing ASTACKINFO and allowing me to go into suspend and debug mode, too.

And it uses a self made extended messagebox and never failed because of being a form.

Bye, Olaf.
 
Sounds cool. Care to share it? I'm not averse to replacing what I have for something better.


Best Regards,
Scott
ATS, CDCE, CTIA, CTDC

"Everything should be made as simple as possible, and no simpler."[hammer]
 
Sorry, I see this just now. Actually I can't hand out the code 1:1, even though it's nothing super special, it's part of a framework, so copyrights apply.
Anyway, are you more interested in the form? I see the handler indeed uses a classic Messagebox to display the error message. The messages are typically quite lengthy, that's why it looks less like a standard Messagebox. And the different combinations of buttons are used depending on error type.

In fact it also shows non system errors, eg an info/warning about non valid values in a data entry form, like empty cardinal fields can have Yes/No buttons and the user reaction then is returned.

If you were more interested in the form I have to disappoint you. In fact a messagebox makes good sense as it reliably appears on top and many graphics driver have the option to center it on the right display in multi display scenarios.

Partial code, nonetheless:
Code:
#Define CRLF Chr(13)+Chr(10)

Procedure Errorhandler()
   Lparameters tnErrorNo, tcErrorMessage, tcCodeLine, tcErrorProgram,;
      tnLineNo, tnLineNo1, tlCalledManually

   =Aerror(laError)

   Local lcOldError
   lcOldError = On('ERROR')
   * prohibit further errors (only uncomment, when the handler itself is error free)
   * ON ERROR *

   Local lcCallstack, lnLevel, lcMessage, lnErrorType
   lcCallstack ="Callstack:"+CRLF

   For lnLevel=Astackinfo(laStackinfo)-1 To 1 Step -1
      lcCallstack = lcCallstack +'Level '+Transform(lnLevel)+ ':' ;
         + CRLF+ laStackinfo[lnLevel,4] + CRLF    ;
         + "in line "+Transform(laStackinfo[lnLevel,5]) +":" + CRLF    ;
         + laStackinfo[lnLevel,6] +CRLF+CRLF
   Endfor lnLevel

   lcMessage = "Error: " + tcErrorMessage+ CRLF + CRLF    ;
      + "Error No: " + Transform(tnErrorNo) + CRLF      ;
      + "at: " + ID() + CRLF                  ;
      + lcCallstack

   If tlCalledManually
      *... handling of non system error messages
      lnErrorType = 0 && manual errors
      
      * ...lot of code removed here....
   Else
      * Here the error message is added to according to what additional info in AERROR means
      * See laError[1] meaning in the help topic AERROR
      
      * For example (yet incomplete):
      If tnErrorNo = 1539
         lnErrorType = 2 && Trigger errors
      Else
         lnErrorType = 1
      Endif
      
      * ...lot of code removed here..., eg reacting to specific errors like 108 (locking problems)
   Endif

   LogError(lcMessage, lnErrorType) && inside this routine saving current memory status via SAVE TO may be done
   lnUserReaction = DisplayError(lcMessage, lnErrorType) && uses Messagebox in different variations 

   Do Case
      Case lnErrorType = 2 && Trigger Error
         =Tablerevert(.T.)
         Do While Txnlevel()>0
            End Transaction
         Enddo
         =Tablerevert(.T.)
         On Error
         Cancel
      Case lnUserReaction = 2 Or lnUserReaction = 3 && Cancel/Abort
         On Error
         Cancel
      Case lnUserReaction = 4 && Retry
         If _vfp.StartMode = 0
            Set Debug On
            Set Step On
         Endif
         * Set Next Statement to skip any of these lines, when needed:
         On Error &lcOldError
         Retry
         * Set Next Statement here to do none
      Case lnUserReaction = 5 && Ignore
         On Error &lcOldError
      Otherwise
         On Error &lcOldError
         Cancel
   Endcase
Endproc

The error handling is established by
[pre]ON ERROR Do Errorhandler With Error(), Message(), Message(1), Program(), Lineno(), Lineno(1)[/pre]

Since you never know, whether an error happens within a method or procedure I pass in both LINENO() and LINENO(1), which differ in being absolute or relative position in case you have a PRG with many procedures. Also Message(1) contains the code, which has the direct error. Some of these are again coming from AERROR, which is used to get more error info within the error handler.

As you I too react to the messagebox reaction and not always CANCEL. But indeed SET STEP ON only works in the IDE itself and nowadays the _vfp.startmode check could be dropped. As said the Display() code is merely displaying a messagebox adapted to the error type, so I skipped that.

The LogError code logs the message before it's displayed. It can log even more current information about open databases, used workareas, variables etc. using ADATABASES(), ASQLHANDLES(), AUSED(). Iterating these arrays is similar to iterating ASTACKINFO, for that reason I also skip that code. Finally SAVE TO can save memory info into a further Memo field. It's also a matter of taste what and how you log the info, sometimes into SQL Server, sometimes into DBF or just TXT file. Again quite a lot of code just cluttering the core handler idea.

Edit: I have to explain one more thing, of course: The final parameter tlCalledManually is passed in .T., when I do direct calls into Errorhandler(). For example when SQLEXEC fails there is no error triggered, but AERROR gives furhter info and the normal errorhandling processes that info anyway and has its case statement for the different error types. And I also call this error handler to handle data validation, eg rule violations of users skipping info for cardinal fields or things like that.

Bye, Olaf.
 
Thanks heaps. I'll give this a bash later.

I'm currently fighting one of my most hated things in development... the dreaded logic error. This one is a real stumper. Maybe I'll start a new thread if I don't figure it out in a couple hours.


Best Regards,
Scott
ATS, CDCE, CTIA, CTDC

"Everything should be made as simple as possible, and no simpler."[hammer]
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top