Team Ai
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes847downloads
ARegistry.txt205 linesDownload Raw Back to Adam
1 2#help_index "Registry"3#define REGISTRY_FILENAME "~/Registry.HC.Z"4CDoc *sys_registry_doc=NULL;5I64 sys_msg_flags[1]={0};6F64 registry_version;7 8Bool RegCache()9{10  Bool old_silent;11  if (!sys_registry_doc) {12    old_silent=Silent;13    sys_registry_doc=DocRead(REGISTRY_FILENAME);14    Silent(old_silent);15    return FALSE;16  } else17    return TRUE;18}19 20public Bool RegDft(U8 *path,U8 *val,Bool is_adam_entry=FALSE)21{//Add code doc tree branch to registry.22  Bool res,unlock_doc;23  RegCache;24  unlock_doc=DocLock(sys_registry_doc);25  if (!DocTreeFind(sys_registry_doc,path)) {26    DocTreeMake(sys_registry_doc,path);27    DocPrint(sys_registry_doc,"%s",val);28    if (is_adam_entry) {29      if (Fs==adam_task)30        ExePrint("%s",val);31      else32        Adam("%s",val);33    }34    if (DrvIsWritable(*sys_registry_doc->filename.name))35      DocWrite(sys_registry_doc);36    res=FALSE;37  } else38    res=TRUE;39  if (unlock_doc)40    DocUnlock(sys_registry_doc);41  return res;42}43 44public I64 RegExe(U8 *path)45{//Execute doc tree branch in registry.46  RegCache;47  return DocTreeExe(sys_registry_doc,path);48}49 50public Bool RegWrite(U8 *path,U8 *fmt,...)51{//Rewrite doc tree branch in registry.52  Bool res;53  RegCache;54  res=DocTreeWriteJoin(sys_registry_doc,path,TRUE,fmt,argc,argv);55  return res;56}57 58public I64 RegCnt(U8 *path)59{//Tree branch cnt in registry.60  I64 res=0;61  CDocEntry *tree_branch,*start_indent,*end_indent;62  Bool unlock_doc=DocLock(sys_registry_doc);63  if (DocTreeFind(sys_registry_doc,path,64        &tree_branch,&start_indent,&end_indent)) {65    end_indent=end_indent->next;66    while (start_indent!=end_indent) {67      res++;68      start_indent=start_indent->next;69    }70  }71  if (unlock_doc)72    DocUnlock(sys_registry_doc);73  return res;74}75 76public Bool RegAppend(U8 *path,U8 *fmt,...)77{//Append to doc tree branch in registry.78  Bool res;79  RegCache;80  res=DocTreeAppendJoin(sys_registry_doc,path,TRUE,fmt,argc,argv);81  return res;82}83 84public Bool OneTimePopUp(U8 *_flags,I64 flag_num,U8 *msg)85{//See ::/Apps/X-Caliber/X-Caliber.HC.86  Bool res=FALSE;87  CDoc *doc=DocNew;88  CDocEntry *doc_e;89  if (!Bt(_flags,flag_num)) {90    if (msg) DocPrint(doc,"%s",msg);91    doc_e=DocPrint(doc,"\n$CB,\"Do not show this msg again.\",LE=1$");92    DocPrint(doc,"$CM+CX,0,4$$BT,\"OKAY\",LE=1$\n");93    if (PopUpMenu(doc)==1 && doc_e->de_flags&DOCEF_CHECKED_COLLAPSED) {94      LBts(_flags,flag_num);95      res=TRUE;96    }97    DocDel(doc);98  }99  return res;100}101 102U0 RegOneTimePopUp(I64 flag_num,U8 *msg)103{//You're not supposed to make system pop-up flags, only me.104  if (OneTimePopUp(sys_msg_flags,flag_num,msg))105    RegWrite("Adam/SysMsgFlags","sys_msg_flags[0]=0x%X;\n",106          sys_msg_flags[0]);107}108 109U0 RegInit()110{111  U8 buf[STR_LEN];112  Bool version_present;113  RegDft("Adam/SysMsgFlags","sys_msg_flags[0]=0;\n",TRUE);114  StrPrint(buf,"registry_version=%4.3f;\n",sys_os_version);115  version_present=RegDft("Adam/SysRegVer",buf,TRUE);116  RegExe("Adam");117  if (registry_version!=sys_os_version) {118    RegWrite("Adam/SysRegVer",buf);119    RegExe("Adam");120  }121}122 123#help_index "Boot/Once;Registry/Once"124#help_file "::/Doc/Once"125 126public U0 AOnceFlush()127{//Flush AOnce() buf.128  RegWrite("Once/Adam","");129}130 131public U0 OnceFlush()132{//Flush Once() buf.133  RegWrite("Once/User","");134}135 136public U0 AOnce(U8 *fmt,...)137{//Add Adam code to ~/Registry.HC, executed next boot.138  U8 *buf=StrPrintJoin(NULL,fmt,argc,argv);139  if (!Bt(&sys_run_level,RLf_ONCE_ADAM))140    AOnceFlush;141  RegAppend("Once/Adam","%s\n",buf);142  Free(buf);143}144 145public U0 Once(U8 *fmt,...)146{//Add User code to ~/Registry.HC, executed next boot.147  U8 *buf=StrPrintJoin(NULL,fmt,argc,argv);148  if (!Bt(&sys_run_level,RLf_ONCE_USER))149    OnceFlush;150  RegAppend("Once/User","%s\n",buf);151  Free(buf);152}153 154public U0 AOnceDrv(U8 drv_let=0,U8 *fmt,...)155{//Add Adam code to drv ~/Registry.HC, executed next boot.156  U8 *buf=StrPrintJoin(NULL,fmt,argc,argv);157  I64 old_drv_let=*sys_registry_doc->filename.name;158  if (drv_let)159    *sys_registry_doc->filename.name=drv_let;160  if (!Bt(&sys_run_level,RLf_ONCE_ADAM))161    AOnceFlush;162  RegAppend("Once/Adam","%s\n",buf);163  Free(buf);164  *sys_registry_doc->filename.name=old_drv_let;165}166 167public U0 OnceDrv(U8 drv_let=0,U8 *fmt,...)168{//Add User code to drv ~/Registry.HC, executed next boot.169  U8 *buf=StrPrintJoin(NULL,fmt,argc,argv);170  I64 old_drv_let=*sys_registry_doc->filename.name;171  if (drv_let)172    *sys_registry_doc->filename.name=drv_let;173  if (!Bt(&sys_run_level,RLf_ONCE_USER))174    OnceFlush;175  RegAppend("Once/User","%s\n",buf);176  Free(buf);177  *sys_registry_doc->filename.name=old_drv_let;178}179 180public U0 OnceExe()181{//Execute Once code. Call goes in ~/Once.HC.182  try {183 184    RegDft("Once/Adam","");185    if (RegCnt("Once/Adam")>2) {186      Adam("RegExe(\"Once/Adam\");");187      AOnceFlush;188    }189    LBts(&sys_run_level,RLf_ONCE_ADAM);190 191    RegDft("Once/User","");192    if (RegCnt("Once/User")>2) {193      RegExe("Once/User");194      OnceFlush;195    }196    LBts(&sys_run_level,RLf_ONCE_USER);197 198  } catch {199    AOnceFlush;200    LBts(&sys_run_level,RLf_ONCE_ADAM);201    OnceFlush;202    LBts(&sys_run_level,RLf_ONCE_USER);203  }204}205