home *** CD-ROM | disk | FTP | other *** search
- #define REVISED
-
- /****************************************************************************
-
-
- CARTOG.PAS Accompanies "Mapping the World in Pascal" by Robert Miller
- and Francis Reddy, BYTE, December 1987, page 329
-
-
- ****************************************************************************/
-
-
-
- /*
- PROGRAM Cartog;
- This program plots geographic data from the file
- WORLD.DAT and coordinate grids on the Mercator,
- Equidistant Cylindrical, Sinusoidal, Hammer, and
- Orthographic map projections.
- */
-
- /***************************************************************************
-
- ye olde notice:
-
- This Program (Was,Has Yet,Has,'s,Should Have,Is,,Cares,Believes)
-
- 1. TRANSLATED (poorly & quickly) TO MANX AZTEC C AMIGA, USING VICIOUS
- CUT & PASTE/SEARCH-REPLACE TACTICS.
- 2. TO BE SETUP FOR 68020/68881, but won't run without.
- 3. ORIGINAL PASCAL SOURCE CODE AS worldmap.txt FOR REFERENCE.
- 4. author/translator DECRIES/DENIES ANY KNOWLEDGE OF PASCAL.
- 5. ASSIGN MAP: DEV:PATH where the world.dat file is.
- 6. SETUP FOR ORIGINAL LOW RESOLUTION world.dat FILE. IF YOU HAVE OBTAINED
- ONE OF THE HIGHER RESOLUTION VERSIONS, CHANGE DFSIZE TO REFLECT THIS.
- 7. USES A DEFAULT MAP CENTER = MY ADDRESS.
- 8. NOT FOR MEMORY RESTRAINTS.
- 9. IN AN UNLIMITED SUPPLY OF CPU CYCLES.
-
- end of ye olde notice
-
- ***************************************************************************/
-
-
-
- #include <exec/types.h>
- #include <exec/nodes.h>
- #include <exec/lists.h>
- #include <exec/memory.h>
- #include <exec/interrupts.h>
- #include <exec/ports.h>
- #include <exec/libraries.h>
- #include <exec/devices.h>
- #include <exec/io.h>
- #include <libraries/dosextens.h>
- #include <graphics/gfxbase.h>
- #include <graphics/gfxmacros.h>
- #include <intuition/intuition.h>
- #include <devices/timer.h>
- #include <clib/macros.h>
- #include <math.h>
-
-
- /*#define DEBUG*/
-
- #define XSIZE 639
- #define YSIZE 399
- #define DFSIZE 45366L /* world.dat size in bytes, */
- #define DPOINTS DFSIZE/6 /* 7561 data points */
-
- Enable_Abort = 0;
-
- UBYTE titlemain[] = " \
- AMIGA WORLD MAPPER -V0.0- ";
-
- UBYTE anytext[81];
- struct IntuiText anyprint = {
- 1, 2, /* front/back pens */
- JAM2, /* draw mode */
- 0, 0, /* left,top edge */
- NULL, /* default font */
- anytext, /* text string */
- NULL /* next string */
- };
-
-
-
- struct IntuiText IText1 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" -180 ",
- NULL
- };
-
- struct MenuItem SubItem13 = {
- NULL,
- 45,112,
- 68,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xffffefff,
- (APTR)&IText1,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText2 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" -150 ",
- NULL
- };
-
- struct MenuItem SubItem12 = {
- &SubItem13,
- 45,102,
- 68,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xfffff7ff,
- (APTR)&IText2,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText3 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" -120 ",
- NULL
- };
-
- struct MenuItem SubItem11 = {
- &SubItem12,
- 45,92,
- 68,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xfffffbff,
- (APTR)&IText3,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText4 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" -90 ",
- NULL
- };
-
- struct MenuItem SubItem10 = {
- &SubItem11,
- 45,82,
- 68,10,
- CHECKED+CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xfffffdff,
- (APTR)&IText4,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText5 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" -60 ",
- NULL
- };
-
- struct MenuItem SubItem9 = {
- &SubItem10,
- 45,72,
- 68,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xfffffeff,
- (APTR)&IText5,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText6 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" -30 ",
- NULL
- };
-
- struct MenuItem SubItem8 = {
- &SubItem9,
- 45,62,
- 68,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xffffff7f,
- (APTR)&IText6,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText7 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" 0 ",
- NULL
- };
-
- struct MenuItem SubItem7 = {
- &SubItem8,
- 45,52,
- 68,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xffffffbf,
- (APTR)&IText7,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText8 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" 30 ",
- NULL
- };
-
- struct MenuItem SubItem6 = {
- &SubItem7,
- 45,42,
- 68,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xffffffdf,
- (APTR)&IText8,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText9 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" 60 ",
- NULL
- };
-
- struct MenuItem SubItem5 = {
- &SubItem6,
- 45,32,
- 68,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xffffffef,
- (APTR)&IText9,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText10 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" 90 ",
- NULL
- };
-
- struct MenuItem SubItem4 = {
- &SubItem5,
- 45,22,
- 68,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xfffffff7,
- (APTR)&IText10,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText11 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" 120 ",
- NULL
- };
-
- struct MenuItem SubItem3 = {
- &SubItem4,
- 45,12,
- 68,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xfffffffb,
- (APTR)&IText11,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText12 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" 150 ",
- NULL
- };
-
- struct MenuItem SubItem2 = {
- &SubItem3,
- 45,2,
- 68,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xfffffffd,
- (APTR)&IText12,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText13 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" 180 ",
- NULL
- };
-
- struct MenuItem SubItem1 = {
- &SubItem2,
- 45,-8,
- 68,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xfffffffe,
- (APTR)&IText13,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText14 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" LNG ",
- NULL
- };
-
- struct MenuItem MenuItem2 = {
- NULL,
- 0,11,
- 60,10,
- ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0,
- (APTR)&IText14,
- NULL,
- NULL,
- &SubItem1,
- 0xFFFF
- };
-
- struct IntuiText IText15 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" -90 ",
- NULL
- };
-
- struct MenuItem SubItem26 = {
- NULL,
- 45,112,
- 60,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xffffefff,
- (APTR)&IText15,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText16 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" -75 ",
- NULL
- };
-
- struct MenuItem SubItem25 = {
- &SubItem26,
- 45,102,
- 60,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xfffff7ff,
- (APTR)&IText16,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText17 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" -60 ",
- NULL
- };
-
- struct MenuItem SubItem24 = {
- &SubItem25,
- 45,92,
- 60,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xfffffbff,
- (APTR)&IText17,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText18 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" -45 ",
- NULL
- };
-
- struct MenuItem SubItem23 = {
- &SubItem24,
- 45,82,
- 60,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xfffffdff,
- (APTR)&IText18,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText19 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" -30 ",
- NULL
- };
-
- struct MenuItem SubItem22 = {
- &SubItem23,
- 45,72,
- 60,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xfffffeff,
- (APTR)&IText19,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText20 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" -15 ",
- NULL
- };
-
- struct MenuItem SubItem21 = {
- &SubItem22,
- 45,62,
- 60,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xffffff7f,
- (APTR)&IText20,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText21 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" 0 ",
- NULL
- };
-
- struct MenuItem SubItem20 = {
- &SubItem21,
- 45,52,
- 60,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xffffffbf,
- (APTR)&IText21,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText22 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" 15 ",
- NULL
- };
-
- struct MenuItem SubItem19 = {
- &SubItem20,
- 45,42,
- 60,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xffffffdf,
- (APTR)&IText22,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText23 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" 30 ",
- NULL
- };
-
- struct MenuItem SubItem18 = {
- &SubItem19,
- 45,32,
- 60,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xffffffef,
- (APTR)&IText23,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText24 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" 45 ",
- NULL
- };
-
- struct MenuItem SubItem17 = {
- &SubItem18,
- 45,22,
- 60,10,
- CHECKED+CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xfffffff7,
- (APTR)&IText24,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText25 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" 60 ",
- NULL
- };
-
- struct MenuItem SubItem16 = {
- &SubItem17,
- 45,12,
- 60,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xfffffffb,
- (APTR)&IText25,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText26 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" 75 ",
- NULL
- };
-
- struct MenuItem SubItem15 = {
- &SubItem16,
- 45,2,
- 60,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xfffffffd,
- (APTR)&IText26,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText27 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" 90 ",
- NULL
- };
-
- struct MenuItem SubItem14 = {
- &SubItem15,
- 45,-8,
- 60,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xfffffffe,
- (APTR)&IText27,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText28 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" LAT ",
- NULL
- };
-
- struct MenuItem MenuItem1 = {
- &MenuItem2,
- 0,0,
- 60,10,
- ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0,
- (APTR)&IText28,
- NULL,
- NULL,
- &SubItem14,
- 0xFFFF
- };
-
- struct Menu Menu4 = {
- NULL,
- 279,0,
- 102,0,
- MENUENABLED,
- " CENTER ",
- &MenuItem1
- };
-
- struct IntuiText IText29 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)"ORTHOgraphic",
- NULL
- };
-
- struct MenuItem MenuItem7 = {
- NULL,
- 0,44,
- 156,10,
- CHECKED+CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
- 0xffffffef,
- (APTR)&IText29,
- NULL,
- 'g',
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText30 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" HAMMER ",
- NULL
- };
-
- struct MenuItem MenuItem6 = {
- &MenuItem7,
- 0,33,
- 156,10,
- CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
- 0xfffffff7,
- (APTR)&IText30,
- NULL,
- 'h',
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText31 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" SINUS ",
- NULL
- };
-
- struct MenuItem MenuItem5 = {
- &MenuItem6,
- 0,22,
- 156,10,
- CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
- 0xfffffffb,
- (APTR)&IText31,
- NULL,
- 's',
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText32 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" EquiCyl ",
- NULL
- };
-
- struct MenuItem MenuItem4 = {
- &MenuItem5,
- 0,11,
- 156,10,
- CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
- 0xfffffffd,
- (APTR)&IText32,
- NULL,
- 'e',
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText33 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)"MERCATOR ",
- NULL
- };
-
- struct MenuItem MenuItem3 = {
- &MenuItem4,
- 0,0,
- 156,10,
- CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
- 0xfffffffe,
- (APTR)&IText33,
- NULL,
- 'm',
- NULL,
- 0xFFFF
- };
-
- struct Menu Menu3 = {
- &Menu4,
- 189,0,
- 84,0,
- MENUENABLED,
- " TYPE ",
- &MenuItem3
- };
-
- struct IntuiText IText34 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" 45 ",
- NULL
- };
-
- struct MenuItem SubItem31 = {
- NULL,
- 117,32,
- 52,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xffffffef,
- (APTR)&IText34,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText35 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" 30 ",
- NULL
- };
-
- struct MenuItem SubItem30 = {
- &SubItem31,
- 117,22,
- 52,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xfffffff7,
- (APTR)&IText35,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText36 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" 15 ",
- NULL
- };
-
- struct MenuItem SubItem29 = {
- &SubItem30,
- 117,12,
- 52,10,
- CHECKED+CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xfffffffb,
- (APTR)&IText36,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText37 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" 10 ",
- NULL
- };
-
- struct MenuItem SubItem28 = {
- &SubItem29,
- 117,2,
- 52,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xfffffffd,
- (APTR)&IText37,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText38 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" 5 ",
- NULL
- };
-
- struct MenuItem SubItem27 = {
- &SubItem28,
- 117,-8,
- 52,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xfffffffe,
- (APTR)&IText38,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText39 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" LNG++ ",
- NULL
- };
-
- struct MenuItem MenuItem12 = {
- NULL,
- 0,44,
- 132,10,
- ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0,
- (APTR)&IText39,
- NULL,
- NULL,
- &SubItem27,
- 0xFFFF
- };
-
- struct IntuiText IText40 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" 45 ",
- NULL
- };
-
- struct MenuItem SubItem36 = {
- NULL,
- 117,32,
- 52,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xffffffef,
- (APTR)&IText40,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText41 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" 30 ",
- NULL
- };
-
- struct MenuItem SubItem35 = {
- &SubItem36,
- 117,22,
- 52,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xfffffff7,
- (APTR)&IText41,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText42 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" 15 ",
- NULL
- };
-
- struct MenuItem SubItem34 = {
- &SubItem35,
- 117,12,
- 52,10,
- CHECKED+CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xfffffffb,
- (APTR)&IText42,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText43 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" 10 ",
- NULL
- };
-
- struct MenuItem SubItem33 = {
- &SubItem34,
- 117,2,
- 52,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xfffffffd,
- (APTR)&IText43,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText44 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" 5 ",
- NULL
- };
-
- struct MenuItem SubItem32 = {
- &SubItem33,
- 117,-8,
- 52,10,
- CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0xfffffffe,
- (APTR)&IText44,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText45 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" LAT++ ",
- NULL
- };
-
- struct MenuItem MenuItem11 = {
- &MenuItem12,
- 0,33,
- 132,10,
- ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0,
- (APTR)&IText45,
- NULL,
- NULL,
- &SubItem32,
- 0xFFFF
- };
-
- struct IntuiText IText46 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" FULL ",
- NULL
- };
-
- struct MenuItem MenuItem10 = {
- &MenuItem11,
- 0,22,
- 132,10,
- CHECKED+CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
- 0xfffffffb,
- (APTR)&IText46,
- NULL,
- 'f',
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText47 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)"outline",
- NULL
- };
-
- struct MenuItem MenuItem9 = {
- &MenuItem10,
- 0,11,
- 132,10,
- CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
- 0xfffffffd,
- (APTR)&IText47,
- NULL,
- 'l',
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText48 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" OFF ",
- NULL
- };
-
- struct MenuItem MenuItem8 = {
- &MenuItem9,
- 0,0,
- 132,10,
- CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
- 0xfffffffe,
- (APTR)&IText48,
- NULL,
- 'o',
- NULL,
- 0xFFFF
- };
-
- struct Menu Menu2 = {
- &Menu3,
- 99,0,
- 84,0,
- MENUENABLED,
- " GRID ",
- &MenuItem8
- };
-
- struct IntuiText IText49 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" About..",
- NULL
- };
-
- struct MenuItem MenuItem14 = {
- NULL,
- 0,11,
- 116,10,
- ITEMTEXT+ITEMENABLED+HIGHCOMP,
- 0,
- (APTR)&IText49,
- NULL,
- NULL,
- NULL,
- 0xFFFF
- };
-
- struct IntuiText IText50 = {
- 3,1,COMPLEMENT,
- 20,1,
- NULL,
- (UBYTE *)" DRAW ",
- NULL
- };
-
- struct MenuItem MenuItem13 = {
- &MenuItem14,
- 0,0,
- 116,10,
- ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
- 0,
- (APTR)&IText50,
- NULL,
- 'd',
- NULL,
- 0xFFFF
- };
-
- struct Menu Menu1 = {
- &Menu2,
- 0,0,
- 93,0,
- MENUENABLED,
- " MAIN ",
- &MenuItem13
- };
-
- #define MenuList Menu1
-
-
- /* end of PowerWindows source generation */
-
-
- struct NewScreen scrdef = {
- 0, 0, XSIZE+1, YSIZE+1,
- 2, /* 4 colors */
- 2, 3, /* detail/block pens */
- /* Auto screen format */
- ((XSIZE>320) ? HIRES : 0) | ((YSIZE>200) ? LACE : 0),
- CUSTOMSCREEN,
- NULL, NULL, NULL, NULL /* no special font, gadg, title, or bitmap */
- };
-
- struct NewWindow windef={0,4,639,395,3,2,MOUSEBUTTONS+MENUPICK+CLOSEWINDOW,
- WINDOWCLOSE | WINDOWDEPTH | ACTIVATE,
- NULL,NULL,titlemain,NULL,NULL,0,0,0,0,CUSTOMSCREEN};
-
-
-
- struct IntuitionBase *IntuitionBase;
- struct GfxBase *GfxBase;
- struct Screen *scr, *OpenScreen();
- struct Window *fbwin,*OpenWindow();
- struct IntuiMessage *message, *GetMsg();
- struct RastPort *rp;
- struct ViewPort *vp;
- struct FileLock *alock,*Lock();
- struct FileHandle *filehand,*Open();
-
-
- char coordname[] = "map:world.dat";
- long openflag = 0;
- long mclass, mcode, mx, my, alrsmem;
- APTR maddress;
- struct Window *mwin;
-
- /*
- struct dfrec {
- char code[2];
- short longitude;
- short latitude;
- };
- */
-
- #ifdef REVISED
- double Sqrt2 = 1.4142135623731;
- double PI = 3.1415926535898;
- double HalfPI = 1.5707963267949;
- double TwoPI = 6.2831853071796;
- double Radian = 1.7453292519943E-2;
- double RadianDiv100 = 1.7453292519943E-4; /* PI/180/100, needed to convert */
- /* data in WORLD.DAT to radians */
- #else
- double Sqrt2;
- double PI;
- double HalfPI;
- double TwoPI;
- double Radian;
- double RadianDiv100;
- #endif
-
- double pink,mpink,sinphi1,cosphi1,r2;
-
- double L, L1, PHI1, Lambda0;
- double ASPECT = 1.14; /* aspect ratio */
- double R; /* map radius set by draw */
-
-
- short *buff,*malloc();
-
- short XCENTER = 320; /* AMIGA Graphics constants. */
- short YCENTER = 207; /* Screen center X and Y */
- short NotVisible = -32767; /* Flag for point visibility */
- short LatitudeSpacing;
- short LongitudeSpacing;
- short pclng,pclat;
-
- short LastX, LastY, XP, YP; /* Save variables for plotting */
- short I, J, K, MapType, M, X1,Y1,X2, Y2, SX, SY;
-
-
- unsigned char LastPtVis, GRID;
-
-
- main ()
- {
- short areabuf[100];
- struct TmpRas tmpras,*InitTmpRas ();
- struct AreaInfo areainfo;
- extern struct FileLock *alock,*Lock();
- extern struct FileHandle *filehand,*Open();
- extern struct RastPort *rp;
- register short *dp;
- register unsigned long i, j, k;
- extern long mclass, mcode, mx, my, alrsmem;
- extern APTR maddress;
- extern struct IntuiMessage *message;
-
-
-
- if (!(buff = malloc(DFSIZE))) {
- printf("\nNO MEMORY, never mind.\n");
- exit(99);
- }
- printf("Checking world.dat integrity...\n");
- if (!(alock = Lock(&coordname,ACCESS_READ))) {
- printf("NO LOCK on %s\n",coordname);
- exit(99);
- }
- else {
- if (!(filehand = Open(&coordname,MODE_OLDFILE))) {
- printf("NO OPEN on %s, error = %d\n",coordname,IoErr());
- UnLock(alock);
- exit(99);
- }
- else {
- if ((Read(filehand,buff,DFSIZE)) != DFSIZE) {
- printf("BAD READ LENGTH or whatever on %s\n",coordname);
- Close(filehand);
- UnLock(alock);
- exit(99);
- }
- else {
- Close(filehand);
- UnLock(alock);
- }
- }
- }
-
- /* check rec code integrity & convert back-asswards IBM, 6502 type format */
-
- for (dp = buff, i = 0; dp < buff + DPOINTS*3; dp+=3, i++) {
- if ((*dp != 'LS') && (*dp != 'S ')) {
- printf("\nBad Code in world.dat -- data point # %d\n",i);
- exit(99);
- }
- *(dp+1) = (((*(dp+1)) << 8) & 0xff00) | (((*(dp+1)) >> 8) & 0xff);
- *(dp+2) = (((*(dp+2)) << 8) & 0xff00) | (((*(dp+2)) >> 8) & 0xff);
- }
- /**************************************************************************/
-
-
- setupfpc();
- openthings ();
- vp = &scr->ViewPort;
- rp = fbwin->RPort;
- rp -> Mask = 0xff;
- InitArea (&areainfo,areabuf,40);
- rp->AreaInfo = &areainfo;
- alrsmem = AllocRaster (100,50);
- rp->TmpRas = InitTmpRas (&tmpras,alrsmem,RASSIZE(100,50));
- SetDrMd (rp, JAM1);
- SetAPen(rp,3);
- GRID = 2;
-
- PHI1 = 45 * Radian; /* 45 */
- Lambda0 = -90 * Radian; /* -90 */
- pclat = 45;
- pclng = -90;
-
- LatitudeSpacing = 15; /* 15 */
- LongitudeSpacing = 15; /* 15 */
- MapType = 5; /* 5 */
- SetMenuStrip(fbwin,&Menu1);
- drawmap();
-
-
- FOREVER {
- Wait (1 << fbwin->UserPort->mp_SigBit);
- while (message = GetMsg (fbwin->UserPort)) {
- mclass = message->Class;
- mcode = message->Code;
- maddress = message->IAddress;
- mx = message->MouseX;
- my = message->MouseY;
- mwin = message->IDCMPWindow;
- ReplyMsg (message);
- if (mclass == CLOSEWINDOW) {
- FreeRaster (alrsmem,100,50);
- closethings ();
- exit (0);
- }
- if (mclass == MENUPICK && mcode != MENUNULL) procmenu ();
- }
- }
- }
-
-
- setupfpc()
- {
- #ifdef P68020
- #asm
- fmove.w #2,fp0
- fsqrt.x fp0
- fmove.d fp0,_Sqrt2
- fmovecr.x #0,fp0 ;move PI to fp0
- fmove.d fp0,_PI
- fscale.w #1,fp0 ;2 * pi
- fmove.d fp0,_TwoPI
- fscale.w #-2,fp0 ;pi / 2
- fmove.d fp0,_HalfPI
- fmovecr.x #0,fp0 ;faster than scale
- fdiv.w #180,fp0
- fmove.d fp0,_Radian
- fdiv.w #100,fp0
- fmove.d fp0,_RadianDiv100
- fmovecr.x #0,fp1
- fadd.x fp1,fp0
- fmove.d fp0,_pink
- fneg.x fp0
- fmove.d fp0,_mpink
- fsincos.d _PHI1,fp1:fp0
- fmove.d fp0,_sinphi1
- fmove.d fp1,_cosphi1
- fmove.d _R,fp0
- fscale.w #1,fp0
- fmove.d fp0,_r2
- #endasm
- #else
- pink=PI+RadianDiv100;
- mpink=-pink;
- sinphi1=sin(PHI1);
- cosphi1=cos(PHI1);
- r2=R*2;
- #endif
-
- }
-
-
- procmenu()
- {
- extern long mclass, mcode, mx, my;
- extern APTR maddress;
- register short i, j;
- register long menunum, itemnum, subnum;
-
- menunum = MENUNUM(mcode);
- itemnum = ITEMNUM(mcode);
- subnum = SUBNUM(mcode);
- switch (menunum) {
- case 0 : /* MAIN */
- switch (itemnum) {
- case 0 : /* DRAW */
- ClearMenuStrip(fbwin);
- drawmap();
- SetMenuStrip(fbwin,&Menu1);
- break;
- case 1 : /* ABOUT */
- break;
- default :
- break;
- }
- break;
- case 1 : /* GRID */
- switch (itemnum) {
- case 0 :
- case 1 :
- case 2 :
- GRID = itemnum;
- break;
- case 3:
- switch (subnum) {
- case 0:
- case 1:
- case 2:
- LatitudeSpacing = (subnum + 1) * 5;
- break;
- case 3:
- case 4:
- LatitudeSpacing = (subnum - 1) * 15;
- break;
- }
- break;
- case 4:
- switch (subnum) {
- case 0:
- case 1:
- case 2:
- LongitudeSpacing = (subnum + 1) * 5;
- break;
- case 3:
- case 4:
- LongitudeSpacing = (subnum - 1) * 15;
- break;
- }
- break;
- default :
- break;
- }
- break;
- case 2 : /* TYPE */
- MapType = itemnum + 1;
- break;
- case 3 : /* CENTER */
- if (itemnum) {
- pclng = 180 - (subnum * 30);
- Lambda0 = pclng * Radian;
- }
- else {
- pclat = 90 - (subnum * 15);
- PHI1 = pclat * Radian;
- }
- break;
- }
- }
-
-
- openthings ()
- {
- extern long openflag;
- char *OpenLibrary();
-
- if (!(IntuitionBase = (struct IntuitionBase *)
- OpenLibrary ("intuition.library", 1L))) {
- printf ("Intuition open failure.\n");
- exit (FALSE);
- }
- openflag |= 0x01;
-
- if (!(GfxBase = (struct GfxBase *)
- OpenLibrary ("graphics.library", 1L))) {
- printf ("Graphics library open failure.\n");
- closethings ();
- exit (FALSE);
- }
- openflag |= 0x02;
-
-
- if (!(scr = OpenScreen (&scrdef))) {
- printf ("Screen open failure.\n");
- closethings ();
- exit (FALSE);
- }
- openflag |= 0x10;
-
- windef.Screen = scr;
- if (!(fbwin = OpenWindow (&windef))) {
- printf ("Window open failure.\n");
- closethings ();
- exit (FALSE);
- }
- openflag |= 0x20;
- }
-
-
- closethings ()
- {
-
- if (openflag & 0x20) CloseWindow (fbwin);
- if (openflag & 0x10) CloseScreen (scr);
- if (openflag & 0x02) CloseLibrary (GfxBase);
- if (openflag & 0x01) CloseLibrary (IntuitionBase);
- }
-
-
- clrscreen ()
- {
- extern struct RastPort *rp;
-
- SetAPen (rp,0L);
- RectFill (rp,2,10,637,392);
- }
-
-
-
- drawmap()
- {
- register double LONGR,LATR,X,Y;
- register int XP,YP,LastX,LastY;
- register short *pp;
- double MaxLat = 80 * Radian; /* 80 degrees. for Mercator */
- double lam0 = Lambda0;
- double K;
- double CosC, CosL, SinPhi, CosPhi; /* Orthographic */
-
- switch (MapType) {
- case 1:
- R=70;
- break;
- case 2:
- R=85;
- break;
- case 3:
- R=85;
- break;
- case 4:
- R=95;
- break;
- case 5:
- R=90;
- break;
- }
- setupfpc();
- clrscreen();
- if (GRID == 2) drawgrid(0);
- else if (GRID == 1) drawgrid(1);
- SetAPen(rp,3);
- X = Y = 0; /* printf hangs if try to print NAN */
-
- for (pp = buff; pp < buff + DPOINTS*3; pp+=3) {
- if (*pp == 'LS') LastPtVis = FALSE;
- LONGR = (*(pp+1) * RadianDiv100) - lam0;
- LATR = *(pp+2) * RadianDiv100;
- if (LONGR < mpink) LONGR += TwoPI;
- else if (LONGR > pink) LONGR -= TwoPI;
-
- switch (MapType) {
- case 1: /* MERCATOR */
- if (fabs(LATR) < MaxLat) {
- X = R * LONGR;
- #ifdef REVISED
- Y = R * atan(sin(LATR));
- #else
- Y = R * atanh(sin(LATR));
- #endif
- }
- else X = NotVisible;
- break;
- case 2: /* EQUICYL */
- X = R * LONGR * cosphi1;
- Y = R * LATR;
- break;
- case 3: /* SINUSOIDAL */
- X = R * cos(LATR) * LONGR ;
- Y = R * LATR;
- break;
- case 4: /* HAMMER */
- LONGR *= .5;
- /* K = R * Sqrt2 / sqrt(1.0 + cos(LATR) * cos(LONGR));*/
- /* Compiler generates incorrect code for this statement: namely a
- jsr mulu# (integer multiply) for the product cos(LATR) * cos(LONGR) */
- K = R * Sqrt2 / sqrt(1.0 + (double)cos(LATR) * cos(LONGR));
- X = 2 * K * cos(LATR) * (sin(LONGR));
- Y = K * sin(LATR);
- break;
- case 5: /* ORTHOGRAPHIC */
- CosPhi = cos(LATR);
- SinPhi = sin(LATR);
- CosL = cos(LONGR)*CosPhi;
- CosC = sinphi1 * SinPhi + cosphi1 * CosL;
- if (CosC >= 0) {
- X = r2 * CosPhi * sin(LONGR);
- Y = r2 * (cosphi1 * SinPhi - sinphi1 * CosL);
- }
- else X = NotVisible;
- break;
- }
- if (message=GetMsg(fbwin->UserPort)) {
- ReplyMsg(message);
- return();
- }
- if (X > -300) {
- XP=(short)(X*ASPECT)+XCENTER;
- if ((ABS(LastX-XP)) > 100) LastPtVis=FALSE;
- YP= YCENTER-((short)(Y));
- if (LastPtVis) {
- Move(rp,LastX,LastY);
- Draw(rp,XP,YP);
- }
- LastPtVis=TRUE;
- LastX=XP;
- LastY=YP;
- }
- else LastPtVis=FALSE;
- }
- }
-
-
- drawgrid(outline)
- USHORT outline;
- {
- register double LONGR,LATR,X,Y;
- register int XP,YP,LastX,LastY;
- static short ol=1;
- short Longitude, Latitude, LatLimit, MaxLat, LongIncr, LatIncr;
- double LL, PP, A, RA, XN, YN, SINDT, COSDT;
- double K;
- double CosC, CosL, SinPhi, CosPhi; /* Orthographic */
- double lam0 = Lambda0,LONGR2;
-
- if (!outline) drawgrid(ol);
- SetAPen(rp,2);
- switch(MapType) {
- case 1:
- MaxLat=80;
- LongIncr=360;
- LatIncr=160;
- sprintf(anytext," < MERCATOR > MAP CENTER: Long. = %4d Lat. = %3d* ",\
- pclng,pclat);
- break;
- case 2:
- MaxLat=90;
- LongIncr=360;
- LatIncr=180;
- sprintf(anytext," < EQUIDISTANT CLYINDRICAL > MAP CENTER: Long. = %4d Lat. = %3d ",\
- pclng,pclat);
- break;
- case 3:
- MaxLat=90;
- LongIncr=360;
- LatIncr=5;
- sprintf(anytext," < SINUSOIDAL > MAP CENTER: Long. = %4d Lat. = %3d* ",\
- pclng,pclat);
- break;
- case 4:
- MaxLat=90;
- LongIncr=5;
- LatIncr=5;
- sprintf(anytext," < HAMMER > MAP CENTER: Long. = %4d Lat. = %3d* ",\
- pclng,pclat);
- break;
- case 5:
- MaxLat=90;
- LongIncr=5;
- LatIncr=5;
- sprintf(anytext," < ORTHOGRAPHIC > MAP CENTER: Long. = %4d Lat. = %3d ",\
- pclng,pclat);
- break;
- }
- lam0=0; PP=PHI1;
-
- if (outline) {
- if (MapType == 5) PP=0;
- PrintIText(rp,&anyprint,(640 -((strlen(anytext)) << 3)) >> 1,12);
- LatLimit = MaxLat; /* Draw only extreme latitudes */
- /* to make map outline */
- }
- else {
- LatLimit = (MaxLat/LatitudeSpacing)*LatitudeSpacing;
- }
- Latitude = LatLimit;
- while (Latitude >= -LatLimit) { /* Draw parallels */
- LATR = Latitude*Radian;
- LastPtVis = FALSE;
- Longitude = -180;
- while (Longitude <= 180) {
- LONGR = Longitude * Radian;
- LONGR -= lam0;
- if (LONGR < mpink) LONGR += TwoPI;
- else if (LONGR > pink) LONGR -= TwoPI;
- switch (MapType) {
- case 1: /* MERCATOR */
- if (fabs(LATR) < MaxLat) {
- X = R * LONGR;
- #ifdef REVISED
- Y = R * atan(sin(LATR));
- #else
- Y = R * atanh(sin(LATR));
- #endif
- }
- else X = NotVisible;
- break;
- case 2: /* EQUICYL */
- X = R * LONGR * cosphi1;
- Y = R * LATR;
- break;
- case 3: /* SINUSOIDAL */
- X = R * cos(LATR) * LONGR ;
- Y = R * LATR;
- break;
- case 4: /* HAMMER */
- LONGR *= .5;
- K = R * Sqrt2 / sqrt(1.0 + (double)cos(LATR) * cos(LONGR));
- X = 2 * K * cos(LATR) * (sin(LONGR));
- Y = K * sin(LATR);
- break;
- case 5: /* ORTHOGRAPHIC */
- /* R2=R+R;
- CosPhi1 = cos(PP);
- SinPhi1 = sin(PP);*/
- /* There was no need to compute these every data point so I didn't. */
-
- CosPhi = cos(LATR);
- SinPhi = sin(LATR);
- CosL = cos(LONGR)*CosPhi;
- CosC = sinphi1 * SinPhi + cosphi1 * CosL;
- if (CosC >= 0) {
- X = r2 * CosPhi * sin(LONGR);
- Y = r2 * (cosphi1 * SinPhi - sinphi1 * CosL);
- }
- else X = NotVisible;
- break;
- }/*switch*/
-
- if (X > -300) {
- XP=(short)(X*ASPECT)+XCENTER;
- YP= YCENTER-((short)(Y));
- if (LastPtVis) {
- Move(rp,LastX,LastY);
- Draw(rp,XP,YP);
- }
- LastPtVis=TRUE;
- LastX=XP;
- LastY=YP;
- }
- else LastPtVis=FALSE;
-
- Longitude += LongIncr;
- } /* while long */
- if (outline) Latitude -= (2*MaxLat);
- else Latitude -= LatitudeSpacing;
- } /* while lat */
-
-
-
- if (outline) lam0 = 0;
- else lam0 = Lambda0;
- Longitude = -180; /* Draw meridians */
- while (Longitude <= 180) {
- LONGR2 = Longitude * Radian;
- LastPtVis = FALSE;
- Latitude = MaxLat;
- while (Latitude >= -MaxLat) {
- LATR = Latitude * Radian;
- LONGR = LONGR2 - lam0;
- if (LONGR < mpink) LONGR += TwoPI;
- else if (LONGR > pink) LONGR -= TwoPI;
- switch (MapType) {
- case 1: /* MERCATOR */
- if (fabs(LATR) < MaxLat) {
- X = R * LONGR;
- #ifdef REVISED
- Y = R * atan(sin(LATR));
- #else
- Y = R * atanh(sin(LATR));
- #endif
- }
- else X = NotVisible;
- break;
- case 2: /* EQUICYL */
- X = R * LONGR * cosphi1;
- Y = R * LATR;
- break;
- case 3: /* SINUSOIDAL */
- X = R * cos(LATR) * LONGR ;
- Y = R * LATR;
- break;
- case 4: /* HAMMER */
- LONGR *= 0.5;
- K = R * Sqrt2 / sqrt(1.0 + (double)cos(LATR) * cos(LONGR));
- X = 2 * K * cos(LATR) * sin(LONGR);
- Y = K * sin(LATR);
- break;
- case 5: /* ORTHOGRAPHIC */
- CosPhi = cos(LATR);
- SinPhi = sin(LATR);
- CosL = cos(LONGR)*CosPhi;
- CosC = sinphi1 * SinPhi + cosphi1 * CosL;
- if (CosC >= 0) {
- X = r2 * CosPhi * sin(LONGR);
- Y = r2 * (cosphi1 * SinPhi - sinphi1 * CosL);
- }
- else X = NotVisible;
- break;
- }/*switch*/
-
- if (X > -300) {
- XP = (short)(X*ASPECT)+XCENTER;
- YP = YCENTER-((short)(Y));
- if (LastPtVis) {
- Move(rp,LastX,LastY);
- Draw(rp,XP,YP);
- }
- LastPtVis=TRUE;
- LastX=XP;
- LastY=YP;
- }
- else LastPtVis=FALSE;
- Latitude -= LatIncr;
- }/*while*/
-
- if (outline) Longitude += 360;
- else Longitude += LongitudeSpacing;
- }/*while*/
-
-
- if ((outline) && (MapType==5)) {
- /* A=0; /* Draw circular outline
- RA = r2 * ASPECT;
- SINDT= 0.05996400648;
- COSDT= 0.99820053993;
- X=1; Y=0;
- XP= XCENTER + (short)RA;
- YP= YCENTER;
- LastX=XP;
- LastY=YP;
- while (A <= TwoPI) { /* Compute points on the circle
- XN= X * COSDT - Y * SINDT;
- YN= X * SINDT + Y * COSDT;
- X= XN; Y= YN;
- XP= XCENTER + (short)(X*RA);
- YP= YCENTER + (short)(Y*r2);
- Move(rp,LastX,LastY);
- Draw(rp,XP,YP);
- LastX=XP;
- LastY=YP;
- A+=0.06;
- }
- */
- DrawEllipse(rp,XCENTER,YCENTER,(int)(r2*ASPECT),(int)(r2));
- }
- }
- /* The damn floating point routine is faster than DrawElipse() !! */
-
-