comp.lang.ada
 help / color / mirror / Atom feed
* Re-write a file in Ada
@ 2016-01-06 15:55 comicfanzine
  2016-01-07 13:02 ` comicfanzine
                   ` (8 more replies)
  0 siblings, 9 replies; 34+ messages in thread
From: comicfanzine @ 2016-01-06 15:55 UTC (permalink / raw)


Hello everybody ,

Next , a working code which re-write entirely a file .

I would like to modify it , doing the same thing exept that : 

Undounded_strings will be generate every time there is a next line .

Then , several get_line will be done on those strings .

And in final , put those modified strings in the file .


Anyone knows how to code that ?

Here is what i done for now =

with Ada.Text_IO.Unbounded_IO ; use Ada.Text_IO.Unbounded_IO ;
with Ada.Strings.Unbounded ;    use Ada.Strings.Unbounded ;
with Ada.Text_IO ;              use Ada.Text_IO ;
 
Procedure main is
 
  this_file : File_Type ;
 
  copy_file_1 : Unbounded_String ;
  copy_file_in_1 : Unbounded_String ;
 
  next_line : Positive_Count := 1 ;
 
Begin
 
     Open
     (Mode => In_file ,
      File => this_file ,
      Name => "main.adb" ) ;
 
 
     loop
        exit when End_Of_File ( this_file ) ;
 
     Set_Line ( this_file , next_line );
 
     get_line ( this_file , copy_file_in_1 ) ;
 
     Append
     ( Source  => copy_file_1 ,
       New_Item => copy_file_in_1 ) ;
 
      next_line := next_line + 1 ;
 
     end loop ;
 
    Close ( this_file ) ;
 
     Open
     (Mode => Out_file ,
      File => this_file ,
      Name => "main.adb" ) ;
 
     put ( this_file , copy_file_1 ) ;
 
     Close ( this_file ) ;
 
end main ;

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-06 15:55 Re-write a file in Ada comicfanzine
@ 2016-01-07 13:02 ` comicfanzine
  2016-01-08 20:35 ` comicfanzine
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 34+ messages in thread
From: comicfanzine @ 2016-01-07 13:02 UTC (permalink / raw)


I tried with a array but the program crash .

============================================
with Ada.Text_IO.Unbounded_IO ;	use Ada.Text_IO.Unbounded_IO ;
with Ada.Strings.Unbounded ;	use Ada.Strings.Unbounded ;
with Ada.Text_IO ;				use Ada.Text_IO ;

Procedure main is

  this_file : File_Type ;

  next_line : Positive_Count := 1 ;

  Type T_Tableau is array(1..1_000) of unbounded_string ;

  phrases : T_Tableau ;


Begin

	 Open
     (Mode => In_file ,
      File => this_file ,
      Name => "main.adb" ) ;


   loop
		exit when End_Of_File ( this_file ) ;

	  Set_Line ( this_file , next_line );

        if next_line > 1 then

            for i in 1 .. 1_000 loop
                phrases(i) := get_line ( this_file ) ;
            end loop ;

        end if ;

      next_line := next_line + 1 ;

   end loop ;

    Close ( this_file ) ;

     Open
     (Mode => Out_file ,
      File => this_file ,
      Name => "main.adb" ) ;

    for i in 1..1_000 loop
      put ( this_file , phrases(i) ) ;
   end loop ;


     Close ( this_file ) ;

end main ;


^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-06 15:55 Re-write a file in Ada comicfanzine
  2016-01-07 13:02 ` comicfanzine
@ 2016-01-08 20:35 ` comicfanzine
  2016-01-09  9:50   ` Brian Drummond
  2016-01-08 21:22 ` Randy Brukardt
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 34+ messages in thread
From: comicfanzine @ 2016-01-08 20:35 UTC (permalink / raw)


Nobody ?


^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-06 15:55 Re-write a file in Ada comicfanzine
  2016-01-07 13:02 ` comicfanzine
  2016-01-08 20:35 ` comicfanzine
@ 2016-01-08 21:22 ` Randy Brukardt
  2016-01-08 22:08   ` Anh Vo
  2016-01-10 16:54 ` comicfanzine
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 34+ messages in thread
From: Randy Brukardt @ 2016-01-08 21:22 UTC (permalink / raw)


<comicfanzine@gmail.com> wrote in message 
news:77e47c8b-7dcc-4e86-8f89-1f348cdf08dd@googlegroups.com...
> Hello everybody ,
>
> Next , a working code which re-write entirely a file .
>
> I would like to modify it , doing the same thing exept that :
>
> Undounded_strings will be generate every time there is a next line .
>
> Then , several get_line will be done on those strings .
>
> And in final , put those modified strings in the file .
>
>
> Anyone knows how to code that ?

I'm sure most of us can code whatever we need, and the above seems trivial. 
But most of us are also professional programmers, either working in Ada or 
working in some other language and doing hobby projects in Ada. We're happy 
to help, but being pros has two effects:

(1) We're not interested in writing other people's programs for them. We'll 
help people learn, but that's very different.
(2) One of the first things that professional programmers learn is that the 
hardest thing to do is to debug someone else's code.

On top of which, you gave code (which is good), but you never explained (in 
detail!) what happens compared to what you expect. Given that, the only 
serious alternative is to spend a hour or more figuring out what you're 
trying to do and then create a program (from scratch) that does that. I 
suspect most everyone here has something better to do than that. (The only 
time I'd do this is if I find the problem is interesting, which certainly is 
not the case here.)

I, personally, rarely look at the code posted here; I provide help based on 
the error and then work backwards from there. Since you didn't provide the 
error, and I'm surely not going try to load and compile your code, attempt 
to figure out what data you are reading, whether the results I get make any 
sense, and so on.

I'd suggest telling us what results you are getting from your code and what 
you are expecting, and perhaps someone will want to help you (but no 
promises).

                                          Randy.






^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-08 21:22 ` Randy Brukardt
@ 2016-01-08 22:08   ` Anh Vo
  0 siblings, 0 replies; 34+ messages in thread
From: Anh Vo @ 2016-01-08 22:08 UTC (permalink / raw)


On Friday, January 8, 2016 at 1:22:57 PM UTC-8, Randy Brukardt wrote:
> <comicfanzine@gmail.com> wrote in message 
> news:77e47c8b-7dcc-4e86-8f89-1f348cdf08dd@googlegroups.com...
> > Hello everybody ,
> >
> > Next , a working code which re-write entirely a file .
> >
> > I would like to modify it , doing the same thing exept that :
> >
> > Undounded_strings will be generate every time there is a next line .
> >
> > Then , several get_line will be done on those strings .
> >
> > And in final , put those modified strings in the file .
> >
> >
> > Anyone knows how to code that ?
> 
> I'm sure most of us can code whatever we need, and the above seems trivial. 
> But most of us are also professional programmers, either working in Ada or 
> working in some other language and doing hobby projects in Ada. We're happy 
> to help, but being pros has two effects:
> 
> (1) We're not interested in writing other people's programs for them. We'll 
> help people learn, but that's very different.
> (2) One of the first things that professional programmers learn is that the 
> hardest thing to do is to debug someone else's code.
> 
> On top of which, you gave code (which is good), but you never explained (in 
> detail!) what happens compared to what you expect. Given that, the only 
> serious alternative is to spend a hour or more figuring out what you're 
> trying to do and then create a program (from scratch) that does that. I 
> suspect most everyone here has something better to do than that. (The only 
> time I'd do this is if I find the problem is interesting, which certainly is 
> not the case here.)
> 
> I, personally, rarely look at the code posted here; I provide help based on 
> the error and then work backwards from there. Since you didn't provide the 
> error, and I'm surely not going try to load and compile your code, attempt 
> to figure out what data you are reading, whether the results I get make any 
> sense, and so on.
> 
> I'd suggest telling us what results you are getting from your code and what 
> you are expecting, and perhaps someone will want to help you (but no 
> promises).

I agreed 100% with Randy. 

Tell me if I understood you correctly. You wanted to read text in your source text (main.adb) one line at time. Then, they are concatenated into a single line of text for entire file. For example, if there are two lines of text, as shown below, the result would be one line of text as shown in the bottom.

with Ada.Text_IO.Unbounded_IO ;  use Ada.Text_IO.Unbounded_IO ;
with Ada.Strings.Unbounded ;  use Ada.Strings.Unbounded ;

with Ada.Text_IO.Unbounded_IO ;  use Ada.Text_IO.Unbounded_IO ;with Ada.Strings.Unbounded ;  use Ada.Strings.Unbounded ;

Anh Vo

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-08 20:35 ` comicfanzine
@ 2016-01-09  9:50   ` Brian Drummond
  0 siblings, 0 replies; 34+ messages in thread
From: Brian Drummond @ 2016-01-09  9:50 UTC (permalink / raw)


On Fri, 08 Jan 2016 12:35:39 -0800, comicfanzine wrote:

> Nobody ?

Probably waiting for you to tell us *how* the program crashed, including 
the exception message and any traceback.

-- Brian


^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-06 15:55 Re-write a file in Ada comicfanzine
                   ` (2 preceding siblings ...)
  2016-01-08 21:22 ` Randy Brukardt
@ 2016-01-10 16:54 ` comicfanzine
  2016-01-10 18:59   ` Björn Lundin
  2016-01-11 17:16   ` Brian Drummond
  2016-01-10 22:57 ` comicfanzine
                   ` (4 subsequent siblings)
  8 siblings, 2 replies; 34+ messages in thread
From: comicfanzine @ 2016-01-10 16:54 UTC (permalink / raw)


Ok , in others words :

I want to open the file , copy all the lines in it , then do some change in those lignes ( unbounded_strings ) , and finally paste all in the file ( mode : Out_file ) .

This is what i meant by " Re-write a file " .


The error :

raised ADA.IO_EXCEPTIONS.END_ERROR : a-tigeli.adb:96

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-10 16:54 ` comicfanzine
@ 2016-01-10 18:59   ` Björn Lundin
  2016-01-11 17:16   ` Brian Drummond
  1 sibling, 0 replies; 34+ messages in thread
From: Björn Lundin @ 2016-01-10 18:59 UTC (permalink / raw)


On 2016-01-10 17:54, comicfanzine@gmail.com wrote:
> Ok , in others words :
> 
> I want to open the file , copy all the lines in it , then do some change in those lignes ( unbounded_strings ) , and finally paste all in the file ( mode : Out_file ) .
> 
> This is what i meant by " Re-write a file " .
> 
> 
> The error :
> 
> raised ADA.IO_EXCEPTIONS.END_ERROR : a-tigeli.adb:96
> 

Below, you need tocomplement with paramters for
open/create, and declare from_file and to_file

try something like :


--pseudo code

with Ada.Text_IO.Unbounded_IO ;	use Ada.Text_IO.Unbounded_IO ;
with Ada.Strings.Unbounded ;	use Ada.Strings.Unbounded ;
with Ada.Text_IO ;              use Ada.Text_IO ;

procedure Rewrite is
  Buffer : Unbounded_String := Null_Unbounded_String;
begin
  Open (From_file);
  Create(To_File);

  begin
    loop
      Buffer := Get_Line(From_File);
      Put_Line(To_File, Buffer);
    end loop;
  exception
    when End_Error =>
      Close(From_File);
      Close(To_File);
  end;
end Rewrite;



-- 
--
Björn


^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-06 15:55 Re-write a file in Ada comicfanzine
                   ` (3 preceding siblings ...)
  2016-01-10 16:54 ` comicfanzine
@ 2016-01-10 22:57 ` comicfanzine
  2016-01-11  1:59   ` Anh Vo
  2016-01-11 10:09   ` Björn Lundin
  2016-01-18  0:22 ` comicfanzine
                   ` (3 subsequent siblings)
  8 siblings, 2 replies; 34+ messages in thread
From: comicfanzine @ 2016-01-10 22:57 UTC (permalink / raw)


Thanks björn lundin and the others !

I finally suceed :

WITH Ada.Text_IO ;  		USE Ada.Text_IO ;
WITH Ada.Text_IO.Unbounded_IO ;	USE Ada.Text_IO.Unbounded_IO ;
WITH Ada.Strings.Unbounded ;	USE Ada.Strings.Unbounded ;

Procedure main is

  next_l : Positive_Count := 1 ;

  this_file : File_type ;

  f_deux : File_type ;

  Type T_Tableau is array( 1 .. 1_000 ) of unbounded_string ;

  case_of_array : T_Tableau ;

  get_l : integer := 1 ;
  -- Rôle d'intervalle dans le tableau , dans la boucle

  c_to_put : integer ;

  nb_lign_to_put : integer := 1 ;

Begin

	Open
     (File => this_file ,
      Mode => In_file ,
      Name => "main.adb");

    un : loop exit when End_Of_File ( this_file ) ;
	    set_line ( this_file , next_l ) ;

	    case_of_array(get_l) := Get_Line( this_file );

		next_l := next_l + 1 ;
		get_l := get_l + 1 ;

		 c_to_put := get_l ;
	    -- compte le nbr de get_line effectué

   end loop un ;

      Open
     (File => f_deux ,
      Mode => Out_file ,
      Name => "verify");

    deux : loop exit when nb_lign_to_put = c_to_put ;

     Put_line( f_deux , case_of_array(nb_lign_to_put) ) ;

     nb_lign_to_put := nb_lign_to_put + 1 ;

   end loop deux ;
End main ;

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-10 22:57 ` comicfanzine
@ 2016-01-11  1:59   ` Anh Vo
  2016-01-11 10:09   ` Björn Lundin
  1 sibling, 0 replies; 34+ messages in thread
From: Anh Vo @ 2016-01-11  1:59 UTC (permalink / raw)


On Sunday, January 10, 2016 at 2:57:42 PM UTC-8, comicf...@gmail.com wrote:
> Thanks björn lundin and the others !
> 
> I finally suceed :
> 
> WITH Ada.Text_IO ;  		USE Ada.Text_IO ;
> WITH Ada.Text_IO.Unbounded_IO ;	USE Ada.Text_IO.Unbounded_IO ;
> WITH Ada.Strings.Unbounded ;	USE Ada.Strings.Unbounded ;
> 
> Procedure main is
> 
>   next_l : Positive_Count := 1 ;
> 
>   this_file : File_type ;
> 
>   f_deux : File_type ;
> 
>   Type T_Tableau is array( 1 .. 1_000 ) of unbounded_string ;
> 
>   case_of_array : T_Tableau ;
> 
>   get_l : integer := 1 ;
>   -- Rôle d'intervalle dans le tableau , dans la boucle
> 
>   c_to_put : integer ;
> 
>   nb_lign_to_put : integer := 1 ;
> 
> Begin
> 
> 	Open
>      (File => this_file ,
>       Mode => In_file ,
>       Name => "main.adb");
> 
>     un : loop exit when End_Of_File ( this_file ) ;
> 	    set_line ( this_file , next_l ) ;
> 
> 	    case_of_array(get_l) := Get_Line( this_file );
> 
> 		next_l := next_l + 1 ;
> 		get_l := get_l + 1 ;
> 
> 		 c_to_put := get_l ;
> 	    -- compte le nbr de get_line effectué
> 
>    end loop un ;
> 
>       Open
>      (File => f_deux ,
>       Mode => Out_file ,
>       Name => "verify");
> 
>     deux : loop exit when nb_lign_to_put = c_to_put ;
> 
>      Put_line( f_deux , case_of_array(nb_lign_to_put) ) ;
> 
>      nb_lign_to_put := nb_lign_to_put + 1 ;
> 
>    end loop deux ;
> End main ;

It is very inefficient. In fact, the Set_Line (...) can be eliminated. In addition, next_l, c_to_put and nb_lign_to_put variables are not needed.

Anh Vo


^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-10 22:57 ` comicfanzine
  2016-01-11  1:59   ` Anh Vo
@ 2016-01-11 10:09   ` Björn Lundin
  1 sibling, 0 replies; 34+ messages in thread
From: Björn Lundin @ 2016-01-11 10:09 UTC (permalink / raw)


On 2016-01-10 23:57, comicfanzine@gmail.com wrote:
> Thanks björn lundin and the others !
> 
> I finally suceed :
> 
> WITH Ada.Text_IO ;  		USE Ada.Text_IO ;
> WITH Ada.Text_IO.Unbounded_IO ;	USE Ada.Text_IO.Unbounded_IO ;
> WITH Ada.Strings.Unbounded ;	USE Ada.Strings.Unbounded ;
> 
> Procedure main is


...

Compare your code to mine.
what is the array for ?
what kind of manipulating are you doing ?
To me it looks like you are doing nothing
more that storing the lines in an array,
and then write the array to a new file.
Why? And why not doing that in the loop
in my example?

And as others pointed out:
Get_Line will get you the whole line,
and next call will get you the whole NEXT line,
so Set_Line is not needed.




-- 
--
Björn


^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-10 16:54 ` comicfanzine
  2016-01-10 18:59   ` Björn Lundin
@ 2016-01-11 17:16   ` Brian Drummond
  2016-01-18 15:05     ` gautier_niouzes
  1 sibling, 1 reply; 34+ messages in thread
From: Brian Drummond @ 2016-01-11 17:16 UTC (permalink / raw)


On Sun, 10 Jan 2016 08:54:01 -0800, comicfanzine wrote:

> Ok , in others words :
> 
> The error :
> 
> raised ADA.IO_EXCEPTIONS.END_ERROR : a-tigeli.adb:96

In outline, when you see this sort of error, find the installation's "Ada 
include directory" which contains the named file...

locate a-tigeli.adb
/usr/lib/gcc/x86_64-linux-gnu/4.9/rts-native/adainclude/a-tigeli.adb

open in editor (read only) ... and see
--     A D A . T E X T _ I O . G E T _ L I N E      --
so we know the error occurred in "Get_Line"

And look at line 96:

   function Get_Chunk (N : Positive) return Natural is
...blah...
         else
            raise End_Error;
         end if;

Looks like we ran out of file somehow. From here on it's usually 
straightforward.

-- Brian

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-06 15:55 Re-write a file in Ada comicfanzine
                   ` (4 preceding siblings ...)
  2016-01-10 22:57 ` comicfanzine
@ 2016-01-18  0:22 ` comicfanzine
  2016-01-18  9:50   ` AdaMagica
                     ` (2 more replies)
  2016-01-18 17:25 ` comicfanzine
                   ` (2 subsequent siblings)
  8 siblings, 3 replies; 34+ messages in thread
From: comicfanzine @ 2016-01-18  0:22 UTC (permalink / raw)


Hi ,

 björn lundin .

First , I want to copy every line in a file , in a array of unbounded_Strings , to work on them later .

The problem is that i don't want to give a specific
range at initializing .

In fact , it size must be known according to the number of lines in the file .


I changed several times the code .
I tried for instance , to determine how many lines a file have by using set_line until the end of the file , but it failed . 

Here the code simplified to be clear :

WITH Ada.Text_IO ;              USE Ada.Text_IO ;
WITH Ada.Text_IO.Unbounded_IO ; USE Ada.Text_IO.Unbounded_IO ;
WITH Ada.Strings.Unbounded ;    USE Ada.Strings.Unbounded ;

Procedure main is

  this_file : File_type ;

  Last_case : integer := 1 ;

  Type T_Tableau is array( Integer range <> ) of unbounded_string ;
  -- size according to the number of lines in the file .

  case_of_array : T_Tableau ;

Begin

    Open
     (File => this_file ,
      Mode => In_file ,
      Name => "main.adb");

   loop exit when End_Of_File ( this_file ) ;

    case_of_array( Last_case ) := Get_Line( this_file );
    
     Last_case := Last_case + 1 ;
   end loop ;    
End main ;


^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-18  0:22 ` comicfanzine
@ 2016-01-18  9:50   ` AdaMagica
  2016-01-18 17:27     ` Björn Lundin
  2016-01-18 11:52   ` Brian Drummond
  2016-01-18 17:30   ` Björn Lundin
  2 siblings, 1 reply; 34+ messages in thread
From: AdaMagica @ 2016-01-18  9:50 UTC (permalink / raw)


Am Montag, 18. Januar 2016 01:22:22 UTC+1 schrieb comicf...@gmail.com:
> First , I want to copy every line in a file , in a array of unbounded_Strings , to work on them later .
> 
> The problem is that i don't want to give a specific
> range at initializing .
> 
> In fact , it size must be known according to the number of lines in the file .

How about giving an upper bound of 1000 or 10_000 lines? This should be enough for most cases.

> WITH Ada.Text_IO ;              USE Ada.Text_IO ;
> WITH Ada.Text_IO.Unbounded_IO ; USE Ada.Text_IO.Unbounded_IO ;
> WITH Ada.Strings.Unbounded ;    USE Ada.Strings.Unbounded ;
> 
> Procedure main is
> 
>   this_file : File_type ;
> 
    Last_case : Natural := 0 ;  -- last filled line

    Type T_Tableau is array (1 .. 10_000) of unbounded_string ;
    -- size with upper limit to the number of lines in the file.

    case_of_array : T_Tableau ;  -- now a definite type
> 
> Begin
> 
>     Open
>      (File => this_file ,
>       Mode => In_file ,
>       Name => "main.adb");
> 
>    loop exit when End_Of_File ( this_file ) ;
> 
>     case_of_array( Last_case ) := Get_Line( this_file );
>     
>      Last_case := Last_case + 1 ;
>    end loop ;    
> End main ;

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-18  0:22 ` comicfanzine
  2016-01-18  9:50   ` AdaMagica
@ 2016-01-18 11:52   ` Brian Drummond
  2016-01-18 17:30   ` Björn Lundin
  2 siblings, 0 replies; 34+ messages in thread
From: Brian Drummond @ 2016-01-18 11:52 UTC (permalink / raw)


On Sun, 17 Jan 2016 16:22:21 -0800, comicfanzine wrote:

> Hi ,
> 
>  björn lundin .
> 
> First , I want to copy every line in a file , in a array of
> unbounded_Strings , to work on them later .
> 
> The problem is that i don't want to give a specific range at
> initializing .
> 
> In fact , it size must be known according to the number of lines in the
> file .

Store your strings in one of the containers from the Ada.Containers 
library.

-- Brian

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-11 17:16   ` Brian Drummond
@ 2016-01-18 15:05     ` gautier_niouzes
  2016-01-19 12:24       ` Brian Drummond
  0 siblings, 1 reply; 34+ messages in thread
From: gautier_niouzes @ 2016-01-18 15:05 UTC (permalink / raw)


Le lundi 11 janvier 2016 18:18:48 UTC+1, Brian Drummond a écrit :

> > raised ADA.IO_EXCEPTIONS.END_ERROR : a-tigeli.adb:96
> 
> In outline, when you see this sort of error, find the installation's "Ada 
> include directory" which contains the named file...
> 
> locate a-tigeli.adb
> /usr/lib/gcc/x86_64-linux-gnu/4.9/rts-native/adainclude/a-tigeli.adb
> 
> open in editor (read only) ... and see
> --     A D A . T E X T _ I O . G E T _ L I N E      --
> so we know the error occurred in "Get_Line"
> 
> And look at line 96:
> 
>    function Get_Chunk (N : Positive) return Natural is
> ...blah...
>          else
>             raise End_Error;
>          end if;
> 
> Looks like we ran out of file somehow. From here on it's usually 
> straightforward.

Sure - but all that investigation effort brings nothing: the exception's name gives already this hint: the end of a file was reached. The fact that it raised somewhere in the run-time library is obvious and brings zero information for finding the bug: no indication is given about where the exception occurred in the program. It's a shame that GNAT doesn't switch on its trace-back by default, IMHO. The current setup is disturbing for beginners and cumbersome for people using GNAT for larger programs.
_________________________
Gautier's Ada programming
http://gautiersblog.blogspot.com/search/label/Ada
NB: follow the above link for a valid e-mail address


^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-06 15:55 Re-write a file in Ada comicfanzine
                   ` (5 preceding siblings ...)
  2016-01-18  0:22 ` comicfanzine
@ 2016-01-18 17:25 ` comicfanzine
  2016-01-18 17:49   ` J-P. Rosen
                     ` (2 more replies)
  2016-01-19 12:04 ` comicfanzine
  2016-01-20  1:12 ` comicfanzine
  8 siblings, 3 replies; 34+ messages in thread
From: comicfanzine @ 2016-01-18 17:25 UTC (permalink / raw)


>Store your strings in one of the containers from >the Ada.Containers library.

>-- Brian

Thanks anyway but , that isn't what i asked .

All that is must be done for now is :

Creating a array , which it size must be known according to the number of lines in the file .

There is a real issue , if this can't be done without your package .

Plus , here : https://en.wikibooks.org/wiki/Ada_Programming/Libraries/Ada.Containers

It Say : " This language feature is only available in Ada 2005 " .

Wich is not good for portability ( different environnement ( e.g compilor) ) .

In conclusion , i better use another way .

Feel free to propose anything else , if you have a idea .

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-18  9:50   ` AdaMagica
@ 2016-01-18 17:27     ` Björn Lundin
  0 siblings, 0 replies; 34+ messages in thread
From: Björn Lundin @ 2016-01-18 17:27 UTC (permalink / raw)


On 2016-01-18 10:50, AdaMagica wrote:
> 
> How about giving an upper bound of 1000 or 10_000 lines? This should be enough for most cases.

He did.

--
Björn

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-18  0:22 ` comicfanzine
  2016-01-18  9:50   ` AdaMagica
  2016-01-18 11:52   ` Brian Drummond
@ 2016-01-18 17:30   ` Björn Lundin
  2 siblings, 0 replies; 34+ messages in thread
From: Björn Lundin @ 2016-01-18 17:30 UTC (permalink / raw)


On 2016-01-18 01:22, comicfanzine@gmail.com wrote:
> Hi ,
> 
>  björn lundin .
> 
> First , I want to copy every line in a file , in a array of unbounded_Strings , to work on them later .

You do not show the work you do on the lines.
Are you sure you cannot do the work line by line
while you read the file ?
Else, as Brian said, use a container,
such as a list, and you need not to know how many lies on beforehand.



-- 
--
Björn


^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-18 17:25 ` comicfanzine
@ 2016-01-18 17:49   ` J-P. Rosen
  2016-01-18 18:37   ` Simon Wright
  2016-01-19 12:33   ` Brian Drummond
  2 siblings, 0 replies; 34+ messages in thread
From: J-P. Rosen @ 2016-01-18 17:49 UTC (permalink / raw)


Le 18/01/2016 18:25, comicfanzine@gmail.com a écrit :
> In conclusion , i better use another way .
> 
> Feel free to propose anything else , if you have a idea .
> 
You must realize that in most operating systems, a file has no notion of
"line". A file is a heap of bytes, some of which are conventionnally
used to represent line ends. As a consequence, there is no way of
knowing the number of lines in a file without reading the whole file.
This is an OS issue, not a programming language issue.

If you don't mind reading the file twice, you can first count lines by
calling Skip_Line (and counting) until you hit the end of file. Then you
can declare your array, call Reset to rewind the file, and process the
file as you want.

HTH

-- 
J-P. Rosen
Adalog
2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX
Tel: +33 1 45 29 21 52, Fax: +33 1 45 29 25 00
http://www.adalog.fr


^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-18 17:25 ` comicfanzine
  2016-01-18 17:49   ` J-P. Rosen
@ 2016-01-18 18:37   ` Simon Wright
  2016-01-19 12:33   ` Brian Drummond
  2 siblings, 0 replies; 34+ messages in thread
From: Simon Wright @ 2016-01-18 18:37 UTC (permalink / raw)


comicfanzine@gmail.com writes:

>>Store your strings in one of the containers from >the Ada.Containers library.
>
>>-- Brian
>
> Thanks anyway but , that isn't what i asked .
>
> All that is must be done for now is :
>
> Creating a array , which it size must be known according to the number
> of lines in the file .
>
> There is a real issue , if this can't be done without your package .

You may have asked about creating an array, but I very much doubt that's
your actual problem; I suspect it's your *solution*, and it's wrong.

> Plus , here :
> https://en.wikibooks.org/wiki/Ada_Programming/Libraries/Ada.Containers
>
> It Say : " This language feature is only available in Ada 2005 " .
>
> Wich is not good for portability ( different environnement ( e.g compilor) ) .

So which compiler do you propose to use? one that adheres to a
20-year-old version of the standard?

> In conclusion , i better use another way .

On your own, then.


^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-06 15:55 Re-write a file in Ada comicfanzine
                   ` (6 preceding siblings ...)
  2016-01-18 17:25 ` comicfanzine
@ 2016-01-19 12:04 ` comicfanzine
  2016-01-19 14:29   ` Anh Vo
  2016-01-19 16:53   ` Stephen Davies
  2016-01-20  1:12 ` comicfanzine
  8 siblings, 2 replies; 34+ messages in thread
From: comicfanzine @ 2016-01-19 12:04 UTC (permalink / raw)


It compile now .

At launching , there is empty lines in the test_file , instead of the this_file'lines .

Am i missing something ?

WITH Ada.Text_IO.Unbounded_IO ; USE Ada.Text_IO.Unbounded_IO ;
WITH Ada.Strings.Unbounded ;    USE Ada.Strings.Unbounded ;
WITH Ada.Text_IO  ;             USE Ada.Text_IO  ;

Procedure count_nb_lines is

  this_file , test_file : File_type ;

  count : integer := 0 ;

Begin

    Open
     (File => this_file ,
      Mode => In_file ,
      Name => "count_nb_lines.adb");

   loop exit when End_Of_File( this_file );
     skip_line( this_file );
     count := count + 1 ;
   end loop ;

   Open
     (File => test_file ,
      Mode => Out_file ,
      Name => "test.adb");

   declare

   Type Tableau_lines_file is array( 1 .. count) of Unbounded_String;

   case_array : Tableau_lines_file ;

   begin

    Loop exit when End_Of_File( this_file );
        for i in 1..count loop
         case_array(i) := get_line(this_file);
       end loop ;
   End loop;

    for j in 1..count loop
      put_line( test_file , case_array(j) );
   end loop;

    end;
End count_nb_lines ;


^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-18 15:05     ` gautier_niouzes
@ 2016-01-19 12:24       ` Brian Drummond
  2016-01-19 16:52         ` gautier_niouzes
  0 siblings, 1 reply; 34+ messages in thread
From: Brian Drummond @ 2016-01-19 12:24 UTC (permalink / raw)


On Mon, 18 Jan 2016 07:05:55 -0800, gautier_niouzes wrote:

> Le lundi 11 janvier 2016 18:18:48 UTC+1, Brian Drummond a écrit :
> 
>> > raised ADA.IO_EXCEPTIONS.END_ERROR : a-tigeli.adb:96
>> 
>> In outline, when you see this sort of error, find the installation's
>> "Ada include directory" which contains the named file...
>> 
>> locate a-tigeli.adb
>> /usr/lib/gcc/x86_64-linux-gnu/4.9/rts-native/adainclude/a-tigeli.adb
...
>> Looks like we ran out of file somehow. From here on it's usually
>> straightforward.
> 
> Sure - but all that investigation effort brings nothing: the exception's
> name gives already this hint: the end of a file was reached. The fact
> that it raised somewhere in the run-time library is obvious and brings
> zero information for finding the bug: no indication is given about where
> the exception occurred in the program. 

Yes, that is true for End_Error specifically, (assuming you have already 
learned what "End_Error" means. Which may not be obvious to a beginner) 

Other exceptions - Constraint_Error, Storage_Error and so on have a much 
wider range of causes, then this process can be more helpful. I could 
have been clearer that I wanted to make a wider point.

For example, tracing "Constraint_Error" that way, once landed me in the 
Ada.Command_Line package, which made it immediately obvious I wasn't 
trapping command lines with missing arguments.

> It's a shame that GNAT doesn't
> switch on its trace-back by default, IMHO. The current setup is
> disturbing for beginners and cumbersome for people using GNAT for larger
> programs.

Agreed. Traceback would be very helpful. Because I can never remember 
how, I'll outline it here, partly in the hope of memorising it. From

https://gcc.gnu.org/onlinedocs/gnat_ugn/Non-Symbolic-Traceback.html#Non-
Symbolic-Traceback

To enable this feature you must use the `-E' gnatbind's option. 
(And compile with -g for debug information)
gnatmake -g main.adb -bargs -E

A similar point has been made for the "Ada compliant" checking flags, and 
while Gnat has been improved in this area, I think you still need to add 
some flags, giving

gnatmake -g -gnataoE -fstack-check main.adb -bargs -E

-- Brian


^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-18 17:25 ` comicfanzine
  2016-01-18 17:49   ` J-P. Rosen
  2016-01-18 18:37   ` Simon Wright
@ 2016-01-19 12:33   ` Brian Drummond
  2016-01-19 14:40     ` Simon Wright
  2 siblings, 1 reply; 34+ messages in thread
From: Brian Drummond @ 2016-01-19 12:33 UTC (permalink / raw)


On Mon, 18 Jan 2016 09:25:45 -0800, comicfanzine wrote:

>>Store your strings in one of the containers from >the Ada.Containers
>>library.
> 
>>-- Brian
> 
> Thanks anyway but , that isn't what i asked .
...
> There is a real issue , if this can't be done without your package .
> 
> Plus , here :
> https://en.wikibooks.org/wiki/Ada_Programming/Libraries/Ada.Containers
> 
> It Say : " This language feature is only available in Ada 2005 " .

More accurately, this isn't a standard language feature prior to Ada-2005.

Container classes or something very like them were available earlier : 
you might take a look at the Booch Components (which are probably 
compatible with Ada-83) or even the Ada precursor to the C++ STL 
(Stepanov?).

If you must reinvent the wheel, that's OK, but you'll have to take care 
of low level details like initialising the line count correctly yourself.

-- Brian


^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-19 12:04 ` comicfanzine
@ 2016-01-19 14:29   ` Anh Vo
  2016-01-19 14:35     ` Simon Wright
  2016-01-19 16:53   ` Stephen Davies
  1 sibling, 1 reply; 34+ messages in thread
From: Anh Vo @ 2016-01-19 14:29 UTC (permalink / raw)


On Tuesday, January 19, 2016 at 4:04:22 AM UTC-8, comicf...@gmail.com wrote:
> It compile now .
> 
> At launching , there is empty lines in the test_file , instead of the this_file'lines .
> 
> Am i missing something ?
> 
> WITH Ada.Text_IO.Unbounded_IO ; USE Ada.Text_IO.Unbounded_IO ;
> WITH Ada.Strings.Unbounded ;    USE Ada.Strings.Unbounded ;
> WITH Ada.Text_IO  ;             USE Ada.Text_IO  ;
> 
>    loop exit when End_Of_File( this_file );
>      skip_line( this_file );
>      count := count + 1 ;
>    end loop ;

This loop can be simplified by replacing exit when by not.

>     Loop exit when End_Of_File( this_file );
>         for i in 1..count loop
>          case_array(i) := get_line(this_file);
>        end loop ;
>    End loop;

This loop can be simplified same as previous loop.

Anh Vo



^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-19 14:29   ` Anh Vo
@ 2016-01-19 14:35     ` Simon Wright
  2016-01-19 16:54       ` Jeffrey R. Carter
  0 siblings, 1 reply; 34+ messages in thread
From: Simon Wright @ 2016-01-19 14:35 UTC (permalink / raw)


Anh Vo <anhvofrcaus@gmail.com> writes:

>>    loop exit when End_Of_File( this_file );
>>      skip_line( this_file );
>>      count := count + 1 ;
>>    end loop ;
>
> This loop can be simplified by replacing exit when by not.

I think you must mean

   while not End_Of_File (This_File) loop

which isn't really much simpler than

   loop
      exit when End_Of_File (This_File);

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-19 12:33   ` Brian Drummond
@ 2016-01-19 14:40     ` Simon Wright
  2016-01-21 12:31       ` Brian Drummond
  0 siblings, 1 reply; 34+ messages in thread
From: Simon Wright @ 2016-01-19 14:40 UTC (permalink / raw)


Brian Drummond <brian@shapes.demon.co.uk> writes:

> you might take a look at the Booch Components (which are probably 
> compatible with Ada-83)

Is OP using Ada 83? if so, I retract some of my comments!

The Ada 95 BCs are definitely _not_ Ada 83 compliant!

The Ada 83 BCs are available at http://www.adapower.com/original_booch/


^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-19 12:24       ` Brian Drummond
@ 2016-01-19 16:52         ` gautier_niouzes
  2016-01-21 12:26           ` Brian Drummond
  0 siblings, 1 reply; 34+ messages in thread
From: gautier_niouzes @ 2016-01-19 16:52 UTC (permalink / raw)


On Tuesday, January 19, 2016 at 1:27:22 PM UTC+1, Brian Drummond wrote:

> Agreed. Traceback would be very helpful. Because I can never remember 
> how, I'll outline it here, partly in the hope of memorising it. From
> 
> https://gcc.gnu.org/onlinedocs/gnat_ugn/Non-Symbolic-Traceback.html#Non-
> Symbolic-Traceback

There is a way that doesn't need calling post-mortem addr2line: wrap your main procedure with the TB_Wrap generic procedure below, by instanciating the wrapper like this:
  with TB_Wrap, To_BMP;
  pragma Elaborate_All(TB_Wrap);
  procedure TB_To_BMP is new TB_Wrap(To_BMP);

_________________________ 
Gautier's Ada programming 
http://www.openhub.net/accounts/gautier_bd

-----------------------------------------------------------------------
--  File:            TB_Wrap.ads
--  Description:     Trace-back wrapper for GNAT 3.13p+ (spec.)
-----------------------------------------------------------------------

generic
  with procedure My_main_procedure;
procedure TB_Wrap;

---------------------------------------------------------------------------
--  File:            TB_Wrap.adb
--  Description:     Trace-back wrapper for GNAT 3.13p+ (body)
---------------------------------------------------------------------------

with GNAT.Traceback.Symbolic, Ada.Exceptions, Ada.Text_IO;
use Ada.Exceptions, Ada.Text_IO;

procedure TB_Wrap is
  --  pragma Compiler_options("-g");
  --  pragma Binder_options("-E");
begin
  My_main_procedure;
exception
  when E: others =>
    New_Line(Standard_Error);
    Put_Line(Standard_Error,
             "------------------[ Unhandled exception ]---------------");
    Put_Line(Standard_Error, " > Name of exception . . . . .: " &
             Ada.Exceptions.Exception_Name(E) );
    Put_Line(Standard_Error, " > Message for exception . . .: " &
             Ada.Exceptions.Exception_Message(E) );
    Put_Line(Standard_Error, " > Trace-back of call stack: " );
    Put_Line(Standard_Error, GNAT.Traceback.Symbolic.Symbolic_Traceback(E) );
end TB_Wrap;


^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-19 12:04 ` comicfanzine
  2016-01-19 14:29   ` Anh Vo
@ 2016-01-19 16:53   ` Stephen Davies
  1 sibling, 0 replies; 34+ messages in thread
From: Stephen Davies @ 2016-01-19 16:53 UTC (permalink / raw)


On Tuesday, 19 January 2016 12:04:22 UTC, comicf...@gmail.com  wrote:
> It compile now .
> 
> At launching , there is empty lines in the test_file , instead of the this_file'lines .
> 
> Am i missing something ?

A call to Ada.Text_IO.Reset


^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-19 14:35     ` Simon Wright
@ 2016-01-19 16:54       ` Jeffrey R. Carter
  2016-01-19 17:32         ` Anh Vo
  0 siblings, 1 reply; 34+ messages in thread
From: Jeffrey R. Carter @ 2016-01-19 16:54 UTC (permalink / raw)


On 01/19/2016 07:35 AM, Simon Wright wrote:
> 
> I think you must mean
> 
>    while not End_Of_File (This_File) loop
> 
> which isn't really much simpler than
> 
>    loop
>       exit when End_Of_File (This_File);

In fact, it's less simple, because it involves thinking about the continuation
condition and using negative logic. It's more natural to think about the exit
condition than the continuation condition, and positive logic is simpler than
negative.

At the Ada Launch on 1980 Dec 10, Ichbiah said that Ada had a while loop to
facilitate automatic translation from other languages, but new code should use exit.

-- 
Jeff Carter
"So if I understand 'The Matrix Reloaded' correctly, the Matrix is
basically a Microsoft operating system--it runs for a while and
then crashes and reboots. By design, no less. Neo is just a
memory leak that's too hard to fix, so they left him in ... The
users don't complain because they're packed in slush and kept
sedated."
Marin D. Condic
65

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-19 16:54       ` Jeffrey R. Carter
@ 2016-01-19 17:32         ` Anh Vo
  0 siblings, 0 replies; 34+ messages in thread
From: Anh Vo @ 2016-01-19 17:32 UTC (permalink / raw)


On Tuesday, January 19, 2016 at 8:54:41 AM UTC-8, Jeffrey R. Carter wrote:
> On 01/19/2016 07:35 AM, Simon Wright wrote:
> > 
> > I think you must mean
> > 
> >    while not End_Of_File (This_File) loop
> > 
> > which isn't really much simpler than
> > 
> >    loop
> >       exit when End_Of_File (This_File);
> 
> In fact, it's less simple, because it involves thinking about the continuation
> condition and using negative logic. It's more natural to think about the exit
> condition than the continuation condition, and positive logic is simpler than
> negative.
> 
> At the Ada Launch on 1980 Dec 10, Ichbiah said that Ada had a while loop to
> facilitate automatic translation from other languages, but new code should use exit.

After reading it a couple more times, the explicit exit statement is clearer. Thus, I would like to retract my suggestion.

Anh Vo

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-06 15:55 Re-write a file in Ada comicfanzine
                   ` (7 preceding siblings ...)
  2016-01-19 12:04 ` comicfanzine
@ 2016-01-20  1:12 ` comicfanzine
  8 siblings, 0 replies; 34+ messages in thread
From: comicfanzine @ 2016-01-20  1:12 UTC (permalink / raw)


Indeed , Reset was missing .

Thanks a lot everybody .

PS: I changed the compile command too .


^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-19 16:52         ` gautier_niouzes
@ 2016-01-21 12:26           ` Brian Drummond
  0 siblings, 0 replies; 34+ messages in thread
From: Brian Drummond @ 2016-01-21 12:26 UTC (permalink / raw)


On Tue, 19 Jan 2016 08:52:02 -0800, gautier_niouzes wrote:

> On Tuesday, January 19, 2016 at 1:27:22 PM UTC+1, Brian Drummond wrote:
> 
>> Agreed. Traceback would be very helpful. 

> There is a way that doesn't need calling post-mortem addr2line: wrap
> your main procedure with the TB_Wrap generic procedure below, by
> instanciating the wrapper like this:
>   with TB_Wrap, To_BMP;
>   pragma Elaborate_All(TB_Wrap);
>   procedure TB_To_BMP is new TB_Wrap(To_BMP);

Excellent! I'll play with this.

Ready access to this sort of resource would make a beginning Ada 
programmer's life much easier. 

I'm sure most Ada experts (i.e. folks with much more experience than I 
have) either have no need of it, or have already rolled their own 
solution, or use tools that do it automagically. I've seen something 
equivalent in Dmitry's Simple Components but I've never tried extracted 
it as a stand-alone solution.

So I've just used addr2line when I've needed to.

-- Brian


^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: Re-write a file in Ada
  2016-01-19 14:40     ` Simon Wright
@ 2016-01-21 12:31       ` Brian Drummond
  0 siblings, 0 replies; 34+ messages in thread
From: Brian Drummond @ 2016-01-21 12:31 UTC (permalink / raw)


On Tue, 19 Jan 2016 14:40:09 +0000, Simon Wright wrote:

> Brian Drummond <brian@shapes.demon.co.uk> writes:
> 
>> you might take a look at the Booch Components (which are probably
>> compatible with Ada-83)
> 
> Is OP using Ada 83? if so, I retract some of my comments!
> The Ada 83 BCs are available at http://www.adapower.com/original_booch/

I'm not clear which LRM revision he's targeting, I was just trying to 
widen the bases covered. Thanks for the original_booch link!

-- Brian

^ permalink raw reply	[flat|nested] 34+ messages in thread

end of thread, other threads:[~2016-01-21 12:31 UTC | newest]

Thread overview: 34+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-01-06 15:55 Re-write a file in Ada comicfanzine
2016-01-07 13:02 ` comicfanzine
2016-01-08 20:35 ` comicfanzine
2016-01-09  9:50   ` Brian Drummond
2016-01-08 21:22 ` Randy Brukardt
2016-01-08 22:08   ` Anh Vo
2016-01-10 16:54 ` comicfanzine
2016-01-10 18:59   ` Björn Lundin
2016-01-11 17:16   ` Brian Drummond
2016-01-18 15:05     ` gautier_niouzes
2016-01-19 12:24       ` Brian Drummond
2016-01-19 16:52         ` gautier_niouzes
2016-01-21 12:26           ` Brian Drummond
2016-01-10 22:57 ` comicfanzine
2016-01-11  1:59   ` Anh Vo
2016-01-11 10:09   ` Björn Lundin
2016-01-18  0:22 ` comicfanzine
2016-01-18  9:50   ` AdaMagica
2016-01-18 17:27     ` Björn Lundin
2016-01-18 11:52   ` Brian Drummond
2016-01-18 17:30   ` Björn Lundin
2016-01-18 17:25 ` comicfanzine
2016-01-18 17:49   ` J-P. Rosen
2016-01-18 18:37   ` Simon Wright
2016-01-19 12:33   ` Brian Drummond
2016-01-19 14:40     ` Simon Wright
2016-01-21 12:31       ` Brian Drummond
2016-01-19 12:04 ` comicfanzine
2016-01-19 14:29   ` Anh Vo
2016-01-19 14:35     ` Simon Wright
2016-01-19 16:54       ` Jeffrey R. Carter
2016-01-19 17:32         ` Anh Vo
2016-01-19 16:53   ` Stephen Davies
2016-01-20  1:12 ` comicfanzine

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox