Team Ai
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes847downloads
DocRecalc.txt1326 linesDownload Raw Back to DolDoc
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)

Showing the first 1,200 of 1326 lines. Download the file for the rest.