… | |
… | |
36 | const psiconv_string_t value,int kind); |
36 | const psiconv_string_t value,int kind); |
37 | |
37 | |
38 | int psiconv_write_u8(const psiconv_config config,psiconv_buffer buf, |
38 | int psiconv_write_u8(const psiconv_config config,psiconv_buffer buf, |
39 | int lev,const psiconv_u8 value) |
39 | int lev,const psiconv_u8 value) |
40 | { |
40 | { |
41 | psiconv_progress(config,lev,0,"Writing u8"); |
|
|
42 | return psiconv_buffer_add(buf,value); |
41 | return psiconv_buffer_add(buf,value); |
43 | } |
42 | } |
44 | |
43 | |
45 | int psiconv_write_u16(const psiconv_config config,psiconv_buffer buf, |
44 | int psiconv_write_u16(const psiconv_config config,psiconv_buffer buf, |
46 | int lev,const psiconv_u16 value) |
45 | int lev,const psiconv_u16 value) |
47 | { |
46 | { |
48 | int res; |
47 | int res; |
49 | psiconv_progress(config,lev,0,"Writing u16"); |
|
|
50 | if ((res = psiconv_buffer_add(buf,value & 0xff))) |
48 | if ((res = psiconv_buffer_add(buf,value & 0xff))) |
51 | return res; |
49 | return res; |
52 | return psiconv_buffer_add(buf,(value & 0xff00) >> 8); |
50 | return psiconv_buffer_add(buf,(value & 0xff00) >> 8); |
53 | } |
51 | } |
54 | |
52 | |
55 | int psiconv_write_u32(const psiconv_config config,psiconv_buffer buf, |
53 | int psiconv_write_u32(const psiconv_config config,psiconv_buffer buf, |
56 | int lev,const psiconv_u32 value) |
54 | int lev,const psiconv_u32 value) |
57 | { |
55 | { |
58 | int res; |
56 | int res; |
59 | psiconv_progress(config,lev,0,"Writing u32"); |
|
|
60 | if ((res = psiconv_buffer_add(buf,value & 0xff))) |
57 | if ((res = psiconv_buffer_add(buf,value & 0xff))) |
61 | return res; |
58 | return res; |
62 | if ((res = psiconv_buffer_add(buf,(value & 0xff00) >> 8))) |
59 | if ((res = psiconv_buffer_add(buf,(value & 0xff00) >> 8))) |
63 | return res; |
60 | return res; |
64 | if ((res = psiconv_buffer_add(buf,(value & 0xff0000) >> 16))) |
61 | if ((res = psiconv_buffer_add(buf,(value & 0xff0000) >> 16))) |
… | |
… | |
101 | } |
98 | } |
102 | |
99 | |
103 | int psiconv_write_length(const psiconv_config config,psiconv_buffer buf, |
100 | int psiconv_write_length(const psiconv_config config,psiconv_buffer buf, |
104 | int lev,const psiconv_length_t value) |
101 | int lev,const psiconv_length_t value) |
105 | { |
102 | { |
106 | psiconv_progress(config,lev,0,"Writing length"); |
|
|
107 | return psiconv_write_u32(config,buf,lev+1,value * (1440.0/2.54) + 0.5); |
103 | return psiconv_write_u32(config,buf,lev+1,value * (1440.0/2.54) + 0.5); |
108 | } |
104 | } |
109 | |
105 | |
110 | int psiconv_write_size(const psiconv_config config,psiconv_buffer buf, |
106 | int psiconv_write_size(const psiconv_config config,psiconv_buffer buf, |
111 | int lev, psiconv_size_t value) |
107 | int lev, psiconv_size_t value) |
112 | { |
108 | { |
113 | psiconv_progress(config,lev,0,"Writing size"); |
|
|
114 | return psiconv_write_u32(config,buf,lev+1,value * 20.0 + 0.5); |
109 | return psiconv_write_u32(config,buf,lev+1,value * 20.0 + 0.5); |
115 | } |
110 | } |
116 | |
111 | |
117 | int psiconv_write_bool(const psiconv_config config,psiconv_buffer buf, |
112 | int psiconv_write_bool(const psiconv_config config,psiconv_buffer buf, |
118 | int lev,const psiconv_bool_t value) |
113 | int lev,const psiconv_bool_t value) |
119 | { |
114 | { |
120 | psiconv_progress(config,lev,0,"Writing bool"); |
|
|
121 | if ((value != psiconv_bool_true) && (value != psiconv_bool_false)) |
115 | if ((value != psiconv_bool_true) && (value != psiconv_bool_false)) |
122 | psiconv_warn(config,0,psiconv_buffer_length(buf), |
116 | psiconv_warn(config,0,psiconv_buffer_length(buf), |
123 | "Boolean has non-enum value (found %d)",value); |
117 | "Boolean has non-enum value (found %d)",value); |
124 | return psiconv_write_u8(config,buf,lev+1,value == psiconv_bool_false?0:1); |
118 | return psiconv_write_u8(config,buf,lev+1,value == psiconv_bool_false?0:1); |
125 | } |
119 | } |
126 | |
120 | |
127 | int psiconv_write_string(const psiconv_config config,psiconv_buffer buf, |
121 | int psiconv_write_string(const psiconv_config config,psiconv_buffer buf, |
128 | int lev, const psiconv_string_t value) |
122 | int lev, const psiconv_string_t value) |
129 | { |
123 | { |
|
|
124 | int res; |
130 | psiconv_progress(config,lev,0,"Writing string"); |
125 | psiconv_progress(config,lev,0,"Writing string"); |
131 | return psiconv_write_string_aux(config,buf,lev+1,value,-1); |
126 | res = psiconv_write_string_aux(config,buf,lev+1,value,-1); |
|
|
127 | if (res) |
|
|
128 | psiconv_error(config,lev,0,"Writing of string failed"); |
|
|
129 | else |
|
|
130 | psiconv_progress(config,lev,0,"End of string"); |
|
|
131 | return res; |
132 | } |
132 | } |
133 | |
133 | |
134 | int psiconv_write_short_string(const psiconv_config config,psiconv_buffer buf, |
134 | int psiconv_write_short_string(const psiconv_config config,psiconv_buffer buf, |
135 | int lev,const psiconv_string_t value) |
135 | int lev,const psiconv_string_t value) |
136 | { |
136 | { |
|
|
137 | int res; |
137 | psiconv_progress(config,lev,0,"Writing short string"); |
138 | psiconv_progress(config,lev,0,"Writing short string"); |
138 | return psiconv_write_string_aux(config,buf,lev+1,value,-2); |
139 | res = psiconv_write_string_aux(config,buf,lev+1,value,-2); |
|
|
140 | if (res) |
|
|
141 | psiconv_error(config,lev,0,"Writing of short string failed"); |
|
|
142 | else |
|
|
143 | psiconv_progress(config,lev,0,"End of short string"); |
|
|
144 | return res; |
139 | } |
145 | } |
140 | |
146 | |
141 | int psiconv_write_charlist(const psiconv_config config,psiconv_buffer buf, |
147 | int psiconv_write_charlist(const psiconv_config config,psiconv_buffer buf, |
142 | int lev,const psiconv_string_t value) |
148 | int lev,const psiconv_string_t value) |
143 | { |
149 | { |
|
|
150 | int res; |
144 | psiconv_progress(config,lev,0,"Writing short string"); |
151 | psiconv_progress(config,lev,0,"Writing charlist"); |
145 | return psiconv_write_string_aux(config,buf,lev+1,value,0); |
152 | res = psiconv_write_string_aux(config,buf,lev+1,value,0); |
|
|
153 | if (res) |
|
|
154 | psiconv_error(config,lev,0,"Writing of charlist failed"); |
|
|
155 | else |
|
|
156 | psiconv_progress(config,lev,0,"End of charlist"); |
|
|
157 | return res; |
146 | } |
158 | } |
147 | |
159 | |
148 | |
160 | |
149 | int psiconv_write_string_aux(const psiconv_config config,psiconv_buffer buf, |
161 | int psiconv_write_string_aux(const psiconv_config config,psiconv_buffer buf, |
150 | int lev, const psiconv_string_t value,int kind) |
162 | int lev, const psiconv_string_t value,int kind) |
151 | { |
163 | { |
152 | int res,i,len; |
164 | int res,i,len; |
153 | |
165 | |
154 | psiconv_progress(config,lev,0,"Writing string (auxiliary)"); |
|
|
155 | len = psiconv_unicode_strlen(value); |
166 | len = psiconv_unicode_strlen(value); |
156 | if (!value) { |
167 | if (!value) { |
157 | psiconv_error(config,0,psiconv_buffer_length(buf), |
168 | psiconv_error(config,lev,0, "NULL string"); |
158 | "NULL string"); |
|
|
159 | return -PSICONV_E_GENERATE; |
169 | return -PSICONV_E_GENERATE; |
160 | } |
170 | } |
161 | if (kind == -1) |
171 | if (kind == -1) |
162 | res = psiconv_write_S(config,buf,lev+1,len); |
172 | res = psiconv_write_S(config,buf,lev+1,len); |
163 | else if (kind == -2) |
173 | else if (kind == -2) |
… | |
… | |
174 | } |
184 | } |
175 | |
185 | |
176 | int psiconv_write_offset(const psiconv_config config,psiconv_buffer buf, |
186 | int psiconv_write_offset(const psiconv_config config,psiconv_buffer buf, |
177 | int lev,psiconv_u32 id) |
187 | int lev,psiconv_u32 id) |
178 | { |
188 | { |
179 | psiconv_progress(config,lev,0,"Writing offset"); |
|
|
180 | return psiconv_buffer_add_reference(buf,id); |
189 | return psiconv_buffer_add_reference(buf,id); |
181 | } |
190 | } |