hschumann2/TempleOS-Source-Code
0847
1 2#help_index "DolDoc"3 4I64 DocWordWrapDel(CDoc *doc,CDocEntry *doc_e,5 Bool full_refresh,Bool same_win,I64 left_margin,I64 right_margin,6 CDocEntry **_best_doc_e,I64 *_best_col)7{8 CDocEntry *doc_e2;9 U8 *ptr;10 I64 j,k;11 if (doc_e->de_flags&DOCEF_TAG && doc_e->tag)12 k=StrLen(doc_e->tag);13 else14 k=0;15 if (full_refresh)16 while (TRUE) {17 doc_e2=doc_e->next;18 if (doc_e2->type_u8==DOCT_SOFT_NEW_LINE && !same_win) {19 if (doc->cur_entry==doc_e2) {20 doc->cur_entry=doc_e2->next;21 doc->cur_col=doc->cur_entry->min_col;22 }23 if (*_best_doc_e==doc_e2) {24 *_best_doc_e=doc_e2->next;25 *_best_col=0;26 }27 DocEntryDel(doc,doc_e2);28 } else if (IsEditableText(doc_e) &&29 doc_e->de_flags==doc_e2->de_flags && doc_e->type==doc_e2->type) {30 j=StrLen(doc_e2->tag);31 ptr=MAlloc(k+j+1,doc->mem_task);32 MemCpy(ptr,doc_e->tag,k);33 MemCpy(ptr+k,doc_e2->tag,j+1);34 Free(doc_e->tag);35 doc_e->tag=ptr;36 if (doc->cur_entry==doc_e2) {37 doc->cur_entry=doc_e;38 doc->cur_col+=k;39 }40 if (*_best_doc_e==doc_e2) {41 *_best_doc_e=doc_e;42 *_best_col=0;43 }44 DocEntryDel(doc,doc_e2);45 k+=j;46 if (k>(right_margin-left_margin+1)<<1)47 break;48 } else49 break;50 }51 if (doc_e->de_flags & DOCEF_SCROLLING_X)52 k=doc_e->scroll_len;53 return k;54}55 56U0 DocRecalcXY(CDoc *doc,CDocEntry *doc_e,57 I64 k,I64 left,I64 width,I64 height,I64 left_margin,I64 right_margin,58 I64 x0,I64 y0,I64 *_x,I64 *_y)59{60 I64 i,x=*_x,y=*_y;61 if (doc_e->de_flags & DOCEF_MARGIN_REL_X) {62 if (doc_e->de_flags & DOCEF_LEFT_X)63 x=left_margin-left;64 else if (doc_e->de_flags & DOCEF_RIGHT_X)65 x=right_margin-(k-1)-left;66 else if (doc_e->de_flags & DOCEF_CENTER_X)67 x=(right_margin+left_margin)>>1-k>>1-left;68 } else {69 if (doc_e->de_flags & DOCEF_LEFT_X)70 x=x0;71 else if (doc_e->de_flags & DOCEF_RIGHT_X)72 x=width+x0-k;73 else if (doc_e->de_flags & DOCEF_CENTER_X)74 x=(width+x0-k)>>1;75 }76 i=y;77 if (doc_e->de_flags & DOCEF_PAGE_REL_Y) {78 doc->flags|=DOCF_BWD_MOVEMENT;79 if (doc_e->de_flags & DOCEF_TOP_Y)80 y-=doc_e->page_line_num;81 else if (doc_e->de_flags & DOCEF_BOTTOM_Y)82 y+=doc_e->settings.page_len-doc_e->page_line_num;83 else if (doc_e->de_flags & DOCEF_CENTER_Y)84 y+=doc_e->settings.page_len>>1-doc_e->page_line_num;85 } else {86 doc->flags|=DOCF_BWD_MOVEMENT;87 if (doc_e->de_flags & DOCEF_TOP_Y)88 y=y0;89 else if (doc_e->de_flags & DOCEF_BOTTOM_Y)90 y=height-1+y0;91 else if (doc_e->de_flags & DOCEF_CENTER_Y)92 y=height>>1+y0;93 }94 if (y!=i) {95 doc->page_line_num+=y-i;96 if (doc->page_line_num<0)97 doc->page_line_num=doc_e->settings.page_len+98 doc->page_line_num%doc_e->settings.page_len;99 else100 doc->page_line_num=doc->page_line_num%doc_e->settings.page_len;101 if (doc_e->settings.header!=DOC_DFT &&102 doc->page_line_num<doc_e->settings.header) {103 y+=doc_e->settings.header-doc->page_line_num;104 doc->page_line_num=doc_e->settings.header;105 }106 if (doc_e->settings.footer==DOC_DFT) {107 if (doc->page_line_num>=doc_e->settings.page_len) {108 if (doc_e->settings.header==DOC_DFT)109 doc->page_line_num=0;110 else {111 doc->page_line_num=doc_e->settings.header;112 y+=doc_e->settings.header;113 }114 }115 } else {116 if (doc->page_line_num>=117 doc_e->settings.page_len-doc_e->settings.footer) {118 y+=doc_e->settings.footer;119 if (doc_e->settings.header==DOC_DFT)120 doc->page_line_num=0;121 else {122 doc->page_line_num=doc_e->settings.header;123 y+=doc_e->settings.header;124 }125 }126 }127 }128 *_x=x;129 *_y=y;130}131 132CDocEntry *DocSplitTag(CDoc *doc,CDocEntry *doc_e,I64 i,I64 x,I64 y,I64 type_u8)133{//Split tag at i, insert DOCT_SOFT_NEW_LINE, DOCT_MARKER or DOCT_CURSOR134 U8 *ptr;135 CDocEntry *doc_e2;136 if (doc_e->type_u8==DOCT_TEXT && i) {137 if (i<StrLen(doc_e->tag)) {138 doc_e2=MAllocIdent(doc_e,doc->mem_task);139 doc_e2->tag=StrNew(doc_e->tag+i,doc->mem_task);140 doc_e2->de_flags=doc_e->de_flags&~DOCEG_HAS_ALLOC|DOCEF_TAG;141 QueIns(doc_e2,doc_e);142 if (doc->cur_entry==doc_e && doc->cur_col>=i) {143 doc->cur_entry=doc_e2;144 doc->cur_col=doc->cur_col-i;145 }146 doc_e->tag[i]=0;147 ptr=StrNew(doc_e->tag,doc->mem_task);148 Free(doc_e->tag);149 doc_e->tag=ptr;150 }151 } else152 doc_e=doc_e->last;153 doc_e2=DocEntryNewBase(doc,type_u8|doc_e->type & 0xFFFFFF00,154 doc_e->de_flags&~DOCEG_HAS_ARG,x,y,doc_e->page_line_num);155 MemCpy(&doc_e2->settings,&doc_e->settings,sizeof(CDocSettings));156 QueIns(doc_e2,doc_e);157 return doc_e2;158}159 160CDocEntry *DocWordWrapAdd(CDoc *doc,CDocEntry *doc_e,161 I64 *_k,I64 left,I64 right_margin,I64 x,I64 y)162{163 CDocEntry *doc_e2;164 I64 j,i=right_margin+1-(x+left), //Space left on line165 ii=x+1-doc_e->settings.left_margin;166 if (IsEditableText(doc_e)) {167 if (doc->cur_entry==doc_e->next) {168 if (doc->cur_col==doc_e->next->min_col)169 i--;170 } else {171 if (doc->cur_entry==doc_e && doc->cur_col==i)172 i--;173 }174 if (*_k>i) {175 for (j=i;j>8-ii && j>=0;j--)176 if (doc_e->tag[j]==CH_SPACE || doc_e->tag[j]==CH_SHIFT_SPACE) {177 i=j+1;178 break;179 }180 if (0<i<*_k) {181 DocSplitTag(doc,doc_e,i,x,y,DOCT_SOFT_NEW_LINE);182 *_k=StrLen(doc_e->tag);183 return NULL;184 }185 }186 if (*_k==i)187 return NULL;188 }189 if (*_k>=i) {190 doc_e2=doc_e->last;191 if (doc_e2->type_u8!=DOCT_SOFT_NEW_LINE &&192 doc_e2->type_u8!=DOCT_NEW_LINE &&193 doc_e2->type_u8!=DOCT_CURSOR_MOVEMENT) {194 doc_e2=DocEntryNewBase(doc,DOCT_SOFT_NEW_LINE|doc_e->type&0xFFFFFF00,195 DOCEF_WORD_WRAP|doc_e->de_flags&(DOCEF_HIGHLIGHT|DOCG_BL_IV_UL|196 DOCEF_SKIP|DOCEF_FILTER_SKIP),x,y,doc_e->last->page_line_num);197 MemCpy(&doc_e2->settings,&doc_e->settings,sizeof(CDocSettings));198 QueIns(doc_e2,doc_e->last);199 return doc_e2;200 }201 }202 return NULL;203}204 205I64 DocTmpAttr(CDoc *doc,CDocEntry *doc_e,I64 cur_u8_attr)206{207 I64 tmp_u32_attr;208 doc_e->de_flags=doc->flags& (DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT) |209 doc_e->de_flags&~(DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT);210 tmp_u32_attr=(cur_u8_attr&0xF0)<<8|211 doc->flags&DOCG_BL_IV_UL|(doc_e->settings.shifted_x&0x1F)<<16|212 (doc_e->settings.shifted_y&0x1F)<<21;213 if (doc_e->de_flags & DOCEF_HAS_BIN && *doc_e->tag=='<')214 tmp_u32_attr.u8[1]|=DOC_COLOR_BIN;215 else216 switch (doc_e->type_u8) {217 case DOCT_SPRITE:218 if (doc_e->de_flags & DOCEF_LEFT_EXP)219 tmp_u32_attr.u8[1]|=cur_u8_attr&15;220 else if (doc_e->de_flags & DOCEF_LINK)221 tmp_u32_attr.u8[1]|=DOC_COLOR_LINK;222 else if (doc_e->de_flags & DOCEF_LEFT_MACRO)223 tmp_u32_attr.u8[1]|=DOC_COLOR_MACRO;224 else if (doc_e->de_flags & (DOCEF_TREE|DOCEF_LST))225 tmp_u32_attr.u8[1]|=DOC_COLOR_TREE;226 else227 tmp_u32_attr.u8[1]|=DOC_COLOR_BIN;228 break;229 case DOCT_HTML_CODE:230 tmp_u32_attr.u8[1]|=DOC_COLOR_BIN;231 break;232 case DOCT_LINK:233 tmp_u32_attr.u8[1]|=DOC_COLOR_LINK;234 break;235 case DOCT_MACRO:236 tmp_u32_attr.u8[1]|=DOC_COLOR_MACRO;237 break;238 case DOCT_ANCHOR:239 tmp_u32_attr.u8[1]|=DOC_COLOR_ANCHOR;240 break;241 case DOCT_TREE:242 case DOCT_LST:243 tmp_u32_attr.u8[1]|=DOC_COLOR_TREE;244 break;245 default:246 tmp_u32_attr.u8[1]|=cur_u8_attr&15;247 }248 doc_e->type.u8[1]=tmp_u32_attr.u8[1];249 tmp_u32_attr|=doc_e->type&0xFFFF0000;250 if (doc_e==doc->cur_entry && !(doc->flags&DOCF_DONT_HIGHLIGHT_CURSOR) &&251 doc_e->type_u8!=DOCT_TEXT)252 tmp_u32_attr^=0xFF00;253 doc_e->settings.final_u32_attr=tmp_u32_attr;254 return tmp_u32_attr;255}256 257public Bool DocRecalc(CDoc *doc,I64 recalc_flags=RECALCt_NORMAL)258{//Recalc and fmt. Also used by WinMgr to draw on scrn.259 I64 i,ii,j,k,x,x0,y,y0,D,d2,col,col2,best_col=0,best_d=I64_MAX,xx,yy,zz,260 num_entries=0,i_jif,cur_u8_attr,tmp_u32_attr,261 cursor_y=I64_MIN,left_margin,right_margin,y_plot_top,y_plot_bottom,262 top,left,bottom,right,width,height,scroll_x,scroll_y,pix_top,pix_left;263 CDocEntry reg *doc_e,reg *doc_e2,*best_doc_e,*next_clear_found=NULL,264 *added_cursor=NULL;265 CDocBin *tmpb;266 CDocSettings *s;267 Bool del_doc_e,skipped_update,tree_collapsed,same_win,more=FALSE,268 find_cursor=FALSE,blink_flag,full_refresh=TRUE,unlock,clear_holds;269 CTask *win_task,*mem_task;270 CDC *dc;271 U8 *bptr,*ptr,buf[STR_LEN],ch;272 U32 *u32_ptr,*hl;273 I32 *depth_buf=NULL;274 F64 cur_time=tS;275 CWinScroll *vss,*hss;276 CHashDefineStr *tmph;277 278 if (!doc || doc->doc_signature!=DOC_SIGNATURE_VAL) return FALSE;279 280 //WinMgr updates all wins 30, 33.33333mS281 if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCRN && doc->owning_task!=Fs) {282 i_jif=cnts.jiffies+JIFFY_FREQ/250; //4 ms283 while (Bt(&doc->locked_flags,DOClf_LOCKED)) {284 if (cnts.jiffies>=i_jif)285 return FALSE; //Bail-out if doc locked.286 Yield;287 }288 }289 290 unlock=DocLock(doc);291 if (doc->doc_signature!=DOC_SIGNATURE_VAL) {292 DocUnlock(doc);293 return FALSE;294 }295 296 win_task=doc->win_task;297 mem_task=doc->mem_task;298 blink_flag=Blink;299 dc=NULL;300 switch [recalc_flags&RECALCG_MASK] {301 case RECALCt_FIND_CURSOR:302 find_cursor=TRUE;303 if (win_task)304 dc=DCAlias(gr.dc2,win_task); //Necessary for sprites305 break;306 case RECALCt_TO_SCRN:307 if (doc->updates_cnt++%(ToI64(winmgr.fps/10)+1) &&308 !Bt(&doc->flags,DOCf_DO_FULL_REFRESH) &&309 !(doc->flags&DOCF_BWD_MOVEMENT))310 full_refresh=FALSE;311 if (win_task)312 dc=DCAlias(gr.dc2,win_task);313 break;314 }315 316 PUSHFD317 CLI318 left =win_task->win_left;319 right =win_task->win_right;320 width =win_task->win_width;321 scroll_x=win_task->scroll_x;322 scroll_y=win_task->scroll_y;323 top =win_task->win_top;324 bottom=win_task->win_bottom;325 height=win_task->win_height;326 pix_left =win_task->pix_left;327 pix_top =win_task->pix_top;328 left_margin=left;329 right_margin=right;330 POPFD331 if (doc->flags&DOCF_BORDER_DOC) {332 scroll_x=0;333 scroll_y=0;334 }335 best_doc_e=doc->cur_entry;336 337 if (!(doc->flags&(DOCF_PLAIN_TEXT|DOCF_PLAIN_TEXT_TABS)) &&338 FilesFindMatch(doc->filename.name,FILEMASK_SRC))339 doc->flags|=DOCF_HIGHLIGHT;340 else341 doc->flags&=~DOCF_HIGHLIGHT;342 343 x=y=0;344 doc->page_line_num=0;345 if (full_refresh && !find_cursor) {346 doc->x=x;347 doc->y=y;348 }349 350 hss=&win_task->horz_scroll;351 vss=&win_task->vert_scroll;352 if (doc->flags&DOCF_BORDER_DOC) {353 doc->top_line_num=0;354 doc->line_start_col=0;355 recalc_flags&=~RECALCF_HAS_CURSOR;356 if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCRN)357 doc->settings_head.cur_text_attr=358 doc->settings_head.dft_text_attr=win_task->border_attr;359 } else {360 if (recalc_flags&RECALCF_HAS_CURSOR && full_refresh) {361 if (Bt(&hss->flags,WSSf_SET_TO_POS)||Bt(&vss->flags,WSSf_SET_TO_POS)) {362 if (!(doc->flags&DOCF_NO_SCROLL_BARS)) {363 if (Bt(&hss->flags,WSSf_SET_TO_POS)) {364 doc->line_start_col=hss->pos;365 LBtr(&hss->flags,WSSf_SET_TO_POS);366 }367 if (Bt(&vss->flags,WSSf_SET_TO_POS)) {368 doc->top_line_num=vss->pos;369 LBtr(&vss->flags,WSSf_SET_TO_POS);370 }371 }372 doc->x=doc->line_start_col+width/2;373 doc->y=doc->top_line_num+height/2;374 find_cursor=TRUE;375 }376 }377 if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCRN)378 doc->settings_head.cur_text_attr=379 doc->settings_head.dft_text_attr=win_task->text_attr;380 }381 x0=doc->line_start_col;382 y0=doc->top_line_num;383 same_win=top ==doc->old_win_top &&384 bottom==doc->old_win_bottom &&385 left ==doc->old_win_left &&386 right ==doc->old_win_right &&387 doc->cur_entry==doc->old_cur_entry &&388 doc->cur_col==doc->old_cur_col;389 if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCRN) {390 y_plot_top=y0-scroll_y/FONT_HEIGHT;391 y_plot_bottom=y0+height-1-scroll_y/FONT_HEIGHT;392 if (!(doc->flags&DOCF_BORDER_DOC) &&393 !Bt(&win_task->display_flags,DISPLAYf_NO_BORDER))394 DocBorderLstDraw(doc);395 }396 397 if (doc->cur_col<=doc->cur_entry->min_col)398 doc->cur_col=doc->cur_entry->min_col;399 doc_e=doc->head.next;400 doc_e->de_flags&=~(DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT);401 if (doc_e==doc->head.next)402 s=&doc->settings_head;403 else404 s=&doc_e->last->settings;405 doc->flags=doc_e->de_flags& (DOCG_BL_IV_UL|DOCEF_WORD_WRAP) |406 doc->flags&~(DOCG_BL_IV_UL|DOCEF_WORD_WRAP);407 cur_u8_attr=s->cur_text_attr;408 if (doc_e==doc->head.next) {409 doc->flags&=~DOCF_BWD_MOVEMENT;410 if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCRN && full_refresh)411 doc->flags&=~DOCF_HAS_SONG;412 } else413 doc->flags=doc_e->de_flags& DOCEF_HIGHLIGHT |414 doc->flags&~DOCEF_HIGHLIGHT;415 416 if (doc->head.next==doc) {417 best_doc_e=doc;418 best_col=0;419 doc->cur_entry=doc;420 doc->cur_col=0;421 doc_e=doc;422 }423 skipped_update= doc_e==doc && doc->head.next!=doc;424 425 if (full_refresh) {426 doc->min_x=I32_MAX; doc->min_y=I32_MAX;427 doc->max_x=I32_MIN; doc->max_y=I32_MIN;428 }429 while (doc_e!=doc) {430 while (TRUE) {431 del_doc_e=FALSE;432 if (doc_e->de_flags & (DOCEF_SKIP|DOCEF_FILTER_SKIP)) {433 doc_e2=doc_e;434 goto rc_skip;435 }436 MemCpy(&doc_e->settings,s,sizeof(CDocSettings));437 s=&doc_e->settings;438 if (doc_e->de_flags & (DOCEF_TAG_CB|DOCEF_DEFINE) &&439 !(doc_e->de_flags & DOCEF_LST)) {440 Free(doc_e->tag);441 if (doc_e->de_flags & DOCEF_TAG_CB) {442 if (doc_e->tag_cb)443 doc_e->tag=(*doc_e->tag_cb)(doc,doc_e,mem_task);444 else445 doc_e->tag=StrNew("",mem_task);446 } else {447 if (tmph=HashFind(doc_e->define_str,448 win_task->hash_table,HTT_DEFINE_STR))449 doc_e->tag=StrNew(tmph->data,mem_task);450 else451 doc_e->tag=CAlloc(1,mem_task);452 }453 doc_e->max_col=StrLen(doc_e->tag);454 if (doc->cur_entry==doc_e && doc->cur_col>=doc_e->max_col) {455 if (doc_e->max_col)456 doc->cur_col=doc_e->max_col-1;457 else458 doc->cur_col=0;459 }460 }461 k=DocWordWrapDel(doc,doc_e,full_refresh,same_win,462 left_margin,right_margin,&best_doc_e,&best_col);463 if (doc_e->de_flags & (DOCEF_LEFT_X|DOCEF_RIGHT_X|DOCEF_CENTER_X|464 DOCEF_TOP_Y|DOCEF_BOTTOM_Y|DOCEF_CENTER_Y))465 DocRecalcXY(doc,doc_e,k,466 left,width,height,left_margin,right_margin,x0,y0,&x,&y);467 if (full_refresh && k>0 && doc->flags & DOCF_WORD_WRAP &&468 (doc_e2=DocWordWrapAdd(doc,doc_e,&k,left,right_margin,x,y)))469 doc_e=doc_e2;470 else471 break;472 }473 474 if (full_refresh) {475 doc_e->x=x;476 doc_e->y=y;477 doc_e->page_line_num=doc->page_line_num;478 if (x<doc->min_x) doc->min_x=x;479 if (y<doc->min_y) doc->min_y=y;480 if (find_cursor) {481 D=DocCharDist(doc,x,y);482 col=0;483 }484 }485 col2=0;486 487 tmp_u32_attr=DocTmpAttr(doc,doc_e,cur_u8_attr);488 if (doc_e==doc->cur_entry) {489 cursor_y=doc_e->y;490 if (recalc_flags&RECALCF_ADD_CURSOR && !added_cursor) {491 if (doc_e->type_u8==DOCT_TEXT && 0<doc->cur_col<k &&492 !(doc_e->de_flags & ~(DOCEF_TAG|DOCG_BL_IV_UL|DOCEF_WORD_WRAP|493 DOCEF_HIGHLIGHT|DOCEF_SKIP|DOCEF_FILTER_SKIP)) &&494 !(doc_e->type&DOCG_BL_IV_UL)) {495 added_cursor=DocSplitTag(doc,doc_e,doc->cur_col,x,y,DOCT_CURSOR);496 k=StrLen(doc_e->tag);497 } else {498 added_cursor=doc_e2=DocEntryNewBase(doc,499 DOCT_CURSOR|doc_e->type&0xFFFFFF00,500 doc_e->de_flags&~DOCEG_HAS_ARG,x,y,doc->page_line_num);501 MemCpy(&doc_e2->settings,&doc_e->settings,sizeof(CDocSettings));502 if (doc_e->type_u8==DOCT_TEXT && doc->cur_col>=k)503 QueIns(doc_e2,doc_e);504 else505 QueInsRev(doc_e2,doc_e);506 }507 }508 }509 510 if (doc_e->de_flags & DOCEF_REFRESH_DATA &&511 (doc_e->type_u8==DOCT_DATA || doc_e->type_u8==DOCT_CHECK_BOX ||512 doc_e->de_flags & DOCEF_LST)) {513 DocDataFmt(doc,doc_e);514 k=StrLen(doc_e->tag);515 }516 if (doc_e->de_flags&DOCEF_TAG) {517 ptr=doc_e->tag;518 if (doc_e->de_flags & DOCEF_TREE) {519 if (k>=2) {520 if (doc_e->de_flags & DOCEF_CHECKED_COLLAPSED)521 *ptr++='+';522 else523 *ptr++='-';524 *ptr++=']';525 ptr=doc_e->tag;526 }527 } else if (doc_e->de_flags & DOCEF_HAS_BIN) {528 if (*ptr=='<' && full_refresh && '0'<=ptr[1]<='9') {529 ptr=MStrPrint("<%d>",doc_e->bin_num);530 Free(doc_e->tag);531 doc_e->tag=StrNew(ptr,mem_task);532 Free(ptr);533 ptr=doc_e->tag;534 k=StrLen(ptr);535 }536 } else if (doc_e->type_u8==DOCT_CHECK_BOX) {537 if (k>=3) {538 *ptr++='[';539 if (doc_e->de_flags & DOCEF_CHECKED_COLLAPSED)540 *ptr++='X';541 else542 *ptr++=CH_SPACE;543 *ptr++=']';544 ptr=doc_e->tag;545 }546 }547 if (doc_e->de_flags & DOCEF_SCROLLING_X) {548 j=StrLen(doc_e->tag);549 if (j && doc_e->scroll_len) {550 i_jif=ToI64(cur_time*FONT_WIDTH*DOC_SCROLL_SPEED)%(j*FONT_WIDTH);551 tmp_u32_attr=tmp_u32_attr & 0xFFE0FF00|552 (FONT_WIDTH-1-i_jif&(FONT_WIDTH-1))<<16;553#assert FONT_WIDTH==8554 i_jif>>=3;555 for (k=0;k<doc_e->scroll_len;k++) {556 ch=ptr[(i_jif+k)%j];557 if (!Bt(char_bmp_displayable,ch)) ch='.';558 if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCRN &&559 !(doc_e->de_flags&DOCEF_DONT_DRAW)) {560 if (doc_e->de_flags & DOCEF_BORDER_PLOT &&561 !Bt(&win_task->display_flags,DISPLAYf_NO_BORDER))562 TextChar(win_task,TRUE,x-x0,y-y0,tmp_u32_attr+ch);563 else564 TextChar(win_task,FALSE,x-x0,y-y0,tmp_u32_attr+ch);565 }566 x++;567 }568 }569 if (find_cursor) {570 D=DocCharDist(doc,doc_e->x,doc_e->y);571 col=doc_e->min_col;572 }573 col2=doc_e->scroll_len; //TODO This is flawed574 } else {575 if (doc_e->de_flags & DOCEF_BORDER_PLOT &&576 !Bt(&win_task->display_flags,DISPLAYf_NO_BORDER)) {577 while (ch=*ptr++) {578 if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCRN &&579 !(doc_e->de_flags&DOCEF_DONT_DRAW))580 TextChar(win_task,TRUE,x-x0,y-y0,tmp_u32_attr+ch);581 else582 if (find_cursor) {583 d2=DocCharDist(doc,x,y);584 if (d2<D) {585 D=d2;586 col=col2;587 }588 }589 col2++;590 x++;591 }592 } else {593 if (doc_e->type_u8==DOCT_TEXT && doc_e->de_flags&DOCEF_HIGHLIGHT)594 hl=DocHighlight(doc_e,ptr,k,tmp_u32_attr);595 else596 hl=NULL;597 if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCRN &&598 !(doc_e->de_flags&DOCEF_DONT_DRAW)) {599//Technically we should do this for scrolling_x, too.600 if (y>y_plot_bottom)601 more=TRUE;602 else if (y>=y_plot_top) {603 if (hl)604 TextLenAttrStr(win_task,x-x0,y-y0,k,hl);605 else606 TextLenStr(win_task,x-x0,y-y0,k,tmp_u32_attr,ptr);607 }608 col2+=k;609 x+=k;610 } else {611 if (find_cursor) {612 while (k--) {613 d2=DocCharDist(doc,x,y);614 if (d2<D) {615 D=d2;616 col=col2;617 }618 col2++;619 x++;620 }621 } else {622 col2+=k;623 x+=k;624 }625 }626 Free(hl);627 }628 }629 }630 switch [doc_e->type_u8] {631 case DOCT_TEXT:632 if (!col2 && !(doc_e->de_flags633 &(DOCEF_TREE|DOCEF_LST|DOCEF_TAG_CB|DOCEF_DEFINE|634 DOCEF_AUX_STR|DOCEF_HTML_LINK|DOCEF_BIN_PTR_LINK)))635 del_doc_e=TRUE;636 break;637 case DOCT_HEX_ED:638 if (doc_e->de_flags&DOCEF_DEREF_DATA &&639 !(doc_e->de_flags&DOCEF_REMALLOC_DATA))640 bptr=doc_e->data;641 else642 bptr=&doc_e->data;643 k=doc_e->hex_ed_width; //columns644 for (i=0;i<doc_e->len;i+=k) {645 if (doc_e->de_flags & DOCEF_ZERO_BASED)646 StrPrint(buf,"%08tX ",i);647 else648 StrPrint(buf,"%08tX ",bptr);649 ptr=buf;650 while (ch=*ptr++) {651 if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCRN &&652 !(doc_e->de_flags&DOCEF_DONT_DRAW)) {653 if (doc_e->de_flags & DOCEF_BORDER_PLOT &&654 !Bt(&win_task->display_flags,DISPLAYf_NO_BORDER))655 TextChar(win_task,TRUE,x-x0,y-y0,tmp_u32_attr+ch);656 else657 TextChar(win_task,FALSE,x-x0,y-y0,tmp_u32_attr+ch);658 }659 if (find_cursor) {660 d2=DocCharDist(doc,x,y);661 if (d2<D) {662 D=d2;663 col=i*3;664 }665 }666 x++;667 }668 if (i+k>doc_e->len) k=doc_e->len-i;669 for (j=0;j<k;j++) {670 StrPrint(buf,"%02tX",*bptr++);671 ptr=buf;672 while (ch=*ptr++) {673 if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCRN &&674 !(doc_e->de_flags&DOCEF_DONT_DRAW)) {675 if (doc_e->de_flags & DOCEF_BORDER_PLOT &&676 !Bt(&win_task->display_flags,DISPLAYf_NO_BORDER))677 TextChar(win_task,TRUE,x-x0,y-y0,tmp_u32_attr+ch);678 else679 TextChar(win_task,FALSE,x-x0,y-y0,tmp_u32_attr+ch);680 }681 if (find_cursor) {682 d2=DocCharDist(doc,x,y);683 if (d2<D) {684 D=d2;685 col=col2;686 }687 }688 col2++;689 x++;690 }691 x++;692 }693 bptr-=j;694 x+=(doc_e->hex_ed_width-k)*3;695 for (j=0;j<k;j++) {696 ch=*bptr++;697 if (!Bt(char_bmp_displayable,ch)) ch='.';698 if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCRN &&699 !(doc_e->de_flags&DOCEF_DONT_DRAW)) {700 if (doc_e->de_flags & DOCEF_BORDER_PLOT &&701 !Bt(&win_task->display_flags,DISPLAYf_NO_BORDER))702 TextChar(win_task,TRUE,x-x0,y-y0,tmp_u32_attr+ch);703 else704 TextChar(win_task,FALSE,x-x0,y-y0,tmp_u32_attr+ch);705 }706 if (find_cursor) {707 d2=DocCharDist(doc,x,y);708 if (d2<D) {709 D=d2;710 col=col2;711 }712 }713 col2++;714 x++;715 }716 y++;717 x-=doc_e->hex_ed_width*3+k+9;718 }719 break;720 case DOCT_NEW_LINE:721 case DOCT_SOFT_NEW_LINE:722 if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCRN &&723 !(doc_e->de_flags&DOCEF_DONT_DRAW)&&724 y_plot_top<=y<=y_plot_bottom)725 TextLenAttr(win_task,x-x0,y-y0,width-(x-x0),cur_u8_attr<<8);726 if (doc_e->de_flags&DOCEF_HIGHLIGHT && s->state==DOCSS_CPP_Z_COMMENT)727 s->state=DOCSS_NORMAL;728 y++;729 doc->page_line_num++;730rc_start_of_line:731 if (s->left_margin==DOC_DFT)732 x=s->indent;733 else734 x=s->indent+s->left_margin;735rc_adjust_xy:736 i=s->indent+s->left_margin;737 if (x<i)738 x=i;739 if (doc->page_line_num<0)740 doc->page_line_num=s->page_len+doc->page_line_num%s->page_len;741 else {742 if (doc->page_line_num>=s->page_len) {743 doc->page_line_num-=s->page_len;744 if (doc->page_line_num>=s->page_len) //avoid extra divide745 doc->page_line_num=doc->page_line_num%s->page_len;746 }747 }748 if (s->header!=DOC_DFT) {749 if (doc->page_line_num<s->header) {750 y+=s->header-doc->page_line_num;751 doc->page_line_num=s->header;752 goto rc_start_of_line;753 }754 }755 if (s->footer==DOC_DFT) {756 if (doc->page_line_num>=s->page_len) {757 if (s->header==DOC_DFT)758 doc->page_line_num=0;759 else {760 doc->page_line_num=s->header;761 y+=s->header;762 }763 goto rc_start_of_line;764 }765 } else {766 if (doc->page_line_num>=s->page_len-s->footer) {767 y+=s->footer;768 if (s->header==DOC_DFT)769 doc->page_line_num=0;770 else {771 doc->page_line_num=s->header;772 y+=s->header;773 }774 goto rc_start_of_line;775 }776 }777 break;778 case DOCT_TAB:779 k=(x+8) & ~7;780 if (doc_e->de_flags & DOCEF_BORDER_PLOT &&781 !Bt(&win_task->display_flags,DISPLAYf_NO_BORDER)) {782 while (x<k) {783 if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCRN &&784 !(doc_e->de_flags&DOCEF_DONT_DRAW))785 TextChar(win_task,TRUE,x-x0,y-y0,tmp_u32_attr+CH_SPACE);786 if (find_cursor) {787 d2=DocCharDist(doc,x,y);788 if (d2<D)789 D=d2;790 }791 x++;792 }793 } else {794 k-=x;795 if (recalc_flags&RECALCG_MASK==RECALCt_TO_SCRN &&796 !(doc_e->de_flags&DOCEF_DONT_DRAW)) {797 if (y_plot_top<=y<=y_plot_bottom)798 TextLenStr(win_task,x-x0,y-y0,k,tmp_u32_attr," ");799 x+=k;800 } else {801 if (find_cursor) {802 while (k--) {803 d2=DocCharDist(doc,x,y);804 if (d2<D)805 D=d2;806 x++;807 }808 } else809 x+=k;810 }811 }812 break;813 case DOCT_PAGE_BREAK:814 doc->flags|=DOCF_BWD_MOVEMENT;815 y+=s->page_len-doc_e->page_line_num;816 doc->page_line_num=0;817 goto rc_start_of_line;818 case DOCT_CURSOR:819 if (!find_cursor && !(doc->flags & DOCF_NO_CURSOR)) {820 doc->cur_entry=doc_e->next;821 doc->cur_col=doc->cur_entry->min_col;822 }823 if (doc_e!=added_cursor)824 del_doc_e=TRUE;825 break;826 case DOCT_PMT:827 cur_u8_attr=cur_u8_attr&0xF0|DOC_COLOR_PMT;828 if (y==cursor_y) {829 doc->cur_entry=doc_e->next;830 doc->cur_col=doc->cur_entry->min_col;831 }832 break;833 case DOCT_CLEAR:834 next_clear_found=doc_e;835 if (doc_e->de_flags&DOCEF_HOLD)836 clear_holds=TRUE;837 else838 clear_holds=FALSE;839 break;840 case DOCT_PAGE_LEN:841 s->page_len=doc_e->attr;842 if (doc_e->de_flags & DOCEF_WIN_REL)843 s->page_len+=height;844 goto rc_adjust_xy;845 case DOCT_LEFT_MARGIN:846 i=doc_e->attr;847 left_margin=left+i;848 s->left_margin=i;849 goto rc_start_of_line;850 case DOCT_RIGHT_MARGIN:851 if (doc_e->de_flags & DOCEF_WIN_REL)852 i=width-1-doc_e->attr;853 else854 i=doc_e->attr;855 right_margin=left+i;856 s->right_margin=i;857 goto rc_adjust_xy;858 case DOCT_HEADER:859 s->header=doc_e->attr;860 goto rc_adjust_xy;861 case DOCT_FOOTER:862 s->footer=doc_e->attr;863 goto rc_adjust_xy;864 case DOCT_INDENT:865 if (doc_e->de_flags & DOCEF_LEFT_X)866 i=doc_e->attr;867 else868 i=s->indent+doc_e->attr;869 s->indent=i;870 goto rc_start_of_line;871 case DOCT_FOREGROUND:872 cur_u8_attr&=0xF0;873 if (doc_e->attr==DOC_DFT)874 cur_u8_attr|=s->dft_text_attr&0x0F;875 else876 cur_u8_attr|=doc_e->attr;877 s->cur_text_attr=cur_u8_attr;878 break;879 case DOCT_BACKGROUND:880 cur_u8_attr&=0x0F;881 if (doc_e->attr==DOC_DFT)882 cur_u8_attr|=s->dft_text_attr&0xF0;883 else884 cur_u8_attr|=doc_e->attr<<4;885 s->cur_text_attr=cur_u8_attr;886 break;887 case DOCT_DFT_FOREGROUND:888 cur_u8_attr&=0xF0;889 if (doc_e->attr==DOC_DFT)890 cur_u8_attr|=s->dft_text_attr&0xF;891 else892 cur_u8_attr|=doc_e->attr;893 s->dft_text_attr=s->dft_text_attr&0xF0|cur_u8_attr&0x0F;894 s->cur_text_attr=cur_u8_attr;895 break;896 case DOCT_DFT_BACKGROUND:897 cur_u8_attr&=0x0F;898 if (doc_e->attr==DOC_DFT)899 cur_u8_attr|=s->dft_text_attr&0xF0;900 else901 cur_u8_attr|=doc_e->attr<<4;902 s->dft_text_attr=s->dft_text_attr&0x0F|cur_u8_attr&0xF0;903 s->cur_text_attr=cur_u8_attr;904 break;905 case DOCT_WORD_WRAP:906 if (doc_e->attr)907 doc->flags|=DOCF_WORD_WRAP;908 else909 doc->flags&=~DOCF_WORD_WRAP;910 break;911 case DOCT_HIGHLIGHT:912 if (doc_e->attr)913 doc->flags|=DOCF_HIGHLIGHT;914 else915 doc->flags&=~DOCF_HIGHLIGHT;916 break;917 case DOCT_BLINK:918 if (doc_e->attr)919 doc->flags|=DOCF_BLINK;920 else921 doc->flags&=~DOCF_BLINK;922 break;923 case DOCT_INVERT:924 if (doc_e->attr)925 doc->flags|=DOCF_INVERT;926 else927 doc->flags&=~DOCF_INVERT;928 break;929 case DOCT_UNDERLINE:930 if (doc_e->attr)931 doc->flags|=DOCF_UNDERLINE;932 else933 doc->flags&=~DOCF_UNDERLINE;934 break;935 case DOCT_SHIFTED_X:936 s->shifted_x=doc_e->attr;937 break;938 case DOCT_SHIFTED_Y:939 s->shifted_y=doc_e->attr;940 break;941 case DOCT_CURSOR_MOVEMENT:942 doc->flags|=DOCF_BWD_MOVEMENT;943 x+=doc_e->cursor_x_offset;944 if (doc_e->de_flags & DOCEF_PAGE_REL_Y) {945 i=doc->page_line_num;946 if (doc_e->de_flags & DOCEF_TOP_Y)947 doc->page_line_num=0;948 else if (doc_e->de_flags & DOCEF_BOTTOM_Y)949 doc->page_line_num=s->page_len-1;950 else if (doc_e->de_flags & DOCEF_CENTER_Y)951 doc->page_line_num=s->page_len>>1;952 y+=doc->page_line_num-i;953 }954 y+=doc_e->cursor_y_offset;955 doc->page_line_num+=doc_e->cursor_y_offset;956 goto rc_adjust_xy;957 case DOCT_SPRITE:958 if (!doc_e->bin_data && doc->flags&DOCEF_HAS_BIN)959 doc_e->bin_data=DocBinFindNum(doc,doc_e->bin_num);960 if ((tmpb=doc_e->bin_data) &&961 !tmpb->tag && doc_e->tag && *doc_e->tag)962 tmpb->tag=StrNew(doc_e->tag,mem_task);963 if (tmpb && dc) {964 DCRst(dc);965 dc->flags&=~(DCF_DONT_DRAW|DCF_LOCATE_NEAREST);966 if (recalc_flags&RECALCG_MASK!=RECALCt_TO_SCRN ||967 doc_e->de_flags&DOCEF_DONT_DRAW)968 dc->flags|=DCF_DONT_DRAW;969 bptr=tmpb->data;970 ii=SpriteTypeMask(bptr);971 if (ii&1<<SPT_TYPES_NUM) {972 bptr=gr.empty_sprite;973 ii=SpriteTypeMask(bptr);974 }975 if (ii&(1<<SPT_FLOOD_FILL|1<<SPT_FLOOD_FILL_NOT))976 i=cur_u8_attr>>4 &0xF ^ win_task->text_attr>>4 & 0xF;977 else {978 i=tmp_u32_attr>>12&0xF ^ win_task->text_attr>>4 & 0xF;979 if (tmp_u32_attr & DOCET_SEL)980 i^=0xF;981 if (tmp_u32_attr & DOCET_INVERT)982 i^=0xF;983 if (blink_flag &&984 (doc_e==doc->cur_entry || tmp_u32_attr&DOCET_BLINK))985 i^=0xF;986 }987 dc->color=i;988 if (find_cursor)989 dc->flags|=DCF_LOCATE_NEAREST;990 dc->cur_x=(doc->x-x0)*FONT_WIDTH+pix_left+scroll_x;991 dc->cur_y=(doc->y-y0)*FONT_HEIGHT+pix_top+scroll_y;992 dc->cur_z=0;993 dc->bkcolor=i;994 if (doc_e->de_flags & DOCEF_FROM_START) {995 xx=(x-k-x0)*FONT_WIDTH; //TODO: scrolling text is not length k996 yy=(y-y0)*FONT_HEIGHT;997 zz=0;998 } else {999 xx=(x-x0)*FONT_WIDTH;1000 yy=(y-y0)*FONT_HEIGHT;1001 zz=0;1002 }1003 if (ii&(1<<SPT_MESH|1<<SPT_SHIFTABLE_MESH)) {1004 if (!depth_buf) {1005 DCDepthBufAlloc(dc);1006 depth_buf=dc->depth_buf;1007 } else1008 dc->depth_buf=depth_buf;1009 Mat4x4IdentEqu(dc->r);1010 Mat4x4RotZ(dc->r,cur_time*3.1);1011 Mat4x4RotY(dc->r,cur_time*1.9);1012 Mat4x4RotX(dc->r,cur_time);1013 dc->flags|=DCF_TRANSFORMATION;1014 dc->x=xx;1015 dc->y=yy;1016 dc->z=GR_Z_ALL;1017 xx=0; yy=0; zz=0;1018 }1019 Sprite3(dc,xx,yy,zz,bptr);1020 dc->depth_buf=NULL;1021 dc->flags&=~(DCF_LOCATE_NEAREST|DCF_DONT_DRAW|DCF_TRANSFORMATION);1022 if (dc->nearest_dist<=D) {1023 D=dc->nearest_dist;1024 col=doc_e->min_col;1025 }1026 }1027 break;1028 case DOCT_SONG:1029 if (sys_focus_task==win_task &&1030 recalc_flags&RECALCG_MASK==RECALCt_TO_SCRN &&1031 !(doc_e->de_flags&DOCEF_DONT_DRAW)) {1032 if (doc_e->aux_str &&1033 (!music.cur_song || StrCmp(music.cur_song,doc_e->aux_str))) {1034 Free(music.cur_song);1035 MusicSettingsRst;1036 music.cur_song=AStrNew(doc_e->aux_str);1037 }1038 }1039 doc->flags|=DOCF_HAS_SONG;1040 break;1041 case DOCT_HTML_CODE:1042 if (recalc_flags&RECALCF_TO_HTML &&1043 doc_e->de_flags&DOCEF_TAG && doc_e->tag)1044 x-=StrLen(doc_e->tag);1045 break;1046 case DOCT_TYPES_NUM-1: //nobound switch1047 default:1048 break;1049 }1050 1051 if (doc_e->de_flags & DOCEF_HAS_BORDER)1052 TextBorder(win_task,doc_e->x-x0,x-x0-1,doc_e->y-y0,y-y0,1053 tmp_u32_attr.u8[1],ToBool(doc_e->de_flags & DOCEF_SOLID_BORDER));1054 if (full_refresh) {1055 switch (doc_e->type_u8) {1056 case DOCT_CHECK_BOX:1057 doc_e->max_col=2;1058 break;1059 case DOCT_LST:1060 case DOCT_TREE:1061 case DOCT_BTTN:1062 case DOCT_LINK:1063 case DOCT_MENU_VAL:1064 case DOCT_MACRO:1065 doc_e->max_col=1;1066 break;1067 default:1068 if (doc_e->de_flags & (DOCEF_TREE|DOCEF_LST))1069 doc_e->max_col=1;1070 else1071 doc_e->max_col=col2;1072 }1073 1074 if (x>doc->max_x) doc->max_x=x;1075 if (y>doc->max_y) doc->max_y=y;1076 if (D<=best_d && !(doc_e->de_flags&DOCEF_NO_CLICK_ON)) {1077 best_d=D;1078 best_doc_e=doc_e;1079 best_col=col;1080 }1081 if (doc_e->de_flags & DOCEF_TREE) {1082 if (doc_e->de_flags & DOCEF_CHECKED_COLLAPSED)1083 tree_collapsed=TRUE;1084 else1085 tree_collapsed=FALSE;1086 doc_e2=doc_e->next;1087 while (doc_e2!=doc && doc_e2->type_u8!=DOCT_INDENT &&1088 !(doc_e2->de_flags & DOCEF_TREE))1089 doc_e2=doc_e2->next;1090 if (doc_e2->type_u8==DOCT_INDENT) {1091 j=i=s->indent;1092 do {1093 if (tree_collapsed)1094 doc_e2->de_flags|=DOCEF_SKIP;1095 else1096 doc_e2->de_flags&=~DOCEF_SKIP;1097 if (doc_e2->type_u8==DOCT_INDENT) {1098 if (doc_e2->de_flags & DOCEF_LEFT_X)1099 j=doc_e2->attr;1100 else1101 j+=doc_e2->attr;1102 }1103 doc_e2=doc_e2->next;1104 } while (doc_e2!=doc && j>i);1105 }1106 }1107 }1108 1109 doc_e2=doc_e->next;1110rc_skip:1111 while (doc_e2!=doc && doc_e2->de_flags&(DOCEF_SKIP|DOCEF_FILTER_SKIP)) {1112 if (doc_e2==doc->cur_entry) {1113 doc->cur_entry=doc_e2->next;1114 doc->cur_col=doc->cur_entry->min_col;1115 }1116 if (full_refresh) {1117 doc_e2->x=x;1118 doc_e2->y=y;1119 doc_e2->page_line_num=doc->page_line_num;1120 MemCpy(&doc_e2->settings,s,sizeof(CDocSettings));1121 doc_e2->type.u8[1]=cur_u8_attr;1122 doc_e2->de_flags=doc->flags1123 &(DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT) |1124 doc_e2->de_flags&~(DOCG_BL_IV_UL|DOCEF_WORD_WRAP|DOCEF_HIGHLIGHT);1125 }1126 doc_e2=doc_e2->next;1127 }1128 1129 if (full_refresh) {1130 if (del_doc_e) {1131 if (!(doc_e->de_flags & (DOCEF_HOLD|DOCEF_FILTER_SKIP))) {1132 if (doc_e==doc->cur_entry) {1133 doc->cur_entry=doc_e2;1134 doc->cur_col=doc_e2->min_col;1135 }1136 if (best_doc_e==doc_e) {1137 best_doc_e=doc_e2;1138 best_col=doc_e2->min_col; //TODO: might be bug1139 }1140 DocEntryDel(doc,doc_e);1141 }1142 }1143 }1144 num_entries++;1145 if (!full_refresh && doc_e->y>y_plot_bottom)1146 break;1147 doc_e=doc_e2;1148 }1149 1150 if (full_refresh) {1151 if (doc->cur_entry==doc && recalc_flags&RECALCF_ADD_CURSOR) {1152 doc_e2=DocEntryNewBase(doc,DOCT_CURSOR,,x,y,doc->page_line_num);1153 MemCpy(&doc_e2->settings,s,sizeof(CDocSettings));1154 QueInsRev(doc_e2,doc);1155 }1156 1157 if (doc->min_x>doc->max_x) {1158 doc->max_x=0;1159 doc->min_x=0;1160 }1161 if (doc->min_y>doc->max_y) {1162 doc->max_y=0;1163 doc->min_y=0;1164 }1165 1166 //Update header1167 if (!skipped_update) {1168 doc_e->x=x;1169 doc_e->y=y;1170 doc_e->page_line_num=doc->page_line_num;1171 MemCpy(&doc_e->settings,s,sizeof(CDocSettings));1172 doc_e->type.u8[1]=cur_u8_attr;1173 if (find_cursor) {1174 D=DocCharDist(doc,x,y);1175 if (D<best_d && !(doc_e->de_flags&DOCEF_NO_CLICK_ON)) {1176 best_d=D;1177 best_doc_e=doc_e;1178 best_col=0;1179 }1180 }1181 }1182 if (doc->flags & DOCF_SIZE_MIN) {1183 if (Bt(&win_task->display_flags,DISPLAYf_NO_BORDER)) {1184 if (left<0)1185 left=0;1186 i=left+doc->max_x-doc->min_x;1187 if (i>TEXT_COLS-1)1188 i=TEXT_COLS-1;1189 WinHorz(left,i,win_task);1190 if (top<0)1191 top=0;1192 i=top+doc->max_y-doc->min_y;1193 if (i>TEXT_ROWS-1)1194 i=TEXT_ROWS-1;1195 WinVert(top,i,win_task);1196 } else {1197 if (left<1)1198 left=1;1199 i=left+doc->max_x-doc->min_x;1200 if (i>TEXT_COLS-2)