source: xtideuniversalbios/trunk/Serial_Server/library/FlatImage.h @ 526

Last change on this file since 526 was 526, checked in by krille_n_@…, 11 years ago

Changes:

  • Update of the copyright notices to include the year 2013.
File size: 2.5 KB
RevLine 
[209]1//======================================================================
2//
3// Project:     XTIDE Universal BIOS, Serial Port Server
4//
5// File:        FlatImage.h - Header file for basic flat disk image support
6//
7
[376]8//
[526]9// XTIDE Universal BIOS and Associated Tools
10// Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
[376]11//
12// This program is free software; you can redistribute it and/or modify
13// it under the terms of the GNU General Public License as published by
14// the Free Software Foundation; either version 2 of the License, or
15// (at your option) any later version.
[526]16//
[376]17// This program is distributed in the hope that it will be useful,
18// but WITHOUT ANY WARRANTY; without even the implied warranty of
19// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
[526]20// GNU General Public License for more details.
[376]21// Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
22//
23
[209]24#include "library.h"
25
26class FlatImage : public Image
27{
28private:
[219]29    class FileAccess fp;
[209]30
31public:
[219]32    FlatImage( char *name, int p_readOnly, int p_drive, int p_create, unsigned long p_cyl, unsigned long p_head, unsigned long p_sect, int p_useCHS )   :   Image( name, p_readOnly, p_drive, p_create, p_cyl, p_head, p_sect, p_useCHS )
33    {
34        long filesize;
[209]35
[219]36        if( p_create )
37        {
38            char buff[512];
39            unsigned long size;
40            double sizef;
41            FileAccess cf;
[259]42            char sizeChar;
[219]43
44            size = (unsigned long) p_cyl * (unsigned long) p_sect * (unsigned long) p_head;
45            if( size > cf.MaxSectors )
46                log( -1, "'%s', can't create flat file with size greater than %lu 512-byte sectors", name, cf.MaxSectors );
47            sizef = size / 2048.0;   // 512 byte sectors -> MB
[259]48            sizeChar = 'M';
[526]49            if( sizef < 1 )
[259]50            {
51                sizef *= 1024;
52                sizeChar = 'K';
53            }
[219]54
[225]55            if( cf.Create( name ) )
56            {
57                memset( &buff[0], 0, 512 );
58                while( size-- )
59                    cf.Write( &buff[0], 512 );
[526]60
[225]61                if( p_cyl > 1024 )
[259]62                    log( 0, "Created file '%s', size %.2lf %cB", name, sizef, sizeChar );
[225]63                else
[259]64                    log( 0, "Created file '%s', geometry %u:%u:%u, size %.2lf %cB", name, p_cyl, p_head, p_sect, sizef, sizeChar );
[225]65                cf.Close();
66            }
[219]67        }
68
69        fp.Open( name );
70
71        totallba = fp.SizeSectors();
72
73        init( name, p_readOnly, p_drive, p_cyl, p_head, p_sect, p_useCHS );
74    }
75
76    FlatImage::~FlatImage()
77    {
78        fp.Close();
79    }
80
81    void seekSector( unsigned long lba )
82    {
83        fp.SeekSectors( lba );
84    }
85
86    void writeSector( void *buff )
87    {
88        fp.Write( buff, 512 );
89    }
90
91    void readSector( void *buff )
92    {
93        fp.Read( buff, 512 );
94    }
[209]95};
96
Note: See TracBrowser for help on using the repository browser.