|
|
DataMuseum.dkPresents historical artifacts from the history of: Commodore CBM-900 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Commodore CBM-900 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 4554 (0x11ca)
Types: TextFile
Notes: UNIX file
Names: »dstretch.c«
└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
└─⟦2d53db1df⟧ UNIX Filesystem
└─⟦this⟧ »hr/src/desk/dstretch.c«
#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);
}