1-- io.cpkg : 0.1 : Input/Output package
2--------------------------------------------------------------
3
4Package $io
5
6Export format;
7Export SprintTrunc;
8
9--------------------------------------------------------------
10
11Define Print_Aliases(L)
12  -- L := Untagged(L);
13  If L=[] Then Return; EndIf;
14  S := max([len(X[1])|X In L]);
15  Foreach X In L Do
16    PrintLn;
17    Sp := spaces(S-len(X[1]));
18    Print X[1],Sp," = ",X[2];
19  EndForeach;
20EndDefine;
21
22-- Define Cterm(O)
23--   D := $.OpenOStringCterm("");
24--   Print O On D;
25--   S := Cast(D,STRING);
26--   Close(D);
27--   Return S;
28-- EndDefine;
29
30
31define SprintTrunc(obj,trunc)
32  S := sprint(obj);
33  if len(S) > trunc then  return sum([S[i] | i in 1..trunc])+"...";
34  else  return S;
35  endif;
36enddefine; -- SprintTrunc
37
38
39Define format(O,L) Return $.FormatString(sprint(O),L); EndDefine;
40
41Define FormatString(S,L)
42  If L-len(S) >= 0 Then Return spaces(L-len(S)) + S; Else Return S; EndIf;
43EndDefine; -- FormatString
44
45
46
47Define Print_Table(Headings, Spaces, Rows) -- TODO: Check
48-- Rows is a list of Rows
49-- Each row is a list of integers
50  If len(Spaces) < len(Headings) Then
51    Spaces := Spaces + NewList(len(Headings)-len(Spaces),0);
52  EndIf;
53  Spaces := [ max(Spaces[I], len(Headings[I])) | I In 1..len(Headings) ];
54  Dashes := sum(NewList(sum(Spaces)+len(Spaces)-1,"-"));
55  PrintLn Dashes;
56  For C := 1 To len(Headings) Do
57    Print spaces(max(Spaces[C]-len(Headings[C]),0));
58    Print Headings[C]," ";
59  EndFor;
60  PrintLn;
61  PrintLn Dashes;
62  For R := 1 To NumCols(Rows) Do
63    For C := 1 To len(Spaces) Do
64      Print $.format(sprint(Rows[R,C]),Spaces[C])," ";
65    EndFor;
66    PrintLn;
67  EndFor;
68  PrintLn Dashes;
69EndDefine;
70
71//Define Tagged(O,T) Return Tagged(O,"a"+"."+T); EndDefine;
72
73-- Define Print_Matrix(M)
74--   N := NumRows(M);
75--   $.Print_Table(NewList(N,""), NewList(N,4), M);
76-- EndDefine;
77
78EndPackage; -- Package
79
80