void gator_annotate_marker_color_str(int color, const char *str)
{
	int str_size = (strlen(str) + 4) & 0xffff;
	long long header = ESCAPE_CODE | (MARKER_ANNOTATION << 8) | (str_size << 16) | ((long long)color << 32);
	kannotate_write((char *)&header, sizeof(header));
	kannotate_write(str, str_size - 4);
}
void gator_annotate_channel(int channel, const char *str)
{
	int str_size = strlen(str) & 0xffff;
	long long header = ESCAPE_CODE | (STRING_ANNOTATION << 8) | (channel << 16) | ((long long)str_size << 48);
	kannotate_write((char *)&header, sizeof(header));
	kannotate_write(str, str_size);
}
void gator_annotate_marker_str(const char *str)
{
	int str_size = strlen(str) & 0xffff;
	int header = ESCAPE_CODE | (MARKER_ANNOTATION << 8) | (str_size << 16);
	kannotate_write((char *)&header, sizeof(header));
	kannotate_write(str, str_size);
}
// Image annotation with optional string
void gator_annotate_visual(char* data, unsigned int length, char* string)
{
	long long visual_annotation = 0x011c | (strlen(string) << 16) | ((long long)length << 32);
	kannotate_write((char*)&visual_annotation, 8);
	kannotate_write(string, strlen(string));
	kannotate_write(data, length);
}
void gator_annotate_name_group(int group, const char* str)
{
	int str_size = strlen(str) & 0xffff;
	long long header = ESCAPE_CODE | (NAME_GROUP_ANNOTATION << 8) | (group << 16) | ((long long)str_size << 48);
	kannotate_write((char *)&header, sizeof(header));
	kannotate_write(str, str_size);
}
void gator_annotate_visual(const char *data, unsigned int length, const char *str)
{
	int str_size = strlen(str) & 0xffff;
	int visual_annotation = ESCAPE_CODE | (VISUAL_ANNOTATION << 8) | (str_size << 16);
	kannotate_write((char *)&visual_annotation, sizeof(visual_annotation));
	kannotate_write(str, str_size);
	kannotate_write((char *)&length, sizeof(length));
	kannotate_write(data, length);
}
void gator_annotate_channel_color(int channel, int color, const char *str)
{
	int str_size = (strlen(str) + 4) & 0xffff;
	char header[12];
	header[0] = ESCAPE_CODE;
	header[1] = STRING_ANNOTATION;
	*(u32 *)(&header[2]) = channel;
	*(u16 *)(&header[6]) = str_size;
	*(u32 *)(&header[8]) = color;
	kannotate_write((char *)&header, sizeof(header));
	kannotate_write(str, str_size - 4);
}
void gator_annotate_name_channel(int channel, int group, const char* str)
{
	int str_size = strlen(str) & 0xffff;
	char header[12];
	header[0] = ESCAPE_CODE;
	header[1] = NAME_CHANNEL_ANNOTATION;
	*(u32 *)(&header[2]) = channel;
	*(u32 *)(&header[6]) = group;
	*(u16 *)(&header[10]) = str_size;
	kannotate_write((char *)&header, sizeof(header));
	kannotate_write(str, str_size);
}
// Marker annotationw ith a string and color
void gator_annotate_marker_color_str(int color, char* string)
{
	long long marker_annotation = 0x021c | ((long long)color << 16);
	kannotate_write((char*)&marker_annotation, 6);
	kannotate_write(string, strlen(string) + 1);
}
// Marker annotation with a string
void gator_annotate_marker_str(char* string)
{
	int marker_annotation = 0x021c;
	kannotate_write((char*)&marker_annotation, 2);
	kannotate_write(string, strlen(string) + 1);
}
// Marker annotation with a color
void gator_annotate_marker_color(int color)
{
	long long marker_annotation = (0x021c | ((long long)color << 16)) & 0x0000ffffffffffffLL;
	kannotate_write((char*)&marker_annotation, 7);
}
void gator_annotate_marker(void)
{
	int header = ESCAPE_CODE | (MARKER_ANNOTATION << 8);
	kannotate_write((char *)&header, sizeof(header));
}
// Marker annotation
void gator_annotate_marker(void)
{
	int marker_annotation = 0x00021c;
	kannotate_write((char*)&marker_annotation, 3);
}
// Terminate an annotation
void gator_annotate_end(void)
{
	char nul = 0;
	kannotate_write(&nul, sizeof(nul));
}
// String annotation with color
void gator_annotate_color(int color, char* string)
{
	kannotate_write((char*)&color, sizeof(color));
	kannotate_write(string, strlen(string) + 1);
}
// String annotation
void gator_annotate(char* string)
{
	printk(KERN_ERR "module: %s\n", string);
	kannotate_write(string, strlen(string) + 1);
}
void gator_annotate_marker_color(int color)
{
	long long header = (ESCAPE_CODE | (MARKER_ANNOTATION << 8) | 0x00040000 | ((long long)color << 32));
	kannotate_write((char *)&header, sizeof(header));
}
void gator_annotate_channel_end(int channel)
{
	long long header = ESCAPE_CODE | (STRING_ANNOTATION << 8) | (channel << 16);
	kannotate_write((char *)&header, sizeof(header));
}