DataMuseum.dk

Presents historical artifacts from the history of:

Commodore CBM-900

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Commodore CBM-900

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦cc63eeba3⟧ TextFile

    Length: 4554 (0x11ca)
    Types: TextFile
    Notes: UNIX file
    Names: »dstretch.c«

Derivation

└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
    └─⟦2d53db1df⟧ UNIX V7 Filesystem
        └─ ⟦this⟧ »hr/src/desk/dstretch.c« 

TextFile

#include	"desk.h"

/*
 *	The DOTHIS conditional is needed because the software does
 *	not handle moving the origin and changing the size at the
 *	same time.
 */

#define	MARGIN	(64)
#define	L	(0)		/* adjust left side		*/
#define	R	(1)		/* adjust right side		*/
#define	T	(2)		/* adjust top side		*/
#define	B	(3)		/* adjust bottom side		*/
#define	LT	(4)		/* adjust left and top sides	*/
#define	LB	(5)		/* adjust left and bottom sides	*/
#define	RT	(6)		/* adjust right and top sides	*/
#define	RB	(7)		/* adjust right and bottom sides*/

extern int	alstretch;
extern int	Lstretch(),
		Rstretch(),
		Tstretch(),
		Bstretch(),
		LTstretch(),
		LBstretch(),
		RTstretch(),
		RBstretch();

int (*strFtn[8])() =		/* stretch functions		*/
{
	Lstretch,  Rstretch,  Tstretch,  Bstretch,
	LTstretch, LBstretch, RTstretch, RBstretch
};


fstretch()
{
	RECT	rect;
	RECT	trect;
	register RECT	*r;
	register int	mx, my;
	int	opt;

	AL_Open(alstretch);
	if ( !dnLwait() )
	{
		upAwait();
		AL_Close();
		return;
	}
	AL_Close();

	r = &dproc[dskWin].prect;
	rect.origin = mouse.pt;
	rect.corner.x = mouse.pt.x + MOUSEWIDTH;
	rect.corner.y = mouse.pt.y + MOUSEHEIGHT;
	if ( !R_intersect(rect, *r) )
		return;
	if ( !R_null( trect=R_inset(*r, MOUSEWIDTH, MOUSEHEIGHT) ) &&
	      R_intersect(rect, trect) )
		return;

	mx = mouse.pt.x;
	my = mouse.pt.y;

#ifdef DOTHIS
	if ( mx <= r->origin.x && r->origin.x < mx + MOUSEWIDTH )
	{
		opt = L;
		if ( my < r->origin.y + MARGIN )
			opt = LT;
		else if ( my > r->corner.y - MARGIN )
			opt = LB;
	}
	else if ( mx <= r->corner.x && r->corner.x < mx + MOUSEWIDTH )
	{
		opt = R;
		if ( my < r->origin.y + MARGIN )
			opt = RT;
		else if ( my > r->corner.y - MARGIN )
			opt = RB;
	}
	else if ( my <= r->origin.y && r->origin.y < my + MOUSEHEIGHT )
	{
		opt = T;
		if ( mx < r->origin.x + MARGIN )
			opt = LT;
		else if ( mx > r->corner.x - MARGIN )
			opt = RT;
	}
	else if ( my <= r->corner.y && r->corner.y < my + MOUSEHEIGHT )
	{
		opt = B;
		if ( mx < r->origin.x + MARGIN )
			opt = LB;
		else if ( mx > r->corner.x - MARGIN )
			opt = RB;
	}
#endif
	if ( mx <= r->corner.x && r->corner.x < mx + MOUSEWIDTH )
	{
		opt = R;
		if ( my > r->corner.y - MARGIN )
			opt = RB;
	}
	else if ( my <= r->corner.y && r->corner.y < my + MOUSEHEIGHT )
	{
		opt = B;
		if ( mx > r->corner.x - MARGIN )
			opt = RB;
	}
	else
		return;
		
	rect = *r;
	dskMpt.x = mx;
	dskMpt.y = my;
	D_Frame(r, 1);
	upLwait( strFtn[opt] );
	if ( R_null(*r) )
	{
		*r = rect;
	}
	else
	{
		/*
		 *	Unframe it. Restore original size, if sizing failed.
		 */
		D_Frame(r, 1);
		ioctl(myfd, CIOMSEOFF);
		if ( !setSize(r) )
			*r = rect;
		ioctl(myfd, CIOMSEON);
	}
}


Lstretch()
{
	register RECT	*r;
	register int	dx;

	dx = mouse.pt.x - dskMpt.x;
	if ( !dx )
		return;
	D_Frame( r = &dproc[dskWin].prect, 1);
	r->origin.x += dx;
	dskMpt.x = mouse.pt.x;
	D_Frame( r, 1);
}


Rstretch()
{
	register RECT	*r;
	register int	dx;

	dx = mouse.pt.x - dskMpt.x;
	if ( !dx )
		return;
	D_Frame( r = &dproc[dskWin].prect, 1);
	r->corner.x += dx;
	dskMpt.x = mouse.pt.x;
	D_Frame( r, 1);
}


Tstretch()
{
	register RECT	*r;
	register int	dy;

	dy = mouse.pt.y - dskMpt.y;
	if ( !dy )
		return;
	D_Frame( r = &dproc[dskWin].prect, 1);
	r->origin.y += dy;
	dskMpt.y = mouse.pt.y;
	D_Frame( r, 1);
}


Bstretch()
{
	register RECT	*r;
	register int	dy;

	dy = mouse.pt.y - dskMpt.y;
	if ( !dy )
		return;
	D_Frame( r = &dproc[dskWin].prect, 1);
	r->corner.y += dy;
	dskMpt.y = mouse.pt.y;
	D_Frame( r, 1);
}


LTstretch()
{
	register RECT	*r;
	register int	dx, dy;

	dx = mouse.pt.x - dskMpt.x;
	dy = mouse.pt.y - dskMpt.y;
	if ( !dx && !dy )
		return;
	D_Frame( r = &dproc[dskWin].prect, 1);
	r->origin.x += dx;
	r->origin.y += dy;
	dskMpt = mouse.pt;
	D_Frame( r, 1);
}


LBstretch()
{
	register RECT	*r;
	register int	dx, dy;

	dx = mouse.pt.x - dskMpt.x;
	dy = mouse.pt.y - dskMpt.y;
	if ( !dx && !dy )
		return;
	D_Frame( r = &dproc[dskWin].prect, 1);
	r->origin.x += dx;
	r->corner.y += dy;
	dskMpt = mouse.pt;
	D_Frame( r, 1);
}


RTstretch()
{
	register RECT	*r;
	register int	dx, dy;

	dx = mouse.pt.x - dskMpt.x;
	dy = mouse.pt.y - dskMpt.y;
	if ( !dx && !dy )
		return;
	D_Frame( r = &dproc[dskWin].prect, 1);
	r->corner.x += dx;
	r->origin.y += dy;
	dskMpt = mouse.pt;
	D_Frame( r, 1);
}


RBstretch()
{
	register RECT	*r;
	register int	dx, dy;

	dx = mouse.pt.x - dskMpt.x;
	dy = mouse.pt.y - dskMpt.y;
	if ( !dx && !dy )
		return;
	D_Frame( r = &dproc[dskWin].prect, 1);
	r->corner.x += dx;
	r->corner.y += dy;
	dskMpt = mouse.pt;
	D_Frame( r, 1);
}