(* 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]; ];