TempleOSCDV4.10.ISO

This commit is contained in:
Terry A. Davis authored and minexew committed 2018-09-08 21:47:44 +02:00
1 parent c5954d3371
commit 9206246147
181 files changed
+4468 -4313

No files matched your search

+27 -24
View File
@@ -20,7 +20,7 @@ public U0 DocLoad(CDoc *doc,U8 *src2,I64 size)
MemCpy(tempb->data,src,tempb->size);
src+=tempb->size;
}
QueIns(tempb,doc->bin_root.last);
QueIns(tempb,doc->bin_head.last);
if (tempb->num>=doc->cur_bin_num)
doc->cur_bin_num=tempb->num+1;
}
@@ -37,16 +37,19 @@ public CDoc *DocRead(U8 *name=NULL,I64 flags=0)
CDoc *doc=DocNew;
U8 *src,*name2;
I64 size=0;
CDirContext *dirc;
if (!name) name=blkdev.temp_filename;
doc->flags|=flags;
name2=FileNameAbs(name);
StrCpy(doc->filename.name,name2);
src=FileRead(name2,&size,&doc->file_attr);
Free(name2);
if (src) {
DocLoad(doc,src,size);
if (src=FileRead(name2,&size,&doc->file_attr)) {
if (dirc=DirContextNew(name2)) {
DocLoad(doc,src,size);
DirContextDel(dirc);
}
Free(src);
}
Free(name2);
return doc;
}
@@ -64,10 +67,10 @@ public U8 *DocSave(CDoc *doc,I64 *_size=NULL)
DocRecalc(doc);
else {
DocRecalc(doc,RECALCF_ADD_CURSOR);
if (doc->root.next->type_u8==DOCT_CURSOR)
DocEntryDel(doc,doc->root.next); //If no cursor, $LK,"DocLoad",A="MN:DocLoad"$() puts at top.
if (doc->head.next->type_u8==DOCT_CURSOR)
DocEntryDel(doc,doc->head.next); //If no cursor, $LK,"DocLoad",A="MN:DocLoad"$() puts at top.
}
for (doc_e=doc->root.next;doc_e!=doc;doc_e=doc_e->next) {
for (doc_e=doc->head.next;doc_e!=doc;doc_e=doc_e->next) {
if (!Bt(doldoc.type_flags_data,doc_e->type_u8)) {
switch (doc_e->type_u8) {
case DOCT_TAB:
@@ -100,12 +103,12 @@ public U8 *DocSave(CDoc *doc,I64 *_size=NULL)
}
}
}
for (b=doc->bin_root.next;b!=&doc->bin_root;b=b->next)
for (b=doc->bin_head.next;b!=&doc->bin_head;b=b->next)
if (b->use_cnt>b->temp_use_cnt)
cnt+=offset(CDocBin.end)-offset(CDocBin.start)+b->size;
res=MAlloc(cnt);
dst=res;
doc_e=doc->root.next;
doc_e=doc->head.next;
while (doc_e!=doc) {
doc_e1=doc_e->next;
if (!Bt(doldoc.type_flags_data,doc_e->type_u8))
@@ -151,8 +154,8 @@ public U8 *DocSave(CDoc *doc,I64 *_size=NULL)
doc_e=doc_e1;
}
*dst++=0;
b=doc->bin_root.next;
if (b!=&doc->bin_root) {
b=doc->bin_head.next;
if (b!=&doc->bin_head) {
do {
if (b->use_cnt>b->temp_use_cnt) {
MemCpy(dst,&b->start,offset(CDocBin.end)-offset(CDocBin.start));
@@ -161,7 +164,7 @@ public U8 *DocSave(CDoc *doc,I64 *_size=NULL)
dst+=b->size;
}
b=b->next;
} while (b!=&doc->bin_root);
} while (b!=&doc->bin_head);
} else
cnt--; //No terminator
if (_size) *_size=cnt;
@@ -189,7 +192,7 @@ public U0 DocInsDoc(CDoc *doc=NULL,CDoc *doc2)
//TODO: $LK,"DocRst",A="MN:DocRst"$
U8 *dst;
Bool unlock_doc,unlock_doc2=DocLock(doc2);
CDocEntry *doc_ne,*doc_e=doc2->root.next,*doc_ce;
CDocEntry *doc_ne,*doc_e=doc2->head.next,*doc_ce;
if (!doc) doc=DocPut;
unlock_doc=DocLock(doc),
DocRemSoftNewLines(doc,NULL);
@@ -227,7 +230,7 @@ public U0 StreamDoc(CDoc *doc)
{//Inject doc into compile stream. Use inside #exe{}.
//TODO: $LK,"DocRst",A="MN:DocRst"$
Bool unlock_doc=DocLock(doc);
CDocEntry *doc_e=doc->root.next;
CDocEntry *doc_e=doc->head.next;
while (doc_e!=doc) {
if (doc_e->type_u8==DOCT_TEXT)
StreamPrint("%s",doc_e->tag);
@@ -251,7 +254,7 @@ Bool DocCaptureUndo(CDoc *doc,Bool force=FALSE)
unlock=DocLock(doc);
time_stamp=GetTSC;
if (doc->flags&DOCF_UNDO_DIRTY &&
time_stamp>doc->undo_root.last->time_stamp+cnts.time_stamp_freq<<4 ||
time_stamp>doc->undo_head.last->time_stamp+cnts.time_stamp_freq<<4 ||
force) {
u=CAlloc(sizeof(CDocUndo),doc->mem_task);
u->time_stamp=time_stamp;
@@ -259,7 +262,7 @@ Bool DocCaptureUndo(CDoc *doc,Bool force=FALSE)
doc->flags&=~DOCF_NO_CURSOR;
u->body=DocSave(doc,&u->size);
doc->flags=flags;
QueIns(u,doc->undo_root.last);
QueIns(u,doc->undo_head.last);
doc->flags&=~DOCF_UNDO_DIRTY;
doc->undo_cnt++;
u->doc_flags=doc->flags;
@@ -274,19 +277,19 @@ Bool DocCaptureUndo(CDoc *doc,Bool force=FALSE)
U0 DocUndoRestore(CDoc *doc)
{
Bool unlock=DocLock(doc);
CDocUndo *u=doc->undo_root.last,*u_next,*u_last;
if (u!=&doc->undo_root) {
CDocUndo *u=doc->undo_head.last,*u_next,*u_last;
if (u!=&doc->undo_head) {
QueRem(u);
u_next=doc->undo_root.next;
u_last=doc->undo_root.last;
QueInit(&doc->undo_root);
u_next=doc->undo_head.next;
u_last=doc->undo_head.last;
QueInit(&doc->undo_head);
DocRst(doc,TRUE);
doc->flags=u->doc_flags&~DOCF_NO_CURSOR;
DocLoad(doc,u->body,u->size);
doc->flags=u->doc_flags;
DocUndoDel(doc,u);
doc->undo_root.next=u_next;
doc->undo_root.last=u_last;
doc->undo_head.next=u_next;
doc->undo_head.last=u_last;
}
DocUndoCntSet(doc);
doc->flags&=~DOCF_UNDO_DIRTY;