[mod.mac.sources] Here's a SUMacC List Manager interface

mnodine@labs-b.bbn.com (Mark Nodine) (11/21/86)

[Info-Mac Archive: SUMACC-LISTMANAGER.SHAR]

A couple of weeks ago I asked if anybody had written glue for the List
Manager for SUMacC.  I didn't get any response, so I wrote it myself.
In the spirit of SUMacC, I am posting this as public domain software
for anybody who wants to use it.  The posting is in the form of a shell
archive.  To unpack under Unix, type

	sh listmgr.shar

If you are not using unix, use an editor to chop the files apart.

	--Mark

---
#! /bin/sh
: This is a shar archive.  Extract with sh, not csh.
echo x -  liblist.c
cat > liblist.c << '10467!EOF!'
/*	liblist.c		1.0	86/10/27	*/

/*
 * Package library for the List Manager.
 *
 * Copyright (C) 1984, Stanford Univ. SUMEX project.
 * May be used but not sold without permission.
 */

/*
 * history
 * 10/27/86	Nodine	Created.
 */

/* LINTLIBRARY */

#include "quickdraw.h"
#undef v
#undef h
#include "toolintf.h"
#include "osintf.h"
#include "listintf.h"
#include "libmac.h"


/* List Manager */

ListHandle	LNew(rv,db,cs,p,w,d,hg,sh,sv) Rect *rv,db; Point *cs; WindowPtr w; { _macc9(RI,_lnew,L,L,L,SS,S,L,B,B,B,B)}
void	LDispose(l) ListHandle l; { _macc1(RN,_ldispose,N,L)}
int	LAddColumn(c,cn,l) ListHandle l; { _macc3(RI,_laddcolumn,S,S,S,L) }
int	LAddRow(c,cn,l) ListHandle l; { _macc3(RI,_laddrow,S,S,S,L) }
void	LDelColumn(c,cn,l) ListHandle l; { _macc3(RN,_ldelcolumn,N,S,S,L) }
void	LDelRow(c,cn,l) ListHandle l; { _macc3(RN,_ldelrow,N,S,S,L) }
void	LAddToCell(d,dl,c,l) Ptr d; Cell *c; ListHandle l; { _macc4(RN,_laddtocell,N,L,S,SS,L) }
void	LClrCell(c,l) Cell *c; ListHandle l; { _macc2(RN,_lclrcell,N,SS,L) }
void	LGetCell(d,dl,c,l) Ptr d; int *dl; Cell *c; ListHandle l;{ _macc4(RN,_lgetcell,N,L,VS,SS,L) }
void	LSetCell(d,dl,c,l) Ptr d; Cell *c; ListHandle l; { _macc4(RN,_lsetcell,N,L,S,SS,L) }
void	LCellSize(s,l) Point *s; ListHandle l; { _macc2(RN,_lcellsize,N,SS,L) }
int	LGetSelect(n,c,l) Cell *c; ListHandle l; { _macc3(RI,_lgetselect,B,B,L,L) }
void	LSetSelect(s,c,l) Cell *c; ListHandle l; { _macc3(RN,_lsetselect,N,B,SS,L) }
int	LClick(p,m,l) Point *p; ListHandle l; { _macc3(RI,_lclick,B,SS,S,L) }
int	LLastClick(l) ListHandle l; { _macc1(RI,_llastclick,L,L) }
void	LFind(o,len,c,l) int *o,*len; Cell *c; ListHandle l; { _macc4(RN,_lfind,N,VS,VS,SS,L) }
int	LNextCell(hn,vn,c,l) Cell *c; ListHandle l; { _macc4(RI,_lnextcell,B,B,B,L,L) }
void	LRect(r,c,l) Rect *r; Cell *c; ListHandle l; { _macc3(RN,_lrect,N,L,SS,L) }
int	LSearch(d,dl,p,c,l) Ptr d; ProcPtr p; Cell *c; ListHandle l; { _macc5(RI,_lsearch,B,L,S,L,SS,L) }
void	LSize(lw,lh,l) ListHandle l; { _macc3(RN,_lsize,N,S,S,L) }
void	LDraw(c,l) Cell *c; ListHandle l; { _macc2(RN,_ldraw,N,SS,L) }
void	LDoDraw(d,l) ListHandle l; { _macc2(RN,_ldodraw,N,B,L) }
void	LScroll(c,r,l) ListHandle l; { _macc3(RN,_lscroll,N,S,S,L) }
void	LAutoScroll(l) ListHandle l; { _macc1(RN,_lautoscroll,N,L) }
void	LUpdate(r,l) RgnHandle r; ListHandle l; { _macc2(RN,_lupdate,N,L,L) }
void	LActivate(a,l) ListHandle l; { _macc2(RN,_lactivate,N,B,L) }
10467!EOF!
echo x -  listintf.h
cat > listintf.h << '10467!EOF!'
/*
 * List definitions.
 *
 *
 * C language version (C) 1986, BBN
 * May be used but not sold without permission.
 */

/* Constants for controlling autoscrolling in listFlags */
#define lDoVAutoScroll		2
#define lDoHAutoScroll		1

/* Constants for the selFlags byte */
#define lOnlyOne		0x80
#define lExtendDrag		64
#define	lNoDisjoint		32
#define	lNoExtend		16
#define	lNoRect			8
#define lUseSense		4
#define lNoNilHilite		2

/* Messages to a list definition procedure */
#define lInitMsg		0
#define	lDrawMsg		1
#define lHiliteMsg		2
#define	lCloseMsg		3

/* Typedefs for the List Manager */
typedef struct { short row, col; } Cell;

typedef char DataArray[32000];
typedef DataArray *DataPtr;
typedef DataPtr *DataHandle;

typedef struct
{
    Rect rView;
    GrafPtr port;
    Point indent;
    Point cellSize;
    Rect visible;
    ControlHandle vScroll;
    ControlHandle hScroll;
    char selFlags;
    char lActive;
    char lReserved;
    char listFlags;
    long clikTime;
    Point clikLoc;
    Point mouseLoc;
    Ptr lClikLoop;
    Cell lastClick;
    long refCon;
    Handle listDefProc;
    Handle userHandle;
    Rect dataBounds;
    DataHandle cells;
    short maxIndex;
    int cellArray[1];
} ListRec;

typedef ListRec *ListPtr;
typedef ListPtr *ListHandle;

/* Functions returning other than integer */
ListHandle LNew();
int LLastClick();		/* actually returns a Cell */
10467!EOF!
echo x -  listpack.s
cat > listpack.s << '10467!EOF!'
|
| file packtraps.text
|
| implementation for the interface to packages
|

|
|procedure lnew(rview,databounds: rect| csize: point| theproc: integer|
|	thewindow: windowptr| drawit,hasgrow,scrollhoriz,scrollvert: boolean):
|	listhandle|
|

		.text
		.globl	_lnew
_lnew:

	moveq	#68,d2	|stuff the opcode

golist:	movl	sp@+,a0	|get user's rts
	movw	d2,sp@-	|the routine selector
	movl	a0,sp@-	|push the rts back on
	.word	/ade7	|__pack0 w/autopop
	|never gets here

|
|procedure ldispose(lhandle: listhandle)|
|
		.text
		.globl	_ldispose
_ldispose:

	moveq	#40,d2
	bra	golist
|
|procedure laddcolumn(count,colnum: integer| lhandle: listhandle): integer|
|
		.text
		.globl	_laddcolumn
_laddcolumn:

	moveq	#4,d2
	bra	golist
|
|procedure laddrow(count,rownum: integer| lhandle: listhandle): integer|
|
		.text
		.globl	_laddrow
_laddrow:

	moveq	#8,d2
	bra	golist

|
|procedure ldelcolumn(count,colnum: integer| lhandle: listhandle): integer|
|
		.text
		.globl	_ldelcolumn
_ldelcolumn:
	moveq	#32,d2	|stuff the opcode
	bra	golist

|
|procedure ldelrow(count,rownum: integer| lhandle: listhandle): integer|
|
		.text
		.globl	_ldelrow
_ldelrow:
	moveq	#36,d2
	bra	golist

|
|function laddtocell (dataptr: ptr| datalen: integer| thecell: cell|
|	lhandle: listhandle)|
|
		.text
		.globl	_laddtocell
_laddtocell:
	moveq	#12,d2
	bra	golist


|
|function lclrcell (thecell: cell| lhandle: listhandle)|
|
		.text
		.globl	_lclrcell
_lclrcell:
	moveq	#28,d2
	bra	golist


|
|function lgetcell (dataptr: ptr| var datalen: integer| thecell: cell|
|	lhandle: listhandle)|
|
		.text
		.globl	_lgetcell
_lgetcell:
	movw	#56,d2
	bra	golist


|
|function lsetcell (dataptr: ptr| datalen: integer| thecell: cell|
|	lhandle: listhandle)|
|
		.text
		.globl	_lsetcell
_lsetcell:
	movw	#88,d2
	bra	golist

|
|function lcellsize (csize, point| lhandle: listhandle)|
|
		.text
		.globl	_lcellsize
_lcellsize:
	moveq	#20,d2	|stuff the opcode
	bra	golist

|
|procedure lgetselect (next: boolean| var thecell: cell| 
|	lhandle: listhandle): boolean|
|
		.text
		.globl	_lgetselect
_lgetselect:
	moveq	#60,d2
	bra	golist


|
|procedure lsetselect (setit: boolean| thecell: cell| lhandle: listhandle)|
|
		.text
		.globl	_lsetselect
_lsetselect:
	moveq	#92,d2
	bra	golist

|
|procedure lclick (pt: point| modifiers: integer| lhandle: listhandle):
|	boolean|
|
		.text
		.globl	_lclick
_lclick:
	moveq	#24,d2
	bra	golist

|
|procedure llastclick (lhandle: listhandle): cell|
|
		.text
		.globl	_llastclick
_llastclick:
	moveq	#64,d2
	bra	golist

|
|procedure lfind (var offset, len: integer| thecell: cell|
|	lhandle: listhandle)|
|
		.text
		.globl	_lfind
_lfind:
	moveq	#52,d2
	bra	golist

|
|function lnextcell (hnext,vnext: boolean| var thecell: cell|
|	lhandle: listhandle): boolean|
|
		.text
		.globl	_lnextcell
_lnextcell:
	moveq	#72,d2
	bra	golist

|
|function lrect (var cellrect: rect| thecell: cell| lhandle: listhandle)|
|
		.text
		.globl	_lrect
_lrect:
	movw	#76,d2	|the routine selector
	bra	golist

|
|function lsearch (dataptr: ptr| datalen: integer| searchproc: ptr|
|	var thecell: cell| lhandle: listhandle): boolean|
|
		.text
		.globl	_lsearch
_lsearch:
	movw	#84,2	|the routine selector
	bra 	golist

|
|function lsize (listwidth,listheight: integer| lhandle: listhandle)|
|
		.text
		.globl	_lsize
_lsize:
	movw	#96,d2	|the routine selector
	bra	golist

|
|function ldraw (thecell: cell| lhandle: listhandle)|
|
		.text
		.globl	_ldraw
_ldraw:
	movw	#48,d2	|the routine selector
	bra	golist

|
| procedure ldodraw (drawit: boolean| lhandle: listhandle)|
|
		.text
		.globl	_ldodraw
_ldodraw:
	movw	#44,d2
	bra	golist

|
| procedure lscroll (dcols,drows: integer| lhandle: listhandle)|
|
		.text
		.globl	_lscroll
_lscroll:
	movw	#80,d2
	bra	golist

|
| procedure lautoscroll (lhandle: listhandle)|
|
		.text
		.globl _lautoscroll
_lautoscroll:
	movw	#16,d2
	bra	golist

|
| procedure lupdate (thergn: rgnhandle| lhandle: listhandle)|
|
		.text
		.globl _lupdate
_lupdate:
	movw	#100,d2
	bra	golist

|
| procedure lactivate (act: boolean| lhandle: listhandle)|
|
		.text
		.globl _lactivate
_lactivate:
	movw	#0,d2
	bra	golist
10467!EOF!
---