Changeset 81:d8fccaa45d5f

Show
Ignore:
Timestamp:
08/29/08 06:59:43 (4 months ago)
Author:
Diggory Hardy <diggory.hardy@gmail.com>
branch:
default
Message:

Moved file IO code from mde/mergetag to mde/file/mergetag and changed how some errors are caught.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • mde/file/deserialize.d

    r79 r81  
     1/* LICENSE BLOCK 
     2Part of mde: a Modular D game-oriented Engine 
     3Copyright © 2007-2008 Diggory Hardy 
     4 
     5This program is free software: you can redistribute it and/or modify it under the terms 
     6of the GNU General Public License as published by the Free Software Foundation, either 
     7version 2 of the License, or (at your option) any later version. 
     8 
     9This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 
     10without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
     11See the GNU General Public License for more details. 
     12 
     13You should have received a copy of the GNU General Public License 
     14along with this program.  If not, see <http://www.gnu.org/licenses/>. */ 
     15 
    116/************************************************************************************************** 
    217 * Generic deserialization templated function. 
    318 * 
    4  * copyright: Copyright (c) 2007-2008 Diggory Hardy. 
    5  * 
    6  * author: Diggory Hardy, diggory.hardy@gmail.com 
    7  * 
    819 * Supports: 
    920 *  Associative arrays, arrays (inc. strings), structs, char types, bool, int types, float types. 
    1021 * 
    1122 * There are also some public utility functions with their own documentation. 
    12  * 
    13  * Throws: 
    14  * On errors, a ParseException or a UnicodeException (both extend TextException) is thrown with a 
    15  * suitable message. No other exceptions should be thrown. 
    1623 * 
    1724 * Examples: 
     
    3744 * ------------------------------------------------------------------------------------------------ 
    3845 * 
     46 * Throws: 
     47 *      May throw a ParseException or a UnicodeException (which both extend TextException). 
     48 * 
    3949 * TODO: Optimize memory allocation (if possible?). Test best sizes for initial allocations 
    4050 * instead of merely guessing? 
     
    4252//NOTE: in case of multiple formats, make this a dummy module importing both serialize modules, 
    4353// or put all the code here. 
    44 module mde.mergetag.deserialize; 
     54module mde.file.deserialize; 
    4555 
    4656// tango imports 
  • mde/file/mergetag/DataSet.d

    r79 r81  
    1616/** This module contains the mergetag DataSet class, used for all reading and writing operations. 
    1717 */ 
    18 module mde.mergetag.DataSet; 
     18module mde.file.mergetag.DataSet; 
    1919 
    2020// package imports 
    21 public import mde.mergetag.iface.IDataSection; 
    22 import mde.mergetag.DefaultData; 
    23 import mde.mergetag.exception; 
     21public import mde.file.mergetag.iface.IDataSection; 
     22import mde.file.mergetag.DefaultData; 
    2423 
    2524 
  • mde/file/mergetag/DefaultData.d

    r79 r81  
    1717* other types of DataSection. 
    1818*/ 
    19 module mde.mergetag.DefaultData; 
     19module mde.file.mergetag.DefaultData; 
    2020 
    21 public import mde.mergetag.iface.IDataSection; 
    22 import mde.mergetag.exception; 
    23  
    24 import mde.mergetag.serialize; 
     21public import mde.file.mergetag.iface.IDataSection; 
     22import mde.file.serialize; 
    2523 
    2624 
  • mde/file/mergetag/Reader.d

    r80 r81  
    1717 * This module contains all reading functions, for both binary and text MergeTag files. 
    1818 *************************************************************************************************/ 
    19 module mde.mergetag.Reader; 
     19module mde.file.mergetag.Reader; 
    2020 
    2121// package imports 
    22 public import mde.mergetag.iface.IReader; 
    23 import mde.mergetag.DataSet; 
    24 import mde.mergetag.DefaultData; 
    25 import mde.mergetag.exception; 
    26 import mde.mergetag.internal; 
     22public import mde.file.mergetag.iface.IReader; 
     23import mde.file.mergetag.DataSet; 
     24import mde.file.mergetag.DefaultData; 
     25import mde.file.mergetag.exception; 
     26import mde.file.mergetag.internal; 
    2727 
    2828import tango.core.Exception; 
  • mde/file/mergetag/Writer.d

    r67 r81  
    2727 * instance of the appropriate class. 
    2828 *************************************************************************************************/ 
    29  module mde.mergetag.Writer; 
     29 module mde.file.mergetag.Writer; 
    3030 
    3131// package imports 
    32 public import mde.mergetag.iface.IWriter; 
    33 import mde.mergetag.DataSet; 
    34 import mde.mergetag.internal; 
    35 import mde.mergetag.exception; 
     32public import mde.file.mergetag.iface.IWriter; 
     33import mde.file.mergetag.DataSet; 
     34import mde.file.mergetag.internal; 
     35import mde.file.mergetag.exception; 
    3636 
    3737// tango imports 
  • mde/file/mergetag/exception.d

    r26 r81  
    1919 * Publically imports mde.exception. 
    2020 ******************************************/ 
    21 module mde.mergetag.exception; 
     21module mde.file.mergetag.exception; 
    2222 
    2323public import mde.exception; 
  • mde/file/mergetag/iface/IDataSection.d

    r70 r81  
    2121* Also some base mergetag symbols have been moved here. 
    2222*/ 
    23 module mde.mergetag.iface.IDataSection; 
     23module mde.file.mergetag.iface.IDataSection; 
    2424 
    2525/** Typedef for data & section indexes. 
  • mde/file/mergetag/iface/IReader.d

    r26 r81  
    1717* Interface for readers. 
    1818*/ 
    19 module mde.mergetag.iface.IReader; 
     19module mde.file.mergetag.iface.IReader; 
    2020 
    21 import mde.mergetag.DataSet; 
     21import mde.file.mergetag.DataSet; 
    2222 
    2323import tango.util.collection.model.View : View; 
  • mde/file/mergetag/iface/IWriter.d

    r26 r81  
    1717* Interface for writers. 
    1818*/ 
    19 module mde.mergetag.iface.IWriter; 
     19module mde.file.mergetag.iface.IWriter; 
    2020 
    21 import mde.mergetag.DataSet; 
     21import mde.file.mergetag.DataSet; 
    2222 
    2323 
  • mde/file/mergetag/internal.d

    r26 r81  
    1515 
    1616/// Contains functions/data structures used internally by mergetag. 
    17 module mde.mergetag.internal; 
     17module mde.file.mergetag.internal; 
    1818 
    1919package abstract class MTFormatVersion { 
  • mde/file/mergetag/mdeUT.d

    r70 r81  
    1515 
    1616/// This module provides a unittest for mergetag. 
    17 module mde.mergetag.mtunittest
     17module mde.file.mergetag.mdeUT
    1818 
    1919debug (mdeUnitTest) { 
    20     import mde.mergetag.Reader; 
    21     import mde.mergetag.Writer; 
    22     import mde.mergetag.DataSet; 
    23     import mde.mergetag.DefaultData; 
    24     import mde.mergetag.parse.parseTo : parseTo
    25     import mde.mergetag.parse.parseFrom : parseFrom
     20    import mde.file.mergetag.Reader; 
     21    import mde.file.mergetag.Writer; 
     22    import mde.file.mergetag.DataSet; 
     23    import mde.file.mergetag.DefaultData; 
     24    import mde.file.deserialize
     25    import mde.file.serialize
    2626     
    2727    import tango.io.FilePath; 
     
    3030    private Logger logger; 
    3131    static this() { 
    32         logger = Log.getLogger ("mde.mergetag.mtunittest"); 
     32        logger = Log.getLogger ("mde.mergetag.unittest"); 
    3333    } 
    3434     
     
    6262         
    6363        // FIXME: when binary writing is supported, read both formats and check 
    64         IReader r = makeReader (file~".mtt", null, true); 
     64        IReader r = makeReader (FilePath (file~".mtt"), null, true); 
    6565        r.read(); 
    6666         
  • mde/file/serialize.d

    r79 r81  
     1/* LICENSE BLOCK 
     2Part of mde: a Modular D game-oriented Engine 
     3Copyright © 2007-2008 Diggory Hardy 
     4 
     5This program is free software: you can redistribute it and/or modify it under the terms 
     6of the GNU General Public License as published by the Free Software Foundation, either 
     7version 2 of the License, or (at your option) any later version. 
     8 
     9This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 
     10without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
     11See the GNU General Public License for more details. 
     12 
     13You should have received a copy of the GNU General Public License 
     14along with this program.  If not, see <http://www.gnu.org/licenses/>. */ 
     15 
    116/************************************************************************************************** 
    217 * Generic serialization templated function. 
    3  * 
    4  * copyright: Copyright (c) 2007-2008 Diggory Hardy. 
    5  * 
    6  * author: Diggory Hardy, diggory.hardy@gmail.com 
    718 * 
    819 * Supports: 
     
    3344 * ------------------------------------------------------------------------------------------------ 
    3445 * 
     46 * throws: 
     47 *      May throw a UnicodeException or an IllegalArgumentException. 
     48 * 
    3549 * TODO: Optimize memory allocation (if possible?). Test best sizes for initial allocations 
    3650 * instead of merely guessing? 
     
    3852//NOTE: in case of multiple formats, make this a dummy module importing both serialize modules, 
    3953// or put all the code here. 
    40 module mde.mergetag.serialize; 
     54module mde.file.serialize; 
    4155// Since serialize is never used in a module where deserialize is not used, save an import: 
    42 public import mde.mergetag.deserialize; 
     56public import mde.file.deserialize; 
    4357 
    4458// tango imports 
  • mde/font/font.d

    r79 r81  
    2222import mde.font.exception; 
    2323 
    24 import mde.mergetag.Reader; 
    25 import mde.mergetag.DataSet; 
    26 import mde.mergetag.exception; 
     24import mde.file.mergetag.Reader; 
     25import mde.file.mergetag.DataSet; 
    2726import mde.setup.paths; 
    2827 
     
    3029import derelict.opengl.gl; 
    3130 
    32 import mde.mergetag.deserialize; 
     31import mde.file.deserialize; 
    3332import tango.stdc.stringz; 
    3433import Util = tango.text.Util; 
     
    6059        private const fileName = "fonts"; 
    6160        void initialize () { 
    62             if (!confDir.exists (fileName)) 
    63                 throw new fontException ("No font settings file (fonts.[mtt|mtb])"); 
    64              
    6561            if (FT_Init_FreeType (&library)) 
    6662                throw new fontException ("error initialising the FreeType library"); 
     
    111107                    throw new fontException ("No fallback font style specified"); 
    112108                fallbackName = *p; 
    113             } 
    114             catch (MTException e) { 
    115                 throw new fontException ("Mergetag exception: "~e.msg); 
     109            } catch (NoFileException) { 
     110                throw new fontException ("No font settings file (fonts.[mtt|mtb])"); 
     111            } catch (Exception e) { 
     112                throw new fontException ("Reading font settings failed: "~e.msg); 
    116113            } 
    117114             
  • mde/gui/WidgetDataSet.d

    r80 r81  
    3131 
    3232// For loading from file: 
    33 import mt = mde.mergetag.DataSet; 
    34 import mt = mde.mergetag.DefaultData; 
    35 import mt = mde.mergetag.exception; 
    36 import mde.mergetag.serialize; 
     33import mt = mde.file.mergetag.DataSet; 
     34import mt = mde.file.mergetag.DefaultData; 
     35import mde.file.serialize; 
    3736import tango.util.log.Log : Log, Logger; 
    3837 
  • mde/gui/WidgetManager.d

    r80 r81  
    188188import mde.gui.widget.createWidget; 
    189189 
    190 import mde.mergetag.Reader; 
    191 import mde.mergetag.Writer; 
     190import mde.file.mergetag.Reader; 
     191import mde.file.mergetag.Writer; 
    192192import mde.setup.paths; 
    193193 
     
    221221        if (allLoaded || (defaultDesign !is null && allDesigns == false)) 
    222222            return; // test if already loaded 
    223              
    224             if (!confDir.exists (fileName)) { 
    225                 logger.error ("Unable to load GUI: no config file!"); 
    226                 return; // not a fatal error (so long as the game can run without a GUI!) 
    227             } 
    228223             
    229224            // Set up a reader 
     
    267262            } else 
    268263                reader.read([defaultDesign]); 
     264        } catch (NoFileException) { 
     265            logger.error ("Unable to load GUI: no config file!"); 
     266            // just return: not a fatal error (so long as the game can run without a GUI!) 
    269267        } catch (Exception e) { 
    270268            logger.error ("Unable to load GUI: errors parsing config file ("~confDir.getFileName(fileName,PRIORITY.HIGH_LOW)~"):"); 
  • mde/input/Config.d

    r79 r81  
    1919import mde.input.exception; 
    2020 
    21 import MT = mde.mergetag.Reader; 
     21import MT = mde.file.mergetag.Reader; 
    2222import mde.setup.paths; 
    23 import mde.mergetag.deserialize; 
    24 debug import mde.mergetag.serialize; 
     23import mde.file.deserialize; 
     24debug import mde.file.serialize; 
    2525 
    2626import tango.util.log.Log : Log, Logger; 
  • mde/lookup/Options.d

    r80 r81  
    2525import mde.exception; 
    2626 
    27 import mde.mergetag.Reader; 
    28 import mde.mergetag.Writer; 
    29 import mde.mergetag.DataSet; 
    30 import mde.mergetag.exception; 
    31 import mde.mergetag.serialize; 
     27import mde.file.mergetag.Reader; 
     28import mde.file.mergetag.Writer; 
     29import mde.file.mergetag.DataSet; 
     30import mde.file.serialize; 
    3231 
    3332import tango.core.Exception : ArrayBoundsException; 
     
    135134        private const fileName = "options"; 
    136135        void load () { 
    137         // Check it exists (if not it should still be created on exit). 
    138         // Don't bother checking it's not a folder, because it could still be a block or something. 
    139             if (!confDir.exists (fileName)) return; 
    140          
    141136            try { 
    142137                IReader reader; 
     
    149144                }; 
    150145                reader.read; 
    151             } catch (MTException e) { 
    152                 logger.fatal ("Loading options aborted:"); 
    153                 logger.fatal (e.msg); 
    154                 throw new optionsLoadException ("Mergetag exception (see above message)"); 
     146            } catch (NoFileException e) { 
     147                // Just return. Options file will be created on exit. 
     148            } catch (Exception e) { 
     149                logger.warn ("Loading options failed: "~e.msg); 
     150                logger.warn ("If warning persists, delete the offending file.");        // FIXME - delete the bad file somehow 
    155151            } 
    156152        } 
     
    171167            } catch (NoFileException) { 
    172168                // No user file exists; not an error. 
    173             } catch (MTException e) { 
     169            } catch (Exception e) { 
    174170                // Log a message and continue, overwriting the file: 
    175                 logger.error ("Loading options aborted:"); 
    176                 logger.error (e.msg); 
     171                logger.error ("Loading options aborted: " ~ e.msg); 
    177172            } 
    178173         
     
    181176                writer = confDir.makeMTWriter (fileName, ds); 
    182177                writer.write(); 
    183             } catch (MTException e) { 
    184                 logger.error ("Saving options aborted! Reason:"); 
    185                 logger.error (e.msg); 
     178            } catch (Exception e) { 
     179                logger.error ("Saving options aborted: "~e.msg); 
    186180            } 
    187181        } 
  • mde/lookup/Translation.d

    r79 r81  
    4242import mde.exception; 
    4343 
    44 import mde.mergetag.DataSet; 
    45 import mde.mergetag.Reader; 
    46 import mde.mergetag.exception; 
    47 import mde.mergetag.deserialize; 
     44import mde.file.mergetag.DataSet; 
     45import mde.file.mergetag.Reader; 
     46import mde.file.mergetag.exception; 
     47import mde.file.deserialize; 
    4848 
    4949import tango.util.log.Log : Log, Logger; 
  • mde/mde.d

    r75 r81  
    3636import tango.time.Clock;                // Clock.now() 
    3737import tango.util.log.Log : Log, Logger; 
     38debug (mdeUnitTest) import mde.file.mergetag.mdeUT; 
    3839 
    3940int main(char[][] args) 
  • mde/setup/paths.d

    r78 r81  
    3333 
    3434import mde.exception; 
    35 import mde.mergetag.Reader; 
    36 import mde.mergetag.Writer; 
    37 import mde.mergetag.DataSet; 
    38 import mde.mergetag.exception; 
     35import mde.file.mergetag.Reader; 
     36import mde.file.mergetag.Writer; 
     37import mde.file.mergetag.DataSet; 
     38import mde.file.mergetag.exception; 
    3939 
    4040import tango.io.Console; 
     
    106106    } 
    107107     
    108     /** Check whether the given file exists under any path with either .mtt or .mtb suffix. */ 
    109     bool exists (char[] file) { 
    110         for (uint i = 0; i < pathsLen; ++i) { 
    111             if (FilePath (paths[i]~file~".mtt").exists) return true; 
    112             if (FilePath (paths[i]~file~".mtb").exists) return true; 
    113         } 
    114         return false; 
    115     } 
    116      
    117108    /// Print all paths found. 
    118109    static void printPaths () {