TempleOSCD_140715.ISO

This commit is contained in:
Terry A. Davis authored and minexew committed 2018-09-08 21:46:09 +02:00
1 parent 7ef616a20e
commit 64f679eeb9
1095 files changed
+24814 -221011

No files matched your search

+112
View File
@@ -0,0 +1,112 @@
#define SFT_GENERIC 1
public U8 **StrFileRead(U8 *name,I64 *_max_num=NULL,U8 **_colors=NULL,Bool no_nums=FALSE)
{
CDoc *doc=DocRead(name,DOCF_DBL_DOLLARS|DOCF_NO_CURSOR);
CDocEntry *doc_e=doc->root.next;
I64 i,max_num=0;
U8 *ptr,**result,*colors;
while (doc_e!=doc) {
if (doc_e->type_u8==DOCT_TEXT) {
if (no_nums)
i=++max_num;
else {
i=Str2I64(doc_e->tag,,&ptr);
if (i>max_num) max_num=i;
if (*ptr==',') ptr++;
ptr=StrNew(ptr);
Free(doc_e->tag);
doc_e->tag=ptr;
}
doc_e->user_data=i;
}
doc_e=doc_e->next;
}
result=CAlloc(sizeof(U8 *)*(max_num+1));
colors=CAlloc(sizeof(U8)*(max_num+1));
doc_e=doc->root.next;
while (doc_e!=doc) {
if (doc_e->type_u8==DOCT_TEXT && 0<=doc_e->user_data<=max_num) {
result[doc_e->user_data]=doc_e->tag;
doc_e->tag=NULL;
colors[doc_e->user_data]=doc_e->type.u8[1]&15;
}
doc_e=doc_e->next;
}
DocDel(doc);
if (_max_num) *_max_num=max_num;
if (_colors)
*_colors=colors;
else
Free(colors);
return result;
}
public U0 StrFileArrDel(U8 **a,I64 max_num)
{
I64 i;
for (i=0;i<=max_num;i++)
Free(a[i]);
Free(a);
}
public I64 StrFileAdd(U8 *st,CHashTable *table,I64 color=COLOR_INVALID)
{
CHashGeneric *temph;
if (!st) return 0;
if (!(temph=HashFind(st,table,SFT_GENERIC))) {
temph=CAlloc(sizeof(CHashGeneric));
temph->type=SFT_GENERIC;
temph->str=StrNew(st);
if (table->last_added==table)
temph->user_data0=1;
else
temph->user_data0=table->last_added(CHashGeneric *)->user_data0+1;
HashAdd(temph,table);
}
if (color!=COLOR_INVALID)
temph->user_data1=color;
return temph->user_data0;
}
public U0 StrFileWrite(U8 *name,CHashTable *table,Bool no_nums=FALSE)
{
I64 color=BLACK;
CDoc *doc=DocNew(name);
CHashGeneric *temph;
if (table) {
temph=table->next_added;
while (temph!=table) {
if (temph->user_data1&15!=color) {
DocPrint(doc,"$$FG,%d$$",temph->user_data1&15);
color=temph->user_data1&15;
}
if (no_nums)
DocPrint(doc,"%s\n",temph->str);
else
DocPrint(doc,"%d,%s\n",temph->user_data0,temph->str);
temph=temph->next_added;
}
}
doc->flags|=DOCF_NO_CURSOR;
DocWrite(doc);
DocDel(doc);
}
public U0 StrFileDel(CHashTable *table)
{
CHashGeneric *temph,*temph1;
if (!table) return;
temph=table->next_added;
while (temph!=table) {
temph1=temph->next_added;
Free(temph->str);
Free(temph);
temph=temph1;
}
Free(table->body);
Free(table);
}