with Characters_and_Numbers; use Characters_and_Numbers; with Symbol_Table; use Symbol_Table; with Brackets; use Brackets; with Curves_into_Grassmannian; use Curves_into_Grassmannian; package body Curves_into_Grassmannian_io is procedure Set_up_Symbol_Table ( m,p,q : in natural; top,bottom : in Bracket; addmix : in natural ) is n : constant natural := Number_of_Variables(top,bottom) + 2 + addmix; rws : constant natural := (m+p)*(q+1); row,deg : natural; sb : Symbol; begin if not Symbol_Table.Empty then Symbol_Table.Clear; end if; Symbol_Table.Init(n); -- initialization with #variables sb := (sb'range => ' '); sb(1) := 'x'; sb(4) := 's'; for j in 1..p loop -- adding the rest columnwise row := 0; deg := 0; for i in 1..rws loop row := row + 1; if i >= top(j) and i <= bottom(j) then sb(2) := Convert_Hexadecimal(row); sb(3) := Convert_Hexadecimal(j); sb(5) := Convert_Hexadecimal(deg); Symbol_Table.Add(sb); end if; if i mod (m+p) = 0 then row := 0; deg := deg+1; end if; end loop; end loop; sb := (sb'range => ' '); sb(1) := 's'; if addmix = 0 then Symbol_Table.Add(sb); -- adding "s" else sb(2) := '1'; Symbol_Table.Add(sb); -- adding "s1" sb(2) := '2'; Symbol_Table.Add(sb); -- adding "s2" sb(2) := ' '; end if; sb(1) := 't'; Symbol_Table.Add(sb); -- adding "t" end Set_up_Symbol_Table; procedure One_Set_up_Symbol_Table ( m,p,q : in natural; top,bottom : in Bracket ) is begin Set_up_Symbol_Table(m,p,q,top,bottom,0); end One_Set_up_Symbol_Table; procedure Two_Set_up_Symbol_Table ( m,p,q : in natural; top,bottom : in Bracket ) is begin Set_up_Symbol_Table(m,p,q,top,bottom,1); end Two_Set_up_Symbol_Table; procedure Reduce_Symbols ( top,bottom : in Bracket; locmap : in Matrix ) is ind : natural := 0; begin for j in locmap'range(2) loop for i in top(j)..bottom(j) loop ind := ind+1; if locmap(i,j) = 1 then Symbol_Table.Remove(ind-j+1); end if; end loop; end loop; end Reduce_Symbols; end Curves_into_Grassmannian_io;