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