Added cddlib-094h from http://www.inf.ethz.ch/personal/fukudak/cdd_home/

Change-Id: I64519509269e434b1b9ea87c3fe0805e711c0ac9
diff --git a/third_party/cddlib/examples-ml/IOPolyhedra.m b/third_party/cddlib/examples-ml/IOPolyhedra.m
new file mode 100644
index 0000000..b5ed23f
--- /dev/null
+++ b/third_party/cddlib/examples-ml/IOPolyhedra.m
@@ -0,0 +1,123 @@
+(* IOPolyhedra.m: written by Komei Fukuda;  Version-980111  *)
+
+ReadPolyhedraData[filename_String]:=
+	Block[{rf,outlist={},row={},m,n,i,val,st=" ",ty},
+		rf=OpenRead[filename];
+		While[st=!=EndOfFile && st=!="begin",
+			st=Read[rf,String];
+		];
+		{m,n,ty}=Read[rf,{Number,Number,Word}];
+		st=Skip[rf,String];
+		Print["m=", m,",   n=",n, " type=", ty];
+		Do[
+		  If[ty!="rational", 
+		  	row=Read[rf,Table[Number,{n}]],
+		  	row=Read[rf,Table[Word,{n}]];row=ToExpression[row]
+		  ];
+		  AppendTo[outlist,row],
+		  {i,m}
+		];
+		Close[rf];
+		outlist
+	];
+
+
+ReadIncidenceData[filename_String]:=
+	Block[{rf,outlist={},row={},m,n,n1,i,val,st=" ",inc,colon},
+		rf=OpenRead[filename];
+		While[st=!=EndOfFile && st=!="begin",
+			st=Read[rf,String];
+		];
+		{m,n,n1}=Read[rf,{Number,Number,Number}];
+		Print["m=", m,",   n=",n];
+		Do[
+			{inc}=Read[rf,{Number}];
+			colon=Read[rf,{Word}];
+			row=Read[rf,Table[Number,{Abs[inc]}]];
+		  	If[inc>0,
+		  		AppendTo[outlist,row],
+		  		AppendTo[outlist,Complement[Range[n1],row]]
+		  	],
+		  	{i,m}
+		];
+		Close[rf];
+		outlist
+	];
+
+
+ReadAdjacencyData[filename_String]:=
+	Block[{rf,outlist={},row={},v,num,i,val,st=" ",deg,colon},
+		rf=OpenRead[filename];
+		While[st=!=EndOfFile && st=!="begin",
+			st=Read[rf,String];
+		];
+		{v}=Read[rf,{Number}];
+		Print["v =", v];
+		Do[
+			{num, deg}=Read[rf,{Number, Number}];
+			colon=Read[rf,{Word}];
+			If[deg >0, row=Read[rf,Table[Number,{deg}]], row={}];
+		  	AppendTo[outlist,row],
+		  	{i,v}
+		];
+		Close[rf];
+		outlist
+	];
+
+
+WritePolyhedraIne[a_List,b_List,filename_String,type_String:"real"]:=
+	Block[{wf,m,n,i,j,str},
+		wf=OpenWrite[filename];
+		{m,n}=Dimensions[a];
+		Write[wf,OutputForm["H-representation"]];
+		Write[wf,OutputForm["begin"]];
+		Write[wf,m,OutputForm["  "],n+1,OutputForm["  "],OutputForm[type]];
+		Do[
+			str="";
+			Do[
+				If[j==0,
+					str=StringJoin[str,"  ",ToString[b[[i]]]],
+					str=StringJoin[str,"  ",ToString[-a[[i,j]],FormatType->InputForm]]
+				],
+		  	{j,0,n}
+		  ];
+		  Write[wf,OutputForm[str]],
+		  {i,m}
+		];
+		Write[wf,OutputForm["end"]];
+		Write[wf,OutputForm["incidence"]];
+		Write[wf,OutputForm["input_incidence"]];
+		Write[wf,OutputForm["input_adjacency"]];
+		Write[wf,OutputForm["adjacency"]];
+		Close[wf];
+	];
+
+VEtoIne[a_List,b_List,filename_String]:=WritePolyhedraIne[a,b,filename];
+
+WritePolyhedraExt[a_List,filename_String,type_String:"real"]:=
+	Block[{wf,m,n,i,j,str},
+		wf=OpenWrite[filename];
+		{m,n}=Dimensions[a];
+		Write[wf,OutputForm["V-representation"]];
+		Write[wf,OutputForm["begin"]];
+		Write[wf,m,OutputForm["  "],n+1,OutputForm["  "],OutputForm[type]];
+		Do[
+			str="";
+			Do[
+				If[j==0,
+					str=StringJoin[str,"  ",ToString[1]],
+					str=StringJoin[str,"  ",ToString[a[[i,j]],FormatType->InputForm]]
+				],
+		  	{j,0,n}
+		  ];
+		  Write[wf,OutputForm[str]],
+		  {i,m}
+		];
+		Write[wf,OutputForm["end"]];
+		Write[wf,OutputForm["hull"]];
+		Write[wf,OutputForm["incidence"]];
+		Write[wf,OutputForm["input_incidence"]];
+		Write[wf,OutputForm["input_adjacency"]];
+		Write[wf,OutputForm["adjacency"]];
+		Close[wf];
+	];