From: Shark8 <onewingedshark@gmail.com>
Subject: Re: S-expression I/O in Ada
Date: Thu, 12 Aug 2010 16:26:32 -0700 (PDT)
Date: 2010-08-12T16:26:32-07:00 [thread overview]
Message-ID: <203526c0-f031-4dfe-b3e0-cd5156de14b8@z28g2000yqh.googlegroups.com> (raw)
In-Reply-To: 547afa6b-731e-475f-a7f2-eaefefb25861@k8g2000prh.googlegroups.com
Natacha,
I took a bit of a stab at writing an SExpression handler, note that
it's not a parser [text-file -> SExpression] but rather what (I think)
you were terming in-memory. It has stream-support so you can directly
save/load an SExpression's structure & contents and it should be easy
to make it "parenthesis preservative" in the parser if you so desire.
I [semi-]plan on making a child-package for the parser "package
SExpression.Text" or somesuch for storing/loading the SExpressions
from text [that is, parsing them].
---------------------------------------------
-- SExpression.ads
---------------------------------------------
With
Ada.Streams,
Ada.Streams.Stream_IO;
Package SExpression is
Type Byte is mod 2**8;
For Byte'Size use 8;
Type Binary_Data_Type is Array( Positive Range <> ) Of Byte;
Pragma Pack(Binary_Data_Type);
Type Node_Data_Type is ( Binary_Data, String_Data, Number_Data );
Type Node_Type( Data_Type : Node_Data_Type ) is private;
Procedure Create( Node: out Node_Type; Data: in
String );
Procedure Create( Node: out Node_Type; Data: in
Binary_Data_Type );
Procedure Create( Node: out Node_Type; Data: in
Long_Integer );
Type List_Type;
Type SExpression_Type(List_Size : Natural) is private;
Function Is_List ( SExp : in SExpression_Type) Return Boolean;
Function Create ( Node : Node_Type ) Return SExpression_Type;
Procedure Append ( SExp : in out SExpression_Type; Node :
Node_Type );
Procedure Append ( Front: in out SExpression_Type;
Back : in SExpression_Type );
Procedure Prepend( SExp : in out SExpression_Type; Node :
Node_Type );
Procedure Prepend( Front: in SExpression_Type;
Back : in out SExpression_Type );
Type List_Type is Array(Positive Range <>) of
Not Null Access SExpression_Type;
Procedure Create( SExp : out SExpression_Type; List : in
List_Type );
Package Stream is
Use Ada.Streams;
Procedure Write_Bin ( Stream: Not Null Access
Root_Stream_Type'Class;
Item : in Binary_Data_Type );
Procedure Read_Bin ( Stream: Not Null Access
Root_Stream_Type'Class;
Item : out Binary_Data_Type );
Procedure Write_Node( Stream: Not Null Access
Root_Stream_Type'Class;
Item : in Node_Type );
Procedure Read_Node ( Stream: Not Null Access
Root_Stream_Type'Class;
Item : out Node_Type );
Procedure Write_Sexp( Stream: Not Null Access
Root_Stream_Type'Class;
Item : in SExpression_Type );
Procedure Read_SExp ( Stream: Not Null Access
Root_Stream_Type'Class;
Item : out SExpression_Type );
Procedure Write_List( Stream: Not Null Access
Root_Stream_Type'Class;
Item : in List_Type );
Procedure Read_List ( Stream: Not Null Access
Root_Stream_Type'Class;
Item : out List_Type );
end Stream;
private
Type Node_Type( Data_Type : Node_Data_Type ) is Record
case Data_Type is
when Binary_Data => B : Access Binary_Data_Type;
when String_Data => S : Access String;
when Number_Data => N : Long_Integer;
end case;
end record;
For Node_Type'Write use Stream.Write_Node;
For Node_Type'Read use Stream.Read_Node;
Type SExpression_Type(List_Size : Natural) is Record
case List_Size is
when 0 => Data: Not Null Access Node_Type;
when others => List: List_Type(1..List_Size);
end case;
end record;
For SExpression_Type'Read use Stream.Read_SExp;
For SExpression_Type'Write use Stream.Write_SExp;
For List_Type'Read use Stream.Read_List;
For List_Type'Write use Stream.Write_List;
For Binary_Data_Type'Read use Stream.Read_Bin;
For Binary_Data_Type'Write use Stream.Write_Bin;
end SExpression;
---------------------------------------------
-- SExpression.adb
---------------------------------------------
Package body SExpression is
-- Internal Node-Creation Functions.
Function Make_Node( Data: String ) Return Node_Type is
begin
Return Result: Node_Type( Data_Type => String_Data ) do
Result.S:= New String'(Data);
end Return;
end Make_Node;
Function Make_Node( Data: Binary_Data_Type ) Return Node_Type is
begin
Return Result: Node_Type( Data_Type => Binary_Data ) do
Result.B:= New Binary_Data_Type'(Data);
end Return;
end Make_Node;
Function Make_Node( Data: Long_Integer ) Return Node_Type is
begin
Return Result: Node_Type( Data_Type => Number_Data ) do
Result.N:= Data;
end Return;
end Make_Node;
-- Public Node-Creation Procedures {wraps node-creation functions}
Procedure Create ( Node: out Node_Type; Data: in String ) is
begin
Node:= Make_Node(Data);
end Create;
Procedure Create ( Node: out Node_Type; Data: in Binary_Data_Type )
is
begin
Node:= Make_Node( Data );
end Create;
Procedure Create ( Node: out Node_Type; Data: in Long_Integer ) is
begin
Node:= Make_Node(Data);
end Create;
Pragma Inline( Create );
Function Is_List(SExp : in SExpression_Type) Return Boolean is
begin
Return SExp.List_Size > 0;
end Is_List;
Pragma Inline(Is_List);
Function Create( List : in List_Type ) Return SExpression_Type is
begin
Return Result: SExpression_Type( List_Size => List'Length ) do
Result.List:= List;
end return;
end Create;
Procedure Create( SExp : out SExpression_Type; List : in
List_Type ) is
begin
SExp:= Create( List );
end Create;
Function Create( Node : Node_Type ) Return SExpression_Type is
begin
Return Result : SExpression_Type( List_Size => 0 ) do
Result.Data:= New Node_Type'( Node );
end return;
end Create;
Procedure Append ( SExp : in out SExpression_Type; Node :
Node_Type ) is
begin
if Is_List(SExp) then
SExp:= Create( Sexp.List & New
SExpression_Type'(Create(Node)) );
else
SExp:= Create( New
SExpression_Type'(Create(SExp.Data.All))
& New SExpression_Type'(Create(Node))
);
end if;
end Append;
Procedure Prepend( SExp : in out SExpression_Type; Node :
Node_Type ) is
begin
if Is_List(SExp) then
SExp:= Create( New SExpression_Type'(Create(Node)) &
Sexp.List);
else
SExp:= Create( New SExpression_Type'(Create(Node))
& New SExpression_Type'(Create(SExp.Data.All))
);
end if;
end Prepend;
Procedure Append ( Front: in out SExpression_Type;
Back : in SExpression_Type ) is
begin
if Is_List(Back) then
Front:= Create( Front.List & Back.List);
else
Append( SExp => Front, Node => Back.Data.All );
end if;
end Append;
Procedure Prepend( Front: in SExpression_Type;
Back : in out SExpression_Type ) is
begin
if Is_List(Front) then
Back:= Create( Front.List & Back.List);
else
Prepend( SExp => Back, Node => Front.Data.All );
end if;
end Prepend;
package body Stream is
Procedure Write_Bin ( Stream: Not Null Access
Root_Stream_Type'Class;
Item : in Binary_Data_Type ) is
begin
Positive'Write( Stream, Item'Length );
For Index in Item'Range loop
Byte'Write( Stream, Item(Index) );
end loop;
end Write_Bin;
Procedure Read_Bin ( Stream: Not Null Access
Root_Stream_Type'Class;
Item : out Binary_Data_Type ) is
Function Get_Elements( Length: Positive ) Return
Binary_Data_Type is
begin
Return Result: Binary_Data_Type(1..Length) do
For Index in Result'Range loop
Byte'Read( Stream, Result(Index) );
end loop;
end Return;
end Get_Elements;
Length: Positive;
begin
Positive'Read( Stream, Length );
Item:= Get_Elements( Length );
end Read_Bin;
Procedure Write_Node( Stream: Not Null Access
Root_Stream_Type'Class;
Item : in Node_Type ) is
begin
Node_Data_Type'Write( Stream, Item.Data_Type );
Case Item.Data_Type is
When Binary_Data => Binary_Data_Type'Write( Stream,
Item.B.All );
When String_Data => String'Write( Stream, Item.S.All );
When Number_Data => Long_Integer'Write( Stream, Item.N );
end Case;
end Write_Node;
Procedure Read_Node ( Stream: Not Null Access
Root_Stream_Type'Class;
Item : out Node_Type ) is
Data_Type : Node_Data_Type;
begin
Node_Data_Type'Read( Stream, Data_Type );
Case Data_Type is
When Binary_Data =>
Item.B:= New Binary_Data_Type'( 1..0 => <> );
Declare
Binary_Temp : Access Binary_Data_Type:=
New Binary_Data_Type'( 1..0 => 16#FF# );
Begin
Binary_Data_Type'Read( Stream, Binary_Temp.All );
Item:= Make_Node( Data => Binary_Temp.All );
End;
When String_Data =>
declare
String_Temp : Access String:= New String'("");
begin
String'Read( Stream, String_Temp.All);
Item:= Make_Node( Data => String_Temp.All );
end;
When Number_Data =>
declare
Temp : Long_Integer;
begin
Long_Integer'Read( Stream, Temp );
Item:= Make_Node( Temp );
end;
end Case;
end Read_Node;
Procedure Write_SExp( Stream: Not Null Access
Root_Stream_Type'Class;
Item : in SExpression_Type ) is
begin
Natural'Write( Stream, Item.List_Size );
if Item.List_Size = 0 then
Node_Type'Write( Stream, Item.Data.All );
else
List_Type'Write( Stream, Item.List );
end if;
end Write_SExp;
Procedure Read_SExp ( Stream: Not Null Access
Root_Stream_Type'Class;
Item : out SExpression_Type ) is
List_Size : Natural;
begin
Natural'Read( Stream, List_Size );
if List_Size = 0 then
Declare
Temp : Access Node_Type:= New
Node_Type'( Make_Node(0) );
Begin
Node_Type'Read( Stream, Temp.All );
Item:= Create( Temp.All );
End;
else
Declare
Dummy: Aliased SExpression_Type:=
Create(Make_Node(0));
Temp : List_Type:= (1..List_Size =>
Dummy'Unchecked_Access );
Begin
List_Type'Read( Stream, Temp );
Item:= Create( Temp );
End;
end if;
end Read_SExp;
Procedure Write_List( Stream: Not Null Access
Root_Stream_Type'Class;
Item : in List_Type ) is
begin
Positive'Write(Stream, Item'Length);
For Index in Item'Range loop
SExpression_Type'Write( Stream, Item(Index).All );
end loop;
end Write_List;
Procedure Read_List ( Stream: Not Null Access
Root_Stream_Type'Class;
Item : out List_Type ) is
Function Get_Elements( Length: Positive ) Return List_Type is
Working : Access SExpression_Type;
begin
Working:= New SExpression_Type'( Create(Make_Node(0)) );
Return Result: List_Type(1..Length) do
For Index in Result'Range loop
SExpression_Type'Read( Stream, Working.All );
Result(Index):= New
SExpression_Type'( Working.All );
end loop;
end Return;
end Get_Elements;
Length : Positive;
begin
Positive'Read(Stream, Length);
Item:= Get_Elements( Length );
end Read_List;
end Stream;
end SExpression;
next prev parent reply other threads:[~2010-08-12 23:26 UTC|newest]
Thread overview: 252+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-01 12:17 S-expression I/O in Ada Natacha Kerensikova
2010-08-01 12:53 ` Dmitry A. Kazakov
2010-08-01 17:35 ` Natacha Kerensikova
2010-08-01 18:49 ` Dmitry A. Kazakov
2010-08-01 20:06 ` Natacha Kerensikova
2010-08-01 21:13 ` Dmitry A. Kazakov
2010-08-02 7:17 ` Georg Bauhaus
2010-08-02 7:58 ` Dmitry A. Kazakov
2010-08-07 7:23 ` Natacha Kerensikova
2010-08-07 8:39 ` Dmitry A. Kazakov
2010-08-07 12:56 ` Natacha Kerensikova
2010-08-07 14:23 ` Dmitry A. Kazakov
2010-08-08 12:23 ` Natacha Kerensikova
2010-08-08 13:01 ` Dmitry A. Kazakov
2010-08-08 13:49 ` Natacha Kerensikova
2010-08-08 15:15 ` Dmitry A. Kazakov
2010-08-09 9:55 ` Natacha Kerensikova
2010-08-09 10:56 ` Dmitry A. Kazakov
2010-08-10 8:56 ` Natacha Kerensikova
2010-08-10 10:17 ` Georg Bauhaus
2010-08-10 10:36 ` Dmitry A. Kazakov
2010-08-10 12:06 ` Natacha Kerensikova
2010-08-10 15:46 ` Dmitry A. Kazakov
2010-08-10 21:22 ` Simon Wright
2010-08-11 7:37 ` Dmitry A. Kazakov
2010-08-11 17:32 ` Simon Wright
2010-08-11 17:53 ` Dmitry A. Kazakov
2010-08-11 9:43 ` Natacha Kerensikova
2010-08-11 10:37 ` Dmitry A. Kazakov
2010-08-11 11:38 ` Natacha Kerensikova
2010-08-11 12:58 ` Robert A Duff
2010-08-11 15:30 ` Natacha Kerensikova
2010-08-11 23:39 ` Randy Brukardt
2010-08-12 1:31 ` Robert A Duff
2010-08-12 8:53 ` Natacha Porté
2010-08-12 9:22 ` Georg Bauhaus
2010-08-13 9:43 ` Natacha Kerensikova
2010-08-10 21:56 ` Randy Brukardt
2010-08-09 15:40 ` Simon Wright
2010-08-09 16:35 ` Robert A Duff
2010-08-10 0:51 ` Randy Brukardt
2010-08-10 1:00 ` Jeffrey Carter
2010-08-10 21:36 ` Randy Brukardt
2010-08-10 22:24 ` Jeffrey Carter
2010-08-10 12:50 ` Robert A Duff
2010-08-10 22:06 ` Randy Brukardt
2010-08-09 18:37 ` Natacha Kerensikova
2010-08-09 19:10 ` Robert A Duff
2010-08-08 14:08 ` Duke Normandin
2010-08-08 15:34 ` Robert A Duff
2010-08-08 18:24 ` Dmitry A. Kazakov
2010-08-08 20:03 ` Robert A Duff
2010-08-08 20:39 ` Dmitry A. Kazakov
2010-08-08 21:08 ` Robert A Duff
2010-08-09 6:50 ` Dmitry A. Kazakov
2010-08-09 13:48 ` Robert A Duff
2010-08-09 14:38 ` Dmitry A. Kazakov
2010-08-09 15:14 ` Georg Bauhaus
2010-08-09 16:11 ` Dmitry A. Kazakov
2010-08-09 16:46 ` Georg Bauhaus
2010-08-09 17:05 ` Robert A Duff
2010-08-09 18:29 ` Georg Bauhaus
2010-08-09 19:18 ` Robert A Duff
2010-08-10 8:21 ` Georg Bauhaus
2010-08-09 20:40 ` Dmitry A. Kazakov
2010-08-09 22:21 ` Georg Bauhaus
2010-08-10 7:07 ` Dmitry A. Kazakov
2010-08-09 16:47 ` Robert A Duff
2010-08-09 19:59 ` Dmitry A. Kazakov
2010-08-09 21:34 ` Robert A Duff
2010-08-09 22:29 ` Jeffrey Carter
2010-08-10 7:48 ` Dmitry A. Kazakov
2010-08-09 21:54 ` _FrnchFrgg_
2010-08-09 22:32 ` Georg Bauhaus
2010-08-10 7:16 ` Dmitry A. Kazakov
2010-08-10 11:06 ` _FrnchFrgg_
2010-08-10 11:19 ` Dmitry A. Kazakov
2010-08-10 23:04 ` _FrnchFrgg_
2010-08-11 14:10 ` Dmitry A. Kazakov
2010-08-11 17:51 ` Structural unification (pattern matching) in Ada [was: Re: S-expression I/O in Ada] _FrnchFrgg_
2010-08-11 18:06 ` Dmitry A. Kazakov
2010-08-11 19:43 ` Robert A Duff
2010-08-11 20:26 ` (see below)
2010-08-11 21:21 ` Structural unification (pattern matching) in Ada Simon Wright
2010-08-12 12:43 ` Structural unification (pattern matching) in Ada [was: Re: S-expression I/O in Ada] _FrnchFrgg_
2010-08-10 1:06 ` S-expression I/O in Ada Randy Brukardt
2010-08-09 16:50 ` Robert A Duff
2010-08-09 18:32 ` Natacha Kerensikova
2010-08-09 19:06 ` Jeffrey Carter
2010-08-09 19:24 ` Robert A Duff
2010-08-09 19:35 ` (see below)
2010-08-09 17:00 ` Robert A Duff
2010-08-09 20:27 ` Dmitry A. Kazakov
2010-08-09 21:30 ` Robert A Duff
2010-08-10 1:17 ` Randy Brukardt
2010-08-10 6:48 ` Dmitry A. Kazakov
2010-08-10 21:42 ` Randy Brukardt
2010-08-11 8:02 ` Dmitry A. Kazakov
2010-08-11 23:18 ` Randy Brukardt
2010-08-12 6:20 ` Dmitry A. Kazakov
2010-08-12 20:56 ` Randy Brukardt
2010-08-13 6:56 ` Dmitry A. Kazakov
2010-08-14 0:52 ` Randy Brukardt
2010-08-09 18:55 ` Jeffrey Carter
2010-08-09 18:20 ` Natacha Kerensikova
2010-08-09 19:19 ` Robert A Duff
2010-08-07 15:38 ` Jeffrey Carter
2010-08-07 17:01 ` Natacha Kerensikova
2010-08-08 6:52 ` Jeffrey Carter
2010-08-08 13:11 ` Natacha Kerensikova
2010-08-08 15:24 ` Robert A Duff
2010-08-09 18:00 ` Natacha Kerensikova
2010-08-09 18:09 ` Robert A Duff
2010-08-08 20:34 ` Jeffrey Carter
2010-08-09 18:10 ` Natacha Kerensikova
2010-08-08 10:26 ` Simon Wright
2010-08-08 11:44 ` Dmitry A. Kazakov
2010-08-08 11:48 ` Dmitry A. Kazakov
2010-08-08 14:05 ` Natacha Kerensikova
2010-08-08 20:11 ` Jeffrey Carter
2010-08-14 1:02 ` Yannick Duchêne (Hibou57)
2010-08-14 9:53 ` Georg Bauhaus
2010-08-14 11:32 ` Natacha Kerensikova
2010-08-01 22:03 ` Simon Wright
2010-08-02 17:08 ` Pascal Obry
2010-08-02 19:08 ` Simon Wright
2010-08-01 16:01 ` Ludovic Brenta
2010-08-09 18:49 ` Ludovic Brenta
2010-08-09 19:59 ` Natacha Kerensikova
2010-08-10 0:11 ` Ludovic Brenta
2010-08-10 0:57 ` Jeffrey Carter
2010-08-10 6:47 ` Natacha Kerensikova
2010-08-10 18:13 ` Jeffrey Carter
2010-08-12 9:26 ` Natacha Kerensikova
2010-08-12 10:55 ` Ludovic Brenta
2010-08-12 12:16 ` Natacha Kerensikova
2010-08-12 12:46 ` Ludovic Brenta
2010-08-12 13:23 ` Natacha Kerensikova
2010-08-12 16:19 ` Ludovic Brenta
2010-08-12 17:17 ` Natacha Kerensikova
2010-08-12 18:51 ` Jeffrey Carter
2010-08-13 9:32 ` Natacha Kerensikova
2010-08-13 15:52 ` Ludovic Brenta
2010-08-13 22:53 ` Jeffrey R. Carter
2010-08-14 11:10 ` Natacha Kerensikova
2010-08-10 15:48 ` Ludovic Brenta
2010-08-10 15:59 ` Georg Bauhaus
2010-08-12 7:53 ` Ludovic Brenta
2010-08-12 18:55 ` Jeffrey Carter
2010-08-12 19:59 ` Ludovic Brenta
2010-08-12 20:23 ` Natacha Kerensikova
2010-08-12 20:45 ` Ludovic Brenta
2010-08-13 8:24 ` Natacha Kerensikova
2010-08-13 9:08 ` Ludovic Brenta
2010-08-14 10:27 ` Natacha Kerensikova
2010-08-14 11:11 ` Ludovic Brenta
2010-08-14 12:17 ` Natasha Kerensikova
2010-08-14 13:13 ` Ludovic Brenta
2010-08-14 13:33 ` Yannick Duchêne (Hibou57)
2010-08-12 22:25 ` Jeffrey R. Carter
2010-08-13 9:10 ` Natacha Kerensikova
2010-08-13 9:51 ` Dmitry A. Kazakov
2010-08-14 10:36 ` Natacha Kerensikova
2010-08-14 10:57 ` Dmitry A. Kazakov
2010-08-13 19:23 ` Jeffrey Carter
2010-08-13 19:42 ` Dmitry A. Kazakov
2010-08-13 20:44 ` Yannick Duchêne (Hibou57)
2010-08-14 0:57 ` Randy Brukardt
2010-08-14 10:47 ` Natacha Kerensikova
2010-08-13 19:36 ` Simon Wright
2010-08-12 20:11 ` Natacha Kerensikova
2010-08-12 20:22 ` Ludovic Brenta
2010-08-01 18:25 ` Jeffrey Carter
2010-08-01 19:43 ` Natacha Kerensikova
2010-08-01 19:53 ` Ludovic Brenta
2010-08-01 20:00 ` Dmitry A. Kazakov
2010-08-01 20:03 ` Jeffrey Carter
2010-08-01 20:34 ` Georg Bauhaus
2010-08-01 20:44 ` Georg Bauhaus
2010-08-01 21:01 ` anon
2010-08-12 23:26 ` Shark8 [this message]
2010-08-13 2:31 ` Shark8
2010-08-13 8:56 ` Natacha Kerensikova
2010-08-13 10:30 ` Georg Bauhaus
2010-08-13 15:58 ` Shark8
2010-08-13 21:48 ` Shark8
2010-08-14 11:02 ` Natacha Kerensikova
2010-08-17 17:01 ` Natasha Kerensikova
2010-08-17 19:00 ` Jeffrey Carter
2010-08-18 10:49 ` Natasha Kerensikova
2010-08-18 11:14 ` Ludovic Brenta
2010-08-18 11:59 ` Natasha Kerensikova
2010-08-18 12:31 ` Ludovic Brenta
2010-08-18 13:16 ` J-P. Rosen
2010-08-18 13:55 ` Natasha Kerensikova
2010-08-18 14:40 ` J-P. Rosen
2010-08-20 20:50 ` Yannick Duchêne (Hibou57)
2010-08-18 15:07 ` Ludovic Brenta
2010-08-19 7:42 ` Natasha Kerensikova
2010-08-18 12:51 ` Georg Bauhaus
2010-08-18 13:24 ` Natasha Kerensikova
2010-08-18 14:40 ` Georg Bauhaus
2010-08-18 23:50 ` Randy Brukardt
2010-08-18 11:22 ` Georg Bauhaus
2010-08-18 12:02 ` Natasha Kerensikova
2010-08-20 21:04 ` Yannick Duchêne (Hibou57)
2010-08-22 10:21 ` Natasha Kerensikova
2010-08-22 10:28 ` Simon Wright
2010-08-22 17:13 ` Jeffrey Carter
2010-08-22 14:06 ` Dmitry A. Kazakov
2010-08-21 19:36 ` Yannick Duchêne (Hibou57)
2010-08-18 18:08 ` Jeffrey Carter
2010-08-19 8:09 ` Natasha Kerensikova
2010-08-19 10:16 ` Natasha Kerensikova
2010-08-19 10:42 ` Dmitry A. Kazakov
2010-08-22 10:24 ` Natasha Kerensikova
2010-08-22 14:10 ` Dmitry A. Kazakov
2010-08-19 18:07 ` Jeffrey Carter
2010-08-22 10:43 ` Natasha Kerensikova
2010-08-22 17:17 ` Jeffrey Carter
2010-08-19 17:59 ` Jeffrey Carter
2010-08-22 10:45 ` Natasha Kerensikova
2010-08-22 17:20 ` Jeffrey Carter
2010-08-24 11:41 ` Natasha Kerensikova
2010-08-25 1:56 ` Jeffrey Carter
2010-08-25 12:18 ` Natasha Kerensikova
2010-08-25 14:07 ` Jeffrey Carter
2010-08-25 8:06 ` Georg Bauhaus
2010-08-25 13:27 ` Natasha Kerensikova
2010-08-25 18:55 ` Simon Wright
2010-08-25 19:19 ` Georg Bauhaus
2010-08-25 19:23 ` Georg Bauhaus
2010-08-25 22:38 ` Simon Wright
2010-08-25 23:55 ` Georg Bauhaus
2010-08-27 13:19 ` Natasha Kerensikova
2010-08-27 14:57 ` Georg Bauhaus
2010-08-29 10:45 ` Natasha Kerensikova
2010-08-29 13:10 ` Simon Wright
2010-08-29 14:21 ` Natasha Kerensikova
2010-08-29 14:30 ` Niklas Holsti
2010-08-29 13:23 ` Robert A Duff
2010-08-29 13:57 ` Jeffrey Carter
2010-08-29 14:18 ` Britt Snodgrass
2010-08-29 14:29 ` Natasha Kerensikova
2010-08-29 15:12 ` Robert A Duff
2010-09-03 21:52 ` Randy Brukardt
2010-08-29 13:56 ` Jeffrey Carter
2010-08-29 14:34 ` Natasha Kerensikova
2010-08-29 14:55 ` Dmitry A. Kazakov
2010-08-29 15:25 ` Robert A Duff
2010-08-29 18:50 ` Georg Bauhaus
2010-08-29 21:43 ` Simon Wright
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox