Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator) (02/11/90)
Submitted-by: <edavies@sanjuan.uvic.ca>
Posting-number: Volume 90, Issue 064
Archive-name: applications/surf-r2/part02
#!/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 2 (of 4)."
# Contents: gadgetuse.c getfilenames.c mapcalc.c menu_files.c
# menu_image.c menu_scrn.c revolve.c writeilbm.c
# Wrapped by tadguy@xanth on Sat Feb 10 15:47:40 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'gadgetuse.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'gadgetuse.c'\"
else
echo shar: Extracting \"'gadgetuse.c'\" \(5801 characters\)
sed "s/^X//" >'gadgetuse.c' <<'END_OF_FILE'
X/* this file contains definition for the screen */
X
X#include "scrnio.ih"
X#include <exec/memory.h>
X#ifdef MANX
X#include <functions.h>
X#endif
X
X#include "scrndef.h"
X#include "gadgetdef.h"
X#include "mytypes.h"
X#include "poly.h"
X#include "readilbm.h"
X
X#define GetExtens(gei) ((struct GadExtens *)gei->UserData)
X
X
Xvoid GadgetSetVal(gad)
X struct Gadget *gad;
X{
X struct GadExtens *vp;
X struct PropInfo *prop;
X long gadval;
X
X if( !(gad->GadgetType & PROPGADGET) ) {
X return;
X }
X
X if( !gad->GadgetRender ) {
X gad->GadgetRender = (APTR) malloc(sizeof(struct Image));
X if( !gad->GadgetRender ) {
X OutErr("Not enough memory for gadgets");
X CloseDisplay();
X exit( 0 );
X }
X }
X if( !gad->SpecialInfo ) {
X static struct PropInfo dummyprop = {
X FREEHORIZ|AUTOKNOB,
X 0x8000, 1, /* HorizPot = initial value */
X 0xff, 0, /* not really of interest */
X 0,0,0,0,0,0
X };
X
X gad->SpecialInfo = (APTR) malloc(sizeof(struct PropInfo));
X if( !gad->SpecialInfo ) {
X OutErr("Not enough memory for gadgets");
X CloseDisplay();
X exit( 0 );
X }
X *(struct PropInfo *)gad->SpecialInfo = dummyprop;
X }
X
X vp = GetExtens( gad );
X if(!vp) {
X return;
X }
X prop = (struct PropInfo *) gad->SpecialInfo;
X
X if( vp->isfloat ) {
X gadval = (long)( (long)MAXPOT *
X ( vp->curfval - vp->minfval )/(vp->maxfval - vp->minfval));
X prop->HorizBody = MAXPOT /( 15 * 8 );
X }
X else {
X gadval = ( (long)MAXPOT *
X ( (long) vp->curival - vp->minival))/(vp->maxival - vp->minival);
X prop->HorizBody = MAXPOT /( vp->maxival - vp->minival );
X }
X
X prop->HorizPot = gadval;
X}
X
X
X
Xvoid GadgetUpdate(gad, exists)
X struct Gadget *gad;
X bool exists; /* has the gadget already been displayed? */
X{
X struct GadExtens *vp;
X long potvalue;
X char dbuff[25];
X char *tx, *dx;
X struct IntuiText *it;
X
X if(!( gad->GadgetType & PROPGADGET) ) {
X return;
X }
X
X vp = GetExtens( gad );
X if(!vp) return;
X
X potvalue = ((struct PropInfo *) gad->SpecialInfo)->HorizPot;
X
X if( vp->isfloat ) {
X float temp;
X temp = ( potvalue * (vp->maxfval - vp->minfval ))/ MAXPOT
X + vp->minfval;
X vp->curfval = temp;
X#if !MANX
X sprintf(dbuff,"%f ", temp);
X#else
X ftoa(temp, dbuff, sizeof(dbuff)-4, 1);
X#endif !MANX
X }
X else {
X long temp;
X temp = (long)( potvalue * (vp->maxival - vp->minival ))/ MAXPOT
X + vp->minival;
X vp->curival = temp;
X sprintf(dbuff,"%-12d", temp);
X }
X /*
X * find '['
X */
X it = gad->GadgetText;
X for( tx = (char *)it->IText; *tx && *tx != '['; tx++ ) {
X ;
X }
X if( !*tx ) {
X return; /* something screwy */
X }
X tx++; /* skip past opening bracket */
X dx = dbuff;
X while( *tx != ']' ) {
X *tx++ = *dx++;
X }
X
X if(exists){
X long tempx, tempy;
X tempx = it->LeftEdge + gad->LeftEdge;
X tempy = it->TopEdge + gad->TopEdge + 6; /*fudge factor for baseline*/
X Move( CntrlWin->RPort, tempx, tempy );
X SetAPen(CntrlWin->RPort,it->FrontPen );
X Text( CntrlWin->RPort, it->IText, strlen(it->IText ));
X }
X}
X
Xvoid SetHourGlass() {
X SetPointer( SurfWin, HourGlass, 16, 16, MPtrXOffset, MPtrYOffset);
X SetPointer( GadWin, HourGlass, 16, 16, MPtrXOffset, MPtrYOffset);
X SetPointer( CntrlWin, HourGlass, 16, 16, MPtrXOffset, MPtrYOffset);
X}
X
Xvoid ClearHourGlass() {
X ClearPointer(SurfWin);
X ClearPointer(GadWin);
X ClearPointer(CntrlWin);
X}
X
Xvoid GadgetHandler(gadaddr)
X struct Gadget *gadaddr;
X{
X short curival;
X float curfval;
X
X if( gadaddr->UserData ) {
X GadgetUpdate( gadaddr, true );
X curival = ((struct GadExtens *) gadaddr->UserData)->curival;
X curfval = ((struct GadExtens *) gadaddr->UserData)->curfval;
X }
X
X switch( (enum GadgetName) gadaddr->GadgetID ) {
X case N_PtLocX:
X LightSrc.x = (float)curival;
X break;
X case N_PtLocY:
X LightSrc.y = (float)curival;
X break;
X case N_BackPlane:
X BackColor = curival;
X break;
X case N_PtLocZ:
X LightSrc.z = (float)curival;
X break;
X case N_BkIntens:
X Ambience = curfval;
X break;
X case N_PtIntens:
X PtIntensity = curfval;
X break;
X case N_Kdiffuse:
X Kd = curfval;
X break;
X case N_Kspec:
X Ks = curfval;
X break;
X case N_Map:
X /* ResetCurve(); */
X SetHourGlass();
X RevMap();
X ClearHourGlass();
X break;
X case N_Wire:
X SetHourGlass();
X RevNoShade();
X ClearHourGlass();
X break;
X case N_Shaded:
X SetHourGlass();
X RevShade();
X ClearHourGlass();
X break;
X case N_EditBez:
X SetFitBez();
X break;
X case N_DefLines:
X SetPolyDraw();
X break;
X case N_RevAngle:
X SetRotRange( curival );
X break;
X case N_RevStart:
X SetRotStart( curival );
X break;
X case N_TiltAng:
X SetSecAng( curival );
X break;
X case N_RevSlices:
X SetRevMesh( curival );
X break;
X case N_BezSlices:
X SetBezMesh( curival );
X break;
X case N_SurfDist:
X SetSurfDist( curival);
X break;
X case N_RepV:
X MapRepV = curival;
X PrepImgPix();
X break;
X case N_RepH:
X MapRepH = curival;
X PrepImgPix();
X break;
X case N_GoSurf:
X ScreenToFront( SurfScrn );
X break;
X case N_GoPanel:
X WBenchToFront();
X WindowToFront( CntrlWin );
X break;
X default:
X break;
X }
X}
END_OF_FILE
if test 5801 -ne `wc -c <'gadgetuse.c'`; then
echo shar: \"'gadgetuse.c'\" unpacked with wrong size!
fi
# end of 'gadgetuse.c'
fi
if test -f 'getfilenames.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'getfilenames.c'\"
else
echo shar: Extracting \"'getfilenames.c'\" \(4299 characters\)
sed "s/^X//" >'getfilenames.c' <<'END_OF_FILE'
X#include <intuition/intuition.h>
X#include "scrnio.ih"
X#include <exec/memory.h>
X#ifdef MANX
X#include <functions.h>
X#endif
X
X#include "scrndef.h"
X#include "mytypes.h"
X
X
X#define StringSize 40
X#define ROW 8
X#define COL 8
X#define TextX COL
X#define TextY (ROW/2)
X#define StringX 8
X#define StringY 12
X#define ReqSizeX 50*COL
X#define ReqSizeY 6*ROW
X
X#define CodeGo 100
X#define CodeCancel 101
X
X/*
X * declarations for a cancel button to be used by both
X * requestors.
X */
Xstatic struct IntuiText TextCancel = {
X 1,-1,JAM1, 2, 1, NULL,(UBYTE *) "Cancel", NULL };
X
Xstatic short S_Cancel[] = {
X -2,-1, -2,ROW+1, 6*COL+2,ROW+1, 6*COL+2,-1, -2,-1
X };
X
Xstatic struct Border B_Cancel = { 0, 0, 1, 0, JAM1, 5, S_Cancel, NULL };
X
Xstatic struct Gadget G_Cancel = {
X NULL,
X 10*COL, ROW *4, 6*COL, ROW, /* loc and size of hit box */
X GADGHBOX, /* complemented when pressed */
X RELVERIFY, /* just get gadget up messages */
X BOOLGADGET | REQGADGET,
X (APTR)&B_Cancel, NULL,
X &TextCancel,
X 0, NULL,
X (int)CodeCancel,
X NULL
X };
X
X/*
X * String gadget to get ilbm filename
X */
Xstatic char OutTitle[] = { "output filename:" };
Xstatic char InTitle[] = { "input filename:" };
X
Xstatic struct IntuiText TextOutFile = {
X 1,1,JAM1, TextX, TextY, NULL,
X (UBYTE *)OutTitle, NULL
X };
Xstatic struct IntuiText TextInFile = {
X 1,1,JAM1, TextX, TextY, NULL,
X (UBYTE *)InTitle, NULL
X };
X
X
Xstatic char OutNameBuff[StringSize] = { "out.ilbm" };
Xstatic char InNameBuff[StringSize] = { "in.ilbm" };
Xstatic char undo[StringSize];
X
Xstatic struct StringInfo S_OutFile = {
X (UBYTE *)OutNameBuff,
X (UBYTE *)undo,
X 0,
X sizeof( OutNameBuff),
X 0,
X 0,
X 13,
X 0,
X 0,0,NULL,0, NULL
X};
X
Xstatic struct StringInfo S_InFile = {
X (UBYTE *)InNameBuff,
X (UBYTE *)undo,
X 0,
X sizeof( InNameBuff),
X 0,
X 0,
X 13,
X 0,
X 0,0,NULL,0, NULL
X};
X
Xstatic short BD_InOut[] = {
X -2,-1, -2, ROW, (StringSize-1)*COL+1,ROW,
X (StringSize-1)*COL+1,-1, -2, -1
X };
X
Xstatic struct Border B_InOut = { 0, 0, 1, 0, JAM1, 5, BD_InOut, NULL };
X
Xstatic struct Gadget G_OutFile = {
X &G_Cancel,
X StringX , StringY, /* loc */
X sizeof(OutNameBuff)*COL, ROW, /* size */
X GADGHCOMP,
X RELVERIFY /* | STRINGCENTER */,
X STRGADGET | REQGADGET,
X (APTR)&B_InOut, /* border */
X NULL, /* high lighted */
X &TextOutFile,
X 0,
X (APTR) &S_OutFile,
X (int)CodeGo,
X NULL
X };
X
X
Xstatic struct Gadget G_InFile = {
X &G_Cancel,
X StringX , StringY, /* loc */
X sizeof(InNameBuff)*COL, ROW, /* size */
X GADGHCOMP,
X RELVERIFY/* | STRINGCENTER */,
X STRGADGET | REQGADGET,
X (APTR)&B_InOut, /* border */
X NULL, /* high lighted */
X NULL, /* text */
X 0,
X (APTR) &S_InFile,
X (int)CodeGo,
X NULL
X };
X
Xstatic struct Requester R_InFile = {
X NULL,
X COL*10, ROW*4, ReqSizeX, ReqSizeY,
X 0, 0,
X &G_InFile,
X NULL,
X &TextInFile,
X NULL,
X 2, /* backfill */
X NULL,
X { NULL },
X { NULL },
X NULL,
X { NULL },
X};
X
X
X
X
Xstatic struct Requester R_OutFile = {
X NULL,
X COL*10, ROW*4, ReqSizeX, ReqSizeY,
X 0, 0,
X &G_OutFile,
X NULL,
X &TextOutFile,
X NULL,
X 2, /* backfill */
X NULL,
X { NULL },
X { NULL },
X NULL,
X { NULL },
X};
X
Xstatic bool
XWaitForUser() {
X struct IntuiMessage mycopy,
X *orig;
X long wakeupmask;
X
X for(;;) {
X wakeupmask = Wait( 1<< CntrlWin->UserPort->mp_SigBit );
X
X /*
X * handle messages for the control window
X */
X
X while( orig =(struct IntuiMessage *) GetMsg( CntrlWin->UserPort ) ) {
X
X mycopy = *orig;
X ReplyMsg( orig );
X
X if( mycopy.Class == GADGETUP ) {
X USHORT code;
X
X code = ((struct Gadget*)mycopy.IAddress)->GadgetID;
X if( code == CodeGo ) return( true );
X if( code == CodeCancel) return(false);
X }
X }
X }
X}
X
X
X
Xchar *GetInFile()
X{
X bool answer;
X Request( &R_InFile, CntrlWin);
X answer = WaitForUser();
X EndRequest( &R_InFile, CntrlWin);
X return( answer?InNameBuff: NULL);
X}
X
X
Xchar *GetOutFile()
X{
X bool answer;
X Request( &R_OutFile, CntrlWin);
X answer = WaitForUser();
X EndRequest( &R_OutFile, CntrlWin);
X return( answer?OutNameBuff: NULL);
X}
X
X
X
X
END_OF_FILE
if test 4299 -ne `wc -c <'getfilenames.c'`; then
echo shar: \"'getfilenames.c'\" unpacked with wrong size!
fi
# end of 'getfilenames.c'
fi
if test -f 'mapcalc.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'mapcalc.c'\"
else
echo shar: Extracting \"'mapcalc.c'\" \(5365 characters\)
sed "s/^X//" >'mapcalc.c' <<'END_OF_FILE'
X#include <math.h>
X#include "mytypes.h"
X#include "revolve.h" /* need to get scrnpair from here */
X#include "mapstuff.h"
X#include "menuexp.h"
X
X#ifdef TEST
X#undef DebugOn
X#define DebugOn 1
X#endif TEST
X
X
X#define DEBUG
X/*
X * this section of code derived from:
X * "The essential algorithms of ray tracing" by Eric Haines
X * presented in Sigraph proceedings on Ray Tracing
X * my major change has been to simplify it for two dimensions
X */
X
Xtypedef struct {
X float x, y;
X} Vector;
X
Xstatic float DotVector(a,b)
X Vector *a, *b;
X{
X return( a->x * b->x + a->y * b->y);
X}
X
Xstatic void DivVector(in, scale, out)
X Vector *in, *out;
X float scale;
X{
X if ( fabs(scale) < SingleTinyVal ) {
X out->x = SingleLargeVal;
X out->y = SingleLargeVal;
X }
X else {
X out->x = in->x / scale;
X out->y = in->y / scale;
X }
X}
X
X
X
Xstatic Vector Na, Nb, Nc;
Xstatic float Du0, Du1, Du2,
X Dv0, Dv1, Dv2;
Xstatic Vector Qux, Quy,
X Qvx, Qvy;
Xstatic float Dux, Duy,
X Dvx, Dvy;
Xstatic bool IsQuadu, IsQuadv;
X
Xvoid CalcMapConsts(vp)
X register ScrnPair *vp;
X#define p00 vp[0]
X#define p01 vp[1]
X#define p11 vp[2]
X#define p10 vp[3]
X{
X Vector Pa, Pb, Pc, Pd;
X
X Pa.x = p00.x - p10.x + p11.x - p01.x;
X Pa.y = p00.y - p10.y + p11.y - p01.y;
X
X Pb.x = p10.x - p00.x;
X Pb.y = p10.y - p00.y;
X
X Pc.x = p01.x - p00.x;
X Pc.y = p01.y - p00.y;
X
X Pd.x = p00.x;
X Pd.y = p00.y;
X
X Na.x = Pa.y; Na.y = -Pa.x;
X Nc.x = Pc.y; Nc.y = -Pc.x;
X Nb.x = Pb.y; Nb.y = -Pb.x;
X
X Du0 = DotVector(&Nc, &Pd);
X Du1 = DotVector(&Na, &Pd) + DotVector(&Nc, &Pb);
X Du2 = DotVector( &Na, &Pb);
X
X if( fabs( Du2 ) > SingleTinyVal ) {
X float TwoDu2;
X
X IsQuadu = true;
X TwoDu2 = 2.0 * Du2;
X DivVector( &Na, TwoDu2, &Qux );
X DivVector( &Nc, -Du2, &Quy );
X Duy = Du0/Du2;
X Dux = -Du1/TwoDu2;
X }
X else {
X IsQuadu = false;
X }
X
X Dv0 = DotVector( &Nb, &Pd);
X Dv1 = DotVector(&Na, &Pd) + DotVector(&Nb, &Pc);
X Dv2 = DotVector( &Na, &Pc);
X if( fabs( Dv2 ) > SingleTinyVal ) {
X float TwoDv2;
X
X IsQuadv = true;
X TwoDv2 = 2.0 * Dv2;
X DivVector( &Na, TwoDv2, &Qvx);
X DivVector( &Nb, -Dv2, &Qvy);
X/* DivVector( &Nc, -Dv2, &Qvy); */
X Dvx = - Dv1/TwoDv2;
X Dvy = Dv0/Dv2;
X }
X else {
X IsQuadv = false;
X }
X#ifdef DEBUG
X if( DebugOn ) {
X printf("du2 %f, du1 %f, du0 %f\n", Du2, Du1, Du0 );
X printf("dv2 %f, dv1 %f, dv0 %f\n", Dv2, Dv1, Dv0 );
X printf("Na = (%f, %f), Nb = (%f,%f), Nc = (%f,%f)\n",
X Na.x, Na.y, Nb.x, Nb.y, Nc.x, Nc.y );
X printf("IsQuad =(%c, %c)\n", IsQuadu?'t':'f', IsQuadv? 't': 'f' );
X }
X#endif DEBUG
X
X}
X
X
X/*
X * given points px,py in the quadrilateral, map them to points inside a
X * unit square
X */
Xvoid MapXYRatio(px, py, outx, outy, SweepCode)
X float px, py;
X float *outx, *outy;
X short SweepCode;
X{
X float resu, resv;
X Vector Ri;
X
X
X Ri.x = px; Ri.y = py;
X
X if( !IsQuadu ) {
X float denom;
X denom = (Du1 - DotVector(&Na, &Ri));
X if( fabs(denom) < SingleTinyVal )
X resu = 2.0;
X else
X resu = (DotVector(&Nc, &Ri) - Du0)/denom;
X } else {
X float Ka, Kb;
X float discrim;
X
X Ka = Dux + DotVector( &Qux, &Ri);
X Kb = Duy + DotVector( &Quy, &Ri);
X discrim = sqrt(fabs(Ka * Ka - Kb));
X resu = Ka + ((discrim > Ka)? discrim: (-discrim));
X#ifdef DEBUG
X if( DebugOn ) {
X printf("dux=%f, duy = %f, ka = %f, kb = %f\n",
X Dux, Duy, Ka, Kb );
X }
X#endif DEBUG
X
X }
X
X if( !IsQuadv ) {
X float denom;
X denom = (Dv1 - DotVector(&Na, &Ri));
X if( fabs(denom) < SingleTinyVal )
X resv = 2.0;
X else
X resv = (DotVector(&Nb, &Ri) - Dv0)/denom;
X } else {
X float Ka, Kb;
X float discrim;
X
X Ka = Dvx + DotVector( &Qvx, &Ri);
X Kb = Dvy + DotVector( &Qvy, &Ri);
X discrim = sqrt(fabs( Ka * Ka - Kb));
X resv = Ka + ((discrim > Ka)? discrim: (-discrim));
X#ifdef DEBUG
X if( DebugOn ) {
X printf("dvx=%f, dvy = %f, ka = %f, kb = %f\n",
X Dvx, Dvy, Ka, Kb );
X }
X#endif DEBUG
X }
X
X#ifdef DEBUG
X if( DebugOn ) {
X printf("(%f,%f) -> (%f, %f)\n", px, py, resu, resv );
X }
X#endif DEBUG
X
X if( resu > 1.0 || resu < 0.0 ) {
X resu = ( SweepCode & MP_XMAX)? 1.0: 0.0;
X }
X if( resv > 1.0 || resv < 0.0 ) {
X resv = ( SweepCode & MP_YMAX)? 1.0: 0.0;
X }
X
X *outx = resu; *outy = resv;
X}
X
X
X
X/*
X * here abides testcode
X */
X#ifdef TEST
X#include <stdio.h>
X
XReadScrnPair(set, a)
X char *set;
X ScrnPair *a;
X{
X int tx, ty;
X printf("enter screen pair %s\n",set);
X scanf("%d %d", &tx, &ty);
X a->x = tx; a->y = ty;
X}
X
XReadLimits(a)
XScrnPair a[];
X{
X ReadScrnPair("a", &a[0]);
X ReadScrnPair("b", &a[1]);
X ReadScrnPair("c", &a[2]);
X ReadScrnPair("d", &a[3]);
X}
X
Xmain() {
X float inx, iny;
X float outy, outx;
X ScrnPair pts[4];
X
X ReadLimits(pts);
X CalcMapConsts(pts);
X while(!feof(stdin)) {
X printf("enter quadrilateral points\n");
X scanf("%f %f", &inx, &iny );
X MapXYRatio( inx, iny, &outx, &outy, 0);
X printf("p(%f,%f)->p(%f,%f)\n", inx, iny, outx, outy);
X }
X}
X#endif TEST
END_OF_FILE
if test 5365 -ne `wc -c <'mapcalc.c'`; then
echo shar: \"'mapcalc.c'\" unpacked with wrong size!
fi
# end of 'mapcalc.c'
fi
if test -f 'menu_files.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'menu_files.c'\"
else
echo shar: Extracting \"'menu_files.c'\" \(7512 characters\)
sed "s/^X//" >'menu_files.c' <<'END_OF_FILE'
X#include "gadgetdef.h"
X
Xstatic struct IntuiText filetext[] = {
X { 0, 1, JAM2, 2, 0, NULL, (UBYTE *)"save as", NULL },
X { 0, 1, JAM2, 2, 0, NULL, (UBYTE *)"save first", NULL },
X { 0, 1, JAM2, 2, 0, NULL, (UBYTE *)"save next", NULL },
X { 0, 1, JAM2, 2, 0, NULL, (UBYTE *)"open map", NULL },
X { 0, 1, JAM2, 2, 0, NULL, (UBYTE *)"close map", NULL },
X { 0, 1, JAM2, 2, 0, NULL, (UBYTE *)"write data", NULL }
X};
X
Xstatic struct IntuiText greytext[] = {
X { 0, 1, JAM2, 2, 0, NULL, (UBYTE *)"Grey model", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"Average", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"Lumin", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"Distance", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"R only", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"G only", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"B only", NULL }
X};
X
Xstatic struct IntuiText packtext[] = {
X { 0, 1, JAM2, 2, 0, NULL, (UBYTE *)"compression", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"run length", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"none", NULL }
X};
X
X
X
X#define FILEFLAGS ( ITEMTEXT | HIGHCOMP | ITEMENABLED )
X
Xstatic struct MenuItem packitems[] = {
X { &packitems[1], /* next item */
X 90, 0, 110 , 10, /* x,y,w,h */
X COLMEMFLAGS| CHECKED,
X 2, /* mutual exclude bits */
X (APTR) &packtext[1], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { NULL, /* next item */
X 90, 10, 110 , 10, /* x,y,w,h */
X COLMEMFLAGS,
X 1, /* mutual exclude bits */
X (APTR) &packtext[2], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X }
X};
X
X#define GREYMUTUAL(pos) (077 ^ (1<<(pos)))
Xstatic struct MenuItem greyitems[] = {
X { &greyitems[1], /* next item */
X 90, 0, 80 , 10, /* x,y,w,h */
X COLMEMFLAGS|CHECKED,
X GREYMUTUAL(0), /* mutual exclude bits */
X (APTR) &greytext[1], /* average */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &greyitems[2], /* next item */
X 90, 10, 80 , 10, /* x,y,w,h */
X COLMEMFLAGS,
X GREYMUTUAL(1), /* mutual exclude bits */
X (APTR) &greytext[2], /* lumin */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &greyitems[3], /* next item */
X 90, 20, 80 , 10, /* x,y,w,h */
X COLMEMFLAGS,
X GREYMUTUAL(2), /* mutual exclude bits */
X (APTR) &greytext[3], /* dist */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &greyitems[4], /* next item */
X 90, 30, 80 , 10, /* x,y,w,h */
X COLMEMFLAGS,
X GREYMUTUAL(3), /* mutual exclude bits */
X (APTR) &greytext[4], /* dist */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &greyitems[5], /* next item */
X 90, 40, 80 , 10, /* x,y,w,h */
X COLMEMFLAGS,
X GREYMUTUAL(4), /* mutual exclude bits */
X (APTR) &greytext[5], /* dist */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { NULL, /* next item */
X 90, 50, 80 , 10, /* x,y,w,h */
X COLMEMFLAGS,
X GREYMUTUAL(5), /* mutual exclude bits */
X (APTR) &greytext[6], /* dist */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X }
X};
X
X
X
X
Xstatic struct MenuItem fileitems[] = {
X { &fileitems[1], /* next item */
X 10, 0, 90 , 10, /* x,y,w,h */
X FILEFLAGS,
X 0, /* mutual exclude bits */
X (APTR) &filetext[0], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &fileitems[2], /* next item */
X 10, 10, 90 , 10, /* x,y,w,h */
X FILEFLAGS,
X 0, /* mutual exclude bits */
X (APTR) &filetext[1], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &fileitems[3], /* next item */
X 10, 20, 90 , 10, /* x,y,w,h */
X FILEFLAGS,
X 0, /* mutual exclude bits */
X (APTR) &filetext[2], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &fileitems[4], /* next item */
X 10, 30, 90 , 10, /* x,y,w,h */
X FILEFLAGS,
X 0, /* mutual exclude bits */
X (APTR) &packtext[0], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X packitems, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &fileitems[5], /* next item */
X 10, 40, 90 , 10, /* x,y,w,h */
X FILEFLAGS,
X 0, /* mutual exclude bits */
X (APTR) &filetext[3], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &fileitems[6], /* next item */
X 10, 50, IMAGE_HITWIDTH , 10, /* x,y,w,h */
X COLMEMFLAGS,
X 1, /* mutual exclude bits */
X (APTR) &greytext[0], /* red */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X greyitems, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &fileitems[7], /* next item */
X 10, 60, 90 , 10, /* x,y,w,h */
X FILEFLAGS,
X 0, /* mutual exclude bits */
X (APTR) &filetext[4], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { NULL, /* next item */
X 10, 70, 90 , 10, /* x,y,w,h */
X FILEFLAGS,
X 0, /* mutual exclude bits */
X (APTR) &filetext[5], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X }
X};
X
Xextern char *GetOutFile();
Xextern char *GetInFile();
X
XMenuDoFile(item)
Xint item;
X{
X static int filecnt = 0;
X char tempbuff[80];
X char *filename;
X bool packflag;
X int i;
X
X packflag = Selected( packitems[0] )?1:0;
X
X
X switch (item ) {
X case 0:
X if( (filename = GetOutFile())) {
X SetHourGlass();
X WriteIlbm(filename, &SurfWinDef, &SurfScrnDef, packflag);
X }
X break;
X case 1:
X filecnt = 0; /* deliberate fall into case 2 */
X case 2:
X if( filename = GetOutFile()) {
X SetHourGlass();
X sprintf(tempbuff, "%s.%d", filename, filecnt++ );
X WriteIlbm(tempbuff, &SurfWinDef, &SurfScrnDef, packflag);
X }
X break;
X case 4:
X if( filename = GetInFile()){
X SetHourGlass();
X ReadIlbm( filename);
X }
X break;
X case 5:
X for( i = 0; i < (sizeof(greyitems)/sizeof(greyitems[0])); i++ ) {
X if( Selected(greyitems[i])) {
X SetGreyModel(i);
X }
X }
X break;
X case 6:
X CloseImgPix();
X break;
X case 7:
X if( filename = GetOutFile()) {
X SetHourGlass();
X WriteData(filename);
X }
X break;
X
X default:
X break;
X }
X
X ClearHourGlass();
X}
END_OF_FILE
if test 7512 -ne `wc -c <'menu_files.c'`; then
echo shar: \"'menu_files.c'\" unpacked with wrong size!
fi
# end of 'menu_files.c'
fi
if test -f 'menu_image.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'menu_image.c'\"
else
echo shar: Extracting \"'menu_image.c'\" \(6963 characters\)
sed "s/^X//" >'menu_image.c' <<'END_OF_FILE'
X#include "menuexp.h"
X
X
X/*
X * Menu description for selecting color mapping
X */
Xstatic struct IntuiText Specular = {
X 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"Specular", NULL
X};
X
Xstatic struct IntuiText revtext[] = {
X { 0, 1, JAM2, 2, 0, NULL, (UBYTE *)"Rev. Axis", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"X", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"Y", NULL }
X};
X
Xstatic struct IntuiText dithertext[] = {
X { 0, 1, JAM2, 2, 0, NULL, (UBYTE *)"Dither", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"none", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"2", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"4", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"8", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"16", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"32", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"64", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"128", NULL }
X};
X
X
Xstatic struct IntuiText MiscText[] = {
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"Abort Draw", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"Debug", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"Flip XY Map", NULL }
X};
X
Xstruct MenuItem revitems[] = {
X { &revitems[1], /* next item */
X 90, 0, 80 , 10, /* x,y,w,h */
X COLMEMFLAGS| CHECKED,
X 2, /* mutual exclude bits */
X (APTR) &revtext[1], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { NULL, /* next item */
X 90, 10, 80 , 10, /* x,y,w,h */
X COLMEMFLAGS,
X 1, /* mutual exclude bits */
X (APTR) &revtext[2], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X }
X};
X
X#define DitherExMask(X) (((1<<8)-1) ^ (1<<X))
X
Xstruct MenuItem ditheritems[] = {
X { &ditheritems[1], /* next item */
X 90, 0, 80 , 10, /* x,y,w,h */
X COLMEMFLAGS,
X DitherExMask(0), /* mutual exclude bits */
X (APTR) &dithertext[1], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &ditheritems[2], /* next item */
X 90, 10, 80 , 10, /* x,y,w,h */
X COLMEMFLAGS,
X DitherExMask(1), /* mutual exclude bits */
X (APTR) &dithertext[2], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &ditheritems[3], /* next item */
X 90, 20, 80 , 10, /* x,y,w,h */
X COLMEMFLAGS| CHECKED,
X DitherExMask(2), /* mutual exclude bits */
X (APTR) &dithertext[3], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &ditheritems[4], /* next item */
X 90, 30, 80 , 10, /* x,y,w,h */
X COLMEMFLAGS,
X DitherExMask(3), /* mutual exclude bits */
X (APTR) &dithertext[4], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &ditheritems[5], /* next item */
X 90, 40, 80 , 10, /* x,y,w,h */
X COLMEMFLAGS,
X DitherExMask(4), /* mutual exclude bits */
X (APTR) &dithertext[5], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &ditheritems[6], /* next item */
X 90, 50, 80 , 10, /* x,y,w,h */
X COLMEMFLAGS,
X DitherExMask(5), /* mutual exclude bits */
X (APTR) &dithertext[6], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &ditheritems[7], /* next item */
X 90, 60, 80 , 10, /* x,y,w,h */
X COLMEMFLAGS,
X DitherExMask(6), /* mutual exclude bits */
X (APTR) &dithertext[7], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { NULL, /* next item */
X 90, 70, 80 , 10, /* x,y,w,h */
X COLMEMFLAGS,
X DitherExMask(7), /* mutual exclude bits */
X (APTR) &dithertext[8], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X }
X};
X
X
X#define IMAGE_HITWIDTH 96
X
Xstruct MenuItem imageitems[] = {
X { &imageitems[1], /* next item */
X 1, 0, IMAGE_HITWIDTH , 10, /* x,y,w,h */
X COLMEMFLAGS,
X 2, /* mutual exclude bits */
X (APTR) &revtext[0], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X revitems, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &imageitems[2], /* next item */
X 1, 10, IMAGE_HITWIDTH , 10, /* x,y,w,h */
X COLMEMFLAGS,
X 1, /* mutual exclude bits */
X (APTR) &dithertext[0], /* red */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X ditheritems, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &imageitems[3], /* next item */
X 1, 20, IMAGE_HITWIDTH , 10, /* x,y,w,h */
X COLMEMFLAGS|MENUTOGGLE,
X 0, /* mutual exclude bits */
X (APTR) &Specular,
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &imageitems[4], /* next item */
X 1, 30, IMAGE_HITWIDTH , 10, /* x,y,w,h */
X COLMEMFLAGS|MENUTOGGLE,
X 0, /* mutual exclude bits */
X (APTR) &MiscText[2], /* Flip XY */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &imageitems[5], /* next item */
X 1, 40, 100 , 10, /* x,y,w,h */
X COLMEMFLAGS| MENUTOGGLE,
X 0, /* mutual exclude bits */
X (APTR) &MiscText[0], /* AbortDraw */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { NULL, /* next item */
X 1, 50, IMAGE_HITWIDTH, 10, /* x,y,w,h */
X COLMEMFLAGS|MENUTOGGLE,
X 0, /* mutual exclude bits */
X (APTR) &MiscText[1], /* debug */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X }
X};
X
XUSHORT *AbortDrawPtr = &imageitems[4].Flags;
XUSHORT *DebugOnPtr = &imageitems[5].Flags;
X
X
Xstatic void MenuSetImage()
X{
X int i;
X if( Selected(revitems[0])) {
X SetRevAxis(0); /* Xaxis */
X }
X else {
X SetRevAxis(1); /* Yaxis */
X }
X
X for( i = 0; i < sizeof(ditheritems)/sizeof(ditheritems[0]); i++ ) {
X if( Selected(ditheritems[i] )) {
X if( i != DitherPower ) {
X FreeOldDither();
X }
X DitherPower = i;
X }
X }
X
X SpecOn = Selected( imageitems[2])?true:false;
X FlipImgPix( Selected(imageitems[3])?true:false);
X}
X
END_OF_FILE
if test 6963 -ne `wc -c <'menu_image.c'`; then
echo shar: \"'menu_image.c'\" unpacked with wrong size!
fi
# end of 'menu_image.c'
fi
if test -f 'menu_scrn.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'menu_scrn.c'\"
else
echo shar: Extracting \"'menu_scrn.c'\" \(5430 characters\)
sed "s/^X//" >'menu_scrn.c' <<'END_OF_FILE'
X#include "scrndef.h"
X/*
X * Menu description for selecting color mapping
X */
X
X/*
X * define mutual exclusion flags
X */
X#define MUBIT1 1
X#define MUBIT2 2
X#define MUBIT3 4
X#define MUBIT4 8
X#define MUBIT5 16
X#define MULO 32
X#define MUHI 64
X#define MUHAM 128
X#define MUOVER 256
X
Xstatic struct IntuiText scrntext[] = {
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"2 color", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"4 color ", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"8 color", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"16 color", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"32 color", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"lores", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"hires", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"ham", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"overscan", NULL },
X { 0, 1, JAM2, 20, 0, NULL, (UBYTE *)"interlace", NULL },
X};
X
Xstatic struct MenuItem scrnitems[] = {
X { &scrnitems[1], /* next item */
X 10, 0, 90 , 10, /* x,y,w,h */
X COLMEMFLAGS ,
X MUBIT2|MUBIT3|MUBIT4|MUBIT5, /* mutual exclude bits */
X (APTR) &scrntext[0], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &scrnitems[2], /* next item */
X 10, 10, 90 , 10, /* x,y,w,h */
X COLMEMFLAGS,
X MUBIT1|MUBIT3|MUBIT4|MUBIT5, /* mutual exclude bits */
X (APTR) &scrntext[1], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &scrnitems[3], /* next item */
X 10, 20, 90 , 10, /* x,y,w,h */
X COLMEMFLAGS,
X MUBIT1|MUBIT2|MUBIT4|MUBIT5, /* mutual exclude bits */
X (APTR) &scrntext[2], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &scrnitems[4], /* next item */
X 10, 30, 90 , 10, /* x,y,w,h */
X COLMEMFLAGS| CHECKED,
X MUBIT1|MUBIT2|MUBIT3|MUBIT5, /* mutual exclude bits */
X (APTR) &scrntext[3], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &scrnitems[5], /* next item */
X 10, 40, 90 , 10, /* x,y,w,h */
X COLMEMFLAGS,
X MUBIT1|MUBIT2|MUBIT3|MUBIT4|MUHI, /* mutual exclude bits */
X (APTR) &scrntext[4], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &scrnitems[6], /* next item */
X 10, 50, 90 , 10, /* x,y,w,h */
X COLMEMFLAGS| CHECKED,
X MUHI|MUHAM, /* mutual exclude bits */
X (APTR) &scrntext[5], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &scrnitems[7], /* next item */
X 10, 60, 90 , 10, /* x,y,w,h */
X COLMEMFLAGS,
X MULO|MUHAM|MUBIT5, /* mutual exclude bits */
X (APTR) &scrntext[6], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &scrnitems[8], /* next item */
X 10, 70, 90 , 10, /* x,y,w,h */
X (COLMEMFLAGS) & ~ITEMENABLED,
X MULO|MUHI, /* mutual exclude bits */
X (APTR) &scrntext[7], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { &scrnitems[9], /* next item */
X 10, 80, 90 , 10, /* x,y,w,h */
X ( COLMEMFLAGS|MENUTOGGLE)& ~ITEMENABLED ,
X 0, /* mutual exclude bits */
X (APTR) &scrntext[8], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X },
X { NULL, /* next item */
X 10, 90, 90 , 10, /* x,y,w,h */
X COLMEMFLAGS|MENUTOGGLE,
X 0, /* mutual exclude bits */
X (APTR) &scrntext[9], /* grey */
X NULL, /* highlight image */
X 'h', /* command byte ? */
X NULL, /* submenu item */
X 0 /* next select for select dragging */
X }
X};
X
X
X
Xvoid MenuSetScrn()
X{
X UBYTE colmax;
X
X CloseSurf();
X
X /*
X * overscan
X */
X SurfScrnDef.Width = 320;
X SurfScrnDef.Height = 200+ButHeight;
X SurfScrnDef.LeftEdge = SurfScrnDef.TopEdge = 0;
X
X if( Selected(scrnitems[8])) {
X SurfScrnDef.Width = 352;
X SurfScrnDef.Height = 220;
X }
X
X if( Selected(scrnitems[7])) { /* ham mode */
X SurfScrnDef.Depth = 6;
X SurfScrnDef.ViewModes = HAM;
X }
X else {
X int i;
X SurfScrnDef.Depth = 3; /* incase non of the flags are set */
X
X for( i = 0; i < 5; i++ ) {
X if( Selected( scrnitems[i])) {
X SurfScrnDef.Depth = i+1;
X }
X }
X
X if( Selected( scrnitems[5] ) ) { /* lores */
X SurfScrnDef.ViewModes = 0;
X }
X else {
X SurfScrnDef.ViewModes = HIRES;
X SurfScrnDef.Width <<= 1;
X SurfScrnDef.LeftEdge *= 2;
X if( SurfScrnDef.Depth > 4 ) {
X SurfScrnDef.Depth = 4;
X }
X }
X }
X
X if( Selected( scrnitems[9] )) { /* interlace */
X SurfScrnDef.Height <<= 1;
X SurfScrnDef.Height -= ButHeight;
X SurfScrnDef.TopEdge *= 2;
X SurfScrnDef.ViewModes |= LACE;
X }
X
X
X OpenSurf();
X}
END_OF_FILE
if test 5430 -ne `wc -c <'menu_scrn.c'`; then
echo shar: \"'menu_scrn.c'\" unpacked with wrong size!
fi
# end of 'menu_scrn.c'
fi
if test -f 'revolve.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'revolve.c'\"
else
echo shar: Extracting \"'revolve.c'\" \(6344 characters\)
sed "s/^X//" >'revolve.c' <<'END_OF_FILE'
X#include <math.h>
X#include <stdio.h>
X#include "fasttrig.h"
X#include "bezpt.h"
X#include "revolve.h"
X#include "mytypes.h"
X
X
XRevAxisType RevAxis;
X
X
Xshort RevMesh = DefRevMeshVal;
Xshort RevImageR, /* revolution index */
X RevImageB; /* bezier index */
X
Xstatic int RotRange = DefRotRange;
Xstatic int RotStart = DefRotStart;
Xstatic int SecAngle = DefTilt;
Xstatic float SurfDist = DefSurfDist;
Xstatic float ViewDist = DefViewDist;
Xstatic bool Perspective = DefPersp;
X
Xvoid SetPerspective( value)
X int value;
X{
X Perspective = value;
X}
X
X
X
Xvoid SetRevAxis( value)
X
X{
X RevAxis = (value)? RevY : RevX;
X}
X
X
Xvoid SetRotStart( value )
X int value;
X{
X RotStart = value;
X}
X
Xvoid SetRotRange( value )
X int value;
X{
X RotRange = value;
X}
X
Xvoid SetSecAng( value )
X int value;
X{
X SecAngle = value;
X}
X
Xvoid SetRevMesh( value )
X int value;
X{
X RevMesh = value;
X}
X
X
X
Xvoid SetSurfDist( value )
X int value;
X{
X SurfDist = (float )value;
X}
X
X
Xvoid SetViewDist( value )
X int value;
X{
X ViewDist = (float )value;
X}
X
X
X
Xstatic
Xfloat secsin, seccos; /* trig values of secondary angle */
X
Xstatic
Xint sizeptlist = 0;
X
Xstatic
XPtGen *ptlist1 = 0,
X *ptlist2 = 0;
X
Xstatic
Xint NumEnts; /* number of angle slices */
X
X
Xstatic
Xbool PrepRev()
X{
X NumEnts = RevMesh+1;
X
X /*
X * allocate space 3d descriptions of a point revolved x degrees
X */
X if( NumEnts > sizeptlist ) {
X if( ptlist1 ) free(ptlist1);
X if( ptlist2 ) free(ptlist2);
X
X ptlist1 =(PtGen *) malloc( NumEnts * sizeof(PtGen) );
X ptlist2 =(PtGen *) malloc( NumEnts * sizeof(PtGen) );
X if( !ptlist1 || !ptlist2 ) {
X OutErr("PrepRev:not enough memory");
X return(true);
X }
X }
X
X
X if( InitFastTrig( RotStart, RotRange, NumEnts)) return(true);
X secsin = sin((float)SecAngle*PI/180);
X seccos = cos((float)SecAngle*PI/180);
X return (false);
X}
X
X
Xstatic
Xvoid CalcRing(ptlist, xpos, ypos)
Xregister PtGen *ptlist;
Xfloat xpos, ypos;
X{
X int angle;
X
X for( angle = 0; angle < NumEnts; angle++, ptlist++) {
X float temp;
X /*
X * calculate 3d coordinate of point revolved
X */
X if( RevAxis == RevX) {
X ptlist->d3.y = ypos * fcos(angle);
X temp = ypos * fsin(angle);
X ptlist->d3.x = xpos* seccos - temp *secsin;
X ptlist->d3.z = xpos * secsin + temp * seccos;
X }
X else {
X ptlist->d3.x = xpos * fcos(angle);
X temp = xpos * fsin( angle);
X ptlist->d3.y = ypos * seccos + temp * secsin;
X ptlist->d3.z = secsin * ypos - temp * seccos;
X }
X ptlist->d3.z -= SurfDist;
X
X/* if( Perspective ) {
X float PerspScale;
X
X PerspScale = fabs(ViewDist / ptlist->d3.z);
X ptlist->d3.x *= PerspScale;
X ptlist->d3.y *= PerspScale;
X }
X */
X /*
X * calculate the 2d screen coordinate equvalent
X */
X /*
X ptlist->d2.x = (short) ptlist->d3.x;
X ptlist->d2.y = (short) ptlist->d3.y;
X */
X ptlist->d2.x = (short) (ptlist->d3.x + 0.5);
X ptlist->d2.y = (short) (ptlist->d3.y + 0.5);
X }
X}
X
X
X
X
X
X
X/*
X * return true on failure
X */
Xbool Revolve(acceptfunc)
X void (*acceptfunc)();
X{
X float tparm, deltat;
X int subseg;
X
X if( PrepRev() ) {
X return(true);
X }
X
X deltat = 1.0/BezMesh;
X RevImageB = 0;
X ResetActSeg();
X do {
X float xpos, ypos;
X
X
X InitCalcBez();
X xpos = StartPtX(GetCurSeg());
X ypos = StartPtY(GetCurSeg());
X CalcRing(ptlist1, xpos, ypos );
X for( subseg = 1; subseg <= BezMesh; subseg++ ) {
X register PtGen *ptlista, *ptlistb;
X register int numpoly;
X
X tparm = subseg * deltat;
X if( subseg & 1 ) {
X ptlista = ptlist2; ptlistb = ptlist1;
X }
X else {
X ptlista = ptlist1; ptlistb = ptlist2;
X }
X
X CalcBezPt(tparm, &xpos, &ypos );
X CalcRing( ptlista, xpos, ypos );
X RevImageR = 0;
X for( numpoly = NumEnts -1; numpoly--; ) {
X (* acceptfunc)(ptlistb, ptlista, ptlista+1, ptlistb+1);
X ptlista++;
X ptlistb++;
X RevImageR++;
X }
X RevImageB++;
X }
X NextSeg();
X
X } while( ActSeg );
X return( false );
X}
X
X/*
X * write a ring of points
X */
Xstatic void WriteRing(fileout, ptlist, numpnts)
XFILE *fileout;
XPtGen *ptlist;
Xint numpnts;
X{
X while( numpnts-- ) {
X fprintf(fileout, "%f %f %f \n", ptlist->d3.x,
X ptlist->d3.y, ptlist->d3.z );
X ptlist++;
X }
X}
X
X/*
X * write the list of vertices to file pointer
X * this function performs a similar function to revolve
X */
Xstatic void WriteRevolve(fileout)
X FILE *fileout;
X{
X float tparm, deltat;
X float OldSurfDist;
X int subseg;
X float xpos, ypos;
X
X
X OldSurfDist = SurfDist;
X SurfDist = 0;
X deltat = 1.0/BezMesh;
X RevImageB = 0;
X ResetActSeg();
X /*
X * write out the starting ring
X */
X InitCalcBez();
X xpos = StartPtX(GetCurSeg());
X ypos = StartPtY(GetCurSeg());
X CalcRing(ptlist1, xpos, ypos );
X WriteRing(fileout, ptlist1, NumEnts);
X /*
X * loop to write out all the other rings
X */
X do {
X
X InitCalcBez();
X for( subseg = 1; subseg <= BezMesh; subseg++ ) {
X tparm = subseg * deltat;
X CalcBezPt(tparm, &xpos, &ypos );
X CalcRing( ptlist1, xpos, ypos );
X WriteRing(fileout, ptlist1, NumEnts);
X RevImageB++;
X }
X NextSeg();
X
X } while( ActSeg );
X SurfDist = OldSurfDist;
X
X return;
X}
X
X/*
X * this function writes a list of vertices to "filename"
X */
Xvoid WriteData(filename)
X char *filename;
X{
X FILE *fileout;
X
X if(( GetNumSegs() < 1) || PrepRev()){
X return;
X }
X
X fileout = fopen(filename,"w");
X if(!fileout) {
X OutErr("could not open data file");
X return;
X }
X
X
X fprintf(fileout, "%d * number of Rings\n", BezRings());
X fprintf(fileout, "%d * Rev mesh\n", RevMesh);
X fprintf(fileout, "%d * Rotation range\n", RotRange);
X WriteRevolve(fileout);
X fprintf(fileout, "end\n");
X fclose(fileout);
X}
X
X
X
END_OF_FILE
if test 6344 -ne `wc -c <'revolve.c'`; then
echo shar: \"'revolve.c'\" unpacked with wrong size!
fi
# end of 'revolve.c'
fi
if test -f 'writeilbm.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'writeilbm.c'\"
else
echo shar: Extracting \"'writeilbm.c'\" \(6260 characters\)
sed "s/^X//" >'writeilbm.c' <<'END_OF_FILE'
X#include <stdio.h>
X#include <exec/types.h>
X#include <intuition/intuition.h>
X#include <graphics/gfxmacros.h>
X#ifdef MANX
X#include <functions.h>
X#endif
X#include "mytypes.h"
X
Xextern int PackRow();
X/*
X * following definitions cut from ilbm.h file
X */
Xtypedef UBYTE Masking; /* Choice of masking technique.*/
X#define mskNone 0
X#define mskHasMask 1
X#define mskHasTransparentColor 2
X#define mskLasso 3
X
Xtypedef UBYTE Compression; /* Choice of compression algorithm applied to
X * each row of the source and mask planes. "cmpByteRun1" is the byte run
X * encoding generated by Mac's PackBits. See Packer.h . */
X#define cmpNone 0
X#define cmpByteRun1 1
X
X/* Aspect ratios: The proper fraction xAspect/yAspect represents the pixel
X * aspect ratio pixel_width/pixel_height.
X *
X * For the 4 Amiga display modes:
X * 320 x 200: 10/11 (these pixels are taller than they are wide)
X * 320 x 400: 20/11
X * 640 x 200: 5/11
X * 640 x 400: 10/11 */
X#define x320x200Aspect 10
X#define y320x200Aspect 11
X#define x320x400Aspect 20
X#define y320x400Aspect 11
X#define x640x200Aspect 5
X#define y640x200Aspect 11
X#define x640x400Aspect 10
X#define y640x400Aspect 11
X
X/* A BitMapHeader is stored in a BMHD chunk. */
Xtypedef struct {
X UWORD w, h; /* raster width & height in pixels */
X WORD x, y; /* position for this image */
X UBYTE nPlanes; /* # source bitplanes */
X Masking masking; /* masking technique */
X Compression compression; /* compression algoithm */
X UBYTE pad1; /* UNUSED. For consistency, put 0 here.*/
X UWORD transparentColor; /* transparent "color number" */
X UBYTE xAspect, yAspect; /* aspect ratio, a rational number x/y */
X WORD pageWidth, pageHeight; /* source "page" size in pixels */
X } BitMapHeader;
X
X/* RowBytes computes the number of bytes in a row, from the width in pixels.*/
X#define RowBytes(w) (((w) + 15) >> 4 << 1)
X
X
X
X#define IDSIZE 4
X
Xvoid WriteIlbm( filename, win, scrn,packflag )
X char *filename;
X struct NewWindow *win;
X struct NewScreen *scrn;
X bool packflag;
X{
X FILE *ofile;
X long formpos; /* position of length following 'FORM' */
X long formsize;
X struct ViewPort *vp;
X
X ofile = fopen(filename,"w");
X if( !ofile ) {
X return;
X }
X
X fwrite("FORM", IDSIZE, 1, ofile);
X formpos = ftell( ofile );
X fwrite( (char *)&formsize, sizeof(formsize), 1, ofile); /* will be rewritten */
X fwrite( "ILBMBMHD", IDSIZE*2, 1, ofile );
X
X {
X BitMapHeader bmhdr;
X long bmhdrsize;
X static UBYTE xaspect[2][2]= { { x320x200Aspect, x320x400Aspect },
X { x640x200Aspect, x640x400Aspect }};
X static UBYTE yaspect[2][2]= { { y320x200Aspect, y320x400Aspect },
X { y640x200Aspect, y640x400Aspect }};
X int wx, wy;
X
X bmhdrsize = 20;
X fwrite( (char *)&bmhdrsize, sizeof(bmhdrsize), 1, ofile);
X bmhdr.x = bmhdr.y = 0;
X bmhdr.w = win->Width;
X bmhdr.h = win->Height;
X bmhdr.nPlanes = scrn->Depth;
X bmhdr.masking = mskNone;
X bmhdr.compression = packflag ?cmpByteRun1: cmpNone;
X bmhdr.pad1 = 0;
X
X wx = (scrn->Width == 320)? 0: 1;
X wy = (scrn->Height == 200)? 0: 1;
X bmhdr.xAspect = xaspect[wx][wy];
X bmhdr.yAspect = yaspect[wx][wy];
X bmhdr.pageHeight = win->Height;
X bmhdr.pageWidth = scrn->Width;
X bmhdr.transparentColor = 0;
X fwrite((char *)&bmhdr, bmhdrsize, 1, ofile );
X }
X
X fwrite("CMAP",IDSIZE, 1, ofile);
X vp = &win->Screen->ViewPort;
X {
X long cmapsize;
X long i;
X UWORD value;
X UBYTE col[3];
X int numentries;
X
X numentries = (1<< scrn->Depth );
X cmapsize = numentries*3;
X fwrite( (char *)&cmapsize, sizeof(cmapsize), 1,ofile);
X for( i = 0; i < numentries; i++ ) {
X value = GetRGB4(vp->ColorMap, i);
X col[2] = (value & 0xf) << 4; /* blue */
X col[1] = value & 0xf0; /* green */
X col[0] = (value & 0xf00) >> 4; /* red */
X fwrite(col, 3, 1, ofile);
X }
X }
X
X fwrite("CAMG", IDSIZE, 1, ofile);
X {
X long viewmode;
X long viewmodesize;
X
X viewmodesize = sizeof(viewmode);
X viewmode = scrn->ViewModes;
X fwrite((char *)&viewmodesize, sizeof(viewmodesize), 1, ofile);
X fwrite((char *)&viewmode, sizeof(viewmode), 1, ofile );
X }
X
X fwrite("BODY", IDSIZE,1, ofile);
X {
X struct BitMap *bm;
X long bodypos,
X bodysize;
X UBYTE *bmd[16]; /* assume as many as 16 bit planes :-) */
X int row;
X int plane;
X int rowlength; /* in bytes */
X char outbuff[200]; /* largest enough for a row 1600 bits wide */
X
X bodypos = ftell(ofile);
X fwrite( (char *)&bodysize, sizeof(bodysize), 1, ofile);
X bm = vp->RasInfo->BitMap;
X rowlength = RowBytes(scrn->Width);
X
X for( plane = 0; plane < scrn->Depth; plane++ ) {
X bmd[plane] = bm->Planes[plane] + rowlength * win->TopEdge;
X }
X
X /*
X * write actual bitplanes
X */
X for( row = 0; row < win->Height; row++ ) {
X
X for( plane = 0; plane < scrn->Depth; plane++ ) {
X if( packflag ) {
X int packedsize;
X
X packedsize = PackRow(bmd[plane],outbuff, rowlength );
X fwrite(outbuff, packedsize, 1, ofile);
X }
X else {
X fwrite(bmd[plane], rowlength, 1, ofile );
X }
X bmd[plane] += rowlength;
X }
X }
X bodysize = ftell(ofile) -( bodypos + 4);
X /*
X * fill out body to make even
X */
X if( bodysize & 1 ) {
X fputc(0,ofile);
X bodysize++;
X }
X formsize = ftell(ofile) -( formpos + 4);
X
X fseek( ofile, bodypos, 0L );
X fwrite( (char *)&bodysize, sizeof(bodysize), 1, ofile);
X }
X
X fseek( ofile, formpos, 0L );
X fwrite( (char *)&formsize, sizeof(formsize), 1, ofile);
X
X fclose(ofile);
X}
END_OF_FILE
if test 6260 -ne `wc -c <'writeilbm.c'`; then
echo shar: \"'writeilbm.c'\" unpacked with wrong size!
fi
# end of 'writeilbm.c'
fi
echo shar: End of archive 2 \(of 4\).
cp /dev/null ark2isdone
MISSING=""
for I in 1 2 3 4 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 4 archives.
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 dicussion to comp.sys.amiga.