# HG changeset patch # User cslag # Date 1464914413 -7200 # Node ID e932e6331f357658ae0aeb7c6e6e8c1be3e3218b # Parent 0f7d00b7325714b5c35e90ebebfd9402fadd7246 - manual improvements * html output improved * consistency in tables * little bit of rewording, typos - todo item added diff -r 0f7d00b73257 -r e932e6331f35 ToDo --- a/ToDo Sun May 29 15:38:26 2016 +0200 +++ b/ToDo Fri Jun 03 02:40:13 2016 +0200 @@ -33,6 +33,7 @@ - test code functions should be in .so files, optionally, so the suites can directly be used to test dycnall bindings - pkg-config support? +- quadmath support (long double) portasm: -------- diff -r 0f7d00b73257 -r e932e6331f35 doc/manual/callconvs/callconv_arm32.tex --- a/doc/manual/callconvs/callconv_arm32.tex Sun May 29 15:38:26 2016 +0200 +++ b/doc/manual/callconvs/callconv_arm32.tex Fri Jun 03 02:40:13 2016 +0200 @@ -28,12 +28,10 @@ Basically, this family of microprocessors can be run in 2 major modes:\\ \\ \begin{tabular*}{0.95\textwidth}{2 B} -\hline Mode & Description\\ \hline {\bf ARM} & 32bit instruction set\\ {\bf THUMB} & compressed instruction set using 16bit wide instruction encoding\\ -\hline \end{tabular*} \\ \\ @@ -56,7 +54,6 @@ \\ \begin{table}[h] \begin{tabular*}{0.95\textwidth}{3 B} -\hline Name & Brief description\\ \hline {\bf r0} & parameter 0, scratch, return value\\ @@ -68,7 +65,6 @@ {\bf r13} & stack pointer, permanent\\ {\bf r14} & link register, permanent\\ {\bf r15} & program counter (note: due to pipeline, r15 points to 2 instructions ahead)\\ -\hline \end{tabular*} \caption{Register usage on arm32} \end{table} @@ -147,7 +143,6 @@ \\ \begin{table}[h] \begin{tabular*}{0.95\textwidth}{3 B} -\hline Name & Brief description\\ \hline {\bf r0} & parameter 0, scratch, return value\\ @@ -160,7 +155,6 @@ {\bf r13} & stack pointer, permanent\\ {\bf r14} & link register, permanent\\ {\bf r15} & program counter (note: due to pipeline, r15 points to 2 instructions ahead)\\ -\hline \end{tabular*} \caption{Register usage on arm32 thumb mode} \end{table} @@ -256,7 +250,6 @@ \begin{table}[h] \begin{tabular*}{0.95\textwidth}{3 B} -\hline Name & Brief description\\ \hline {\bf R0} & parameter 0, scratch, return value\\ @@ -276,7 +269,6 @@ {\bf D8-D15} & permanent, aliases S16-S31, on ARMv7 also as Q4-A7. Not accesible from Thumb mode on ARMv6.\\ {\bf D16-D31}& Only available in ARMv7, aliases Q8-Q15.\\ {\bf FPSCR} & VFP status register.\\ -\hline \end{tabular*} \caption{Register usage on ARM Apple iOS} \end{table} @@ -302,7 +294,6 @@ \begin{table}[h] \begin{tabular*}{0.95\textwidth}{3 B} -\hline Name & Brief description\\ \hline {\bf R0} & parameter 0, scratch, non floating point return value\\ @@ -324,7 +315,6 @@ {\bf S1-S15} & floating point arguments, single precision\\ {\bf D1-D7} & aliases S2-S15, floating point arguments, double precision\\ {\bf FPSCR} & VFP status register.\\ -\hline \end{tabular*} \caption{Register usage on armhf} \end{table} @@ -376,17 +366,11 @@ Arch & Platforms & Details \\ \hline ARMv4 & & \\ -\hline ARMv4T & ARM 7, ARM 9, Neo FreeRunner (OpenMoko) & \\ -\hline ARMv5 & ARM 9E & BLX instruction available \\ -\hline ARMv6 & & No vector registers available in thumb \\ -\hline ARMv7 & iPod touch, iPhone 3GS/4, Raspberry Pi 2 & VFP throughout available, armhf calling convention on some platforms \\ -\hline ARMv8 & iPhone 6 and higher & 64bit support \\ -\hline \end{tabular*} \caption{Overview of ARM Architecture, Platforms and Details} \end{table} diff -r 0f7d00b73257 -r e932e6331f35 doc/manual/callconvs/callconv_arm64.tex --- a/doc/manual/callconvs/callconv_arm64.tex Sun May 29 15:38:26 2016 +0200 +++ b/doc/manual/callconvs/callconv_arm64.tex Fri Jun 03 02:40:13 2016 +0200 @@ -44,7 +44,6 @@ \begin{table}[h] \begin{tabular*}{0.95\textwidth}{3 B} -\hline Name & Brief description\\ \hline {\bf x0-x7} & parameters, scratch, return value\\ @@ -58,7 +57,6 @@ {\bf x30} & permanent, link register\\ {\bf SP} & permanent, stack pointer\\ {\bf PC} & program counter\\ -\hline \end{tabular*} \caption{Register usage on arm64} \end{table} diff -r 0f7d00b73257 -r e932e6331f35 doc/manual/callconvs/callconv_mips.tex --- a/doc/manual/callconvs/callconv_mips.tex Sun May 29 15:38:26 2016 +0200 +++ b/doc/manual/callconvs/callconv_mips.tex Fri Jun 03 02:40:13 2016 +0200 @@ -47,7 +47,6 @@ \begin{table}[h] \begin{tabular*}{0.95\textwidth}{lll} -\hline Name & Alias & Brief description\\ \hline {\bf \$0} & {\bf \$zero} & Hardware zero \\ diff -r 0f7d00b73257 -r e932e6331f35 doc/manual/callconvs/callconv_ppc32.tex --- a/doc/manual/callconvs/callconv_ppc32.tex Sun May 29 15:38:26 2016 +0200 +++ b/doc/manual/callconvs/callconv_ppc32.tex Fri Jun 03 02:40:13 2016 +0200 @@ -45,7 +45,6 @@ \begin{table}[h] \begin{tabular*}{0.95\textwidth}{3 B} -\hline Name & Brief description\\ \hline {\bf gpr0} & scratch\\ @@ -68,7 +67,6 @@ {\bf cr0-cr1} & scratch\\ {\bf cr2-cr4} & permanent\\ {\bf cr5-cr7} & scratch\\ -\hline \end{tabular*} \caption{Register usage on Darwin PowerPC 32-Bit} \end{table} @@ -156,7 +154,6 @@ \begin{table}[h] \begin{tabular*}{0.95\textwidth}{3 B} -\hline Name & Brief description\\ \hline {\bf r0} & scratch\\ @@ -178,7 +175,6 @@ {\bf ctr} & Count register (scratch) \\ {\bf xer} & Fixed-point exception register (scratch)\\ {\bf fpscr} & Floating-point Status and Control Register\\ - % {\bf v0-v1} & scratch\\ % {\bf v2-v13} & vector parameters\\ % {\bf v14-v19} & scratch\\ @@ -188,7 +184,6 @@ % {\bf cr0-cr1} & scratch\\ % {\bf cr2-cr4} & permanent\\ % {\bf cr5-cr7} & scratch\\ -\hline \end{tabular*} \caption{Register usage on System V ABI PowerPC Processor} \end{table} diff -r 0f7d00b73257 -r e932e6331f35 doc/manual/callconvs/callconv_sparc.tex --- a/doc/manual/callconvs/callconv_sparc.tex Sun May 29 15:38:26 2016 +0200 +++ b/doc/manual/callconvs/callconv_sparc.tex Fri Jun 03 02:40:13 2016 +0200 @@ -41,7 +41,6 @@ \begin{table}[h] \begin{tabular*}{0.95\textwidth}{lll} -\hline Name & Alias & Brief description\\ \hline {\bf \%g0} & & Read-only, hardwired to 0 \\ diff -r 0f7d00b73257 -r e932e6331f35 doc/manual/callconvs/callconv_x64.tex --- a/doc/manual/callconvs/callconv_x64.tex Sun May 29 15:38:26 2016 +0200 +++ b/doc/manual/callconvs/callconv_x64.tex Fri Jun 03 02:40:13 2016 +0200 @@ -57,7 +57,6 @@ \begin{table}[h] \begin{tabular*}{0.95\textwidth}{3 B} -\hline Name & Brief description\\ \hline {\bf rax} & scratch, return value\\ @@ -75,7 +74,6 @@ {\bf xmm1-xmm3} & scratch, floating point parameters 1-3\\ {\bf xmm4-xmm5} & scratch, permanent if required by caller\\ {\bf xmm6-xmm15} & permanent\\ -\hline \end{tabular*} \caption{Register usage on x64 MS Windows platform} \end{table} @@ -155,7 +153,6 @@ \begin{table}[h] \begin{tabular*}{0.95\textwidth}{3 B} -\hline Name & Brief description\\ \hline {\bf rax} & scratch, return value\\ @@ -174,7 +171,6 @@ {\bf xmm8-xmm15} & scratch\\ {\bf st0-st1} & scratch, 16 byte floating point return value\\ {\bf st2-st7} & scratch\\ -\hline \end{tabular*} \caption{Register usage on x64 System V (Linux/*BSD)} \end{table} diff -r 0f7d00b73257 -r e932e6331f35 doc/manual/callconvs/callconv_x86.tex --- a/doc/manual/callconvs/callconv_x86.tex Sun May 29 15:38:26 2016 +0200 +++ b/doc/manual/callconvs/callconv_x86.tex Fri Jun 03 02:40:13 2016 +0200 @@ -47,7 +47,6 @@ \begin{table}[h] \begin{tabular*}{0.95\textwidth}{3 B} -\hline Name & Brief description\\ \hline {\bf eax} & scratch, return value\\ @@ -60,7 +59,6 @@ {\bf esp} & stack pointer\\ {\bf st0} & scratch, floating point return value\\ {\bf st1-st7} & scratch\\ -\hline \end{tabular*} \caption{Register usage on x86 cdecl calling convention} \end{table} @@ -121,7 +119,6 @@ \begin{table}[h] \begin{tabular*}{0.95\textwidth}{3 B} -\hline Name & Brief description\\ \hline {\bf eax} & scratch, return value\\ @@ -134,7 +131,6 @@ {\bf esp} & stack pointer\\ {\bf st0} & scratch, floating point return value\\ {\bf st1-st7} & scratch\\ -\hline \end{tabular*} \caption{Register usage on x86 fastcall (MS) calling convention} \end{table} @@ -198,7 +194,6 @@ \begin{table}[h] \begin{tabular*}{0.95\textwidth}{3 B} -\hline Name & Brief description\\ \hline {\bf eax} & scratch, return value\\ @@ -211,7 +206,6 @@ {\bf esp} & stack pointer\\ {\bf st0} & scratch, floating point return value\\ {\bf st1-st7} & scratch\\ -\hline \end{tabular*} \caption{Register usage on x86 fastcall (GNU) calling convention} \end{table} @@ -272,7 +266,6 @@ \begin{table}[h] \begin{tabular*}{0.95\textwidth}{3 B} -\hline Name & Brief description\\ \hline {\bf eax} & scratch, parameter 0, return value\\ @@ -285,7 +278,6 @@ {\bf esp} & stack pointer\\ {\bf st0} & scratch, floating point return value\\ {\bf st1-st7} & scratch\\ -\hline \end{tabular*} \caption{Register usage on x86 fastcall (Borland) calling convention} \end{table} @@ -348,7 +340,6 @@ \begin{table}[h] \begin{tabular*}{0.95\textwidth}{3 B} -\hline Name & Brief description\\ \hline {\bf eax} & scratch, parameter 0, return value@@@\\ @@ -361,7 +352,6 @@ {\bf esp} & stack pointer\\ {\bf st0} & scratch, floating point return value\\ {\bf st1-st7} & scratch\\ -\hline \end{tabular*} \caption{Register usage on x86 fastcall (Watcom) calling convention} \end{table} @@ -421,7 +411,6 @@ \begin{table}[h] \begin{tabular*}{0.95\textwidth}{3 B} -\hline Name & Brief description\\ \hline {\bf eax} & scratch, return value\\ @@ -434,7 +423,6 @@ {\bf esp} & stack pointer\\ {\bf st0} & scratch, floating point return value\\ {\bf st1-st7} & scratch\\ -\hline \end{tabular*} \caption{Register usage on x86 stdcall calling convention} \end{table} @@ -492,7 +480,6 @@ \begin{table}[h] \begin{tabular*}{0.95\textwidth}{3 B} -\hline Name & Brief description\\ \hline {\bf eax} & scratch, return value\\ @@ -505,7 +492,6 @@ {\bf esp} & stack pointer\\ {\bf st0} & scratch, floating point return value\\ {\bf st1-st7} & scratch\\ -\hline \end{tabular*} \caption{Register usage on x86 thiscall (MS) calling convention} \end{table} @@ -568,7 +554,6 @@ \begin{table}[h] \begin{tabular*}{0.95\textwidth}{3 B} -\hline Name & Brief description\\ \hline {\bf eax} & scratch, return value\\ @@ -581,7 +566,6 @@ {\bf esp} & stack pointer\\ {\bf st0} & scratch, floating point return value\\ {\bf st1-st7} & scratch\\ -\hline \end{tabular*} \caption{Register usage on x86 thiscall (GNU) calling convention} \end{table} @@ -641,7 +625,6 @@ \begin{table}[h] \begin{tabular*}{0.95\textwidth}{3 B} -\hline Name & Brief description\\ \hline {\bf eax} & scratch, return value\\ @@ -654,7 +637,6 @@ {\bf esp} & stack pointer\\ {\bf st0} & scratch, floating point return value\\ {\bf st1-st7} & scratch\\ -\hline \end{tabular*} \caption{Register usage on x86 pascal calling convention} \end{table} @@ -713,7 +695,6 @@ \begin{table}[h] \begin{tabular*}{0.95\textwidth}{3 B} -\hline Name & Brief description\\ \hline {\bf eax} & scratch, return value\\ @@ -726,7 +707,6 @@ {\bf esp} & stack pointer\\ {\bf st0} & scratch, floating point return value\\ {\bf st1-st7} & scratch\\ -\hline \end{tabular*} \caption{Register usage on x86 plan9call calling convention} \end{table} diff -r 0f7d00b73257 -r e932e6331f35 doc/manual/manual_bindings.tex --- a/doc/manual/manual_bindings.tex Sun May 29 15:38:26 2016 +0200 +++ b/doc/manual/manual_bindings.tex Fri Jun 03 02:40:13 2016 +0200 @@ -86,7 +86,6 @@ \begin{table}[h] \begin{center} \begin{tabular*}{0.75\textwidth}{cl} -\hline Signature character & C/C++ data type \\ \hline \sigchar{B} & \_Bool, bool \\ @@ -105,7 +104,6 @@ \sigchar{p} & void* \\ \sigchar{Z} & const char* (pointing to C string) \\ \sigchar{v} & void \\ -\hline \end{tabular*} \caption{Type signature encoding for function call data types} \label{sigchar} @@ -124,7 +122,6 @@ \begin{table}[h] \begin{center} \begin{tabular*}{0.75\textwidth}{rll} -\hline & C function prototype & dyncall signature \\ \hline void & f1(); & \sigstr{)v}\\ @@ -132,7 +129,6 @@ long long & f3(void*); & \sigstr{p)L}\\ void & f3(int**); & \sigstr{p)v}\\ double & f4(int, bool, char, double, const char*); & \sigstr{iBcdZ)d}\\ -\hline \end{tabular*} \caption{Type signature examples of C function prototypes} \label{sigex} @@ -148,7 +144,6 @@ \begin{table}[h] \begin{center} \begin{tabular*}{0.75\textwidth}{ll} -\hline Signature character & accepted Erlang data types\\ \hline \sigchar{B} & atoms 'true' and 'false' converted to bool\\ @@ -162,7 +157,6 @@ \sigchar{p} & binary (previously returned from call\_ptr or callf) cast to void*\\ \sigchar{Z} & string cast to void*\\ \sigchar{v} & no return type\\ -\hline \end{tabular*} \caption{Type signature encoding for Erlang bindings} \label{Erlangsigchar} @@ -178,7 +172,6 @@ \begin{table}[h] \begin{center} \begin{tabular*}{0.75\textwidth}{ll} -\hline Signature character & accepted Go data types\\ \hline \sigchar{B} & bool\\ @@ -191,7 +184,6 @@ \sigchar{d} & float64\\ \sigchar{p}, \sigchar{Z} & uintptr, unsafe.Pointer\\ \sigchar{v} & no return type\\ -\hline \end{tabular*} \caption{Type signature encoding for Go bindings} \label{Gosigchar} @@ -212,7 +204,6 @@ \begin{table}[h] \begin{center} \begin{tabular*}{0.75\textwidth}{ll} -\hline Signature character & accepted Python data types\\ \hline \sigchar{B} & bool \\ @@ -225,7 +216,6 @@ \sigchar{d} & double\\ \sigchar{p} & string or long casted to void*\\ \sigchar{v} & no return type\\ -\hline \end{tabular*} \caption{Type signature encoding for Python bindings} \label{Pysigchar} @@ -242,7 +232,6 @@ \begin{table}[h] \begin{center} \begin{tabular*}{0.75\textwidth}{ll} -\hline Signature character & accepted R data types\\ \hline \sigchar{B} & coerced to logical vector, first item\\ @@ -261,7 +250,6 @@ \sigchar{p} & external pointer or coerced to string vector, first item\\ \sigchar{Z} & coerced to string vector, first item\\ \sigchar{v} & no return type\\ -\hline \end{tabular*} \caption{Type signature encoding for R bindings} \label{Rsigchar} @@ -284,7 +272,6 @@ \begin{table}[h] \begin{center} \begin{tabular*}{0.75\textwidth}{ll} -\hline Signature character & accepted Ruby data types\\ \hline \sigchar{B} & TrueClass, FalseClass, NilClass, Fixnum casted to bool\\ @@ -297,7 +284,6 @@ \sigchar{d} & Float cast to double\\ \sigchar{p}, \sigchar{Z} & String cast to void*\\ \sigchar{v} & no return type\\ -\hline \end{tabular*} \caption{Type signature encoding for Ruby bindings} \label{Rubysigchar} diff -r 0f7d00b73257 -r e932e6331f35 doc/manual/manual_dyncall_api.tex --- a/doc/manual/manual_dyncall_api.tex Sun May 29 15:38:26 2016 +0200 +++ b/doc/manual/manual_dyncall_api.tex Fri Jun 03 02:40:13 2016 +0200 @@ -33,7 +33,6 @@ \begin{table}[h] \begin{center} \begin{tabular*}{0.8\textwidth}{llll} -\hline Subject & C symbol & Details & Example \\ \hline Types @@ -44,7 +43,6 @@ & camel-case & \capi{DCCallVM}\\ Functions & {\tt dc\group{function name}} & camel-case & \capi{dcNewCallVM}, \capi{dcArgInt}, \ldots\\ -\hline \end{tabular*} \caption{C interface conventions} \label{sourcecode} @@ -56,7 +54,6 @@ \begin{table}[h] \begin{center} \begin{tabular*}{0.75\textwidth}{ll} -\hline Type alias & C/C++ data type\\ \hline DCbool & \_Bool, bool\\ @@ -69,7 +66,6 @@ DCdouble & double\\ DCpointer & void*\\ DCvoid & void\\ -\hline \end{tabular*} \caption{Supported C/C++ argument and return types} \label{types} @@ -127,12 +123,10 @@ \begin{table}[h] \begin{center} \begin{tabular*}{0.95\textwidth}{ll} -\hline Constant & Description\\ \hline \lstinline@DC_ERROR_NONE@ & No error occured. \\ \lstinline@DC_ERROR_UNSUPPORTED_MODE@ & Unsupported mode, caused by \lstinline@dcMode()@ \\ -\hline \end{tabular*} \caption{CallVM calling convention modes} \label{errorcodes} @@ -158,7 +152,6 @@ \begin{table}[h] \begin{center} \begin{tabular*}{0.95\textwidth}{ll} -\hline Constant & Description\\ \hline \lstinline@DC_CALL_C_DEFAULT@ & C default function call for current platform\\ @@ -196,7 +189,6 @@ \lstinline@DC_CALL_SYS_X86_INT80H_BSD@ & C syscall for x86 BSD platforms\\ \lstinline@DC_CALL_SYS_X86_INT80H_LINUX@ & C syscall for x86 Linux\\ \lstinline@DC_CALL_SYS_PPC32@ & C syscall for ppc32 Linux\\ -\hline \end{tabular*} \caption{CallVM calling convention modes} \label{callingconventionmodes} @@ -281,8 +273,8 @@ \paragraph{Functions} \begin{lstlisting}[language=c] -void dcArgF (DCCallVM* vm, const DCsigchar* signature, ...); -void dcVArgF(DCCallVM* vm, const DCsigchar* signature, va_list args); +void dcArgF (DCCallVM* vm, const DCsigchar* signature, ...); +void dcVArgF (DCCallVM* vm, const DCsigchar* signature, va_list args); void dcCallF (DCCallVM* vm, DCValue* result, DCpointer funcptr, const DCsigchar* signature, ...); void dcVCallF(DCCallVM* vm, DCValue* result, DCpointer funcptr, diff -r 0f7d00b73257 -r e932e6331f35 doc/manual/manual_epilog.tex --- a/doc/manual/manual_epilog.tex Sun May 29 15:38:26 2016 +0200 +++ b/doc/manual/manual_epilog.tex Fri Jun 03 02:40:13 2016 +0200 @@ -32,25 +32,26 @@ Consider a simple program that issues a call by directly passing some unchecked command line arguments to the call itself, or even worse, by indirectly -choosing a library and a function to call without verification. +choosing a library to load and a function to call without verification. Such unchecked input data can quite easily be used to intentionally crash the -program or to hijack it by taking over control of the program flow.\\ -To put it in a nutshell, if not used with care, programs depending on the -\product{dyncall}, \product{dyncallback} and \product{dynload} libraries, -can be exploited as arbitrary function call dispatchers through manipulating -of their input data. Successful exploits of programs like the example outlined above -can be sed as very powerful tools for a wide variety of malicious attacks, \ldots +program or to take over control of the program flow.\\ +If not used with care, programs depending on the \product{dyncall}, +\product{dyncallback} and \product{dynload} libraries, can be exploited as +arbitrary function call dispatchers through manipulation of their input data. +Successful exploits of badly formed programs like outlined above can be misused +as powerful tools for a wide variety of malicious attacks, \ldots \subsection{Embedding} The \product{dyncall} library strives to have a minimal set of dependencies, meaning no required runtime dependencies and usually only the necessary tools -to build the library as build-time dependencies. +to build the library as build-time dependencies, like a compiler and assembler, +linker, etc.. The library uses some heap-memory to store the CallVM and uses by default the platform's \capi{malloc()} and \capi{free()} calls. However, providing custom -\capi{dcAllocMem()} and \capi{dcFreeMem()} functions will override the default -behaviour. +\capi{dcAllocMem} and \capi{dcFreeMem} C-preprocessor definitions will override +the default behaviour. See \shell{dyncall/dyncall\_alloc.h} for details. @@ -58,26 +59,25 @@ The \product{dyncall} library is thread-safe and reentrant, by means that it works correctly during execution of multiple threads if, and only if there is -at most a single thread pushing arguments to one CallVM (invoking the call is -always thread-safe, though). Since there's no limitation on the number of -created CallVM objects, it is recommended to keep a copy for each thread if -mutliple thread make use of \product{dyncall} at once. - +at most a single thread pushing arguments to one CallVM. Since there's no +limitation on the number of created CallVM objects, it is recommended to keep a +copy per thread if mutliple threads make use of \product{dyncall} in parallel. +Invoking the call should always be thread-safe, however, whether the called +function is thread-safe is up to the programmer to verify, of course. \subsection{Supported types} Currently, the \product{dyncall} library supports all of ANSI C's integer, -floating point and pointer types as function call arguments as well as return -values. Additionally, C++'s \capi{bool} and C99's \capi{\_Bool} types are supported. -Due to the still rare and often incomplete support of the \capi{long double} type -on various platforms, the latter is currently not officially supported. - +floating point and pointer types as function call arguments and return values. +Additionally, C++'s \capi{bool} and C99's \capi{\_Bool} types are supported. +Due to the still rare and often incomplete support of the \capi{long double} +type on various platforms, the latter is currently not officially supported. \subsection{Roadmap} The \product{dyncall} library should be extended by a wide variety of other -calling conventions and ported to other and more esoteric platforms. With its low -memory footprint it surely might come in handy on embedded systems. +calling conventions and ported to other and more esoteric platforms. With its +low memory footprint it surely comes in handy on embedded systems. Furthermore, the authors plan to provide more scripting language bindings, examples, and other projects based on \product{dyncall}.\\ Besides \product{dyncall} and \product{dyncallback}, the \product{dynload} diff -r 0f7d00b73257 -r e932e6331f35 doc/manual/manual_tex4ht.cfg --- a/doc/manual/manual_tex4ht.cfg Sun May 29 15:38:26 2016 +0200 +++ b/doc/manual/manual_tex4ht.cfg Fri Jun 03 02:40:13 2016 +0200 @@ -100,6 +100,24 @@ {\HCode{1 colspan="\HMultispan"\fi >}} {\HCode{}} +% Remove hr-tags that tex4ht inserts by default in around floats (e.g. tables) and replace them with a background. +% Also remove hr-tags around figures, entirely. +\Configure{float}[]{\HCode{
}}{}{\HCode{
}} +\ConfigureEnv{figure}{\HCode{}}{\HCode{}}{}{} + +%% Simplest possible table layout - do rest in css. +%\Configure{HBorder} +% {} +% {} +% {} +% {} +% {} +% {} +% {} +% {} +% {} +% {} + % @@@ Did not get that below to work, and don't understand it, either. % @@@ Default output is ok, so we're simply changing class name in % @@@ instead of this postprocessing. See Makefile. @@ -137,7 +155,12 @@ %http://www.itisnotoverengineering.com/2013/06/syntax-highlighting-with-tex4ht.html % Simplest possible paragraphs -\Configure{HtmlPar}{\EndP\Tg

}{\EndP\Tg

}{\HCode{

\Hnewline}}{\HCode{

\Hnewline}} +% @@@ this creates paragraphs around block level elements, which is not what we would like +% @@@ but it looks decent, except for the space in the float-element lr-corner +\Configure{HtmlPar}{\EndP\Tg

}{\EndP\Tg

}{\HCode{

\Hnewline}}{\HCode{

\Hnewline}} +%\Configure{HtmlPar}{\EndP\HCode{}}{\EndP\HCode{}}{\HCode{\Hnewline}}{\HCode{\Hnewline}} +%\Configure{HtmlPar}{\EndP\Tg

}{\EndP\HCode{}}{\HCode{

\Hnewline}}{\HCode{\Hnewline}} +%\Configure{HtmlPar}{\EndP\HCode{}}{\EndP\Tg

}{\HCode{\Hnewline}}{\HCode{

\Hnewline}}