Code: Select all
CompilerIf #PB_Compiler_IsMainFile
EnableExplicit
CompilerEndIf
;-Enumerations
#ENABLE_EAN = #True
#ENABLE_I25 = #True
#ENABLE_CODE39 = #True
#ENABLE_CODE128 = #True
#ENABLE_PDF417 = #True
#ENABLE_QRCODE = #True
#NO_STATS = #False
Enumeration zbar_color_e
#ZBAR_SPACE = 0 ; light area Or space between bars
#ZBAR_BAR = 1 ; dark area Or colored bar segment
EndEnumeration
Enumeration zbar_symbol_type_e
#ZBAR_NONE = 0 ; no symbol decoded
#ZBAR_PARTIAL = 1 ; intermediate status
#ZBAR_EAN8 = 8 ; EAN-8
#ZBAR_UPCE = 9 ; UPC-E
#ZBAR_ISBN10 = 10 ; ISBN-10 (from EAN-13). @since 0.4
#ZBAR_UPCA = 12 ; UPC-A
#ZBAR_EAN13 = 13 ; EAN-13
#ZBAR_ISBN13 = 14 ; ISBN-13 (from EAN-13). @since 0.4
#ZBAR_I25 = 25 ; Interleaved 2 of 5. @since 0.4
#ZBAR_CODE39 = 39 ; Code 39. @since 0.4
#ZBAR_PDF417 = 57 ; PDF417. @since 0.6
#ZBAR_QRCODE = 64 ; QR Code. @since 0.10
#ZBAR_CODE128 = 128 ; Code 128
#ZBAR_SYMBOL = $00ff ; mask For base symbol type
#ZBAR_ADDON2 = $0200 ; 2-digit add-on flag
#ZBAR_ADDON5 = $0500 ; 5-digit add-on flag
#ZBAR_ADDON = $0700 ; add-on flag mask
EndEnumeration
Enumeration zbar_error_e
#ZBAR_OK ; no error
#ZBAR_ERR_NOMEM ; out of memory
#ZBAR_ERR_INTERNAL ; internal library error
#ZBAR_ERR_UNSUPPORTED ; unsupported request
#ZBAR_ERR_INVALID ; invalid request
#ZBAR_ERR_SYSTEM ; system error
#ZBAR_ERR_LOCKING ; locking error
#ZBAR_ERR_BUSY ; all resources busy
#ZBAR_ERR_XDISPLAY ; X11 display error
#ZBAR_ERR_XPROTO ; X11 protocol error
#ZBAR_ERR_CLOSED ; output window is closed
#ZBAR_ERR_WINAPI ; windows system error
#ZBAR_ERR_NUM ; number of error codes
EndEnumeration
Enumeration zbar_config_e
#ZBAR_CFG_ENABLE ; enable symbology/feature
#ZBAR_CFG_ADD_CHECK ; enable check digit when optional
#ZBAR_CFG_EMIT_CHECK ; Return check digit when present
#ZBAR_CFG_ASCII ; enable full ASCII character set
#ZBAR_CFG_NUM ; number of boolean decoder configs
#ZBAR_CFG_MIN_LEN = $20 ; minimum Data length For valid decode
#ZBAR_CFG_MAX_LEN ; maximum Data length For valid decode
#ZBAR_CFG_POSITION = $80 ; enable scanner To collect position Data
#ZBAR_CFG_X_DENSITY = $100; image scanner vertical scan density
#ZBAR_CFG_Y_DENSITY ; image scanner horizontal scan density
EndEnumeration
#Format_Y800 = $30303859
#Format_Gray = $59455247
;-Structures
Structure point_s Align #PB_Structure_AlignC
x.l
y.l
EndStructure
Structure zbar_symbol_set_s Align #PB_Structure_AlignC
refcnt.l
nsyms.l ; number of filtered symbols
*head ; first of decoded symbol results
*tail ; last of unfiltered symbol results
EndStructure
Structure zbar_symbol_s Align #PB_Structure_AlignC
type.l ; symbol type
data_alloc.l ; allocation size of data
datalen.l ; length of binary symbol data
*Data ; symbol data
pts_alloc.l ; allocation size of pts
npts.l ; number of points in location polygon
*pts.point_s ; list of points in location polygon
refcnt.l ; reference count
*Next ; linked list of results (or siblings)
*syms.zbar_symbol_set_s ; components of composite result
time.l ; relative symbol capture time
cache_count.l ; cache state
quality.l ; relative symbol reliability metric
EndStructure
#STATE_ADDON = $40 ; scanning add-on
#STATE_IDX = $1f ; element offset into symbol
Structure ean_pass_s Align #PB_Structure_AlignC
state.b ; module position of w[idx] in symbol
raw.a[7] ; decode in process
EndStructure
Structure ean_decoder_s Align #PB_Structure_AlignC
pass.ean_pass_s[4] ; state of each parallel decode attempt
left.l ; current holding buffer contents
right.l
addon.l
s4.l ; character width
buf.b[18] ; holding buffer
enable.b
ean13_config.l
ean8_config.l
upca_config.l
upce_config.l
isbn10_config.l
isbn13_config.l
EndStructure
#NUM_CFGS = (#ZBAR_CFG_MAX_LEN - #ZBAR_CFG_MIN_LEN + 1)
Structure i25_decoder_s Align #PB_Structure_AlignC
BitField.l
;unsigned direction : 1; scan direction: 0=fwd/space, 1=rev/bar
;unsigned element : 4; element offset 0-8
;int character : 12; character position in symbol
s10.l ; current character width
width.l ; last character width
config.l
configs.l[#NUM_CFGS] ; int valued configurations
EndStructure
Structure code39_decoder_s Align #PB_Structure_AlignC
BitField.l
;unsigned direction : 1; scan direction: 0=fwd, 1=rev
;unsigned element : 4; element offset 0-8
;int character : 12; character position in symbol
s9.l ; current character width
width.l ; last character width
config.l
configs.l[#NUM_CFGS] ; int valued configurations
EndStructure
Structure code128_decoder_s Align #PB_Structure_AlignC
BitField.l
;unsigned direction : 1; scan direction: 0=fwd/space, 1=rev/bar
;unsigned element : 3; element offset 0-5
;int character : 12; character position in symbol
s6.l ; character width
config.l
configs.l[#NUM_CFGS] ; int valued configurations
EndStructure
Structure pdf417_decoder_s Align #PB_Structure_AlignC
BitField.l
;unsigned direction : 1; scan direction: 0=fwd/space, 1=rev/bar
;unsigned element : 3; element offset 0-7
;int character : 12; character position in symbol
s8.l ; character width
config.l
configs.l[#NUM_CFGS] ; int valued configurations
EndStructure
Structure qr_finder_line Align #PB_Structure_AlignC
;The location of the upper/left endpoint of the line.
;The left/upper edge of the center section is used, since other lines must
;cross in this region.
pos.l[2]
;The length of the center section.
;This extends To the right/bottom of the center section, since other lines
;must cross in this region.
len.l
;The offset To the midpoint of the upper/left section (part of the outside
;ring), Or 0 If we couldn't identify the edge of the beginning section.
;We use the midpoint instead of the edge because it can be located more
;reliably.
boffs.l
;The offset To the midpoint of the End section (part of the outside ring),
;Or 0 If we couldn't identify the edge of the end section.
;We use the midpoint instead of the edge because it can be located more
;reliably.
eoffs.l
EndStructure
Structure qr_finder_s Align #PB_Structure_AlignC
s5.l ; finder pattern width
line.qr_finder_line ; position info needed by decoder
config.l
EndStructure
#DECODE_WINDOW = 16
Structure zbar_decoder_s Align #PB_Structure_AlignC
idx.a ; current width index
w.l[#DECODE_WINDOW]; window of last N bar widths
type.l ; type of last decoded data
lock.l ; buffer lock
; everything above here is automatically reset
buf_alloc.l ; dynamic buffer allocation
buflen.l ; binary data length
*buf ; decoded characters
*userdata ; application data
*handler ; application callback
; symbology specific state
CompilerIf #ENABLE_EAN
ean.ean_decoder_s ; EAN/UPC parallel decode attempts
CompilerEndIf
CompilerIf #ENABLE_I25
i25.i25_decoder_s ; Interleaved 2 of 5 decode state
CompilerEndIf
CompilerIf #ENABLE_CODE39
code39.code39_decoder_s ; Code 39 decode state
CompilerEndIf
CompilerIf #ENABLE_CODE128
code128.code128_decoder_s ; Code 128 decode state
CompilerEndIf
CompilerIf #ENABLE_PDF417
pdf417.pdf417_decoder_s ; PDF417 decode state
CompilerEndIf
CompilerIf #ENABLE_QRCODE
qrf.qr_finder_s ; QR Code finder state
CompilerEndIf
EndStructure
Structure zbar_scanner_s Align #PB_Structure_AlignC
*decoder.zbar_decoder_s ; associated bar width decoder
y1_min_thresh.l ; minimum threshold
x.l ; relative scan position of next sample
y0.l[4] ; short circular buffer of average intensities
y1_sign.l ; slope at last crossing
y1_thresh.l ; current slope threshold
cur_edge.l ; interpolated position of tracking edge
last_edge.l ; interpolated position of last located edge
width.l ; last element width
EndStructure
#ISAAC_SZ_LOG = (8)
#ISAAC_SZ = (1<<#ISAAC_SZ_LOG)
Structure isaac_ctx Align #PB_Structure_AlignC
n.l
r.l[#ISAAC_SZ]
m.l[#ISAAC_SZ]
a.l
b.l
c.l
EndStructure
Structure qr_finder_lines Align #PB_Structure_AlignC
*lines.qr_finder_line
nlines.l
clines.l
EndStructure
Structure qr_reader Align #PB_Structure_AlignC
;The GF(256) representation used in Reed-Solomon decoding
;rs_gf256 gf
;The random number generator used by RANSAC.
isaac.isaac_ctx
;current finder state, horizontal And vertical lines
finder_lines.qr_finder_lines[2]
EndStructure
PrototypeC zbar_image_cleanup_handler(*image)
Structure zbar_image_s Align #PB_Structure_AlignC
format.l ; fourcc image format code
width.l
height.l ; image size
*data ; image sample data
datalen.l ; allocated/mapped size of data
*userdata ; user specified data associated w/image
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
crop_x.l
crop_y.l
crop_w.l
crop_h.l
CompilerEndIf
cleanup.zbar_image_cleanup_handler ; cleanup handler
refcnt.l ; reference count
*src ; originator
srcidx.l ; index used by originator
*next ; internal image lists
seq.l ; page/frame sequence number
*syms.zbar_symbol_set_s ; decoded result set
EndStructure
#RECYCLE_BUCKETS = 5
#NUM_SCN_CFGS = (#ZBAR_CFG_Y_DENSITY - #ZBAR_CFG_X_DENSITY + 1)
Structure recycle_bucket_s Align #PB_Structure_AlignC
nsyms.l
*head.zbar_symbol_s
EndStructure
Structure zbar_image_scanner_s Align #PB_Structure_AlignC
*scn.zbar_scanner_s ; associated linear intensity scanner
*dcode.zbar_decoder_s ; associated symbol decoder
CompilerIf #ENABLE_QRCODE
*qr.qr_reader ; QR Code 2D reader
CompilerEndIf
*userdata ; application data
*handler ; user result callback
time.l ; scan start time
*img.zbar_image_s ; currently scanning image *root*
dx.l ; current scan direction
dy.l
du.l
umin.l
v.l
*syms.zbar_symbol_set_s ; previous decode results
recycle.recycle_bucket_s[#RECYCLE_BUCKETS] ; recycled symbols in 4^n size buckets
enable_cache.l ; current result cache state
*cache.zbar_symbol_s ; inter-image result cache entries
config.l ; config flags
configs.l[#NUM_SCN_CFGS]; int valued configurations
CompilerIf #NO_STATS
stat_syms_new.l
stat_iscn_syms_inuse.l
stat_iscn_syms_recycle.l
stat_img_syms_inuse.l
stat_img_syms_recycle.l
stat_sym_new.l
stat_sym_recycle.l[#RECYCLE_BUCKETS];
CompilerEndIf
EndStructure
;-Prototypes
; retrieve Runtime library version information.
; @param major set To the running major version (unless NULL)
; @param minor set To the running minor version (unless NULL)
; @returns 0
PrototypeC zbar_version(*major, *minor)
; set Global library Debug level.
; @param verbosity desired Debug level. higher values create more spew
PrototypeC zbar_set_verbosity(verbosity.l)
; increase Global library Debug level.
; eg, For -vvvv
PrototypeC zbar_increase_verbosity()
; retrieve string name For symbol encoding.
; @param sym symbol type encoding
; @returns the Static string name For the specified symbol type,
; Or "UNKNOWN" If the encoding is Not recognized
PrototypeC.i zbar_get_symbol_name(sym.l)
; retrieve string name For addon encoding.
; @param sym symbol type encoding
; @returns Static string name For any addon, Or the empty string
; If no addons were decoded
PrototypeC.i zbar_get_addon_name(sym.l)
; parse a configuration string of the form "[symbology.]config[=value]".
; the config must match one of the recognized names.
; the symbology, If present, must match one of the recognized names.
; If symbology is unspecified, it will be set To 0.
; If value is unspecified it will be set To 1.
; @returns 0 If the config is parsed successfully, 1 otherwise
; @since 0.4
PrototypeC.i zbar_parse_config(*config_string, *symbology, *config, *value)
; @internal type unsafe error API (don't use)
PrototypeC.i _zbar_error_spew(*object, verbosity.l)
PrototypeC.i _zbar_error_string(*object, verbosity.l)
PrototypeC.i _zbar_get_error_code(*object)
PrototypeC.i zbar_decode_width(*decoder, width.l)
PrototypeC.i zbar_decoder_create()
PrototypeC.i zbar_decoder_destroy(*decoder)
PrototypeC.i zbar_decoder_get_color(*decoder)
PrototypeC.i zbar_decoder_get_data(*decoder)
PrototypeC.i zbar_decoder_get_data_length(*decoder)
PrototypeC.i zbar_decoder_get_type(*decoder)
PrototypeC.i zbar_decoder_get_userdata(*decoder)
PrototypeC.i zbar_decoder_new_scan(*decoder)
PrototypeC.i zbar_decoder_reset(*decoder)
PrototypeC.i zbar_decoder_set_config(*decoder, symbology.l, config.l, value.l)
PrototypeC.i zbar_decoder_set_handler(*decoder, *handler)
PrototypeC.i zbar_decoder_set_userdata(*decoder, *userdata)
PrototypeC.i zbar_image_convert(*image.zbar_image_s, format.l)
PrototypeC.i zbar_image_convert_resize(*image.zbar_image_s, format.l, width.l, height.l)
PrototypeC.i zbar_image_copy()
PrototypeC.i zbar_image_create()
PrototypeC.i zbar_image_destroy(*image.zbar_image_s)
PrototypeC.i zbar_image_first_symbol(*image.zbar_image_s)
PrototypeC.i zbar_image_free_data(*image.zbar_image_s)
PrototypeC.i zbar_image_get_data(*image.zbar_image_s)
PrototypeC.i zbar_image_get_data_length(*image.zbar_image_s)
PrototypeC.i zbar_image_get_format(*image.zbar_image_s)
PrototypeC.i zbar_image_get_height(*image.zbar_image_s)
PrototypeC.i zbar_image_get_sequence(*image.zbar_image_s)
PrototypeC.i zbar_image_get_symbols(*image.zbar_image_s)
PrototypeC.i zbar_image_get_userdata(*image.zbar_image_s)
PrototypeC.i zbar_image_get_width(*image.zbar_image_s)
PrototypeC.i zbar_image_ref(*image.zbar_image_s, refs.l)
PrototypeC.i zbar_image_scanner_create()
PrototypeC.i zbar_image_scanner_destroy(*scanner)
PrototypeC.i zbar_image_scanner_enable_cache(*scanner, enable.l)
PrototypeC.i zbar_image_scanner_get_results(*scanner)
PrototypeC.i zbar_image_scanner_recycle_image(*scanner, *image.zbar_image_s)
PrototypeC.i zbar_image_scanner_set_config(*scanner, symbology.l, config.l, value.l)
PrototypeC.i zbar_image_scanner_set_data_handler(*scanner, *handler, *userdata)
PrototypeC.i zbar_image_set_data(*image.zbar_image_s, *data, data_byte_length.l, *cleanup_hndlr)
PrototypeC.i zbar_image_set_format(*image.zbar_image_s, format.l)
PrototypeC.i zbar_image_set_sequence(*image.zbar_image_s, sequence_num.l)
PrototypeC.i zbar_image_set_size(*image.zbar_image_s, width.l, height.l)
PrototypeC.i zbar_image_set_symbols(*image.zbar_image_s, *symbols.zbar_symbol_set_s)
PrototypeC.i zbar_image_set_userdata(*image.zbar_image_s, *userdata)
PrototypeC.i zbar_image_write(*image.zbar_image_s, *filebase)
PrototypeC.i zbar_negotiate_format(*video, *window)
PrototypeC.i zbar_process_image(*processor, *image.zbar_image_s)
PrototypeC.i zbar_process_one(*processor, timeout.l)
PrototypeC.i zbar_processor_create(thread.l)
PrototypeC.i zbar_processor_destroy(*processor)
PrototypeC.i zbar_processor_force_format(*processor, input_format.l, output_format.l)
PrototypeC.i zbar_processor_get_results(*processor)
PrototypeC.i zbar_processor_get_userdata(*processor)
PrototypeC.i zbar_processor_init(*processor, *video_device, enable_display.l)
PrototypeC.i zbar_processor_is_visible(*processor)
PrototypeC.i zbar_processor_request_interface(*processor, version.l)
PrototypeC.i zbar_processor_request_iomode(*processor, iomode.l)
PrototypeC.i zbar_processor_request_size(*processor, width.l, height.l)
PrototypeC.i zbar_processor_set_active(*processor, active.l)
PrototypeC.i zbar_processor_set_config(*processor, symbology.l, config.l, value.l)
PrototypeC.i zbar_processor_set_data_handler(*processor, *handler, *userdata)
PrototypeC.i zbar_processor_set_userdata(*processor, *userdata)
PrototypeC.i zbar_processor_set_visible(*processor, visible.l)
PrototypeC.i zbar_processor_user_wait(*processor, timeout.l)
PrototypeC.i zbar_scan_image(*scanner, *image.zbar_image_s)
PrototypeC.i zbar_scan_y(*scanner, y.l)
PrototypeC.i zbar_scanner_create(*decoder)
PrototypeC.i zbar_scanner_destroy(*scanner)
PrototypeC.i zbar_scanner_flush(*scanner)
PrototypeC.i zbar_scanner_get_color(*scanner)
PrototypeC.i zbar_scanner_get_edge(*scanner, offset.l, prec.l)
PrototypeC.i zbar_scanner_get_state(*scanner)
PrototypeC.i zbar_scanner_get_width(*scanner)
PrototypeC.i zbar_scanner_new_scan(*scanner)
PrototypeC.i zbar_scanner_reset(*scanner)
PrototypeC.i zbar_symbol_first_component()
PrototypeC.i zbar_symbol_get_components(*symbol.zbar_symbol_s)
PrototypeC.i zbar_symbol_get_count(*symbol.zbar_symbol_s)
PrototypeC.i zbar_symbol_get_data(*symbol.zbar_symbol_s)
PrototypeC.i zbar_symbol_get_data_length()
PrototypeC.i zbar_symbol_get_loc_size(*symbol.zbar_symbol_s)
PrototypeC.i zbar_symbol_get_loc_x(*symbol.zbar_symbol_s, index.l)
PrototypeC.i zbar_symbol_get_loc_y(*symbol.zbar_symbol_s, index.l)
PrototypeC.i zbar_symbol_get_quality(*symbol.zbar_symbol_s)
PrototypeC.i zbar_symbol_get_type(*symbol.zbar_symbol_s)
PrototypeC.i zbar_symbol_next(*symbol.zbar_symbol_s)
PrototypeC zbar_symbol_ref(*symbol.zbar_symbol_s, refs.l)
PrototypeC.i zbar_symbol_set_first_symbol(*symbols.zbar_symbol_set_s)
PrototypeC.i zbar_symbol_set_get_size(*symbols.zbar_symbol_set_s)
PrototypeC.i zbar_symbol_set_ref(*symbols.zbar_symbol_set_s, refs.l)
PrototypeC.i zbar_symbol_xml(*symbol.zbar_symbol_s, *buffer, *buflen)
PrototypeC.i zbar_video_create()
PrototypeC.i zbar_video_destroy(*video)
PrototypeC.i zbar_video_enable(*video, enbable.l)
PrototypeC.i zbar_video_get_fd(*video)
PrototypeC.i zbar_video_get_format()
PrototypeC.i zbar_video_get_height(*video)
PrototypeC.i zbar_video_get_width(*video)
PrototypeC.i zbar_video_init(*video, format.l)
PrototypeC.i zbar_video_next_image(*video)
PrototypeC.i zbar_video_open(*video, *device)
PrototypeC.i zbar_video_request_interface(*video, version.l)
PrototypeC.i zbar_video_request_iomode(*video, iomode.l)
PrototypeC.i zbar_video_request_size(*video, width.l, height.l)
PrototypeC.i zbar_window_attach(*window, *x11_display_w32_hwnd, x11_drawable.l)
PrototypeC.i zbar_window_create()
PrototypeC.i zbar_window_destroy(*window)
PrototypeC.i zbar_window_draw(*window, *image.zbar_image_s)
PrototypeC.i zbar_window_get_overlay(*window)
PrototypeC.i zbar_window_redraw(*window)
PrototypeC.i zbar_window_resize(*window, width.l, height.l)
PrototypeC.i zbar_window_set_overlay(*window, level.l)
;-Globals
Global zbar_lib.i
Global _zbar_error_spew._zbar_error_spew
Global _zbar_error_string._zbar_error_string
Global _zbar_get_error_code._zbar_get_error_code
Global zbar_decode_width.zbar_decode_width
Global zbar_decoder_create.zbar_decoder_create
Global zbar_decoder_destroy.zbar_decoder_destroy
Global zbar_decoder_get_color.zbar_decoder_get_color
Global zbar_decoder_get_data.zbar_decoder_get_data
Global zbar_decoder_get_data_length.zbar_decoder_get_data_length
Global zbar_decoder_get_type.zbar_decoder_get_type
Global zbar_decoder_get_userdata.zbar_decoder_get_userdata
Global zbar_decoder_new_scan.zbar_decoder_new_scan
Global zbar_decoder_reset.zbar_decoder_reset
Global zbar_decoder_set_config.zbar_decoder_set_config
Global zbar_decoder_set_handler.zbar_decoder_set_handler
Global zbar_decoder_set_userdata.zbar_decoder_set_userdata
Global _zbar_get_addon_name.zbar_get_addon_name
Global _zbar_get_symbol_name.zbar_get_symbol_name
Global zbar_image_convert.zbar_image_convert
Global zbar_image_convert_resize.zbar_image_convert_resize
Global zbar_image_copy.zbar_image_copy
Global zbar_image_create.zbar_image_create
Global zbar_image_destroy.zbar_image_destroy
Global zbar_image_first_symbol.zbar_image_first_symbol
Global zbar_image_free_data.zbar_image_free_data
Global zbar_image_get_data.zbar_image_get_data
Global zbar_image_get_data_length.zbar_image_get_data_length
Global zbar_image_get_format.zbar_image_get_format
Global zbar_image_get_height.zbar_image_get_height
Global zbar_image_get_sequence.zbar_image_get_sequence
Global zbar_image_get_symbols.zbar_image_get_symbols
Global zbar_image_get_userdata.zbar_image_get_userdata
Global zbar_image_get_width.zbar_image_get_width
Global zbar_image_ref.zbar_image_ref
Global zbar_image_scanner_create.zbar_image_scanner_create
Global zbar_image_scanner_destroy.zbar_image_scanner_destroy
Global zbar_image_scanner_enable_cache.zbar_image_scanner_enable_cache
Global zbar_image_scanner_get_results.zbar_image_scanner_get_results
Global zbar_image_scanner_recycle_image.zbar_image_scanner_recycle_image
Global zbar_image_scanner_set_config.zbar_image_scanner_set_config
Global zbar_image_scanner_set_data_handler.zbar_image_scanner_set_data_handler
Global zbar_image_set_data.zbar_image_set_data
Global zbar_image_set_format.zbar_image_set_format
Global zbar_image_set_sequence.zbar_image_set_sequence
Global zbar_image_set_size.zbar_image_set_size
Global zbar_image_set_symbols.zbar_image_set_symbols
Global zbar_image_set_userdata.zbar_image_set_userdata
Global zbar_image_write.zbar_image_write
Global zbar_increase_verbosity.zbar_increase_verbosity
Global zbar_negotiate_format.zbar_negotiate_format
Global zbar_parse_config.zbar_parse_config
Global zbar_process_image.zbar_process_image
Global zbar_process_one.zbar_process_one
Global zbar_processor_create.zbar_processor_create
Global zbar_processor_destroy.zbar_processor_destroy
Global zbar_processor_force_format.zbar_processor_force_format
Global zbar_processor_get_results.zbar_processor_get_results
Global zbar_processor_get_userdata.zbar_processor_get_userdata
Global zbar_processor_init.zbar_processor_init
Global zbar_processor_is_visible.zbar_processor_is_visible
Global zbar_processor_request_interface.zbar_processor_request_interface
Global zbar_processor_request_iomode.zbar_processor_request_iomode
Global zbar_processor_request_size.zbar_processor_request_size
Global zbar_processor_set_active.zbar_processor_set_active
Global zbar_processor_set_config.zbar_processor_set_config
Global zbar_processor_set_data_handler.zbar_processor_set_data_handler
Global zbar_processor_set_userdata.zbar_processor_set_userdata
Global zbar_processor_set_visible.zbar_processor_set_visible
Global zbar_processor_user_wait.zbar_processor_user_wait
Global zbar_scan_image.zbar_scan_image
Global zbar_scan_y.zbar_scan_y
Global zbar_scanner_create.zbar_scanner_create
Global zbar_scanner_destroy.zbar_scanner_destroy
Global zbar_scanner_flush.zbar_scanner_flush
Global zbar_scanner_get_color.zbar_scanner_get_color
Global zbar_scanner_get_edge.zbar_scanner_get_edge
Global zbar_scanner_get_state.zbar_scanner_get_state
Global zbar_scanner_get_width.zbar_scanner_get_width
Global zbar_scanner_new_scan.zbar_scanner_new_scan
Global zbar_scanner_reset.zbar_scanner_reset
Global zbar_set_verbosity.zbar_set_verbosity
Global zbar_symbol_first_component.zbar_symbol_first_component
Global zbar_symbol_get_components.zbar_symbol_get_components
Global zbar_symbol_get_count.zbar_symbol_get_count
Global _zbar_symbol_get_data.zbar_symbol_get_data
Global zbar_symbol_get_data_length.zbar_symbol_get_data_length
Global zbar_symbol_get_loc_size.zbar_symbol_get_loc_size
Global zbar_symbol_get_loc_x.zbar_symbol_get_loc_x
Global zbar_symbol_get_loc_y.zbar_symbol_get_loc_y
Global zbar_symbol_get_quality.zbar_symbol_get_quality
Global zbar_symbol_get_type.zbar_symbol_get_type
Global zbar_symbol_next.zbar_symbol_next
Global zbar_symbol_ref.zbar_symbol_ref
Global zbar_symbol_set_first_symbol.zbar_symbol_set_first_symbol
Global zbar_symbol_set_get_size.zbar_symbol_set_get_size
Global zbar_symbol_set_ref.zbar_symbol_set_ref
Global zbar_symbol_xml.zbar_symbol_xml
Global zbar_version.zbar_version
Global zbar_video_create.zbar_video_create
Global zbar_video_destroy.zbar_video_destroy
Global zbar_video_enable.zbar_video_enable
Global zbar_video_get_fd.zbar_video_get_fd
Global zbar_video_get_format.zbar_video_get_format
Global zbar_video_get_height.zbar_video_get_height
Global zbar_video_get_width.zbar_video_get_width
Global zbar_video_init.zbar_video_init
Global zbar_video_next_image.zbar_video_next_image
Global zbar_video_open.zbar_video_open
Global zbar_video_request_interface.zbar_video_request_interface
Global zbar_video_request_iomode.zbar_video_request_iomode
Global zbar_video_request_size.zbar_video_request_size
Global zbar_window_attach.zbar_window_attach
Global zbar_window_create.zbar_window_create
Global zbar_window_destroy.zbar_window_destroy
Global zbar_window_draw.zbar_window_draw
Global zbar_window_get_overlay.zbar_window_get_overlay
Global zbar_window_redraw.zbar_window_redraw
Global zbar_window_resize.zbar_window_resize
Global zbar_window_set_overlay.zbar_window_set_overlay
;-Procedures
Procedure.s zbar_get_symbol_name(sym.l)
Protected *Ptr
*Ptr = _zbar_get_symbol_name(sym)
ProcedureReturn PeekS(*Ptr, -1, #PB_Ascii)
EndProcedure
Procedure.s zbar_symbol_get_data(*symbol)
Protected *Ptr
*Ptr = _zbar_symbol_get_data(*symbol)
ProcedureReturn PeekS(*Ptr, -1, #PB_Ascii)
EndProcedure
Procedure.s zbar_get_addon_name(*symbol)
Protected *Ptr
*Ptr = _zbar_get_addon_name(*symbol)
ProcedureReturn PeekS(*Ptr, -1, #PB_Ascii)
EndProcedure
Procedure.i zbar_processor_parse_config(*processor, *config_string)
Protected.l sym, cfg, val
ProcedureReturn Bool(zbar_parse_config(*config_string, @sym, @cfg, @val) Or zbar_processor_set_config(*processor, sym, cfg, val))
EndProcedure
Procedure.i zbar_processor_error_spew(*processor, verbosity.l)
ProcedureReturn _zbar_error_spew(*processor, verbosity)
EndProcedure
Procedure.i zbar_processor_error_string(*processor, verbosity.l)
ProcedureReturn _zbar_error_string(*processor, verbosity)
EndProcedure
Procedure.i zbar_processor_get_error_code(*processor)
ProcedureReturn _zbar_get_error_code(*processor)
EndProcedure
Procedure.i zbar_video_error_spew(*video, verbosity.l)
ProcedureReturn _zbar_error_spew(*video, verbosity)
EndProcedure
Procedure.i zbar_video_error_string(*video, verbosity.l)
ProcedureReturn _zbar_error_string(*video, verbosity)
EndProcedure
Procedure.i zbar_video_get_error_code(*video)
ProcedureReturn _zbar_get_error_code(*video)
EndProcedure
Procedure.i zbar_window_error_spew(*video, verbosity.l)
ProcedureReturn _zbar_error_spew(*video, verbosity)
EndProcedure
Procedure.i zbar_window_error_string(*video, verbosity.l)
ProcedureReturn _zbar_error_string(*video, verbosity)
EndProcedure
Procedure.i zbar_window_get_error_code(*video)
ProcedureReturn _zbar_get_error_code(*video)
EndProcedure
Procedure.i zbar_scanner_parse_config(*scanner, *config_string)
Protected.l sym, cfg, val
ProcedureReturn Bool(zbar_parse_config(*config_string, @sym, @cfg, @val) Or zbar_processor_set_config(*scanner, sym, cfg, val))
EndProcedure
Procedure.i zbar_decoder_parse_config(*decoder, *config_string)
Protected.l sym, cfg, val
ProcedureReturn Bool(zbar_parse_config(*config_string, @sym, @cfg, @val) Or zbar_processor_set_config(*decoder, sym, cfg, val))
EndProcedure
Procedure zbar_scan_rgb24(*scanner, *rgb)
ProcedureReturn zbar_scan_y(*scanner, PeekA(*rgb + 0) + PeekA(*rgb + 1) + PeekA(*rgb + 2))
EndProcedure
Procedure.i zbar_init()
Protected Result.i
If zbar_lib = #Null
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
zbar_lib = OpenLibrary(#PB_Any, "libzbar-0.dll")
CompilerCase #PB_OS_Linux
zbar_lib = OpenLibrary(#PB_Any, "/usr/lib/libzbar.so")
CompilerEndSelect
If zbar_lib
_zbar_error_spew = GetFunction(zbar_lib, "_zbar_error_spew")
_zbar_error_string = GetFunction(zbar_lib, "_zbar_error_string")
_zbar_get_error_code = GetFunction(zbar_lib, "_zbar_get_error_code")
zbar_decode_width = GetFunction(zbar_lib, "zbar_decode_width")
zbar_decoder_create = GetFunction(zbar_lib, "zbar_decoder_create")
zbar_decoder_destroy = GetFunction(zbar_lib, "zbar_decoder_destroy")
zbar_decoder_get_color = GetFunction(zbar_lib, "zbar_decoder_get_color")
zbar_decoder_get_data = GetFunction(zbar_lib, "zbar_decoder_get_data")
zbar_decoder_get_data_length = GetFunction(zbar_lib, "zbar_decoder_get_data_length")
zbar_decoder_get_type = GetFunction(zbar_lib, "zbar_decoder_get_type")
zbar_decoder_get_userdata = GetFunction(zbar_lib, "zbar_decoder_get_userdata")
zbar_decoder_new_scan = GetFunction(zbar_lib, "zbar_decoder_new_scan")
zbar_decoder_reset = GetFunction(zbar_lib, "zbar_decoder_reset")
zbar_decoder_set_config = GetFunction(zbar_lib, "zbar_decoder_set_config")
zbar_decoder_set_handler = GetFunction(zbar_lib, "zbar_decoder_set_handler")
zbar_decoder_set_userdata = GetFunction(zbar_lib, "zbar_decoder_set_userdata")
_zbar_get_addon_name = GetFunction(zbar_lib, "zbar_get_addon_name")
_zbar_get_symbol_name = GetFunction(zbar_lib, "zbar_get_symbol_name")
zbar_image_convert = GetFunction(zbar_lib, "zbar_image_convert")
zbar_image_convert_resize = GetFunction(zbar_lib, "zbar_image_convert_resize")
zbar_image_copy = GetFunction(zbar_lib, "zbar_image_copy")
zbar_image_create = GetFunction(zbar_lib, "zbar_image_create")
zbar_image_destroy = GetFunction(zbar_lib, "zbar_image_destroy")
zbar_image_first_symbol = GetFunction(zbar_lib, "zbar_image_first_symbol")
zbar_image_free_data = GetFunction(zbar_lib, "zbar_image_free_data")
zbar_image_get_data = GetFunction(zbar_lib, "zbar_image_get_data")
zbar_image_get_data_length = GetFunction(zbar_lib, "zbar_image_get_data_length")
zbar_image_get_format = GetFunction(zbar_lib, "zbar_image_get_format")
zbar_image_get_height = GetFunction(zbar_lib, "zbar_image_get_height")
zbar_image_get_sequence = GetFunction(zbar_lib, "zbar_image_get_sequence")
zbar_image_get_symbols = GetFunction(zbar_lib, "zbar_image_get_symbols")
zbar_image_get_userdata = GetFunction(zbar_lib, "zbar_image_get_userdata")
zbar_image_get_width = GetFunction(zbar_lib, "zbar_image_get_width")
zbar_image_ref = GetFunction(zbar_lib, "zbar_image_ref")
zbar_image_scanner_create = GetFunction(zbar_lib, "zbar_image_scanner_create")
zbar_image_scanner_destroy = GetFunction(zbar_lib, "zbar_image_scanner_destroy")
zbar_image_scanner_enable_cache = GetFunction(zbar_lib, "zbar_image_scanner_enable_cache")
zbar_image_scanner_get_results = GetFunction(zbar_lib, "zbar_image_scanner_get_results")
zbar_image_scanner_recycle_image = GetFunction(zbar_lib, "zbar_image_scanner_recycle_image")
zbar_image_scanner_set_config = GetFunction(zbar_lib, "zbar_image_scanner_set_config")
zbar_image_scanner_set_data_handler = GetFunction(zbar_lib, "zbar_image_scanner_set_data_handler")
zbar_image_set_data = GetFunction(zbar_lib, "zbar_image_set_data")
zbar_image_set_format = GetFunction(zbar_lib, "zbar_image_set_format")
zbar_image_set_sequence = GetFunction(zbar_lib, "zbar_image_set_sequence")
zbar_image_set_size = GetFunction(zbar_lib, "zbar_image_set_size")
zbar_image_set_symbols = GetFunction(zbar_lib, "zbar_image_set_symbols")
zbar_image_set_userdata = GetFunction(zbar_lib, "zbar_image_set_userdata")
zbar_image_write = GetFunction(zbar_lib, "zbar_image_write")
zbar_increase_verbosity = GetFunction(zbar_lib, "zbar_increase_verbosity")
zbar_negotiate_format = GetFunction(zbar_lib, "zbar_negotiate_format")
zbar_parse_config = GetFunction(zbar_lib, "zbar_parse_config")
zbar_process_image = GetFunction(zbar_lib, "zbar_process_image")
zbar_process_one = GetFunction(zbar_lib, "zbar_process_one")
zbar_processor_create = GetFunction(zbar_lib, "zbar_processor_create")
zbar_processor_destroy = GetFunction(zbar_lib, "zbar_processor_destroy")
zbar_processor_force_format = GetFunction(zbar_lib, "zbar_processor_force_format")
zbar_processor_get_results = GetFunction(zbar_lib, "zbar_processor_get_results")
zbar_processor_get_userdata = GetFunction(zbar_lib, "zbar_processor_get_userdata")
zbar_processor_init = GetFunction(zbar_lib, "zbar_processor_init")
zbar_processor_is_visible = GetFunction(zbar_lib, "zbar_processor_is_visible")
zbar_processor_request_interface = GetFunction(zbar_lib, "zbar_processor_request_interface")
zbar_processor_request_iomode = GetFunction(zbar_lib, "zbar_processor_request_iomode")
zbar_processor_request_size = GetFunction(zbar_lib, "zbar_processor_request_size")
zbar_processor_set_active = GetFunction(zbar_lib, "zbar_processor_set_active")
zbar_processor_set_config = GetFunction(zbar_lib, "zbar_processor_set_config")
zbar_processor_set_data_handler = GetFunction(zbar_lib, "zbar_processor_set_data_handler")
zbar_processor_set_userdata = GetFunction(zbar_lib, "zbar_processor_set_userdata")
zbar_processor_set_visible = GetFunction(zbar_lib, "zbar_processor_set_visible")
zbar_processor_user_wait = GetFunction(zbar_lib, "zbar_processor_user_wait")
zbar_scan_image = GetFunction(zbar_lib, "zbar_scan_image")
zbar_scan_y = GetFunction(zbar_lib, "zbar_scan_y")
zbar_scanner_create = GetFunction(zbar_lib, "zbar_scanner_create")
zbar_scanner_destroy = GetFunction(zbar_lib, "zbar_scanner_destroy")
zbar_scanner_flush = GetFunction(zbar_lib, "zbar_scanner_flush")
zbar_scanner_get_color = GetFunction(zbar_lib, "zbar_scanner_get_color")
zbar_scanner_get_edge = GetFunction(zbar_lib, "zbar_scanner_get_edge")
zbar_scanner_get_state = GetFunction(zbar_lib, "zbar_scanner_get_state")
zbar_scanner_get_width = GetFunction(zbar_lib, "zbar_scanner_get_width")
zbar_scanner_new_scan = GetFunction(zbar_lib, "zbar_scanner_new_scan")
zbar_scanner_reset = GetFunction(zbar_lib, "zbar_scanner_reset")
zbar_set_verbosity = GetFunction(zbar_lib, "zbar_set_verbosity")
zbar_symbol_first_component = GetFunction(zbar_lib, "zbar_symbol_first_component")
zbar_symbol_get_components = GetFunction(zbar_lib, "zbar_symbol_get_components")
zbar_symbol_get_count = GetFunction(zbar_lib, "zbar_symbol_get_count")
_zbar_symbol_get_data = GetFunction(zbar_lib, "zbar_symbol_get_data")
zbar_symbol_get_data_length = GetFunction(zbar_lib, "zbar_symbol_get_data_length")
zbar_symbol_get_loc_size = GetFunction(zbar_lib, "zbar_symbol_get_loc_size")
zbar_symbol_get_loc_x = GetFunction(zbar_lib, "zbar_symbol_get_loc_x")
zbar_symbol_get_loc_y = GetFunction(zbar_lib, "zbar_symbol_get_loc_y")
zbar_symbol_get_quality = GetFunction(zbar_lib, "zbar_symbol_get_quality")
zbar_symbol_get_type = GetFunction(zbar_lib, "zbar_symbol_get_type")
zbar_symbol_next = GetFunction(zbar_lib, "zbar_symbol_next")
zbar_symbol_ref = GetFunction(zbar_lib, "zbar_symbol_ref")
zbar_symbol_set_first_symbol = GetFunction(zbar_lib, "zbar_symbol_set_first_symbol")
zbar_symbol_set_get_size = GetFunction(zbar_lib, "zbar_symbol_set_get_size")
zbar_symbol_set_ref = GetFunction(zbar_lib, "zbar_symbol_set_ref")
zbar_symbol_xml = GetFunction(zbar_lib, "zbar_symbol_xml")
zbar_version = GetFunction(zbar_lib, "zbar_version")
zbar_video_create = GetFunction(zbar_lib, "zbar_video_create")
zbar_video_destroy = GetFunction(zbar_lib, "zbar_video_destroy")
zbar_video_enable = GetFunction(zbar_lib, "zbar_video_enable")
zbar_video_get_fd = GetFunction(zbar_lib, "zbar_video_get_fd")
zbar_video_get_format = GetFunction(zbar_lib, "zbar_video_get_format")
zbar_video_get_height = GetFunction(zbar_lib, "zbar_video_get_height")
zbar_video_get_width = GetFunction(zbar_lib, "zbar_video_get_width")
zbar_video_init = GetFunction(zbar_lib, "zbar_video_init")
zbar_video_next_image = GetFunction(zbar_lib, "zbar_video_next_image")
zbar_video_open = GetFunction(zbar_lib, "zbar_video_open")
zbar_video_request_interface = GetFunction(zbar_lib, "zbar_video_request_interface")
zbar_video_request_iomode = GetFunction(zbar_lib, "zbar_video_request_iomode")
zbar_video_request_size = GetFunction(zbar_lib, "zbar_video_request_size")
zbar_window_attach = GetFunction(zbar_lib, "zbar_window_attach")
zbar_window_create = GetFunction(zbar_lib, "zbar_window_create")
zbar_window_destroy = GetFunction(zbar_lib, "zbar_window_destroy")
zbar_window_draw = GetFunction(zbar_lib, "zbar_window_draw")
zbar_window_get_overlay = GetFunction(zbar_lib, "zbar_window_get_overlay")
zbar_window_redraw = GetFunction(zbar_lib, "zbar_window_redraw")
zbar_window_resize = GetFunction(zbar_lib, "zbar_window_resize")
zbar_window_set_overlay = GetFunction(zbar_lib, "zbar_window_set_overlay")
Result = zbar_lib
EndIf
EndIf
ProcedureReturn Result
EndProcedure
Procedure zbar_close()
If IsLibrary(zbar_lib)
CloseLibrary(zbar_lib)
zbar_lib = #Null
EndIf
EndProcedure
;-demo
CompilerIf #PB_Compiler_IsMainFile
ProcedureC OwnCleanUp(*image.zbar_image_s)
While *image
FreeMemory(*image\Data)
If *image\userdata
FreeMemory(*image\userdata)
EndIf
*image = *image\Next
Wend
EndProcedure
Procedure.i get_data(Filename$, *width, *height, *raw)
Protected ColourByte.a
Protected.i Result, img, Width, Height, x, y, Ptr, Colour
Protected *Buffer
img = LoadImage(#PB_Any, Filename$)
If img
Width = ImageWidth(img)
Height = ImageHeight(img)
*Buffer = AllocateMemory(Width * Height)
If *Buffer
StartDrawing(ImageOutput(img))
For y = 0 To Height - 1
For x = 0 To Width - 1
Colour = Point(x, y)
ColourByte = (Colour & $E00000) >> 16 | (Colour & $E000) >> 11 | (Colour & $C0) >> 6
; Debug Hex((Colour & $E00000) >> 16)
; Debug Hex((Colour & $E000) >> 11)
;
; Debug Hex(Colour) + " -> " + Hex(ColourByte)
PokeA(*Buffer + Ptr, ColourByte)
Ptr + 1
Next x
Next y
StopDrawing()
PokeI(*raw, *Buffer)
PokeL(*width, Width)
PokeL(*height, Height)
Result = #True
EndIf
FreeImage(img)
EndIf
ProcedureReturn Result
EndProcedure
Define Filename$
Define.l Major, Minor
Define *scanner
Define width.l, height.l, *raw
Define *image.zbar_image_s
Define n.i, *symbol.zbar_symbol_s, typ.i
Filename$ = OpenFileRequester("Choose a bmp with code inside", "", "*.bmp|*.bmp", 0)
If Filename$
If ZBar_Init()
zbar_version(@Major, @Minor)
Debug "Version: " + Str(Major) + "." + Str(Minor)
; create a reader
*scanner = zbar_image_scanner_create()
; configure the reader
If zbar_image_scanner_set_config(*scanner, 0, #ZBAR_CFG_ENABLE, 1) <> 0
Debug "Error: zbar_image_scanner_set_config"
EndIf
; obtain image data
If get_data(Filename$, @width, @height, @*raw)
Debug Str(width) + " x " + Str(height) + " @ " + Str(*raw)
; wrap image data
*image = zbar_image_create()
If *image
zbar_image_set_format(*image, #Format_Y800)
zbar_image_set_size(*image, width, height)
;zbar_image_set_data(*image, *raw, width * height, zbar_image_free_data)
zbar_image_set_data(*image, *raw, width * height, @OwnCleanUp())
; Debug zbar_image_get_width(*image)
; Debug zbar_image_get_height(*image)
; Debug Hex(zbar_image_get_format(*image))
; scan the image For barcodes
n = zbar_scan_image(*scanner, *image)
If n > 0
;extract results
*symbol = zbar_image_first_symbol(*image)
While *symbol
typ = zbar_symbol_get_type(*symbol)
Debug zbar_get_symbol_name(typ)
Debug zbar_symbol_get_data(*symbol)
*symbol = zbar_symbol_next(*symbol)
Wend
ElseIf n = 0
Debug "No symbols detected"
ElseIf n = -1
Debug "Error: zbar_scan_image"
Else
Debug "Unknown result"
EndIf
;clean up
zbar_image_destroy(*image)
EndIf
EndIf
EndIf
EndIf
CompilerEndIf