build: remove tracked generated .sls files and ignore them

ober

149faa7465c653707c739d460c272a9c9dd25b8e

diff --git a/.gitignore b/.gitignore
index 074d7fa..4ae044a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,4 @@
 jerboa_qt_shim.dylib
 qt_chez_shim.dylib
 dist/
+**/*.sls
diff --git a/lib/jerboa-qt/ffi.sls b/lib/jerboa-qt/ffi.sls
deleted file mode 100644
index a759c2f..0000000
--- a/lib/jerboa-qt/ffi.sls
+++ /dev/null
@@ -1,5195 +0,0 @@
-#!chezscheme
-;;; Generated by jerbuild — DO NOT EDIT
-;;; Source: src/jerboa-qt/ffi.ss
-
-(library (jerboa-qt ffi)
-  (export ffi-set-void-callback ffi-set-string-callback
-   ffi-set-int-callback ffi-set-bool-callback
-   ffi-qt-next-callback-event ffi-qt-callback-event-id
-   ffi-qt-callback-event-value ffi-qt-callback-event-string
-   ffi-qt-callback-pending-count ffi-qt-callback-dropped-count
-   ffi-qt-clear-callback-events ffi-qt-watch-destroyed
-   ffi-qt-unwatch-destroyed ffi-qt-clear-destroyed-watches
-   ffi-qt-notify-destroying-tree ffi-qt-app-create
-   ffi-qt-app-exec ffi-qt-app-quit ffi-qt-app-process-events
-   ffi-qt-app-destroy ffi-qt-app-is-running
-   ffi-qt-widget-create ffi-qt-widget-show ffi-qt-widget-hide
-   ffi-qt-widget-close ffi-qt-widget-set-enabled
-   ffi-qt-widget-is-enabled ffi-qt-widget-set-visible
-   ffi-qt-widget-is-visible ffi-qt-widget-set-updates-enabled
-   ffi-qt-widget-set-attribute ffi-qt-send-key-event
-   ffi-qt-widget-set-fixed-size ffi-qt-widget-set-minimum-size
-   ffi-qt-widget-set-maximum-size
-   ffi-qt-widget-set-minimum-width
-   ffi-qt-widget-set-minimum-height
-   ffi-qt-widget-set-maximum-width
-   ffi-qt-widget-set-maximum-height ffi-qt-widget-set-cursor
-   ffi-qt-widget-unset-cursor ffi-qt-widget-resize
-   ffi-qt-widget-set-style-sheet ffi-qt-widget-set-tooltip
-   ffi-qt-widget-set-font-size ffi-qt-widget-destroy
-   ffi-qt-main-window-create ffi-qt-main-window-set-title
-   ffi-qt-main-window-set-central-widget
-   ffi-qt-vbox-layout-create ffi-qt-hbox-layout-create
-   ffi-qt-layout-add-widget ffi-qt-layout-add-stretch
-   ffi-qt-layout-set-spacing ffi-qt-layout-set-margins
-   ffi-qt-label-create ffi-qt-label-set-text ffi-qt-label-text
-   ffi-qt-label-set-alignment ffi-qt-label-set-word-wrap
-   ffi-qt-push-button-create ffi-qt-push-button-set-text
-   ffi-qt-push-button-text ffi-qt-push-button-on-clicked
-   ffi-qt-line-edit-create ffi-qt-line-edit-set-text
-   ffi-qt-line-edit-text ffi-qt-line-edit-set-placeholder
-   ffi-qt-line-edit-set-read-only
-   ffi-qt-line-edit-set-echo-mode
-   ffi-qt-line-edit-on-text-changed
-   ffi-qt-line-edit-on-return-pressed ffi-qt-check-box-create
-   ffi-qt-check-box-set-text ffi-qt-check-box-set-checked
-   ffi-qt-check-box-is-checked ffi-qt-check-box-on-toggled
-   ffi-qt-combo-box-create ffi-qt-combo-box-add-item
-   ffi-qt-combo-box-set-current-index
-   ffi-qt-combo-box-current-index ffi-qt-combo-box-current-text
-   ffi-qt-combo-box-count ffi-qt-combo-box-clear
-   ffi-qt-combo-box-on-current-index-changed
-   ffi-qt-text-edit-create ffi-qt-text-edit-set-text
-   ffi-qt-text-edit-text ffi-qt-text-edit-set-placeholder
-   ffi-qt-text-edit-set-read-only ffi-qt-text-edit-append
-   ffi-qt-text-edit-clear ffi-qt-text-edit-scroll-to-bottom
-   ffi-qt-text-edit-html ffi-qt-text-edit-on-text-changed
-   ffi-qt-spin-box-create ffi-qt-spin-box-set-value
-   ffi-qt-spin-box-value ffi-qt-spin-box-set-range
-   ffi-qt-spin-box-set-single-step ffi-qt-spin-box-set-prefix
-   ffi-qt-spin-box-set-suffix ffi-qt-spin-box-on-value-changed
-   ffi-qt-dialog-create ffi-qt-dialog-exec ffi-qt-dialog-accept
-   ffi-qt-dialog-reject ffi-qt-dialog-set-title
-   ffi-qt-message-box-information ffi-qt-message-box-warning
-   ffi-qt-message-box-question ffi-qt-message-box-critical
-   ffi-qt-file-dialog-open-file ffi-qt-file-dialog-save-file
-   ffi-qt-file-dialog-open-directory
-   ffi-qt-main-window-menu-bar ffi-qt-menu-bar-add-menu
-   ffi-qt-menu-add-menu ffi-qt-menu-add-action
-   ffi-qt-menu-add-separator ffi-qt-action-create
-   ffi-qt-action-set-text ffi-qt-action-text
-   ffi-qt-action-set-shortcut ffi-qt-action-set-enabled
-   ffi-qt-action-is-enabled ffi-qt-action-set-checkable
-   ffi-qt-action-is-checkable ffi-qt-action-set-checked
-   ffi-qt-action-is-checked ffi-qt-action-set-tooltip
-   ffi-qt-action-set-status-tip ffi-qt-action-on-triggered
-   ffi-qt-action-on-toggled ffi-qt-toolbar-create
-   ffi-qt-main-window-add-toolbar ffi-qt-toolbar-add-action
-   ffi-qt-toolbar-add-separator ffi-qt-toolbar-add-widget
-   ffi-qt-toolbar-set-movable ffi-qt-toolbar-set-icon-size
-   ffi-qt-main-window-set-status-bar-text
-   ffi-qt-grid-layout-create ffi-qt-grid-layout-add-widget
-   ffi-qt-grid-layout-set-row-stretch
-   ffi-qt-grid-layout-set-column-stretch
-   ffi-qt-grid-layout-set-row-minimum-height
-   ffi-qt-grid-layout-set-column-minimum-width
-   ffi-qt-timer-create ffi-qt-timer-start ffi-qt-timer-stop
-   ffi-qt-timer-set-single-shot ffi-qt-timer-is-active
-   ffi-qt-timer-interval ffi-qt-timer-set-interval
-   ffi-qt-timer-on-timeout ffi-qt-timer-single-shot
-   ffi-qt-timer-destroy ffi-qt-clipboard-text
-   ffi-qt-clipboard-set-text ffi-qt-clipboard-on-changed
-   ffi-qt-tree-widget-create
-   ffi-qt-tree-widget-set-column-count
-   ffi-qt-tree-widget-column-count
-   ffi-qt-tree-widget-set-header-label
-   ffi-qt-tree-widget-set-header-item-text
-   ffi-qt-tree-widget-add-top-level-item
-   ffi-qt-tree-widget-top-level-item-count
-   ffi-qt-tree-widget-top-level-item
-   ffi-qt-tree-widget-current-item
-   ffi-qt-tree-widget-set-current-item
-   ffi-qt-tree-widget-expand-item
-   ffi-qt-tree-widget-collapse-item
-   ffi-qt-tree-widget-expand-all
-   ffi-qt-tree-widget-collapse-all ffi-qt-tree-widget-clear
-   ffi-qt-tree-widget-on-current-item-changed
-   ffi-qt-tree-widget-on-item-double-clicked
-   ffi-qt-tree-widget-on-item-expanded
-   ffi-qt-tree-widget-on-item-collapsed ffi-qt-tree-item-create
-   ffi-qt-tree-item-set-text ffi-qt-tree-item-text
-   ffi-qt-tree-item-add-child ffi-qt-tree-item-child-count
-   ffi-qt-tree-item-child ffi-qt-tree-item-parent
-   ffi-qt-tree-item-set-expanded ffi-qt-tree-item-is-expanded
-   ffi-qt-list-widget-create ffi-qt-list-widget-add-item
-   ffi-qt-list-widget-insert-item
-   ffi-qt-list-widget-remove-item
-   ffi-qt-list-widget-current-row
-   ffi-qt-list-widget-set-current-row
-   ffi-qt-list-widget-item-text ffi-qt-list-widget-count
-   ffi-qt-list-widget-clear ffi-qt-list-widget-set-item-data
-   ffi-qt-list-widget-item-data
-   ffi-qt-list-widget-on-current-row-changed
-   ffi-qt-list-widget-on-item-double-clicked
-   ffi-qt-table-widget-create ffi-qt-table-widget-set-item
-   ffi-qt-table-widget-item-text
-   ffi-qt-table-widget-set-horizontal-header-item
-   ffi-qt-table-widget-set-vertical-header-item
-   ffi-qt-table-widget-set-row-count
-   ffi-qt-table-widget-set-column-count
-   ffi-qt-table-widget-row-count
-   ffi-qt-table-widget-column-count
-   ffi-qt-table-widget-current-row
-   ffi-qt-table-widget-current-column ffi-qt-table-widget-clear
-   ffi-qt-table-widget-on-cell-clicked ffi-qt-tab-widget-create
-   ffi-qt-tab-widget-add-tab
-   ffi-qt-tab-widget-set-current-index
-   ffi-qt-tab-widget-current-index ffi-qt-tab-widget-count
-   ffi-qt-tab-widget-set-tab-text
-   ffi-qt-tab-widget-on-current-changed
-   ffi-qt-progress-bar-create ffi-qt-progress-bar-set-value
-   ffi-qt-progress-bar-value ffi-qt-progress-bar-set-range
-   ffi-qt-progress-bar-set-format ffi-qt-slider-create
-   ffi-qt-slider-set-value ffi-qt-slider-value
-   ffi-qt-slider-set-range ffi-qt-slider-set-single-step
-   ffi-qt-slider-set-tick-interval
-   ffi-qt-slider-set-tick-position
-   ffi-qt-slider-on-value-changed ffi-qt-widget-show-minimized
-   ffi-qt-widget-show-maximized ffi-qt-widget-show-fullscreen
-   ffi-qt-widget-show-normal ffi-qt-widget-window-state
-   ffi-qt-widget-move ffi-qt-widget-x ffi-qt-widget-y
-   ffi-qt-widget-width ffi-qt-widget-height
-   ffi-qt-widget-set-focus ffi-qt-app-set-style-sheet
-   ffi-qt-scroll-area-create ffi-qt-scroll-area-set-widget
-   ffi-qt-scroll-area-set-widget-resizable
-   ffi-qt-scroll-area-set-horizontal-scrollbar-policy
-   ffi-qt-scroll-area-set-vertical-scrollbar-policy
-   ffi-qt-splitter-create ffi-qt-splitter-add-widget
-   ffi-qt-splitter-insert-widget ffi-qt-splitter-index-of
-   ffi-qt-splitter-widget ffi-qt-splitter-count
-   ffi-qt-splitter-set-sizes-2 ffi-qt-splitter-set-sizes-3
-   ffi-qt-splitter-set-sizes-4 ffi-qt-splitter-size-at
-   ffi-qt-splitter-set-stretch-factor
-   ffi-qt-splitter-set-handle-width
-   ffi-qt-splitter-set-collapsible
-   ffi-qt-splitter-is-collapsible
-   ffi-qt-splitter-set-orientation ffi-qt-install-key-handler
-   ffi-qt-install-key-handler-consuming ffi-qt-last-key-code
-   ffi-qt-last-key-modifiers ffi-qt-last-key-text
-   ffi-qt-last-key-autorepeat ffi-qt-pixmap-load
-   ffi-qt-pixmap-width ffi-qt-pixmap-height
-   ffi-qt-pixmap-is-null ffi-qt-pixmap-scaled
-   ffi-qt-pixmap-destroy ffi-qt-pixmap-save ffi-qt-widget-grab
-   ffi-qt-label-set-pixmap ffi-qt-icon-create
-   ffi-qt-icon-create-from-pixmap ffi-qt-icon-is-null
-   ffi-qt-icon-destroy ffi-qt-push-button-set-icon
-   ffi-qt-action-set-icon ffi-qt-widget-set-window-icon
-   ffi-qt-radio-button-create ffi-qt-radio-button-text
-   ffi-qt-radio-button-set-text ffi-qt-radio-button-is-checked
-   ffi-qt-radio-button-set-checked
-   ffi-qt-radio-button-on-toggled ffi-qt-button-group-create
-   ffi-qt-button-group-add-button
-   ffi-qt-button-group-remove-button
-   ffi-qt-button-group-checked-id
-   ffi-qt-button-group-set-exclusive
-   ffi-qt-button-group-is-exclusive
-   ffi-qt-button-group-on-clicked ffi-qt-button-group-destroy
-   ffi-qt-group-box-create ffi-qt-group-box-title
-   ffi-qt-group-box-set-title ffi-qt-group-box-set-checkable
-   ffi-qt-group-box-is-checkable ffi-qt-group-box-set-checked
-   ffi-qt-group-box-is-checked ffi-qt-group-box-on-toggled
-   ffi-qt-font-create ffi-qt-font-family ffi-qt-font-point-size
-   ffi-qt-font-is-bold ffi-qt-font-set-bold
-   ffi-qt-font-is-italic ffi-qt-font-set-italic
-   ffi-qt-font-destroy ffi-qt-widget-set-font
-   ffi-qt-widget-font ffi-qt-color-create
-   ffi-qt-color-create-name ffi-qt-color-red ffi-qt-color-green
-   ffi-qt-color-blue ffi-qt-color-alpha ffi-qt-color-name
-   ffi-qt-color-is-valid ffi-qt-color-destroy
-   ffi-qt-const-align-left ffi-qt-const-align-right
-   ffi-qt-const-align-center ffi-qt-const-align-top
-   ffi-qt-const-align-bottom ffi-qt-const-echo-normal
-   ffi-qt-const-echo-no-echo ffi-qt-const-echo-password
-   ffi-qt-const-echo-password-on-edit ffi-qt-const-horizontal
-   ffi-qt-const-vertical ffi-qt-const-ticks-none
-   ffi-qt-const-ticks-above ffi-qt-const-ticks-below
-   ffi-qt-const-ticks-both-sides ffi-qt-const-window-no-state
-   ffi-qt-const-window-minimized ffi-qt-const-window-maximized
-   ffi-qt-const-window-full-screen
-   ffi-qt-const-scrollbar-as-needed
-   ffi-qt-const-scrollbar-always-off
-   ffi-qt-const-scrollbar-always-on ffi-qt-const-cursor-arrow
-   ffi-qt-const-cursor-cross ffi-qt-const-cursor-wait
-   ffi-qt-const-cursor-ibeam ffi-qt-const-cursor-pointing-hand
-   ffi-qt-const-cursor-forbidden ffi-qt-const-cursor-busy
-   ffi-qt-const-frame-no-frame ffi-qt-const-frame-box
-   ffi-qt-const-frame-panel ffi-qt-const-frame-win-panel
-   ffi-qt-const-frame-hline ffi-qt-const-frame-vline
-   ffi-qt-const-frame-styled-panel ffi-qt-const-frame-plain
-   ffi-qt-const-frame-raised ffi-qt-const-frame-sunken
-   ffi-qt-const-button-ok ffi-qt-const-button-cancel
-   ffi-qt-const-button-apply ffi-qt-const-button-close
-   ffi-qt-const-button-yes ffi-qt-const-button-no
-   ffi-qt-const-button-reset ffi-qt-const-button-help
-   ffi-qt-const-button-save ffi-qt-const-button-discard
-   ffi-qt-const-button-role-invalid
-   ffi-qt-const-button-role-accept
-   ffi-qt-const-button-role-reject
-   ffi-qt-const-button-role-destructive
-   ffi-qt-const-button-role-action
-   ffi-qt-const-button-role-help ffi-qt-const-button-role-yes
-   ffi-qt-const-button-role-no ffi-qt-const-button-role-apply
-   ffi-qt-const-button-role-reset ffi-qt-const-monday
-   ffi-qt-const-tuesday ffi-qt-const-wednesday
-   ffi-qt-const-thursday ffi-qt-const-friday
-   ffi-qt-const-saturday ffi-qt-const-sunday
-   ffi-qt-const-settings-native ffi-qt-const-settings-ini
-   ffi-qt-const-completer-popup ffi-qt-const-completer-inline
-   ffi-qt-const-completer-unfiltered-popup
-   ffi-qt-const-case-insensitive ffi-qt-const-case-sensitive
-   ffi-qt-const-match-starts-with ffi-qt-const-match-contains
-   ffi-qt-const-match-ends-with ffi-qt-const-validator-invalid
-   ffi-qt-const-validator-intermediate
-   ffi-qt-const-validator-acceptable ffi-qt-const-plain-no-wrap
-   ffi-qt-const-plain-widget-wrap ffi-qt-const-delayed-popup
-   ffi-qt-const-menu-button-popup ffi-qt-const-instant-popup
-   ffi-qt-const-no-arrow ffi-qt-const-up-arrow
-   ffi-qt-const-down-arrow ffi-qt-const-left-arrow
-   ffi-qt-const-right-arrow ffi-qt-const-tool-button-icon-only
-   ffi-qt-const-tool-button-text-only
-   ffi-qt-const-tool-button-text-beside-icon
-   ffi-qt-const-tool-button-text-under-icon
-   ffi-qt-const-size-fixed ffi-qt-const-size-minimum
-   ffi-qt-const-size-minimum-expanding
-   ffi-qt-const-size-maximum ffi-qt-const-size-preferred
-   ffi-qt-const-size-expanding ffi-qt-const-size-ignored
-   ffi-qt-const-item-movable ffi-qt-const-item-selectable
-   ffi-qt-const-item-focusable ffi-qt-const-drag-none
-   ffi-qt-const-drag-scroll ffi-qt-const-drag-rubber-band
-   ffi-qt-const-render-antialiasing
-   ffi-qt-const-render-smooth-pixmap
-   ffi-qt-const-render-text-antialiasing
-   ffi-qt-const-process-not-running
-   ffi-qt-const-process-starting ffi-qt-const-process-running
-   ffi-qt-const-mdi-subwindow ffi-qt-const-mdi-tabbed
-   ffi-qt-const-lcd-dec ffi-qt-const-lcd-hex
-   ffi-qt-const-lcd-oct ffi-qt-const-lcd-bin
-   ffi-qt-const-lcd-outline ffi-qt-const-lcd-filled
-   ffi-qt-const-lcd-flat ffi-qt-const-dir-dirs
-   ffi-qt-const-dir-files ffi-qt-const-dir-hidden
-   ffi-qt-const-dir-no-dot-and-dot-dot
-   ffi-qt-const-cursor-no-move ffi-qt-const-cursor-start
-   ffi-qt-const-cursor-up ffi-qt-const-cursor-start-of-line
-   ffi-qt-const-cursor-start-of-block
-   ffi-qt-const-cursor-previous-char
-   ffi-qt-const-cursor-previous-block
-   ffi-qt-const-cursor-end-of-line
-   ffi-qt-const-cursor-end-of-block
-   ffi-qt-const-cursor-next-char ffi-qt-const-cursor-next-block
-   ffi-qt-const-cursor-end ffi-qt-const-cursor-down
-   ffi-qt-const-cursor-left ffi-qt-const-cursor-word-left
-   ffi-qt-const-cursor-next-word ffi-qt-const-cursor-right
-   ffi-qt-const-cursor-word-right
-   ffi-qt-const-cursor-previous-word ffi-qt-const-move-anchor
-   ffi-qt-const-keep-anchor ffi-qt-const-find-backward
-   ffi-qt-const-find-case-sensitive
-   ffi-qt-const-find-whole-words ffi-qt-const-dock-left
-   ffi-qt-const-dock-right ffi-qt-const-dock-top
-   ffi-qt-const-dock-bottom ffi-qt-const-tray-no-icon
-   ffi-qt-const-tray-information ffi-qt-const-tray-warning
-   ffi-qt-const-tray-critical ffi-qt-const-key-escape
-   ffi-qt-const-key-tab ffi-qt-const-key-backtab
-   ffi-qt-const-key-backspace ffi-qt-const-key-return
-   ffi-qt-const-key-enter ffi-qt-const-key-insert
-   ffi-qt-const-key-delete ffi-qt-const-key-pause
-   ffi-qt-const-key-home ffi-qt-const-key-end
-   ffi-qt-const-key-left ffi-qt-const-key-up
-   ffi-qt-const-key-right ffi-qt-const-key-down
-   ffi-qt-const-key-page-up ffi-qt-const-key-page-down
-   ffi-qt-const-key-f1 ffi-qt-const-key-f2 ffi-qt-const-key-f3
-   ffi-qt-const-key-f4 ffi-qt-const-key-f5 ffi-qt-const-key-f6
-   ffi-qt-const-key-f7 ffi-qt-const-key-f8 ffi-qt-const-key-f9
-   ffi-qt-const-key-f10 ffi-qt-const-key-f11
-   ffi-qt-const-key-f12 ffi-qt-const-key-space
-   ffi-qt-const-mod-none ffi-qt-const-mod-shift
-   ffi-qt-const-mod-control ffi-qt-const-mod-alt
-   ffi-qt-const-mod-meta ffi-qt-const-select-no-selection
-   ffi-qt-const-select-single ffi-qt-const-select-multi
-   ffi-qt-const-select-extended ffi-qt-const-select-contiguous
-   ffi-qt-const-select-items ffi-qt-const-select-rows
-   ffi-qt-const-select-columns ffi-qt-const-no-edit-triggers
-   ffi-qt-const-edit-double-click
-   ffi-qt-const-edit-selected-click
-   ffi-qt-const-edit-any-key-pressed
-   ffi-qt-const-edit-all-triggers ffi-qt-const-sort-ascending
-   ffi-qt-const-sort-descending ffi-qt-const-header-interactive
-   ffi-qt-const-header-stretch ffi-qt-const-header-fixed
-   ffi-qt-const-header-resize-to-contents
-   ffi-qt-const-unchecked ffi-qt-const-partially-checked
-   ffi-qt-const-checked ffi-qt-const-flow-top-to-bottom
-   ffi-qt-const-flow-left-to-right ffi-qt-font-dialog-get-font
-   ffi-qt-color-dialog-get-color ffi-qt-stacked-widget-create
-   ffi-qt-stacked-widget-add-widget
-   ffi-qt-stacked-widget-set-current-index
-   ffi-qt-stacked-widget-current-index
-   ffi-qt-stacked-widget-count
-   ffi-qt-stacked-widget-on-current-changed
-   ffi-qt-dock-widget-create ffi-qt-dock-widget-set-widget
-   ffi-qt-dock-widget-widget ffi-qt-dock-widget-set-title
-   ffi-qt-dock-widget-title ffi-qt-dock-widget-set-floating
-   ffi-qt-dock-widget-is-floating
-   ffi-qt-main-window-add-dock-widget
-   ffi-qt-system-tray-icon-create
-   ffi-qt-system-tray-icon-set-tooltip
-   ffi-qt-system-tray-icon-set-icon
-   ffi-qt-system-tray-icon-show ffi-qt-system-tray-icon-hide
-   ffi-qt-system-tray-icon-show-message
-   ffi-qt-system-tray-icon-set-context-menu
-   ffi-qt-system-tray-icon-on-activated
-   ffi-qt-system-tray-icon-is-available
-   ffi-qt-system-tray-icon-destroy ffi-qt-pixmap-create-blank
-   ffi-qt-pixmap-fill ffi-qt-painter-create ffi-qt-painter-end
-   ffi-qt-painter-destroy ffi-qt-painter-set-pen-color
-   ffi-qt-painter-set-pen-width ffi-qt-painter-set-brush-color
-   ffi-qt-painter-set-font-painter
-   ffi-qt-painter-set-antialiasing ffi-qt-painter-draw-line
-   ffi-qt-painter-draw-rect ffi-qt-painter-fill-rect
-   ffi-qt-painter-draw-ellipse ffi-qt-painter-draw-text
-   ffi-qt-painter-draw-text-rect ffi-qt-painter-draw-pixmap
-   ffi-qt-painter-draw-point ffi-qt-painter-draw-arc
-   ffi-qt-painter-save ffi-qt-painter-restore
-   ffi-qt-painter-translate ffi-qt-painter-rotate
-   ffi-qt-painter-scale ffi-qt-widget-set-accept-drops
-   ffi-qt-drop-filter-install ffi-qt-drop-filter-last-text
-   ffi-qt-drop-filter-destroy ffi-qt-drag-text
-   ffi-qt-double-spin-box-create
-   ffi-qt-double-spin-box-set-value
-   ffi-qt-double-spin-box-value
-   ffi-qt-double-spin-box-set-range
-   ffi-qt-double-spin-box-set-single-step
-   ffi-qt-double-spin-box-set-decimals
-   ffi-qt-double-spin-box-decimals
-   ffi-qt-double-spin-box-set-prefix
-   ffi-qt-double-spin-box-set-suffix
-   ffi-qt-double-spin-box-on-value-changed
-   ffi-qt-date-edit-create ffi-qt-date-edit-set-date
-   ffi-qt-date-edit-year ffi-qt-date-edit-month
-   ffi-qt-date-edit-day ffi-qt-date-edit-date-string
-   ffi-qt-date-edit-set-minimum-date
-   ffi-qt-date-edit-set-maximum-date
-   ffi-qt-date-edit-set-calendar-popup
-   ffi-qt-date-edit-set-display-format
-   ffi-qt-date-edit-on-date-changed ffi-qt-time-edit-create
-   ffi-qt-time-edit-set-time ffi-qt-time-edit-hour
-   ffi-qt-time-edit-minute ffi-qt-time-edit-second
-   ffi-qt-time-edit-time-string
-   ffi-qt-time-edit-set-display-format
-   ffi-qt-time-edit-on-time-changed ffi-qt-frame-create
-   ffi-qt-frame-set-frame-shape ffi-qt-frame-frame-shape
-   ffi-qt-frame-set-frame-shadow ffi-qt-frame-frame-shadow
-   ffi-qt-frame-set-line-width ffi-qt-frame-line-width
-   ffi-qt-frame-set-mid-line-width
-   ffi-qt-progress-dialog-create
-   ffi-qt-progress-dialog-set-value
-   ffi-qt-progress-dialog-value
-   ffi-qt-progress-dialog-set-range
-   ffi-qt-progress-dialog-set-label-text
-   ffi-qt-progress-dialog-was-canceled
-   ffi-qt-progress-dialog-set-minimum-duration
-   ffi-qt-progress-dialog-set-auto-close
-   ffi-qt-progress-dialog-set-auto-reset
-   ffi-qt-progress-dialog-reset
-   ffi-qt-progress-dialog-on-canceled
-   ffi-qt-input-dialog-get-text ffi-qt-input-dialog-get-int
-   ffi-qt-input-dialog-get-double ffi-qt-input-dialog-get-item
-   ffi-qt-input-dialog-was-accepted ffi-qt-form-layout-create
-   ffi-qt-form-layout-add-row ffi-qt-form-layout-add-row-widget
-   ffi-qt-form-layout-add-spanning-widget
-   ffi-qt-form-layout-row-count ffi-qt-shortcut-create
-   ffi-qt-shortcut-set-key ffi-qt-shortcut-set-enabled
-   ffi-qt-shortcut-is-enabled ffi-qt-shortcut-on-activated
-   ffi-qt-shortcut-destroy ffi-qt-text-browser-create
-   ffi-qt-text-browser-set-html
-   ffi-qt-text-browser-set-plain-text
-   ffi-qt-text-browser-plain-text
-   ffi-qt-text-browser-set-open-external-links
-   ffi-qt-text-browser-set-source ffi-qt-text-browser-source
-   ffi-qt-text-browser-scroll-to-bottom
-   ffi-qt-text-browser-append ffi-qt-text-browser-html
-   ffi-qt-text-browser-on-anchor-clicked
-   ffi-qt-button-box-create ffi-qt-button-box-button
-   ffi-qt-button-box-add-button ffi-qt-button-box-on-accepted
-   ffi-qt-button-box-on-rejected ffi-qt-button-box-on-clicked
-   ffi-qt-calendar-create ffi-qt-calendar-set-selected-date
-   ffi-qt-calendar-selected-year ffi-qt-calendar-selected-month
-   ffi-qt-calendar-selected-day
-   ffi-qt-calendar-selected-date-string
-   ffi-qt-calendar-set-minimum-date
-   ffi-qt-calendar-set-maximum-date
-   ffi-qt-calendar-set-first-day-of-week
-   ffi-qt-calendar-set-grid-visible
-   ffi-qt-calendar-is-grid-visible
-   ffi-qt-calendar-set-navigation-bar-visible
-   ffi-qt-calendar-on-selection-changed
-   ffi-qt-calendar-on-clicked ffi-qt-settings-create
-   ffi-qt-settings-create-file ffi-qt-settings-set-string
-   ffi-qt-settings-value-string ffi-qt-settings-set-int
-   ffi-qt-settings-value-int ffi-qt-settings-set-double
-   ffi-qt-settings-value-double ffi-qt-settings-set-bool
-   ffi-qt-settings-value-bool ffi-qt-settings-contains
-   ffi-qt-settings-remove ffi-qt-settings-all-keys
-   ffi-qt-settings-child-keys ffi-qt-settings-child-groups
-   ffi-qt-settings-begin-group ffi-qt-settings-end-group
-   ffi-qt-settings-group ffi-qt-settings-sync
-   ffi-qt-settings-clear ffi-qt-settings-file-name
-   ffi-qt-settings-is-writable ffi-qt-settings-destroy
-   ffi-qt-completer-create ffi-qt-completer-set-model-strings
-   ffi-qt-completer-set-case-sensitivity
-   ffi-qt-completer-set-completion-mode
-   ffi-qt-completer-set-filter-mode
-   ffi-qt-completer-set-max-visible-items
-   ffi-qt-completer-completion-count
-   ffi-qt-completer-current-completion
-   ffi-qt-completer-set-completion-prefix
-   ffi-qt-completer-on-activated ffi-qt-line-edit-set-completer
-   ffi-qt-completer-destroy ffi-qt-tooltip-show-text
-   ffi-qt-tooltip-hide-text ffi-qt-tooltip-is-visible
-   ffi-qt-widget-tooltip ffi-qt-widget-set-whats-this
-   ffi-qt-widget-whats-this ffi-qt-standard-model-create
-   ffi-qt-standard-model-destroy
-   ffi-qt-standard-model-row-count
-   ffi-qt-standard-model-column-count
-   ffi-qt-standard-model-set-row-count
-   ffi-qt-standard-model-set-column-count
-   ffi-qt-standard-model-set-item ffi-qt-standard-model-item
-   ffi-qt-standard-model-insert-row
-   ffi-qt-standard-model-insert-column
-   ffi-qt-standard-model-remove-row
-   ffi-qt-standard-model-remove-column
-   ffi-qt-standard-model-clear
-   ffi-qt-standard-model-set-horizontal-header
-   ffi-qt-standard-model-set-vertical-header
-   ffi-qt-standard-item-create ffi-qt-standard-item-text
-   ffi-qt-standard-item-set-text ffi-qt-standard-item-tooltip
-   ffi-qt-standard-item-set-tooltip
-   ffi-qt-standard-item-set-editable
-   ffi-qt-standard-item-is-editable
-   ffi-qt-standard-item-set-enabled
-   ffi-qt-standard-item-is-enabled
-   ffi-qt-standard-item-set-selectable
-   ffi-qt-standard-item-is-selectable
-   ffi-qt-standard-item-set-checkable
-   ffi-qt-standard-item-is-checkable
-   ffi-qt-standard-item-set-check-state
-   ffi-qt-standard-item-check-state
-   ffi-qt-standard-item-set-icon
-   ffi-qt-standard-item-append-row
-   ffi-qt-standard-item-row-count
-   ffi-qt-standard-item-column-count ffi-qt-standard-item-child
-   ffi-qt-string-list-model-create
-   ffi-qt-string-list-model-destroy
-   ffi-qt-string-list-model-set-strings
-   ffi-qt-string-list-model-strings
-   ffi-qt-string-list-model-row-count ffi-qt-view-set-model
-   ffi-qt-view-set-selection-mode
-   ffi-qt-view-set-selection-behavior
-   ffi-qt-view-set-alternating-row-colors
-   ffi-qt-view-set-sorting-enabled
-   ffi-qt-view-set-edit-triggers ffi-qt-list-view-create
-   ffi-qt-list-view-set-flow ffi-qt-table-view-create
-   ffi-qt-table-view-set-column-width
-   ffi-qt-table-view-set-row-height
-   ffi-qt-table-view-hide-column ffi-qt-table-view-show-column
-   ffi-qt-table-view-hide-row ffi-qt-table-view-show-row
-   ffi-qt-table-view-resize-columns-to-contents
-   ffi-qt-table-view-resize-rows-to-contents
-   ffi-qt-tree-view-create ffi-qt-tree-view-expand-all
-   ffi-qt-tree-view-collapse-all
-   ffi-qt-tree-view-set-indentation
-   ffi-qt-tree-view-indentation
-   ffi-qt-tree-view-set-root-is-decorated
-   ffi-qt-tree-view-set-header-hidden
-   ffi-qt-tree-view-set-column-width
-   ffi-qt-view-header-set-stretch-last-section
-   ffi-qt-view-header-set-section-resize-mode
-   ffi-qt-view-header-hide ffi-qt-view-header-show
-   ffi-qt-view-header-set-default-section-size
-   ffi-qt-sort-filter-proxy-create
-   ffi-qt-sort-filter-proxy-destroy
-   ffi-qt-sort-filter-proxy-set-source-model
-   ffi-qt-sort-filter-proxy-set-filter-regex
-   ffi-qt-sort-filter-proxy-set-filter-column
-   ffi-qt-sort-filter-proxy-set-filter-case-sensitivity
-   ffi-qt-sort-filter-proxy-set-filter-role
-   ffi-qt-sort-filter-proxy-sort
-   ffi-qt-sort-filter-proxy-set-sort-role
-   ffi-qt-sort-filter-proxy-set-dynamic-sort-filter
-   ffi-qt-sort-filter-proxy-invalidate-filter
-   ffi-qt-sort-filter-proxy-row-count ffi-qt-view-on-clicked
-   ffi-qt-view-on-double-clicked ffi-qt-view-on-activated
-   ffi-qt-view-on-selection-changed
-   ffi-qt-view-last-clicked-row ffi-qt-view-last-clicked-col
-   ffi-qt-view-selected-rows ffi-qt-view-current-row
-   ffi-qt-int-validator-create ffi-qt-double-validator-create
-   ffi-qt-regex-validator-create ffi-qt-validator-destroy
-   ffi-qt-validator-validate ffi-qt-line-edit-set-validator
-   ffi-qt-line-edit-has-acceptable-input
-   ffi-qt-plain-text-edit-create
-   ffi-qt-plain-text-edit-set-text ffi-qt-plain-text-edit-text
-   ffi-qt-plain-text-edit-append ffi-qt-plain-text-edit-clear
-   ffi-qt-plain-text-edit-set-read-only
-   ffi-qt-plain-text-edit-is-read-only
-   ffi-qt-plain-text-edit-set-placeholder
-   ffi-qt-plain-text-edit-line-count
-   ffi-qt-plain-text-edit-set-max-block-count
-   ffi-qt-plain-text-edit-cursor-line
-   ffi-qt-plain-text-edit-cursor-column
-   ffi-qt-plain-text-edit-set-line-wrap
-   ffi-qt-plain-text-edit-on-text-changed
-   ffi-qt-plain-text-edit-cursor-position
-   ffi-qt-plain-text-edit-set-cursor-position
-   ffi-qt-plain-text-edit-move-cursor
-   ffi-qt-plain-text-edit-select-all
-   ffi-qt-plain-text-edit-selected-text
-   ffi-qt-plain-text-edit-selection-start
-   ffi-qt-plain-text-edit-selection-end
-   ffi-qt-plain-text-edit-set-selection
-   ffi-qt-plain-text-edit-has-selection
-   ffi-qt-plain-text-edit-insert-text
-   ffi-qt-plain-text-edit-remove-selected-text
-   ffi-qt-plain-text-edit-undo ffi-qt-plain-text-edit-redo
-   ffi-qt-plain-text-edit-can-undo ffi-qt-plain-text-edit-cut
-   ffi-qt-plain-text-edit-copy ffi-qt-plain-text-edit-paste
-   ffi-qt-plain-text-edit-text-length
-   ffi-qt-plain-text-edit-text-range
-   ffi-qt-plain-text-edit-line-from-position
-   ffi-qt-plain-text-edit-line-end-position
-   ffi-qt-plain-text-edit-find-text
-   ffi-qt-plain-text-edit-ensure-cursor-visible
-   ffi-qt-plain-text-edit-center-cursor
-   ffi-qt-text-document-create
-   ffi-qt-plain-text-document-create
-   ffi-qt-text-document-destroy ffi-qt-plain-text-edit-document
-   ffi-qt-plain-text-edit-set-document
-   ffi-qt-text-document-is-modified
-   ffi-qt-text-document-set-modified ffi-qt-tool-button-create
-   ffi-qt-tool-button-set-text ffi-qt-tool-button-text
-   ffi-qt-tool-button-set-icon ffi-qt-tool-button-set-menu
-   ffi-qt-tool-button-set-popup-mode
-   ffi-qt-tool-button-set-auto-raise
-   ffi-qt-tool-button-set-arrow-type
-   ffi-qt-tool-button-set-tool-button-style
-   ffi-qt-tool-button-on-clicked ffi-qt-layout-add-spacing
-   ffi-qt-widget-set-size-policy
-   ffi-qt-layout-set-stretch-factor
-   ffi-qt-graphics-scene-create ffi-qt-graphics-scene-add-rect
-   ffi-qt-graphics-scene-add-ellipse
-   ffi-qt-graphics-scene-add-line
-   ffi-qt-graphics-scene-add-text
-   ffi-qt-graphics-scene-add-pixmap
-   ffi-qt-graphics-scene-remove-item
-   ffi-qt-graphics-scene-clear
-   ffi-qt-graphics-scene-items-count
-   ffi-qt-graphics-scene-set-background
-   ffi-qt-graphics-scene-destroy ffi-qt-graphics-view-create
-   ffi-qt-graphics-view-set-render-hint
-   ffi-qt-graphics-view-set-drag-mode
-   ffi-qt-graphics-view-fit-in-view ffi-qt-graphics-view-scale
-   ffi-qt-graphics-view-center-on ffi-qt-graphics-item-set-pos
-   ffi-qt-graphics-item-x ffi-qt-graphics-item-y
-   ffi-qt-graphics-item-set-pen ffi-qt-graphics-item-set-brush
-   ffi-qt-graphics-item-set-flags
-   ffi-qt-graphics-item-set-tooltip
-   ffi-qt-graphics-item-set-zvalue ffi-qt-graphics-item-zvalue
-   ffi-qt-graphics-item-set-rotation
-   ffi-qt-graphics-item-set-scale
-   ffi-qt-graphics-item-set-visible ffi-qt-paint-widget-create
-   ffi-qt-paint-widget-on-paint ffi-qt-paint-widget-painter
-   ffi-qt-paint-widget-update ffi-qt-paint-widget-width
-   ffi-qt-paint-widget-height ffi-qt-process-create
-   ffi-qt-process-start ffi-qt-process-write
-   ffi-qt-process-close-write ffi-qt-process-read-stdout
-   ffi-qt-process-read-stderr ffi-qt-process-wait-for-finished
-   ffi-qt-process-exit-code ffi-qt-process-state
-   ffi-qt-process-kill ffi-qt-process-terminate
-   ffi-qt-process-on-finished ffi-qt-process-on-ready-read
-   ffi-qt-process-destroy ffi-qt-wizard-create
-   ffi-qt-wizard-add-page ffi-qt-wizard-set-start-id
-   ffi-qt-wizard-current-id ffi-qt-wizard-set-title
-   ffi-qt-wizard-exec ffi-qt-wizard-page-create
-   ffi-qt-wizard-page-set-title ffi-qt-wizard-page-set-subtitle
-   ffi-qt-wizard-page-set-layout
-   ffi-qt-wizard-on-current-changed ffi-qt-mdi-area-create
-   ffi-qt-mdi-area-add-sub-window
-   ffi-qt-mdi-area-remove-sub-window
-   ffi-qt-mdi-area-active-sub-window
-   ffi-qt-mdi-area-sub-window-count ffi-qt-mdi-area-cascade
-   ffi-qt-mdi-area-tile ffi-qt-mdi-area-set-view-mode
-   ffi-qt-mdi-sub-window-set-title
-   ffi-qt-mdi-area-on-sub-window-activated ffi-qt-dial-create
-   ffi-qt-dial-set-value ffi-qt-dial-value
-   ffi-qt-dial-set-range ffi-qt-dial-set-notches-visible
-   ffi-qt-dial-set-wrapping ffi-qt-dial-on-value-changed
-   ffi-qt-lcd-create ffi-qt-lcd-display-int
-   ffi-qt-lcd-display-double ffi-qt-lcd-display-string
-   ffi-qt-lcd-set-mode ffi-qt-lcd-set-segment-style
-   ffi-qt-tool-box-create ffi-qt-tool-box-add-item
-   ffi-qt-tool-box-set-current-index
-   ffi-qt-tool-box-current-index ffi-qt-tool-box-count
-   ffi-qt-tool-box-set-item-text
-   ffi-qt-tool-box-on-current-changed ffi-qt-undo-stack-create
-   ffi-qt-undo-stack-push ffi-qt-undo-stack-undo
-   ffi-qt-undo-stack-redo ffi-qt-undo-stack-can-undo
-   ffi-qt-undo-stack-can-redo ffi-qt-undo-stack-undo-text
-   ffi-qt-undo-stack-redo-text ffi-qt-undo-stack-clear
-   ffi-qt-undo-stack-create-undo-action
-   ffi-qt-undo-stack-create-redo-action
-   ffi-qt-undo-stack-destroy ffi-qt-file-system-model-create
-   ffi-qt-file-system-model-set-root-path
-   ffi-qt-file-system-model-set-filter
-   ffi-qt-file-system-model-set-name-filters
-   ffi-qt-file-system-model-file-path
-   ffi-qt-tree-view-set-file-system-root
-   ffi-qt-file-system-model-destroy ffi-qt-disconnect-all
-   ffi-qt-syntax-highlighter-create
-   ffi-qt-syntax-highlighter-destroy
-   ffi-qt-syntax-highlighter-add-rule
-   ffi-qt-syntax-highlighter-add-keywords
-   ffi-qt-syntax-highlighter-add-multiline-rule
-   ffi-qt-syntax-highlighter-clear-rules
-   ffi-qt-syntax-highlighter-rehighlight
-   ffi-qt-line-number-area-create
-   ffi-qt-line-number-area-destroy
-   ffi-qt-line-number-area-set-visible
-   ffi-qt-line-number-area-set-bg-color
-   ffi-qt-line-number-area-set-fg-color
-   ffi-qt-plain-text-edit-clear-extra-selections
-   ffi-qt-plain-text-edit-add-extra-selection-line
-   ffi-qt-plain-text-edit-add-extra-selection-range
-   ffi-qt-plain-text-edit-apply-extra-selections
-   ffi-qt-completer-set-widget ffi-qt-completer-complete-rect
-   ffi-qt-scintilla-create ffi-qt-scintilla-destroy
-   ffi-qt-scintilla-send-message
-   ffi-qt-scintilla-send-message-string
-   ffi-qt-scintilla-receive-string ffi-qt-scintilla-set-text
-   ffi-qt-scintilla-get-text ffi-qt-scintilla-get-text-length
-   ffi-qt-scintilla-set-lexer-language
-   ffi-qt-scintilla-get-lexer-language
-   ffi-qt-scintilla-lexer-set-color
-   ffi-qt-scintilla-lexer-set-paper
-   ffi-qt-scintilla-lexer-set-font-attr
-   ffi-qt-scintilla-set-read-only ffi-qt-scintilla-is-read-only
-   ffi-qt-scintilla-set-margin-width
-   ffi-qt-scintilla-set-margin-type ffi-qt-scintilla-set-focus
-   ffi-qt-scintilla-on-text-changed
-   ffi-qt-scintilla-on-char-added
-   ffi-qt-scintilla-on-save-point-reached
-   ffi-qt-scintilla-on-save-point-left
-   ffi-qt-scintilla-on-margin-clicked
-   ffi-qt-scintilla-on-modified ffi-qt-abi-validation-count)
-  (import
-    (except (chezscheme) make-hash-table hash-table? sort sort!
-     printf fprintf format path-extension path-absolute?
-     with-input-from-string with-output-to-string iota \x31;+
-     \x31;- partition make-date make-time meta atom?)
-    (except (jerboa prelude) c-lambda)
-    (only (jerboa ffi) c-lambda load-shared-object*)
-    (only (std native-loader) native-loader-privileged?
-      native-loader-development-enabled?
-      native-loader-validate-library!
-      native-loader-validate-directory!
-      native-loader-require-clean-environment!)
-    (only
-      (chezscheme)
-      foreign-entry?
-      lock-object
-      unlock-object))
-  (def shlib-ext
-       (let ([mt (symbol->string (machine-type))])
-         (if (and (>= (string-length mt) 3)
-                  (string=?
-                    (substring
-                      mt
-                      (- (string-length mt) 3)
-                      (string-length mt))
-                    "osx"))
-             "dylib"
-             "so")))
-  (def *native-loaded?* #f)
-  (def *abi-validation-count* 0)
-  (def \x2B;qt-shim-abi-version+ 1246843953)
-  (def (load-configured-library! who path)
-       (guard (e
-                [(condition? e)
-                 (error who
-                   "failed to load configured native library"
-                   path
-                   e)])
-         (load-shared-object* path)
-         #t))
-  (def (configured-library-path who variable leaf)
-       (let ([directory (getenv variable)])
-         (unless (native-loader-development-enabled?
-                   "JERBOA_QT_DEV_NATIVE")
-           (error who
-             "dynamic loading requires JERBOA_QT_DEV_NATIVE=1"))
-         (native-loader-validate-directory! who directory #t)
-         (let ([path (path-join directory leaf)])
-           (native-loader-validate-library! who path #t))))
-  (def (native-provider-visible?)
-       (or (foreign-entry? "jerboa_qt_abi_version")
-           (foreign-entry? "qt_application_create")
-           (foreign-entry? "jerboa_qt_application_create")
-           (foreign-entry? "jerboa_qt_next_callback_event")))
-  (def (require-compatible-native!)
-       (set! *abi-validation-count* (+ *abi-validation-count* 1))
-       (unless (foreign-entry? "jerboa_qt_abi_version")
-         (error 'jerboa-qt "Qt shim ABI canary is unavailable"))
-       (let ([version ((foreign-procedure "jerboa_qt_abi_version"
-                         ()
-                         unsigned-32))])
-         (unless (= version \x2B;qt-shim-abi-version+)
-           (error 'jerboa-qt
-             "incompatible Qt shim ABI"
-             version
-             \x2B;qt-shim-abi-version+)))
-       (unless (and (foreign-entry? "qt_application_create")
-                    (foreign-entry? "jerboa_qt_application_create")
-                    (foreign-entry? "jerboa_qt_next_callback_event"))
-         (error 'jerboa-qt "Qt shim symbol closure is incomplete"))
-       #t)
-  (def (try-load-native!)
-       (cond
-         [*native-loaded?* #t]
-         [(native-provider-visible?)
-          (require-compatible-native!)
-          (set! *native-loaded?* #t)
-          #t]
-         [(native-loader-privileged?) #f]
-         [else
-          (native-loader-require-clean-environment! 'jerboa-qt)
-          (load-configured-library!
-            'jerboa-qt
-            (configured-library-path
-              'jerboa-qt
-              "JERBOA_QT_SHIM_DIR"
-              (format "libqt_shim.~a" shlib-ext)))
-          (load-configured-library!
-            'jerboa-qt
-            (configured-library-path
-              'jerboa-qt
-              "JERBOA_QT_LIB"
-              (format "jerboa_qt_shim.~a" shlib-ext)))
-          (require-compatible-native!)
-          (set! *native-loaded?* #t)
-          #t]))
-  (def (need-native who)
-       (unless (try-load-native!)
-         (error who "unable to load Qt native libraries"))
-       #t)
-  (def (ffi-qt-abi-validation-count) *abi-validation-count*)
-  (def (string-contains-nul? s)
-       (let loop ([i 0])
-         (and (< i (string-length s))
-              (or (char=? (string-ref s i) (integer->char 0))
-                  (loop (+ i 1))))))
-  (def (validate-native-args who args)
-       (let loop ([args args])
-         (unless (null? args)
-           (let ([arg (car args)])
-             (when (and (string? arg) (string-contains-nul? arg))
-               (error who "string contains NUL byte"))
-             (loop (cdr args)))))
-       #t)
-  (define-syntax define-qt-ffi
-    (syntax-rules ()
-      [(_ name c-name (arg-type ...) ret-type)
-       (def name
-            (let ([proc #f])
-              (lambda args
-                (validate-native-args 'name args)
-                (need-native 'name)
-                (unless proc
-                  (set! proc (c-lambda (arg-type ...) ret-type c-name)))
-                (apply proc args))))]))
-  (def (string->pinned-utf8-nul s)
-       (let* ([bv (string->utf8 s)]
-              [n (bytevector-length bv)]
-              [out (make-bytevector (+ n 1) 0)])
-         (bytevector-copy! bv 0 out 0 n)
-         (lock-object out)
-         out))
-  (def (maybe-pinned-utf8-nul arg)
-       (if (string? arg) (string->pinned-utf8-nul arg) arg))
-  (def (maybe-unpin-pinned arg)
-       (when (bytevector? arg) (unlock-object arg)))
-  (define-syntax define-qt-ffi-blocking
-    (lambda (stx)
-      (syntax-case stx (string)
-        [(_ name c-name (arg-type ...) ret-type)
-         (with-syntax ([(translated-arg ...) (map (lambda (t)
-                                                    (syntax-case t (string)
-                                                      [string
-                                                       (datum->syntax
-                                                         t
-                                                         'u8*)]
-                                                      [other t]))
-                                                  (syntax->list
-                                                    #'(arg-type ...)))])
-           #'(def name
-                  (let ([proc #f])
-                    (lambda args
-                      (validate-native-args 'name args)
-                      (need-native 'name)
-                      (unless proc
-                        (set! proc
-                          (foreign-procedure __collect_safe c-name
-                            (translated-arg ...)
-                            ret-type)))
-                      (let ([pinned (map maybe-pinned-utf8-nul args)])
-                        (dynamic-wind
-                          (lambda () #f)
-                          (lambda () (apply proc pinned))
-                          (lambda ()
-                            (for-each maybe-unpin-pinned pinned))))))))])))
-  (def ffi-qt-const-align-left 1)
-  (def ffi-qt-const-align-right 2)
-  (def ffi-qt-const-align-center 132)
-  (def ffi-qt-const-align-top 32)
-  (def ffi-qt-const-align-bottom 64)
-  (def ffi-qt-const-echo-normal 0)
-  (def ffi-qt-const-echo-no-echo 1)
-  (def ffi-qt-const-echo-password 2)
-  (def ffi-qt-const-echo-password-on-edit 3)
-  (def ffi-qt-const-horizontal 1)
-  (def ffi-qt-const-vertical 2)
-  (def ffi-qt-const-ticks-none 0)
-  (def ffi-qt-const-ticks-above 1)
-  (def ffi-qt-const-ticks-below 2)
-  (def ffi-qt-const-ticks-both-sides 3)
-  (def ffi-qt-const-window-no-state 0)
-  (def ffi-qt-const-window-minimized 1)
-  (def ffi-qt-const-window-maximized 2)
-  (def ffi-qt-const-window-full-screen 4)
-  (def ffi-qt-const-scrollbar-as-needed 0)
-  (def ffi-qt-const-scrollbar-always-off 1)
-  (def ffi-qt-const-scrollbar-always-on 2)
-  (def ffi-qt-const-cursor-arrow 0)
-  (def ffi-qt-const-cursor-cross 2)
-  (def ffi-qt-const-cursor-wait 3)
-  (def ffi-qt-const-cursor-ibeam 4)
-  (def ffi-qt-const-cursor-pointing-hand 13)
-  (def ffi-qt-const-cursor-forbidden 14)
-  (def ffi-qt-const-cursor-busy 16)
-  (def (scintilla-unavailable . args)
-       (error 'jerboa-qt
-         "QScintilla not available — rebuild jerboa_qt_shim with QT_SCINTILLA_AVAILABLE"))
-  (define-syntax define-optional-ffi
-    (syntax-rules ()
-      [(_ name c-name (arg-type ...) ret-type)
-       (define-qt-ffi name c-name (arg-type ...) ret-type)]))
-  (def ffi-qt-const-frame-no-frame 0)
-  (def ffi-qt-const-frame-box 1)
-  (def ffi-qt-const-frame-panel 2)
-  (def ffi-qt-const-frame-win-panel 3)
-  (def ffi-qt-const-frame-hline 4)
-  (def ffi-qt-const-frame-vline 5)
-  (def ffi-qt-const-frame-styled-panel 6)
-  (def ffi-qt-const-frame-plain 16)
-  (def ffi-qt-const-frame-raised 32)
-  (def ffi-qt-const-frame-sunken 48)
-  (def ffi-qt-const-button-ok 1024)
-  (def ffi-qt-const-button-cancel 4194304)
-  (def ffi-qt-const-button-apply 33554432)
-  (def ffi-qt-const-button-close 2097152)
-  (def ffi-qt-const-button-yes 16384)
-  (def ffi-qt-const-button-no 65536)
-  (def ffi-qt-const-button-reset 67108864)
-  (def ffi-qt-const-button-help 16777216)
-  (def ffi-qt-const-button-save 2048)
-  (def ffi-qt-const-button-discard 8388608)
-  (def ffi-qt-const-button-role-invalid -1)
-  (def ffi-qt-const-button-role-accept 0)
-  (def ffi-qt-const-button-role-reject 1)
-  (def ffi-qt-const-button-role-destructive 2)
-  (def ffi-qt-const-button-role-action 3)
-  (def ffi-qt-const-button-role-help 4)
-  (def ffi-qt-const-button-role-yes 5)
-  (def ffi-qt-const-button-role-no 6)
-  (def ffi-qt-const-button-role-apply 8)
-  (def ffi-qt-const-button-role-reset 7)
-  (def ffi-qt-const-monday 1)
-  (def ffi-qt-const-tuesday 2)
-  (def ffi-qt-const-wednesday 3)
-  (def ffi-qt-const-thursday 4)
-  (def ffi-qt-const-friday 5)
-  (def ffi-qt-const-saturday 6)
-  (def ffi-qt-const-sunday 7)
-  (def ffi-qt-const-settings-native 0)
-  (def ffi-qt-const-settings-ini 1)
-  (def ffi-qt-const-completer-popup 0)
-  (def ffi-qt-const-completer-inline 1)
-  (def ffi-qt-const-completer-unfiltered-popup 2)
-  (def ffi-qt-const-case-insensitive 0)
-  (def ffi-qt-const-case-sensitive 1)
-  (def ffi-qt-const-match-starts-with 0)
-  (def ffi-qt-const-match-contains 1)
-  (def ffi-qt-const-match-ends-with 2)
-  (def ffi-qt-const-validator-invalid 0)
-  (def ffi-qt-const-validator-intermediate 1)
-  (def ffi-qt-const-validator-acceptable 2)
-  (def ffi-qt-const-plain-no-wrap 0)
-  (def ffi-qt-const-plain-widget-wrap 1)
-  (def ffi-qt-const-delayed-popup 0)
-  (def ffi-qt-const-menu-button-popup 1)
-  (def ffi-qt-const-instant-popup 2)
-  (def ffi-qt-const-no-arrow 0)
-  (def ffi-qt-const-up-arrow 1)
-  (def ffi-qt-const-down-arrow 2)
-  (def ffi-qt-const-left-arrow 3)
-  (def ffi-qt-const-right-arrow 4)
-  (def ffi-qt-const-tool-button-icon-only 0)
-  (def ffi-qt-const-tool-button-text-only 1)
-  (def ffi-qt-const-tool-button-text-beside-icon 2)
-  (def ffi-qt-const-tool-button-text-under-icon 3)
-  (def ffi-qt-const-size-fixed 0)
-  (def ffi-qt-const-size-minimum 1)
-  (def ffi-qt-const-size-minimum-expanding 3)
-  (def ffi-qt-const-size-maximum 4)
-  (def ffi-qt-const-size-preferred 5)
-  (def ffi-qt-const-size-expanding 7)
-  (def ffi-qt-const-size-ignored 13)
-  (def ffi-qt-const-item-movable 1)
-  (def ffi-qt-const-item-selectable 2)
-  (def ffi-qt-const-item-focusable 4)
-  (def ffi-qt-const-drag-none 0)
-  (def ffi-qt-const-drag-scroll 1)
-  (def ffi-qt-const-drag-rubber-band 2)
-  (def ffi-qt-const-render-antialiasing 1)
-  (def ffi-qt-const-render-smooth-pixmap 2)
-  (def ffi-qt-const-render-text-antialiasing 4)
-  (def ffi-qt-const-process-not-running 0)
-  (def ffi-qt-const-process-starting 1)
-  (def ffi-qt-const-process-running 2)
-  (def ffi-qt-const-mdi-subwindow 0)
-  (def ffi-qt-const-mdi-tabbed 1)
-  (def ffi-qt-const-lcd-dec 0)
-  (def ffi-qt-const-lcd-hex 1)
-  (def ffi-qt-const-lcd-oct 2)
-  (def ffi-qt-const-lcd-bin 3)
-  (def ffi-qt-const-lcd-outline 0)
-  (def ffi-qt-const-lcd-filled 1)
-  (def ffi-qt-const-lcd-flat 2)
-  (def ffi-qt-const-dir-dirs 1)
-  (def ffi-qt-const-dir-files 2)
-  (def ffi-qt-const-dir-hidden 256)
-  (def ffi-qt-const-dir-no-dot-and-dot-dot 4096)
-  (def ffi-qt-const-cursor-no-move 0)
-  (def ffi-qt-const-cursor-start 1)
-  (def ffi-qt-const-cursor-up 2)
-  (def ffi-qt-const-cursor-start-of-line 3)
-  (def ffi-qt-const-cursor-start-of-block 4)
-  (def ffi-qt-const-cursor-previous-char 5)
-  (def ffi-qt-const-cursor-previous-block 6)
-  (def ffi-qt-const-cursor-end-of-line 7)
-  (def ffi-qt-const-cursor-end-of-block 8)
-  (def ffi-qt-const-cursor-next-char 9)
-  (def ffi-qt-const-cursor-next-block 10)
-  (def ffi-qt-const-cursor-end 11)
-  (def ffi-qt-const-cursor-down 12)
-  (def ffi-qt-const-cursor-left 13)
-  (def ffi-qt-const-cursor-word-left 14)