config.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. #include "config.h"
  2. #include "std.h"
  3. #ifdef DEMO_VERSION
  4. #define BAD_DEMO 10000
  5. //#define DEMO_SECS_PER_DAY 1 //(60*60*24)
  6. #define DEMO_SECS_PER_DAY (60*60*24)
  7. #if _WIN32
  8. int demoDays(){
  9. static const char *key_path="SOFTWARE\\Blitz Research\\BlitzMax\\CurrentVersion\\Setup";
  10. HKEY key;
  11. char name[32];
  12. sprintf( name,"DriverKey%s",DEMO_VERSION );
  13. string p=getenv( "COMSPEC" );
  14. int i=p.rfind( '\\' );
  15. if( i==string::npos ) return BAD_DEMO;
  16. p=p.substr( 0,i )+"\\PROTOC0L.IN"+DEMO_VERSION;
  17. if( RegOpenKeyEx( HKEY_LOCAL_MACHINE,key_path,0,KEY_READ|KEY_WRITE,&key )==ERROR_SUCCESS ){
  18. if( FILE *f=fopen( p.c_str(),"rb" ) ){
  19. char value[MAX_PATH];
  20. fgets( value,MAX_PATH,f );
  21. fclose( f );
  22. string a=value;
  23. DWORD type,size=MAX_PATH;
  24. LONG res=RegQueryValueEx( key,name,0,&type,(unsigned char*)value,&size );
  25. RegCloseKey( key );
  26. string b=value;
  27. if( res==ERROR_SUCCESS && a==b ){
  28. int64 then=toint( string(value) );
  29. double secs=difftime( time(0),time_t(then) );
  30. if( secs>=0 ) return (int)(secs/DEMO_SECS_PER_DAY);
  31. }
  32. }
  33. }else if( RegCreateKeyEx( HKEY_LOCAL_MACHINE,key_path,0,0,0,KEY_READ|KEY_WRITE,0,&key,0 )==ERROR_SUCCESS ){
  34. if( FILE *f=fopen( p.c_str(),"rb" ) ){
  35. fclose( f );
  36. }else if( FILE *f=fopen( p.c_str(),"wb" ) ){
  37. string t=fromint(int64(time(0)));
  38. int r=fputs( t.c_str(),f );
  39. fclose( f );
  40. if( r>=0 ){
  41. LONG r=RegSetValueEx( key,name,0,REG_SZ,(unsigned char*)t.c_str(),t.size()+1 );
  42. RegCloseKey( key );
  43. if( r==ERROR_SUCCESS ) return 0;
  44. }
  45. }
  46. }
  47. return BAD_DEMO;
  48. }
  49. #elif __APPLE__
  50. int demoDays(){
  51. FILE *f;
  52. FSRef fsref;
  53. CFNumberRef num;
  54. CFAbsoluteTime now,time1,time2;
  55. char home[1024],as_dir[1024],sup_dir[1024],sup_file[1024],tmp[32];
  56. sprintf( tmp,".version%s",DEMO_VERSION );
  57. CFStringRef key=CFStringCreateWithCString( 0,tmp,kCFStringEncodingASCII );
  58. CFStringRef app=CFStringCreateWithCString( 0,"com.brl.bmx",kCFStringEncodingASCII );
  59. FSFindFolder( kUserDomain,kVolumeRootFolderType,false,&fsref );
  60. FSRefMakePath( &fsref,(unsigned char *)home,1024 );
  61. sprintf( as_dir,"%s/Library/Application Support",home );
  62. sprintf( sup_dir,"%s/Library/Application Support/Blitz Research",home );
  63. sprintf( sup_file,"%s/Library/Application Support/Blitz Research/%s",home,tmp );
  64. time1=0;
  65. if( num=(CFNumberRef)CFPreferencesCopyAppValue( key,app ) ){
  66. if( !CFNumberGetValue( num,kCFNumberFloat64Type,&time1 ) ) time1=0;
  67. }
  68. time2=0;
  69. if( f=fopen( sup_file,"rb") ){
  70. if( fread( &time2,8,1,f) !=1 ) time2=0;
  71. fclose(f);
  72. }
  73. now=CFAbsoluteTimeGetCurrent();
  74. if( time1 && time2 ){
  75. if( fabs(time1-time2)<1 ){
  76. CFTimeInterval secs=now-time1;
  77. if( secs>=0 ) return (int)(secs/DEMO_SECS_PER_DAY);
  78. }
  79. }else if( !time1 && !time2 ){
  80. mkdir( as_dir,0777 );
  81. mkdir( sup_dir,0777 );
  82. if( f=fopen( sup_file,"wb" ) ){
  83. if( fwrite( &now,8,1,f )==1 ){
  84. fclose( f );
  85. num=CFNumberCreate(0,kCFNumberFloat64Type,&now);
  86. CFPreferencesSetAppValue( key,num,app );
  87. if( CFPreferencesAppSynchronize( app ) ) return 0;
  88. }
  89. fclose( f );
  90. }
  91. }
  92. return BAD_DEMO;
  93. }
  94. #endif
  95. #else
  96. int demoDays(){
  97. return -1;
  98. }
  99. #endif