Native QR generation for each language's ecosystem: - 27 languages use package manager QR libraries (qrcode, rqrcode, ZXing, etc.) - 10 languages use C FFI to libqrencode (dlopen, ISO_C_BINDING, @cImport, critcl) - 2 shell languages use qrencode CLI (native shell paradigm) - 1 language (Prolog) uses C FFI with CLI fallback Section 9 added to test-sdk.sh with get_qr_file() mapping and QR:unsandbox-qr-ok:ROWS pattern validation across the hydra matrix.
58 lines
1.9 KiB
Fortran
58 lines
1.9 KiB
Fortran
program qrcode_test
|
|
use, intrinsic :: iso_c_binding
|
|
implicit none
|
|
|
|
type, bind(C) :: QRcode
|
|
integer(c_int) :: version
|
|
integer(c_int) :: width
|
|
type(c_ptr) :: data
|
|
end type QRcode
|
|
|
|
interface
|
|
type(c_ptr) function dlopen(filename, flag) bind(C, name='dlopen')
|
|
import :: c_ptr, c_char, c_int
|
|
character(kind=c_char), dimension(*), intent(in) :: filename
|
|
integer(c_int), value :: flag
|
|
end function
|
|
type(c_funptr) function dlsym(handle, symbol) bind(C, name='dlsym')
|
|
import :: c_ptr, c_funptr, c_char
|
|
type(c_ptr), value :: handle
|
|
character(kind=c_char), dimension(*), intent(in) :: symbol
|
|
end function
|
|
integer(c_int) function dlclose(handle) bind(C, name='dlclose')
|
|
import :: c_ptr, c_int
|
|
type(c_ptr), value :: handle
|
|
end function
|
|
end interface
|
|
|
|
abstract interface
|
|
type(c_ptr) function encode_iface(s, ver, lvl, hint, cs) bind(C)
|
|
import :: c_ptr, c_char, c_int
|
|
character(kind=c_char), dimension(*), intent(in) :: s
|
|
integer(c_int), value :: ver, lvl, hint, cs
|
|
end function
|
|
subroutine free_iface(qr) bind(C)
|
|
import :: c_ptr
|
|
type(c_ptr), value :: qr
|
|
end subroutine
|
|
end interface
|
|
|
|
type(c_ptr) :: lib, qr_ptr
|
|
type(c_funptr) :: enc_fptr, free_fptr
|
|
procedure(encode_iface), pointer :: qr_encode
|
|
procedure(free_iface), pointer :: qr_free
|
|
type(QRcode), pointer :: qr
|
|
|
|
lib = dlopen("libqrencode.so" // c_null_char, 2) ! RTLD_NOW=2
|
|
enc_fptr = dlsym(lib, "QRcode_encodeString" // c_null_char)
|
|
free_fptr = dlsym(lib, "QRcode_free" // c_null_char)
|
|
call c_f_procpointer(enc_fptr, qr_encode)
|
|
call c_f_procpointer(free_fptr, qr_free)
|
|
|
|
qr_ptr = qr_encode("unsandbox-qr-ok" // c_null_char, 0, 1, 2, 1)
|
|
call c_f_pointer(qr_ptr, qr)
|
|
write(*, '(A,I0)') 'QR:unsandbox-qr-ok:ROWS:', qr%width
|
|
|
|
call qr_free(qr_ptr)
|
|
call dlclose(lib)
|
|
end program qrcode_test
|