Team Ai
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes832downloads
DocPutKey.txt731 linesDownload Raw Back to DolDoc
1 2#help_index "DolDoc/Output;StdOut/DolDoc"3 4public U0 DocPutKey(CDoc *doc,I64 ch=0,I64 sc=0)5{//PutKey(ch,sc) at doc insert pt, cur_entry.6  I64 i,x,y;7  CDoc *m;8  CDocEntry *doc_ce;9  U8 *st,*st2;10  Bool unlock;11 12  if (!doc && !(doc=DocPut) || doc->doc_signature!=DOC_SIGNATURE_VAL)13    return;14  if (doc->user_put_key && (*doc->user_put_key)(doc,doc->user_put_data,ch,sc))15    return;16  unlock=DocLock(doc);17  if (!Bt(doldoc.clean_scan_codes,sc.u8[0]))18    doc->flags|=DOCF_UNDO_DIRTY;19  DocCaptureUndo(doc);20  if (Bt(char_bmp_printable,ch) && !(sc&(SCF_CTRL|SCF_ALT))) {21    if (sc&SCF_KEY_DESC) {22      st=Char2KeyName(ch,FALSE);23      KeyDescSet("Char  /'%s'",st);24      Free(st);25    } else26      EdCharIns(ch,sc,doc);27  } else {28    doc_ce=doc->cur_entry;29    x=doc->x; y=doc->y;30    if (sc&SCF_ALT)31      switch (ch) {32        case CH_BACKSPACE: //<CTRL-H>33          if (!(sc&(SCF_SHIFT|SCF_CTRL))) {34            if (sc&SCF_KEY_DESC)35              KeyDescSet("Edit/Undo");36            else37              DocUndoRestore(doc);38          }39          break;40      }41    else42      switch (ch) {43        case 0:44          switch (sc.u8[0]) {45            case SC_CURSOR_DOWN:46              if (!(sc&SCF_CTRL)) {47                if (sc&SCF_KEY_DESC) {48                  if (sc&SCF_SHIFT)49                    KeyDescSet("Edit/Cursor Down, Sel");50                  else51                    KeyDescSet("Edit/Cursor Down");52                } else53                  EdLineDown(doc,sc);54                break;55              } else56                sc&=~SCF_CTRL;57//Fall Through to SC_END58            case SC_END:59              if (!(sc&SCF_CTRL)) {60                if (sc&SCF_KEY_DESC) {61                  if (sc&SCF_SHIFT)62                    KeyDescSet("Edit/GoTo Doc End, Sel");63                  else64                    KeyDescSet("Edit/GoTo Doc End");65                } else {66                  while (doc_ce!=doc) {67                    BEqu(&doc_ce->type,DOCEt_SEL,sc&SCF_SHIFT);68                    doc_ce=doc->cur_entry=doc_ce->next;69                  }70                  doc->cur_col=doc_ce->min_col;71                  DocFormBwd(doc);72                }73              }74              break;75            case SC_CURSOR_UP:76              if (!(sc&SCF_CTRL)) {77                if (sc&SCF_KEY_DESC) {78                  if (sc&SCF_SHIFT)79                    KeyDescSet("Edit/Cursor Up, Sel");80                  else81                    KeyDescSet("Edit/Cursor Up");82                } else83                  EdLineUp(doc,sc);84                break;85              } else86                sc&=~SCF_CTRL;87//Fall Through to SC_HOME88            case SC_HOME:89              if (!(sc&SCF_CTRL)) {90                if (sc&SCF_KEY_DESC) {91                  if (sc&SCF_SHIFT)92                    KeyDescSet("Edit/GoTo Top of Doc, Sel");93                  else94                    KeyDescSet("Edit/GoTo Top of Doc");95                } else {96                  if (doc_ce==doc) doc_ce=doc_ce->last;97                  while (doc_ce!=doc) {98                    BEqu(&doc_ce->type,DOCEt_SEL,sc&SCF_SHIFT);99                    doc_ce=doc->cur_entry=doc_ce->last;100                  }101                  doc_ce=doc->cur_entry=doc->head.next;102                  doc->cur_col=doc_ce->min_col;103                  DocFormFwd(doc);104                }105              }106              break;107            case SC_PAGE_DOWN:108              if (!(sc&SCF_CTRL)) {109                if (sc&SCF_KEY_DESC) {110                  if (sc&SCF_SHIFT)111                    KeyDescSet("Edit/Page Down, Sel");112                  else113                    KeyDescSet("Edit/Page Down");114                } else {115                  i=doc_ce->y+doc->win_task->win_height-1;116                  if (doc_ce->type_u8==DOCT_HEX_ED)117                    i+=doc->cur_col/3/doc_ce->hex_ed_width;118                  while (doc_ce!=doc &&119                        (doc_ce->type_u8!=DOCT_HEX_ED && doc_ce->y<i ||120                        doc_ce->type_u8==DOCT_HEX_ED &&121                        doc_ce->y+doc->cur_col/3/doc_ce->hex_ed_width<i)) {122                    EdLineDown(doc,sc);123//paranoid check for stuck on same node124                    if (doc->cur_entry==doc_ce && doc_ce->type_u8!=DOCT_HEX_ED)125                      break;126                    doc_ce=doc->cur_entry;127                  }128                }129              }130              break;131            case SC_PAGE_UP:132              if (!(sc&SCF_CTRL)) {133                if (sc&SCF_KEY_DESC) {134                  if (sc&SCF_SHIFT)135                    KeyDescSet("Edit/Page Up, Sel");136                  else137                    KeyDescSet("Edit/Page Up");138                }else {139                  i=doc_ce->y-(doc->win_task->win_height-1);140                  if (doc_ce->type_u8==DOCT_HEX_ED)141                    i+=doc->cur_col/3/doc_ce->hex_ed_width;142                  while (doc_ce->last!=doc &&143                        (doc_ce->type_u8!=DOCT_HEX_ED && doc_ce->y>i ||144                        doc_ce->type_u8==DOCT_HEX_ED &&145                        doc_ce->y+doc->cur_col/3/doc_ce->hex_ed_width>i) &&146                        doc_ce->y!=doc->head.next->y) {147                    EdLineUp(doc,sc);148//paranoid check for stuck on same node149                    if (doc->cur_entry==doc_ce && doc_ce->type_u8!=DOCT_HEX_ED)150                      break;151                    doc_ce=doc->cur_entry;152                  }153                }154              }155              break;156            case SC_CURSOR_LEFT:157              if (sc&SCF_KEY_DESC) {158                if (sc&SCF_CTRL)159                  KeyDescSet("Edit/GoTo Start of Line");160                else {161                  if (sc&SCF_SHIFT)162                    KeyDescSet("Edit/Cursor Left, Sel");163                  else164                    KeyDescSet("Edit/Cursor Left");165                }166              } else167                EdCursorLeft(doc,sc);168              break;169            case SC_CURSOR_RIGHT:170              if (sc&SCF_KEY_DESC) {171                if (sc&SCF_CTRL)172                  KeyDescSet("Edit/GoTo End of Line");173                else {174                  if (sc&SCF_SHIFT)175                    KeyDescSet("Edit/Cursor Right, Sel");176                  else177                    KeyDescSet("Edit/Cursor Right");178                }179              } else180                EdCursorRight(doc,sc);181              break;182            case SC_DELETE:183              if (!(sc&SCF_CTRL)) {184                if (sc&SCF_KEY_DESC) {185                  if (sc&SCF_SHIFT)186                    KeyDescSet("Edit/Cut To Clip");187                  else188                    KeyDescSet("Char  /Delete");189                } else {190                  if (sc&SCF_SHIFT)191                    ClipCut(doc);192                  else193                    EdCharDel(doc);194                }195              }196              break;197            case SC_INS:198              if (sc&(SCF_SHIFT|SCF_CTRL)!=(SCF_SHIFT|SCF_CTRL)) {199                if (sc&SCF_KEY_DESC) {200                  if (sc&SCF_SHIFT)201                    KeyDescSet("Edit/Paste Clip");202                  else if (sc&SCF_CTRL)203                    KeyDescSet("Edit/Copy to Clip");204                  else205                    KeyDescSet("Edit/Toggle Overstrike");206                } else {207                  if (sc&SCF_SHIFT)208                    ClipPaste(doc);209                  else if (sc&SCF_CTRL)210                    ClipCopy(doc);211                  else212                    doc->flags^=DOCF_OVERSTRIKE;213                }214              }215              break;216            case SC_F1...SC_F10:217              if (sc&SCF_CTRL) {218                if (sc&SCF_KEY_DESC) {219                  if (sc&SCF_SHIFT)220                    KeyDescSet("Cmd /Src Code of Sym");221                  else222                    KeyDescSet("Edit/Autocomplete Sym");223                } else {224                  DocUnlock(doc);225                  if (AutoComplete(ON)) {226                    if (sc&SCF_SHIFT)227                      ACMan(sc.u8[0]-SC_F1+1,Fs);228                    else229                      ACFillIn(sc.u8[0]-SC_F1+1);230                  }231                  DocLock(doc);232                }233              } else {234                switch (sc.u8[0]) {235                  case SC_F1:236                    if (sc&SCF_KEY_DESC) {237                      if (sc&SCF_SHIFT)238                        KeyDescSet("Cmd /About");239                      else240                        KeyDescSet("Cmd /Help");241                    } else {242                      if (sc&SCF_SHIFT)243                        Ed("::/Doc/AboutTempleOS.DD.Z");244                      else245                        Ed("::/Doc/HelpIndex.DD.Z");246                    }247                    break;248                  case SC_F2:249                    if (sc&SCF_KEY_DESC) {250                      if (sc&SCF_SHIFT)251                        KeyDescSet("Edit/Play Macro");252                      else253                        KeyDescSet("Edit/Macro");254                    } else {255                      DocUnlock(doc);256                      if (sc&SCF_SHIFT) {257                        if (TaskValidate(sys_macro_task))258                          PostMsgWait(sys_macro_task,259                                MSG_KEY_DOWN_UP,CH_SHIFT_ESC,0);260                        SysMacroStripKey(&sys_macro_head,ch,sc);261                        PlaySysMacro;262                      } else263                        EdMacroUtil;264                      DocLock(doc);265                    }266                    break;267                  case SC_F3:268                    if (sc&SCF_KEY_DESC) {269                      if (sc&SCF_SHIFT)270                        KeyDescSet("Edit/Find Last");271                      else272                        KeyDescSet("Edit/Find Next");273                    }else {274                      doc->find_replace->scan_fwd=!(sc&SCF_SHIFT);275                      EdFindNext(doc);276                    }277                    break;278                  case SC_F4:279                    if (sc&SCF_KEY_DESC) {280                      if (sc&SCF_SHIFT)281                        KeyDescSet("Cmd /Insert Directory Name");282                      else283                        KeyDescSet("Cmd /Insert FileName");284                    } else {285                      DocUnlock(doc);286                      if (sc&SCF_SHIFT)287                        st=PopUpPickDir;288                      else289                        st=PopUpPickFile;290                      DocLock(doc);291                      if (st) {292                        DocPrintPartial(doc,"%s",st);293                        Free(st);294                      }295                    }296                    break;297                  case SC_F5:298                    if (sc&SCF_KEY_DESC) {299                      if (sc&SCF_SHIFT)300                        KeyDescSet("Cmd /Adam Include");301                      else302                        KeyDescSet("Cmd /Run (Execute)");303                    } else {304                      if (st2=DocEntryLink(doc,doc_ce)) {305                        st=DocLinkFile(st2);306                        Free(st2);307                      } else {308                        DocWrite(doc);309                        st=StrNew(doc->filename.name);310                      }311                      if (st2=DirFile(st,"Run","HC.Z")) {312                        if (FileFind(st2)) {313                          Free(st);314                          st=st2;315                        } else316                          Free(st2);317                      }318                      if (st) {319                        if (sc&SCF_SHIFT)320                          AdamFile(st);321                        else322                          PopUpFile(st);323                        Free(st);324                      }325                    }326                    break;327                  case SC_F6:328                    if (sc&SCF_KEY_DESC) {329                      if (sc&SCF_SHIFT)330                        KeyDescSet("Cmd /God Doodle");331                      else332                        KeyDescSet("Cmd /God Song");333                    } else {334//::/Adam/God/HSNotes.DD335                      if (sc&SCF_SHIFT) {336                        DocUnlock(doc);337                        GodDoodle;338                        DocLock(doc);339                      } else340                        GodSong;341                    }342                    break;343                  case SC_F7:344                    if (sc&SCF_KEY_DESC) {345                      if (sc&SCF_SHIFT)346                        KeyDescSet("Cmd /God Passage");347                      else348                        KeyDescSet("Cmd /God Word");349                    } else {350//::/Adam/God/HSNotes.DD351                      FifoU8Flush(god.fifo);352                      GodBitsIns(GOD_GOOD_BITS,KbdMsEvtTime>>GOD_BAD_BITS);353                      if (sc&SCF_SHIFT)354                        GodBiblePassage;355                      else356                        GodWord;357                    }358                    break;359                }360              }361              break;362          }363          break;364        case CH_CTRLA:365          if (!(sc&SCF_SHIFT)) {366            if (sc&SCF_KEY_DESC)367              KeyDescSet("Edit/Save As");368            else if (DocWrite(doc,TRUE)&&(st=FileNameAbs(doc->filename.name))) {369              DirContextDel(doc->filename.dirc);370              doc->filename.dirc=DirContextNew(st);371              Free(st);372            }373          }374          break;375        case CH_CTRLB:376          if (!(sc&SCF_SHIFT)) {377            if (sc&SCF_KEY_DESC)378              KeyDescSet("Cmd /Toggle Border");379            else380              WinBorder(Bt(&doc->win_task->display_flags,381                    DISPLAYf_NO_BORDER),doc->win_task);382          }383          break;384        case CH_CTRLC:385          if (!(sc&SCF_SHIFT)) {386            if (sc&SCF_KEY_DESC)387              KeyDescSet("Edit/Copy to Clip");388            else389              ClipCopy(doc);390          }391          break;392        case CH_CTRLD:393          if (!(sc&SCF_SHIFT)) {394            if (sc&SCF_KEY_DESC)395              KeyDescSet("Cmd /File Manager");396            else {397              DocUnlock(doc);398              FileMgr;399              DocLock(doc);400            }401          }402          break;403        case CH_CTRLF:404          if (sc&SCF_SHIFT) {405            if (sc&SCF_KEY_DESC)406              KeyDescSet("Cmd /Search Files");407            else408              FindWiz;409          } else {410            if (sc&SCF_KEY_DESC)411              KeyDescSet("Edit/Find & Replace");412            else413              EdFindReplace(doc);414          }415          break;416        case CH_CTRLG:417          if (!(sc&SCF_SHIFT)) {418            if (sc&SCF_KEY_DESC)419              KeyDescSet("Edit/GoTo Line Num");420            else421              EdGoToLine(doc);422          }423          break;424        case CH_BACKSPACE: //<CTRL-H>425          if (!(sc&SCF_SHIFT)) {426            if (sc&SCF_KEY_DESC)427              KeyDescSet("Char  /Back Space");428            else {429              DocCaptureUndo(doc);430              doc_ce=doc->cur_entry;431              if (doc->cur_col<=doc_ce->min_col) {432                doc_ce=doc->cur_entry=doc_ce->last;433                if (doc_ce!=doc && doc_ce->type_u8==DOCT_SOFT_NEW_LINE)434                  doc_ce=doc->cur_entry=doc_ce->last;435                if (doc_ce==doc || doc_ce->type_u8==DOCT_PMT) {436                  doc_ce=doc->cur_entry=doc_ce->next;437                  doc->cur_col=doc_ce->min_col;438                } else {439                  doc->cur_col=doc_ce->max_col;440                  if (doc->cur_col>doc_ce->min_col)441                    doc->cur_col--;442                  EdCharDel(doc);443                }444              } else {445                doc->cur_col--;446                EdCharDel(doc);447              }448            }449          }450          break;451        case CH_CTRLI:452          if (sc.u8[0]!=SC_TAB) {453            if (sc&SCF_SHIFT) {454              if (sc&SCF_KEY_DESC)455                KeyDescSet("Dol /Unindent 2");456              else457                DocPrint(doc,"$ID,-2$");458            } else {459              if (sc&SCF_KEY_DESC)460                KeyDescSet("Dol /Indent 2");461              else462                DocPrint(doc,"$ID,2$");463            }464          }465          break;466        case '\n':467          if (sc&SCF_KEY_DESC) {468            if (sc&SCF_SHIFT)469              KeyDescSet("Char  /Return");470            else471              KeyDescSet("Char  /Page Break");472          } else473            EdCharIns(ch,sc,doc);474          break;475        case CH_CTRLK:476          if (sc&SCF_SHIFT) {477            if (sc&SCF_KEY_DESC)478              KeyDescSet("Dol /Blinking Text Off");479            else480              DocPrint(doc,"$BK,0$");481          } else {482            if (sc&SCF_KEY_DESC)483              KeyDescSet("Dol /Blinking Text On");484            else485              DocPrint(doc,"$BK,1$");486          }487          break;488        case CH_CTRLL:489          if (sc&SCF_SHIFT) {490            if (sc&SCF_KEY_DESC)491              KeyDescSet("Cmd /Code Tools");492            else {493              DocUnlock(doc);494              EdCodeTools(doc);495              DocLock(doc);496            }497          } else {498            if (sc&SCF_KEY_DESC)499              KeyDescSet("Cmd /Insert Text Widgets Wizard");500            else {501              DocUnlock(doc);502              EdInsWidgetWiz;503              DocLock(doc);504            }505          }506          break;507        case CH_CTRLM:508          if (sc&SCF_SHIFT) {509            if (sc&SCF_KEY_DESC)510              KeyDescSet("Cmd /Personal Notes");511            else512              Ed("~/PersonalNotes.DD.Z");513          } else {514            if (sc&SCF_KEY_DESC)515              KeyDescSet("Cmd /Personal Menu");516            else {517              m=DocRead("~/PersonalMenu.DD.Z");518              DocMenu(m);519              DocDel(m);520            }521          }522          break;523        case CH_CTRLO:524          if (sc&SCF_SHIFT) {525            if (sc&SCF_KEY_DESC)526              KeyDescSet("Edit/Collapse");527            else528              DocCollapse(TRUE,doc);529          } else {530            if (sc&SCF_KEY_DESC)531              KeyDescSet("Edit/Uncolapse");532            else533              DocCollapse(FALSE,doc);534          }535          break;536        case CH_CTRLP:537          if (doc->flags & (DOCF_SUPERSCRIPT_MODE | DOCF_SUBSCRIPT_MODE)) {538            if (sc&SCF_KEY_DESC)539              KeyDescSet("Dol /Toggle Super or Sub script");540            else {541              DocPrint(doc,"$SY,0$");542              doc->flags&=~(DOCF_SUPERSCRIPT_MODE | DOCF_SUBSCRIPT_MODE);543            }544          } else if (sc&SCF_SHIFT) {545            if (sc&SCF_KEY_DESC)546              KeyDescSet("Dol /Toggle Subscript");547            else {548              DocPrint(doc,"$SY,3$");549              doc->flags|=DOCF_SUBSCRIPT_MODE;550            }551          } else {552            if (sc&SCF_KEY_DESC)553              KeyDescSet("Dol /Toggle Superscript");554            else {555              DocPrint(doc,"$SY,-3$");556              doc->flags|=DOCF_SUPERSCRIPT_MODE;557            }558          }559          break;560        case CH_CTRLQ:561          break;562        case CH_CTRLR:563          if (!(sc&SCF_SHIFT)) {564            if (sc&SCF_KEY_DESC)565              KeyDescSet("Cmd /Sprite Graphic Resource");566            else567              if (!(doc->flags&DOCF_FORM) &&568                    !(doc->flags&(DOCF_PLAIN_TEXT|DOCF_PLAIN_TEXT_TABS))) {569                DocUnlock(doc);570                if (doc_ce->type_u8==DOCT_SPRITE)571                  EdSpriteEd(doc);572                else573                  EdSpriteIns(doc);574                DocLock(doc);575              }576          }577          break;578        case CH_CTRLS:579          if (sc&SCF_SHIFT) {580            if (sc&SCF_KEY_DESC)581              KeyDescSet("Edit/Toggle AutoSave");582            else583              LBtc(&doc->flags,DOCf_AUTO_SAVE);584          } else {585            if (sc&SCF_KEY_DESC)586              KeyDescSet("Edit/Save");587            else588              DocWrite(doc);589          }590          break;591        case CH_CTRLT:592          if (sc&SCF_SHIFT) {593            if (sc&SCF_KEY_DESC)594              KeyDescSet("Edit/Single Entry Toggle Plain Text");595            else if (!(doc->flags&DOCF_FORM))596              DocEntryToggle(doc);597          } else {598            if (sc&SCF_KEY_DESC)599              KeyDescSet("Edit/Toggle Plain Text Display");600            else if (!(doc->flags&DOCF_FORM))601              DocFlagsToggle(doc,DOCF_PLAIN_TEXT);602          }603          break;604        case CH_CTRLU:605          if (sc&SCF_SHIFT) {606            if (sc&SCF_KEY_DESC)607              KeyDescSet("Dol /Underline Off");608            else609              DocPrint(doc,"$UL,0$");610          } else {611            if (sc&SCF_KEY_DESC)612              KeyDescSet("Dol /Underline On");613            else614              DocPrint(doc,"$UL,1$");615          }616          break;617        case CH_CTRLV:618          if (!(sc&SCF_SHIFT)) {619            if (sc&SCF_KEY_DESC)620              KeyDescSet("Edit/Paste Clip");621            else622              ClipPaste(doc);623          }624          break;625        case CH_CTRLW:626          if (sc&SCF_SHIFT) {627            if (sc&SCF_KEY_DESC)628              KeyDescSet("Dol /Word Wrap Off");629            else630              DocPrint(doc,"$WW,0$");631          } else {632            if (sc&SCF_KEY_DESC)633              KeyDescSet("Dol /Word Wrap On");634            else635              DocPrint(doc,"$WW,1$");636          }637          break;638        case CH_CTRLX:639          if (!(sc&SCF_SHIFT)) {640            if (sc&SCF_KEY_DESC)641              KeyDescSet("Edit/Cut To Clip");642            else643              ClipCut(doc);644          }645          break;646        case CH_CTRLY:647          if (!(sc&SCF_SHIFT)) {648            if (sc&SCF_KEY_DESC)649              KeyDescSet("Edit/Delete Line");650            else651              EdLineDel(doc);652          }653          break;654        case CH_CTRLZ:655          if (sc&SCF_SHIFT) {656            if (sc&SCF_KEY_DESC)657              KeyDescSet("Dol /Inverted Text Off");658            else659              DocPrint(doc,"$IV,0$");660          } else {661            if (sc&SCF_KEY_DESC)662              KeyDescSet("Dol /Inverted Text On");663            else664              DocPrint(doc,"$IV,1$");665          }666          break;667        case '0'...'9':668          if (sc&SCF_CTRL) {669            if (sc&SCF_KEY_DESC) {670              if (sc&SCF_SHIFT)671                KeyDescSet("Cmd /Word Definition");672              else673                KeyDescSet("Edit/Autocomplete Word");674            } else {675              if (AutoComplete(ON)) {676                DocUnlock(doc);677                if (sc&SCF_SHIFT)678                  ACDDef(ch-'0',Fs);679                else680                  ACDFillin(ch-'0');681                DocLock(doc);682              }683            }684          }685          break;686        case '[':687          if (sc&SCF_CTRL) {688            if (sc&SCF_SHIFT) {689              if (sc&SCF_KEY_DESC)690                KeyDescSet("Edit/GoTo matching brace");691              else692                EdFindPaired(doc,'}','{',FALSE);693            } else {694              if (sc&SCF_KEY_DESC)695                KeyDescSet("Edit/GoTo matching bracket");696              else697                EdFindPaired(doc,']','[',FALSE);698            }699          }700          break;701        case ']':702          if (sc&SCF_CTRL) {703            if (sc&SCF_SHIFT) {704              if (sc&SCF_KEY_DESC)705                KeyDescSet("Edit/GoTo matching brace");706              else707                EdFindPaired(doc,'{','}',TRUE);708            } else {709              if (sc&SCF_KEY_DESC)710                KeyDescSet("Edit/GoTo matching bracket");711              else712                EdFindPaired(doc,'[',']',TRUE);713            }714          }715          break;716      }717  }718  if (unlock)719    DocUnlock(doc);720  if (!(doc->flags&DOCF_DONT_SWAP_OUT))721    Yield;722}723 724Bool KDDocPutKey(I64 ch,I64 scan_code)725{726  CDoc *doc;727  if (doc=DocPut)728    DocPutKey(doc,ch,scan_code);729  return FALSE;730}731