TempleOSTS_140317.ISO

This commit is contained in:
Terry A. Davis authored and minexew committed 2018-09-08 21:46:02 +02:00
1 parent 2d2a65d572
commit 7ef616a20e
1416 files changed
+223873 -53917

No files matched your search

+231
View File
@@ -0,0 +1,231 @@
#help_index "Doc"
I64 DocCharDist(CDoc *doc,I64 x,I64 y)
{
#assert FONT_WIDTH==FONT_HEIGHT
return (SqrI64(doc->x-x)+SqrI64(doc->y-y))*FONT_WIDTH*FONT_WIDTH;
}
U0 LockToPage(CDoc *doc)
{
I64 win_page_len;
CDocEntry *doc_e;
doc_e=doc->cur_entry;
if (doc_e->flags1 & DOCEF1_LOCK_TO_PAGE) {
doc->cur_top_line_num=doc_e->y-doc_e->page_line_num;
win_page_len=doc->win_task->win_height;
if (doc_e->page_line_num>=win_page_len)
doc->cur_top_line_num+=doc_e->last->settings.page_len-win_page_len;
}
}
public U0 DocCenter(CDoc *doc=NULL,I64 recalc=DOC_RECALC_ALL)
{
Bool unlock;
CTask *task;
if (!doc && !(doc=DocPut))
return;
unlock=DocLock(doc);
task=doc->win_task;
DocRecalc(doc,FALSE,recalc);
if (!(doc->flags&DOCF_BORDER_DOC))
doc->cur_top_line_num=doc->y-(task->win_height+1)>>1;
LockToPage(doc);
if (unlock)
DocUnlock(doc);
}
U0 DocDelToNum(CDoc *doc,I64 num)
{
CDocEntry *doc_e=doc->root.next,*doc_e2;
while (num-->0 && doc_e!=doc) {
doc_e2=doc_e->next;
if (!(doc_e->flags1 & (DOCEF1_HOLD|DOCEF1_FILTER_SKIP))) {
if (doc_e==doc->cur_entry) {
doc->cur_entry=doc_e2;
doc->cur_data_col=doc_e2->min_col;
}
DocEntryDel(doc,doc_e);
}
doc_e=doc_e2;
}
}
U0 DocDelToEntry(CDoc *doc,CDocEntry *clear_entry)
{
CDocEntry *doc_e=doc->root.next,*doc_e2;
while (doc_e!=doc) {
doc_e2=doc_e->next;
if (!(doc_e->flags1 & (DOCEF1_HOLD|DOCEF1_FILTER_SKIP))) {
if (doc_e==doc->cur_entry) {
doc->cur_entry=doc_e2;
doc->cur_data_col=doc_e2->min_col;
}
DocEntryDel(doc,doc_e);
}
if (doc_e==clear_entry)
break;
doc_e=doc_e2;
}
}
U0 DocBorderLstDraw(CDoc *doc)
{
CTask *win_task=doc->win_task;
I64 i,y=-1,attr=win_task->border_attr<<8;
CDoc *templ=doc;
U8 *ptr;
CD3I64 saved_scroll;
Bool old_preempt=Preempt(OFF);
while (templ && templ->doc_signature==DOC_SIGNATURE_VAL) {
y+=StrLen(templ->desc)+1;
templ=templ->parent_doc;
}
templ=doc;
if (y>win_task->win_height)
y=win_task->win_height;
WinScrollNull(win_task,&saved_scroll);
while (templ && templ->doc_signature==DOC_SIGNATURE_VAL) {
ptr=templ->desc;
i=StrLen(templ->desc);
ptr+=i;
attr=win_task->border_attr<<8;
while (i-- && y>0)
PlotBorderU8(win_task,attr+*--ptr,-1,--y);
y--;
templ=templ->parent_doc;
}
WinScrollRestore(win_task,&saved_scroll);
Preempt(old_preempt);
}
public U0 DocBottom(CDoc *doc=NULL)
{
Bool unlock;
if (!doc && !(doc=DocPut))
return;
unlock=DocLock(doc);
doc->cur_entry=doc;
doc->cur_data_col=0;
DocRecalc(doc);
if (unlock)
DocUnlock(doc);
}
public U0 DocTop(CDoc *doc=NULL)
{
Bool unlock;
if (!doc && !(doc=DocPut))
return;
unlock=DocLock(doc);
doc->cur_entry=doc->root.next;
doc->cur_data_col=0;
DocRecalc(doc);
if (unlock)
DocUnlock(doc);
}
public U0 DocClear(CDoc *doc=NULL)
{
Bool unlock;
if (!doc && !(doc=DocPut))
return;
unlock=DocLock(doc);
DocBottom(doc);
DocPrint(doc,"$$CL$$");
DocRecalc(doc);
if (unlock)
DocUnlock(doc);
}
public Bool DocCursor(Bool show=OFF,CDoc *doc=NULL)
{
if (!doc && !(doc=DocPut))
return FALSE;
return !LBEqu(&doc->flags,DOCf_HIDE_CURSOR,!show);
}
public Bool DocScroll(Bool val=OFF,CDoc *doc=NULL)
{
if (!doc && !(doc=DocPut))
return FALSE;
return !LBEqu(&doc->flags,DOCf_NO_SCROLL_BARS,!val);
}
public U0 DocCollapse(Bool collapse=TRUE,CDoc *doc=NULL)
{
CDocEntry *doc_e;
Bool unlock;
if (!doc && !(doc=DocPut))
return;
unlock=DocLock(doc);
doc_e=doc->root.next;
while (doc_e!=doc) {
if (doc_e->flags1&DOCEF1_TREE)
BEqu(&doc_e->flags1,DOCEf1_CHECKED_COLLAPSED,collapse);
doc_e=doc_e->next;
}
DocRecalc(doc);
if (unlock)
DocUnlock(doc);
}
#help_index "Doc/Output"
public U0 DocPrintWhole(CDoc *doc,U8 *fmt,...)
{ //This is necessary when hidden text might screw-up
//inserts. It does multiple whole doc cmds all-at-once.
U8 *buf;
Bool unlock;
I64 old_flags;
if (!doc && !(doc=DocPut))
return;
buf=SPrintJoin(NULL,fmt,argc,argv);
unlock=DocLock(doc);
old_flags=doc->flags;
doc->flags|=DOCF_NO_CURSOR;
DocPrint(doc,"%s",buf);
DocRecalc(doc,FALSE,DOC_RECALC_PARTIAL);
doc->flags=old_flags;
if (unlock)
DocUnlock(doc);
Free(buf);
}
#help_index "Doc/Task"
U0 DocUpdateTaskDocs(CTask *task)
{
CPrt *p;
CDoc *doc;
CD3I64 saved_scroll;
Bool old_preempt=Preempt(OFF);
I64 border_attr;
if (task->border_src==BDS_CUR_PRT && task->cur_prt) {
border_attr=task->cur_prt->text_attr;
if (border_attr&15!=border_attr>>4)
task->border_attr=border_attr;
}
if (task->title_src==TTS_TASK_NAME)
StrCpy(task->task_title,task->task_name);
if ((doc=DocDisplay(task)) && !(doc->flags&DOCF_DONT_SHOW)) {
if (task->border_src==BDS_ED_FILENAME_PRT)
try {
if (p=Drv2Prt(*doc->filename.name)) {
border_attr=p->text_attr;
if (border_attr&15!=border_attr>>4)
task->border_attr=border_attr;
}
} catch
Fs->catch_except=TRUE;
if (task->title_src==TTS_ED_FILENAME)
MemCpy(task->task_title,doc->filename.name,TASK_TITLE_LEN);
Preempt(old_preempt);
DocRecalc(doc,TRUE,DOC_RECALC_TO_SCREEN);
Preempt(OFF);
}
if ((doc=DocBorder(task)) && !(doc->flags&DOCF_DONT_SHOW)) {
WinScrollNull(task,&saved_scroll);
DocRecalc(doc,FALSE,DOC_RECALC_TO_SCREEN);
WinScrollRestore(task,&saved_scroll);
}
Preempt(old_preempt);
}