package al /* #include #include #include "helpers.h" */ import "C" import "unsafe" // Callback function for CreateCustomBitmap() type CreateCustomBitmapCallback func(bitmap *Bitmap, data interface{}) bool // Callback context for CreateCustomBitmap() type createCustomBitmapContext struct { fn CreateCustomBitmapCallback data interface{} } //export go_create_custom_bitmap_callback func go_create_custom_bitmap_callback(ptr unsafe.Pointer, context unsafe.Pointer) C.bool { ccbd := (*createCustomBitmapContext)(context) cbmp := (*C.ALLEGRO_BITMAP)(ptr) bmp := wrapBitmapRaw(cbmp) fptr := ccbd.fn return b2cb((fptr)(bmp, ccbd.data)) } // Callback function for RunMain() type RunMainCallback func(args []string, data interface{}) int // Callback context for CreateCustomBitmap() type runMainContext struct { fn RunMainCallback data interface{} } var runMain runMainContext //export go_run_main_callback func go_run_main_callback(argc C.int, argv ** C.char) C.int { args := GoStrings(argc, argv) return C.int(runMain.fn(args, runMain.data)) } type ThreadCallbackFunction func(*Thread, unsafe.Pointer) unsafe.Pointer type threadCallbackData struct { fn ThreadCallbackFunction data unsafe.Pointer } //export go_create_thread_callback func go_create_thread_callback(thread * C.ALLEGRO_THREAD, arg unsafe.Pointer) unsafe.Pointer { cbd := (*threadCallbackData)(arg) fn := cbd.fn res := fn(wrapThreadRaw(thread), cbd.data) return unsafe.Pointer(res) }