bin@primate.wisc.edu (Brain in Neutral) (01/18/89)
Here's some info on SICN's and how to use them. The code fragments below are in Rascal (which is what SicnEdit is written in). Similar to Pascal, for the most part. A SICN resource is actually a set of SICN items, or SITM's as I call them. One SITM is usually what you see, when you see one, not the whole SICN. A SITM is a 16x16 bitmap, similar to an ICON, which is a 32x32 bitmap. A SICN is just a bunch of SITM's end-to-end; an array of SITM's, as it were. The way a SITM is drawn is very similar to drawing an ICON: create a small bitmap and blat it into the window. Const sitmSize = 16; (* SICN items are 16 bits wide x 16 words down *) Type Sitm = Integer[sitmSize]; SicnHandle = ^^Sitm[1]; (* actually variable-length *) (* Plot sicn item in given rectangle. This is pretty analogous to PlotIcon. *) Proc PlotSitm (r: Rect; s: Sitm); Var thePort: GrafPtr; bm: BitMap; tmpSitm: Sitm; { (* create a small bitmap *) tmpSitm := s; (* make non-relocatable copy of item data *) bm.baseAddr := @tmpSitm; bm.rowBytes := 2; (* items are 16 bits wide *) SetRect (bm.bounds, 0, 0, sitmSize, sitmSize); GetPort (@thePort); CopyBits (bm, thePort^.portBits, bm.bounds, r, srcCopy, nil); }; (* Plot the (i)th sitm in a sicn *) Proc PlotSicn (r: Rect; s: SicnHandle; i: Integer); Var sitm: Sitm; { sitm := s^^[i]; PlotSitm (r, sitm); }; --- Paul DuBois dubois@primate.wisc.edu rhesus!dubois bin@primate.wisc.edu rhesus!bin