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