Skip to content

Commit

Permalink
working on the basic printing badge, it's not done yet, but it's maki…
Browse files Browse the repository at this point in the history
…ng good progress; added a function to convert TWEI values numeric values to readable strings, same as has been done previously for capabilities...
  • Loading branch information
mlmcl62 committed Jul 29, 2021
1 parent c7dccff commit 0c9e99a
Show file tree
Hide file tree
Showing 10 changed files with 1,771 additions and 2 deletions.
101 changes: 99 additions & 2 deletions twaincs/source/TWAIN.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2135,7 +2135,7 @@ public bool CsvToCapability(ref TW_CAPABILITY a_twcapability, ref string a_szSet
{
try
{
a_twcapability.ConType = (TWON)Enum.Parse(typeof(TWON), asz[1].Replace("TWON_", ""), true);
a_twcapability.ConType = (TWON)Enum.Parse(typeof(TWON), asz[1].Replace("TWON_", "").Replace("twon_", ""), true);
}
catch
{
Expand All @@ -2149,7 +2149,7 @@ public bool CsvToCapability(ref TW_CAPABILITY a_twcapability, ref string a_szSet
{
try
{
twty = (TWTY)Enum.Parse(typeof(TWTY), asz[2].Replace("TWTY_", ""), true);
twty = (TWTY)Enum.Parse(typeof(TWTY), asz[2].Replace("TWTY_", "").Replace("twty_", ""), true);
}
catch
{
Expand Down Expand Up @@ -4213,6 +4213,103 @@ public static string CvtCapValueFromEnum(CAP a_cap, string a_szValue)
}
}

/// <summary>
/// Convert a value to the 'friendly' name, based on the TWEI...
/// </summary>
/// <param name="a_twei">TWEI driving the conversion</param>
/// <param name="szValue">value to convert</param>
/// <returns></returns>
public static string CvtTweiValueToEnum(TWEI a_twei, string a_szValue)
{
switch (a_twei)
{
default: return (a_szValue);
case TWEI.BARCODECONFIDENCE: return (a_szValue);
case TWEI.BARCODECOUNT: return (a_szValue);
case TWEI.BARCODEROTATION: return (CvtCapValueToEnumHelper<TWBCOR>(a_szValue));
case TWEI.BARCODETEXT: return (a_szValue);
case TWEI.BARCODETEXT2: return (a_szValue);
case TWEI.BARCODETEXTLENGTH: return (a_szValue);
case TWEI.BARCODETYPE: return (CvtCapValueToEnumHelper<TWBT>(a_szValue));
case TWEI.BARCODEX: return (a_szValue);
case TWEI.BARCODEY: return (a_szValue);
case TWEI.BLACKSPECKLESREMOVED: return (a_szValue);
case TWEI.BOOKNAME: return (a_szValue);
case TWEI.CAMERA: return (a_szValue);
case TWEI.CHAPTERNUMBER: return (a_szValue);
case TWEI.DESHADEBLACKCOUNTNEW: return (a_szValue);
case TWEI.DESHADEBLACKCOUNTOLD: return (a_szValue);
case TWEI.DESHADEBLACKRLMAX: return (a_szValue);
case TWEI.DESHADEBLACKRLMIN: return (a_szValue);
case TWEI.DESHADECOUNT: return (a_szValue);
case TWEI.DESHADEHEIGHT: return (a_szValue);
case TWEI.DESHADELEFT: return (a_szValue);
case TWEI.DESHADESIZE: return (a_szValue);
case TWEI.DESHADETOP: return (a_szValue);
case TWEI.DESHADEWHITECOUNTNEW: return (a_szValue);
case TWEI.DESHADEWHITECOUNTOLD: return (a_szValue);
case TWEI.DESHADEWHITERLAVE: return (a_szValue);
case TWEI.DESHADEWHITERLMAX: return (a_szValue);
case TWEI.DESHADEWHITERLMIN: return (a_szValue);
case TWEI.DESHADEWIDTH: return (a_szValue);
case TWEI.DESKEWSTATUS: return (CvtCapValueToEnumHelper<TWDSK>(a_szValue));
case TWEI.DOCUMENTNUMBER: return (a_szValue);
case TWEI.ENDORSEDTEXT: return (a_szValue);
case TWEI.FILESYSTEMSOURCE: return (a_szValue);
case TWEI.FORMCONFIDENCE: return (a_szValue);
case TWEI.FORMHORZDOCOFFSET: return (a_szValue);
case TWEI.FORMTEMPLATEMATCH: return (a_szValue);
case TWEI.FORMTEMPLATEPAGEMATCH: return (a_szValue);
case TWEI.FORMVERTDOCOFFSET: return (a_szValue);
case TWEI.FRAME: return (a_szValue);
case TWEI.FRAMENUMBER: return (a_szValue);
case TWEI.HORZLINECOUNT: return (a_szValue);
case TWEI.HORZLINELENGTH: return (a_szValue);
case TWEI.HORZLINETHICKNESS: return (a_szValue);
case TWEI.HORZLINEXCOORD: return (a_szValue);
case TWEI.HORZLINEYCOORD: return (a_szValue);
case TWEI.IAFIELDA_VALUE: return (a_szValue);
case TWEI.IAFIELDB_VALUE: return (a_szValue);
case TWEI.IAFIELDC_VALUE: return (a_szValue);
case TWEI.IAFIELDD_VALUE: return (a_szValue);
case TWEI.IAFIELDE_VALUE: return (a_szValue);
case TWEI.IALEVEL: return (CvtCapValueToEnumHelper<TWIA>(a_szValue));
case TWEI.ICCPROFILE: return (a_szValue);
case TWEI.IMAGEMERGED: return (CvtCapValueToEnumHelper<bool>(a_szValue));
case TWEI.LASTSEGMENT: return (CvtCapValueToEnumHelper<bool>(a_szValue));
case TWEI.MAGDATA: return (a_szValue);
case TWEI.MAGDATALENGTH: return (a_szValue);
case TWEI.MAGTYPE: return (CvtCapValueToEnumHelper<TWMD>(a_szValue));
case TWEI.PAGENUMBER: return (a_szValue);
case TWEI.PAGESIDE: return (a_szValue);
case TWEI.PAPERCOUNT: return (a_szValue);
case TWEI.PATCHCODE: return (CvtCapValueToEnumHelper<TWPCH>(a_szValue));
case TWEI.PIXELFLAVOR: return (CvtCapValueToEnumHelper<TWPF>(a_szValue));
case TWEI.PRINTER: return (CvtCapValueToEnumHelper<TWPR>(a_szValue));
case TWEI.PRINTERTEXT: return (a_szValue);
case TWEI.SEGMENTNUMBER: return (a_szValue);
case TWEI.SKEWCONFIDENCE: return (a_szValue);
case TWEI.SKEWFINALANGLE: return (a_szValue);
case TWEI.SKEWORIGINALANGLE: return (a_szValue);
case TWEI.SKEWWINDOWX1: return (a_szValue);
case TWEI.SKEWWINDOWX2: return (a_szValue);
case TWEI.SKEWWINDOWX3: return (a_szValue);
case TWEI.SKEWWINDOWX4: return (a_szValue);
case TWEI.SKEWWINDOWY1: return (a_szValue);
case TWEI.SKEWWINDOWY2: return (a_szValue);
case TWEI.SKEWWINDOWY3: return (a_szValue);
case TWEI.SKEWWINDOWY4: return (a_szValue);
case TWEI.SPECKLESREMOVED: return (a_szValue);
case TWEI.TWAINDIRECTMETADATA: return (a_szValue);
case TWEI.VERTLINECOUNT: return (a_szValue);
case TWEI.VERTLINELENGTH: return (a_szValue);
case TWEI.VERTLINETHICKNESS: return (a_szValue);
case TWEI.VERTLINEXCOORD: return (a_szValue);
case TWEI.VERTLINEYCOORD: return (a_szValue);
case TWEI.WHITESPECKLESREMOVED: return (a_szValue);
}
}

#endregion


Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Printing Badge
; These tests establish the minimum requirements for a TWAIN driver to claim that is has printing
; support. To pass the driver must support the following capabilites:
; CAP_PRINTERENABLED
; CAP_PRINTER
; CAP_PRINTERMODE
; CAP_PRINTERSTRING
; CAP_PRINTERINDEX
; CAP_PRINTERSUFFIX
; CAP_PRINTERVERTICALOFFSET
;
; And the following extended image info items:
; TWEI_PRINTERTEXT
; TWEI_PRINTER
;
; Arguments
; arg:1 - TW_IDENTITY.ProductName of scanner to test
;
; Globals
; (none)
;
; Locals
; certifyresult - track if we fail
;
; Returns
; pass or fail
;



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Initialize...
;
setlocal certifyresult 'pass' ; assume we'll pass



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Reset to a known state...
;
setlocal name 'MSG_RESETALL'
dsmentry src ds dg_control dat_capability msg_resetall '0,0,0,0'
if '${sts:}' != 'SUCCESS' goto MAIN.MSG_RESETALL.FAIL
echo.passfail '${get:name}' 'pass'
goto MAIN.MSG_RESETALL.DONE
;
:MAIN.MSG_RESETALL.FAIL
echo.passfail '${get:name}' 'skip - ${sts:} ${ret:}'
setlocal certifyresult 'fail'
goto MAIN.DONE
:MAIN.MSG_RESETALL.DONE



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; CAP_PRINTERENABLED must be supported, and must offer both TRUE
; and FALSE, and must currently be FALSE, otherwise skip it all
;
setlocal name 'CAP_PRINTERENBLED is supported'
dsmentry src ds dg_control dat_capability msg_get 'CAP_PRINTERENABLED,0,0,0'
if '${sts:}' != 'SUCCESS' goto MAIN.CAP_PRINTERENABLEDSUPPORTED.SKIP
if '${ret:},' !~contains ',TRUE,' goto MAIN.CAP_PRINTERENABLEDSUPPORTED.SKIP
if '${ret:},' !~contains ',FALSE,' goto MAIN.CAP_PRINTERENABLEDSUPPORTED.SKIP
echo.passfail '${get:name}' 'pass'
goto MAIN.CAP_PRINTERENABLEDSUPPORTED.DONE
;
:MAIN.CAP_PRINTERENABLEDSUPPORTED.SKIP
echo.passfail '${get:name}' 'skip - ${sts:} ${ret:}'
setlocal certifyresult 'skip'
goto MAIN.DONE
:MAIN.CAP_PRINTERENABLEDSUPPORTED.DONE



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; CAP_SUPPORTEDCAPS: check that all required capabilities are reported
;
setlocal name 'CAP_SUPPORTEDCAPS MSG_GET'
dsmentry src ds dg_control dat_capability msg_get 'CAP_SUPPORTEDCAPS,0,0,0'
if '${sts:}' != 'SUCCESS' goto MAIN.CAP_SUPPORTEDCAPS.FAIL
echo.passfail '${get:name}' 'pass'
;
setlocal name 'CAP_SUPPORTEDCAPS CAP_PRINTERENABLED found'
if '${ret:},' !~contains ',CAP_PRINTERENABLED,' goto MAIN.CAP_SUPPORTEDCAPS.FAIL
echo.passfail '${get:name}' 'pass'
;
setlocal name 'CAP_SUPPORTEDCAPS CAP_PRINTER found'
if '${ret:},' !~contains ',CAP_PRINTER,' goto MAIN.CAP_SUPPORTEDCAPS.FAIL
echo.passfail '${get:name}' 'pass'
;
setlocal name 'CAP_SUPPORTEDCAPS CAP_PRINTERMODE found'
if '${ret:},' !~contains ',CAP_PRINTERMODE,' goto MAIN.CAP_SUPPORTEDCAPS.FAIL
echo.passfail '${get:name}' 'pass'
;
setlocal name 'CAP_SUPPORTEDCAPS CAP_PRINTERSTRING found'
if '${ret:},' !~contains ',CAP_PRINTERSTRING,' goto MAIN.CAP_SUPPORTEDCAPS.FAIL
echo.passfail '${get:name}' 'pass'
;
setlocal name 'CAP_SUPPORTEDCAPS CAP_PRINTERINDEX found'
if '${ret:},' !~contains ',CAP_PRINTERINDEX,' goto MAIN.CAP_SUPPORTEDCAPS.FAIL
echo.passfail '${get:name}' 'pass'
;
setlocal name 'CAP_SUPPORTEDCAPS CAP_PRINTERSUFFIX found'
if '${ret:},' !~contains ',CAP_PRINTERSUFFIX,' goto MAIN.CAP_SUPPORTEDCAPS.FAIL
echo.passfail '${get:name}' 'pass'
;
setlocal name 'CAP_SUPPORTEDCAPS CAP_PRINTERVERTICALOFFSET found'
if '${ret:},' !~contains ',CAP_PRINTERVERTICALOFFSET,' goto MAIN.CAP_SUPPORTEDCAPS.FAIL
echo.passfail '${get:name}' 'pass'
goto MAIN.CAP_SUPPORTEDCAPS.DONE
;
:MAIN.CAP_SUPPORTEDCAPS.FAIL
echo.passfail '${get:name}' 'fail - ${sts:} ${ret:}'
setlocal certifyresult 'fail'
goto MAIN.DONE
:MAIN.CAP_SUPPORTEDCAPS.DONE



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ICAP_SUPPORTEDEXTIMAGEINFO: check that all metadata is reported
;
setlocal name 'ICAP_SUPPORTEDEXTIMAGEINFO MSG_GET'
dsmentry src ds dg_control dat_capability msg_get 'ICAP_SUPPORTEDEXTIMAGEINFO,0,0,0'
if '${sts:}' != 'SUCCESS' goto MAIN.ICAP_SUPPORTEDEXTIMAGEINFO.FAIL
echo.passfail '${get:name}' 'pass'
;
setlocal name 'ICAP_SUPPORTEDEXTIMAGEINFO TWEI_PRINTERTEXT found'
if '${ret:},' !~contains ',TWEI_PRINTERTEXT,' goto MAIN.ICAP_SUPPORTEDEXTIMAGEINFO.FAIL
echo.passfail '${get:name}' 'pass'
;
setlocal name 'ICAP_SUPPORTEDEXTIMAGEINFO TWEI_PRINTER found'
if '${ret:},' !~contains ',TWEI_PRINTER,' goto MAIN.ICAP_SUPPORTEDEXTIMAGEINFO.FAIL
echo.passfail '${get:name}' 'pass'
goto MAIN.ICAP_SUPPORTEDEXTIMAGEINFO.DONE
;
:MAIN.ICAP_SUPPORTEDEXTIMAGEINFO.FAIL
echo.passfail '${get:name}' 'fail - ${sts:} ${ret:}'
setlocal certifyresult 'fail'
:MAIN.ICAP_SUPPORTEDEXTIMAGEINFO.DONE



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; All done...
;
:MAIN.DONE
return '${get:certifyresult}'
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Basic Printing Badge
; Check if Basic Printing is supported by the driver. This is a badge, failure does invalidate
; scanner certification. Passage adds Basic Printing support to the cert.
;
; Printing is complex. This badge checks that a driver allows the basic ability to print something
; on a document. It does not require all the possible printing features described by TWAIN.
;
; Arguments
; arg:1 - TW_IDENTITY.ProductName of scanner to test
; arg:2 - global to set on fail
;
; Globals
; g_localcertifyresult - global to report to caller on fail
;
; Locals
; twidentity.productname - product name of scanner to test
;
; Returns
; (none)
;
; History
; v1.0 17-May-2021 - first version
;



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Initialize stuff, load tables if not already done for us...
;
echo.titlesuite 'Basic Printing Badge v1.0 13-Jul-2021'
echo.yellow '*************************************************************************************'
echo.yellow '*** This test is for the Basic Printing Badge. Failing means the driver does not ***'
echo.yellow '*** support this functionality. It does not prevent it from being certified. ***'
echo.yellow '*************************************************************************************'
setlocal twidentity.productname '${arg:1}'
setglobal g_localcertifyresult 'pass' ; assume success
if '${get:TW_ARRAY.ItemType}' != '' goto MAIN.LOADTABLES.SKIP
run '${folder:certification}/LoadTables'
:MAIN.LOADTABLES.SKIP



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Run the tests...
;
call CERTIFY '${folder:certification}/Opends' '${get:twidentity.productname}' g_localcertifyresult embedded
if '${get:g_localcertifyresult}' == 'fail' goto MAIN.CLOSEDS
call CERTIFY 'Basic Printing Badge' '${get:twidentity.productname}' g_localcertifyresult
call CERTIFY 'DAT_IMAGENATIVEXFER' '${get:twidentity.productname}' '${get:certifyresult}' 'FALSE' '${folder:parent}'
call CERTIFY 'DAT_IMAGEMEMXFER' '${get:twidentity.productname}' '${get:certifyresult}' 'FALSE' '${folder:parent}'
call CERTIFY 'DAT_IMAGEFILEXFER' '${get:twidentity.productname}' '${get:certifyresult}' 'FALSE' '${folder:parent}'
call CERTIFY 'DAT_IMAGEMEMFILEXFER' '${get:twidentity.productname}' '${get:certifyresult}' 'FALSE' '${folder:parent}'
:MAIN.CLOSEDS
call CERTIFY '${folder:certification}/Closeds' '${get:twidentity.productname}' g_localcertifyresult embedded



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Summary and cleanup...
;
; Did we pass?
if '${get:g_localcertifyresult}' != 'pass' goto MAIN.ERROR
echo.passfail 'SUMMARY' 'pass'
return 'pass'
;
; Ruh-roh...
:MAIN.ERROR
echo.passfail 'SUMMARY' 'fail'
setglobal '${arg:2}' 'fail'
return 'fail'



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Function: Certify
; arg:1 - script to run
; arg:2 - TW_IDENTITY.ProductName of scanner to test
; arg:3 - global value to update on fail
; arg:4 - embeded flag for open/close
; returns: (none)
;
:CERTIFY
;
run '${arg:1}' '${arg:2}' '${arg:4}'
if '${ret:}' != 'pass' goto CERTIFY.FAIL
return 'pass'
;
:CERTIFY.FAIL
setglobal '${arg:3}' 'fail'
return 'fail'
Loading

0 comments on commit 0c9e99a

Please sign in to comment.