home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / Ken Long / NewShuttle1.0d4-c / CW / NewShuttle.µ.c < prev    next >
Encoding:
Text File  |  1994-12-04  |  21.8 KB  |  1,094 lines  |  [TEXT/MMCC]

  1. //• NewShuttle.c
  2.  
  3. //• Wire frame shuttle viewer
  4. //• by Eddy Vasile 70451,3333 compuserve
  5. //• Plot points collected from a fortran bbs in 86
  6. //• Ported to Think C™ on 22 June 1993 By Kenneth A.Long.
  7.  
  8. //• A note from Ken Long:
  9. //• This was my second successfull Pascal to C port!  I did have a bit 
  10. //• of help from Mark Hanrek, of AOL fame (he likes to help novice 
  11. //• programmers).
  12. //• I guess I'm going to have to stop calling myself a "novice" 
  13. //• because I'm learning too much!  But I this to help other beginning 
  14. //• C programmers.
  15. //• There's nothing special about this source code, so it's public 
  16. //• domain.
  17. //• I added a 'BNDL' and some color icons, for effect.
  18. //• I hope you have as much fun fiddling with this program as I did!
  19. //• I'm a self-taught C programmer and Pascal porter.
  20.  
  21. //• program ShuttleViewer;
  22.  
  23. #include <math.h>
  24. #include <stdio.h>
  25. #include <stdlib.h>
  26.  
  27. #define Max_A        300
  28. #define Max_B        124
  29. #define Max_C        259
  30. #define Max_D        631
  31. #define OLDSYSTEM    15
  32.  
  33. //• --------------------------------------------------------------- •//
  34. //• Glow-balls!
  35. //• --------------------------------------------------------------- •//
  36.  
  37. //• Can't drag, but if we could...!
  38. Rect        dragRect;
  39.  
  40. //• The 12" monitor.
  41. Rect            windowBounds = {  0,   0, 384, 512 };
  42. RgnHandle        mBarRgn, GrayRgn;
  43. short            *mBarHeightPtr;
  44. short            oldMBarHeight;
  45.  
  46. short o_X_angle, o_Y_angle, o_Z_angle, Pc, Ec;
  47.  
  48. double     CH, SH, CP, SP, CB, SB, 
  49.         XV, YV, ZV, 
  50.         X, Y, Z, 
  51.         X3, Y3, Z3, 
  52.         AM, BM, CM, DM, EM, FM, GM, HM, IM, 
  53.         D, P, B, H, U, 
  54.         Vc, 
  55.         U1, V1;
  56.  
  57. double V[Max_A + 1][3];
  58. double E[Max_A + 1];
  59. double data[Max_D];
  60.  
  61. Boolean hasColorQD;
  62. WindowPtr     window;
  63. long         ticks, oldTickCount;
  64.  
  65. //• --------------------------------------------------------------- •//
  66. //• Prototypeland:
  67. //• --------------------------------------------------------------- •//
  68. void HideMenuBar (void);
  69. void ShowMenuBar (void);
  70. Boolean Check_The_Equipment (void);
  71. void main (void);
  72. void Do_Init_Managers (void);
  73. int Init_Variables (void);
  74. void Set_Up_Window (void);
  75. void Main_Event_Loop (void);
  76. void Init_Shuttle_Calc (void);
  77. void Init_Shuttle_Proportions (void);
  78. void Draw_Shuttle_And_Coordinates (void);
  79. void Draw_Shuttle (void);
  80. void Set_Data_Array (void);
  81.  
  82. //• --------------------------------------------------------------- •//
  83.  
  84.  
  85. void HideMenuBar (void) 
  86. {
  87.     Rect    mBarRect;
  88.  
  89.     GrayRgn = GetGrayRgn ();
  90.     mBarHeightPtr = (short *)  0x0BAA;
  91.     oldMBarHeight = *mBarHeightPtr;
  92.     *mBarHeightPtr = 0;
  93.     mBarRect = qd.screenBits.bounds;
  94.     mBarRect.bottom = mBarRect.top + oldMBarHeight;
  95.     mBarRgn = NewRgn ();
  96.     RectRgn (mBarRgn, &mBarRect);
  97.     UnionRgn (GrayRgn, mBarRgn, GrayRgn);
  98.     PaintOne (0L, mBarRgn);
  99. }
  100.  
  101. void ShowMenuBar (void) 
  102. {
  103.     *mBarHeightPtr = oldMBarHeight;
  104.     DiffRgn (GrayRgn, mBarRgn, GrayRgn);
  105.     DisposeRgn (mBarRgn);
  106. }
  107.  
  108. Boolean Check_The_Equipment ()
  109. {
  110.     SysEnvRec this_Mac;        //• The System Environment Record for your Mac.
  111.     
  112.     SysEnvirons(2,&this_Mac);
  113.     
  114.     if (!this_Mac.hasColorQD)
  115.         return(false);
  116. //    return(NGetTrapAddress(0xAB03, ToolTrap) != 
  117. //           NGetTrapAddress(0xA89F,ToolTrap));
  118. }
  119.  
  120. //• Set the forecolor with a single line.
  121. SetForeColor (short red, short green,short  blue)
  122. {
  123.     RGBColor theColor;
  124.  
  125.     theColor.red = red;
  126.     theColor.green = green;
  127.     theColor.blue = blue;
  128.     RGBForeColor(&theColor);
  129. }
  130.  
  131. //• Set the backcolor with a single line.
  132. SetBackColor (short red, short green,short  blue)
  133. {
  134.     RGBColor theColor;
  135.  
  136.     theColor.red = red;
  137.     theColor.green = green;
  138.     theColor.blue = blue;
  139.     RGBForeColor(&theColor);
  140. }
  141.  
  142. void main (void)
  143. {
  144.     Do_Init_Managers ();
  145.     Check_The_Equipment ();
  146.     Set_Data_Array ();
  147.     Init_Variables ();
  148.     HideMenuBar ();
  149.     Set_Up_Window ();
  150.     HideCursor ();
  151.     Main_Event_Loop ();
  152.     ShowCursor ();
  153.     ShowMenuBar ();
  154. }
  155.  
  156. void Do_Init_Managers (void)
  157. {
  158.     MaxApplZone ();
  159.  
  160.     InitGraf (&qd.thePort);
  161.     InitFonts ();
  162.     InitWindows ();
  163.     InitMenus ();
  164.     TEInit ();
  165.     InitDialogs (nil);
  166.     InitCursor ();
  167. }
  168.  
  169. int Init_Variables (void)
  170. {
  171.     short position, j, Ec, Pc;
  172.  
  173.     position = 0;
  174.     for (Pc = 1; Pc <= Max_B; Pc++)
  175.     {
  176.         for (j = 0; j < 3; j++)
  177.         {
  178.             position = position + 1;
  179.             V [Pc] [j] = data [position] * 0.2; //• This last number controls
  180.         }                                        //• the shuttle's scale.
  181.     }
  182.     for (Ec = 0; Ec < Max_C; Ec++)
  183.     {
  184.         position = position + 1;
  185.         E [Ec] = data [position];
  186.     }
  187. }
  188.  
  189. void Set_Up_Window(void)
  190. {
  191.     dragRect = qd.screenBits.bounds;
  192.     
  193.     window = NewWindow(0L, &windowBounds, "\p", true, plainDBox, (WindowPtr)-1L, false, 0);
  194.     SetPort(window);
  195. }
  196.  
  197. //************************************************************************
  198.  
  199. void Main_Event_Loop (void)
  200. {
  201.     Rect shuttleRect;
  202.  
  203.     shuttleRect = windowBounds;
  204.     
  205.     while (! Button ())
  206.     {
  207.         BackColor (blackColor);
  208.         EraseRect(&shuttleRect);
  209.         
  210.         Draw_Shuttle_And_Coordinates ();//• Comment out to just draw.
  211.         
  212.         Delay (150, &ticks);            //• Delay between views, to enjoy :)
  213.         o_X_angle = o_X_angle + 10;
  214.         o_Y_angle = o_Y_angle + 10;
  215.         o_Z_angle = o_Z_angle + 10;
  216.     }
  217. }
  218.  
  219.  
  220.  
  221. //************************************************************************
  222.  
  223. void Init_Shuttle_Calc (void)
  224. {
  225.     CH =  cos (H);
  226.     SH =  sin (H);
  227.     CP =  cos (P);
  228.     SP =  sin (P);
  229.     CB =  cos (B);
  230.     SB =  sin (B);
  231.     
  232.     AM =  CB * CH - SH * SP * SB;
  233.     BM = -CB * SH - SP * CH * SB;
  234.     CM =  CP * SB;
  235.     DM =  SH * CP;
  236.     EM =  CP * CH;
  237.     FM =  SP;
  238.     GM = -CH * SB - SH * SP * CB;
  239.     HM =  SH * SB - SP * CH * CB;
  240.     IM =  CP * CB;
  241. }
  242.  
  243. //************************************************************************
  244.  
  245. void Init_Shuttle_Proportions (void)
  246. {
  247.     X  = X - XV;
  248.     Y  = Y - YV;
  249.     Z  = Z - ZV;
  250.     X3 = AM * X + BM * Y + CM * Z;
  251.     Y3 = DM * X + EM * Y + FM * Z;
  252.     Z3 = GM * X + HM * Y + IM * Z;
  253.     U  = 135 + 13.5 * D * X3 / Y3;    //• Shuttle stretch/shrink width.
  254.     Vc = 80 - 12.5 * D * Z3 / Y3;    //• Shuttle stretch/shrink length.
  255. }                                    //• (Use 1st or 2nd number.)
  256.  
  257. //************************************************************************
  258.  
  259. void Draw_Shuttle_And_Coordinates (void)
  260. {
  261.     short     Ec;
  262.     short temp_X, temp_Y, current_line = 1, current_column = 0;
  263.     Str255    number_string_1, number_string_2;
  264.     Str255    comma;
  265.     EventRecord theEvent;
  266.     
  267.     TextFace (geneva);
  268.     TextSize (9);
  269.     MoveTo (180, 362);
  270.     DrawString ("\p");
  271.     SetForeColor (0xaaaa, 0xaaaa, 0xaaaa);
  272.     MoveTo (80, 382);
  273.     DrawString ("\pClick and HOLD to STOP - Number keys control draw delay");
  274.     TextFace (0);                    //• System font.
  275.  
  276.     X  = 0;
  277.     Y  = 0;
  278.     Z  = 0;
  279.     X3 = 0;
  280.     Y3 = 0;
  281.     Z3 = 0;
  282.     AM = 0;
  283.     BM = 0;
  284.     CM = 0;
  285.     DM = 0;
  286.     EM = 0;
  287.     FM = 0;
  288.     GM = 0;
  289.     HM = 0;
  290.     IM = 0;
  291.     D  = 0;
  292.     P  = 0;
  293.     B  = 0;
  294.     H  = 0;
  295.     U  = 0;
  296.     Vc = 0;
  297.     U1 = 0;
  298.     V1 = 0;
  299.     D  = 120;
  300.     
  301.     P  = 6.28 * o_X_angle / 255 - 3.1416;
  302.     B  = 6.28 * o_Z_angle / 255;
  303.     H  = 6.28 * o_Y_angle / 255;
  304.  
  305.     Init_Shuttle_Calc ();
  306.     
  307.     XV = - D * CP * SH;
  308.     YV = - D * CP * CH;
  309.     ZV = - D * SP;
  310.     
  311.     for (Ec = 0; Ec < Max_C; Ec++)        //• Starting point.
  312.     {
  313.         X = V [abs (ceil (E [Ec]))] [0];
  314.         Y = V [abs (ceil (E [Ec]))] [1];
  315.         Z = V [abs (ceil (E [Ec]))] [2];
  316.  
  317.         Init_Shuttle_Proportions ();
  318.  
  319.         if (E [Ec] > 0)
  320.         {
  321.             temp_X = ceil( U1 * 2);// + 75 );
  322.             temp_Y = ceil( V1 + 130);//20 );
  323.  
  324. //• --------------------------------------------------------------- •//
  325. //• The following snippet draws the point numbers.            
  326. //• --------------------------------------------------------------- •//
  327.  
  328.             SetForeColor (0xffff, 0xffff, 0x0000);
  329.             MoveTo((current_column * 75), current_line * 11);
  330.             NumToString((long) temp_X, number_string_1 );        //• Show temp_X.
  331.             TextSize (9);
  332.             DrawString( number_string_1 );
  333.             
  334.             MoveTo((current_column * 75) + 27, current_line * 11);
  335.             NumToString((long) temp_Y, number_string_2 );        //• Show temp_Y.
  336.             DrawString( number_string_2 );
  337.             
  338.             Delay (5, &ticks);
  339.  
  340. //• --------------------------------------------------------------- •//
  341. //• Break from coord drawing to draw a shuttle line.
  342. //• --------------------------------------------------------------- •//
  343.             
  344.             MoveTo (ceil (U1 * 2),         //• Start left.
  345.                     ceil (V1 + 130));    //• Start top.
  346.  
  347.             SetForeColor (0xffff, 0xffff, 0);
  348.             LineTo (ceil (U  * 2),         //• End left.
  349.                     ceil (Vc + 130));    //• End top.
  350.  
  351. //• --------------------------------------------------------------- •//
  352. //• Back to coord drawing to draw again and get ready for next.
  353. //• --------------------------------------------------------------- •//
  354.             
  355.             //• This draws the coord's again in blue
  356.             SetForeColor (0x0000, 0x0000, 0xffff);
  357.             MoveTo((current_column * 75), current_line * 11);
  358.             NumToString((long) temp_X, number_string_1 ); //• Show temp_X.
  359.             DrawString( number_string_1 );
  360.             
  361.             MoveTo((current_column * 75) + 27, current_line * 11);
  362.             NumToString((long) temp_Y, number_string_2 ); //• Show temp_Y.
  363.             DrawString( number_string_2 );
  364.             
  365.             if ( current_line++ > 32 )
  366.             {
  367.                 current_line = 1;
  368.                 current_column++;
  369.             }
  370.             if ( current_column > 6 )
  371.             {
  372.                 current_column = 0;
  373.             }
  374.             TextSize (12);        //• This puts the size back.
  375.             
  376. //• --------------------------------------------------------------- •//
  377.  
  378.         }
  379.         U1 = U;
  380.         V1 = Vc;
  381.     }
  382. }
  383.  
  384. //************************************************************************
  385.  
  386. void Draw_Shuttle (void)
  387. {
  388.     short     Ec;
  389.     short temp_X, temp_Y, current_line = 1, current_column = 0;
  390.     Str255    number_string;
  391.  
  392.     TextFace (geneva);
  393.     TextSize (9);
  394.     TextMode (srcXor); //• white on black background
  395.     MoveTo (180, 362);
  396.     DrawString ("\p");
  397.     MoveTo (180, 382);
  398.     DrawString ("\pClick and hold to STOP");
  399.     TextFace (0);                    //• System font.
  400.     PenNormal ();                    //• Get rid of srcXor.
  401.  
  402.     X  = 0;
  403.     Y  = 0;
  404.     Z  = 0;
  405.     X3 = 0;
  406.     Y3 = 0;
  407.     Z3 = 0;
  408.     AM = 0;
  409.     BM = 0;
  410.     CM = 0;
  411.     DM = 0;
  412.     EM = 0;
  413.     FM = 0;
  414.     GM = 0;
  415.     HM = 0;
  416.     IM = 0;
  417.     D  = 0;
  418.     P  = 0;
  419.     B  = 0;
  420.     H  = 0;
  421.     U  = 0;
  422.     Vc = 0;
  423.     U1 = 0;
  424.     V1 = 0;
  425.     D  = 120;
  426.     
  427.     P  = 6.28 * o_X_angle / 255 - 3.1416;
  428.     B  = 6.28 * o_Z_angle / 255;
  429.     H  = 6.28 * o_Y_angle / 255;
  430.  
  431.     Init_Shuttle_Calc ();
  432.     
  433.     XV = - D * CP * SH;
  434.     YV = - D * CP * CH;
  435.     ZV = - D * SP;
  436.     for (Ec = 0; Ec < Max_C; Ec++)        //• Starting point.
  437.     {
  438.         X = V [abs (ceil (E [Ec]))] [0];
  439.         Y = V [abs (ceil (E [Ec]))] [1];
  440.         Z = V [abs (ceil (E [Ec]))] [2];
  441.  
  442.         Init_Shuttle_Proportions ();
  443.  
  444.         if (E [Ec] > 0)
  445.         {
  446.             MoveTo (ceil (U1 * 2),         //• Start left.
  447.                     ceil (V1 + 130));    //• Start top.
  448.                     
  449.             LineTo (ceil (U  * 2),         //• End left.
  450.                     ceil (Vc + 130));    //• End top.
  451.         }
  452.         U1 = U;
  453.         V1 = Vc;
  454. //        Delay (1, &ticks);    //• Commented out for  FAST draw.
  455.     }
  456. }
  457.  
  458. //************************************************************************
  459.  
  460. void Set_Data_Array (void)
  461. {
  462.     data[  1] =    0;
  463.     data[  2] =   -2;
  464.     data[  3] =   46;
  465.     data[  4] =    2;
  466.     data[  5] =   -3;
  467.     data[  6] =   46;
  468.     data[  7] =    2;
  469.     data[  8] =   -5;
  470.     data[  9] =   46;
  471.     data[ 10] =    2;
  472.     data[ 11] =   -7;
  473.     data[ 12] =   46;
  474.     data[ 13] =    0;
  475.     data[ 14] =   -7;
  476.     data[ 15] =   46;
  477.     data[ 16] =   -2;
  478.     data[ 17] =   -7;
  479.     data[ 18] =   46;
  480.     data[ 19] =   -2;
  481.     data[ 20] =   -5;
  482.     data[ 21] =   46;
  483.     data[ 22] =   -2;
  484.     data[ 23] =   -3;
  485.     data[ 24] =   46;
  486.     data[ 25] =    0;
  487.     data[ 26] =   -1;
  488.     data[ 27] =   43;
  489.     data[ 28] =    3;
  490.     data[ 29] =   -2;
  491.     data[ 30] =   43;
  492.     data[ 31] =    4;
  493.     data[ 32] =   -5;
  494.     data[ 33] =   43;
  495.     data[ 34] =    3;
  496.     data[ 35] =   -7;
  497.     data[ 36] =   43;
  498.     data[ 37] =    0;
  499.     data[ 38] =   -8;
  500.     data[ 39] =   43;
  501.     data[ 40] =   -3;
  502.     data[ 41] =   -7;
  503.     data[ 42] =   43;
  504.     data[ 43] =   -4;
  505.     data[ 44] =   -5;
  506.     data[ 45] =   43;
  507.     data[ 46] =   -3;
  508.     data[ 47] =   -2;
  509.     data[ 48] =   43;
  510.     data[ 49] =    0;
  511.     data[ 50] =    2;
  512.     data[ 51] =   38;
  513.     data[ 52] =    5;
  514.     data[ 53] =    0;
  515.     data[ 54] =   38;
  516.     data[ 55] =    6;
  517.     data[ 56] =   -4;
  518.     data[ 57] =   38;
  519.     data[ 58] =    4;
  520.     data[ 59] =   -8;
  521.     data[ 60] =   38;
  522.     data[ 61] =    0;
  523.     data[ 62] =   -9;
  524.     data[ 63] =   38;
  525.     data[ 64] =   -4;
  526.     data[ 65] =   -8;
  527.     data[ 66] =   38;
  528.     data[ 67] =   -6;
  529.     data[ 68] =   -4;
  530.     data[ 69] =   38;
  531.     data[ 70] =   -5;
  532.     data[ 71] =    0;
  533.     data[ 72] =   38;
  534.     data[ 73] =    0;
  535.     data[ 74] =    4;
  536.     data[ 75] =   33;
  537.     data[ 76] =    5;
  538.     data[ 77] =    1;
  539.     data[ 78] =   33;
  540.     data[ 79] =    6;
  541.     data[ 80] =   -5;
  542.     data[ 81] =   33;
  543.     data[ 82] =    4;
  544.     data[ 83] =   -9;
  545.     data[ 84] =   33;
  546.     data[ 85] =    0;
  547.     data[ 86] =  -10;
  548.     data[ 87] =   33;
  549.     data[ 88] =   -4;
  550.     data[ 89] =   -9;
  551.     data[ 90] =   33;
  552.     data[ 91] =   -6;
  553.     data[ 92] =   -5;
  554.     data[ 93] =   33;
  555.     data[ 94] =   -5;
  556.     data[ 95] =    1;
  557.     data[ 96] =   33;
  558.     data[ 97] =    0;
  559.     data[ 98] =    8;
  560.     data[ 99] =   26;
  561.     data[100] =    4;
  562.     data[101] =    7;
  563.     data[102] =   26;
  564.     data[103] =    8;
  565.     data[104] =    2;
  566.     data[105] =   26;
  567.     data[106] =    8;
  568.     data[107] =   -7;
  569.     data[108] =   26;
  570.     data[109] =    0;
  571.     data[110] =  -10;
  572.     data[111] =   26;
  573.     data[112] =   -8;
  574.     data[113] =   -7;
  575.     data[114] =   26;
  576.     data[115] =   -8;
  577.     data[116] =    2;
  578.     data[117] =   26;
  579.     data[118] =   -4;
  580.     data[119] =    7;
  581.     data[120] =   26;
  582.     data[121] =    0;
  583.     data[122] =    8;
  584.     data[123] =   22;
  585.     data[124] =    4;
  586.     data[125] =    8;
  587.     data[126] =   22;
  588.     data[127] =    8;
  589.     data[128] =    3;
  590.     data[129] =   22;
  591.     data[130] =    8;
  592.     data[131] =   -8;
  593.     data[132] =   22;
  594.     data[133] =    0;
  595.     data[134] =  -10;
  596.     data[135] =   22;
  597.     data[136] =   -8;
  598.     data[137] =   -8;
  599.     data[138] =   22;
  600.     data[139] =   -8;
  601.     data[140] =    3;
  602.     data[141] =   22;
  603.     data[142] =   -4;
  604.     data[143] =    8;
  605.     data[144] =   22;
  606.     data[145] =    0;
  607.     data[146] =    8;
  608.     data[147] =   14;
  609.     data[148] =    5;
  610.     data[149] =    7;
  611.     data[150] =   14;
  612.     data[151] =    8;
  613.     data[152] =    4;
  614.     data[153] =   14;
  615.     data[154] =    8;
  616.     data[155] =   -9;
  617.     data[156] =   14;
  618.     data[157] =    0;
  619.     data[158] =  -10;
  620.     data[159] =   14;
  621.     data[160] =   -8;
  622.     data[161] =   -9;
  623.     data[162] =   14;
  624.     data[163] =   -8;
  625.     data[164] =    4;
  626.     data[165] =   14;
  627.     data[166] =   -5;
  628.     data[167] =    7;
  629.     data[168] =   14;
  630.     data[169] =    0;
  631.     data[170] =    8;
  632.     data[171] =    4;
  633.     data[172] =    5;
  634.     data[173] =    7;
  635.     data[174] =    4;
  636.     data[175] =    8;
  637.     data[176] =    4;
  638.     data[177] =    4;
  639.     data[178] =    8;
  640.     data[179] =   -9;
  641.     data[180] =    4;
  642.     data[181] =    0;
  643.     data[182] =  -10;
  644.     data[183] =    4;
  645.     data[184] =   -8;
  646.     data[185] =   -9;
  647.     data[186] =    4;
  648.     data[187] =   -8;
  649.     data[188] =    4;
  650.     data[189] =    4;
  651.     data[190] =   -5;
  652.     data[191] =    7;
  653.     data[192] =    4;
  654.     data[193] =    0;
  655.     data[194] =    8;
  656.     data[195] =  -12;
  657.     data[196] =    5;
  658.     data[197] =    7;
  659.     data[198] =  -12;
  660.     data[199] =    8;
  661.     data[200] =    4;
  662.     data[201] =  -12;
  663.     data[202] =    8;
  664.     data[203] =   -9;
  665.     data[204] =  -12;
  666.     data[205] =    0;
  667.     data[206] =  -10;
  668.     data[207] =  -12;
  669.     data[208] =   -8;
  670.     data[209] =   -9;
  671.     data[210] =  -12;
  672.     data[211] =   -8;
  673.     data[212] =    4;
  674.     data[213] =  -12;
  675.     data[214] =   -5;
  676.     data[215] =    7;
  677.     data[216] =  -12;
  678.     data[217] =    0;
  679.     data[218] =    8;
  680.     data[219] =  -27;
  681.     data[220] =    5;
  682.     data[221] =    7;
  683.     data[222] =  -27;
  684.     data[223] =    8;
  685.     data[224] =    4;
  686.     data[225] =  -27;
  687.     data[226] =    8;
  688.     data[227] =   -9;
  689.     data[228] =  -27;
  690.     data[229] =    0;
  691.     data[230] =  -10;
  692.     data[231] =  -27;
  693.     data[232] =   -8;
  694.     data[233] =   -9;
  695.     data[234] =  -27;
  696.     data[235] =   -8;
  697.     data[236] =    4;
  698.     data[237] =  -27;
  699.     data[238] =   -5;
  700.     data[239] =    7;
  701.     data[240] =  -27;
  702.     data[241] =    0;
  703.     data[242] =    8;
  704.     data[243] =  -36;
  705.     data[244] =    5;
  706.     data[245] =    7;
  707.     data[246] =  -36;
  708.     data[247] =    8;
  709.     data[248] =    4;
  710.     data[249] =  -36;
  711.     data[250] =    8;
  712.     data[251] =   -9;
  713.     data[252] =  -36;
  714.     data[253] =    0;
  715.     data[254] =  -10;
  716.     data[255] =  -36;
  717.     data[256] =   -8;
  718.     data[257] =   -9;
  719.     data[258] =  -36;
  720.     data[259] =   -8;
  721.     data[260] =    4;
  722.     data[261] =  -36;
  723.     data[262] =   -5;
  724.     data[263] =    7;
  725.     data[264] =  -36;
  726.     data[265] =    0;
  727.     data[266] =    9;
  728.     data[267] =  -43;
  729.     data[268] =    2;
  730.     data[269] =    9;
  731.     data[270] =  -43;
  732.     data[271] =    9;
  733.     data[272] =    2;
  734.     data[273] =  -43;
  735.     data[274] =    9;
  736.     data[275] =  -10;
  737.     data[276] =  -43;
  738.     data[277] =    0;
  739.     data[278] =  -11;
  740.     data[279] =  -43;
  741.     data[280] =   -9;
  742.     data[281] =  -10;
  743.     data[282] =  -43;
  744.     data[283] =   -9;
  745.     data[284] =    2;
  746.     data[285] =  -43;
  747.     data[286] =   -2;
  748.     data[287] =    9;
  749.     data[288] =  -43;
  750.     data[289] =    0;
  751.     data[290] =   10;
  752.     data[291] =  -48;
  753.     data[292] =    2;
  754.     data[293] =    9;
  755.     data[294] =  -48;
  756.     data[295] =    9;
  757.     data[296] =    2; 
  758.     data[297] =  -48;
  759.     data[298] =   10;
  760.     data[299] =  -10;
  761.     data[300] =  -48; 
  762.     data[301] =    0;
  763.     data[302] =  -10;
  764.     data[303] =  -48;
  765.     data[304] =  -10; 
  766.     data[305] =  -10;
  767.     data[306] =  -48;
  768.     data[307] =   -9;
  769.     data[308] =    2; 
  770.     data[309] =  -48;
  771.     data[310] =   -2;
  772.     data[311] =    9;
  773.     data[312] =  -48; 
  774.     data[313] =    9;
  775.     data[314] =   -9;
  776.     data[315] =   21;
  777.     data[316] =   15; 
  778.     data[317] =   -9;
  779.     data[318] =  -16;
  780.     data[319] =   35;
  781.     data[320] =  -10;
  782.     data[321] =  -36;
  783.     data[322] =   35;
  784.     data[323] =  -10;
  785.     data[324] =  -40;
  786.     data[325] =   -9;
  787.     data[326] =   -9;
  788.     data[327] =   21;
  789.     data[328] =  -15;
  790.     data[329] =   -9;
  791.     data[330] =  -16;
  792.     data[331] =  -35;
  793.     data[332] =  -10;
  794.     data[333] =  -36;
  795.     data[334] =  -35;
  796.     data[335] =  -10;
  797.     data[336] =  -40;
  798.     data[337] =    0;
  799.     data[338] =   13;
  800.     data[339] =  -37;
  801.     data[340] =    0;
  802.     data[341] =   33;
  803.     data[342] =  -60;
  804.     data[343] =    0;
  805.     data[344] =   33;
  806.     data[345] =  -69;
  807.     data[346] =    0;
  808.     data[347] =   14;
  809.     data[348] =  -60;
  810.     data[349] =    6;
  811.     data[350] =   11;
  812.     data[351] =  -43;
  813.     data[352] =    6;
  814.     data[353] =   11;
  815.     data[354] =  -48;
  816.     data[355] =   11;
  817.     data[356] =    5;
  818.     data[357] =  -43;
  819.     data[358] =   11;
  820.     data[359] =    5;
  821.     data[360] =  -48;
  822.     data[361] =   -6;
  823.     data[362] =   11;
  824.     data[363] =  -43;
  825.     data[364] =   -6;
  826.     data[365] =   11;
  827.     data[366] =  -48;
  828.     data[367] =  -11;
  829.     data[368] =    5;
  830.     data[369] =  -43;
  831.     data[370] =  -11;
  832.     data[371] =    5;
  833.     data[372] =  -48;
  834.     data[373] =   -1;
  835.     data[374] =    2;
  836.     data[375] =    3;
  837.     data[376] =    4;
  838.     data[377] =    5;
  839.     data[378] =    6;
  840.     data[379] =    7;
  841.     data[380] =    8;
  842.     data[381] =    1;
  843.     data[382] =   -9;
  844.     data[383] =   10;
  845.     data[384] =   11;
  846.     data[385] =   12;
  847.     data[386] =   13;
  848.     data[387] =   14;
  849.     data[388] =   15;
  850.     data[389] =   16;
  851.     data[390] =    9;
  852.     data[391] =  -17;
  853.     data[392] =   18;
  854.     data[393] =   19;
  855.     data[394] =   20;
  856.     data[395] =   21;
  857.     data[396] =   22;
  858.     data[397] =   23;
  859.     data[398] =   24;
  860.     data[399] =   17;
  861.     data[400] =  -25;
  862.     data[401] =   26;
  863.     data[402] =   27;
  864.     data[403] =   28;
  865.     data[404] =   29;
  866.     data[405] =   30;
  867.     data[406] =   31;
  868.     data[407] =   32;
  869.     data[408] =   25;
  870.     data[409] =  -33;
  871.     data[410] =   34;
  872.     data[411] =   35;
  873.     data[412] =   36;
  874.     data[413] =   37;
  875.     data[414] =   38;
  876.     data[415] =   39;
  877.     data[416] =   40;
  878.     data[417] =   33;
  879.     data[418] =  -41;
  880.     data[419] =   42;
  881.     data[420] =   43;
  882.     data[421] =   44;
  883.     data[422] =   45;
  884.     data[423] =   46;
  885.     data[424] =   47;
  886.     data[425] =   48;
  887.     data[426] =   41;
  888.     data[427] =  -49;
  889.     data[428] =   50;
  890.     data[429] =   51;
  891.     data[430] =   52;
  892.     data[431] =   53;
  893.     data[432] =   54;
  894.     data[433] =   55;
  895.     data[434] =   56;
  896.     data[435] =   49;
  897.     data[436] =  -57;
  898.     data[437] =   58;
  899.     data[438] =   59;
  900.     data[439] =   60;
  901.     data[440] =   61;
  902.     data[441] =   62;
  903.     data[442] =   63;
  904.     data[443] =   64;
  905.     data[444] =   57;
  906.     data[445] =  -65;
  907.     data[446] =   66;
  908.     data[447] =   67;
  909.     data[448] =   68;
  910.     data[449] =   69;
  911.     data[450] =   70;
  912.     data[451] =   71;
  913.     data[452] =   72;
  914.     data[453] =   65;
  915.     data[454] =  -73;
  916.     data[455] =   74;
  917.     data[456] =   75;
  918.     data[457] =   76;
  919.     data[458] =   77;
  920.     data[459] =   78;
  921.     data[460] =   79;
  922.     data[461] =   80;
  923.     data[462] =   73;
  924.     data[463] =  -81;
  925.     data[464] =   82;
  926.     data[465] =   83;
  927.     data[466] =   84;
  928.     data[467] =   85;
  929.     data[468] =   86;
  930.     data[469] =   87;
  931.     data[470] =   88;
  932.     data[471] =   81;
  933.     data[472] =  -89;
  934.     data[473] =   90;
  935.     data[474] =   91;
  936.     data[475] =   92;
  937.     data[476] =   93;
  938.     data[477] =   94;
  939.     data[478] =   95;
  940.     data[479] =   96;
  941.     data[480] =   89;
  942.     data[481] =  -97;
  943.     data[482] =   98;
  944.     data[483] =   99;
  945.     data[484] =  100;
  946.     data[485] =  101;
  947.     data[486] =  102;
  948.     data[487] =  103;
  949.     data[488] =  104;
  950.     data[489] =   97;
  951.     data[490] =   -1;
  952.     data[491] =    9;
  953.     data[492] =   17;
  954.     data[493] =   25;
  955.     data[494] =   33;
  956.     data[495] =   41;
  957.     data[496] =   49;
  958.     data[497] =   57;
  959.     data[498] =   65;
  960.     data[499] =   73;
  961.     data[500] =   81;
  962.     data[501] =   89;
  963.     data[502] =   97;
  964.     data[503] =   -2;
  965.     data[504] =   10;
  966.     data[505] =   18;
  967.     data[506] =   26;
  968.     data[507] =   34;
  969.     data[508] =   42;
  970.     data[509] =   50;
  971.     data[510] =   58;
  972.     data[511] =   66;
  973.     data[512] =   74;
  974.     data[513] =   82;
  975.     data[514] =   90;
  976.     data[515] =   98;
  977.     data[516] =   -3;
  978.     data[517] =   11;
  979.     data[518] =   19;
  980.     data[519] =   27;
  981.     data[520] =   35;
  982.     data[521] =   43;
  983.     data[522] =   51;
  984.     data[523] =   59;
  985.     data[524] =   67;
  986.     data[525] =   75;
  987.     data[526] =   83;
  988.     data[527] =   91;
  989.     data[528] =   99;
  990.     data[529] =   -4;
  991.     data[530] =   12;
  992.     data[531] =   20;
  993.     data[532] =   28;
  994.     data[533] =   36;
  995.     data[534] =   44;
  996.     data[535] =   52;
  997.     data[536] =   60;
  998.     data[537] =   68;
  999.     data[538] =   76;
  1000.     data[539] =   84;
  1001.     data[540] =   92;
  1002.     data[541] =  100;
  1003.     data[542] =   -5;
  1004.     data[543] =   13;
  1005.     data[544] =   21;
  1006.     data[545] =   29;
  1007.     data[546] =   37;
  1008.     data[547] =   45;
  1009.     data[548] =   53;
  1010.     data[549] =   61;
  1011.     data[550] =   69;
  1012.     data[551] =   77;
  1013.     data[552] =   85;
  1014.     data[553] =   93;
  1015.     data[554] =  101;
  1016.     data[555] =   -6;
  1017.     data[556] =   14;
  1018.     data[557] =   22;
  1019.     data[558] =   30;
  1020.     data[559] =   38;
  1021.     data[560] =   46;
  1022.     data[561] =   54;
  1023.     data[562] =   62;
  1024.     data[563] =   70;
  1025.     data[564] =   78;
  1026.     data[565] =   86;
  1027.     data[566] =   94;
  1028.     data[567] =  102;
  1029.     data[568] =   -7;
  1030.     data[569] =   15;
  1031.     data[570] =   23;
  1032.     data[571] =   31;
  1033.     data[572] =   39;
  1034.     data[573] =   47;
  1035.     data[574] =   55;
  1036.     data[575] =   63;
  1037.     data[576] =   71;
  1038.     data[577] =   79;
  1039.     data[578] =   87;
  1040.     data[579] =   95;
  1041.     data[580] =  103;
  1042.     data[581] =   -8;
  1043.     data[582] =   16;
  1044.     data[583] =   24;
  1045.     data[584] =   32;
  1046.     data[585] =   40;
  1047.     data[586] =   48;
  1048.     data[587] =   56;
  1049.     data[588] =   64;
  1050.     data[589] =   72;
  1051.     data[590] =   80;
  1052.     data[591] =   88;
  1053.     data[592] =   96;
  1054.     data[593] =  104;
  1055.     data[594] =  -44;
  1056.     data[595] =  105;
  1057.     data[596] =  106;
  1058.     data[597] =  107;
  1059.     data[598] =  108;
  1060.     data[599] =   92;
  1061.     data[600] =  -46;
  1062.     data[601] =  109;
  1063.     data[602] =  110;
  1064.     data[603] =  111;
  1065.     data[604] =  112;
  1066.     data[605] =   94;
  1067.     data[606] =  -81;
  1068.     data[607] =  113;
  1069.     data[608] =  114;
  1070.     data[609] =  115;
  1071.     data[610] =  116;
  1072.     data[611] =   89;
  1073.     data[612] =  -82;
  1074.     data[613] =  117;
  1075.     data[614] =  118;
  1076.     data[615] =  -83;
  1077.     data[616] =  119;
  1078.     data[617] =  120;
  1079.     data[618] =  -87;
  1080.     data[619] =  121;
  1081.     data[620] =  122;
  1082.     data[621] =  -88;
  1083.     data[622] =  123;
  1084.     data[623] =  124;
  1085.     data[624] = -117;
  1086.     data[625] =  119;
  1087.     data[626] = -121;
  1088.     data[627] =  123;
  1089.     data[628] = -118;
  1090.     data[629] =  120;
  1091.     data[630] = -122;
  1092.     data[631] =  124;
  1093. }
  1094.