/[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 72 Revision 79
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,const 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,const 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,const 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, const 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}
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 }
79}
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));
87} 84}
88 85
89int psiconv_write_length(psiconv_buffer buf, const 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);
97} 94}
98 95
99int psiconv_write_bool(psiconv_buffer buf, const psiconv_bool_t value) 96int psiconv_write_bool(psiconv_buffer buf, const psiconv_bool_t value)
100{ 97{
101 if ((value != psiconv_bool_true) && (value != psiconv_bool_false)) 98 if ((value != psiconv_bool_true) && (value != psiconv_bool_false))
102 psiconv_warn(0,psiconv_list_length(buf), 99 psiconv_warn(0,psiconv_buffer_length(buf),
103 "Boolean has non-enum value (found %d)",value); 100 "Boolean has non-enum value (found %d)",value);
104 return psiconv_write_u8(buf,value == psiconv_bool_false?0:1); 101 return psiconv_write_u8(buf,value == psiconv_bool_false?0:1);
105} 102}
106 103
107int psiconv_write_string(psiconv_buffer buf, const psiconv_string_t value) 104int psiconv_write_string(psiconv_buffer buf, const psiconv_string_t value)
108{ 105{
109 int res,i; 106 int res,i;
110 if (!value) { 107 if (!value) {
111 psiconv_warn(0,psiconv_list_length(buf), 108 psiconv_warn(0,psiconv_buffer_length(buf),
112 "NULL string"); 109 "NULL string");
113 return -PSICONV_E_GENERATE; 110 return -PSICONV_E_GENERATE;
114 } 111 }
115 if ((res = psiconv_write_S(buf,strlen(value)))) 112 if ((res = psiconv_write_S(buf,strlen(value))))
116 return res; 113 return res;

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

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