/[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 142
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
26#ifdef DMALLOC
27#include <dmalloc.h>
28#endif
29
30
26int psiconv_write_u8(psiconv_buffer buf,psiconv_u8 value) 31int psiconv_write_u8(psiconv_buffer buf,const psiconv_u8 value)
27{ 32{
28 return psiconv_list_add(buf,&value); 33 return psiconv_buffer_add(buf,value);
29} 34}
30 35
31int psiconv_write_u16(psiconv_buffer buf,psiconv_u16 value) 36int psiconv_write_u16(psiconv_buffer buf,const psiconv_u16 value)
32{ 37{
33 int res; 38 int res;
34 psiconv_u8 temp; 39 if ((res = psiconv_buffer_add(buf,value & 0xff)))
35 temp = value & 0xff;
36 if ((res = psiconv_list_add(buf,&temp)))
37 return res; 40 return res;
38 temp = (value & 0xff0) >> 8; 41 return psiconv_buffer_add(buf,(value & 0xff00) >> 8);
39 return psiconv_list_add(buf,&temp);
40} 42}
41 43
42int psiconv_write_u32(psiconv_buffer buf,psiconv_u32 value) 44int psiconv_write_u32(psiconv_buffer buf,const psiconv_u32 value)
43{ 45{
44 int res; 46 int res;
45 psiconv_u8 temp; 47 if ((res = psiconv_buffer_add(buf,value & 0xff)))
46 temp = value & 0xff;
47 if ((res = psiconv_list_add(buf,&temp)))
48 return res; 48 return res;
49 temp = (value & 0xff00) >> 8; 49 if ((res = psiconv_buffer_add(buf,(value & 0xff00) >> 8)))
50 if ((res = psiconv_list_add(buf,&temp)))
51 return res; 50 return res;
52 temp = (value & 0xff0000) >> 16; 51 if ((res = psiconv_buffer_add(buf,(value & 0xff0000) >> 16)))
53 if ((res = psiconv_list_add(buf,&temp)))
54 return res; 52 return res;
55 temp = (value & 0xff000000) >>24; 53 return psiconv_buffer_add(buf,(value & 0xff000000) >> 24);
56 return psiconv_list_add(buf,&temp);
57} 54}
58 55
59int psiconv_write_S(psiconv_buffer buf, psiconv_u32 value) 56int psiconv_write_S(psiconv_buffer buf, const psiconv_u32 value)
60{ 57{
61 if (value < 0x40) 58 if (value < 0x40)
62 return psiconv_write_u8(buf,value * 4 + 2); 59 return psiconv_write_u8(buf,value * 4 + 2);
63 else if (value < 0x2000) 60 else if (value < 0x2000)
64 return psiconv_write_u16(buf,value * 8 + 3); 61 return psiconv_write_u16(buf,value * 8 + 3);
65 else { 62 else {
66 psiconv_warn(0,psiconv_list_length(buf), 63 psiconv_warn(0,psiconv_buffer_length(buf),
67 "Don't know how to write S value larger than 0x2000 " 64 "Don't know how to write S value larger than 0x2000 "
68 "(trying %x)",value); 65 "(trying %x)",value);
69 return -PSICONV_E_GENERATE; 66 return -PSICONV_E_GENERATE;
70 } 67 }
71} 68}
72 69
73int psiconv_write_X(psiconv_buffer buf, psiconv_u32 value) 70int psiconv_write_X(psiconv_buffer buf, const psiconv_u32 value)
74{ 71{
75 if (value < 0x80) 72 if (value < 0x80)
76 return psiconv_write_u8(buf,value * 2); 73 return psiconv_write_u8(buf,value * 2);
77 else if (value < 0x4000) 74 else if (value < 0x4000)
78 return psiconv_write_u16(buf,value * 4 + 1); 75 return psiconv_write_u16(buf,value * 4 + 1);
79 else if (value < 0x20000000) 76 else if (value < 0x20000000)
80 return psiconv_write_u16(buf,value * 8 + 3); 77 return psiconv_write_u16(buf,value * 8 + 3);
81 else { 78 else {
82 psiconv_warn(0,psiconv_list_length(buf), 79 psiconv_warn(0,psiconv_buffer_length(buf),
83 "Don't know how to write X value larger than 0x20000000 " 80 "Don't know how to write X value larger than 0x20000000 "
84 "(trying %x)",value); 81 "(trying %x)",value);
85 return -PSICONV_E_GENERATE; 82 return -PSICONV_E_GENERATE;
86 } 83 }
87} 84}
88 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;
112 return -PSICONV_E_OK; 117 return -PSICONV_E_OK;
113} 118}
119
120int psiconv_write_offset(psiconv_buffer buf, psiconv_u32 id)
121{
122 return psiconv_buffer_add_reference(buf,id);
123}

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

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