1 /* creator.c: simple type for storing creator information
2    Copyright (c) 2003-2005 Philip Kendall
3 
4    $Id: creator.c 3701 2008-06-30 20:32:56Z pak21 $
5 
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 2 of the License, or
9    (at your option) any later version.
10 
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15 
16    You should have received a copy of the GNU General Public License along
17    with this program; if not, write to the Free Software Foundation, Inc.,
18    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 
20    Author contact information:
21 
22    E-mail: philip-fuse@shadowmagic.org.uk
23 
24 */
25 
26 #include <config.h>
27 
28 #include <stdio.h>
29 #include <string.h>
30 
31 #include "internals.h"
32 
33 struct libspectrum_creator {
34 
35   char program[32];
36   libspectrum_word major, minor;
37 
38   libspectrum_dword competition_code;
39 
40   libspectrum_byte *custom;
41   size_t custom_length;
42 
43 };
44 
45 libspectrum_creator*
libspectrum_creator_alloc(void)46 libspectrum_creator_alloc( void )
47 {
48   libspectrum_creator *creator = libspectrum_malloc( sizeof( *creator ) );
49   creator->custom = NULL;
50   creator->custom_length = 0;
51   return creator;
52 }
53 
54 libspectrum_error
libspectrum_creator_free(libspectrum_creator * creator)55 libspectrum_creator_free( libspectrum_creator *creator )
56 {
57   if( creator->custom ) libspectrum_free( creator->custom );
58   libspectrum_free( creator );
59 
60   return LIBSPECTRUM_ERROR_NONE;
61 }
62 
63 libspectrum_error
libspectrum_creator_set_program(libspectrum_creator * creator,const char * program)64 libspectrum_creator_set_program( libspectrum_creator *creator,
65 				 const char *program )
66 {
67   memset( creator->program, 0, sizeof( creator->program ) );
68   snprintf( (char*)creator->program, sizeof( creator->program ), "%s",
69 	    program );
70   return LIBSPECTRUM_ERROR_NONE;
71 }
72 
73 const char*
libspectrum_creator_program(libspectrum_creator * creator)74 libspectrum_creator_program( libspectrum_creator *creator )
75 {
76   return creator->program;
77 }
78 
libspectrum_creator_set_major(libspectrum_creator * creator,libspectrum_word major)79 libspectrum_error libspectrum_creator_set_major( libspectrum_creator *creator,
80 						 libspectrum_word major )
81 {
82   creator->major = major;
83   return LIBSPECTRUM_ERROR_NONE;
84 }
85 
86 libspectrum_word
libspectrum_creator_major(libspectrum_creator * creator)87 libspectrum_creator_major( libspectrum_creator *creator )
88 {
89   return creator->major;
90 }
91 
libspectrum_creator_set_minor(libspectrum_creator * creator,libspectrum_word minor)92 libspectrum_error libspectrum_creator_set_minor( libspectrum_creator *creator,
93 						 libspectrum_word minor )
94 {
95   creator->minor = minor;
96   return LIBSPECTRUM_ERROR_NONE;
97 }
98 
99 libspectrum_word
libspectrum_creator_minor(libspectrum_creator * creator)100 libspectrum_creator_minor( libspectrum_creator *creator )
101 {
102   return creator->minor;
103 }
104 
105 libspectrum_error
libspectrum_creator_set_competition_code(libspectrum_creator * creator,libspectrum_dword competition_code)106 libspectrum_creator_set_competition_code( libspectrum_creator *creator,
107 					  libspectrum_dword competition_code )
108 {
109   creator->competition_code = competition_code;
110   return LIBSPECTRUM_ERROR_NONE;
111 }
112 
113 libspectrum_dword
libspectrum_creator_competition_code(libspectrum_creator * creator)114 libspectrum_creator_competition_code( libspectrum_creator *creator )
115 {
116   return creator->competition_code;
117 }
118 
119 libspectrum_error
libspectrum_creator_set_custom(libspectrum_creator * creator,libspectrum_byte * data,size_t length)120 libspectrum_creator_set_custom( libspectrum_creator *creator,
121 				libspectrum_byte *data, size_t length )
122 {
123   creator->custom = data;
124   creator->custom_length = length;
125   return LIBSPECTRUM_ERROR_NONE;
126 }
127 
128 libspectrum_byte*
libspectrum_creator_custom(libspectrum_creator * creator)129 libspectrum_creator_custom( libspectrum_creator *creator )
130 {
131   return creator->custom;
132 }
133 
134 size_t
libspectrum_creator_custom_length(libspectrum_creator * creator)135 libspectrum_creator_custom_length( libspectrum_creator *creator )
136 {
137   return creator->custom_length;
138 }
139