package provide Freetype::ftotval 0.1

if {![info exists _source([file tail [info script]])]} {
package require Freetype::ft2build
package require $FT_FREETYPE

set FT_VALIDATE_BASE  [expr 0x0100]
set FT_VALIDATE_GDEF  [expr 0x0200]
set FT_VALIDATE_GPOS  [expr 0x0400]
set FT_VALIDATE_GSUB  [expr 0x0800]
set FT_VALIDATE_JSTF  [expr 0x1000]
set FT_VALIDATE_MATH  [expr 0x2000]

set FT_VALIDATE_OT [expr $FT_VALIDATE_BASE | \
                         $FT_VALIDATE_GDEF | \
                         $FT_VALIDATE_GPOS | \
                         $FT_VALIDATE_GSUB | \
                         $FT_VALIDATE_JSTF | \
                         $FT_VALIDATE_MATH]

::ffidl::callout _FT_OpenType_Validate {pointer FT_UInt pointer-var \
    pointer-var pointer-var pointer-var pointer-var} int \
    [::ffidl::symbol $::ft::lib FT_OpenType_Validate]
proc FT_OpenType_Validate {face
                           validation_flags
                           BASE_tableVarName 
                           GDEF_tableVarName
                           GPOS_tableVarName
                           GSUB_tableVarName
                           JSTF_tableVarName} {
    upvar $BASE_tableVarName BASE_table
    upvar $GDEF_tableVarName GDEF_table
    upvar $GPOS_tableVarName GPOS_table
    upvar $GSUB_tableVarName GSUB_table
    upvar $JSTF_tableVarName JSTF_table
    set p1 [::ft::_bytearray_from_pointer 0]
    set p2 [::ft::_bytearray_from_pointer 0]
    set p3 [::ft::_bytearray_from_pointer 0]
    set p4 [::ft::_bytearray_from_pointer 0]
    set p5 [::ft::_bytearray_from_pointer 0]
    set result [_FT_OpenType_Validate [$face getPointer] \
        $validation_flags p1 p2 p3 p4 p5]
    set BASE_table [::ft::_bytearray_to_pointer $p1]
    set GDEF_table [::ft::_bytearray_to_pointer $p2]
    set GPOS_table [::ft::_bytearray_to_pointer $p3]
    set GSUB_table [::ft::_bytearray_to_pointer $p4]
    set JSTF_table [::ft::_bytearray_to_pointer $p5]
    return $result
}

::ffidl::callout _FT_OpenType_Free {pointer pointer} void \
    [::ffidl::symbol $::ft::lib FT_OpenType_Free]
proc FT_OpenType_Free {face table} {
    _FT_OpenType_Free [$face getPointer] $table
}

set _source([file tail [info script]]) 1
}
