1. -- 
  2. -- Copyright (c) 2013 Kevin Wellwood 
  3. -- All rights reserved. 
  4. -- 
  5. -- This source code is distributed under the Modified BSD License. For terms and 
  6. -- conditions, see license.txt. 
  7. -- 
  8.  
  9. with Allegro.Paths;                     use Allegro.Paths; 
  10. with Allegro.UTF8;                      use Allegro.UTF8; 
  11. with Interfaces;                        use Interfaces; 
  12. with Interfaces.C;                      use Interfaces.C; 
  13. with Interfaces.C.Strings;              use Interfaces.C.Strings; 
  14. with System;                            use System; 
  15.  
  16. -- Allegro 5.0.9 - File I/O 
  17. package Allegro.File_IO is 
  18.  
  19.     type Allegro_File is limited private; 
  20.     type A_Allegro_File is access all Allegro_File; 
  21.  
  22.     type Allegro_Seek is (ALLEGRO_SEEK_SET, ALLEGRO_SEEK_CUR, ALLEGRO_SEEK_END); 
  23.     pragma Convention( C, Allegro_Seek ); 
  24.  
  25.     type fi_fopen     is access function( path : C.Strings.chars_ptr; mode : C.Strings.chars_ptr ) return Address; 
  26.     type fi_fclose    is access procedure( handle : A_Allegro_File ); 
  27.     type fi_fread     is access function( f : A_Allegro_File; ptr : Address; size : size_t ) return size_t; 
  28.     type fi_fwrite    is access function( f : A_Allegro_File; ptr : Address; size : size_t ) return size_t; 
  29.     type fi_fflush    is access function( f : A_Allegro_File ) return Bool; 
  30.     type fi_ftell     is access function( f : A_Allegro_File ) return Integer_64; 
  31.     type fi_fseek     is access function( f : A_Allegro_File; offset : Integer_64; whence : Allegro_Seek ) return Bool; 
  32.     type fi_feof      is access function( f : A_Allegro_File ) return Bool; 
  33.     type fi_ferror    is access function( f : A_Allegro_File ) return Bool; 
  34.     type fi_fclearerr is access procedure( f : A_Allegro_File ); 
  35.     type fi_fungetc   is access function( f : A_Allegro_File; c : Integer ) return Integer; 
  36.     type fi_fsize     is access function( f : A_Allegro_File ) return off_t; 
  37.  
  38.     pragma Convention( C, fi_fopen ); 
  39.     pragma Convention( C, fi_fclose ); 
  40.     pragma Convention( C, fi_fread ); 
  41.     pragma Convention( C, fi_fwrite ); 
  42.     pragma Convention( C, fi_fflush ); 
  43.     pragma Convention( C, fi_ftell ); 
  44.     pragma Convention( C, fi_fseek ); 
  45.     pragma Convention( C, fi_feof ); 
  46.     pragma Convention( C, fi_ferror ); 
  47.     pragma Convention( C, fi_fclearerr ); 
  48.     pragma Convention( C, fi_fungetc ); 
  49.     pragma Convention( C, fi_fsize ); 
  50.  
  51.     type Allegro_File_Interface is 
  52.         record 
  53.             fopen     : fi_fopen; 
  54.             fclose    : fi_fclose; 
  55.             fread     : fi_fread; 
  56.             fwrite    : fi_fwrite; 
  57.             fflush    : fi_fflush; 
  58.             ftell     : fi_ftell; 
  59.             fseek     : fi_fseek; 
  60.             feof      : fi_feof; 
  61.             ferror    : fi_ferror; 
  62.             fclearerr : fi_fclearerr; 
  63.             fungetc   : fi_fungetc; 
  64.             fsize     : fi_fsize; 
  65.         end record; 
  66.     pragma Convention( C, Allegro_File_Interface ); 
  67.     type A_Allegro_File_Interface is access all Allegro_File_Interface; 
  68.  
  69.     ---------------------------------------------------------------------------- 
  70.  
  71.     function Al_Fopen( path : String; mode : String ) return A_Allegro_File; 
  72.  
  73.     function Al_Fopen_Slice( f            : A_Allegro_File; 
  74.                              initial_size : size_t; 
  75.                              mode         : String ) return A_Allegro_File; 
  76.  
  77.     function Al_Fopen_Interface( vt   : A_Allegro_File_Interface; 
  78.                                  path : String; 
  79.                                  mode : String ) return A_Allegro_File; 
  80.  
  81.     procedure Al_Fclose( f : A_Allegro_File ); 
  82.     pragma Import( C, Al_Fclose, "al_fclose" ); 
  83.  
  84.     function Al_Fread( f : A_Allegro_File; ptr : Address; size : size_t ) return size_t; 
  85.     pragma Import( C, Al_Fread, "al_fread" ); 
  86.  
  87.     function Al_Fwrite( f : A_Allegro_File; ptr : Address; size : size_t ) return size_t; 
  88.     pragma Import( C, Al_Fwrite, "al_fwrite" ); 
  89.  
  90.     -- Calls Al_Fwrite32le, ignoring any errors; 
  91.     procedure Al_Fwrite( f : A_Allegro_File; ptr : Address; size : size_t ); 
  92.  
  93.     function Al_Fflush( f : A_Allegro_File ) return Boolean; 
  94.  
  95.     function Al_Ftell( f : A_Allegro_File ) return Integer_64;    -- return off_t 
  96.     pragma Import( C, Al_Ftell, "al_ftell" ); 
  97.  
  98.     function Al_Fseek( f : A_Allegro_File; offset : Integer_64; whence : Allegro_Seek ) return Boolean; 
  99.  
  100.     -- Calls Al_Fseek, ignoring any errors. 
  101.     procedure Al_Fseek( f : A_Allegro_File; offset : Integer_64; whence : Allegro_Seek ); 
  102.  
  103.     function Al_Feof( f : A_Allegro_File ) return Boolean; 
  104.  
  105.     function Al_Ferror( f : A_Allegro_File ) return Boolean; 
  106.  
  107.     procedure Al_Fclearerr( f : A_Allegro_File ); 
  108.     pragma Import( C, Al_Fclearerr, "al_fclearerr" ); 
  109.  
  110.     function Al_Fungetc( f : A_Allegro_File; c : Integer ) return Integer; 
  111.     pragma Import( C, Al_Fungetc, "al_fungetc" ); 
  112.  
  113.     -- Calls Al_Fungetc, ignoring any errors. 
  114.     procedure Al_Fungetc( f : A_Allegro_File; c : Character ); 
  115.  
  116.     -- Calls Al_Fungetc, ignoring any errors. 
  117.     procedure Al_Fungetc( f : A_Allegro_File; c : Unsigned_8 ); 
  118.  
  119.     function Al_Fsize( f : A_Allegro_File ) return Integer_64; 
  120.     pragma Import( C, Al_Fsize, "al_fsize" ); 
  121.  
  122.     function Al_Fgetc( f : A_Allegro_File ) return Integer; 
  123.     pragma Import( C, Al_Fgetc, "al_fgetc" ); 
  124.  
  125.     function Al_Fputc( f : A_Allegro_File; c : Integer ) return Integer; 
  126.     pragma Import( C, Al_Fputc, "al_fputc" ); 
  127.  
  128.     function Al_Fread16le( f : A_Allegro_File ) return Integer_16; 
  129.     pragma Import( C, Al_Fread16le, "al_fread16le" ); 
  130.  
  131.     function Al_Fread16be( f : A_Allegro_File ) return Integer_16; 
  132.     pragma Import( C, Al_Fread16be, "al_fread16be" ); 
  133.  
  134.     function Al_Fwrite16le( f : A_Allegro_File; w : Integer_16 ) return size_t; 
  135.     pragma Import( C, Al_Fwrite16le, "al_fwrite16le" ); 
  136.  
  137.     function Al_Fwrite16be( f : A_Allegro_File; w : Integer_16 ) return size_t; 
  138.     pragma Import( C, Al_Fwrite16be, "al_fwrite16be" ); 
  139.  
  140.     function Al_Fread32le( f : A_Allegro_File ) return Integer_32; 
  141.     pragma Import( C, Al_Fread32le, "al_fread32le" ); 
  142.  
  143.     function Al_Fread32be( f : A_Allegro_File ) return Integer_32; 
  144.     pragma Import( C, Al_Fread32be, "al_fread32be" ); 
  145.  
  146.     function Al_Fwrite32le( f : A_Allegro_File; l : Integer_32 ) return size_t; 
  147.     pragma Import( C, Al_Fwrite32le, "al_fwrite32le" ); 
  148.  
  149.     -- Calls Al_Fwrite32le, ignoring any errors; 
  150.     procedure Al_Fwrite32le( f : A_Allegro_File; l : Integer_32 ); 
  151.  
  152.     function Al_Fwrite32be( f : A_Allegro_File; l : Integer_32 ) return size_t; 
  153.     pragma Import( C, Al_Fwrite32be, "al_fwrite32be" ); 
  154.  
  155.     function Al_Fgets( f : A_Allegro_File; max : Positive := 1024 ) return String; 
  156.  
  157.     function Al_Fget_Ustr( f : A_Allegro_File ) return A_Allegro_Ustr; 
  158.     pragma Import( C, Al_Fget_Ustr, "al_fget_ustr" ); 
  159.  
  160.     function Al_Fputs( f : A_Allegro_File; p : String ) return Integer; 
  161.  
  162.     -- Calls Al_Fputs, ignoring any errors. 
  163.     procedure Al_Fputs( f : A_Allegro_File; p : String ); 
  164.  
  165.     -- Standard I/O specific routines 
  166.  
  167.     function Al_Fopen_Fd( fd : Integer; mode : String ) return A_Allegro_File; 
  168.  
  169.     function Al_Make_Temp_File( template : String; ret_path : access A_Allegro_Path ) return A_Allegro_File; 
  170.  
  171.     -- Alternative file streams 
  172.  
  173.     procedure Al_Set_New_File_Interface( file_interface : A_Allegro_File_Interface ); 
  174.     pragma Import( C, Al_Set_New_File_Interface, "al_set_new_file_interface" ); 
  175.  
  176.     procedure Al_Set_Standard_File_Interface; 
  177.     pragma Import( C, Al_Set_Standard_File_Interface, "al_set_standard_file_interface" ); 
  178.  
  179.     function Al_Get_New_File_Interface return A_Allegro_File_Interface; 
  180.     pragma Import( C, Al_Get_New_File_Interface, "al_get_new_file_interface" ); 
  181.  
  182.     function Al_Create_File_Handle( vt : A_Allegro_File_Interface; userdata : Address ) return A_Allegro_File; 
  183.     pragma Import( C, Al_Create_File_Handle, "al_create_file_handle" ); 
  184.  
  185.     function Al_Get_File_Userdata( f : A_Allegro_File ) return Address; 
  186.     pragma Import( C, Al_Get_File_Userdata, "al_get_file_userdata" ); 
  187.  
  188. private 
  189.  
  190.     type Allegro_File is limited null record; 
  191.     pragma Convention( C, Allegro_File ); 
  192.  
  193. end Allegro.File_IO;