Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 5962 → Rev 5965

/programs/cmm/eolite/include/left_panel.h
78,7 → 78,7
dword temp_file_count, tempbuf;
dword devbuf;
 
disk_list.init(4096);
disk_list.drop();
devbuf = malloc(10000);
ReadDir(19, devbuf, "/");
dev_num = EBX;
/programs/cmm/examples/collections.c
1,4 → 1,4
#define MEMSIZE 4096*10
#define MEMSIZE 4096*120
 
#include "../lib/io.h"
#include "../lib/collection.h"
6,12 → 6,11
void main()
{
collection s;
int i;
io.run("/sys/develop/board", "");
s.init(4096);
s.add("lorem");
s.add("ipsum");
s.add("1234566");
s.add("Hello");
s.add("World!");
debugln(s.get(0));
debugln(s.get(1));
debugln(s.get(2));
s.drop();
}
/programs/cmm/lib/collection.h
4,42 → 4,52
 
struct collection
{
int count;
dword element_offset[4096];
int realloc_size, count;
dword data_start;
dword data_cur_pos;
dword data_size;
dword string_data_start;
dword string_data_cur_pos;
void add();
dword element_offset[4090];
int add();
dword get();
void drop();
void init();
void increase_data_size();
 
};
 
void collection::init(dword size) {
if (data_size) drop();
data_size = data_size + size;
string_data_cur_pos = string_data_start = malloc(data_size);
count = 0;
void collection::increase_data_size() {
int filled_size;
if (realloc_size<4096) realloc_size = 4096;
if (!data_size) {
data_size = realloc_size;
data_start = malloc(realloc_size);
}
else {
data_size = data_size + realloc_size;
data_start = realloc(data_start, data_size);
}
}
 
void collection::add(dword in) {
strcpy(string_data_cur_pos, in);
element_offset[count] = string_data_cur_pos;
string_data_cur_pos += strlen(in) + 1;
int collection::add(dword in) {
if (count >= 4090) return 0;
if (data_cur_pos+strlen(in)+2 > data_size) {
increase_data_size();
add(in);
return;
}
strcpy(data_start+data_cur_pos, in);
element_offset[count] = data_cur_pos;
data_cur_pos += strlen(in) + 1;
count++;
return 1;
}
 
dword collection::get(dword pos) {
return element_offset[pos];
return data_start + element_offset[pos];
}
 
void collection::drop() {
if (string_data_start) free(string_data_start);
data_size =
string_data_start =
string_data_cur_pos =
count = 0;
if (data_start) free(data_start);
data_size = data_start = data_cur_pos = count = 0;
}
 
#endif