home *** CD-ROM | disk | FTP | other *** search
- // $Id: std.vsl,v 1.6 1997/10/08 13:19:55 zeller Exp $
- // VSL Standard Library
-
- // Copyright (C) 1993 Technische Universitaet Braunschweig, Germany.
- // Written by Andreas Zeller <zeller@ips.cs.tu-bs.de>.
- //
- // This file is part of the DDD Library.
- //
- // The DDD Library is free software; you can redistribute it and/or
- // modify it under the terms of the GNU Library General Public
- // License as published by the Free Software Foundation; either
- // version 2 of the License, or (at your option) any later version.
- //
- // The DDD Library is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- // See the GNU Library General Public License for more details.
- //
- // You should have received a copy of the GNU Library General Public
- // License along with the DDD Library -- see the file COPYING.LIB.
- // If not, write to the Free Software Foundation, Inc.,
- // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- //
- // DDD is the data display debugger.
- // For details, see the DDD World-Wide-Web page,
- // `http://www.cs.tu-bs.de/softech/ddd/',
- // or send a mail to the DDD developers <ddd@ips.cs.tu-bs.de>.
-
- #include <builtin.vsl>
-
- // Version
- std_version() = "$Id: std.vsl,v 1.6 1997/10/08 13:19:55 zeller Exp $";
-
- // Constants
- rulethickness() = 1;
- whitethickness() = 2;
- indentamount() = hspace(" ");
- true = 1;
- false = 0;
-
- // Some Macros...
-
- // Maximum, minimum
- max(a) = a;
- max(a, b, ...) = if a > b then max(a, ...) else max(b, ...) fi;
- min(a) = a;
- min(a, b, ...) = if a < b then min(a, ...) else min(b, ...) fi;
-
- // Fillers
- hfill() = vfix(fill());
- vfill() = hfix(fill());
-
- // Neutral elements
- hnull() = vfill(); // neutral element for &
- vnull() = hfill(); // neutral element for |
-
- // Black and white lines
- hrule(thickness) = rule() & vspace(thickness);
- vrule(thickness) = rule() | hspace(thickness);
- hwhite(thickness) = fill() & vspace(thickness);
- vwhite(thickness) = fill() | hspace(thickness);
-
- hrule() = hrule(rulethickness());
- vrule() = vrule(rulethickness());
- hwhite() = hwhite(whitethickness());
- vwhite() = vwhite(whitethickness());
-
- // Fixers
- fix(a) = hfix(vfix(a));
- space(a) = hspace(a) + vspace(a);
-
- // Box
- box(x) = x;
- box(x,y) = hspace(x) + vspace(y);
-
- // Alignments
- halign(...) = (&)(...);
- valign(...) = (|)(...);
- talign(...) = (~)(...);
-
- // Reverse alignments
- hralign() = hnull();
- hralign(head) = head;
- hralign(head, ...) = hralign(...) & head;
- tralign() = hnull();
- tralign(head) = head;
- tralign(head, ...) = tralign(...) ~ head;
- vralign() = vnull();
- vralign(head) = head;
- vralign(head, ...) = vralign(...) | head;
-
- // Lists
- hlist(_) = hnull();
- hlist(_, head) = head;
- hlist(sep, head, ...) = head & sep & hlist(sep, ...);
-
- tlist(_) = hnull();
- tlist(_, head) = head;
- tlist(sep, head, ...) = head ~ sep ~ tlist(sep, ...);
-
- vlist(_) = vnull();
- vlist(_, head) = head;
- vlist(sep, head, ...) = head | sep | vlist(sep, ...);
-
- hvlist(_) = vnull();
- hvlist(sep, head) = head & sep;
- hvlist(sep, head, ...) = head & sep | hvlist(sep, ...);
-
- tvlist(_) = vnull();
- tvlist(sep, head) = head ~ sep;
- tvlist(sep, head, ...) = head ~ sep | tvlist(sep, ...);
-
- vhlist(_) = vnull();
- vhlist(sep, head) = head | sep;
- vhlist(sep, head, ...) = (head | sep) & vhlist(sep, ...);
-
- vtlist(_) = vnull();
- vtlist(sep, head) = head | sep;
- vtlist(sep, head, ...) = (head | sep) ~ vtlist(sep, ...);
-
- commalist(...) = tlist(", ", ...);
- semicolonlist(...) = tlist("; ", ...);
-
- // Make size even
- heven(box, align) = box ^ hspace(box + box % align);
- veven(box, align) = box ^ vspace(box + box % align);
- even(box, align) = heven(veven(box, align), align);
- heven(box) = heven(box, 2);
- veven(box) = veven(box, 2);
- even(box) = heven(veven(box));
-
- // Conversions
- // Convert digit
- num(a);
- digit(0) = "0";
- digit(1) = "1";
- digit(2) = "2";
- digit(3) = "3";
- digit(4) = "4";
- digit(5) = "5";
- digit(6) = "6";
- digit(7) = "7";
- digit(8) = "8";
- digit(9) = "9";
- digit(10) = "a";
- digit(11) = "b";
- digit(12) = "c";
- digit(13) = "d";
- digit(14) = "e";
- digit(15) = "f";
- digit(_) = fail("invalid digit() argument");
-
- // Convert numbers
- // Natural numbers
- pnum(a, base) =
- if a < base then
- digit(a)
- else
- pnum(a / base, base) & pnum(a % base, base)
- fi;
-
- // Entire numbers
- num(a, base) =
- if a < 0 then "-" & pnum(0 - a, base) else pnum(a, base) fi;
- num(a) = num(a, 10);
-
- // Bases
- dec(a) = num(a, 10);
- oct(a) = num(a, 8);
- bin(a) = num(a, 2);
- hex(a) = num(a, 16);
-
- // Lines with some space at the inner side
- n_rule() = hrule() | hwhite();
- w_rule() = vrule() & vwhite();
- s_rule() = hwhite() | hrule();
- e_rule() = vwhite() & vrule();
-
- // Frames
- whiteframe(box, thickness) =
- hwhite(thickness)
- | vwhite(thickness) & box & vwhite(thickness)
- | hwhite(thickness);
- whiteframe(box) = whiteframe(box, whitethickness());
-
- ruleframe(box, thickness) =
- hrule(thickness)
- | vrule(thickness) & box & vrule(thickness)
- | hrule(thickness);
- ruleframe(box) = ruleframe(box, rulethickness());
-
- frame(box) = ruleframe(whiteframe(box));
- doubleframe(box) = frame(frame(box));
- thickframe(box) = ruleframe(frame(box));
-
- // Centering
- hcenter(box) = fill() & box & fill();
- vcenter(box) = fill() | box | fill();
- center(box) = hcenter(vcenter(box));
-
- // Flushing
- n_flush(box) = hcenter(box) | fill();
- s_flush(box) = fill() | hcenter(box);
- w_flush(box) = vcenter(box) & fill();
- e_flush(box) = fill() & vcenter(box);
- sw_flush(box) = fill() | (box & fill());
- nw_flush(box) = (box & fill()) | fill();
- se_flush(box) = fill() | (fill() & box);
- ne_flush(box) = (fill() & box) | fill();
-
- // Indentation
- indent(box) = indentamount() & box;
-
- // Underlines, Overlines, Crosslines
- underline(box) = box | hrule();
- overline(box) = hrule() | box;
- crossline(box) = hfix(box ^ vcenter(hrule()));
-
- // Poor Man's Bold
- doublestrike(box) = box ^ (hspace(1) & box);
-
- // Abbreviations
- dquote() = "\"";
- squote() = "'";
- copyright() = "(c)";
-