[comp.sources.amiga] v90i089: XSize 1.0 - X-Windows style window sizing, Part01/01

Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator) (03/04/90)

Submitted-by: micke@slaka.sirius.se (Mikael Karlsson)
Posting-number: Volume 90, Issue 089
Archive-name: util/xsize-1.0

[ uuencoded binary enclosed.  ...tad ]

[ from the documentation ]
    XSize provides an enhanced way of resizing windows.
    A sizing frame is drawn over the window. It looks like this:

    +---+---+---+
    |   |   |   |
    +---+---+---+
    |   |   |   |
    +---+---+---+
    |   |   |   |
    +---+---+---+

    You can now move the mouse around (while still holding down
    the left mouse button, it's ok to release the qualifier if
    you used that way of initiating XSize) freely inside the frame.
    Nothing happens until you reach an (outer) edge of the frame.
    When you do, that edge starts to follow the mouse. Now only one
    edge follows the mouse. If you move the mouse to a corner the
    second edge that forms the corner also starts to follow the mouse.
    To change the active edge hold down the right mouse button,
    move to another edge and release the right mouse button.

#!/bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 1 (of 1)."
# Contents:  handler.c makefile misc.c stub.s xsize.c xsize.doc xsize.h
#   xsize.uu
# Wrapped by tadguy@xanth on Sat Mar  3 15:46:12 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'handler.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'handler.c'\"
else
echo shar: Extracting \"'handler.c'\" \(9038 characters\)
sed "s/^X//" >'handler.c' <<'END_OF_FILE'
X/* Auto: make
X*/
X
Xstruct Screen *WhichScreen();
Xstruct Window *WhichWindow();
X
XIMPORT struct XSizeRsrc *XSizeRsrc;
XIMPORT WORD OF;
X
Xstruct Screen *s;
Xstruct Window *w;
Xstruct RastPort rp;
Xstruct Layer_Info *LockedLayerInfo;
X
XWORD mx, my;
XWORD xl, yt, xr, yb;
XWORD oxl, oyt, oxr, oyb;
XWORD minx, maxx, miny, maxy;
XWORD leftx, rightx, topy, bottomy;
X
XWORD state = waiting;
X
X#define InGadget(w, mx, my) \
X(((w->Height - 10) < my) && (my < (w->Height)) &&   \
X ((w->Width - 17) < mx) && (mx < (w->Width)))
X
X#define KillEvent() ev->ie_Class = IECLASS_NULL
X
X#define GetSMousePos()                                  \
X{                                                       \
X    mx = s->MouseX + s->ViewPort.RasInfo->RxOffset;     \
X    my = s->MouseY + s->ViewPort.RasInfo->RyOffset;     \
X    if (mx < 0)             mx = 0;                     \
X    if (mx >= s->Width)     mx = s->Width - 1;          \
X    if (my < 0)             my = 0;                     \
X    if (my >= s->Height)    my = s->Height - 1;         \
X}
X
X#define GetWMousePos() { mx = w->MouseX; my = w->MouseY; }
X
Xstruct InputEvent *Waiting(ev)
XREGISTER struct InputEvent *ev;
X{
X    if (ev->ie_Class == IECLASS_RAWMOUSE && ev->ie_Code == IECODE_LBUTTON) {
X        if ((s = WhichScreen()) && (w = WhichWindow(s)) &&
X          (w->Flags & WINDOWSIZING)) {  /* Ok, we've got a sizable window */
X            GetWMousePos();
X            if (InGadget(w, mx, my) ||
X              (ev->ie_Qualifier & XSizeRsrc->qual)) {
X                state = startframe;
X                SetUpForFrame();
X                KillEvent();
X            }
X        }
X    }
X    return ev;
X}
X
Xstruct InputEvent *StartFrame(ev)
XREGISTER struct InputEvent *ev;
X{
X    if (ev->ie_Class == IECLASS_RAWMOUSE) {
X        if (ev->ie_Code == IECODE_LBUTTON+IECODE_UP_PREFIX) {
X            KillEvent();
X            EraseFrame();
X            UnlockLayers(LockedLayerInfo);
X            state = waiting;
X        } else if (ev->ie_Code == IECODE_NOBUTTON) {
X              /* Skip consecutive move events */
X            while (ev->ie_NextEvent &&
X              (ev->ie_NextEvent->ie_Class == IECLASS_TIMER ||
X               (ev->ie_NextEvent->ie_Class == IECLASS_RAWMOUSE &&
X                ev->ie_NextEvent->ie_Code == IECODE_NOBUTTON))) {
X                ev = ev->ie_NextEvent;
X            }
X            GetSMousePos();
X            if (mx <= xl) {
X                leftx = 1;
X                state = dragging;
X            } else if (mx >= xr) {
X                rightx = 1;
X                state = dragging;
X            } else if (my <= yt) {
X                topy = 1;
X                state = dragging;
X            } else if (my >= yb) {
X                bottomy = 1;
X                state = dragging;
X            }
X        } else {
X            KillEvent();
X        }
X    } else if (ev->ie_Class == RAWKEY) {
X        KillEvent();
X    }
X    return ev;
X}
X
Xstruct InputEvent *Dragging(ev)
XREGISTER struct InputEvent *ev;
X{
X    if (ev->ie_Class == IECLASS_RAWMOUSE) {
X        if (ev->ie_Code == IECODE_NOBUTTON) {
X              /* Skip consecutive move events */
X            while (ev->ie_NextEvent &&
X              (ev->ie_NextEvent->ie_Class == IECLASS_TIMER ||
X               (ev->ie_NextEvent->ie_Class == IECLASS_RAWMOUSE &&
X                ev->ie_NextEvent->ie_Code == IECODE_NOBUTTON))) {
X                ev = ev->ie_NextEvent;
X            }
X            GetSMousePos();
X            if (!leftx && mx <= xl) {
X                if (rightx) {
X                    xr = w->LeftEdge + w->Width - 1;
X                    rightx = 0;
X                }
X                leftx = 1;
X            }
X            if (!rightx && mx >= xr) {
X                if (leftx) {
X                    xl = w->LeftEdge;
X                    leftx = 0;
X                }
X                rightx = 1;
X            }
X            if (!topy && my <= yt) {
X                if (bottomy) {
X                    yb = w->TopEdge + w->Height - 1;
X                    bottomy = 0;
X                }
X                topy = 1;
X            }
X            if (!bottomy && my >= yb) {
X                if (topy) {
X                    yt = w->TopEdge;
X                    topy = 0;
X                }
X                bottomy = 1;
X            }
X            if (leftx) {
X                xl = mx;
X            } else if (rightx) {
X                xr = mx;
X            }
X            if (topy) {
X                yt = my;
X            } else if (bottomy) {
X                yb = my;
X            }
X            if (xr - xl < minx) {
X                if (leftx) {
X                    xl = xr - minx;
X                } else if (rightx) {
X                    xr = xl + minx;
X                }
X/*                leftx = rightx = 0; */
X            }
X            if (xr - xl > maxx) {
X                if (leftx) {
X                    xl = xr - maxx;
X                } else if (rightx) {
X                    xr = xl + maxx;
X                }
X/*                leftx = rightx = 0; */
X            }
X            if (yb - yt < miny) {
X                if (topy) {
X                    yt = yb - miny;
X                } else if (bottomy) {
X                    yb = yt + miny;
X                }
X/*                topy = bottomy = 0; */
X            }
X            if (yb - yt > maxy) {
X                if (topy) {
X                    yt = yb - maxy;
X                } else if (bottomy) {
X                    yb = yt + maxy;
X                }
X/*                topy = bottomy = 0; */
X            }
X            if (xl != oxl || xr != oxr || yt != oyt || yb != oyb) {
X                BuildFrame(xl, yt, xr, yb);
X                DrawFrame();
X                oxl = xl;
X                oxr = xr;
X                oyt = yt;
X                oyb = yb;
X            }
X        } else if (ev->ie_Code == IECODE_LBUTTON+IECODE_UP_PREFIX) {
X            REGISTER WORD movex, movey;
X            REGISTER WORD sizex, sizey;
X            REGISTER WORD premovex, premovey;
X            KillEvent();
X            EraseFrame();
X            UnlockLayers(LockedLayerInfo);
X            movex = xl - w->LeftEdge;
X            movey = yt - w->TopEdge;
X            sizex = xr - (xl + w->Width - 1);
X            sizey = yb - (yt + w->Height - 1);
X            premovex = 0;
X            premovey = 0;
X            if (movex < 0) {
X                premovex = movex;
X                movex = 0;
X            }
X            if (movey < 0) {
X                premovey = movey;
X                movey = 0;
X            }
X            if (premovex || premovey) {
X                MoveWindow(w, (LONG)premovex, (LONG)premovey);
X            }
X            if (sizex || sizey) {
X                SizeWindow(w, (LONG)sizex, (LONG)sizey);
X            }
X            if (movex || movey) {
X                MoveWindow(w, (LONG)movex, (LONG)movey);
X            }
X            state = waiting;
X        } else if (ev->ie_Code == IECODE_RBUTTON) {
X            KillEvent();
X            leftx = rightx = topy = bottomy = 0;
X            state = changing;
X        } else {
X            KillEvent();
X        }
X    } else if (ev->ie_Class == RAWKEY) {
X        KillEvent();
X    }
X    return ev;
X}
X
Xstruct InputEvent *Changing(ev)
XREGISTER struct InputEvent *ev;
X{
X    if (ev->ie_Class == IECLASS_RAWMOUSE) {
X        if (ev->ie_Code == IECODE_LBUTTON+IECODE_UP_PREFIX) {
X            KillEvent();
X            EraseFrame();
X            UnlockLayers(LockedLayerInfo);
X            state = waiting;
X        } else if (ev->ie_Code == IECODE_RBUTTON+IECODE_UP_PREFIX) {
X            KillEvent();
X            state = dragging;
X        } else if (ev->ie_Code != IECODE_NOBUTTON) {
X            KillEvent();
X        }
X    } else if (ev->ie_Class == RAWKEY) {
X        KillEvent();
X    }
X    return ev;
X}
X
Xstruct InputEvent *CHandler(nm0, nm1, Events)
Xstruct InputEvent *Events;
X{
X    REGISTER struct InputEvent *ev;
X
X    geta4();
X
X    for (ev = Events; ev; ev = ev->ie_NextEvent) {
X        switch(state) {
X            case waiting: {
X                ev = Waiting(ev);
X                break;
X            }
X            case startframe: {
X                ev = StartFrame(ev);
X                break;
X            }
X            case dragging: {
X                ev = Dragging(ev);
X                break;
X            }
X            case changing: {
X                ev = Changing(ev);
X                break;
X            }
X        }
X    }
X    return Events;
X}
X
XSetUpForFrame()
X{
X    xl = w->LeftEdge;
X    xr = xl + w->Width - 1;
X    yt = w->TopEdge;
X    yb = yt + w->Height - 1;
X    minx = (w->MinWidth > 70 ? w->MinWidth : 70);
X    miny = (w->MinHeight > 20 ? w->MinHeight : 20);
X    maxx = (w->MaxWidth < s->Width ? w->MaxWidth : s->Width);
X    maxy = (w->MaxHeight < s->Height ? w->MaxHeight : s->Height);
X    leftx = rightx = topy = bottomy = 0;
X    BuildFrame(xl, yt, xr, yb);
X
X      /* Lock everything - find out what happens */
X    LockedLayerInfo = &s->LayerInfo;
X    LockLayers(LockedLayerInfo);
X
X      /* Get a copy. Don't mess with somebody else's RP. */
X    CopyMem((char *)&s->RastPort, (char *)&rp, (long)sizeof(struct RastPort));
X    SetDrMd(&rp, COMPLEMENT);
X
X    OF = 0;
X    DrawFrame();
X}
END_OF_FILE
if test 9038 -ne `wc -c <'handler.c'`; then
    echo shar: \"'handler.c'\" unpacked with wrong size!
fi
# end of 'handler.c'
fi
if test -f 'makefile' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'makefile'\"
else
echo shar: Extracting \"'makefile'\" \(1029 characters\)
sed "s/^X//" >'makefile' <<'END_OF_FILE'
XOBJS=xsize.o handler.o stub.o misc.o
XEXE=xsize
XSYMS=$(EXE).sym
XSYMSRC=$(EXE).h
XQUICKSYMS=ram:$(SYMS)
X
X# Aztec
XCCFLAGS=-q +I$(QUICKSYMS) +L
XASFLAGS=
XLNFLAGS=
XLNOBJS=detach.o32 -lc32
XSYMFLAGS=+l +h$(SYMS) -o ram:null.o
XCC=cc
XAS=as
XLN=ln
X
X#Lattice
X#CCFLAGS=-v -H$(QUICKSYMS) # -O
X#ASFLAGS=-iLattice:Asm-include/
X#LNFLAGS=NOALVS SC SD ND TO $(EXE) FROM lib:cback.o
X#LNOBJS=LIB lib:lc.lib lib:amiga.lib
X#SYMFLAGS=-ph -o$(SYMS)
X#CC=lc
X#AS=asm
X#LN=blink
X
X.c.o:
X    $(CC) $(CCFLAGS) -o$*.o $*.c
X
X.s.o:
X    $(AS) $(ASFLAGS) $*.s
X
Xall: $(SYMS) $(QUICKSYMS) $(EXE)
X
X# Lattice link
X#$(EXE): $(OBJS) $(EXE).lnk
X#    blink with $(EXE).lnk
X
X#Aztec link
X$(EXE):    $(OBJS)
X    $(LN) $(LNFLAGS) $(OBJS) $(LNOBJS)
X
X$(EXE).lnk:
X    echo >ram:l1 "$(LNFLAGS)"
X    echo >ram:l2 "$(OBJS)"
X    echo >ram:l3 "$(LNOBJS)"
X    join ram:l1 ram:l2 ram:l3 as $(EXE).lnk
X    delete ram:l1 ram:l2 ram:l3
X
X$(SYMS): $(SYMSRC)
X    copy $(SYMSRC) ram:temp.c
X    $(CC) $(SYMFLAGS) ram:temp.c
X    delete ram:temp.c
X
X$(QUICKSYMS): $(SYMS)
X    copy $(SYMS) $(QUICKSYMS)
END_OF_FILE
if test 1029 -ne `wc -c <'makefile'`; then
    echo shar: \"'makefile'\" unpacked with wrong size!
fi
# end of 'makefile'
fi
if test -f 'misc.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'misc.c'\"
else
echo shar: Extracting \"'misc.c'\" \(2166 characters\)
sed "s/^X//" >'misc.c' <<'END_OF_FILE'
X/* Auto: make
X*/
X
X#define SCREENTOP\
X   (screen->TopEdge << ((screen->ViewPort.Modes & LACE)? 0: 1))
X
X#define Line(pair, xl, yt, xr, yb) \
X{ pair->xs = xl; pair->ys = yt; pair->xe = xr; pair->ye = yb; ++pair; }
X
X#define HLine(pair, xl, xr, y) Line(pair, xl, y, xr, y)
X#define VLine(pair, yt, yb, x) Line(pair, x, yt, x, yb)
X
XIMPORT struct IntuitionBase *IntuitionBase;
X
XIMPORT struct RastPort rp;
X
XWORD OF;
X
Xtypedef struct {
X    WORD xs, ys;
X    WORD xe, ye;
X} Pair;
X
XPair OldFrame[8];
XPair NewFrame[8];
X
Xstruct Screen *WhichScreen()
X{
X    REGISTER struct Screen *screen;
X    Forbid();
X    screen = IntuitionBase->FirstScreen;
X    while (screen && IntuitionBase->MouseY < SCREENTOP) {
X        screen = screen->NextScreen;
X    }
X    if (screen == NULL) {     /* Shouldn't happen */
X        screen = IntuitionBase->ActiveScreen;
X    }
X    Permit();
X    return screen;
X}
X
Xstruct Window *WhichWindow(screen)
Xstruct Screen *screen;
X{
X    struct Layer *layer;
X    layer = (struct Layer *)WhichLayer(&screen->LayerInfo,
X      (LONG)screen->MouseX, (LONG)screen->MouseY);
X    if (layer) {
X        return (struct Window *)layer->Window;
X    } else {
X        return NULL;
X    }
X}
X
XSTATIC VOID MultiDraw(rp, pairs)
Xstruct RastPort *rp;
XPair *pairs;
X{
X    REGISTER LONG i = 8;
X    REGISTER Pair *coord = pairs;
X
X    while (i--) {
X        Move(rp, (LONG)coord->xs, (LONG)coord->ys);
X        Draw(rp, (LONG)coord->xe, (LONG)coord->ye);
X        coord++;
X    }
X}
X
XVOID BuildFrame(xl, yt, xr, yb)
XWORD xl, yt, xr, yb;
X{
X    REGISTER LONG tx  = (xr - xl) / 3;
X    REGISTER LONG ty  = (yb - yt) / 3;
X    REGISTER Pair *pair = &NewFrame[0];
X
X    HLine(pair, xl, xr, yt);
X    HLine(pair, xl, xr, yt + ty);
X    HLine(pair, xl, xr, yb - ty);
X    HLine(pair, xl, xr, yb);
X    VLine(pair, yt, yb, xl);
X    VLine(pair, yt, yb, xl + tx);
X    VLine(pair, yt, yb, xr - tx);
X    VLine(pair, yt, yb, xr);
X}
X
XVOID EraseFrame()
X{
X    if (OF) {
X        MultiDraw(&rp, &OldFrame[0]);
X        OF = 0;
X    }
X}
X
XVOID DrawFrame()
X{
X    REGISTER LONG i;
X
X    WaitTOF();
X    EraseFrame();
X    MultiDraw(&rp, &NewFrame[0]);
X    i = 8;
X    while (i--) {
X        OldFrame[i] = NewFrame[i];
X    }
X    OF = 1;
X}
END_OF_FILE
if test 2166 -ne `wc -c <'misc.c'`; then
    echo shar: \"'misc.c'\" unpacked with wrong size!
fi
# end of 'misc.c'
fi
if test -f 'stub.s' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'stub.s'\"
else
echo shar: Extracting \"'stub.s'\" \(180 characters\)
sed "s/^X//" >'stub.s' <<'END_OF_FILE'
X        XREF    _CHandler
X        XDEF    _handler
X
X_handler:
X        movem.l D2/D3/A0/A1/A4/A6,-(sp)
X        jsr     _CHandler
X        movem.l (sp)+,D2/D3/A0/A1/A4/A6
X        rts
END_OF_FILE
if test 180 -ne `wc -c <'stub.s'`; then
    echo shar: \"'stub.s'\" unpacked with wrong size!
fi
# end of 'stub.s'
fi
if test -f 'xsize.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xsize.c'\"
else
echo shar: Extracting \"'xsize.c'\" \(5463 characters\)
sed "s/^X//" >'xsize.c' <<'END_OF_FILE'
X/*******************************************************************\
X*                                                                   *
X*                XSize - XWindows style window sizing               *
X*                                                                   *
X\*******************************************************************/
X/* Auto: make
X*/
X
X#define ARGVAL() (*++(*argv) || (--argc && *++argv))
X#define WriteStdOut(str) Write(StdOut, str, (LONG)strlen(str))
X#define isdigit(c) (c >= '0' && c <= '9')
X
Xstruct XSizeRsrc *XSizeRsrc = NULL;
Xstruct InputEvent *handler();
X
X/* input device */
Xstruct MsgPort *inputDevPort = NULL;
Xstruct Interrupt handlerStuff;
Xstruct IOStdReq *inputRequestBlock = NULL;
X
X/* libraries */
Xstruct IntuitionBase *IntuitionBase = NULL;
Xstruct GfxBase       *GfxBase = NULL;
Xstruct LayersBase    *LayersBase = NULL;
X
X/* detaching */
XULONG _BackGroundIO = 0;
XULONG _stack = 4096L;
XULONG _priority = 4L;
Xchar *_procname = "XSize";
X#ifdef LATTICE
Xextern BPTR _Backstdout;
X#endif LATTICE
X
XLONG hextoint(str)
XREGISTER char *str;
X{
X    REGISTER long val = 0;
X    REGISTER char c;
X    while (c = *str) {
X        val <<= 4;
X        val |= (c & 15) + (isdigit(c) ? 0 : 9);
X        str++;
X    }
X    return(val);
X}
X
XVOID CloseStuff()
X{
X    if (inputRequestBlock) {
X        if (inputRequestBlock->io_Device) {
X            inputRequestBlock->io_Command = IND_REMHANDLER;  /* Remove handler */
X            inputRequestBlock->io_Data    = (APTR)&handlerStuff;
X            DoIO(inputRequestBlock);
X            CloseDevice(inputRequestBlock);
X        }
X        DeleteExtIO(inputRequestBlock);
X    }
X    if (inputDevPort)       DeletePort(inputDevPort);
X    if (XSizeRsrc) {
X        RemResource(XSizeRsrc);
X        Kill(XSizeRsrc);
X    }
X    if (IntuitionBase)      CloseLibrary((struct Library *)IntuitionBase);
X    if (GfxBase)            CloseLibrary((struct Library *)GfxBase);
X    if (LayersBase)         CloseLibrary((struct Library *)LayersBase);
X}
X
XWORD OpenStuff()
X{
X    inputRequestBlock = NULL;
X
X    /* libraries */
X
X    if (!(GfxBase = (struct GfxBase *)OpenLibrary("graphics.library", 0L)))
X        return 0;
X    if (!(IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library", 0L)))
X        return 0;
X    if (!(LayersBase = (struct LayersBase *)OpenLibrary("layers.library", 0L)))
X        return 0;
X
X    /* input devive */
X
X    if (!(inputDevPort = CreatePort(0L, 0L)))
X        return 0;
X    if (!(inputRequestBlock = (struct IOStdReq *)CreateExtIO(inputDevPort, (LONG)sizeof(struct IOStdReq))))
X        return 0;
X    if (OpenDevice("input.device", 0L, inputRequestBlock, 0L))
X        return 0;
X
X    /* input handler */
X
X    handlerStuff.is_Data = 0;
X    handlerStuff.is_Code = (VOID (*)())handler;
X    handlerStuff.is_Node.ln_Pri = 53;        /* Ahead of intuition, please */
X    handlerStuff.is_Node.ln_Name = "XSize Input Handler";
X
X    inputRequestBlock->io_Command = IND_ADDHANDLER;
X    inputRequestBlock->io_Data    = (APTR)&handlerStuff;
X
X    DoIO(inputRequestBlock);  /* Add me. */
X
X    return 1;
X}
X
XVOID main(argc, argv)
Xint argc;
Xchar **argv;
X{
X    BPTR StdOut = (BPTR)Open("*", MODE_OLDFILE);
X    WORD create = 0;
X    WORD usage = 0;
X
X#ifdef AZTEC_C
X    Enable_Abort = 0;
X#endif AZTEC_C
X
X    if (!(XSizeRsrc = (struct XSizeRsrc *)OpenResource(XSIZERSRC))) {
X        create = 1;
X        XSizeRsrc = Create(XSizeRsrc);
X        XSizeRsrc->node.ln_Type = NT_RESOURCE;
X        XSizeRsrc->node.ln_Name = XSIZERSRC;
X        XSizeRsrc->Task = FindTask(NULL);
X        XSizeRsrc->qual = IEQUALIFIER_CONTROL;
X        AddResource(XSizeRsrc);
X    }
X
X    if (!argc) {    /* WB Startup */
X        if (!create) {     /* Second time from WB -- Remove */
X            Signal(XSizeRsrc->Task, SIGBREAKF_CTRL_C);
X            goto exitpoint;
X        } else {
X            goto skipargs;
X        }
X    }
X
X    if (create && StdOut) {
X        WriteStdOut("XSize 1.0 (c) 1990 Mikael Karlsson\n");
X    }
X
X    for (argc--, argv++; argc > 0; argc--, argv++) {
X        if (**argv == '-') { /* Argument coming up */
X            switch(*++(*argv)) {
X                case 'x': {
X                    if (ARGVAL()) {
X                        XSizeRsrc->qual = hextoint(*argv);
X                    } else {
X                        usage = 1;
X                    }
X                    break;
X                }
X                case 'Q': quit: {
X                    Close(StdOut);
X                    if (create) {
X                        goto close;
X                    } else {
X                        Signal(XSizeRsrc->Task, SIGBREAKF_CTRL_C);
X                        goto exitpoint;
X                    }
X                }
X                case '?': {
X                    usage = 1;
X                    break;
X                }
X                default: {
X                    if (StdOut) {
X                        WriteStdOut("Bad option: -");
X                        Write(StdOut, *argv, 1L);
X                        WriteStdOut(".\n");
X                    }
X                    usage = 1;
X                    break;
X                }
X            }
X        } else {
X            usage = 1;
X        }
X    }
X
X    if (usage && StdOut) {
X        WriteStdOut("Usage:\n");
X        WriteStdOut(" XSize -xXX -Q\n");
X    }
X
Xskipargs:
X    if (StdOut) {
X        Close(StdOut);
X    }
X
X    if (create) {
X        if (OpenStuff()) {
X            Wait(SIGBREAKF_CTRL_C);
X        }
Xclose:
X        CloseStuff();  /* Guess what */
X    }
X
Xexitpoint: ;
X}
END_OF_FILE
if test 5463 -ne `wc -c <'xsize.c'`; then
    echo shar: \"'xsize.c'\" unpacked with wrong size!
fi
# end of 'xsize.c'
fi
if test -f 'xsize.doc' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xsize.doc'\"
else
echo shar: Extracting \"'xsize.doc'\" \(3697 characters\)
sed "s/^X//" >'xsize.doc' <<'END_OF_FILE'
X                        XSize 1.0
X                        =========
X                  (c) Mikael Karlsson 1990
X
XDescription
X
X    XSize is a small utility that gives you X-Windows style
X    window sizing.
X
X
XLegal schmuck
X
X    XSize is NOT Public Domain. XSize is 'Freely Distributable
X    Copyrighted Software with a Shareware Option' (FDCSSO).
X
X    "Permission is hereby granted to copy XSize provided that
X     the copyright notice and this document is left intact.
X     Copies may not be made for profit."
X
X    Short and simple: Copy XSize but don't make a business
X    of it. It is of course free to include XSize on Public
X    Domain disks or putting it on a BBS. The cost of obtaining
X    XSize should not be higher than the cost of obtaining
X    it from Fred Fish.
X    If you find XSize useful, please feel free to send a
X    donation.
X    If you wish to include XSize with a commercial product,
X    please contact me first. A registred copy of the product
X    will be expected.
X
X
XStarting and stopping
X
X    Install XSize by executing 'XSize' in a CLI or double clicking
X    on the icon in Workbench. A second invocation from Workbench
X    removes XSize. To remove XSize from CLI you have to execute
X    'XSize -Q'.
X    The qualifier used to initiate the sizing routine can be set
X    using 'XSize -xXX' where XX is the hex value of the qualifier.
X    Default qualifier is 0008 (the control key).
X
XQUALIFIERS (always entered in HEX)  (This list borrowed from Matt Dillon)
X
X    0001    Left Shift
X    0002    Right Shift
X    0004    Caps Lock
X    0008    Control
X    0010    Left Alt
X    0020    Right Alt
X    0040    Left Amiga Key
X    0080    Right Amiga Key
X    0100    Numeric Key Pad Key (not useful)
X    0200    Repeat              (not useful)
X    0400    Interrupt           (not useful)
X    0800    Multibroadcast      (not useful)
X    1000    Middle Mouse Button (not normally implemented by intuition)
X    2000    Right Mouse Button
X    4000    Left Mouse Button
X
X    Note: Combinations are allowed, in which case any one of the
X          elected qualifiers along with the left, right mouse button
X          will cause the appropriate action to occur.
X
X
XUsage
X
X    XSize provides an enhanced way of resizing windows.
X    It works as follows:
X
X    There are two ways of initiating the window sizing:
X    1. Press and hold the left mouse button over the sizing
X       gadget in a window.
X    2. Press and hold the specified qualifier and press and
X       hold the left mouse button anywhere in the window.
X    A sizing frame is drawn over the window. It looks like this:
X
X    +---+---+---+
X    |   |   |   |
X    +---+---+---+
X    |   |   |   |
X    +---+---+---+
X    |   |   |   |
X    +---+---+---+
X
X    You can now move the mouse around (while still holding down
X    the left mouse button, it's ok to release the qualifier if
X    you used that way of initiating XSize) freely inside the frame.
X    Nothing happens until you reach an (outer) edge of the frame.
X    When you do, that edge starts to follow the mouse. Now only one
X    edge follows the mouse. If you move the mouse to a corner the
X    second edge that forms the corner also starts to follow the mouse.
X    To change the active edge hold down the right mouse button,
X    move to another edge and release the right mouse button.
X
X
XBugs
X
X    None that I know of, but we're walking the edge of what is
X    allowed here. I haven't had any problems though.
X
X
Xs-mail: Mikael Karlsson
X        L?vs?ttersv?gen 10
X        S-585 98  LINK?PING
X        SWEDEN
X
Xe-mail: micke@slaka.sirius.se
X        micke@slaka.UUCP
X        {mcvax|munnari|seismo}!sunic!liuida!slaka!micke
X
XPhone:  +46-13 50479
X        +46-431 50623 (in the summer)
X
END_OF_FILE
if test 3697 -ne `wc -c <'xsize.doc'`; then
    echo shar: \"'xsize.doc'\" unpacked with wrong size!
fi
# end of 'xsize.doc'
fi
if test -f 'xsize.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xsize.h'\"
else
echo shar: Extracting \"'xsize.h'\" \(973 characters\)
sed "s/^X//" >'xsize.h' <<'END_OF_FILE'
X#include <intuition/intuitionbase.h>
X#ifdef AZTEC_C
X#include <functions.h>
Xstruct IORequest *CreateExtIO(); /* This is a kludge that is necessary    */
X                                 /* since this definition is missing from */
X                                 /* manx's <functions.h> include file.    */
X#endif AZTEC_C
X#include <devices/input.h>
X#include <devices/keymap.h>
X#include <devices/console.h>
X#include <devices/clipboard.h>
X#include <exec/memory.h>
X#include <exec/interrupts.h>
X#include <graphics/gfxmacros.h>
X#include <libraries/dos.h>
X
X#define Create(_Obj)     AllocMem((LONG)sizeof(struct _Obj), MEMF_PUBLIC|MEMF_CLEAR)
X#define Kill(_Obj)       FreeMem(_Obj, (LONG)sizeof(*_Obj))
X#define Delete(_Obj)     if (_Obj) FreeMem(_Obj, (LONG)sizeof(*_Obj))
X
X#define XSIZERSRC "XSize.resource"
X
Xstruct XSizeRsrc {
X    struct Node node;
X    struct Task *Task;
X    WORD qual;
X};
X
X#define waiting     0
X#define startframe  1
X#define dragging    2
X#define changing    3
END_OF_FILE
if test 973 -ne `wc -c <'xsize.h'`; then
    echo shar: \"'xsize.h'\" unpacked with wrong size!
fi
# end of 'xsize.h'
fi
if test -f 'xsize.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xsize.uu'\"
else
echo shar: Extracting \"'xsize.uu'\" \(11317 characters\)
sed "s/^X//" >'xsize.uu' <<'END_OF_FILE'
Xbegin 664 xsize
XM```#\P`````````#``````````(```>S````<`````$```/I```'LT[Z%1185
XM4VEZ90!.50``2.<,("1M``AX`!H29RCIA+H\`#!M"KH\`#EN!'``8`)P"1(%R
XM2(%(P<*\````#]"!B(!2BF#4(`1,WP0P3EU.=4Y5``!*K(`*9SX@;(`*2J@`)
XM%&<J(&R`"C%\``H`'$'L@$(B;(`*(T@`*"\L@`I.NAR>6$\O+(`*3KH:ZEA/.
XM+RR`"DZZ'#Q83TJL@`9G"B\L@`9.NAN*6$]*K(`"9Q@O+(`"3KH=*%A/2'@`6
XM%"\L@`).NAR.4$]*K(`.9PHO+(`.3KH:KEA/2JR`$F<*+RR`$DZZ&IY83TJL:
XM@!9G"B\L@!9.NAJ.6$].74YU3E4``$*L@`I"ITAZ`,A.NAR:4$\I0(`29@9P_
XM`$Y=3G5"ITAZ`,%.NAR"4$\I0(`.9@1P`&#F0J=(>@"]3KH<;%!/*4"`%F8$V
XM<`!@T$*G0J=.NAI64$\I0(`&9@1P`&"\2'@`,"\L@`9.NALH4$\I0(`*9@1PV
XM`&"D0J<O+(`*0J=(>@"$3KH<#D_O`!!*@&<$<`!@B$*L@%!!^@R@*4B`5!E\-
XM`#6`2T'Z`&LI2(!,(&R`"C%\``D`'$'L@$(B;(`*(T@`*"\L@`I.NAM:6$]P>
XM`6``_TIG<F%P:&EC<RYL:6)R87)Y`&EN='5I=&EO;BYL:6)R87)Y`&QA>65R!
XM<RYL:6)R87)Y`&EN<'5T+F1E=FEC90!84VEZ92!);G!U="!(86YD;&5R``!.S
XM5?_X2'@#[4AZ`FQ.NAC64$\K0/_\0FW_^D)M__A"K(!82'H"5$ZZ&VY83RE`T
XM@`)F5#M\``'_^DAY``$``4AX`!1.NAJF4$\I0(`"(&R``A%\``@`""!L@`)#2
XM^@(K(4D`"D*G3KH:K%A/(&R``B%```X@;(`",7P`"``2+RR``DZZ&)Y83TJM$
XM``AF($IM__IF%DAX$``@;(`"+R@`#DZZ&S)03V```<Q@``&<2FW_^F<B2JW_*
XM_&<<2'H!_DZZ$>Q83R\`2'H!T"\M__Q.NAA`3^\`#%.M``A8K0`,8``!'"!M2
XM``PB4`P1`"UF``$`(&T`#%*0(E`0$4B`2,!@``#.(&T`#%*0(E!*$6824ZT`[
XM"&<B6*T`#")M``Q*D6<6(&T`#"\03KK\Q%A/(&R``C%``!)@!CM\``'_^&``B
XM`*XO+?_\3KH76%A/2FW_^F<$8``!'DAX$``@;(`"+R@`#DZZ&G)03V```0P[;
XM?``!__A@>DJM__QG3DAZ`7!.NA$N6$\O`$AZ`58O+?_\3KH7@D_O``Q(>``!A
XM(&T`#"\0+RW__$ZZ%VQ/[P`,2'H!3TZZ$/Q83R\`2'H!0"\M__Q.NA=03^\`'
XM##M\``'_^&`>D+P````_9Y20O````!)G`/]BD+P````G9P#_&F"&8`8[?``!<
XM__A3K0`(6*T`#$JM``AN`/[@2FW_^&<^2JW__&<X2'H`]$ZZ$)983R\`2'H`[
XMX"\M__Q.NA;J3^\`#$AZ`/!.NA!Z6$\O`$AZ`-0O+?_\3KH6SD_O``Q*K?_\X
XM9PHO+?_\3KH62EA/2FW_^F<63KK\>DI`9PI(>!``3KH9>%A/3KK[ODY=3G4JF
XM`%A3:7IE+G)E<V]U<F-E`%A3:7IE+G)E<V]U<F-E`%A3:7IE(#$N,""I(#$Y'
XM.3`@36EK865L($MA<FQS<V]N"@!84VEZ92`Q+C`@J2`Q.3DP($UI:V%E;"!+/
XM87)L<W-O;@H`0F%D(&]P=&EO;CH@+0!"860@;W!T:6]N.B`M`"X*`"X*`%5S2
XM86=E.@H`57-A9V4Z"@`@6%-I>F4@+7A86"`M40H`(%A3:7IE("UX6%@@+5$**
XM`$Y5```O"B1M``@,*@`"``1F``"^#&H`:``&9@``M$ZZ"-0I0(!<9P``J"\LF
XM@%Q.N@D>6$\I0(!@9P``EB!L@&`(*````!MG``"((&R`8#EH``Z`S"!L@&`YJ
XM:``,@,X@;(!@,"@`"DC`D+P````*,BR`SDC!L(%L-B!L@&`P+(#.L&@`"FPH"
XM(&R`8#`H``A(P)"\````$3(L@,Q(P;"!;`X@;(!@,"R`S+!H``AM%'``,"H`.
XM""!L@`(R*``22,'`@6<..7P``8`J3KH&LD(J``0@"B1?3EU.=4Y5```O"B1M9
XM``@,*@`"``1F``$V#&H`Z``&9AI"*@`$3KH*)"\L@,A.NAA>6$]";(`J8``!L
XM$@QJ`/\`!F8``01*DF<B(%(,*``&``1G%"!2#"@``@`$9@X@4@QH`/\`!F8$]
XM)%)@VB!L@%PB;(!<+&D`4#`H`!+0;@`(.4"`S"!L@%PB;(!<+&D`4#`H`!#0+
XM;@`*.4"`SDIL@,QL!$)L@,P@;(!<,"R`S+!H``QM#B!L@%PP*``,4T`Y0(#,^
XM2FR`SFP$0FR`SB!L@%PP+(#.L&@`#FT.(&R`7#`H``Y30#E`@,XP+(#,L&R`/
XMT&X..7P``8#H.7P``H`J8$8P+(#,L&R`U&T..7P``8#J.7P``H`J8"XP+(#.]
XML&R`TFX..7P``8#L.7P``H`J8!8P+(#.L&R`UFT,.7P``8#N.7P``H`J8`1"C
XM*@`$8!)P`!`J``2PO```!`!F!$(J``0@"B1?3EU.=4Y5__Y(YP\P)&T`"`PJ0
XM``(`!&8`!#(,:@#_``9F``,,2I)G(B!2#"@`!@`$9Q0@4@PH``(`!&8.(%(,`
XM:`#_``9F!"128-H@;(!<(FR`7"QI`%`P*``2T&X`"#E`@,P@;(!<(FR`7"QI:
XM`%`P*``0T&X`"CE`@,Y*;(#,;`1";(#,(&R`7#`L@,RP:``,;0X@;(!<,"@`B
XM#%-`.4"`S$IL@,YL!$)L@,X@;(!<,"R`SK!H``YM#B!L@%PP*``.4T`Y0(#.O
XM2FR`Z&8V,"R`S+!L@-!N+$IL@.IG("!L@&`P*``$2,`@;(!@,B@`"$C!T(%3:
XM@#E`@-1";(#J.7P``8#H2FR`ZF8D,"R`S+!L@-1M&DIL@.AG#B!L@&`Y:``$P
XM@-!";(#H.7P``8#J2FR`[&8V,"R`SK!L@-)N+$IL@.YG("!L@&`P*``&2,`@3
XM;(!@,B@`"DC!T(%3@#E`@-9";(#N.7P``8#L2FR`[F8D,"R`SK!L@-9M&DILQ
XM@.QG#B!L@&`Y:``&@-)";(#L.7P``8#N2FR`Z&<(.6R`S(#08`Q*;(#J9P8Y$
XM;(#,@-1*;(#L9P@Y;(#.@-)@#$IL@.YG!CEL@,Z`UC`L@-1(P#(L@-!(P9"!H
XM,BR`X$C!L(%L)DIL@.AG#C`L@-20;(#@.4"`T&`22FR`ZF<,,"R`T-!L@.`YX
XM0(#4,"R`U$C`,BR`T$C!D($R+(#B2,&P@6\F2FR`Z&<.,"R`U)!L@.(Y0(#0-
XM8!)*;(#J9PPP+(#0T&R`XCE`@-0P+(#62,`R+(#22,&0@3(L@.1(P;"!;"9*X
XM;(#L9PXP+(#6D&R`Y#E`@-)@$DIL@.YG##`L@-+0;(#D.4"`UC`L@-9(P#(LH
XM@-)(P9"!,BR`YDC!L(%O)DIL@.QG#C`L@-:0;(#F.4"`TF`22FR`[F<,,"R`:
XMTM!L@.8Y0(#6,"R`T+!L@-AF'C`L@-2P;(#<9A0P+(#2L&R`VF8*,"R`UK!LK
XM@-YG1#`L@-9(P"\`,"R`U$C`+P`P+(#22,`O`#`L@-!(P"\`3KH$KD_O`!!.W
XMN@7X.6R`T(#8.6R`U(#<.6R`TH#:.6R`UH#>8``!'`QJ`.@`!F8``.I"*@`$D
XM3KH%JB\L@,A.NA/D6$\@;(!@."R`T)AH``0@;(!@.BR`TIIH``8P+(#42,`RZ
XM+(#02,$@;(!@-"@`"$C"TH)3@9"!/``P+(#62,`R+(#22,$@;(!@-"@`"DC"C
XMTH)3@9"!/@"7RT)M__Y*1&P$-D1X`$I%;`8[1?_^>@`P"V8&2FW__F<:,"W_E
XM_DC`+P`P"TC`+P`O+(!@3KH3)D_O``Q*1F8$2D=G&#`'2,`O`#`&2,`O`"\LM
XM@&!.NA,83^\`#$I$9@1*16<8,`5(P"\`,`1(P"\`+RR`8$ZZ$N9/[P`,0FR`M
XM*F`H#&H`:0`&9AQ"*@`$0FR`[D)L@.Q";(#J0FR`Z#E\``.`*F`$0BH`!&`25
XM<``0*@`$L+P```0`9@1"*@`$(`I,WPSP3EU.=4Y5```O"B1M``@,*@`"``1F.
XM0@QJ`.@`!F880BH`!$ZZ!&(O+(#(3KH2G%A/0FR`*F`@#&H`Z0`&9@Q"*@`$A
XM.7P``H`J8`P,:@#_``9G!$(J``1@$G``$"H`!+"\```$`&8$0BH`!"`*)%].(
XM74YU3E4``"\*3KH)*B1M`!!@5#`L@"I(P&`X+PI.NOC:6$\D0&`^+PI.NOFF.
XM6$\D0&`R+PI.NOK\6$\D0&`F+PI.NO]26$\D0&`:_[C_Q/_0_]RPO`````1DT
XM"N.`,#L`[$[[```D4B`*9J@@+0`0)%].74YU3E4``"!L@&`Y:``$@-`P+(#0Y
XM2,`@;(!@,B@`"$C!T(%3@#E`@-0@;(!@.6@`!H#2,"R`TDC`(&R`8#(H``I(#
XMP="!4X`Y0(#6(&R`8`QH`$8`$&\,(&R`8#`H`!!(P&`"<$8Y0(#@(&R`8`QH2
XM`!0`$F\,(&R`8#`H`!)(P&`"<!0Y0(#D(&R`8'``,"@`%"!L@%PR*``,2,&P1
XM@60,(&R`8'``,"@`%&`*(&R`7#`H``Q(P#E`@.(@;(!@<``P*``6(&R`7#(H>
XM``Y(P;"!9`P@;(!@<``P*``68`H@;(!<,"@`#DC`.4"`YD)L@.Y";(#L0FR`%
XMZD)L@.@P+(#62,`O`#`L@-1(P"\`,"R`TDC`+P`P+(#02,`O`$ZZ`59/[P`0%
XM(&R`7-'\````X"E(@,@O+(#(3KH0I%A/2'@`9$AL@&0@;(!<2&@`5$ZZ#7Q/<
XM[P`,2'@``DAL@&1.NA`<4$]";(#P3KH"7DY=3G5(YS#*3KK^'DS?4PQ.=4Y59
XM```O"DZZ#OH@;(`.)&@`/"`*9RP@;(`.,"@`1$C`,BH`"DC!+P`(*@`"`$UGL
XM!'``8`)P`>&A(!^P@6P$)%)@T"`*9@@@;(`.)&@`.$ZZ#S8@"B1?3EU.=4Y50
XM__P@;0`(,"@`$$C`+P`@;0`(,"@`$DC`+P`@;0`(2&@`X$ZZ#_A/[P`,*T#_-
XM_$JM__QG#"!M__P@*``H3EU.=7``8/A.50``2.<(('@()&T`#"`$4X1*@&<Z,
XM,"H``DC`+P`P$DC`+P`O+0`(3KH/(D_O``PP*@`&2,`O`#`J``1(P"\`+RT`[
XM"$ZZ#O1/[P`,4(I@ODS?!!!.74YU3E4``$CG#"`P+0`22,`R+0`*2,&0@7(#N
XM3KH)%"@`,"T`%DC`,BT`#DC!D(%R`TZZ"/XJ`$'L@3(D2#2M``HU;0`.``(U:
XM;0`2``0U;0`.``90BC2M``HP+0`.2,#0A35```(U;0`2``0P+0`.2,#0A35`R
XM``90BC2M``HP+0`62,"0A35```(U;0`2``0P+0`62,"0A35```90BC2M``HU/
XM;0`6``(U;0`2``0U;0`6``90BC2M``HU;0`.``(U;0`*``0U;0`6``90BC`M7
XM``I(P-"$-(`U;0`.``(P+0`*2,#0A#5```0U;0`6``90BC`M`!)(P)"$-(`U4
XM;0`.``(P+0`22,"0A#5```0U;0`6``90BC2M`!(U;0`.``(U;0`2``0U;0`6N
XM``90BDS?!#!.74YU3E4``$IL@/!G$DAL@/)(;(!D3KK^8E!/0FR`\$Y=3G5..
XM50``+P1.N@V\8=1(;($R2&R`9$ZZ_D!03W@((`13A$J`9QX@!.>`($!#[(#R(
XMT<D@!.>`(D!-[($RT\X@V2#98-HY?``!@/`H'TY=3G5.50``+PI(;0`,2&T`M
XM"$ZZ`29(>0`!```P+(`XP?P`!B\`3KH,$BE`@7)/[P`09A1"ITAY``$``$ZZ\
XM"DA03RYL@79.=2!L@7)":``$(&R!<C%\``$`$"!L@7(Q?``!``H@;(%V("R!V
XM=I"H``10@"E`@7H@;(%Z(+Q-04Y80J=.N@O>)$!*K0`(6$]G'"\M``PO+0`(P
XM+PI.N@0@*7P````!@%A/[P`,8$)(:@!<3KH,B$AJ`%Q.N@O@*4"!?B!L@7Y*W
XMJ``D4$]G$"!L@7XB:``D+Q%.N@DX6$\O+(%^+PI.N@7Z*6R!?H&"4$].N@DXD
XM(&R!<B"`3KH)2"!L@7(A0``&9Q9(>`/M2'H`+$ZZ"20@;(%R(4``#%!/+RR!5
XM@B\L@89.NO`F0J=.N@<.3^\`#"1?3EU.=2H`3E7_]$CG#C!"ITZZ"QPD0$JJ@
XM`*Q83V<``4A"ITZZ"+183RE`@#XO`$ZZ"*@O+(`^3KH(L"E`@#X@*@"LY8`JJ
XM`"!%+"@`/$AX`"%(>@)B3KH+2"M`__Q/[P`09C@@;(%V(F@`""!I``0B:/_T(
XM(&G_]-'\```!K"M(__@@12)M__@@*``\L)%G"DAX`&1.N@9R6$]@#B\M__Q.?
XMN@C:0JW_^%A/2JW_^&<&(&W_^$*02JR`'F8,($4@*``TY8`I0(`>2JR`&F<2V
XM2'@#[4AZ`>Y.N@@J*4"`+%!/(&T`""E0@#!"IR\L@#!.N@H8*4"`-"\L@#`O"
XM+(`T(&T`#"\03KH!T"!%("@`$.6`)D!"IQ`32(!(P%*`+P!.N@GD*4"`.A`3Q
XM2(!(P%*`+P`O+(`Z+PM.N@&>3^\`*"\L@78O+(`>+P8O+(`B+RR`)DZZ!W0@.
XM14*H`#Q/[P`0+E]P`$YU8``!2"!J``HB;(`F$!BP&68$2@!F]I`A2(!(P&8`2
XM`2P@*@"`Y8`K0/_X(&W_^"`H``SE@"M`__@K;?_X__QX`DJM__AG$"!M__@@J
XM$.6`*T#_^%)$8.I"IW``,`13@.>`($!(:``83KH)/"M`__0K;?_\__@@;?_T;
XM,40`#G@`4$]*K?_X9SQP`#`$YX`@0-'M__0B;?_X68DA20`0(&W_^'``,`3GX
XM@")`T^W_]"-H__P`%"!M__@@$.6`*T#_^%)$8+YP`#`$YX`@0-'M__0A;(`T[
XM`!`P!%)$<@`R`.>!($'1[?_T(6R`,``4<``P!.>`($#1[?_T(6R`.@`0,`12"
XM1'(`,@#G@2!!T>W_]")L@#H0$4B`2,!2@"%``!0O+?_T2&H`2DZZ!KPO+(`^0
XM3KH&2"5L@"P`H"!M``@@K(`P(&T`#""L@#1/[P`,3-\,<$Y=3G5D;W,N;&EBG
XM<F%R>0`J`"!O``0@"$H89OR1P"`(4X!.=4SO`P``!'``("\`#+/(9@).=6,8D
XMT,#2P&`"$R!1R/_\D+P``0``:O).=1+84<C__)"\``$``&KR3G5A<$/L@$)%H
XM[(!"M<EF#C(\`%]K"'0`(L)1R?_\*4^!=BQX``0I3H&*2.>`@`@N``0!*6<0P
XM2_H`"$ZN_^)@!D*G\U].<T/Z`"!.KOYH*4"!CF8,+CP``X`'3J[_E&`$3KK[?
XM8E!/3G5D;W,N;&EB<F%R>0!)^0``?_Y.=4Y5``!(YPPP)&T`$"!M``A*J`"L1
XM9Q@@;0`(("@`K.6`*``@1"`H`!#E@"9`8`0F;(`Z$!-(@$C`T*T`#%2`*4"!&
XMDD*G+RR!DDZZ!S0I0(&64$]F"$S?##!.74YU$!-(@$C`*@`O!2!+4H@O""\LV
XM@99.N@&.(&R!EM'%0_H!6!#99OPO+0`,+PHO+(&63KH!3B!L@99",%@`*7P`$
XM```!@88@;(&6T<4F2%*+)$M/[P`8$!-(@$C`*@"PO````"!G(+J\````"6<8_
XMNKP````,9Q"ZO`````UG"+J\````"F8$4HM@S`P3`"!M``",#!,`(F8R4HL@L
XM2U*+$!!(@$C`*@!G("!*4HH0A;J\````(F80#!,`(F8$4HM@!D(J__]@`F#2>
XM8$0@2U*+$!!(@$C`*@!G,+J\````(&<HNKP````)9R"ZO`````QG&+J\````_
XM#6<0NKP````*9P@@2E**$(5@PB!*4HI"$$J%9@)3BU*L@89@`/\\0A)"IR`L&
XM@892@.6`+P!.N@7X*4"!@E!/9@A"K(&&8`#^OGH`)FR!EF`>(`7E@"!L@8(A7
XMBP@`($L@"$H89OR1P%.(4HC7R%*%NJR!AFW<(`7E@"!L@8)"L`@`8`#^@B``O
XM,#Q__V`$,"\`#B!O``1*&&;\4T@B;P`(4T`0V5?(__QG`D(0("\`!$YU3.\#K
XM```$(`@B+P`,8`(0V5?)__QG!E)!8`)"&%')__Q.=4Y5``!(YPXP)&T`"$*G5
XM2'H`CDZZ!>`I0(&:4$]F"$S?#'!.74YU(&T`#")H`"0O*0`$3KH&BB@`6$]G4
XM4DAZ`&T@1"\H`#9.N@9<)D!*@%!/9S1(>`/M+PM.N@+\+`!03V<D(`;E@"H`!
XM($4E:``(`*0E1@"<2'@#[4AZ`#A.N@+8)4``H%!/+P1.N@8H6$\O+(&:3KH#F
XM.$*L@9I83V"`:6-O;BYL:6)R87)Y`%=)3D1/5P`J`$CG2`!"A$J`:@1$@%)$E
XM2H%J!D2!"D0``6$^2D1G`D2`3-\`$DJ`3G5(YT@`0H1*@&H$1(!21$J!:@)$]
XM@6$:(`%@V"\!81(@`2(?2H!.=2\!808B'TJ`3G5(YS``2$%*068@2$$V`30`Y
XM0D!(0(##(@!(0#("@L,P`4)!2$%,WP`,3G5(028!(@!"04A!2$!"0'0/T(#3U
XM@;:!8@22@U)`4<K_\DS?``Q.=4Y5``!*K(&>9P8@;(&>3I`O+0`(3KH`"%A/4
XM3EU.=4Y5__PO!"MM``C__$JL@7)G+'@`8`HO!$ZZ`/Q83U*$,"R`.$C`N(!MM
XM[#`L@#C!_``&+P`O+(%R3KH#[%!/2JR!HF<&(&R!HDZ02JR`/F<*+RR`/DZZO
XM`9Q83TJL@:9G""!L@:8@K(&J2JR!KF<*+RR!KDZZ`>)83TJL@;)G"B\L@;).B
XMN@'26$]*K(&V9PHO+(&V3KH!PEA/2JR!NF<*+RR!NDZZ`;)83RQX``0(+@`$2
XM`2EG%"\-2_H`"DZN_^(J7V`&0J?S7TYS2JR!?F8J2JR!EF<B+RR!DB\L@99.!
XMN@-(("R!AE*`Y8`O`"\L@8).N@,V3^\`$&`.3KH#("\L@7Y.N@.X6$\@+?_\0
XM+FR!=DYU*!].74YU3E4``$CG#B`H+0`(<@8@!$ZZ`$0D0-7L@7)*A&T.,"R`+
XM.$C`N(!L!$J29A(I?`````*!OG#_3-\$<$Y=3G4P*@`$P'R``&8(+Q).N@`RA
XM6$]"DG``8.!(YW``-`'$P"8!2$/&P$A#0D/4@TA`P,%(0$)`T(),WP`.3G5.1
XM^@`"(B\`!"QL@8Y.[O_<+P1,[P`>``@L;(&.3J[_=B@?3G5.^@`"(B\`!"QL\
XM@8Y.[O^"(B\`!"QL@8Y.[O^@+&R!CD[N_\I.^@`"3.\`!@`$+&R!CD[N_^(L.
XM;(&.3N[_Q$[Z``(B+P`$+&R!CD[N_Z9.^@`"3.\`#@`$+&R!CD[N_]`B;P`$_
XM+&R!BD[N_AI,[P,```0L;(&*3N[_"DCG`01,[R"```PL;(&*3J[_E$S?((!.'
XM=2)O``0L;(&*3N[^/D[Z``(B;P`$+&R!BD[N_F),[P,```0@+P`,+&R!BD[N_
XM_9!.50``2.<(($AX__].N@#0*`"PO/____]83V8*<`!,WP003EU.=4AY``$`C
XM`4AX`").N@$X)$!*@%!/9@PO!$ZZ`8)P`%A/8-8E;0`(``H5;0`/``D5?``$!
XM``A"*@`.%40`#T*G3KH!+"5``!!*K0`(6$]G"B\*3KH`6EA/8`I(:@`43KH!/
XM5EA/(`I@DDY5```O"B1M``A*J@`*9P@O"DZZ`8Y83Q5\`/\`""5\_____P`4[
XM<``0*@`/+P!.N@$&2'@`(B\*3KH`Z$_O``PD7TY=3G4B;P`$+&R!BD[N_IX@M
XM+P`$+&R!BD[N_K9.50``+PI*K0`(9@AP`"1?3EU.=4AY``$``2\M``Q.N@!@#
XM)$!*@%!/9@1P`&#@%7P`!0`(-6T`#@`2)6T`"``.(`I@RDY5```O"B1M``@@8
XM"F8&)%].74YU%7P`_P`()7S_____`!0E?/____\`&'``,"H`$B\`+PI.N@!*[
XM4$]@TD[Z``),[P`#``0L;(&*3N[_.DCG`P`B;P`,+&R!BDZN_CA,WP#`3G5.5
XM^@`"(F\`!"QL@8I.[O[:3OH``BQL@8I.[O]\3OH``B)O``0@+P`(+&R!BD[N!
XM_RX@+P`$+&R!BD[N_K`@;P`$+&R!BD[N_HP@;P`$((A8D$*H``0A2``(3G4@N
XM;P`$3.\"`0`((B\`$"QL@8I.[OY$3OH``BQL@8HB;P`$("\`"$[N_=@B;P`$Z
XM("\`""QL@8I.[OX.+&R!BD[N_W8B;P`$+&R!BD[N_I@B;P`$+&R!BD[N_A0B(
XM;P`$+&R!BD[N_H8B;P`$("\`""QL@8I.[OZ\("\`!"QL@8I.[O["(&\`!"QLX
XM@8I.[OZ`(F\`!$SO``,`""QL@!).[O\*(F\`!$SO``,`""QL@!).[O\0(F\`P
XM!"`O``@L;(`23N[^GBQL@!).[O[R3.\#```$+&R!FD[N_Z`@;P`$+&R!FD[N%
XM_Z8@;P`$+&R!FD[N_[(@;P`$3.\``P`(+&R`#D[N_U@@;P`$3.\``P`(+&R`;
XM#D[N_N`@;P`$+&R`%D[N_Y0@;P`$+&R`%D[N_XX@;P`$3.\``P`(+&R`%D[N%
XM_WP``````^P````!`````0``%8H````````#\@```^H````0````````````]
XM````````````````````````````$``````$````!```````````````````8
XM`!0``````````````^P````!`````````"0````````#\@```^L````!```#/
X!\A0`&
X``
Xend
Xsize 8056
END_OF_FILE
if test 11317 -ne `wc -c <'xsize.uu'`; then
    echo shar: \"'xsize.uu'\" unpacked with wrong size!
fi
# end of 'xsize.uu'
fi
echo shar: End of archive 1 \(of 1\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have the archive.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
-- 
Mail submissions (sources or binaries) to <amiga@cs.odu.edu>.
Mail comments to the moderator at <amiga-request@cs.odu.edu>.
Post requests for sources, and general discussion to comp.sys.amiga.