Code: Select all
ImportC "/usr/lib/libpng.a"
  png_create_read_struct(l.l, p.l, l2.l, l3.l)
  png_destroy_read_struct(*png_ptr.l, l.l, l2.l)
  png_create_info_struct(*png_ptr.l)
  png_init_io(png_ptr, fp)
  png_read_png(png_ptr, info_ptr, png_transforms, NULL)
  png_get_rows(*png_ptr, *info_ptr)
EndImport
ImportC "/usr/lib/libz.a"
EndImport
ImportC "/usr/lib/libImath.so.2"
EndImport
Structure png_structp
EndStructure
Structure png_infop
EndStructure
EnableExplicit
Global *png_ptr.png_structp
Global *info_ptr.png_infop
Global *end_info.png_infop
Global user_error_ptr, user_error_fn, user_warning_fn
Global fp
Global row_pointers
Procedure Finish()
  png_destroy_read_struct(@*png_ptr, 0, 0)
EndProcedure
Procedure ChkN(Val, Msg.s)
  If Val = 0
    Debug "Error: " + Msg
    Finish()
  EndIf
  ProcedureReturn Val
EndProcedure
*png_ptr = png_create_read_struct(@"1.2.8", @user_error_ptr, user_error_fn, user_warning_fn)
ChkN(*png_ptr, "#1")
*info_ptr = png_create_info_struct(*png_ptr)
ChkN(*info_ptr, "#2")
*end_info = png_create_info_struct(*png_ptr)
ChkN(*end_info, "#3")
fp = fopen_("/usr/share/pixmaps/mozilla-firefox.png", "rb")
ChkN(fp, "File I/O")
png_init_io(*png_ptr, fp)
png_read_png(*png_ptr, *info_ptr, 0, 0)
fclose_(fp)
row_pointers = png_get_rows(*png_ptr, *info_ptr)

