int stat_( BBString *path,int *t_mode,int *t_size,int *t_mtime,int *t_ctime ){ struct stat st; if( stat( bbTmpUTF8String(path),&st ) ) return -1; *t_mode=st.st_mode; *t_size=st.st_size; *t_mtime=st.st_mtime; *t_ctime=st.st_ctime; return 0; }
void bbStartup( int argc,char *argv[],void *dummy1,void *dummy2 ){ int i,k; BBString **p; //Start up GC and create bbAppFile, bbAppDir and bbLaunchDir #if _WIN32 char *ebp; OSVERSIONINFO os={ sizeof(os) }; //asm( "movl %%ebp,%0;":"=r"(ebp) );//::"%ebp" ); //bbGCStackTop=ebp+28; // BaH bbThreadStartup(); bbGCStartup(); if( GetVersionEx( &os ) ){ if( os.dwPlatformId==VER_PLATFORM_WIN32_NT ){ _bbusew=1; } } if( _bbusew ){ int e=0; wchar_t buf[MAX_PATH]; _wgetcwd( buf,MAX_PATH ); for( i=0;buf[i];++i ){ if( buf[i]=='\\' ) buf[i]='/'; } bbLaunchDir=bbStringFromWString( buf ); GetModuleFileNameW( GetModuleHandleW(0),buf,MAX_PATH ); for( i=0;buf[i];++i ){ if( buf[i]=='\\' ) buf[i]='/'; if( buf[i]=='/' ) e=i; } bbAppFile=bbStringFromWString( buf ); if( e ){ if( buf[e-1]==':' ) ++e; bbAppDir=bbStringFromShorts( buf,e ); }else{ bbAppDir=&bbEmptyString; } _wchdir( bbTmpWString( bbAppDir ) ); }else{ int e=0; char buf[MAX_PATH]; _getcwd( buf,MAX_PATH ); for( i=0;buf[i];++i ){ if( buf[i]=='\\' ) buf[i]='/'; } bbLaunchDir=bbStringFromCString( buf ); GetModuleFileNameA( GetModuleHandleA(0),buf,MAX_PATH ); for( i=0;buf[i];++i ){ if( buf[i]=='\\' ) buf[i]='/'; if( buf[i]=='/' ) e=i; } bbAppFile=bbStringFromCString( buf ); if( e ){ if( buf[e-1]==':' ) ++e; bbAppDir=bbStringFromBytes( buf,e ); }else{ bbAppDir=&bbEmptyString; } _chdir( bbTmpCString( bbAppDir ) ); } #elif __linux char *ebp; char buf[PATH_MAX]; char lnk[PATH_MAX]; pid_t pid; // asm( "movl %%ebp,%0;":"=r"(ebp) );//::"%ebp" ); bbGCStackTop=ebp+28; // BaH bbThreadStartup(); bbGCStartup(); getcwd( buf,PATH_MAX ); bbLaunchDir=bbStringFromUTF8String( buf ); pid=getpid(); sprintf( lnk,"/proc/%i/exe",pid ); i=readlink( lnk,buf,PATH_MAX ); if( i>0 ){ char *p; buf[i]=0; bbAppFile=bbStringFromUTF8String( buf ); p=strrchr( buf,'/' ); if( p ){ *p=0; bbAppDir=bbStringFromUTF8String( buf ); }else{ bbAppDir=&bbEmptyString; } }else{ bbAppFile=&bbEmptyString; bbAppDir=&bbEmptyString; } chdir( bbTmpUTF8String( bbAppDir ) ); #elif __APPLE__ CFURLRef url; char buf[PATH_MAX],*e; //#if BB_ARGP // bbGCStackTop=bbArgp(0); //#else bbGCStackTop=&argc; //#endif // BaH bbThreadStartup(); bbGCStartup(); getcwd( buf,PATH_MAX ); bbLaunchDir=bbStringFromUTF8String( buf ); url=CFBundleCopyExecutableURL( CFBundleGetMainBundle() ); CFURLGetFileSystemRepresentation( url,true,(UInt8*)buf,PATH_MAX ); CFRelease( url ); bbAppFile=bbStringFromUTF8String( buf ); if( e=strstr( buf,".app/Contents/MacOS/" ) ){ *e=0; } if( e=strrchr( buf,'/' ) ){ *e=0; bbAppDir=bbStringFromUTF8String( buf ); }else{ bbAppDir=&bbEmptyString; } chdir( bbTmpUTF8String( bbAppDir ) ); #endif BBINCREFS( bbLaunchDir ); BBINCREFS( bbAppDir ); BBINCREFS( bbAppFile ); bbAppTitle=bbStringFromCString( "BlitzMax Application" ); BBINCREFS( bbAppTitle ); bbAppArgs=bbArrayNew1D( "$",argc ); BBINCREFS( bbAppArgs ); p=(BBString**)BBARRAYDATA( bbAppArgs,1 ); for( k=0;k<argc;++k ){ BBString *arg=bbStringFromCString( argv[k] ); BBINCREFS( arg ); *p++=arg; } startup(); }
int system_( BBString *cmd ){ return system( bbTmpUTF8String(cmd) ); }
int opendir_( BBString *path ){ return opendir( bbTmpUTF8String(path) ); }
int rename_( BBString *src,BBString *dst ){ return rename( bbTmpUTF8String(src),bbTmpUTF8String(dst) ); }
int remove_( BBString *path ){ return remove( bbTmpUTF8String(path) ); }
int mkdir_( BBString *path,int mode ){ return mkdir( bbTmpUTF8String(path),mode ); }
int rmdir_( BBString *path ){ return rmdir( bbTmpUTF8String(path) ); }
int chdir_( BBString *path ){ return chdir( bbTmpUTF8String(path) ); }
int chmod_( BBString *path,int mode ){ return chmod( bbTmpUTF8String(path),mode ); }
int fputs_( BBString *str,int file ){ return fputs( bbTmpUTF8String(str),(FILE*)file ); }
int fopen_( BBString *file,BBString *mode ){ return fopen( bbTmpUTF8String(file),bbTmpUTF8String(mode) ); }
BBString *getenv_( BBString *str ){ return bbStringFromUTF8String( getenv( bbTmpUTF8String(str) ) ); }
int putenv_( BBString *str ){ char *t=bbTmpUTF8String( str ); char *p=(char*)malloc( strlen(t)+1 ); strcpy( p,t ); return putenv( p ); }
int puts_( BBString *str ){ return puts( bbTmpUTF8String( str ) ); }