| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- #include "config.h"
- #include "std.h"
- #ifdef DEMO_VERSION
- #define BAD_DEMO 10000
- //#define DEMO_SECS_PER_DAY 1 //(60*60*24)
- #define DEMO_SECS_PER_DAY (60*60*24)
- #if _WIN32
- int demoDays(){
- static const char *key_path="SOFTWARE\\Blitz Research\\BlitzMax\\CurrentVersion\\Setup";
- HKEY key;
- char name[32];
- sprintf( name,"DriverKey%s",DEMO_VERSION );
-
- string p=getenv( "COMSPEC" );
- int i=p.rfind( '\\' );
- if( i==string::npos ) return BAD_DEMO;
-
- p=p.substr( 0,i )+"\\PROTOC0L.IN"+DEMO_VERSION;
- if( RegOpenKeyEx( HKEY_LOCAL_MACHINE,key_path,0,KEY_READ|KEY_WRITE,&key )==ERROR_SUCCESS ){
- if( FILE *f=fopen( p.c_str(),"rb" ) ){
- char value[MAX_PATH];
- fgets( value,MAX_PATH,f );
- fclose( f );
- string a=value;
- DWORD type,size=MAX_PATH;
- LONG res=RegQueryValueEx( key,name,0,&type,(unsigned char*)value,&size );
- RegCloseKey( key );
- string b=value;
- if( res==ERROR_SUCCESS && a==b ){
- int64 then=toint( string(value) );
- double secs=difftime( time(0),time_t(then) );
- if( secs>=0 ) return (int)(secs/DEMO_SECS_PER_DAY);
- }
- }
- }else if( RegCreateKeyEx( HKEY_LOCAL_MACHINE,key_path,0,0,0,KEY_READ|KEY_WRITE,0,&key,0 )==ERROR_SUCCESS ){
- if( FILE *f=fopen( p.c_str(),"rb" ) ){
- fclose( f );
- }else if( FILE *f=fopen( p.c_str(),"wb" ) ){
- string t=fromint(int64(time(0)));
- int r=fputs( t.c_str(),f );
- fclose( f );
- if( r>=0 ){
- LONG r=RegSetValueEx( key,name,0,REG_SZ,(unsigned char*)t.c_str(),t.size()+1 );
- RegCloseKey( key );
- if( r==ERROR_SUCCESS ) return 0;
- }
- }
- }
- return BAD_DEMO;
- }
- #elif __APPLE__
- int demoDays(){
- FILE *f;
- FSRef fsref;
- CFNumberRef num;
- CFAbsoluteTime now,time1,time2;
- char home[1024],as_dir[1024],sup_dir[1024],sup_file[1024],tmp[32];
- sprintf( tmp,".version%s",DEMO_VERSION );
-
- CFStringRef key=CFStringCreateWithCString( 0,tmp,kCFStringEncodingASCII );
- CFStringRef app=CFStringCreateWithCString( 0,"com.brl.bmx",kCFStringEncodingASCII );
- FSFindFolder( kUserDomain,kVolumeRootFolderType,false,&fsref );
- FSRefMakePath( &fsref,(unsigned char *)home,1024 );
-
- sprintf( as_dir,"%s/Library/Application Support",home );
- sprintf( sup_dir,"%s/Library/Application Support/Blitz Research",home );
- sprintf( sup_file,"%s/Library/Application Support/Blitz Research/%s",home,tmp );
-
- time1=0;
- if( num=(CFNumberRef)CFPreferencesCopyAppValue( key,app ) ){
- if( !CFNumberGetValue( num,kCFNumberFloat64Type,&time1 ) ) time1=0;
- }
-
- time2=0;
- if( f=fopen( sup_file,"rb") ){
- if( fread( &time2,8,1,f) !=1 ) time2=0;
- fclose(f);
- }
-
- now=CFAbsoluteTimeGetCurrent();
-
- if( time1 && time2 ){
- if( fabs(time1-time2)<1 ){
- CFTimeInterval secs=now-time1;
- if( secs>=0 ) return (int)(secs/DEMO_SECS_PER_DAY);
- }
- }else if( !time1 && !time2 ){
- mkdir( as_dir,0777 );
- mkdir( sup_dir,0777 );
- if( f=fopen( sup_file,"wb" ) ){
- if( fwrite( &now,8,1,f )==1 ){
- fclose( f );
- num=CFNumberCreate(0,kCFNumberFloat64Type,&now);
- CFPreferencesSetAppValue( key,num,app );
- if( CFPreferencesAppSynchronize( app ) ) return 0;
- }
- fclose( f );
- }
- }
- return BAD_DEMO;
- }
- #endif
- #else
- int demoDays(){
- return -1;
- }
- #endif
|