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