aboutsummaryrefslogtreecommitdiff
path: root/src/interp/bc-util.boot
blob: 211f7cf027667bccf6db3d3675f0126e3d49acad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
-- Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
-- All rights reserved.
--
-- Redistribution and use in source and binary forms, with or without
-- modification, are permitted provided that the following conditions are
-- met:
--
--     - Redistributions of source code must retain the above copyright
--       notice, this list of conditions and the following disclaimer.
--
--     - Redistributions in binary form must reproduce the above copyright
--       notice, this list of conditions and the following disclaimer in
--       the documentation and/or other materials provided with the
--       distribution.
--
--     - Neither the name of The Numerical ALgorithms Group Ltd. nor the
--       names of its contributors may be used to endorse or promote products
--       derived from this software without specific prior written permission.
--
-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
-- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


bcFinish(name,arg,:args) == bcGen bcMkFunction(name,arg,args)

bcMkFunction(name,arg,args) ==
  args := [x for x in args | x]
  STRCONC(name,'"(",arg,"STRCONC"/[STRCONC('",", x) for x in args],'")")

bcString2HyString2 s ==
  (STRINGP s) and (s.0 = char '_")  =>
    len := #s
    STRCONC('"\_"", SUBSTRING(s, 1, len-2), '"\_"")
  s

bcString2HyString s == s

bcFindString(s,i,n,char) ==  or/[j for j in i..n | s.j = char]

bcGen command ==
  htInitPage('"Basic Command",nil)
  string :=
    #command < 50 => STRCONC('"{\centerline{\tt ",command,'" }}")
    STRCONC('"{\tt ",command,'" }")
  htMakePage [
     '(text
        "{Here is the AXIOM command you could have issued to compute this result:}"
            "\vspace{2}\newline "),
      ['text,:string]]
  htMakeDoitButton('"Do It", command)
  htShowPage()

-- bcGen for axiom - nag link
linkGen command ==
  htInitPage('"AXIOM-Nag Link Command",nil)
  string := 
    #command < 50 => STRCONC('"{\centerline{ ",command,'" }}")
    command
  htMakePage [
     '(text 
        "\centerline{{\em Here is the AXIOM command}}"
          "\centerline{{\em you could have issued to compute this result:}}"
            "\vspace{2}\newline "),
      ['text,:string]]
  htMakeDoitButton('"Do It", command)
  htShowPage()

bcOptional s ==
  s = '"" => '"2"
  s

bcvspace() == bcHt '"\vspace{1}\newline "

bcString2WordList s == fn(s,0,MAXINDEX s) where
  fn(s,i,n) ==
    i > n => nil
    k := or/[j for j in i..n | s.j ^= char '_  ]
    null INTEGERP k => nil
    l := bcFindString(s,k + 1,n,char '_  )
    null INTEGERP l => [SUBSTRING(s,k,nil)]
    [SUBSTRING(s,k,l-k),:fn(s,l + 1,n)]


bcwords2liststring u ==
  null u => nil
  STRCONC('"[",first u,fn rest u) where
    fn(u) ==
      null u => '"]"
      STRCONC('", ",first u,fn rest u)

bcVectorGen vec == bcwords2liststring vec

bcError string ==
  sayBrightlyNT '"NOTE: "
  sayBrightly string

bcDrawIt(ind,a,b) == STRCONC(ind,'"=",a,'"..",b)

bcNotReady htPage ==
  htInitPage('"Basic Command",nil)
  htMakePage '(
     (text .
        "{\centerline{\em This facility will soon be available}}"))
  htShowPage()

htStringPad(n,w) ==
  s := STRINGIMAGE n
  ws := #s
  STRCONC('"\space{",STRINGIMAGE (w - ws + 1),'"}",s)

stringList2String x ==
  null x => '"()"
  STRCONC('"(",first x,"STRCONC"/[STRCONC('",",y) for y in rest x],'")")

htMkName(s,n) == STRCONC(s,STRINGIMAGE n)