Beispiel #1
0
/* 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;
}
Beispiel #2
0
static unsigned my_read( int hdl, void *buff, unsigned len )
{
    unsigned    got;

    if( _dos_read( hdl, buff, len, &got ) != 0 ) return( -1 );
    return( got );
}
Beispiel #3
0
int read(int fd, void *buf, unsigned count)
{
  unsigned bytes;
  int result = _dos_read(fd, buf, count, &bytes);

  return (result == 0 ? bytes : -1);
}
Beispiel #4
0
 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;
 }
Beispiel #5
0
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;
}
Beispiel #6
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 );
    }
}
Beispiel #7
0
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;
}
Beispiel #8
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;
}
Beispiel #9
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,&registr,&registr);
  }

 // 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;
}
Beispiel #10
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;
 }
Beispiel #11
0
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;
 }
Beispiel #12
0
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,&registr,&registr);
  }
 }

 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;
}
Beispiel #13
0
void TOutputDevice::readBytes( void *buffer, ushort len )
{
	unsigned temp;
	_dos_read( encoder, buffer, len, &temp );
}