/* Copies one file to another (both specified by path). Dynamically * allocates memory for the file buffer. Returns TRUE if successful, * or FALSE if unsuccessful. This function uses _dos_ functions only; * standard C functions are not used. */ BOOL fastcopy( HANDLE hfSrcParm, HANDLE hfDstParm ) { char _far *buf = NULL; unsigned segbuf, count; /* Attempt to dynamically allocate all of memory (0xffff paragraphs). * This will fail, but will return the amount actually available * in segbuf. Then allocate this amount. */ if (_dos_allocmem( 0xffff, &segbuf ) ) { count = segbuf; if(_dos_allocmem( count, &segbuf ) ) return FALSE; } FP_SEG( buf ) = segbuf; /* Read and write until there is nothing left. */ while( count ) { /* Read and write input. */ if( (_dos_read( hfSrcParm, buf, count, &count )) ){ _dos_freemem( segbuf ); return FALSE; } if( (_dos_write( hfDstParm, buf, count, &count )) ){ _dos_freemem( segbuf ); return FALSE; } } /* Free memory. */ _dos_freemem( segbuf ); return TRUE; }
static unsigned my_read( int hdl, void *buff, unsigned len ) { unsigned got; if( _dos_read( hdl, buff, len, &got ) != 0 ) return( -1 ); return( got ); }
int read(int fd, void *buf, unsigned count) { unsigned bytes; int result = _dos_read(fd, buf, count, &bytes); return (result == 0 ? bytes : -1); }
static int READ(int fd, void *buf, size_t len) { unsigned count; if (0 == _dos_read(fd, buf, len, &count)) return count; else return -1; }
int DBMPPrintInfo( char *FileName ) { int Handle; unsigned int RealWidth, Read, DataSize; tBMPHeader BMPHeader; tBITMAPINFOHEADER BITMAPINFOHEADER; if( !FileName ) return 0; if (_dos_open(FileName, O_RDWR | O_BINARY, &Handle) != 0) return 1; _dos_read( Handle, &BMPHeader, sizeof(BMPHeader), &Read ); _dos_read( Handle, &BITMAPINFOHEADER, sizeof(BITMAPINFOHEADER), &Read ); _dos_close(Handle); RealWidth = (BMPHeader.bfSize-BMPHeader.bfOffBits)/BITMAPINFOHEADER.biHeight-1; DataSize = BMPHeader.bfSize-sizeof(BITMAPINFOHEADER)-sizeof(BMPHeader)-SIZE_OF_PALETTE; if( BMPHeader.bfType!=19778 ) // "BM"=19778 { cout << "\n\n " << FileName << " - this is not BMP file...\n"; return 1; } cout << "\n\n " << FileName << " info..."; cout << "\n Size of file: " << BMPHeader.bfSize; cout << "\n Data offset: " << BMPHeader.bfOffBits; cout << "\n Bitmap info header size: " << BITMAPINFOHEADER.biSize; cout << "\n Width " << BITMAPINFOHEADER.biWidth; cout << "\n Height: " << BITMAPINFOHEADER.biHeight; cout << "\n Number of planes (1): " << BITMAPINFOHEADER.biPlanes; cout << "\n Bits per pixel: " << BITMAPINFOHEADER.biBitCount; cout << "\n Type of compression (0): " << BITMAPINFOHEADER.biCompression; cout << "\n Size of image in pixels: " << BITMAPINFOHEADER.biSizeImage; cout << "\n Horizontal resolution pix/m: " << BITMAPINFOHEADER.biXPelsPerMeter; cout << "\n Vertical resolution pix/m: " << BITMAPINFOHEADER.biYPelsPerMeter; cout << "\n Used colors: " << BITMAPINFOHEADER.biClrUsed; cout << "\n Important colors: " << BITMAPINFOHEADER.biClrImportant; cout << "\n\n FileLenght-BMPHeaderHead-BMPHead-pallette(256*3) (READ): " << DataSize; cout << "\n RealWidth is " << RealWidth <<"+1 "; return 0; }
void main() { unsigned len_read; int handle; auto char buffer[80]; if( _dos_open( "file", O_RDONLY, &handle ) != 0 ) { printf( "Unable to open file\n" ); } else { printf( "Open succeeded\n" ); _dos_read( handle, buffer, 80, &len_read ); _dos_close( handle ); } }
int main( int argc, const char** argv ) { char buffer[BUF_SIZE]; int src_handle, dst_handle; unsigned int value, red, written; puts("SIMPLE FILE COPIER\n"); if( argc != 3 ) { printf( "TYPE COPIER <SRC_FILE> <DST_FILE>" ); return 1; } printf( "%s -> %s", argv[1], argv[2] ); src_handle = open16l( argv[1], O_RDONLY_16L ); if ( src_handle < 0 ) { printf( "\n%s: %s", argv[1], strerror( -src_handle ) ); return 2; } dst_handle = open16l( argv[2], O_CREAT_TRUNC_16L ); if ( dst_handle < 0 ) { _dos_close( src_handle ); printf( "\n%s: %s", argv[2], strerror( -dst_handle ) ); return 2; } do { value = _dos_read( src_handle, buffer, sizeof( buffer ), &red ); if( value != 0 ) printf( ": ERROR reading file" ); if( value == 0 && red > 0 ) { value = _dos_write( dst_handle, buffer, red, &written ); if( value != 0 || written < red ) printf( ": ERROR writing file" ); } } while( value == 0 && red > 0 ); _dos_close( src_handle ); _dos_close( dst_handle ); return 0; }
int main( void ) { dword FarFreeMemoryAtStart=(unsigned long)farcoreleft(); printf("\n\n Reliable file system" "\n by" "\n Jarda & Dvorka" "\n" "\n Compiled at %s, %s\n", __DATE__, __TIME__ ); printf( " Starting with far heap: %luB \n", FarFreeMemoryAtStart ); randomize(); //- work with file system - #ifdef CREATE_EVERYTHING_NEW InitializeSimulation( TRUE, TRUE ); // create everything new FSCreatMasterBoot( 0x80, 512, 1 ); FSCreatMasterBoot( 0x81, 512, 1 ); FSCreatMasterBoot( 0x82, 512, 1 ); // data stripe FSCreatPartition( 0x80, 1, 0, 500, ACTIVE_PARTITION ); // parity stripe FSCreatPartition( 0x80, 2, 501, 1023, NONACTIVE_PARTITION ); // data stripe FSCreatPartition( 0x81, 1, 0, 500, ACTIVE_PARTITION ); // swap party FSCreatPartition( 0x81, 2, 501, 1023, NONACTIVE_PARTITION ); // data stripe FSCreatPartition( 0x82, 1, 0, 500, ACTIVE_PARTITION ); // swap party FSCreatPartition( 0x82, 2, 501, 1023, NONACTIVE_PARTITION ); // format parties FSFormat( 0x80, 1, RFS_DATA ); FSFormat( 0x80, 2, RFS_DATA ); FSFormat( 0x81, 1, RFS_DATA ); FSFormat( 0x81, 2, RFS_SWAP ); FSFormat( 0x82, 1, RFS_DATA ); FSFormat( 0x82, 2, RFS_SWAP ); #else InitializeSimulation(); // only init handles,... #endif // init file system ( inside init of cache ) FSOpenFileSystem( SWAP_ON, CACHE_ON, 10000lu ); #ifdef CACHE_TEST; word PackageID=0, GetNumber=0, i; dword Logical, Free; void far *Buffer=farmalloc(10*512); if( !Buffer ) exit(0); // allocates && creates package ( 0x81 or 1 - it has same effect ) CacheManAllocateSector( 0x81, 1, 0, 1, Logical, GetNumber, PackageID, FPACK_CREAT ); word j; word Number; // PackageID set in previous function for( i=1; i<=5; i++ ) { // allocate allocates < logical, logical+6 > CacheManAllocateSector( 1, 1, 0lu, 7, Logical, GetNumber, PackageID, FPACK_ADD ); printf("\n Get number: %u", GetNumber ); // init buffer for save for( j=0; j<10*512; j++ ) ((byte far * )Buffer)[j]=0xCC; if( random(5) ) // probably add CacheManSaveSector( 1, 1, Logical, 7, PackageID, FPACK_ADD, Buffer ); else CacheManSaveSector( 1, 1, Logical, 7, PackageID, FPACK_CREAT, Buffer ); // load what's written from cache ( something ) // Number=(word)random(7) + 1u; Number=7; CacheManLoadSector( 1, 1, Logical, Number, PackageID, FPACK_ADD, Buffer ); if( !random(10) ) // probably not commit { if( random(2) ) CacheManCommitPackage( PackageID, FPACK_NOTHING ); // commit else { CacheManCommitPackage( PackageID, FPACK_DELETE ); // commit && del pack // create new PackID because in alloc and save used! CacheManAllocateSector( 1, 1, 0lu, 7, Logical, GetNumber, PackageID, FPACK_CREAT ); printf("\n Get number: %u", GetNumber ); } } // print free space on device GetPartyFreeSpace( 0x81, 1, Free ); GetPartyFreeSpace( 0x81, 2, Free ); printf("\n\n ----->"); } farfree(Buffer); // UndoAlfLog( 0x81, 1, "TEST.ALF" ); // RecoverUsingCml( "TEST.CML" ); // RollbackOkaLog( 1, 1, "11TEST.OKA" ); // RecoverParty( 1, 1 ); #endif #ifdef CACHE_EXAMPLE; int Handle; word PackageID, GetNumber=0, i, j, bytes; dword Previous=0, Logical1, Logical2, Logical; #define BUFFER_SIZE 512 void far *Buffer=farmalloc(BUFFER_SIZE); if( !Buffer ) { printf("All1 Error..");exit(0); } void far *BufferOut=farmalloc(BUFFER_SIZE); if( !BufferOut ) { printf("All2 Error..");exit(0); } // now read some nice data to buffer if ((Handle = open("input.txt", O_CREAT | O_RDWR | O_BINARY, S_IWRITE | S_IREAD )) == -1) { printf("Error.."); return ERR_FS_FATAL_ERROR; } if( _dos_read( Handle, Buffer, BUFFER_SIZE, &bytes) != 0 ) { printf("Error.."); return ERR_FS_FATAL_ERROR; } close(Handle); // --- begin work ------------------------------------------------ //* for(i=0; i<512; i++ ) ((byte far *)Buffer)[i]=0xAA; CacheManAllocateSector( 1, 1, 0, 1, Logical1, GetNumber, PackageID, FPACK_CREAT ); CacheManSaveSector( 1, 1, Logical1, 1u, PackageID, FPACK_ADD, Buffer ); for(i=0; i<512; i++ ) ((byte far *)Buffer)[i]=0xBB; CacheManAllocateSector( 1, 1, 0, 1, Logical2, GetNumber, PackageID, FPACK_ADD ); CacheManSaveSector( 1, 1, Logical2, 1u, PackageID, FPACK_ADD, Buffer ); //*/ CacheManCompleteCommit( FPACK_DELETE ); //* for(i=0; i<512; i++ ) ((byte far *)BufferOut)[i]=0xEE; CacheManLoadSector( 1, 1, Logical1, 1u, PackageID, FPACK_CREAT, BufferOut ); if ((Handle = open("AA", O_CREAT | O_RDWR | O_BINARY, S_IWRITE | S_IREAD )) == -1) { printf("Error.."); return ERR_FS_FATAL_ERROR; } if( _dos_write( Handle, BufferOut, BUFFER_SIZE, &bytes) != 0 ) { printf("Error.."); return ERR_FS_FATAL_ERROR; } close(Handle); // --- for(i=0; i<512; i++ ) ((byte far *)BufferOut)[i]=0xEE; CacheManLoadSector( 1, 1, Logical2, 1u, PackageID, FPACK_ADD, BufferOut ); if ((Handle = open("BB", O_CREAT | O_RDWR | O_BINARY, S_IWRITE | S_IREAD )) == -1) { printf("Error.."); return ERR_FS_FATAL_ERROR; } if( _dos_write( Handle, BufferOut, BUFFER_SIZE, &bytes) != 0 ) { printf("Error.."); return ERR_FS_FATAL_ERROR; } close(Handle); //*/ // --- end work ------------------------------------------------ // save buffer content ------------------------------------------------ if ((Handle = open("output2.txt", O_CREAT | O_RDWR | O_BINARY, S_IWRITE | S_IREAD )) == -1) { printf("Error.."); return ERR_FS_FATAL_ERROR; } if( _dos_write( Handle, BufferOut, BUFFER_SIZE, &bytes) != 0 ) { printf("Error.."); return ERR_FS_FATAL_ERROR; } close(Handle); farfree(Buffer); farfree(BufferOut); #endif #ifdef STRIP_EXAMPLE #define BUFFER_SIZE 512 #define SECTOR 31 byte far *Buffer=(byte far *)farmalloc(BUFFER_SIZE); if( !Buffer ) { printf("All1 Error..");exit(0); } printf("\n\n\n Test: "); ReadLogicalSector( 1, SECTOR, Buffer, 1 ); Buffer[0]=0xAB; CLASSICWriteLogicalSector( 1, SECTOR, Buffer, 1 ); ReadLogicalSector( 1, SECTOR, Buffer, 1 ); ReadLogicalSector( 1, SECTOR, Buffer, 1 ); farfree(Buffer); #endif FSShutdownFileSystem(); // contains complete commit //------------------------- printf("\n\n Memory statistic:"); if( FarFreeMemoryAtStart!=((unsigned long) farcoreleft())) { printf("\n Deallocation ERROR:"); Beep(); Beep(); Beep(); } else Beep(); printf( "\n Far free at start: %lu" "\n and now : %lu" "\n\n" , FarFreeMemoryAtStart, ((unsigned long) farcoreleft()) ); printf("\n Bye! \n\n"); return 0; }
int DBMPLoad( char *FileName ) { int Handle; unsigned char far *Palette=(unsigned char far *)farmalloc(SIZE_OF_PALETTE); // 4: R+G+B+UNUSED unsigned int DataSize; unsigned int i, x=0, y=0, RealWidth, Read; tBMPHeader BMPHeader; tBITMAPINFOHEADER BITMAPINFOHEADER; struct palettetype PaletteType; if( !FileName ) return 0; if( !Palette ) return 0; // read headers if (_dos_open(FileName, O_RDWR | O_BINARY, &Handle) != 0) return 1; _dos_read( Handle, &BMPHeader, sizeof(BMPHeader), &Read ); _dos_read( Handle, &BITMAPINFOHEADER, sizeof(BITMAPINFOHEADER), &Read ); _dos_read( Handle, Palette, SIZE_OF_PALETTE, &Read ); DataSize=BMPHeader.bfSize-sizeof(BITMAPINFOHEADER)-sizeof(BMPHeader)-SIZE_OF_PALETTE; unsigned char far *DataBuffer=(unsigned char far *)farmalloc(DataSize); if( DataBuffer==NULL ) return 0; _dos_read( Handle, DataBuffer, DataSize, &Read ); _dos_close(Handle); RealWidth=(BMPHeader.bfSize-BMPHeader.bfOffBits)/BITMAPINFOHEADER.biHeight-1; if( BMPHeader.bfType!=19778 ) // "BM"=19778 return 1; getpalette(&PaletteType); // get system pallette // Setting pallette: // INT 10H, AH=10H, AL=10H, BX = number of register to set // DH = red value // CH = green value // CL = blue value union REGS registr; for (i=0; i<256; i++) { registr.h.bh=0; registr.h.bl=i; registr.h.dh=Palette[i*4+2]>>2;// color must be shifted!!! registr.h.ch=Palette[i*4+1]>>2; registr.h.cl=Palette[i*4+0]>>2; registr.h.ah=0x10; registr.h.al=0x10; int86(0x10,®istr,®istr); } // drawing picture for(i=DataSize; i>0; i--) { if( x>RealWidth) { y++; x=0; } putpixel(RealWidth-x, y,(char)DataBuffer[i-1]); x++; } farfree( DataBuffer ); farfree( Palette ); return 0; }
//static DWORD LoadOldKey(char* filename,CPtrArray* array,DWORD appID) //static DWORD LoadOldKey(char* filename, HDATA& hRootData, DWORD appID) static DWORD LoadOldKey(DWORD appID, const char* filename, DWORD* level, BOOL* valid, HDATA& hRootData) { DWORD ret=0; AVP_KeyHeader avpKeyHeader; int handle; unsigned bytes; unsigned char *cbuf; DWORD Level=0; BOOL Valid=TRUE; BOOL platf=FALSE; if(_dos_open(filename,O_RDONLY,&handle)) return ret; if(_dos_read(handle,(void far *)&avpKeyHeader,sizeof(avpKeyHeader),&bytes) ||avpKeyHeader.Magic!=AVP_KEY_MAGIC||avpKeyHeader.Version!=3 ||((cbuf=(unsigned char *)Malloc(avpKeyHeader.CompressedSize))==0)) { _dos_close(handle); return ret; } //if(KeyHeader.CompressedCRC==CalcSum((BYTE*)cbuf,KeyHeader.CompressedSize)) if(((avpKey=(struct _AVP_Key *)Malloc(avpKeyHeader.UncompressedSize))==NULL) ||_dos_read(handle,(void *)cbuf,avpKeyHeader.CompressedSize,&bytes)) { _dos_close(handle); Free(cbuf); return ret; } _dos_close(handle); if(avpKeyHeader.CompressedCRC==CalcSum((BYTE*)cbuf,avpKeyHeader.CompressedSize)) { for(int i=0;i<avpKeyHeader.CompressedSize;i++) cbuf[i]^=(BYTE)i; if(avpKeyHeader.UncompressedSize==unsqu(cbuf,(unsigned char *)avpKey) )//&&!FFake) { avp_key_present=1; switch(appID) { case AVP_APID_SCANNER_WIN_95: platf=!!(avpKey->Platforms & KEY_P_WIN95); break; case AVP_APID_SCANNER_WIN_NTWS: platf=!!(avpKey->Platforms & KEY_P_WINNT); break; case AVP_APID_MONITOR_WIN_95: platf=!!(avpKey->Platforms & KEY_P_WIN95) && !!(avpKey->Options & KEY_O_MONITOR); break; case AVP_APID_MONITOR_WIN_NTWS: platf=!!(avpKey->Platforms & KEY_P_WINNT) && !!(avpKey->Options & KEY_O_MONITOR); break; case AVP_APID_OS_2: platf=!!(avpKey->Platforms & KEY_P_OS2); break; case AVP_APID_SCANNER_DOS_LITE: platf=!!(avpKey->Platforms & KEY_P_DOSLITE); break; case AVP_APID_NOVELL: platf=!!(avpKey->Platforms & KEY_P_NOVELL); break; case AVP_APID_SCANNER_DOS_32: case AVP_APID_SCANNER_DOS_16: platf=!!(avpKey->Platforms & KEY_P_DOS); break; case AVP_APID_CONTROLCENTER: case AVP_APID_UPDATOR: platf=!!(avpKey->Platforms & KEY_P_WIN95) || !!(avpKey->Platforms & KEY_P_WINNT); break; case AVP_APID_INSPECTOR: case AVP_APID_WEBINSPECTOR: case AVP_APID_EXCHANGE: case AVP_APID_NT_SERVER: default: break; } if(platf) { ret=FN_MINIMAL; ret|=FN_OPTIONS; if(avpKey->Options & KEY_O_REMOTELAUNCH)ret|=FN_NETWORK; if(avpKey->Options & KEY_O_REMOTESCAN) ret|=FN_NETWORK; if(!(avpKey->Options & KEY_O_DISINFECT))ret&=~FN_DISINFECT; if(!(avpKey->Options & KEY_O_UNPACK)) ret&=~FN_UNPACK; if(!(avpKey->Options & KEY_O_EXTRACT)) ret&=~FN_EXTRACT; struct dosdate_t stCurrent; //SYSTEMTIME stCurrent; SYSTEMTIME stExpir; _dos_getdate(&stCurrent); //GetSystemTime(&stCurrent); memset(&stExpir,0,sizeof(struct dosdate_t));//SYSTEMTIME)); stExpir.wYear =avpKey->ExpirYear; stExpir.wMonth=(unsigned char)avpKey->ExpirMonth; stExpir.wDay =(unsigned char)avpKey->ExpirDay; if(stCurrent.year > stExpir.wYear) Valid=FALSE; else if(stCurrent.year < stExpir.wYear) ; else if(stCurrent.month > stExpir.wMonth) Valid=FALSE; else if(stCurrent.month < stExpir.wMonth) ; else if(stCurrent.day > stExpir.wDay) Valid=FALSE; //if(stCurrent.year >stExpir.wYear) goto time_bad; //if(stCurrent.year <stExpir.wYear) goto time_ok; //if(stCurrent.month>stExpir.wMonth)goto time_bad; //if(stCurrent.month<stExpir.wMonth)goto time_ok; //if(stCurrent.day >stExpir.wDay) goto time_bad; //if(stCurrent.day <stExpir.wDay) goto time_ok; //time_bad: // if(!!(avpKey->Flags & KEY_F_INFOEVERYLAUNCH) // || !(avpKey->Flags & KEY_F_REGISTERED) // || !CheckSelfExpir(stExpir)) // goto clo; // ret=0; // else // ret &= ~FN_UPDATES; //time_ok: if(!CheckSelfExpir(stExpir)) Valid=FALSE; else { if(avpKey->Options & KEY_O_DISINFECT) { Level=10; if((avpKey->Options & KEY_O_UNPACK)||(avpKey->Options & KEY_O_EXTRACT)) Level=20; if((avpKey->Options & KEY_O_REMOTELAUNCH)||(avpKey->Options & KEY_O_REMOTESCAN)) Level=30; } else { if(avpKey->Flags & KEY_F_INFOEVERYLAUNCH) Valid=FALSE; else Level=5; } } if(DATA_Init_Library((void*(*)(unsigned int))Malloc,Free)) { hRootData=DATA_Add(0,0,AVP_PID_KEYROOT,0,0); if(hRootData) { DATA_Add(hRootData,0,PID_FILENAME,(DWORD)filename,0); HDATA hInfo; hInfo=DATA_Add(hRootData,0,AVP_PID_KEYINFO,0,0); //OemToChar(buf+Key->RegNumberOffs, buf+Key->RegNumberOffs); //OemToChar(buf+Key->CopyInfoOffs, buf+Key->CopyInfoOffs); //OemToChar(buf+Key->SupportOffs, buf+Key->SupportOffs); DATA_Add(hInfo,0, PID_SERIALSTR,(DWORD)avpKey+avpKey->RegNumberOffs,0); DATA_Add(hInfo,0, AVP_PID_KEYPLPOSNAME, (DWORD)"AVP Key v1.0", 0); DATA_Add(hInfo,0, AVP_PID_KEYLICENCEINFO,(DWORD)avpKey+avpKey->CopyInfoOffs,0); DATA_Add(hInfo,0, AVP_PID_KEYSUPPORTINFO,(DWORD)avpKey+avpKey->SupportOffs,0); if(stExpir.wDay!=0) DATA_Add(hInfo,0, AVP_PID_KEYEXPDATE, (DWORD)&stExpir, sizeof(AVP_date)); } } } } else ret=0; if(!(avpKey->Flags&KEY_F_REGISTERED)||!(avpKey->Platforms&KEY_P_DOS)) ret=0; } else ret=0; //clo: Free(cbuf); if(ret) { if(level) *level=MAX(*level, Level); if(valid) *valid|=Valid; } return ret; }
static DWORD LoadKey(DWORD appID, const char* filename, DWORD* level, BOOL* valid, HDATA& hRootData) { DWORD ret=0; DWORD Level=0; BOOL Valid=TRUE; if(sign_check_file(filename,1,0,0,0)) { int f; if(_dos_open(filename,O_RDONLY,&f)) return ret; DWORD count; DWORD val=0; _dos_read(f,(void far *)&val,4,(unsigned int*)&count); _dos_close(f); if(count!=4 || val!='wsLK') return ret; if(!DATA_Init_Library((void*(*)(unsigned int))Malloc,Free)) return ret; hRootData=DATA_Add(0,0,AVP_PID_KEYROOT,0,0); if(!hRootData) return ret; DATA_Add(hRootData,0,PID_FILENAME,(DWORD)filename,0); HDATA hInfo; hInfo=DATA_Add(hRootData,0,AVP_PID_KEYINFO,0,0); DATA_Add(hInfo,0, PID_SERIALSTR, (DWORD)"Corrupted", 0); return ret; } _AvpReadFile =AvpReadFile; _AvpWriteFile =AvpWriteFile; _AvpCloseHandle=AvpCloseHandle; _AvpCreateFile =AvpCreateFile; _AvpGetFileSize=AvpGetFileSize; if(!KLDT_Init_Library((void*(*)(unsigned int))Malloc,Free)) return ret; if(!DATA_Init_Library((void*(*)(unsigned int))Malloc,Free)) return ret; AVP_dword dseq[5]; if(!KLDT_DeserializeUsingSWM( filename, &hRootData ))return ret; if(hRootData==NULL) return ret; ret=TRUE; AVP_dword pid; pid=MAKE_AVP_PID(appID, AVP_APID_GLOBAL, avpt_dword, 0); if(AVP_PID_KEYROOT!=DATA_Get_Id( hRootData, 0 ) || !DATA_Get_Val( hRootData, DATA_Sequence(dseq,pid,0), 0, &Level, sizeof(Level)) ) { DATA_Remove( hRootData, 0 ); hRootData=0; return ret; } // ret|=FN_MINIMAL; // if(level>=10) ret|=FN_UPDATES; // if(level>=20) ret|=FN_OPTIONS; // if(level>=30) ret|=FN_FULL; struct dosdate_t stCurrent; SYSTEMTIME stExpir; _dos_getdate(&stCurrent); memset(&stExpir,0,sizeof(SYSTEMTIME)); if( !DATA_Get_Val( hRootData, DATA_Sequence(dseq,AVP_PID_KEYINFO,AVP_PID_KEYEXPDATE,0),0,&stExpir,sizeof(AVP_date)) ) goto dr; AVP_dword keynumber[3]; DATA_Get_Val(hRootData,DATA_Sequence(dseq,AVP_PID_KEYINFO,AVP_PID_KEYSERIALNUMBER,0), 0, keynumber, sizeof(keynumber)); char buf[0x20]; _sprintf(buf,"%04d-%06d-%08d",keynumber[0],keynumber[1],keynumber[2]); DATA_Add(hRootData,DATA_Sequence(dseq,AVP_PID_KEYINFO,0), PID_SERIALSTR, (DWORD)buf,0); BOOL keyIsTrial; keyIsTrial=(DATA_Find(hRootData, DATA_Sequence(dseq,AVP_PID_KEYINFO,AVP_PID_KEYISTRIAL,0)))?1:0; AVP_dword PLPos; PLPos=0; DATA_Get_Val( hRootData, DATA_Sequence(dseq,AVP_PID_KEYINFO,AVP_PID_KEYPLPOS,0), 0, &PLPos, sizeof(AVP_dword)); if(stCurrent.year > stExpir.wYear) Valid=FALSE; else if(stCurrent.year < stExpir.wYear) ; else if(stCurrent.month > stExpir.wMonth) Valid=FALSE; else if(stCurrent.month < stExpir.wMonth) ; else if(stCurrent.day > stExpir.wDay) Valid=FALSE; if(Valid) { AVP_dword life; if( DATA_Get_Val( hRootData, DATA_Sequence(dseq,AVP_PID_KEYINFO,AVP_PID_KEYLIFESPAN,0), 0, &life, sizeof(AVP_dword)) ) { //if(!CheckKeyUseTime(keynumber,life,stExpir,keyIsTrial?&PLPos:NULL))Valid=FALSE; } } if(!Valid &&( keyIsTrial|| !CheckSelfExpir(stExpir))) Level=0; DATA_Set_Val(hRootData,DATA_Sequence(dseq,AVP_PID_KEYINFO,AVP_PID_KEYEXPDATE,0), 0, (DWORD)&stExpir, sizeof(AVP_date)); dr: DATA_Add(hRootData,0,PID_FILENAME,(DWORD)filename,0); if(ret){ if(level) *level=MAX(*level, Level); if(valid) *valid|=Valid; } return ret; }
int DBMPLoad( char *FileName, byte what ) { byte help[320]; // upside down image byte far *Palette=(unsigned char far *)farmalloc(SIZE_OF_PALETTE); // 4: R+G+B+UNUSED int Handle; word i, x=0, y=0, Read; long RealWidth, DataSize; tBMPHeader BMPHeader; tBITMAPINFOHEADER BITMAPINFOHEADER; if( !FileName ) return 0; if( !Palette ) return 0; // read headers if (_dos_open(FileName, O_RDWR | O_BINARY, &Handle) != 0) return 1; _dos_read( Handle, &BMPHeader, sizeof(BMPHeader), &Read ); _dos_read( Handle, &BITMAPINFOHEADER, sizeof(BITMAPINFOHEADER), &Read ); _dos_read( Handle, Palette, SIZE_OF_PALETTE, &Read ); DataSize=BMPHeader.bfSize-sizeof(BITMAPINFOHEADER)-sizeof(BMPHeader)-SIZE_OF_PALETTE; unsigned char far *import; switch( what ) { case CELLIMPORT: import=(unsigned char far *)farmalloc(DataSize); if( Background==NULL ) return 0; _dos_read( Handle, import, (word)DataSize, &Read ); break; case BACKGROUND: _dos_read( Handle, Background, (word)DataSize, &Read ); break; case GAMEMENU: _dos_read( Handle, GameMenu, (word)DataSize, &Read ); break; } _dos_close(Handle); RealWidth=(BMPHeader.bfSize-BMPHeader.bfOffBits)/BITMAPINFOHEADER.biHeight-1u; if( BMPHeader.bfType!=19778 ) // "BM"=19778 return 1; // Setting pallette: // INT 10H, AH=10H, AL=10H, BX = number of register to set // DH = red value // CH = green value // CL = blue value union REGS registr; if( what==BACKGROUND ) { for (i=0; i<256; i++) { registr.h.bh=0; registr.h.bl=i; registr.h.dh=Palette[i*4+2]>>2;// color must be shifted!!! registr.h.ch=Palette[i*4+1]>>2; registr.h.cl=Palette[i*4+0]>>2; registr.h.ah=0x10; registr.h.al=0x10; int86(0x10,®istr,®istr); } } switch( what ) { case CELLIMPORT: // drawing picture for(i=(word)DataSize; i>0; i--) { if( x>RealWidth) { y++; x=0; } putpixel((word)RealWidth-x, y,(char)import[i-1]); x++; } farfree( import ); break; case BACKGROUND: for( i=0; i<100; i++ ) { for( x=0; x<320; x++ ) help[x]=Background[i*320+x]; for( x=0; x<320; x++ ) Background[i*320+x]=Background[(200-1-i)*320+x]; for( x=0; x<320; x++ ) Background[(200-1-i)*320+x]=help[x]; } break; case GAMEMENU: for( i=0; i<10; i++ ) { for( x=0; x<320; x++ ) help[x]=GameMenu[i*320+x]; for( x=0; x<320; x++ ) GameMenu[i*320+x]=GameMenu[(20-1-i)*320+x]; for( x=0; x<320; x++ ) GameMenu[(20-1-i)*320+x]=help[x]; } break; } farfree( Palette ); return 0; }
void TOutputDevice::readBytes( void *buffer, ushort len ) { unsigned temp; _dos_read( encoder, buffer, len, &temp ); }