Team Ai
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes847downloads
DocGet.txt245 linesDownload Raw Back to DolDoc
1 2#help_index "DolDoc"3 4U0 EdUndoFilter(CDoc *doc)5{6  Bool unlock=DocLock(doc);7  CDocEntry *doc_ce=doc->head.next;8  while (doc_ce!=doc) {9    doc_ce->de_flags&=~DOCEF_FILTER_SKIP;10    doc_ce=doc_ce->next;11  }12  doc->find_replace->filter_lines=0;13  if (unlock)14    DocUnlock(doc);15}16 17public I64 DocGetKey(I64 *_sc=NULL)18{//Called by View. You probably don't need this.19  I64 ch,sc;20  Bool cont,old_key_desc;21  do {22    old_key_desc=LBtr(&Fs->win_inhibit,WIf_SELF_KEY_DESC);23    do ch=GetKey(&sc,TRUE);24    while (sc&SCF_KEY_DESC);25    LBEqu(&Fs->win_inhibit,WIf_SELF_KEY_DESC,old_key_desc);26 27    DocRecalc(DocPut);28    cont=FALSE;29    if ((ch==CH_ESC || ch==CH_SHIFT_ESC) && //Check for exit filter mode30          DocPut && DocPut->find_replace->filter_lines) {31      EdUndoFilter(DocPut);32      cont=TRUE;33    }34  } while (cont);35  if (_sc) *_sc=sc;36  return ch;37}38 39#help_index "DolDoc/Input;StdIn/DolDoc"40public U8 *DocScanLine(CDoc *doc,CDocEntry *doc_e,41        I64 *cur_col=NULL,CDocEntry **_do_e_end=NULL)42{//Start at entry in doc,make and return one line as str.43  CDocEntry *doc_e2=doc_e;44  Bool unlock=DocLock(doc);45  U8 *dst,*src,*start,*res;46  I64 i=0;47  if (cur_col)48    *cur_col=-1;49  while (doc_e2!=doc && doc_e2->type_u8!=DOCT_NEW_LINE) {50    if (doc_e2->de_flags&DOCEF_TAG && doc_e2->tag) {51      src=doc_e2->tag;52      i+=StrLen(src);53    } else if (doc_e2->type_u8==DOCT_TAB)54      i++;55    else if (doc_e2->type_u8==DOCT_SHIFTED_X ||56          doc_e2->type_u8==DOCT_SHIFTED_Y) {57      if (doc_e2->attr<0)58        i++;59      i+=6; //$SY,3$60    }61    doc_e2=doc_e2->next;62  }63  res=MAlloc(i+1);64  dst=res;65  while (doc_e!=doc && doc_e->type_u8!=DOCT_NEW_LINE) {66    start=dst;67    if (doc_e->de_flags&DOCEF_TAG && doc_e->tag) {68      src=doc_e->tag;69      while (*src)70        *dst++=*src++;71    } else if (doc_e->type_u8==DOCT_TAB)72      *dst++='\t';73    else if (doc_e->type_u8==DOCT_SHIFTED_Y) {74      *dst(U32 *)++='$SY,';75      if (doc_e->attr<0)76        *dst++='-';77      *dst++='0'+AbsI64(doc_e->attr); //Supposedly -7 to 7 (single digit)78      *dst++='$';79    } else if (doc_e->type_u8==DOCT_SHIFTED_X) {80      *dst(U32 *)++='$SX,';81      if (doc_e->attr<0)82        *dst++='-';83      *dst++='0'+AbsI64(doc_e->attr); //Supposedly -7 to 7 (single digit)84      *dst++='$';85    }86    if (doc_e==doc->cur_entry && cur_col)87      *cur_col=start-res+doc->cur_col;88    doc_e=doc_e->next;89  }90  if (_do_e_end) *_do_e_end=doc_e;91  *dst=0;92  if (doc_e==doc->cur_entry && cur_col && !doc->cur_col)93    *cur_col=dst-res;94  if (unlock)95    DocUnlock(doc);96  return res;97}98 99U8 *DocGetStr2(I64 flags=0)100{//Flags101  CDoc *doc;102  CDocEntry *doc_e,*doc_e_end;103  U8 *st,*st2,*res;104  I64 ch,sc;105  "$PT$";106  do {107    ch=DocGetKey(&sc);108    if (ch==CH_ESC) {109      if (doc=DocPut) {110        DocLock(doc);111        if (doc->doc_signature==DOC_SIGNATURE_VAL && doc->cur_entry!=doc) {112          doc_e=DocEntryCopy(doc,doc->cur_entry);113          DocBottom(doc);114          DocEntryRun(doc,doc_e,TRUE);115          DocEntryDel(doc,doc_e);116        }117        DocUnlock(doc);118      }119      if (flags&GSF_WITH_NEW_LINE)120        break;121    } if (ch==CH_SHIFT_ESC) {122      if (flags&GSF_SHIFT_ESC_EXIT)123        Exit;124      else {125        res=StrNew("");126        goto gs_done;127      }128    }129//<CTRL-SHIFT-ENTER> is a blank line without entry130  } while (flags&GSF_WITH_NEW_LINE || ch!='\n' ||131        sc&SCF_CTRL && sc&SCF_SHIFT);132 133  doc=DocPut;134  DocLock(doc);135  if (flags&GSF_WITH_NEW_LINE) {136    doc_e=doc->cur_entry;137    do doc_e=doc_e->last;138    while (doc_e!=doc && doc_e->type_u8!=DOCT_PMT);139    doc_e=doc_e->next;140    if (res=DocScanLine(doc,doc_e,NULL,&doc_e_end)) {141      while (doc_e_end!=doc && doc_e_end->type_u8==DOCT_NEW_LINE) {142        st2=MStrPrint("%s\n",res);143        Free(res);144        res=st2;145        if (st=DocScanLine(doc,doc_e_end->next,NULL,&doc_e_end)) {146          st2=MStrPrint("%s%s",res,st);147          Free(st);148          Free(res);149          res=st2;150        }151      }152    }153  } else {154    doc_e=doc->cur_entry;155    do doc_e=doc_e->last;156    while (doc_e!=doc && doc_e->type_u8!=DOCT_NEW_LINE &&157          doc_e->type_u8!=DOCT_PMT);158    if (doc_e!=doc && doc_e->type_u8!=DOCT_PMT) {159      do doc_e=doc_e->last;160      while (doc_e!=doc && doc_e->type_u8!=DOCT_NEW_LINE &&161            doc_e->type_u8!=DOCT_PMT);162    }163    doc_e=doc_e->next;164    res=DocScanLine(doc,doc_e,NULL);165  }166  DocUnlock(doc);167gs_done:168  "$PT$$FG$$BG$";169  return res;170}171 172#help_index "Keyboard Devices;Char/Input;StdIn"173public I64 GetI64(U8 *msg=NULL,I64 dft=0,I64 lo=I64_MIN,I64 hi=I64_MAX)174{//Prompt user for I64 expression.175  Bool okay;176  U8 *st;177  I64 res;178  while (TRUE) {179    if (msg)180      "" msg,dft;181    st=GetStr;182    if (!*st) {183      Free(st);184      return dft;185    }186    try {187      res=ExePrint2("ToI64(%s);",st);188      okay=TRUE;189    } catch {190      Fs->catch_except=TRUE;191      okay=FALSE;192    }193    Free(st);194    if (okay && lo<=res<=hi)195      return res;196  }197}198 199public F64 GetF64(U8 *msg=NULL,F64 dft=0,F64 lo=F64_MIN,F64 hi=F64_MAX)200{//Prompt user for F64 expression.201  Bool okay;202  U8 *st;203  F64 res;204  while (TRUE) {205    if (msg)206      "" msg,dft;207    st=GetStr;208    if (!*st) {209      Free(st);210      return dft;211    }212    try {213      res=ExePrint2("ToF64(%s);",st)(F64);214      okay=TRUE;215    } catch {216      Fs->catch_except=TRUE;217      okay=FALSE;218    }219    Free(st);220    if (okay && lo<=res<=hi)221      return res;222  }223}224 225public CDate GetDate(U8 *msg=NULL,CDate dft=I64_MIN,226        CDate lo=I64_MIN,CDate hi=I64_MAX)227{//Prompt user for date expression. (Use Now() if you want current time.)228  U8 *st;229  CDate res;230  if (dft==I64_MIN) dft=Now;231  while (TRUE) {232    if (msg)233      "" msg,dft,dft;234    st=GetStr;235    if (!*st) {236      Free(st);237      return dft;238    }239    res=Str2Date(st);240    Free(st);241    if (res>=lo && res<=hi)242      return res;243  }244}245