00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #define KATE_INTERNAL
00011 #include "kate_internal.h"
00012
00013 #ifdef HAVE_STDLIB_H
00014 #include <stdlib.h>
00015 #endif
00016 #include "kate/kate.h"
00017 #include "kate_decode_state.h"
00018
00027 int kate_high_decode_init(kate_state *k)
00028 {
00029 int ret;
00030 kate_info *ki;
00031 kate_comment *kc;
00032
00033 if (!k) return KATE_E_INVALID_PARAMETER;
00034
00035 k->kes=NULL;
00036 k->kds=kate_decode_state_create();
00037 if (!k->kds) return KATE_E_OUT_OF_MEMORY;
00038
00039 ki=(kate_info*)kate_malloc(sizeof(kate_info));
00040 if (!ki) {
00041 kate_decode_state_destroy(k->kds);
00042 return KATE_E_OUT_OF_MEMORY;
00043 }
00044 kc=(kate_comment*)kate_malloc(sizeof(kate_comment));
00045 if (!kc) {
00046 kate_free(ki);
00047 kate_decode_state_destroy(k->kds);
00048 return KATE_E_OUT_OF_MEMORY;
00049 }
00050
00051 ret=kate_info_init(ki);
00052 if (ret<0) {
00053 kate_free(ki);
00054 kate_free(kc);
00055 kate_decode_state_destroy(k->kds);
00056 return ret;
00057 }
00058
00059 ret=kate_comment_init(kc);
00060 if (ret<0) {
00061 kate_free(ki);
00062 kate_free(kc);
00063 kate_info_clear(ki);
00064 kate_decode_state_destroy(k->kds);
00065 return ret;
00066 }
00067
00068 k->kds->ki=ki;
00069 k->kds->kc=kc;
00070
00071 k->ki=k->kds->ki;
00072
00073 return 0;
00074 }
00075
00085 int kate_high_decode_packetin(kate_state *k,kate_packet *kp,kate_const kate_event **ev)
00086 {
00087 int ret;
00088
00089 if (!k || !kp) return KATE_E_INVALID_PARAMETER;
00090 if (!k->kds) return KATE_E_INIT;
00091 if (!k->kds->ki) return KATE_E_INIT;
00092 if (!k->kds->kc) return KATE_E_INIT;
00093
00094 if (ev) *ev=NULL;
00095 if (k->kds->ki->probe>=0) {
00096
00097 ret=kate_decode_headerin(k->kds->ki,k->kds->kc,kp);
00098 if (ret>0) {
00099 k->kds->ki->probe=-1;
00100 ret=0;
00101 }
00102 return ret;
00103 }
00104 else {
00105
00106 int eos=0;
00107 ret=kate_decode_packetin(k,kp);
00108 if (ret<0) return ret;
00109 if (ret>0) eos=1;
00110 ret=kate_decode_eventout(k,ev);
00111 if (ret<0) return ret;
00112 return eos;
00113 }
00114 }
00115
00123 int kate_high_decode_clear(kate_state *k)
00124 {
00125 kate_info *ki;
00126 kate_comment *kc;
00127
00128 if (!k) return KATE_E_INVALID_PARAMETER;
00129 if (!k->kds) return KATE_E_INIT;
00130
00131
00132 ki=k->kds->ki;
00133 kc=k->kds->kc;
00134
00135 kate_clear(k);
00136
00137 kate_free(kc);
00138 kate_free(ki);
00139
00140 return 0;
00141 }
00142
00149 const kate_comment *kate_high_decode_get_comments(kate_state *k)
00150 {
00151 if (!k) return NULL;
00152 if (!k->kds) return NULL;
00153
00154 return k->kds->kc;
00155 }
00156