/[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 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,const 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,const 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,const 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, const 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}
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}
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;
117 for (i = 0; i < strlen(value); i++) 114 for (i = 0; i < strlen(value); i++)
118 if ((res = psiconv_write_u8(buf,value[i]))) 115 if ((res = psiconv_write_u8(buf,value[i])))
119 return res; 116 return res;
120 return -PSICONV_E_OK; 117 return -PSICONV_E_OK;
121} 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.72  
changed lines
  Added in v.142

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