home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
145.lha
/
NoNukes!.c
< prev
next >
Wrap
C/C++ Source or Header
|
1986-11-21
|
25KB
|
890 lines
/***************************************************************************
*
* "NoNukes!.c"*
* 03-Aug-1987
*
* A Nuclear Weapon Effects Simulator
*
* From a Byte magazine artical, "LOCAL EFFECTS OF NUCLEAR WEAPONS",
* written by John R. Fanchi, December 1986.
*
* ====> Amiga version by Roger Holmstedt <====
*
* ROGER_HOLMSTEDT@CUP.PORTAL.COM
* ROGER_HOLMSTEDT%CUP.PORTAL.COM@SUN.COM
* {UCBVAX!SUN,UUNET!PORTAL}!CUP.PORTAL.COM!ROGER_HOLMSTEDT
*
* (MANX)
* Compile: cc -Z2750 +ff NoNukes!.c
* Link: ln NoNukes!.o -lm -lc
*
* * I'm not really a hard core anti-nuke person, its just that
* Reagan scares the hell out of me. My Grandfather is as old
* as Reagan. We don't let Gramps play with the T.V. remote
* but Reagan has control of the button! That's scary! Well,
* if we can just get through to next November without Ronnie
* picking a fight with the "Evil Empire", we should be safe
* until the Republicans elect another old fart 30 years from now.
*
* Besides, it seemed like a good name for the program.
*
* Please post all flames to 'dev/null'.
*
* Disclaimer: No warranty expressed or implied! If a nuke goes
* off near you but the results differ from the
* projections of this program, don't blame me.
*
* Released to the Public Domain
*
**************************************************************************/
#include <exec/types.h>
#include <exec/execbase.h>
#include <exec/memory.h>
#include <intuition/intuition.h>
#include <intuition/intuitionbase.h>
#include <libraries/mathffp.h>
#include <math.h>
struct IntuitionBase *IntuitionBase;
struct GfxBase *GfxBase;
struct ExecBase *ExecBase;
struct MathBase *MathBase;
struct IntuiMessage *message;
#define INTUITION_REV 0L
#define GRAPHICS_REV 0L
#define EXEC_REV 0L
#define MATH_REV 0L
/* Things for gadgets */
/* The header files needed for gadget definitions */
#include <libraries/dosextens.h>
#include <graphics/gfxbase.h>
#include <graphics/gfx.h>
#include <graphics/display.h>
#include <graphics/text.h>
#include <ctype.h>
/* Definitions for Gadget ID numbers */
#define MEGATONSGAD 0
#define THERMAL_ENERGYGAD 1
#define TRANSMISSIONGAD 2
#define RANGEGAD 3
#define HEIGHTGAD 4
#define BOOMGAD 5
/**********************************************************************
* Text attribute structures used in rendering IntuiTexts
**********************************************************************/
char def_font[] ="topaz.font";
struct TextAttr TxtAt_Plain = { (UBYTE *)def_font, 8,
FS_NORMAL, FPF_ROMFONT};
/**********************************************************************
* Border Definitions for boom gadget
**********************************************************************/
SHORT boom_Pairs_1[] = {
0, 0,
200, 0,
200, 11,
0, 11,
0, 0
};
struct Border boom_bord_1 = {
-1, 0, /* LeftEdge, TopEdge */
1, 3, JAM2, /* FrontPen, BackPen, DrawMode*/
5, /* Count of XY pairs */
(SHORT *)&boom_Pairs_1, /* XY pairs */
NULL /* Next Border */
};
/**********************************************************************
* IntuiTexts for the boom gadget.
**********************************************************************/
struct IntuiText boom_Text_0 = {
3, 0, /* FrontPen, BackPen */
JAM2, /* DrawMode */
8, 3, /* LeftEdge, TopEdge */
&TxtAt_Plain, /* ITextFont Pointer */
/* The IText */
(UBYTE *)"CLICK HERE TO DETONATE!",
NULL
};
/**********************************************************************
* Gadget Structure definition for the boom gadget.
**********************************************************************/
struct Gadget boom = {
NULL, /* NextGadget pointer */
380, 68, /* LeftEdge, TopEdge */
200, 12, /* Width, Height */
/* Gadget Flags */
GADGHBOX,
/* Activation Flags */
GADGIMMEDIATE,
/* GadgetType */
BOOLGADGET,
(APTR)&boom_bord_1, /* GadgetRender */
NULL, /* SelectRender */
&boom_Text_0, /* GadgetText */
0x0, /* MutualExclude */
NULL, /* SpecialInfo */
BOOMGAD, /* GadgetID */
0x1 /* UserData Pointer */
};
/**********************************************************************
* Image structure for height proportional gadget knob.
**********************************************************************/
struct Image height_knobim;
/**********************************************************************
* IntuiTexts for the height gadget.
**********************************************************************/
struct IntuiText height_Text_0 = {
1, 0, /* FrontPen, BackPen */
JAM2, /* DrawMode */
0, 13, /* LeftEdge, TopEdge */
&TxtAt_Plain, /* ITextFont Pointer */
/* The IText */
(UBYTE *)"Blast Height (in feet)",
NULL
};
/**********************************************************************
* Proportional gadget info for the height gadget.
**********************************************************************/
struct PropInfo height_prop_1 = {
/* Flags */
AUTOKNOB | FREEHORIZ,
0x0000, 0x0000, /* HorizPot, VertPot */
0x028F, 0x1000, /* HorizBody, VertBody */
200, 12, /* CWidth, CHeight */
0x1111, 0x1111, /* HPotRes, VPotRes */
4, 2 /* LeftBorder, TopBorder */
};
/**********************************************************************
* Gadget Structure definition for the height gadget.
**********************************************************************/
struct Gadget height = {
&boom, /* NextGadget pointer */
380, 44, /* LeftEdge, TopEdge */
200, 12, /* Width, Height */
/* Gadget Flags */
NULL,
/* Activation Flags */
GADGIMMEDIATE | RELVERIFY | FOLLOWMOUSE,
/* GadgetType */
PROPGADGET,
(APTR)&height_knobim, /* GadgetRender */
NULL, /* SelectRender */
&height_Text_0, /* GadgetText */
0x0, /* MutualExclude */
(APTR)&height_prop_1, /* SpecialInfo */
HEIGHTGAD, /* GadgetID */
0x10 /* UserData Pointer */
};
/**********************************************************************
* Image structure for range proportional gadget knob.
**********************************************************************/
struct Image range_knobim;
/**********************************************************************
* IntuiTexts for the range_energy gadget.
**********************************************************************/
struct IntuiText range_Text_0 = {
1, 0, /* FrontPen, BackPen */
JAM2, /* DrawMode */
0, 13, /* LeftEdge, TopEdge */
&TxtAt_Plain, /* ITextFont Pointer */
/* The IText */
(UBYTE *)"Distance (in miles)",
NULL
};
/**********************************************************************
* Proportional gadget info for the range_energy gadget.
**********************************************************************/
struct PropInfo range_prop_2 = {
/* Flags */
AUTOKNOB | FREEHORIZ,
0x0000, 0x0000, /* HorizPot, VertPot */
0x028F, 0x1000, /* HorizBody, VertBody */
200, 12, /* CWidth, CHeight */
0x1111, 0x1111, /* HPotRes, VPotRes */
4, 2 /* LeftBorder, TopBorder */
};
/**********************************************************************
* Gadget Structure definition for the thermal_energy gadget.
**********************************************************************/
struct Gadget range = {
&height, /* NextGadget pointer */
380, 20, /* LeftEdge, TopEdge */
200, 12, /* Width, Height */
/* Gadget Flags */
NULL,
/* Activation Flags */
GADGIMMEDIATE | RELVERIFY | FOLLOWMOUSE,
/* GadgetType */
PROPGADGET,
(APTR)&range_knobim, /* GadgetRender */
NULL, /* SelectRender */
&range_Text_0, /* GadgetText */
0x0, /* MutualExclude */
(APTR)&range_prop_2, /* SpecialInfo */
RANGEGAD, /* GadgetID */
0x10 /* UserData Pointer */
};
/**********************************************************************
* Image structure for transmission proportional gadget knob.
**********************************************************************/
struct Image transmission_knobim;
/**********************************************************************
* IntuiTexts for the transmission gadget.
**********************************************************************/
struct IntuiText transmission_Text_0 = {
1, 0, /* FrontPen, BackPen */
JAM2, /* DrawMode */
0, 13, /* LeftEdge, TopEdge */
&TxtAt_Plain, /* ITextFont Pointer */
/* The IText */
(UBYTE *)"Transmission Factor",
NULL
};
/**********************************************************************
* Proportional gadget info for the transmission gadget.
**********************************************************************/
struct PropInfo transmission_prop_3 = {
/* Flags */
AUTOKNOB | FREEHORIZ,
0x0000, 0x0000, /* HorizPot, VertPot */
0x0CCC, 0x1000, /* HorizBody, VertBody */
200, 12, /* CWidth, CHeight */
0x1111, 0x1111, /* HPotRes, VPotRes */
4, 2 /* LeftBorder, TopBorder */
};
/**********************************************************************
* Gadget Structure definition for the transmission gadget.
**********************************************************************/
struct Gadget transmission = {
&range, /* NextGadget pointer */
60, 68, /* LeftEdge, TopEdge */
200, 12, /* Width, Height */
/* Gadget Flags */
NULL,
/* Activation Flags */
GADGIMMEDIATE | RELVERIFY | FOLLOWMOUSE,
/* GadgetType */
PROPGADGET,
(APTR)&transmission_knobim, /* GadgetRender */
NULL, /* SelectRender */
&transmission_Text_0, /* GadgetText */
0x0, /* MutualExclude */
(APTR)&transmission_prop_3, /* SpecialInfo */
TRANSMISSIONGAD, /* GadgetID */
0x10 /* UserData Pointer */
};
/**********************************************************************
* Image structure for thermal_energy proportional gadget knob.
**********************************************************************/
struct Image thermal_energy_knobim;
/**********************************************************************
* IntuiTexts for the thermal_energy gadget.
**********************************************************************/
struct IntuiText thermal_energy_Text_0 = {
1, 0, /* FrontPen, BackPen */
JAM2, /* DrawMode */
0, 13, /* LeftEdge, TopEdge */
&TxtAt_Plain, /* ITextFont Pointer */
/* The IText */
(UBYTE *)"Thermal Energy Fraction",
NULL
};
/**********************************************************************
* Proportional gadget info for the thermal_energy gadget.
**********************************************************************/
struct PropInfo thermal_energy_prop_4 = {
/* Flags */
AUTOKNOB | FREEHORIZ,
0x0000, 0x0000, /* HorizPot, VertPot */
0x0CCC, 0x1000, /* HorizBody, VertBody */
200, 12, /* CWidth, CHeight */
0x1111, 0x1111, /* HPotRes, VPotRes */
4, 2 /* LeftBorder, TopBorder */
};
/**********************************************************************
* Gadget Structure definition for the thermal_energy gadget.
**********************************************************************/
struct Gadget thermal_energy = {
&transmission, /* NextGadget pointer */
60, 44, /* LeftEdge, TopEdge */
200, 12, /* Width, Height */
/* Gadget Flags */
NULL,
/* Activation Flags */
GADGIMMEDIATE | RELVERIFY | FOLLOWMOUSE,
/* GadgetType */
PROPGADGET,
(APTR)&thermal_energy_knobim, /* GadgetRender */
NULL, /* SelectRender */
&thermal_energy_Text_0, /* GadgetText */
0x0, /* MutualExclude */
(APTR)&thermal_energy_prop_4, /* SpecialInfo */
THERMAL_ENERGYGAD, /* GadgetID */
0x10 /* UserData Pointer */
};
/**********************************************************************
* Image structure for megatons proportional gadget knob.
**********************************************************************/
struct Image megatons_knobim;
/**********************************************************************
* IntuiTexts for the megatons gadget.
**********************************************************************/
struct IntuiText megatons_Text_0 = {
1, 0, /* FrontPen, BackPen */
JAM2, /* DrawMode */
0, 13, /* LeftEdge, TopEdge */
&TxtAt_Plain, /* ITextFont Pointer */
/* The IText */
(UBYTE *)"Weapon Yield",
NULL
};
/**********************************************************************
* Proportional gadget info for the megatons gadget.
**********************************************************************/
struct PropInfo megatons_prop_5 = {
/* Flags */
AUTOKNOB | FREEHORIZ,
0x0000, 0x0000, /* HorizPot, VertPot */
0x0333, 0x1000, /* HorizBody, VertBody */
200, 12, /* CWidth, CHeight */
0x1111, 0x1111, /* HPotRes, VPotRes */
4, 2 /* LeftBorder, TopBorder */
};
/**********************************************************************
* Gadget Structure definition for the megatons gadget.
**********************************************************************/
struct Gadget megatons = {
&thermal_energy, /* NextGadget pointer */
60, 20, /* LeftEdge, TopEdge */
200, 12, /* Width, Height */
/* Gadget Flags */
NULL,
/* Activation Flags */
GADGIMMEDIATE | RELVERIFY | FOLLOWMOUSE,
/* GadgetType */
PROPGADGET,
(APTR)&megatons_knobim, /* GadgetRender */
NULL, /* SelectRender */
&megatons_Text_0, /* GadgetText */
0x0, /* MutualExclude */
(APTR)&megatons_prop_5, /* SpecialInfo */
MEGATONSGAD, /* GadgetID */
0x10 /* UserData Pointer */
};
/* End of things for gadgets */
main()
{
struct NewWindow NewWindow;
struct Window *Window, *OpenWindow();
struct RastPort *RP;
struct IntuiMessage *GetMsg();
struct Gadget *igad;
float H, D, TAU, TEF, Y;
double Q, Z, P, EMP, REMS, jnk1, jnk2, jnk3;
ULONG class;
USHORT gadgid;
USHORT casetest;
APTR address;
void *Move();
long *Text();
char txt[20];
/* Open the libraries. */
void *OpenLibrary();
IntuitionBase = (struct IntuitionBase *)
OpenLibrary("intuition.library",INTUITION_REV);
if(IntuitionBase == NULL)
{
Cleanup();
exit(FALSE);
}
GfxBase = (struct GfxBase *) OpenLibrary("graphics.library",GRAPHICS_REV);
if(GfxBase == NULL)
{
Cleanup();
exit(FALSE);
}
ExecBase = (struct ExecBase *) OpenLibrary("exec.library",EXEC_REV);
if(ExecBase == NULL)
{
Cleanup();
exit(FALSE);
}
MathBase = (struct MathBase *) OpenLibrary("mathffp.library",MATH_REV);
if(MathBase == NULL)
{
Cleanup();
exit(FALSE);
}
/* Initialize the NewWindow structure for the call to OpenWindow() */
NewWindow.LeftEdge = 0;
NewWindow.TopEdge = 11;
NewWindow.Width = 640;
NewWindow.Height = 189;
NewWindow.DetailPen = 0;
NewWindow.BlockPen = 1;
NewWindow.Title = (UBYTE *)" Nuclear Weapon Effects Simulator! ";
NewWindow.Flags = WINDOWCLOSE | SMART_REFRESH | ACTIVATE | WINDOWDEPTH
| NOCAREREFRESH;
NewWindow.IDCMPFlags = CLOSEWINDOW | GADGETDOWN | GADGETUP | MOUSEMOVE;
NewWindow.Type = WBENCHSCREEN;
NewWindow.FirstGadget = &megatons;
NewWindow.CheckMark = NULL;
NewWindow.Screen = NULL;
NewWindow.BitMap = NULL;
NewWindow.MinWidth = 640;
NewWindow.MinHeight = 189;
NewWindow.MaxWidth = 640;
NewWindow.MaxHeight = 189;
/* Try to open the window. */
if(( Window = (struct Window *) OpenWindow(&NewWindow)) == NULL)
{
Cleanup();
exit(FALSE);
}
/* Set the first Numbers */
H = 0L;
D = 0L;
TAU = 0L;
TEF = 0L;
Y = 0L;
/* Print the first Numbers */
RP = Window->RPort;
SetAPen(RP,3L);
SetDrMd(RP,JAM2);
Move(RP,10L,30L);
Text(RP,"0.00",4L);
Move(RP,10L,54L);
Text(RP,"0.00",4L);
Move(RP,10L,78L);
Text(RP,"0.00",4L);
Move(RP,359L,30L);
Text(RP,"0",1L);
Move(RP,359L,54L);
Text(RP,"0",1L);
for(;;)
{
if(( message = (struct IntuiMessage *) GetMsg(Window->UserPort)) == 0L)
{
Wait(1L << Window->UserPort->mp_SigBit);
continue;
}
class = message->Class;
igad = (struct Gadget *) message->IAddress;
gadgid = igad->GadgetID;
ReplyMsg(message);
switch (class)
{
case CLOSEWINDOW :
while (message =(struct IntuiMessage *)
GetMsg(Window->UserPort))
ReplyMsg(message);
CloseWindow(Window);
Cleanup();
exit(TRUE);
break;
case GADGETDOWN :
switch (gadgid)
{
case BOOMGAD :
SetAPen(RP,1L);
SetDrMd(RP,JAM2);
/* Set Mins */
if(D == 0)
D = .001;
else
D = D;
if(H == 0)
H = .001;
else
H = H;
if(Y == 0)
{
Move(RP,380L,90L);
Text(RP,"What luck, a DUD!", 17L);
SetAPen(RP,3L);
SetDrMd(RP,JAM2);
break;
}
else
{
Move(RP,380L,90L);
Text(RP," ", 17L);
}
/* Thermal Flux */
Q = 3000 * (TEF/20) * (TAU/20) * (Y/4) / (D * D);
Move(RP,20L,100L);
if(Q < 10L)
if(Q < 5L)
if(Q < 1L)
Text(RP,"Thermal flux has added to your tan. ", 48L);
else
Text(RP,"Thermal flux has caused you second degree burns.", 48L);
else
Text(RP,"Thermal flux had caused you third degree burns. ", 48L);
else
Text(RP,"Thermal flux has burned you to a crisp. ", 48L);
/* Blast Overpressure */
Z = (pow((double)(Y/4),(double)(.333))) / D;
jnk1 = 22.4 * (pow((double)Z,(double)3));
jnk2 = 15.8 * (pow((double)Z,(double)(1.5)));
P = jnk1 + jnk2;
Move(RP,30L,110L);
if(P < 20L)
if(P < 10L)
if(P < 5L)
if(P < 2L)
{
Text(RP,"OverPressure has not had a significant effect on wind", 53L);
Move(RP,30L,120L);
Text(RP,"conditions or the structures of buildings. ", 53L);
Move(RP,30L,130L);
Text(RP," ", 53L);
}
else
{
Text(RP,"OverPressure has caused winds in excess of ", 53L);
Move(RP,30L,120L);
Text(RP,"70 miles per hour. ", 53L);
Move(RP,30L,130L);
Text(RP," ", 53L);
}
else
{
Text(RP,"OverPressure has caused winds in excess of ", 53L);
Move(RP,30L,120L);
Text(RP,"160 miles per hour. Unreinforced brick and ", 53L);
Move(RP,30L,130L);
Text(RP,"wood houses are leveled. ", 53L);
}
else
{
Text(RP,"OverPressure has caused winds in excess of 300 miles ", 53L);
Move(RP,30L,120L);
Text(RP,"per hour. Most factories and commercial buildings ", 53L);
Move(RP,30L,130L);
Text(RP,"are leveled, as are small wood and brick residences. ", 53L);
}
else
{
Text(RP,"OverPressure has caused winds in excess of 500 miles ", 53L);
Move(RP,30L,120L);
Text(RP,"per hour. Even multi-story reinforced concrete ", 53L);
Move(RP,30L,130L);
Text(RP,"buildings are leveled. ", 53L);
}
/* EMP Range */
jnk1 = (H*3963)/5280;
jnk2 = 2*1000;
jnk3 = (jnk1*jnk2);
EMP = sqrt((double)jnk3);
Move(RP,50L,180L);
if(D > EMP)
Text(RP,"You are outside the range of the Electromagnetic pulse.", 55L);
else
Text(RP,"You are inside the range of the Electromagnetic pulse. ", 55L);
/* Radiation Dosage */
jnk1 = 250 * 100;
jnk2 = 16 * 3.1416 * D * D;
jnk3 = ((jnk1 / jnk2) * (Y/4)) * 10;
REMS = jnk3;
Move(RP,40L,140L);
if(REMS < 5000L)
if(REMS < 1000L)
if(REMS < 600L)
if(REMS < 200L)
if(REMS < 100L)
{
Text(RP,"You have survived radiation exposure with NO effects.", 53L);
Move(RP,40L,150L);
Text(RP," ", 53L);
Move(RP,40L,160L);
Text(RP," ", 53L);
Move(RP,40L,170L);
Text(RP," ", 53L);
}
else
{
Text(RP,"Radiation exposure had made you sick--vomiting, ", 53L);
Move(RP,40L,150L);
Text(RP,"headache, some loss of white blood cells and ", 53L);
Move(RP,40L,160L);
Text(RP,"dizziness. This is good. You will completely recover.", 53L);
Move(RP,40L,170L);
Text(RP," ", 53L);
}
else
{
Text(RP,"Your symptoms range from leukopenia to hair loss ", 53L);
Move(RP,40L,150L);
Text(RP,"because of radiation exposure. Hospitalization is ", 53L);
Move(RP,40L,160L);
Text(RP,"required and is available to you because you have a ", 53L);
Move(RP,40L,170L);
Text(RP,"reasonable chance to live. ", 53L);
}
else
{
Text(RP,"You have very severe leukopenia and internal ", 53L);
Move(RP,40L,150L);
Text(RP,"bleeding. Ulcers and infection is likely because of ", 53L);
Move(RP,40L,160L);
Text(RP,"radiation exposure. You need hospitalization but none", 53L);
Move(RP,40L,170L);
Text(RP,"is available, you have less than a month to live. ", 53L);
}
else
{
Text(RP,"You have diarrhea, fever and disturbance of you body ", 53L);
Move(RP,40L,150L);
Text(RP,"chemistry because of radiation exposure. Treatment ", 53L);
Move(RP,40L,160L);
Text(RP,"my alleviate pain, but it will not save your life. ", 53L);
Move(RP,40L,170L);
Text(RP,"You have less that two weeks to live. ", 53L);
}
else
{
Text(RP,"You are experiencing convulsions, Tremors and ataxia ", 53L);
Move(RP,40L,150L);
Text(RP,"because of radiation exposure. ", 53L);
Move(RP,40L,160L);
Text(RP,"No treatment will help you. ", 53L);
Move(RP,40L,170L);
Text(RP," ", 53L);
}
SetAPen(RP,3L);
SetDrMd(RP,JAM2);
break;
case HEIGHTGAD :
casetest = gadgid;
H = (heights(0));
sprintf(txt, "%6.0f", (H*1000L));
Move(RP, 319L, 54L);
Text(RP, txt, 6L);
break;
case RANGEGAD :
casetest = gadgid;
D = (ranges(0));
sprintf(txt, "%3.0f", D);
Move(RP, 343L, 30L);
Text(RP, txt, 3L);
break;
case TRANSMISSIONGAD :
casetest = gadgid;
TAU = (trans(0));
sprintf(txt, "%3.3f", (TAU/20L));
Move(RP, 10L, 78L);
Text(RP, txt, 4L);
break;
case THERMAL_ENERGYGAD :
casetest = gadgid;
TEF = (thermal(0));
sprintf(txt, "%3.3f", (TEF/20L));
Move(RP, 10L, 54L);
Text(RP, txt, 4L);
break;
case MEGATONSGAD :
casetest = gadgid;
Y = (megs(0));
sprintf(txt, "%3.3f", (Y/4L));
Move(RP, 10L, 30L);
Text(RP, txt, 5L);
break;
}/* End of SWITCH (gadgid) */
break;
case MOUSEMOVE :
switch (casetest)
{
case HEIGHTGAD :
H = (heights(0));
sprintf(txt, "%6.0f", (H*1000L));
Move(RP, 320L, 54L);
Text(RP, txt, 6L);
break;
case RANGEGAD :
D = (ranges(0));
sprintf(txt, "%3.0f", D);
Move(RP, 342L, 30L);
Text(RP, txt, 3L);
break;
case TRANSMISSIONGAD :
TAU = (trans(0));
sprintf(txt, "%3.3f", (TAU/20L));
Move(RP, 10L, 78L);
Text(RP, txt, 4L);
break;
case THERMAL_ENERGYGAD :
TEF = (thermal(0));
sprintf(txt, "%3.3f", (TEF/20L));
Move(RP, 10L, 54L);
Text(RP, txt, 4L);
break;
case MEGATONSGAD :
Y = (megs(0));
sprintf(txt, "%3.3f", (Y/4L));
Move(RP, 10L, 30L);
Text(RP, txt, 5L);
break;
}/* End of SWITCH (casetest) */
}/* End of SWITCH (class)*/
}/* End of FOR */
}/* End of MAIN */
Cleanup()
{
if (MathBase) CloseLibrary(MathBase);
if (ExecBase) CloseLibrary(ExecBase);
if (GfxBase) CloseLibrary(GfxBase);
if (IntuitionBase) CloseLibrary(IntuitionBase);
}/* End of Cleanup() */
megs()
{
float Y;
Y = (megatons_prop_5.HorizPot / 0x0333);
return Y;
}
thermal()
{
float TEF;
TEF = (thermal_energy_prop_4.HorizPot / 0x0CCC);
return TEF;
}
trans()
{
float TAU;
TAU = (transmission_prop_3.HorizPot / 0x0CCC);
return TAU;
}
ranges()
{
float D;
D = (range_prop_2.HorizPot / 0x028F);
return D;
}
heights()
{
float H;
H = (height_prop_1.HorizPot / 0x028F);
return H;
}