/[public]/psiconv/trunk/lib/psiconv/generate_simple.c
ViewVC logotype

Diff of /psiconv/trunk/lib/psiconv/generate_simple.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 71 Revision 79
21#include "compat.h" 21#include "compat.h"
22 22
23#include "generate_routines.h" 23#include "generate_routines.h"
24#include "error.h" 24#include "error.h"
25 25
26int psiconv_write_u8(psiconv_buffer buf,psiconv_u8 value) 26int psiconv_write_u8(psiconv_buffer buf,const psiconv_u8 value)
27{ 27{
28 return psiconv_list_add(buf,&value); 28 return psiconv_buffer_add(buf,value);
29} 29}
30 30
31int psiconv_write_u16(psiconv_buffer buf,psiconv_u16 value) 31int psiconv_write_u16(psiconv_buffer buf,const psiconv_u16 value)
32{ 32{
33 int res; 33 int res;
34 psiconv_u8 temp; 34 if ((res = psiconv_buffer_add(buf,value & 0xff)))
35 temp = value & 0xff;
36 if ((res = psiconv_list_add(buf,&temp)))
37 return res; 35 return res;
38 temp = (value & 0xff0) >> 8; 36 return psiconv_buffer_add(buf,(value & 0xff00) >> 8);
39 return psiconv_list_add(buf,&temp);
40} 37}
41 38
42int psiconv_write_u32(psiconv_buffer buf,psiconv_u32 value) 39int psiconv_write_u32(psiconv_buffer buf,const psiconv_u32 value)
43{ 40{
44 int res; 41 int res;
45 psiconv_u8 temp; 42 if ((res = psiconv_buffer_add(buf,value & 0xff)))
46 temp = value & 0xff;
47 if ((res = psiconv_list_add(buf,&temp)))
48 return res; 43 return res;
49 temp = (value & 0xff00) >> 8; 44 if ((res = psiconv_buffer_add(buf,(value & 0xff00) >> 8)))
50 if ((res = psiconv_list_add(buf,&temp)))
51 return res; 45 return res;
52 temp = (value & 0xff0000) >> 16; 46 if ((res = psiconv_buffer_add(buf,(value & 0xff0000) >> 16)))
53 if ((res = psiconv_list_add(buf,&temp)))
54 return res; 47 return res;
55 temp = (value & 0xff000000) >>24; 48 return psiconv_buffer_add(buf,(value & 0xff000000) >> 24);
56 return psiconv_list_add(buf,&temp);
57} 49}
58 50
59int psiconv_write_S(psiconv_buffer buf, psiconv_u32 value) 51int psiconv_write_S(psiconv_buffer buf, const psiconv_u32 value)
60{ 52{
61 if (value < 0x40) 53 if (value < 0x40)
62 return psiconv_write_u8(buf,value * 4 + 2); 54 return psiconv_write_u8(buf,value * 4 + 2);
63 else if (value < 0x2000) 55 else if (value < 0x2000)
64 return psiconv_write_u16(buf,value * 8 + 3); 56 return psiconv_write_u16(buf,value * 8 + 3);
65 else { 57 else {
66 psiconv_warn(0,psiconv_list_length(buf), 58 psiconv_warn(0,psiconv_buffer_length(buf),
67 "Don't know how to write S value larger than 0x2000 " 59 "Don't know how to write S value larger than 0x2000 "
68 "(trying %x)",value); 60 "(trying %x)",value);
69 return -PSICONV_E_GENERATE; 61 return -PSICONV_E_GENERATE;
70 } 62 }
71} 63}
72 64
73int psiconv_write_X(psiconv_buffer buf, psiconv_u32 value) 65int psiconv_write_X(psiconv_buffer buf, const psiconv_u32 value)
74{ 66{
75 if (value < 0x80) 67 if (value < 0x80)
76 return psiconv_write_u8(buf,value * 2); 68 return psiconv_write_u8(buf,value * 2);
77 else if (value < 0x4000) 69 else if (value < 0x4000)
78 return psiconv_write_u16(buf,value * 4 + 1); 70 return psiconv_write_u16(buf,value * 4 + 1);
79 else if (value < 0x20000000) 71 else if (value < 0x20000000)
80 return psiconv_write_u16(buf,value * 8 + 3); 72 return psiconv_write_u16(buf,value * 8 + 3);
81 else { 73 else {
82 psiconv_warn(0,psiconv_list_length(buf), 74 psiconv_warn(0,psiconv_buffer_length(buf),
83 "Don't know how to write X value larger than 0x20000000 " 75 "Don't know how to write X value larger than 0x20000000 "
84 "(trying %x)",value); 76 "(trying %x)",value);
85 return -PSICONV_E_GENERATE; 77 return -PSICONV_E_GENERATE;
86 } 78 }
87} 79}
88 80
81int psiconv_write_offset(psiconv_buffer buf, const psiconv_u32 value)
82{
83 return psiconv_write_u32(buf,value + psiconv_buffer_base_offset(buf));
84}
85
89int psiconv_write_length(psiconv_buffer buf, psiconv_length_t value) 86int psiconv_write_length(psiconv_buffer buf, const psiconv_length_t value)
90{ 87{
91 return psiconv_write_u32(buf,value * (1440.0/2.54) + 0.5); 88 return psiconv_write_u32(buf,value * (1440.0/2.54) + 0.5);
92} 89}
93 90
94int psiconv_write_size(psiconv_buffer buf, psiconv_size_t value) 91int psiconv_write_size(psiconv_buffer buf, psiconv_size_t value)
95{ 92{
96 return psiconv_write_u32(buf,value * 20.0 + 0.5); 93 return psiconv_write_u32(buf,value * 20.0 + 0.5);
97} 94}
98 95
99int psiconv_write_bool(psiconv_buffer buf, psiconv_bool_t value) 96int psiconv_write_bool(psiconv_buffer buf, const psiconv_bool_t value)
100{ 97{
98 if ((value != psiconv_bool_true) && (value != psiconv_bool_false))
99 psiconv_warn(0,psiconv_buffer_length(buf),
100 "Boolean has non-enum value (found %d)",value);
101 return psiconv_write_u8(buf,value == psiconv_bool_true?1:0); 101 return psiconv_write_u8(buf,value == psiconv_bool_false?0:1);
102} 102}
103 103
104int psiconv_write_string(psiconv_buffer buf, psiconv_string_t value) 104int psiconv_write_string(psiconv_buffer buf, const psiconv_string_t value)
105{ 105{
106 int res,i; 106 int res,i;
107 if (!value) {
108 psiconv_warn(0,psiconv_buffer_length(buf),
109 "NULL string");
110 return -PSICONV_E_GENERATE;
111 }
107 if ((res = psiconv_write_S(buf,strlen(value)))) 112 if ((res = psiconv_write_S(buf,strlen(value))))
108 return res; 113 return res;
109 for (i = 0; i < strlen(value); i++) 114 for (i = 0; i < strlen(value); i++)
110 if ((res = psiconv_write_u8(buf,value[i]))) 115 if ((res = psiconv_write_u8(buf,value[i])))
111 return res; 116 return res;

Legend:
Removed from v.71  
changed lines
  Added in v.79

frodo@frodo.looijaard.name
ViewVC Help
Powered by ViewVC 1.1.26