From 0d75d44d309e3b9aba1c49f3ce35e080bbd1e017 Mon Sep 17 00:00:00 2001 From: Eugene Wang <8755753+soukoku@users.noreply.github.com> Date: Sun, 2 Apr 2023 18:02:34 -0400 Subject: [PATCH] Tried to generate linux DSM files. --- src/NTwain/DSM/DSMGenerator.tt | 63 +++++----- src/NTwain/DSM/Linux64DSM.cs | 172 ++++++++++++++++++++++++++++ src/NTwain/DSM/LinuxBotched64DSM.cs | 172 ++++++++++++++++++++++++++++ src/NTwain/DSM/LinuxDSM.cs | 172 ++++++++++++++++++++++++++++ src/NTwain/DSM/Readme.md | 5 +- src/NTwain/Data/README.md | 4 +- 6 files changed, 555 insertions(+), 33 deletions(-) create mode 100644 src/NTwain/DSM/Linux64DSM.cs create mode 100644 src/NTwain/DSM/LinuxBotched64DSM.cs create mode 100644 src/NTwain/DSM/LinuxDSM.cs diff --git a/src/NTwain/DSM/DSMGenerator.tt b/src/NTwain/DSM/DSMGenerator.tt index ab9cbe9..c3076f7 100644 --- a/src/NTwain/DSM/DSMGenerator.tt +++ b/src/NTwain/DSM/DSMGenerator.tt @@ -6,14 +6,17 @@ <#@ import namespace="System.Collections.Generic" #> <#@ output extension="dummy" #> <# -List<(string, string, string)> className_dllPath_identityStruct = new() { +List<(string className, string dllPath, string identityClass)> outputs = new() { ("OSXLegacyDSM", "/System/Library/Frameworks/framework/TWAIN", "TW_IDENTITY_MACOSX"), ("OSXNewDSM", "/Library/Frameworks/TWAINDSM.framework/TWAINDSM", "TW_IDENTITY_MACOSX"), + ("LinuxDSM", "/usr/local/lib/libtwaindsm.so", "TW_IDENTITY_LEGACY"), + ("Linux64DSM", "/usr/local/lib64/libtwaindsm.so", "TW_IDENTITY_LEGACY"), + ("LinuxBotched64DSM", "/usr/local/lib/libtwaindsm.so.2.3.2", "TW_IDENTITY"), ("WinLegacyDSM", "twain_32.dll", "TW_IDENTITY_LEGACY"), ("WinNewDSM", "twaindsm.dll", "TW_IDENTITY_LEGACY") }; -foreach(var file in className_dllPath_identityStruct) { +foreach(var file in outputs) { #> using NTwain.Data; using System; @@ -22,173 +25,173 @@ using System.Runtime.InteropServices; namespace NTwain.DSM { /// - /// Low-level pinvoke methods using <#= file.Item2 #>. + /// Low-level pinvoke methods using <#= file.dllPath #>. /// - public static class <#= file.Item1 #> + public static class <#= file.className #> { - const string DsmName = "<#= file.Item2 #>"; + const string DsmName = "<#= file.dllPath #>"; [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( - ref <#= file.Item3 #> origin, IntPtr dest, + ref <#= file.identityClass #> origin, IntPtr dest, DG dg, DAT dat, MSG msg, ref IntPtr hwnd ); [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( - ref <#= file.Item3 #> origin, IntPtr dest, + ref <#= file.identityClass #> origin, IntPtr dest, DG dg, DAT dat, MSG msg, IntPtr zero ); [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( - ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest, + ref <#= file.identityClass #> origin, ref <#= file.identityClass #> dest, DG dg, DAT dat, MSG msg, IntPtr zero ); [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( - ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest, + ref <#= file.identityClass #> origin, ref <#= file.identityClass #> dest, DG dg, DAT dat, MSG msg, ref IntPtr mem ); [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( - ref <#= file.Item3 #> origin, IntPtr dest, - DG dg, DAT dat, MSG msg, ref <#= file.Item3 #> twidentity + ref <#= file.identityClass #> origin, IntPtr dest, + DG dg, DAT dat, MSG msg, ref <#= file.identityClass #> twidentity ); [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( - ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest, + ref <#= file.identityClass #> origin, ref <#= file.identityClass #> dest, DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus ); [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( - ref <#= file.Item3 #> origin, IntPtr dest, + ref <#= file.identityClass #> origin, IntPtr dest, DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus ); [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( - ref <#= file.Item3 #> origin, IntPtr dest, + ref <#= file.identityClass #> origin, IntPtr dest, DG dg, DAT dat, MSG msg, ref TW_STATUSUTF8 twstatusutf8 ); [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( - ref <#= file.Item3 #> origin, IntPtr dest, + ref <#= file.identityClass #> origin, IntPtr dest, DG dg, DAT dat, MSG msg, ref TW_ENTRYPOINT twentrypoint ); [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( - ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest, + ref <#= file.identityClass #> origin, ref <#= file.identityClass #> dest, DG dg, DAT dat, MSG msg, ref TW_DEVICEEVENT twdeviceevent ); [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( - ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest, + ref <#= file.identityClass #> origin, ref <#= file.identityClass #> dest, DG dg, DAT dat, MSG msg, ref TW_CUSTOMDSDATA twcustomedsdata ); [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( - ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest, + ref <#= file.identityClass #> origin, ref <#= file.identityClass #> dest, DG dg, DAT dat, MSG msg, ref TW_CALLBACK twcallback ); [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( - ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest, + ref <#= file.identityClass #> origin, ref <#= file.identityClass #> dest, DG dg, DAT dat, MSG msg, ref TW_CALLBACK2 twcallback ); [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( - ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest, + ref <#= file.identityClass #> origin, ref <#= file.identityClass #> dest, DG dg, DAT dat, MSG msg, ref DG xfergroup ); [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( - ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest, + ref <#= file.identityClass #> origin, ref <#= file.identityClass #> dest, DG dg, DAT dat, MSG msg, ref TW_USERINTERFACE userinterface ); [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( - ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest, + ref <#= file.identityClass #> origin, ref <#= file.identityClass #> dest, DG dg, DAT dat, MSG msg, ref TW_EVENT evt ); [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( - ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest, + ref <#= file.identityClass #> origin, ref <#= file.identityClass #> dest, DG dg, DAT dat, MSG msg, ref TW_PENDINGXFERS pendingxfers ); [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( - ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest, + ref <#= file.identityClass #> origin, ref <#= file.identityClass #> dest, DG dg, DAT dat, MSG msg, ref TW_SETUPMEMXFER memxfer ); [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( - ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest, + ref <#= file.identityClass #> origin, ref <#= file.identityClass #> dest, DG dg, DAT dat, MSG msg, ref TW_SETUPFILEXFER filexfer ); [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( - ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest, + ref <#= file.identityClass #> origin, ref <#= file.identityClass #> dest, DG dg, DAT dat, MSG msg, ref TW_PASSTHRU passthru ); [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( - ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest, + ref <#= file.identityClass #> origin, ref <#= file.identityClass #> dest, DG dg, DAT dat, MSG msg, ref TW_FILESYSTEM filesystem ); [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( - ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest, + ref <#= file.identityClass #> origin, ref <#= file.identityClass #> dest, DG dg, DAT dat, MSG msg, ref TW_CAPABILITY cap ); [DllImport(DsmName, CharSet = CharSet.Ansi)] public static extern ushort DSM_Entry ( - ref <#= file.Item3 #> origin, ref <#= file.Item3 #> dest, + ref <#= file.identityClass #> origin, ref <#= file.identityClass #> dest, DG dg, DAT dat, MSG msg, ref TW_AUDIOINFO auioinfo ); } } <# - SaveOutput(file.Item1 + ".cs"); + SaveOutput(file.className + ".cs"); }#> <#+ diff --git a/src/NTwain/DSM/Linux64DSM.cs b/src/NTwain/DSM/Linux64DSM.cs new file mode 100644 index 0000000..58dabf3 --- /dev/null +++ b/src/NTwain/DSM/Linux64DSM.cs @@ -0,0 +1,172 @@ +using NTwain.Data; +using System; +using System.Runtime.InteropServices; + +namespace NTwain.DSM +{ + /// + /// Low-level pinvoke methods using /usr/local/lib64/libtwaindsm.so. + /// + public static class Linux64DSM + { + const string DsmName = "/usr/local/lib64/libtwaindsm.so"; + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, IntPtr dest, + DG dg, DAT dat, MSG msg, ref IntPtr hwnd + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, IntPtr dest, + DG dg, DAT dat, MSG msg, IntPtr zero + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, IntPtr zero + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref IntPtr mem + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, IntPtr dest, + DG dg, DAT dat, MSG msg, ref TW_IDENTITY_LEGACY twidentity + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus + ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, IntPtr dest, + DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus + ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, IntPtr dest, + DG dg, DAT dat, MSG msg, ref TW_STATUSUTF8 twstatusutf8 + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, IntPtr dest, + DG dg, DAT dat, MSG msg, ref TW_ENTRYPOINT twentrypoint + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_DEVICEEVENT twdeviceevent + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_CUSTOMDSDATA twcustomedsdata + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_CALLBACK twcallback + ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_CALLBACK2 twcallback + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref DG xfergroup + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_USERINTERFACE userinterface + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_EVENT evt + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_PENDINGXFERS pendingxfers + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_SETUPMEMXFER memxfer + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_SETUPFILEXFER filexfer + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_PASSTHRU passthru + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_FILESYSTEM filesystem + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_CAPABILITY cap + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_AUDIOINFO auioinfo + ); + } +} diff --git a/src/NTwain/DSM/LinuxBotched64DSM.cs b/src/NTwain/DSM/LinuxBotched64DSM.cs new file mode 100644 index 0000000..d3eafb6 --- /dev/null +++ b/src/NTwain/DSM/LinuxBotched64DSM.cs @@ -0,0 +1,172 @@ +using NTwain.Data; +using System; +using System.Runtime.InteropServices; + +namespace NTwain.DSM +{ + /// + /// Low-level pinvoke methods using /usr/local/lib/libtwaindsm.so.2.3.2. + /// + public static class LinuxBotched64DSM + { + const string DsmName = "/usr/local/lib/libtwaindsm.so.2.3.2"; + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY origin, IntPtr dest, + DG dg, DAT dat, MSG msg, ref IntPtr hwnd + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY origin, IntPtr dest, + DG dg, DAT dat, MSG msg, IntPtr zero + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY origin, ref TW_IDENTITY dest, + DG dg, DAT dat, MSG msg, IntPtr zero + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY origin, ref TW_IDENTITY dest, + DG dg, DAT dat, MSG msg, ref IntPtr mem + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY origin, IntPtr dest, + DG dg, DAT dat, MSG msg, ref TW_IDENTITY twidentity + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY origin, ref TW_IDENTITY dest, + DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus + ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY origin, IntPtr dest, + DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus + ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY origin, IntPtr dest, + DG dg, DAT dat, MSG msg, ref TW_STATUSUTF8 twstatusutf8 + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY origin, IntPtr dest, + DG dg, DAT dat, MSG msg, ref TW_ENTRYPOINT twentrypoint + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY origin, ref TW_IDENTITY dest, + DG dg, DAT dat, MSG msg, ref TW_DEVICEEVENT twdeviceevent + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY origin, ref TW_IDENTITY dest, + DG dg, DAT dat, MSG msg, ref TW_CUSTOMDSDATA twcustomedsdata + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY origin, ref TW_IDENTITY dest, + DG dg, DAT dat, MSG msg, ref TW_CALLBACK twcallback + ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY origin, ref TW_IDENTITY dest, + DG dg, DAT dat, MSG msg, ref TW_CALLBACK2 twcallback + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY origin, ref TW_IDENTITY dest, + DG dg, DAT dat, MSG msg, ref DG xfergroup + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY origin, ref TW_IDENTITY dest, + DG dg, DAT dat, MSG msg, ref TW_USERINTERFACE userinterface + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY origin, ref TW_IDENTITY dest, + DG dg, DAT dat, MSG msg, ref TW_EVENT evt + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY origin, ref TW_IDENTITY dest, + DG dg, DAT dat, MSG msg, ref TW_PENDINGXFERS pendingxfers + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY origin, ref TW_IDENTITY dest, + DG dg, DAT dat, MSG msg, ref TW_SETUPMEMXFER memxfer + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY origin, ref TW_IDENTITY dest, + DG dg, DAT dat, MSG msg, ref TW_SETUPFILEXFER filexfer + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY origin, ref TW_IDENTITY dest, + DG dg, DAT dat, MSG msg, ref TW_PASSTHRU passthru + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY origin, ref TW_IDENTITY dest, + DG dg, DAT dat, MSG msg, ref TW_FILESYSTEM filesystem + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY origin, ref TW_IDENTITY dest, + DG dg, DAT dat, MSG msg, ref TW_CAPABILITY cap + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY origin, ref TW_IDENTITY dest, + DG dg, DAT dat, MSG msg, ref TW_AUDIOINFO auioinfo + ); + } +} diff --git a/src/NTwain/DSM/LinuxDSM.cs b/src/NTwain/DSM/LinuxDSM.cs new file mode 100644 index 0000000..5d32d95 --- /dev/null +++ b/src/NTwain/DSM/LinuxDSM.cs @@ -0,0 +1,172 @@ +using NTwain.Data; +using System; +using System.Runtime.InteropServices; + +namespace NTwain.DSM +{ + /// + /// Low-level pinvoke methods using /usr/local/lib/libtwaindsm.so. + /// + public static class LinuxDSM + { + const string DsmName = "/usr/local/lib/libtwaindsm.so"; + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, IntPtr dest, + DG dg, DAT dat, MSG msg, ref IntPtr hwnd + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, IntPtr dest, + DG dg, DAT dat, MSG msg, IntPtr zero + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, IntPtr zero + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref IntPtr mem + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, IntPtr dest, + DG dg, DAT dat, MSG msg, ref TW_IDENTITY_LEGACY twidentity + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus + ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, IntPtr dest, + DG dg, DAT dat, MSG msg, ref TW_STATUS twstatus + ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, IntPtr dest, + DG dg, DAT dat, MSG msg, ref TW_STATUSUTF8 twstatusutf8 + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, IntPtr dest, + DG dg, DAT dat, MSG msg, ref TW_ENTRYPOINT twentrypoint + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_DEVICEEVENT twdeviceevent + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_CUSTOMDSDATA twcustomedsdata + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_CALLBACK twcallback + ); + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_CALLBACK2 twcallback + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref DG xfergroup + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_USERINTERFACE userinterface + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_EVENT evt + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_PENDINGXFERS pendingxfers + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_SETUPMEMXFER memxfer + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_SETUPFILEXFER filexfer + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_PASSTHRU passthru + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_FILESYSTEM filesystem + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_CAPABILITY cap + ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + public static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref TW_AUDIOINFO auioinfo + ); + } +} diff --git a/src/NTwain/DSM/Readme.md b/src/NTwain/DSM/Readme.md index 004cdc9..f3d5f67 100644 --- a/src/NTwain/DSM/Readme.md +++ b/src/NTwain/DSM/Readme.md @@ -3,5 +3,8 @@ This is the lowest API level of the lib and should not be used directly unless you know what you're doing. A higher level abstraction such as the ones in the -Triplets namespace or the TwainSession object +`Triplets` namespace or the `TwainSession` object would be easier to use. + +The individual classes are generated by the +`DSMGenerator.tt` file. \ No newline at end of file diff --git a/src/NTwain/Data/README.md b/src/NTwain/Data/README.md index 22ccf77..daaeb52 100644 --- a/src/NTwain/Data/README.md +++ b/src/NTwain/Data/README.md @@ -6,6 +6,6 @@ Version initially used is 2.5.0.0. I just couldn't trust myself with making correct struct definitions so used those instead. -The TWAINH.cs file are minimally modified so they could be updated +The `TWAINH.cs` file are minimally modified so they could be updated easily should I need to. Most modifications are added in -TWAINH_EXTRAS.cs. +`TWAINH_EXTRAS.cs.`