Annotation of researchv9/jerq/src/lib/jj/jj.ms, revision 1.1.1.1

1.1       root        1: .hw rect\%angle
                      2: .if n .po 5
                      3: .de Po
                      4: .if t \&\f(CW\\$1\f1\\$2
                      5: .if n \&\fI\\$1\f1\\$2
                      6: ..
                      7: .de Ja
                      8: .ne 6
                      9: .sp
                     10: .in 0
                     11: .ft CW
                     12: .ps 12
                     13: .br
                     14: .if t .BX \\$1     
                     15: .if n \\$1     
                     16: .ps 10
                     17: .ft 1
                     18: \h'4m'\\$2
                     19: .in +3
                     20: .sp
                     21: .ft CW
                     22: ..
                     23: .de Jb
                     24: .sp
                     25: .ft 1
                     26: ..
                     27: .SH
                     28: A Library of Goo for the 5620
                     29: .PP
                     30: In the following summaries,
                     31: all coordinates are screen or bitmap coordinates.
                     32: The library is
                     33: .Po /usr/jerq/lib/libjj.a
                     34: which can be accessed by including a
                     35: .Po -ljj
                     36: in your compilation.
                     37: .sp
                     38: .PP
                     39: .in 0
                     40: .ft 1
                     41: .Ja 3d "3d: scaled integer three dimensional geometry
                     42: .nf
                     43: #define        ONE     16384
                     44: #define        XAXIS   0
                     45: #define        YAXIS   1
                     46: #define        ZAXIS   2
                     47: typedef short fract;   /* fixed point scaled by ONE */
                     48: typedef fract matrix[4][4];
                     49: typedef short coord[4];
                     50: typedef struct point3
                     51: {
                     52:        fract x, y, z, w;
                     53: } Hcoord;
                     54: .fi 
                     55: .Jb
                     56: These are the data structures for a 3 dimensional geometry package.
                     57: .Po Hcoord
                     58: are homogeneous coordinates.
                     59: Author (for all the 3d stuff): Tom Duff.
                     60: .Ja Clip "Clip: clipped jerq primitives
                     61: .nf
                     62: Clip(r) Rectangle r;
                     63: Cbitblt(sb, sr, db, dp, fc) Bitmap *sb, *db; Rectangle sr; Point dp;
                     64: Crectf(bp, r, fc) Bitmap *bp; Rectangle r;
                     65: Point Cstring(f, s, bp, p, fc) Font *f; char *s; Bitmap *bp; Point p;
                     66: Ctexture(bp, r, t, fc) Bitmap *bp; Rectangle r; Texture *t;
                     67: .fi 
                     68: .Jb
                     69: .Po Clip
                     70: sets the clipping rectangle for the routines
                     71: .Po Cbitblt ,
                     72: .Po Crectf ,
                     73: .Po Cstring
                     74: and
                     75: .Po Ctexture .
                     76: These routines implicitly clip to the layer as well.
                     77: .Po Cstring
                     78: returns the same result as
                     79: .Po string ,
                     80: that is, the result is not clipped.
                     81: Author: Andrew Hume.
                     82: .Ja NMenu "NMenu: extended menu
                     83: .nf
                     84: typedef struct NMitem
                     85: {
                     86:        char    *text;          /* text in menu */
                     87:        char    *help;          /* optional help text */
                     88:        struct NMenu *next;     /* cascade to */
                     89:        void    (*dfn)(), (*bfn)(), (*hfn)();
                     90: } NMitem;
                     91: typedef struct NMenu
                     92: {
                     93:        NMitem  *item;                  /* string array, ending with text=0 */
                     94:        NMitem  *(*generator)();        /* used if item == 0 */
                     95:        /* and some other private data */
                     96: } NMenu;
                     97: .fi
                     98: .Jb
                     99: A
                    100: .Po NMenu
                    101: is used by
                    102: .Po mhit
                    103: described below.
                    104: Null or missing values should be zero.
                    105: The help text should be less than 40 characters or so.
                    106: The generator function is called with an integer argument.
                    107: The end of the menu is indicated by a zero \f(CWtext\fP field.
                    108: The function
                    109: .Po dfn
                    110: is called just before the new menu is invoked.
                    111: The function
                    112: .Po bfn
                    113: is called just after this menu is finished.
                    114: The function
                    115: .Po hfn
                    116: is invoked just after the selection is made and before
                    117: .Po bfn .
                    118: All three functions are called with one argument,
                    119: a pointer to the
                    120: .Po NMitem
                    121: concerned.
                    122: .Po Mhit
                    123: returns a pointer to the NMitem that was selected or
                    124: .Po (NMitem *)0 .
                    125: The above definitions are available in
                    126: .Po /usr/jerq/include/menu.h .
                    127: .Ja confirm "confirm: confirm a decision
                    128: confirm(but)
                    129: .Jb
                    130: .Po confirm
                    131: waits for all buttons to be released,
                    132: changes the cursor to an icon indicating which button to push for an affirmative
                    133: reponse,
                    134: waits for a button push and returns the equality between the button push
                    135: and the argument
                    136: .Po but .
                    137: Author: Adrian Freed.
                    138: .Ja icos "icos, isin, isqrt: accurate scaled functions
                    139: .nf
                    140: fract icos(x) angle(x);
                    141: fract isin(x) angle x;
                    142: long isqrt(x) long x;
                    143: .fi
                    144: .Jb
                    145: .Po icos
                    146: and
                    147: .Po isin
                    148: return a scaled value of their (scaled) argument.
                    149: See
                    150: .Po 3d
                    151: above.
                    152: .Ja init3 "init3: initialise the 3d geometry world
                    153: init3(v, d, s) Bitmap *v;
                    154: .Jb
                    155: .Po init3
                    156: initialises the matrix stack
                    157: (see
                    158: .Po push3  below).
                    159: .Po v
                    160: is the Bitmap for the image.
                    161: .Po d/s
                    162: is the distance to the screen whose half-width is 1.
                    163: .Ja kbdstr "kbdstr: enter a string from the keyboard
                    164: kbdstr(s) char *s;
                    165: .Jb
                    166: .Po kbdstr
                    167: displays the given text in a box 300 pixels long and allows the user to
                    168: type after the prompt.
                    169: The erase and kill characters are
                    170: .Po BS
                    171: and
                    172: .Po @
                    173: respectively.
                    174: Author: Andrew Hume.
                    175: .Ja mhit "mhit: extended analog to menuhit
                    176: NMitem *mhit(m, but, 0) NMenu *m;
                    177: .Jb
                    178: .Po mhit
                    179: supports cascading menus with help.
                    180: Menus may be a static list of
                    181: .Po MNitem
                    182: or a generating function.
                    183: .Po mhit
                    184: may be called with a button argument of 2 or 3 only.
                    185: Button 1 causes the help message associated with the currently
                    186: highlighted entry to be displayed.
                    187: The menu items (and help messages) scroll.
                    188: Author: Andrew Hume.
                    189: .Ja polyture "polyture: texture a polygon
                    190: .nf
                    191: polyture(bp, pts, n, t, c) Bitmap *bp; Point *pts; Texture *t; Code c;
                    192: .fi
                    193: .Jb
                    194: .Po Polyture
                    195: textures with mode
                    196: .Po c
                    197: the polygon bounded by and including the
                    198: .Po n
                    199: vertices specified by
                    200: .Po pts .
                    201: The list should be closed, i.e.
                    202: .Po pts[0]==pts[n-1] .
                    203: Author: Andrew Hume.
                    204: .Ja push3 "push3, pop3: manipulate the 3d matrix stack
                    205: .nf
                    206: push3()
                    207: pop()
                    208: .fi
                    209: .Jb
                    210: .Po push3
                    211: pushes a copy of the top of the matrix stack onto the matrix stack.
                    212: .Po pop3
                    213: throws away the top of the matrix stack.
                    214: .Ja rot3 "rot3, rosc3: rotate a matrix
                    215: .nf
                    216: rot3(theta, axis) angle theta;
                    217: rotsc3(s, c, axis) short s, c;
                    218: .fi
                    219: .Jb
                    220: These routines rotate the top of the matrix stack about the specified axis.
                    221: .Po rot3(theta,\ axis)
                    222: is identical to
                    223: .Po rotsc3(isin(theta),\ icos(theta),\ axis) .
                    224: .Ja todo "3d stuff to be done
                    225: .nf
                    226: Hcoord hcoord(x,y,z,w) fract x, y, z, w;
                    227: scale3(p) Hcoord p;
                    228: tran3(p) Hcoord p;
                    229: ident(m) matrix m;
                    230: xform3(m) matrix m;
                    231: long dot(a, b) Hcoord a, b;
                    232: Hcoord unitize(x) Hcoord(x);
                    233: Hcoord cross(a, b) Hcoord a, b;
                    234: look3(e, l, u) Hcoord e, l, u;
                    235: move3(p) Hcoord p;
                    236: line3(p) Hcoord p;
                    237: .fi
                    238: .Jb
                    239: These have yet to be documented.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.