test1.c

Go to the documentation of this file.
00001 /* --
00002 OpenFX version 1.0 - Modelling, Animation and Rendering Package
00003 Copyright (C) 2000 OpenFX Development Team
00004 
00005 This program is free software; you can redistribute it and/or
00006 modify it under the terms of the GNU General Public License
00007 as published by the Free Software Foundation; either version 2
00008 of the License, or (at your option) any later version.
00009 
00010 This program is distributed in the hope that it will be useful,
00011 but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013 GNU General Public License for more details.
00014 
00015 You should have received a copy of the GNU General Public License
00016 along with this program; if not, write to the Free Software
00017 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
00018 
00019 You may contact the OpenFX development team via elecronic mail
00020 at core@openfx.org, or visit our website at http://openfx.org for
00021 further information and support details.
00022 -- */
00023 
00024 // test1.c
00025 
00026 #include <stdlib.h>
00027 #include <stdio.h>
00028 #include <math.h>
00029 #include <float.h>
00030 #include <windows.h>
00031 
00032 #if __ZTC__ || __SC__
00033 #ifndef max
00034 #define max(a,b)  ( ((a) > (b)) ? (a) : (b) )
00035 #endif
00036 #endif
00037 
00038 #if __WATCOMC__
00039 #define PI 3.1415926
00040 #endif
00041 
00042 #if __X__MIPS__
00043 BOOL WINAPI _CRT_INIT(HINSTANCE ,DWORD , LPVOID );
00044 #endif
00045 
00046 static HINSTANCE hDLLinstance=NULL;
00047 
00048 #include "..\animate\memory.h" /* for memory definition */
00049 #include "..\animate\memdef.h" /* local names           */
00050 #include "defines.h"
00051 #include "rstruct.h"
00052 #include "test.h"
00053 
00054 #if __WATCOMC__
00055 int APIENTRY LibMain(HANDLE hDLL, DWORD dwReason, LPVOID lpReserved){
00056 #else
00057 BOOL WINAPI DllMain(HANDLE hDLL, DWORD dwReason, LPVOID lpReserved){
00058 #endif
00059   HANDLE ghMod;
00060   switch (dwReason) {
00061     case DLL_PROCESS_ATTACH:
00062 #if __X__MIPS__
00063       if(!_CRT_INIT(hDLL,dwReason,lpReserved))return(int)FALSE;
00064 #endif
00065       hDLLinstance = hDLL;  /* handle to DLL file */
00066       break;
00067     case DLL_PROCESS_DETACH:
00068 #if __X__MIPS__
00069       if(!_CRT_INIT(hDLL,dwReason,lpReserved))return(int)FALSE;
00070 #endif
00071       break;
00072   }
00073   return (int)TRUE;
00074 }
00075 
00076 #if __SC__
00077 #pragma startaddress(DllMain)
00078 #endif
00079 
00080 #define VECCOPY(a,b)    { b[0] = a[0]; b[1] = a[1]; b[2] = a[2]; }
00081 #define VECSUM(a,b,c)   { c[0]=a[0]+b[0]; c[1]=a[1]+b[1]; c[2]=a[2]+b[2];}
00082 #define VECSUB(a,b,c)   { c[0]=a[0]-b[0]; c[1]=a[1]-b[1]; c[2]=a[2]-b[2];}
00083 #define VECSCALE(a,b,c) { c[0]=(a)*b[0]; c[1]=(a)*b[1]; c[2]=(a)*b[2];}
00084 #define DOT(a,b)        ( (a[0]*b[0]) + (a[1]*b[1]) + (a[2]*b[2]) )
00085 #define CROSS(v1,v2,r)  { \
00086                           r[0] = (v1[1]*v2[2]) - (v2[1]*v1[2]);  \
00087                           r[1] = (v1[2]*v2[0]) - (v1[0]*v2[2]);  \
00088                           r[2] = (v1[0]*v2[1]) - (v2[0]*v1[1]);  \
00089                         }
00090 #define FLOOR(x) ((x) >= 0.0 ? floor(x) : (0.0 - floor(0.0 - (x)) - 1.0))
00091 #define FMOD(x,a) ((x) >= 0.0 ? fmod(x,a) :(a - fmod(-(x),a)))
00092 #define ROOT32 0.866025403
00093 #define ROOT3   1.73205080
00094 
00095 static double turb=0.1,t1=0.4,t2=0.7,c[3]={255.0,255.0,0.0};
00096 static double x=1.0,y=1.0,z=1.0;
00097 static long   tr_type=0,tr_type1=0,tr_type2=0,tr_type3=0;
00098 
00099 #if 0
00100 long CALLBACK ExternalTextureStartup(
00101 #else
00102 long _ExternalTextureStartup(
00103 #endif
00104   long frame,long nframes,char *parameter_list){
00105  if(parameter_list[0] != '#'){
00106    MessageBox ( GetFocus(),
00107                 (LPCTSTR) "External texture: Startup",
00108                 (LPCTSTR) "Parameter list missing",
00109                 MB_OK | MB_SYSTEMMODAL );
00110  }
00111  else {
00112   parameter_list++;
00113   sscanf(parameter_list,"%f %f %f  %f  %f %f  %f %f %f %ld %ld %ld %ld",
00114          &c[0],&c[1],&c[2],&turb,&t1,&t2,&x,&y,&z,
00115          &tr_type,&tr_type1,&tr_type2,&tr_type3);
00116  }
00117  return 1;
00118 }
00119 
00120 #if 0
00121 long CALLBACK ExternalTextureMorph(
00122 #else
00123 long _ExternalTextureMorph(
00124 #endif
00125  char *parameter_list, double mr){
00126  int i;
00127  double mx,my,mz;
00128  double mturb,mt1,mt2,mc[3];
00129  parameter_list++;
00130  sscanf(parameter_list,"%f %f %f  %f  %f %f  %f %f %f",
00131          &mc[0],&mc[1],&mc[2],&mturb,&mt1,&mt2,&mx,&my,&mz);
00132  t1=mt1+(t1-mt1)*mr;
00133  t2=mt2+(t2-mt2)*mr;
00134  turb=(turb-mturb)*mr;
00135  for(i=0;i<3;i++)c[i]=mc[i]+(c[i]-mc[i])*mr;
00136  x=mx+(x-mx)*mr;
00137  y=my+(y-my)*mr;
00138  z=mz+(z-mz)*mr;
00139  return 1;
00140 }
00141 
00142 /* h is 0->360  s and v are 0-1 */
00143 void Hsv2Rgb(double h, double s, double v,
00144              double *r, double *g, double *b){
00145  double rr,gg,bb,hh,ss,vv,maxcol,mincol;
00146  hh=(double)h; ss=(double)s; vv=(double)v;
00147  mincol=vv*(1.0-ss);
00148  if(hh <= 120.0){bb=mincol;
00149    if(hh <=  60){rr=vv; gg=mincol+hh*(vv-mincol)/(120.0-hh);}
00150    else         {gg=vv; rr=mincol+(120.0-hh)*(vv-mincol)/hh;}
00151  }
00152  else if( hh <= 240){rr=mincol;
00153    if(hh <= 180){gg=vv; bb=mincol+(hh-120.0)*(vv-mincol)/(240.0-hh);}
00154    else         {bb=vv; gg=mincol+(240.0-hh)*(vv-mincol)/(hh-120.0);}
00155  }
00156  else {gg=mincol;
00157    if(hh <= 300){bb=vv; rr=mincol+(hh-240.0)*(vv-mincol)/(360.0-hh);}
00158    else         {rr=vv; bb=mincol+(360.0-hh)*(vv-mincol)/(hh-240.0);}
00159  }
00160  *r = rr;
00161  *g = gg;
00162  *b = bb;
00163 }
00164 
00165 double hermite(double t, double tmin, double tmax){ // not a real hermite
00166  t=(t-tmin)/(tmax-tmin);
00167  return (t - t*t);
00168 }
00169 
00170 double sigmoid(double t, double tmin, double tmax){
00171  t=3.1415926*(2.0*(t-tmin)/(tmax-tmin));
00172  return 0.5*(1.0-cos(t));
00173 }
00174 
00175 double triangle(double value){
00176   register double offset;
00177   if (value >= 0.0) offset = value - floor(value);
00178   else offset = value - (-1.0 - floor(fabs(value)));
00179   if (offset >= 0.5) return (2.0 * (1.0 - offset));
00180   else return (2.0 * offset);
00181 }
00182 
00183 double costab(double value){
00184   if (value < 0.0)return 0.0;
00185   return 0.5*(1.0+cos((value-floor(value))*3.141592657*2));
00186 }
00187 
00188 double sintab(double value){
00189  if (value >= 0.0)
00190    return 0.5*(1.0+sin((value-floor(value))*3.141592657*2));
00191  return 0.0;
00192 }
00193 
00194 static double ffmod(double x){
00195  if(x < 0){
00196    double a;
00197    a=fmod(-x,1.0);
00198    return 1.0-a;
00199  }
00200  return fmod(x,1.0);
00201 }
00202 
00203 static double step(double a, double x){
00204  if(x < a)return 0.0;
00205  return 1.0;
00206 }
00207 
00208 static void mix(double *r, double *g, double *b, double mx,
00209                 double r1, double g1, double b1,
00210                 double r2, double g2, double b2){
00211  *r = mx*r1 + (1.0-mx)*r2;
00212  *g = mx*g1 + (1.0-mx)*g2;
00213  *b = mx*b1 + (1.0-mx)*b2;
00214 }
00215 
00216 #if 0
00217 long CALLBACK ExternalTextureProcedure(
00218 #else
00219 long _ExternalTextureProcedure(
00220 #endif
00221   long coord_type,  vector p, vector n,
00222   double alpha, double beta, double gamma,
00223   double bump,  double map_x,  double map_y,
00224   double *alpha_channel, unsigned char sc[3], double colour[3],
00225   double *reflectivity, double *transparency,
00226   X__SHADER *lpEVI
00227 ){
00228  long i;
00229  double a,cc,xx,yy,zz,noiseH,r,g,b;
00230  vector u,v,BozoTurbulence;
00231  xx=alpha / x;
00232  yy=beta  / y;
00233  zz=gamma / z;
00234 
00235 
00236 #if 0
00237  // soft spheres  CCP
00238  {
00239  vector pp[22]={{0.25,0.0,      0.0},                     //0
00240                 {0.75,0.0,      0.0},
00241                 {0.0, ROOT32/2, 0.0},
00242                 {0.5, ROOT32/2, 0.0},
00243                 {1.0, ROOT32/2, 0.0},
00244                 {0.25,ROOT32,   0.0},
00245                 {0.75,ROOT32,   0.0},
00246                 {0.0, 1.0/2.0/ROOT3-ROOT32/2,ROOT32/2.0},  //7
00247                 {0.5, 1.0/2.0/ROOT3-ROOT32/2,ROOT32/2.0},
00248                 {1.0, 1.0/2.0/ROOT3-ROOT32/2,ROOT32/2.0},
00249                 {0.25,1.0/2.0/ROOT3,         ROOT32/2.0},
00250                 {0.75,1.0/2.0/ROOT3,         ROOT32/2.0},
00251                 {0.0, 1.0/2.0/ROOT3+ROOT32/2,ROOT32/2.0}, //12
00252                 {0.5, 1.0/2.0/ROOT3+ROOT32/2,ROOT32/2.0},
00253                 {1.0, 1.0/2.0/ROOT3+ROOT32/2,ROOT32/2.0},
00254                 {0.25,0.0,      ROOT32},
00255                 {0.75,0.0,      ROOT32},
00256                 {0.0, ROOT32/2, ROOT32},
00257                 {0.5, ROOT32/2, ROOT32},
00258                 {1.0, ROOT32/2, ROOT32},
00259                 {0.25,ROOT32,   ROOT32},
00260                 {0.75,ROOT32,   ROOT32}};                 //21
00261  vector dn;
00262  double dx,dy,dz,cr,cg,cb,zb,noise;
00263 // cc=0.28867;  // exact hexagon
00264 // cc=0.3;  // tight hexagon
00265  cc=0.25;      // sphere
00266  nNoise(xx,yy,zz,&noise)
00267  Hsv2Rgb(noise*360.0,1.0,1.0,&cr,&cg,&cb);  // modulate color
00268                                                        // frequency
00269  yy /= ROOT32;
00270  xx=FMOD(xx,1.0);
00271  yy=FMOD(yy,ROOT32);
00272  zz /= ROOT32;
00273  zz=FMOD(zz,ROOT32);
00274  zb=0.0;
00275  VECCOPY(n,dn)
00276  r=colour[0]/255.0;
00277  g=colour[1]/255.0;
00278  b=colour[2]/255.0;
00279  for(i=0;i<22;i++){
00280    dx=(xx-pp[i][0]);
00281    dy=(yy-pp[i][1]);
00282    dz=(zz-pp[i][2]);
00283    if((a=sqrt(dx*dx+dy*dy+dz*dz)) < cc){
00284      if((cc-a) > zb){
00285        zb=(cc-a);
00286        r=cr;
00287        g=cg;
00288        b=cb;
00289        if(a > 0.20){
00290          mix(&r,&g,&b,(a-0.20)/(cc-0.20),
00291           (double)colour[0]/255.0,
00292           (double)colour[1]/255.0,
00293           (double)colour[2]/255.0,
00294           r,g,b);
00295        }
00296      }
00297    }
00298  }
00299  }
00300 #endif
00301 
00302 #if 0
00303  // hexagonal pattern (curvy edges flagstones)
00304  {
00305  vector pp[35]={{0.25,0.0,      0.0},                     //0
00306                 {0.75,0.0,      0.0},                     //1
00307                 {0.0, ROOT32/2, 0.0},                     //2
00308                 {0.5, ROOT32/2, 0.0},                     //3
00309                 {1.0, ROOT32/2, 0.0},                     //4
00310                 {0.25,ROOT32,   0.0},                     //5
00311                 {0.75,ROOT32,   0.0},                     //6
00312 
00313                 {-0.25,0.0,     0.0},                     //7
00314                 { 1.25,0.0,     0.0},                     //8
00315                 {-0.25,ROOT32,  0.0},                     //9
00316                 { 1.25,ROOT32,  0.0},                     //10
00317                 {-0.25,0.0,    ROOT32},                   //11
00318                 { 1.25,0.0,    ROOT32},                   //12
00319                 {-0.25,ROOT32, ROOT32},                   //13
00320                 { 1.25,ROOT32, ROOT32},                   //14
00321                 {-0.25,1.0/2.0/ROOT3,ROOT32/2.0},         //15
00322                 { 1.75,1.0/2.0/ROOT3,ROOT32/2.0},         //16
00323                 {0.0,1.0/2.0/ROOT3+ROOT32,ROOT32/2.0},    //17
00324                 {0.5,1.0/2.0/ROOT3+ROOT32,ROOT32/2.0},    //18
00325                 {1.0,1.0/2.0/ROOT3+ROOT32,ROOT32/2.0},    //19
00326 
00327                 {0.0, 1.0/2.0/ROOT3-ROOT32/2,ROOT32/2.0}, //20
00328                 {0.5, 1.0/2.0/ROOT3-ROOT32/2,ROOT32/2.0}, //21
00329                 {1.0, 1.0/2.0/ROOT3-ROOT32/2,ROOT32/2.0}, //22
00330                 {0.25,1.0/2.0/ROOT3,         ROOT32/2.0}, //23
00331                 {0.75,1.0/2.0/ROOT3,         ROOT32/2.0}, //24
00332                 {0.0, 1.0/2.0/ROOT3+ROOT32/2,ROOT32/2.0}, //25
00333                 {0.5, 1.0/2.0/ROOT3+ROOT32/2,ROOT32/2.0}, //26
00334                 {1.0, 1.0/2.0/ROOT3+ROOT32/2,ROOT32/2.0}, //27
00335                 {0.25,0.0,      ROOT32},                  //28
00336                 {0.75,0.0,      ROOT32},                  //29
00337                 {0.0, ROOT32/2, ROOT32},                  //30
00338                 {0.5, ROOT32/2, ROOT32},                  //31
00339                 {1.0, ROOT32/2, ROOT32},                  //32
00340                 {0.25,ROOT32,   ROOT32},                  //33
00341                 {0.75,ROOT32,   ROOT32}};                 //34
00342  double dx,dy,dz,zb,ccc,dc,zbb;
00343  double flat_edge=0.025;
00344  double bevel_edge=0.06;
00345  double blend_edge=0.06;
00346 // double flat_edge=0.075; // cracked
00347 // double bevel_edge=0.145;
00348 // double blend_edge=0.13;
00349  BOOL ins;
00350  int id;
00351  cc=0.8;            // flagstone
00352  nNoise(xx*15.0,yy*15.0,zz*15.0,noiseH);
00353  vNoise(v,xx,yy,zz);
00354  xx += 0.8*v[0];
00355  yy += 0.8*v[1];
00356  zz += 0.8*v[2];
00357  yy /= ROOT32;
00358  xx=FMOD(xx,1.0);
00359  yy=FMOD(yy,ROOT32);
00360  zz /= ROOT32;
00361  zz=FMOD(zz,ROOT32);
00362  zb=-10.0;
00363  ins=TRUE;
00364  for(i=0;i<35;i++){
00365    dx=(xx-pp[i][0]);
00366    dy=(yy-pp[i][1]);
00367    dz=(zz-pp[i][2]);
00368    if((a=sqrt(dx*dx+dy*dy+dz*dz)) < cc){
00369      dc=(cc-a);
00370      if(dc > zb){
00371        id=i;
00372        zb=dc;
00373      }
00374    }
00375  }
00376  zbb= -10.0;
00377  for(i=0;i<35;i++){
00378    if(i == id)continue;
00379    dx=(xx-pp[i][0]);
00380    dy=(yy-pp[i][1]);
00381    dz=(zz-pp[i][2]);
00382    if((a=sqrt(dx*dx+dy*dy+dz*dz)) < cc){
00383      dc=(cc-a);
00384      if(dc > zbb){
00385        zbb=dc;
00386      }
00387    }
00388  }
00389  if((ccc=fabs(zbb - zb)) < flat_edge)ins=FALSE;   // flat edge
00390  if(ins){
00391    if(id == 3 || id == 31 || id == 23 || id == 24){
00392      r=sc[0]/255.0;
00393      g=sc[1]/255.0;
00394      b=sc[2]/255.0;
00395    }
00396    else{
00397      r=colour[0]/255.0;
00398      g=colour[1]/255.0;
00399      b=colour[2]/255.0;
00400    }
00401    r -= (noiseH*0.25);
00402    g -= (noiseH*0.25);
00403    b -= (noiseH*0.25);
00404    r=max(r,0.0); g=max(g,0.0); b=max(b,0.0);
00405    if(ccc < bevel_edge){
00406      v[0]=(xx-pp[id][0]);
00407      v[1]=(yy-pp[id][1]);
00408      v[2]=(zz-pp[id][2]);
00409      normalize(v);
00410      CROSS(v,n,u)
00411      CROSS(n,u,v)
00412      normalize(v);
00413      a=0.4;
00414      VECSCALE(a,v,v)
00415      VECSCALE((1.0-a),n,n)
00416      VECSUM(v,n,n)
00417      normalize(n);
00418    }
00419    if(ccc < blend_edge)mix(&r,&g,&b,(ccc-flat_edge)/(blend_edge-flat_edge),
00420          r,g,b,
00421          (double)c[0]/255.0,
00422          (double)c[1]/255.0,
00423          (double)c[2]/255.0
00424          );
00425  }
00426  else{
00427    r=c[0]/255.0;
00428    g=c[1]/255.0;
00429    b=c[2]/255.0;
00430  }
00431 
00432  }
00433 #endif
00434 
00435 #if 0
00436 // interesting pattern
00437  nNoise(xx, yy, zz, &noiseH);
00438  noiseH = sintab(noiseH*10.0);
00439  if(noiseH > 0.1){
00440    noiseH=(noiseH-0.1)/(1.0-0.1);
00441    r=(noiseH*(double)c[0]+(1.0-noiseH)*(double)colour[0]);
00442    g=(noiseH*(double)c[1]+(1.0-noiseH)*(double)colour[1]);
00443    b=(noiseH*(double)c[2]+(1.0-noiseH)*(double)colour[2]);
00444    r=r/255.0;
00445    g=g/255.0;
00446    b=b/255.0;
00447  }
00448  else{
00449   r=colour[0]/255.0;
00450   g=colour[1]/255.0;
00451   b=colour[2]/255.0;
00452  }
00453 #endif
00454 
00455  colour[0]  = r * 255.0;
00456  colour[1]  = g * 255.0;
00457  colour[2]  = b * 255.0;
00458  return 1;
00459 }
00460 
00461 #if 0
00462 void CALLBACK ExternalTextureClose(void){
00463 #else
00464 void _ExternalTextureClose(void){
00465 #endif
00466 }
00467 
00468 void CentreDialogOnScreen(HWND hwnd){
00469  RECT rcDlg;
00470  long Xres,Yres;
00471  Yres=GetSystemMetrics(SM_CYSCREEN);
00472  Xres=GetSystemMetrics(SM_CXSCREEN);
00473  GetWindowRect(hwnd,&rcDlg);
00474  OffsetRect(&rcDlg,-rcDlg.left,-rcDlg.top);
00475  OffsetRect(&rcDlg,(Xres-rcDlg.right)/2,(Yres-rcDlg.bottom)/2);
00476  SetWindowPos(hwnd,HWND_TOP,rcDlg.left,rcDlg.top,0,0,SWP_NOSIZE);
00477  return;
00478 }
00479 
00480 static void SetColour(double *colour, HWND parent){
00481  CHOOSECOLOR cc;
00482  static COLORREF CustColours[16]={
00483    RGB(255,255,255), RGB(239,239,239), RGB(223,223,223), RGB(207,207,207),
00484    RGB(191,191,191), RGB(175,175,175), RGB(159,159,159), RGB(143,143,143),
00485    RGB(127,127,127), RGB(111,111,111), RGB( 95, 95, 95), RGB( 79, 79, 79),
00486    RGB( 63, 63, 63), RGB( 47, 47, 47), RGB( 31, 31, 31), RGB( 15, 15, 15) };
00487  cc.lStructSize=sizeof(CHOOSECOLOR);
00488  cc.hwndOwner=parent;
00489  cc.rgbResult=RGB((BYTE)colour[0],(BYTE)colour[1],(BYTE)colour[2]);
00490  cc.lpCustColors=(LPDWORD)CustColours;
00491 // cc.Flags=CC_FULLOPEN | CC_RGBINIT | CC_ENABLEHOOK;
00492  cc.Flags= CC_RGBINIT;
00493  cc.lCustData=(DWORD)0;
00494  if(ChooseColor(&cc)){
00495    colour[0]=(double)GetRValue(cc.rgbResult);
00496    colour[1]=(double)GetGValue(cc.rgbResult);
00497    colour[2]=(double)GetBValue(cc.rgbResult);
00498  }
00499 }
00500 
00501 BOOL CALLBACK BozoDlgProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam);
00502 
00503 #if 0
00504 char * CALLBACK SetExternalParameters(
00505 #else
00506 char * _SetExternalParameters(
00507 #endif
00508   char *Op,                 /* string for the parameters                  */
00509   HWND hWnd,                /* parent window                              */
00510   X__MEMORY_MANAGER *lpEVI /* pointer to structure with memory functions */
00511                              ){
00512  char szbuf[255],*Op1;
00513  if(Op != NULL){  /* parameters exist so read them off the list */
00514    Op1=Op;
00515    Op1++;
00516    sscanf(Op1,"%f %f %f  %f  %f %f  %f %f %f %ld %ld %ld %ld",
00517           &c[0],&c[1],&c[2],&turb,&t1,&t2,&x,&y,&z,
00518           &tr_type,&tr_type1,&tr_type2,&tr_type3);
00519  }
00520  if(DialogBox(hDLLinstance,MAKEINTRESOURCE(DLG_BOZO),hWnd,
00521               (DLGPROC)BozoDlgProc) == FALSE)return Op;
00522  if(Op != NULL)CALL_FREE(Op);  /* free the old string */
00523  sprintf(szbuf,"# %.2f %.2f %.2f  %.2f  %.2f %.2f  %.2f %.2f %.2f %ld %ld %ld %ld",
00524           c[0],c[1],c[2],turb,t1,t2,x,y,z,tr_type,tr_type1,tr_type2,tr_type3);
00525  if((Op=(char *)CALL_MALLOC(strlen(szbuf)+1)) == NULL){
00526   MessageBox (GetFocus(),"External shader: Out of memory","Error",
00527                 MB_OK|MB_TASKMODAL|MB_ICONSTOP);
00528    return NULL;
00529  }
00530  strcpy(Op,szbuf);
00531  return Op;
00532 }
00533 
00534 BOOL CALLBACK BozoDlgProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam){
00535  char str[16];
00536  switch( msg ) {
00537    case WM_INITDIALOG:
00538      sprintf(str,"%.2f",turb);
00539      SendDlgItemMessage(hwnd,DLG_BOZO_TURB,WM_SETTEXT,0,(LPARAM)str);
00540      SendDlgItemMessage(hwnd,DLG_BOZO_TURB,EM_LIMITTEXT,(WPARAM)12,0);
00541      sprintf(str,"%.2f",t1);
00542      SendDlgItemMessage(hwnd,DLG_BOZO_T1,WM_SETTEXT,0,(LPARAM)str);
00543      SendDlgItemMessage(hwnd,DLG_BOZO_T1,EM_LIMITTEXT,(WPARAM)12,0);
00544      sprintf(str,"%.2f",t2);
00545      SendDlgItemMessage(hwnd,DLG_BOZO_T2,WM_SETTEXT,0,(LPARAM)str);
00546      SendDlgItemMessage(hwnd,DLG_BOZO_T2,EM_LIMITTEXT,(WPARAM)12,0);
00547      sprintf(str,"%.2f",x);
00548      SendDlgItemMessage(hwnd,DLG_BOZO_XSCALE,WM_SETTEXT,0,(LPARAM)str);
00549      SendDlgItemMessage(hwnd,DLG_BOZO_XSCALE,EM_LIMITTEXT,(WPARAM)12,0);
00550      sprintf(str,"%.2f",y);
00551      SendDlgItemMessage(hwnd,DLG_BOZO_YSCALE,WM_SETTEXT,0,(LPARAM)str);
00552      SendDlgItemMessage(hwnd,DLG_BOZO_YSCALE,EM_LIMITTEXT,(WPARAM)12,0);
00553      sprintf(str,"%.2f",z);
00554      SendDlgItemMessage(hwnd,DLG_BOZO_ZSCALE,WM_SETTEXT,0,(LPARAM)str);
00555      SendDlgItemMessage(hwnd,DLG_BOZO_ZSCALE,EM_LIMITTEXT,(WPARAM)12,0);
00556      if(tr_type == 0)
00557         SendDlgItemMessage(hwnd,DLG_BOZO_SEMI,BM_SETCHECK,TRUE,0);
00558      else
00559         SendDlgItemMessage(hwnd,DLG_BOZO_SETT,BM_SETCHECK,TRUE,0);
00560      if(tr_type1 == 1)
00561         SendDlgItemMessage(hwnd,DLG_BOZO_CLEARC,BM_SETCHECK,TRUE,0);
00562      if(tr_type2 == 1)
00563         SendDlgItemMessage(hwnd,DLG_BOZO_CLEARS,BM_SETCHECK,TRUE,0);
00564      if(tr_type3 == 1)
00565         SendDlgItemMessage(hwnd,DLG_BOZO_CLEAR3,BM_SETCHECK,TRUE,0);
00566      CentreDialogOnScreen(hwnd);
00567      return TRUE;
00568    case WM_DRAWITEM:{
00569        LPDRAWITEMSTRUCT lpdis;
00570        HBRUSH   hbr,hbrold;
00571        BYTE r,g,b;
00572        lpdis=(LPDRAWITEMSTRUCT)lparam;
00573        if(lpdis->CtlID == DLG_BOZO_COLOUR){
00574          r=(BYTE)c[0]; g=(BYTE)c[1]; b=(BYTE)c[2];
00575          if(lpdis->itemState & ODS_SELECTED)
00576             InvertRect(lpdis->hDC,&(lpdis->rcItem));
00577          else{
00578            hbr=CreateSolidBrush(RGB(r,g,b));
00579            hbrold=SelectObject(lpdis->hDC,hbr);
00580            Rectangle(lpdis->hDC,lpdis->rcItem.left,lpdis->rcItem.top,
00581                          lpdis->rcItem.right,lpdis->rcItem.bottom);
00582            SelectObject(lpdis->hDC,hbrold);
00583            DeleteObject(hbr);
00584          }
00585        }
00586      }
00587      break;
00588    case WM_COMMAND:
00589      switch(LOWORD(wparam)){
00590         case DLG_BOZO_COLOUR:
00591           SetColour(c,hwnd);
00592           InvalidateRect(GetDlgItem(hwnd,DLG_BOZO_COLOUR),NULL,FALSE);
00593           break;
00594         case IDCANCEL:
00595         case DLG_BOZO_CANCEL:
00596           EndDialog(hwnd,FALSE);
00597           return(TRUE);
00598         case IDOK:
00599         case DLG_BOZO_OK:
00600           if(GetDlgItemText(hwnd,DLG_BOZO_TURB,str,10) == 0)
00601              EndDialog(hwnd,FALSE);
00602           if((turb=atof(str)) == 0)EndDialog(hwnd,FALSE);
00603           if(GetDlgItemText(hwnd,DLG_BOZO_T1,str,10) == 0)
00604              EndDialog(hwnd,FALSE);
00605           if((t1=atof(str)) == 0)EndDialog(hwnd,FALSE);
00606           if(GetDlgItemText(hwnd,DLG_BOZO_T2,str,10) == 0)
00607              EndDialog(hwnd,FALSE);
00608           if((t2=atof(str)) == 0)EndDialog(hwnd,FALSE);
00609           if(GetDlgItemText(hwnd,DLG_BOZO_XSCALE,str,10) == 0)
00610              EndDialog(hwnd,FALSE);
00611           if((x=atof(str)) == 0)EndDialog(hwnd,FALSE);
00612           if(GetDlgItemText(hwnd,DLG_BOZO_YSCALE,str,10) == 0)
00613              EndDialog(hwnd,FALSE);
00614           if((y=atof(str)) == 0)EndDialog(hwnd,FALSE);
00615           if(GetDlgItemText(hwnd,DLG_BOZO_ZSCALE,str,10) == 0)
00616              EndDialog(hwnd,FALSE);
00617           if((z=atof(str)) == 0)EndDialog(hwnd,FALSE);
00618           if(SendDlgItemMessage(hwnd,DLG_BOZO_SETT,BM_GETCHECK,0,0))
00619             tr_type=1; else tr_type=0;
00620           if(SendDlgItemMessage(hwnd,DLG_BOZO_CLEARC,BM_GETCHECK,0,0))
00621             tr_type1=1; else tr_type1=0;
00622           if(SendDlgItemMessage(hwnd,DLG_BOZO_CLEARS,BM_GETCHECK,0,0))
00623             tr_type2=1; else tr_type2=0;
00624           if(SendDlgItemMessage(hwnd,DLG_BOZO_CLEAR3,BM_GETCHECK,0,0))
00625             tr_type3=1; else tr_type3=0;
00626           EndDialog(hwnd,TRUE);
00627           return(TRUE);
00628         default:
00629           break;
00630       }
00631       break;
00632     default: break;
00633  }
00634  return FALSE;
00635 }
00636 
Generated on Tue Jan 28 06:18:32 2014 for OpenFX by  doxygen 1.6.3