|
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 - 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); }