TempleOSCD_150216.ISO
This commit is contained in:
1 parent
64f679eeb9
commit
401601816c
531 files changed
+23341
-22071
No files matched your search
@@ -1,11 +1,6 @@
|
||||
$WW,1$$FG,5$$TX+CX,"Trivial Solutions"$$FG$
|
||||
$WW,1$$FG,5$$TX+CX,"TempleOS"$$FG$
|
||||
|
||||
|
||||
The $FG,2$$TX,"trivial solution",HTML="http://en.wikipedia.org/wiki/Trivial_solution"$$FG$ in math is the simple, obvious answer. The fable that NASA spent millions on a space pen while Russia used a pencil is an example. TempleOS uses many $LK,"trivial solutions",A="FI:::/Doc/Strategy.TXT"$.
|
||||
|
||||
See $LK,"::/Doc/Acknowledgements.TXT"$.
|
||||
See $LK,"::/Doc/Demands.TXT"$.
|
||||
|
||||
$FG,5$Website:$FG$
|
||||
$TX,"www.templeos.org",HTML="http://www.templeos.org"$
|
||||
|
||||
@@ -19,3 +14,6 @@ $TX,"tdavis@templeos.org",HTML="mailto:tdavis@templeos.org"$
|
||||
|
||||
$FG,5$About Me:$FG$
|
||||
I was a National Merit Scholar with a 1440 SAT at Arizona State University. Here are my $TX,"ASU Transcripts",HTML="http://www.templeos.org/files/ASU_Transcripts.pdf"$. I have a bachelor's in Computer System Engineering from ASU, basically, embedded systems, and a master's in Electrical Engineering from ASU, control systems. I worked as a software, hardware and mechanical engineer at Ticketmaster from 1990-1996. I designed a 3 axis stepper-motor-driven milling machine 1996-1997 with a CAD/CAM package for a company I started called Home Automation and Robotic Equipment. I worked for a company named Xytec Corp. 1997-1999. We made FPGA-based image processing equipment. I wrote $FG,2$$TX,"SimStructure",HTML="http://www.templeos.org/files/SimStrSetUp.zip"$$FG$ from 2000-2001 for H.A.R.E. I worked as head software/electrical engineer for a company called Graphic Technologies, 2001-2002, making replacement chips for toner printer cartridges so they could be refilled.
|
||||
|
||||
$FG,5$Credits:$FG$
|
||||
See $LK,"::/Doc/Credits.TXT"$.
|
||||
@@ -0,0 +1,19 @@
|
||||
$FG,2$$WW,1$AutoComplete$FG$ is the $FG,7$LTGRAY$FG$ window on the right of the screen. $LK,"ACInit",A="MN:ACInit"$() collects words from all text files in subdirectories. Normally, the call to $LK,"ACInit",A="MN:ACInit"$() is in $LK,"AdamSys.CPP",A="FF:/Home/AdamSys.CPP,ACInit"$. It provides auto-complete for typing, jump-to-code and jump-to-dictionary functionality.
|
||||
|
||||
$FG,2$<ALT-SHIFT-A>$FG$ Closes the $FG,7$LTGRAY$FG$ AutoComplete window.
|
||||
$FG,2$<ALT-a>$FG$ Opens the $FG,7$LTGRAY$FG$ AutoComplete window.
|
||||
|
||||
$FG,2$<CTRL-SHIFT-F1>$FG$ Jumps to the source code for 1st symbol in the window.
|
||||
$FG,2$<CTRL-SHIFT-F2>$FG$ Jumps to the source code for 2nd symbol in the window.
|
||||
$FG,2$<CTRL-SHIFT-Fn>$FG$ Jumps to the source code for n-th symbol in the window.
|
||||
$FG,2$<CTRL-F1>$FG$ Autocompletes the 1st symbol in the window.
|
||||
$FG,2$<CTRL-F2>$FG$ Autocompletes the 2nd symbol in the window.
|
||||
$FG,2$<CTRL-Fn>$FG$ Autocompletes the n-th symbol in the window.
|
||||
$FG,2$<CTRL-SHIFT-1>$FG$ Jumps to the dictionary for 1st symbol in the window.
|
||||
$FG,2$<CTRL-SHIFT-2>$FG$ Jumps to the dictionary for 2nd symbol in the window.
|
||||
$FG,2$<CTRL-SHIFT-n>$FG$ Jumps to the dictionary for n-th symbol in the window.
|
||||
$FG,2$<CTRL-1>$FG$ Autocompletes the 1st dictionary word in the window.
|
||||
$FG,2$<CTRL-2>$FG$ Autocompletes the 2nd dictionary word in the window.
|
||||
$FG,2$<CTRL-n>$FG$ Autocompletes the n-th dictionary word in the window.
|
||||
|
||||
If you have the raw Project Gutenberg dictionary file, you can generate the TempleOS processed dictionary files with the stand-alone program $LK,"::/Adam/AutoComplete/ACDictGen.CPP"$.
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
$WW,1$$FG,2$AutoFiles$FG$ are used to generate user input to automate operations. The TempleOS tour is done with an $FG,2$AutoFile$FG$.
|
||||
$WW,1$$FG,2$AutoFiles$FG$ are used to generate user input to automate operations. The TempleOS tour is done with an $FG,2$AutoFile$FG$. It reminds me of a Unix pipe because $FG,2$StdOut$FG$ of one gets chained into $FG,2$StdIn$FG$ of another.
|
||||
|
||||
When an $FG,2$AutoFile$FG$ runs, a child task is $LK,"Spawn",A="MN:Spawn"$()ed which intercepts real user input and generates fake input. AutoFiles are $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ programs run by the child who's stdout goes to the parent's input buffer. $LK,"Msg",A="MN:Msg"$() can be included in an $FG,2$AutoFile$FG$ to send special keys or mouse cmds to the parent. While an $FG,2$AutoFile$FG$ is running, the normal input gets diverted to the AutoFile task and can be filtered and sent back to the parent task. Unless you are driving functions which prompt for data, you can probably use an $FG,2$#include$FG$ file in place of an $FG,2$AutoFile$FG$.
|
||||
When an $FG,2$AutoFile$FG$ runs, a child task is $LK,"Spawn",A="MN:Spawn"$()ed which intercepts real user input and generates fake input. AutoFiles are $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ programs run by the child whose stdout goes to the parent's input buffer. $LK,"Msg",A="MN:Msg"$() can be included in an $FG,2$AutoFile$FG$ to send special keys or mouse cmds to the parent. While an $FG,2$AutoFile$FG$ is running, the normal input gets diverted to the AutoFile task and can be filtered and sent back to the parent task. Unless you are driving functions which prompt for data, you can probably use an $FG,2$#include$FG$ file in place of an $FG,2$AutoFile$FG$.
|
||||
|
||||
See $LK,"::/Demo/AutoFile/AFDir.AUT"$.
|
||||
|
||||
Note: $LK,"Auto",A="MN:Auto"$("") can be used if all you need is to send ASCII characters. It differs from $LK,"AutoStr",A="MN:AutoStr"$(). You'll probably use $LK,"Auto",A="MN:Auto"$() a lot and not $LK,"AutoStr",A="MN:AutoStr"$(). With $LK,"Auto",A="MN:Auto"$(), for example, you can place answers to the prompts for recompiling the $FG,2$Kernel$FG$ module during $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$().
|
||||
Note: $LK,"Auto",A="MN:Auto"$("") can be used if all you need is to send ASCII characters. It differs from $LK,"AutoStr",A="MN:AutoStr"$(). You'll probably use $LK,"Auto",A="MN:Auto"$() a lot and not $LK,"AutoStr",A="MN:AutoStr"$(). With $LK,"Auto",A="MN:Auto"$(), for example, you can place answers to the prompts for recompiling the $FG,2$Kernel$FG$ module during $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$().
|
||||
Binary file not shown.
+267
-326
@@ -2,335 +2,276 @@
|
||||
|
||||
Use $LK,"R",A="MN:R"$() to rename if I change a label.
|
||||
|
||||
$IV,1$----07/16/14 00:59:22----$IV,0$
|
||||
$IV,1$----02/16/15 09:42:32----$IV,0$
|
||||
|
||||
$IV,1$----02/14/15 05:12:45----$IV,0$
|
||||
* Added $LK,"Dump",A="MN:Dump"$().
|
||||
|
||||
$IV,1$----02/13/15 13:46:14----$IV,0$
|
||||
* Got rid of "body_size" in $LK,"GRA Files",A="FI:::/Doc/GRAFiles.TXT.Z"$.
|
||||
|
||||
$IV,1$----02/13/15 09:49:33----$IV,0$
|
||||
* $BK,1$TempleOS version 3.03 Released$BK,0$
|
||||
|
||||
$IV,1$----02/12/15 16:10:14----$IV,0$
|
||||
* Overhauled $LK,"::/Demo/WebLogExample/WebLogRep.CPP"$.
|
||||
* Added $LK,"EDF_WAS_WRITE",A="MN:EDF_WAS_WRITE"$.
|
||||
|
||||
$IV,1$----02/12/15 03:48:28----$IV,0$
|
||||
* Overhauled $MA-X+PU,"::/Demo/AcctExample",LM="Dir(\"::/Demo/AcctExample\");View;"$. Now, if you have a virtual machine install, you can easily run my exact set-up by copying my files to your $FG,2$/Home$FG$ directory.
|
||||
|
||||
$IV,1$----02/07/15 15:45:49----$IV,0$
|
||||
* Tweaked AutoComplete.
|
||||
|
||||
$IV,1$----02/05/15 12:39:06----$IV,0$
|
||||
* Fixed minor compiler bug relating to dead code elimination.
|
||||
|
||||
$IV,1$----02/02/15 14:03:28----$IV,0$
|
||||
* Added $LK,"::/Demo/Graphics/Lattice.CPP"$.
|
||||
|
||||
$IV,1$----01/29/15 02:58:45----$IV,0$
|
||||
* Added $LK,"::/Demo/Directives.CPP"$.
|
||||
$HL,1$$WW,0$#define __DATE__ #exe{StreamPrint("\"%D\"",Now);}
|
||||
#define __TIME__ #exe{StreamPrint("\"%T\"",Now);}
|
||||
#define __LINE__ #exe{StreamPrint("%d",Fs->last_lex->cur_lfn->line_num);}
|
||||
#define __DEPTH__ #exe{StreamPrint("%d",Fs->last_lex->cur_lfn-&Fs->last_lex->lfns-1);}
|
||||
#define __FILE__ #exe{StreamPrint("\"%s\"",Fs->last_lex->cur_lfn->full_name);}
|
||||
#define __DIR__ #exe{StreamDir;}
|
||||
$HL,0$$WW,1$
|
||||
$IV,1$----01/28/15 11:40:37----$IV,0$
|
||||
* $BK,1$TempleOS version 3.02 Released$BK,0$
|
||||
* Overhauled $MA-X+PU,"Tour",LM="User(\"Cd(\\\"::/Misc/Tour\\\");;AutoFile(\\\"Tour\\\");\n\");"$.
|
||||
|
||||
$IV,1$----01/18/15 19:42:50----$IV,0$
|
||||
* $LK,"BusyWait",A="MN:BusyWait"$() now uses $LK,"HPET",A="MN:HPET"$().
|
||||
* Min RAM requirement is now 512 Meg.
|
||||
* $LK,"R",A="MN:R"$("TSZ","TOSZ");
|
||||
* Added $FG,4$CdLexDir$FG$() and $FG,4$CdSrcDir$FG$(). Now, you can run apps from any directory, not just $FG,2$/Apps$FG$.
|
||||
|
||||
$IV,1$----01/16/15 15:08:58----$IV,0$
|
||||
* Changed $LK,"Scale2Mem",A="MN:Scale2Mem"$().
|
||||
|
||||
$IV,1$----01/15/15 05:11:31----$IV,0$
|
||||
* $BK,1$TempleOS version 3.01 Released$BK,0$
|
||||
|
||||
$IV,1$----01/15/15 03:13:07----$IV,0$
|
||||
* Added eye-dropper-like $FG,2$'t'$FG$ for transparent color in the sprite $FG,2$<CTRL-r>$FG$ editor.
|
||||
* Got rid of $LK,"CHash",A="MN:CHash"$.next_added.
|
||||
* Reduced $LK,"TASK_HASH_SIZE",A="MN:TASK_HASH_SIZE"$ size.
|
||||
|
||||
$IV,1$----01/10/15 15:12:30----$IV,0$
|
||||
* $LK,"R",A="MN:R"$("Grep","Find");
|
||||
|
||||
$IV,1$----01/08/15 17:40:37----$IV,0$
|
||||
* Undid "Improved $LK,"DCCaptureScreen",A="MN:DCCaptureScreen"$()" from 12/27/14. (It didn't work.)
|
||||
|
||||
$IV,1$----01/06/15 18:58:16----$IV,0$
|
||||
* Reorganized $MA-X+PU,"::/Apps/Psalmody",LM="Cd(\"::/Apps/Psalmody\");Dir;View;\n"$.
|
||||
|
||||
$IV,1$----01/04/15 02:20:50----$IV,0$
|
||||
* Added $LK,"::/Demo/Graphics/SpriteRaw.CPP"$.
|
||||
|
||||
$IV,1$----01/02/15 04:46:36----$IV,0$
|
||||
* Changed Sprite format. Download $FG,2$Cvt300.CPP.Z$FG$ from
|
||||
$FG,4$$TX,"http://www.templeos.org/Wb/Home/Wb2/Files",HTML="http://www.templeos.org/Wb/Home/Wb2/Files"$$FG$.
|
||||
* Cleaned-up the $LK,"CSprite",A="MN:CSprite"$ code.
|
||||
|
||||
$IV,1$----12/31/14 15:13:08----$IV,0$
|
||||
* $BK,1$TempleOS version 3.00 Released$BK,0$
|
||||
|
||||
$IV,1$----12/30/14 21:18:04----$IV,0$
|
||||
* Added $LK,"::/Demo/RandDemo.CPP"$.
|
||||
|
||||
$IV,1$----12/30/14 00:38:42----$IV,0$
|
||||
* $LK,"R",A="MN:R"$("ptr_cnt","ptr_stars_cnt");
|
||||
* Moved $LK,"DOCEF_UPDATE_DATA",A="MN:DOCEF_UPDATE_DATA"$ to be next to $LK,"DOCEF_REFRESH_DATA",A="MN:DOCEF_REFRESH_DATA"$.
|
||||
* Refreshed the $LK,"PCI Device File",A="FI:::/Misc/PCIDevices.TXT"$.
|
||||
|
||||
$IV,1$----12/27/14 18:59:16----$IV,0$
|
||||
* Improved $LK,"DCCaptureScreen",A="MN:DCCaptureScreen"$().
|
||||
|
||||
$IV,1$----12/26/14 22:13:51----$IV,0$
|
||||
* Improved $LK,"::/Demo/Games/RawHide.CPP"$.
|
||||
|
||||
$IV,1$----12/25/14 21:08:51----$IV,0$
|
||||
* Improved $LK,"::/Demo/Games/BlackDiamond.CPP"$.
|
||||
* Improved $LK,"::/Demo/Games/DunGen.CPP"$.
|
||||
|
||||
$IV,1$----12/23/14 15:00:28----$IV,0$
|
||||
* Changed from many $FG,2$/Accts$FG$ subdirectories to just one directory named $FG,2$/Home$FG$ with default files in root.
|
||||
|
||||
$IV,1$----12/20/14 21:43:31----$IV,0$
|
||||
* Changed $FG,4$text.font$FG$ from $FG,2$U8 *$FG$ to $FG,2$U64 *$FG$.
|
||||
|
||||
$IV,1$----12/18/14 18:49:46----$IV,0$
|
||||
* Renamed all the files.
|
||||
|
||||
$IV,1$----12/18/14 09:40:06----$IV,0$
|
||||
* I got rid of my Logo. I like no logo.
|
||||
* I got rid of my company name, Trivial Solutions. Instead of "TS", I use "TOS" for Temple Operating System.
|
||||
* I got rid of all my rants on my website. Now, just one rant.
|
||||
* I changed from having "TAD" as one of many employees to no different employees.
|
||||
|
||||
$IV,1$----12/15/14 10:05:06----$IV,0$
|
||||
* Added $FG,4$$TX,"http://www.reddit/r/TempleOS_Official",HTML="http://www.reddit.com/r/TempleOS_Official"$$FG$.
|
||||
|
||||
$IV,1$----12/15/14 07:23:32----$IV,0$
|
||||
* $BK,1$TempleOS version 2.19 Released$BK,0$
|
||||
* $LK,"R",A="MN:R"$("SliderCtrl","CtrlSlider");
|
||||
* $LK,"R",A="MN:R"$("Set...","...Set");
|
||||
* Changed $LK,"DrvMapBlkClean",A="MN:DrvMapBlkClean"$() and $LK,"DrvMapBlkAlloc",A="MN:DrvMapBlkAlloc"$().
|
||||
|
||||
$IV,1$----12/15/14 02:50:32----$IV,0$
|
||||
* Changed AutoComplete colors.
|
||||
* Got rid of splash screen.
|
||||
* Added AutoComplete $LK,"StandBy",A="FI:::/Doc/StandBy.TXT"$.
|
||||
|
||||
$IV,1$----12/14/14 12:54:56----$IV,0$
|
||||
* Fixed new bug in random routines.
|
||||
|
||||
$IV,1$----12/12/14 08:58:10----$IV,0$
|
||||
* $LK,"R",A="MN:R"$("DocGRAFile","DocGRA");
|
||||
|
||||
$IV,1$----12/04/14 11:00:43----$IV,0$
|
||||
* Improved $FG,4$lx->max_line$FG$.
|
||||
|
||||
$IV,1$----12/04/14 05:02:20----$IV,0$
|
||||
* Cleaned-up mem code.
|
||||
* $LK,"R",A="MN:R"$("Allocate","Alloc");
|
||||
|
||||
$IV,1$----12/03/14 10:05:36----$IV,0$
|
||||
* Cleaned-up compiler conditionals.
|
||||
* Got rid of $FG,4$IC_BR_LBTS$FG$ family in the compiler.
|
||||
|
||||
$IV,1$----11/27/14 18:48:07----$IV,0$
|
||||
* $LK,"R",A="MN:R"$("Randomize","Seed");
|
||||
* Got rid of $FG,4$Rand2$FG$(). Use $LK,"Seed",A="MN:Seed"$() with non-zero and timer-based will be turned-off.
|
||||
|
||||
$IV,1$----11/21/14 08:25:38----$IV,0$
|
||||
* $BK,1$TempleOS version 2.18 Released$BK,0$
|
||||
* Improved $LK,"::/Demo/Games/TreeCheckers.CPP"$.
|
||||
|
||||
$IV,1$----11/19/14 22:25:28----$IV,0$
|
||||
* Fixed reindent bug.
|
||||
* $LK,"R",A="MN:R"$("$FG,4$ST_BIBLE_FILE$FG$","$LK,"BIBLE_FILENAME",A="MN:BIBLE_FILENAME"$");
|
||||
* Fixed bug with $LK,"DOCG_BL_IV_UL",A="MN:DOCG_BL_IV_UL"$.
|
||||
|
||||
$IV,1$----11/17/14 23:34:09----$IV,0$
|
||||
* I got rid of octal and binary char specification in strings.
|
||||
* Got rid of octal all-together.
|
||||
|
||||
$IV,1$----11/09/14 21:37:49----$IV,0$
|
||||
* Changed default plug-in for $FG,2$<ALT-F4>$FG$ and $FG,2$<ALT-SHIFT-F4>$FG$.
|
||||
* Added $FG,2$<ALT-F8>$FG$ and $FG,2$<ALT-SHIFT-F8>$FG$ on my personal version $LK,"::/Demo/AcctExample/AdamKeyPlugIns.CPP"$.
|
||||
|
||||
$IV,1$----11/07/14 08:02:04----$IV,0$
|
||||
* Improved $LK,"Ui",A="MN:Ui"$().
|
||||
|
||||
$IV,1$----10/29/14 12:06:42----$IV,0$
|
||||
* Changed $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ from relative cluster num to absolute blk num.
|
||||
* Improved compiler. $LK,"IC_RETURN_VAL",A="MN:IC_RETURN_VAL"$, $LK,"IC_END_EXP",A="MN:IC_END_EXP"$, $LK,"ICF_NO_DEPEND_RESULT",A="MN:ICF_NO_DEPEND_RESULT"$
|
||||
* $LK,"R",A="MN:R"$("Partition","Drive");
|
||||
|
||||
$IV,1$----10/27/14 05:06:15----$IV,0$
|
||||
* Overhauled $LK,"KbdBuildSC",A="MN:KbdBuildSC"$().
|
||||
|
||||
$IV,1$----10/19/14 11:42:47----$IV,0$
|
||||
* Updated $LK,"::/Doc/Charter.TXT"$.
|
||||
* Improved $LK,"::/Demo/Games/FlatTops.CPP"$.
|
||||
|
||||
$IV,1$----10/09/14 21:04:25----$IV,0$
|
||||
* Added $FG,2$dither_probability$FG$ to $LK,"DocBMP",A="MN:DocBMP"$() and $LK,"BMPRead",A="MN:BMPRead"$().
|
||||
|
||||
$IV,1$----09/27/14 22:11:45----$IV,0$
|
||||
* $BK,1$TempleOS version 2.17 Released$BK,0$
|
||||
* Changed compression format. Uncompress with the old version by $LK,"Move",A="MN:Move"$ing() to a name without $FG,2$.Z$FG$. Then, recompress with the new version of $FG,2$TempleOS$FG$.
|
||||
* Fixed rare bug in compression.
|
||||
* $LK,"R",A="MN:R"$("BMPFile","BMP");
|
||||
* Added $FG,2$include_zoom$FG$ arg to $LK,"DCCaptureScreen",A="MN:DCCaptureScreen"$(), $LK,"GRACaptureScreen",A="MN:GRACaptureScreen"$() and $LK,"BMPCaptureScreen",A="MN:BMPCaptureScreen"$().
|
||||
* Added eye-dropper to sprite $FG,2$<CTRL-r>$FG$ editor. Press $FG,2$'c'$FG$.
|
||||
* Improved $LK,"::/Demo/Games/Wenceslas.CPP"$, made it 3D.
|
||||
* Added pebbles to $LK,"::/Apps/AfterEgypt/HorebBMP.CPP"$ and $LK,"::/Apps/AfterEgypt/HorebBSP.CPP"$.
|
||||
|
||||
$IV,1$----09/21/14 13:07:09----$IV,0$
|
||||
* Changed "bit" to "pixel" in $LK,"::/Adam/Gr/GrBitMap.CPP"$.
|
||||
|
||||
$IV,1$----09/19/14 09:43:29----$IV,0$
|
||||
* $LK,"R",A="MN:R"$("SpawnUser","User");
|
||||
* $LK,"R",A="MN:R"$("SrvUser","PopUpPrint");
|
||||
* Added $LK,"::/Doc/TaskSrv.TXT"$.
|
||||
|
||||
$IV,1$----09/17/14 19:51:53----$IV,0$
|
||||
* Fixed bug in kernel usage of $LK,"FileRead",A="MN:FileRead"$() and $LK,"FileWrite",A="MN:FileWrite"$().
|
||||
|
||||
$IV,1$----09/17/14 08:03:33----$IV,0$
|
||||
* Cleaned-up $LK,"::/Adam/AUtils.CPP"$.
|
||||
|
||||
$IV,1$----09/15/14 19:49:17----$IV,0$
|
||||
* Made assembler size for PUSH IMM into a I32 if it is a label, so you don't have to specify size.
|
||||
|
||||
$IV,1$----09/15/14 15:36:49----$IV,0$
|
||||
* $BK,1$TempleOS version 2.16 Released$BK,0$
|
||||
* Got rid of auto-fps adjust. More stable.
|
||||
|
||||
$IV,1$----09/11/14 11:58:40----$IV,0$
|
||||
* Overhauled $LK,"compiler init tables",A="MN:intermediate_code_table"$.
|
||||
|
||||
$IV,1$----08/29/14 15:45:55----$IV,0$
|
||||
* $BK,1$TempleOS version 2.15 Released$BK,0$
|
||||
|
||||
$IV,1$----08/24/14 22:23:25----$IV,0$
|
||||
* Added $LK,"CSysLimitBase",A="MN:CSysLimitBase"$.
|
||||
* $LK,"R",A="MN:R"$("SYS_BOOT_CODE","SYS_BOOT_SRC");
|
||||
* $LK,"R",A="MN:R"$("SoftBoot","RAMReboot");
|
||||
* Replaced $FG,4$SYS_GR_MODE$FG$ with $LK,"RLF_VGA",A="MN:RLF_VGA"$.
|
||||
* Improved $LK,"RAMReboot",A="MN:RAMReboot"$().
|
||||
|
||||
$IV,1$----08/23/14 07:50:44----$IV,0$
|
||||
* Changed key cmd $FG,2$<ALT-w>$FG$ to $FG,2$<Alt-a>$FG$.
|
||||
|
||||
$IV,1$----08/22/14 12:11:29----$IV,0$
|
||||
* $LK,"R",A="MN:R"$("VGA_SC_INDEX","VGAP_INDEX");
|
||||
|
||||
$IV,1$----08/18/14 16:25:32----$IV,0$
|
||||
* $BK,1$TempleOS version 2.14 Released$BK,0$
|
||||
|
||||
$IV,1$----08/11/14 16:13:49----$IV,0$
|
||||
* $LK,"R",A="MN:R"$("BOOT_HIGH_LOC","BOOT_HIGH_LOC_CD");
|
||||
|
||||
$IV,1$----08/10/14 11:54:16----$IV,0$
|
||||
* Added $LK,"GrRotNormSqr65536",A="MN:GrRotNormSqr65536"$().
|
||||
* Improved $LK,"::/Demo/Games/BugBird.CPP"$.
|
||||
|
||||
$IV,1$----08/08/14 18:02:04----$IV,0$
|
||||
* Added ::/Apps/Psalmody/Examples/lob.CPP"
|
||||
|
||||
$IV,1$----08/08/14 11:03:13----$IV,0$
|
||||
* Improved $LK,"::/Demo/Snd/WaterFowl.CPP"$.
|
||||
* Added 24-Bit to $LK,"BMPRead",A="MN:BMPRead"$().
|
||||
|
||||
$IV,1$----08/06/14 05:14:23----$IV,0$
|
||||
* Fixed compiler bug in "yoda conditionals".
|
||||
* Optimized compiler on float comparisons to zero.
|
||||
|
||||
$IV,1$----08/05/14 14:12:02----$IV,0$
|
||||
* $BK,1$TempleOS version 2.13 Released$BK,0$
|
||||
|
||||
$IV,1$----08/04/14 05:06:02----$IV,0$
|
||||
* Got rid of markov matrix in AutoComplete. Renamed "WordStat", "AutoComplete".
|
||||
|
||||
$IV,1$----07/30/14 20:27:02----$IV,0$
|
||||
* Added symmetry to $LK,"GodDoodleSprite",A="MN:GodDoodleSprite"$().
|
||||
|
||||
$IV,1$----07/26/14 11:19:00----$IV,0$
|
||||
* Got rid of "raw" arg on disk I/O routines for uncompressed data.
|
||||
|
||||
$IV,1$----07/22/14 08:31:58----$IV,0$
|
||||
* $BK,1$TempleOS version 2.12 Released$BK,0$
|
||||
* Fixed bug in assembler in
|
||||
MOV R8-R15,UIMM32
|
||||
|
||||
$IV,1$----07/12/14 02:06:10----$IV,0$
|
||||
* Fixed bug clicking on icon.
|
||||
|
||||
$IV,1$----07/08/14 04:33:20----$IV,0$
|
||||
* I changed $LK,"GodDoodleSprite",A="MN:GodDoodleSprite"$().
|
||||
|
||||
$IV,1$----06/30/14 02:32:47----$IV,0$
|
||||
* Changed max FPS to 30 instead of 60.
|
||||
* Got rid of min and max FPS control.
|
||||
* $LK,"R",A="MN:R"$("refresh","FPS");
|
||||
|
||||
$IV,1$----06/20/14 12:02:44----$IV,0$
|
||||
* $BK,1$TempleOS version 2.11 Released$BK,0$
|
||||
|
||||
$IV,1$----06/16/14 13:09:10----$IV,0$
|
||||
* Added $LK,"DOCT_LST",A="MN:DOCT_LST"$, list widgets. See $LK,"::/Demo/DolDoc/Form.CPP.Z"$.
|
||||
|
||||
$IV,1$----06/13/14 21:27:17----$IV,0$
|
||||
* $LK,"R",A="MN:R"$("BootDrv","BootRescueDrv");
|
||||
* Fixed bug in "Boot Rescue Drive" feature.
|
||||
|
||||
$IV,1$----06/10/14 03:11:14----$IV,0$
|
||||
* $BK,1$TempleOS version 2.10 Released$BK,0$
|
||||
* Got rid of $FG,4$ImportHashTable$FG$().
|
||||
* Got rid of $FG,4$OldSchool$FG$ demos.
|
||||
* $FG,2$AOT$FG$ compilation has been removed. Use $FG,2$JIT$FG$.
|
||||
|
||||
$IV,1$----06/02/14 13:52:50----$IV,0$
|
||||
* Improved HelpIndex.
|
||||
* Improved $LK,"::/Apps/TimeOut/TimeOut.CPP.Z"$.
|
||||
|
||||
$IV,1$----05/26/14 16:13:11----$IV,0$
|
||||
* $BK,1$TempleOS version 2.09 Released$BK,0$
|
||||
* Added BLINK to $LK,"ToHtml",A="MN:ToHtml"$().
|
||||
* $LK,"R",A="MN:R"$("DocHome","DocTop");
|
||||
|
||||
$IV,1$----05/24/14 20:46:11----$IV,0$
|
||||
* Got rid of $FG,4$Day$FG$(), $FG,4$Month$FG$(), $FG,4$Year$FG$(), etc.
|
||||
* $LK,"R",A="MN:R"$("WSDDisplayDefs","WSDDefsPut");
|
||||
* $LK,"R",A="MN:R"$("WSDGetDef","WSDDefGet");
|
||||
* $LK,"R",A="MN:R"$("WSDGetWord","WSDDefsGet");
|
||||
* $LK,"R",A="MN:R"$("WSDPtAtWord","WSWordPtAt");
|
||||
* $LK,"R",A="MN:R"$("WSGetHits","WSHitsGet");
|
||||
|
||||
$IV,1$----05/23/14 04:50:25----$IV,0$
|
||||
* $LK,"R",A="MN:R"$("SqrDist","DistSqr");
|
||||
* $LK,"R",A="MN:R"$("SqrNorm","NormSqr");
|
||||
|
||||
$IV,1$----05/16/14 15:43:17----$IV,0$
|
||||
* Added $LK,"DOF_DONT_WINMGR_SYNC",A="MN:DOF_DONT_WINMGR_SYNC"$.
|
||||
* Fetches comments for help index reports.
|
||||
* Made src line links more accurate.
|
||||
|
||||
$IV,1$----05/15/14 06:45:33----$IV,0$
|
||||
* Added INVERT to $LK,"ToHtml",A="MN:ToHtml"$().
|
||||
|
||||
$IV,1$----05/13/14 07:05:00----$IV,0$
|
||||
* $BK,1$TempleOS version 2.08 Released$BK,0$
|
||||
|
||||
$IV,1$----05/11/14 08:22:44----$IV,0$
|
||||
* Added $LK,"Zip",A="MN:Zip"$() and $LK,"Unzip",A="MN:Unzip"$().
|
||||
|
||||
$IV,1$----05/09/14 09:30:39----$IV,0$
|
||||
* Added $LK,"PopUpEd",A="MN:PopUpEd"$().
|
||||
* $LK,"R",A="MN:R"$("PopUpViewStr","PopUpViewPrint");
|
||||
|
||||
$IV,1$----05/07/14 19:12:42----$IV,0$
|
||||
* Added classes to help index.
|
||||
* $LK,"CGrGlbls",A="MN:CGrGlbls"$ gr;
|
||||
* $LK,"CDolDocGlbls",A="MN:CDolDocGlbls"$ doldoc;
|
||||
* $LK,"CCmpGlbls",A="MN:CCmpGlbls"$ cmp;
|
||||
* $LK,"CUasmGlbls",A="MN:CUasmGlbls"$ uasm;
|
||||
* $LK,"CTextGlbls",A="MN:CTextGlbls"$ text;
|
||||
|
||||
$IV,1$----05/05/14 23:37:52----$IV,0$
|
||||
* $LK,"CGodGlbls",A="MN:CGodGlbls"$ god;
|
||||
* $LK,"CMusicGlbls",A="MN:CMusicGlbls"$ music;
|
||||
* $LK,"CWordStatGlbls",A="MN:CWordStatGlbls"$ ws;
|
||||
* $LK,"CWordStatDictGlbls",A="MN:CWordStatDictGlbls"$ wsd;
|
||||
|
||||
$IV,1$----05/05/14 19:54:46----$IV,0$
|
||||
* $LK,"CWallPaperGlbls",A="MN:CWallPaperGlbls"$ *wall;
|
||||
* $LK,"CWinMgrTimingGlbls",A="MN:CWinMgrTimingGlbls"$ *winmgr.t;
|
||||
* $LK,"CWinMgrGlbls",A="MN:CWinMgrGlbls"$ winmgr;
|
||||
* $LK,"CSndGlbls",A="MN:CSndGlbls"$ snd;
|
||||
* $LK,"CDevGlbls",A="MN:CDevGlbls"$ dev;
|
||||
* $LK,"CDskGlbls",A="MN:CDskGlbls"$ dsk;
|
||||
* $LK,"CDbgGlbls",A="MN:CDbgGlbls"$ dbg;
|
||||
* $LK,"CCntsGlbls",A="MN:CCntsGlbls"$ cnts;
|
||||
* $LK,"CKeyDevGlbls",A="MN:CKeyDevGlbls"$ keydev;
|
||||
* $LK,"CIPStateGlbls",A="MN:CIPStateGlbls"$ ip;
|
||||
* $LK,"CMouseStateGlbls",A="MN:CMouseStateGlbls"$ mouse;
|
||||
* $LK,"CKbdStateGlbls",A="MN:CKbdStateGlbls"$ kbd;
|
||||
|
||||
$IV,1$----05/05/14 09:14:51----$IV,0$
|
||||
* Added $MA-X+PU,"::/Apps/Budget",LM="Cd(\"::/Apps/Budget\");Dir;View;\n"$.
|
||||
|
||||
$IV,1$----05/03/14 23:31:50----$IV,0$
|
||||
* Added $LK,"DOCEF_USER_DATA",A="MN:DOCEF_USER_DATA"$ $FG,2$arg=$FG$ flag.
|
||||
* $LK,"R",A="MN:R"$("Backward","Bwd");
|
||||
* Added $LK,"::/Apps/Budget/Budget.CPP"$.
|
||||
|
||||
$IV,1$----04/30/14 23:41:42----$IV,0$
|
||||
* Added $LK,"CBinFile",A="MN:CBinFile"$.signature.
|
||||
|
||||
$IV,1$----04/29/14 15:43:22----$IV,0$
|
||||
* $BK,1$TempleOS version 2.07 Released$BK,0$
|
||||
|
||||
$IV,1$----04/27/14 05:19:18----$IV,0$
|
||||
* Improved documentation.
|
||||
* Changed $LK,"CBinFile",A="MN:CBinFile"$ format.
|
||||
* Locked-in 640x480 with $LK,"GrUpdateLine64",A="MN:GrUpdateLine64"$().
|
||||
|
||||
$IV,1$----04/23/14 22:14:43----$IV,0$
|
||||
* Added $LK,"::/Demo/Lectures/NegDisp.CPP"$.
|
||||
* $LK,"R",A="MN:R"$("GrLineRect4","GrBorder");
|
||||
* Changed $LK,"::/Adam/Gr/GrTextBase.CPP"$.
|
||||
* Fixed terminal button on wallpaper. Yikes!
|
||||
|
||||
$IV,1$----04/21/14 16:29:00----$IV,0$
|
||||
* Got rid of $FG,4$Spaces$FG$() and $FG,4$NewLine$FG$(). Replaced $FG,4$NewLine$FG$(5) with "%h*c",5,'\n';
|
||||
* Improved profiler.
|
||||
* Changed $FG,4$CCPU.chained_timer_irq$FG$ to $LK,"CCPU",A="MN:CCPU"$.profiler_timer_irq.
|
||||
|
||||
$IV,1$----04/19/14 18:05:09----$IV,0$
|
||||
* Got rid of double spacing.
|
||||
* Fixed bug in page down.
|
||||
* Sorted headers and externs.
|
||||
|
||||
$IV,1$----04/18/14 21:45:17----$IV,0$
|
||||
* Improved documentation.
|
||||
|
||||
$IV,1$----04/16/14 15:49:13----$IV,0$
|
||||
* $BK,1$TempleOS version 2.06 Released$BK,0$
|
||||
|
||||
$IV,1$----04/15/14 12:29:02----$IV,0$
|
||||
* Got rid of lock-to-page and lock-to-center document features.
|
||||
* Changed $FG,2$$$DA...$$$FG$ data type to use an arg. $FG,2$$$DA,-U64+U16,...$$$FG$ is now changed to $FG,2$$$DA,RT=I16,...$$$FG$.
|
||||
* $LK,"R",A="MN:R"$("DOCEF1_","DOCEF_");
|
||||
* Changed Fs->$LK,"win_inhibits",A="MN:WIF_SELF_FOCUS"$.
|
||||
|
||||
$IV,1$----04/13/14 16:20:11----$IV,0$
|
||||
* Added $LK,"LK_DOC",A="MN:LK_DOC"$, $LK,"LK_DOC_ANCHOR",A="MN:LK_DOC_ANCHOR"$, $LK,"LK_DOC_LINE",A="MN:LK_DOC_LINE"$ and $LK,"LK_DOC_FIND",A="MN:LK_DOC_FIND"$.
|
||||
* $LK,"R",A="MN:R"$("Doc","DolDoc");
|
||||
* Improved documentation.
|
||||
* Added $LK,"::/Demo/LastClass.CPP"$.
|
||||
|
||||
$IV,1$----04/13/14 00:09:48----$IV,0$
|
||||
* Got rid of $FG,4$ProfBin()$FG$ and $FG,4$ProfCPU()$FG$.
|
||||
* $LK,"R",A="MN:R"$("ProfAll","Prof");
|
||||
* Improved documentation.
|
||||
* Changed $LK,"CDoc",A="MN:CDoc"$.desc.
|
||||
|
||||
$IV,1$----04/11/14 16:58:56----$IV,0$
|
||||
* Renamed Sprite functions and vars.
|
||||
* Added $LK,"LexExpressionI64",A="MN:LexExpressionI64"$() and $LK,"LexExpressionF64",A="MN:LexExpressionF64"$(). I'm chagrinned.
|
||||
|
||||
$IV,1$----04/11/14 11:55:36----$IV,0$
|
||||
* Added $LK,"FileNameTempTxt",A="MN:FileNameTempTxt"$().
|
||||
* $FG,2$<CTRL-r>$FG$ sprite edit-as-text is now much better.
|
||||
* Added $LK,"Str2ColorU16",A="MN:Str2ColorU16"$(), $LK,"Str2ColorU32",A="MN:Str2ColorU32"$(), $LK,"LexFirstRem",A="MN:LexFirstRem"$(), $LK,"Sprite2Code",A="MN:Sprite2Code"$() and $LK,"Code2Sprite",A="MN:Code2Sprite"$().
|
||||
* $LK,"R",A="MN:R"$("Color2Text","Color2Str");
|
||||
* $LK,"R",A="MN:R"$("Sprite2Text","SpriteElem2OneLineSummary");
|
||||
* $LK,"R",A="MN:R"$("DocPrintWhole","DocPrintAtomic");
|
||||
* Fixed bug in $LK,"GrRect",A="MN:GrRect"$() relating to dithering.
|
||||
* Got rid of $LK,"CDoc",A="MN:CDoc"$.recalc_start.
|
||||
|
||||
$IV,1$----04/09/14 14:10:17----$IV,0$
|
||||
* Fixed compiler bug by adding a pass to overcome an optimization problem.
|
||||
* Improved $LK,"::/Apps/AfterEgypt/GodTalking.CPP"$.
|
||||
* Improved $LK,"::/Demo/Graphics/Mountain.CPP"$.
|
||||
* Improved $LK,"::/Demo/Graphics/Camp.CPP"$.
|
||||
* Improved $LK,"::/Demo/Graphics/SunMoon.CPP"$.
|
||||
* Improved $LK,"::/Demo/Games/DunGen.CPP"$.
|
||||
* Improved $LK,"::/Demo/Games/FlatTops.CPP"$.
|
||||
|
||||
$IV,1$----04/07/14 07:46:56----$IV,0$
|
||||
* $BK,1$TempleOS version 2.05 Released$BK,0$
|
||||
|
||||
$IV,1$----04/05/14 03:09:18----$IV,0$
|
||||
* Got rid of $FG,2$Fs->answers_displayed$FG$ and set it to a fixed value of one answer.
|
||||
* Improved documentation.
|
||||
* $LK,"R",A="MN:R"$("MusicOrgan","Psalmody");
|
||||
* Improved $LK,"AFGetChar",A="MN:AFGetChar"$() and $LK,"AFUntilChar",A="MN:AFUntilChar"$().
|
||||
|
||||
$IV,1$----04/03/14 05:57:06----$IV,0$
|
||||
* Improved $MA-X+PU,"Tour",LM="SpawnUser(\"Cd(\\\"::/Misc/Tour\\\");;AutoFile(\\\"Tour\\\");\n\");"$.
|
||||
* $LK,"R",A="MN:R"$("ipx","ip.pos.x");
|
||||
* $LK,"R",A="MN:R"$("mxx","mouse.pos.x");
|
||||
* $LK,"R",A="MN:R"$("mxx_prescale","mouse.prescale.x");
|
||||
* $LK,"R",A="MN:R"$("A2Date","Str2Date");
|
||||
* $LK,"R",A="MN:R"$("A2I64","Str2I64");
|
||||
* $LK,"R",A="MN:R"$("A2F64","Str2F64");
|
||||
* $LK,"R",A="MN:R"$("SPrint","StrPrint");
|
||||
* $LK,"R",A="MN:R"$("MPrint","MStrPrint");
|
||||
* $LK,"R",A="MN:R"$("Scan","StrScan");
|
||||
|
||||
$IV,1$----04/01/14 08:49:57----$IV,0$
|
||||
* Added $LK,"::/Demo/Games/ElephantWalk.CPP"$.
|
||||
|
||||
$IV,1$----03/28/14 22:25:48----$IV,0$
|
||||
* $LK,"R",A="MN:R"$("COLOR_TRANSPARENT","TRANSPARENT");
|
||||
|
||||
$IV,1$----03/26/14 08:40:25----$IV,0$
|
||||
* $LK,"R",A="MN:R"$("_ATTR_DIR","RS_ATTR_DIR");
|
||||
|
||||
$IV,1$----03/24/14 15:17:14----$IV,0$
|
||||
* Coined "DolDoc" as a name for the TempleOS document type.
|
||||
* Added $LK,"::/Demo/DolDoc/ClickCallBack.CPP"$.
|
||||
|
||||
$IV,1$----03/21/14 04:02:29----$IV,0$
|
||||
* $BK,1$TempleOS version 2.04 Released$BK,0$
|
||||
|
||||
$IV,1$----03/19/14 21:54:23----$IV,0$
|
||||
* $LK,"R",A="MN:R"$("BulgeBomber","BomberGolf");
|
||||
* Added $LK,"::/Demo/Dsk/SerializeTree.CPP"$.
|
||||
* $LK,"R",A="MN:R"$("DirLstDel","DirTreeDel");
|
||||
* Added $LK,"::/Misc/Tour/Tour7.AUT"$ which covers File Masks.
|
||||
* $LK,"R",A="MN:R"$("MGetS","GetStr");
|
||||
* $LK,"R",A="MN:R"$("PmtStr","GetStr");
|
||||
|
||||
$IV,1$----03/17/14 22:34:11----$IV,0$
|
||||
* Changed $FG,2$$$MA$FG$ to use "tag$FG$" instead of "$FG,2$A=$FG$".
|
||||
* Changed $LK,"DOCEF_HAS_TERMINATOR",A="MN:DOCEF_HAS_TERMINATOR"$ -T to -TRM.
|
||||
* Changed $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ format. Some flags are not at start.
|
||||
|
||||
$IV,1$----03/07/14 04:54:10----$IV,0$
|
||||
* Added $LK,"::/Demo/ReverseFileExample/Reverse.CPP"$.
|
||||
|
||||
$IV,1$----03/03/14 00:18:47----$IV,0$
|
||||
* $BK,1$TempleOS version 2.03 Released$BK,0$
|
||||
* $LK,"R",A="MN:R"$("A2I","Str2I64");
|
||||
* Removed "Binary Type" from $LK,"CDocBin",A="MN:CDocBin"$. Old sprites no longer work.
|
||||
|
||||
$IV,1$----02/25/14 16:09:01----$IV,0$
|
||||
* $LK,"R",A="MN:R"$("TaskTextInputQue","TaskText");
|
||||
* $LK,"R",A="MN:R"$("TaskExeStrQue","TaskExe");
|
||||
* $LK,"R",A="MN:R"$("TaskMsgQue","TaskMsg");
|
||||
|
||||
$IV,1$----02/21/14 13:56:02----$IV,0$
|
||||
* Converted $LK,"Define",A="MN:Define"$() strings to constants.
|
||||
* $LK,"R",A="MN:R"$("Adam3d","Adam3c");
|
||||
* $LK,"R",A="MN:R"$("Adam3e","Adam3d");
|
||||
* $LK,"R",A="MN:R"$("Adam3f","Adam3e");
|
||||
* $LK,"R",A="MN:R"$("pattern","needle");
|
||||
|
||||
$IV,1$----02/19/14 22:13:04----$IV,0$
|
||||
* $LK,"R",A="MN:R"$("Limit","Clamp");
|
||||
* Overhauled $LK,"FileRead",A="MN:FileRead"$() and $LK,"FileWrite",A="MN:FileWrite"$().
|
||||
* Got rid of $FG,4$TextFileRead$FG$() and $FG,4$TextFileWrite$FG$().
|
||||
|
||||
$IV,1$----02/17/14 20:50:58----$IV,0$
|
||||
* $BK,1$TempleOS version 2.02 Released$BK,0$
|
||||
* Added $FG,2$F7/SHIFT-F7$FG$ for $LK,"GodWord",A="MN:GodWord"$()/$LK,"GodPassage",A="MN:GodPassage"$().
|
||||
* Added $FG,2$F6/SHIFT-F6$FG$ for $LK,"GodSong",A="MN:GodSong"$()/$LK,"GodDoodle",A="MN:GodDoodle"$().
|
||||
* $LK,"R",A="MN:R"$("Apps/HolySpirit","Adam/God");
|
||||
* $LK,"R",A="MN:R"$("DoItOnce","DoOnce");
|
||||
|
||||
$IV,1$----02/12/14 14:25:59----$IV,0$
|
||||
* Added BMP/GRA file save to $FG,2$<CTRL-r>$FG$.
|
||||
* Added $FG,2$<CTRL-ALT-s>$FG$ for screen shot to clipboard.
|
||||
* Reformed $LK,"CGridGlbls",A="MN:CGridGlbls"$ to be simple.
|
||||
|
||||
$IV,1$----02/10/14 09:19:59----$IV,0$
|
||||
* Added $LK,"HashPublic",A="MN:HashPublic"$().
|
||||
* Changed FUF_WHOLE_LABELS $FG,2$+lf$FG$/$FG,2$+lb$FG$ to $FG,2$+lb$FG$/$FG,2$+la$FG$.
|
||||
* Got rid of $FG,4$FilesOrder()$FG$, replacing it with $LK,"FUF_CLUSTER_ORDER",A="MN:FUF_CLUSTER_ORDER"$.
|
||||
* Added $LK,"::/Demo/Graphics/InputPointer.CPP"$.
|
||||
* Made $LK,"gr.dc",A="MN:CGrGlbls"$ the default device context for graphics routines.
|
||||
|
||||
$IV,1$----01/28/14 01:44:46----$IV,0$
|
||||
* In a function with an ASM{} blk, you can now JMP to a function goto label.
|
||||
|
||||
$IV,1$----01/27/14 09:02:20----$IV,0$
|
||||
* $BK,1$TempleOS version 2.01 Released$BK,0$
|
||||
* In a function with an ASM{} blk, you can now goto an ASM label.
|
||||
|
||||
$IV,1$----01/26/14 03:27:55----$IV,0$
|
||||
* Moved $FG,4$fun_class$FG$ to $LK,"CLex",A="MN:CLex"$.htc.fun.
|
||||
* Got rid of K=1024 sub_fmt flag in $LK,"StrPrintJoin",A="MN:StrPrintJoin"$.
|
||||
* Changed MapFile code_heap line addresses to 32-bit.
|
||||
* Got rid of $LK,"CTask",A="MN:CTask"$.user_data1-3.
|
||||
* Got rid of $FG,4$ExpressionBinDel$FG$().
|
||||
* Got rid of $LK,"CIntermediateCode",A="MN:CIntermediateCode"$.ic_ext_body.
|
||||
* Cleaned-up $LK,"::/Compiler/ExpParser.CPP"$.
|
||||
|
||||
$IV,1$----01/24/14 06:40:47----$IV,0$
|
||||
* $LK,"R",A="MN:R"$("DocInsSafe","DocPrintAtomic");
|
||||
* $LK,"R",A="MN:R"$("DocPutSPartial","DocPrintPartial");
|
||||
* Made private WordStat links WHITE.
|
||||
* Added "+s" to $LK,"FilesFind",A="MN:FilesFind"$().
|
||||
* Added "+x" to $LK,"Size",A="MN:Size"$() and $LK,"SizeRep",A="MN:SizeRep"$().
|
||||
* $LK,"R",A="MN:R"$("TreeSizeRep","SizeRep");
|
||||
* $LK,"R",A="MN:R"$("LineCntRep","LineRep");
|
||||
* $LK,"R",A="MN:R"$("TreeSize","Size");
|
||||
* $LK,"R",A="MN:R"$("FileSize","Size");
|
||||
* $LK,"R",A="MN:R"$("MergeChk","Merge");
|
||||
* Added $LK,"::/Demo/Graphics/Balloon.CPP"$.
|
||||
* Added warning for 64-bit reg vars.
|
||||
|
||||
$IV,1$----01/13/14 14:39:34----$IV,0$
|
||||
* Optimized $FG,2$if (Carry)$FG$. See $LK,"::/Demo/Carry.CPP"$.
|
||||
|
||||
$IV,1$----01/11/14 21:52:00----$IV,0$
|
||||
* Added $LK,"BibleLine2Verse",A="MN:BibleLine2Verse"$().
|
||||
* Shifted glbl vars from $LK,"::/Kernel/KStart.CPP"$ to $LK,"CSysFixedArea",A="MN:CSysFixedArea"$.
|
||||
* Added $LK,"OneTimePopUp",A="MN:OneTimePopUp"$() msg to $LK,"::/Apps/X-Caliber/X-Caliber.CPP"$. Delete registry and reboot if you are upgrading.
|
||||
|
||||
$IV,1$----01/09/14 20:51:20----$IV,0$
|
||||
* Converted $FG,2$fp_plot()$FG$ graphics routines to Bool with abort.
|
||||
* Made $LK,"CatPrint",A="MN:CatPrint"$().
|
||||
* Added $FG,2$no_mask$FG$ to $LK,"FileAccessNew",A="MN:FileAccessNew"$() and $LK,"CopyTree",A="MN:CopyTree"$().
|
||||
|
||||
$IV,1$----01/07/14 11:46:38----$IV,0$
|
||||
* $BK,1$TempleOS version 2.00 Released$BK,0$
|
||||
* Created Lite and UltraLite distros.
|
||||
* Added score to $LK,"::/Demo/Games/BlackDiamond.CPP"$.
|
||||
* Improved $LK,"::/Demo/Games/Varoom.CPP"$.
|
||||
|
||||
$IV,1$----01/06/14 19:22:53----$IV,0$
|
||||
* Added $LK,"::/Demo/Asm/AsmAndC3.CPP"$.
|
||||
* Added $FG,4$::/Demo/OldSchool/SingleFileAOT/Single.CPP$FG$
|
||||
* Made compiler compile ASM instructions mixed-in with HolyC.
|
||||
* Improved $LK,"::/Demo/Graphics/Camp.CPP"$.
|
||||
|
||||
$IV,1$----01/03/14 03:39:30----$IV,0$
|
||||
* Fixed compiler bug relating to reg vars. Fixed $LK,"IntEntryGet",A="MN:IntEntryGet"$().
|
||||
|
||||
$IV,1$----01/01/14 13:16:59----$IV,0$
|
||||
* Got rid of XSUM in $LK,"CBinFile",A="MN:CBinFile"$ header.
|
||||
+55
-15
@@ -1,31 +1,71 @@
|
||||
$FG,5$$WW,1$$TX+CX,"TempleOS Charter"$$FG$
|
||||
|
||||
TempleOS is God's official temple. God said to use 640x480 16 color graphics and God said to have a single audio voice. That is like how He specified cubits in the Bible! He also said it must be perfect. God needs a temple as a special beloved place where His people, young and old, can do offerings and consult God in the oracle. Like Solomon's Temple, this is a focal point for the community. Adults can write hymns, psalms (poems of praise) and meditation essays with good support for links to the Bible. Like Cain and Abel, do offerings and learn what God likes and doesn't like.
|
||||
Why did they make Solomon's Temple? It was a direction to look, to focus on, a special place for meditation, to do offerings, a community center, a home to God's beauty, that encouraged love of God. People cherished God's temple, beautifying it with gold and all fine things to show love of God, as great cathedrals were decorated with astounding, awe-striking intricate art and gargoyles, incredible devotion to God with hours of effort, toiling and slaving-away for the glory of God, for families with children to see stained-glass windows and tomes with ridiculously elaborate calligraphy to show love of God from a people who did little else but show love toward God, lived in dire conditions by today's standards, yet with so much difficulty scraping-by, found the time to devote even all free-time to God!
|
||||
|
||||
* TempleOS is, forever, limited to 100,000 lines of code, not including applications and demos. This will ensure it stays out of trouble a thousand years into the future. It will not stray much from my vision. Other, less important, characteristics can be changed but if the 100,000 line limit is kept, it will stay true.
|
||||
|
||||
1 Kings 6:21 (King James)
|
||||
|
||||
$LM,5$6:21 So Solomon overlaid the house within with pure gold: and he made
|
||||
a partition by the chains of gold before the $FG,4$oracle$FG$; and he overlaid
|
||||
it with gold.
|
||||
|
||||
6:22 And the whole house he overlaid with gold, until he had finished
|
||||
all the house: also the whole altar that was by the $FG,4$oracle$FG$ he overlaid
|
||||
with gold.
|
||||
|
||||
6:23 And within the $FG,4$oracle$FG$ he made two cherubims of olive tree, each
|
||||
ten cubits high.
|
||||
$LM,0$
|
||||
|
||||
* TempleOS is God's official temple. Just like Solomon's temple, this is a community focal point where offerings are made and God's oracle is consulted.
|
||||
|
||||
* God said $FG,2$640x480 16 color$FG$ graphics is a covenant like circumcision. Children will do offerings. Think of 16 colors like the Simpson's cartoons. In the future, even if one GPU were universal, we would keep 640x480 16 color and not use GPU acceleration. Graphics operations should be transparent, not hidden in a GPU.
|
||||
|
||||
* God said to use a single audio voice -- a single frequency with waveforms.
|
||||
|
||||
* God said His temple must be perfect. $FG,4$We don't think twice about breaking compatibility.$FG$ God said we do a seven year release cycle. I say the PC hardware follows a 49 year, jubilee cycle, like broadcast TV upgrades.
|
||||
|
||||
* The vision is the same usage model and niche as the Commodore 64 -- a non-networked, simple machine where programming was the goal, not just a means to an end. However, it is modern, 64-bit and $FG,2$multi-cored$FG$. It is special purpose, not general purpose, so some things it will not do. Also, it's a kayak, not a Titanic. The priority is $FG,2$user developers$FG$, not $FG,2$3rd party developers$FG$.
|
||||
|
||||
* We do not put any hooks for future changes. "Perfect" means we always act as though it is final, for all time. Microsoft allowed the $FG,2$$TX,"Windows BMP",HTML="http://en.wikipedia.org/wiki/BMP_file"$$FG$ file format to adapt to the future and it became grotesque.
|
||||
|
||||
* Low line count is the highest good, so it is easy to learn the whole thing. Users should see the light at the end of the tunnel. One file system, for example, is better than many file systems.
|
||||
|
||||
* There is a limit of 100,000 lines of code for all time, not including applications and demos. $FG,4$Code comments count$FG$, however. $FG,4$3rd party libraries are banned$FG$ because they circumvent the intent of this limit. The vision is a Commodore 64 ROM -- a fixed core API that is the only dependency of applications. Currently, there are $TX,"79,959",D="DD_TEMPLEOS_LOC_OFFICIAL"$ lines of code.
|
||||
|
||||
* It must be kept perfect. $FG,4$$BK,1$Backward compatibility is NOT guaranteed.$FG$$BK,0$
|
||||
* Minimal abstraction is a goal. Sheep are fools. They always respect a design that is more complicated than another. Any genius can make it complicated. Like in physics, it takes a supra-genius to make it simple.
|
||||
|
||||
* TempleOS is $FG,2$ring-0-only$FG$, running everything in kernel mode including applications. You have full access to memory, I/O ports, instructions, etc. at all times, because that's fun. It is simpler and faster, too.
|
||||
* One platform. $FG,4$$TX,"x86_64",HTML="http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$ PC compatibles. Desk-tops are all we design for, but lap-tops can tag-along.
|
||||
|
||||
* TempleOS will always $FG,2$identity-map$FG$ memory in a $FG,2$single-address-map$FG$ configuration. (Virtual addresses are always kept equal to physical addresses with a single map for all tasks on all cores.) It's as though paging is not used.
|
||||
* One driver for each class of device. Limited exceptions are allowed. With divergent device capabilities, it is a nightmare for user applications and what is gained? A three button mouse is like a leg you cannot put weight on.
|
||||
|
||||
* TempleOS will always be for one platform -- $FG,4$$TX,"x86_64",HTML="http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$ PC compatibles.
|
||||
* $FG,2$Ring-0-only$FG$. Everything runs in kernel mode, including user applications.
|
||||
|
||||
* TempleOS will never have networking, so malware is less of an issue.
|
||||
* Full access to everything. All memory, I/O ports, instructions, and similar things must never be off-limits. All functions, variables and class members will be accessible. There are no C++ $FG,2$public$FG$/$FG,2$private$FG$ protections and all functions, even secondary ones in the kernel, can be called.
|
||||
|
||||
* TempleOS will always have one video mode, $FG,2$640x480$FG$ by 16 colors, unless that mode becomes unavailable on computers in the future. God said this was a covenant, like circumcision.
|
||||
* $FG,2$Single-address-map$FG$ as though paging is not used. Long mode requires paging, however, so the nearest thing is keeping all memory $FG,2$identity-mapped$FG$.
|
||||
|
||||
* TempleOS will always just have PC Speaker sound.
|
||||
* $FG,4$No networking$FG$, so malware is not an issue.
|
||||
|
||||
* TempleOS will always be $FG,2$free$FG$. I might sell applications, support, or, possibly, do adware.
|
||||
* No encryption or passwords. Files are compressed, not encrypted.
|
||||
|
||||
* TempleOS will always be $FG,2$100% open source$FG$ with all source included, unless device drivers or something can only be included with non-disclosure agreements.
|
||||
* $FG,2$Free$FG$ and $FG,2$public domain$FG$.
|
||||
|
||||
* All function args and returns will be 64-bit. No plans for C++.
|
||||
* $FG,2$100% open source$FG$ with all source included.
|
||||
|
||||
* TempleOS documents are not for printing. They're dynamic and intended for the screen. There will always be just one font, a fixed-width font. No Unicode, just Extended ASCII.
|
||||
* Documents are not for printing. They're dynamic, intended for the screen.
|
||||
|
||||
* TempleOS is not for multimedia. Games will be created by programmers, not artists. Sounds and images will be, primarily, calculated in real-time, not fetched.
|
||||
* Just one 8x8 fixed-width font. $FG,4$No Unicode, just Extended ASCII$FG$. Other countries can make their own versions. The versions should be just for one language and platform.
|
||||
|
||||
* All functions, variables and class members will be accessible. There are no C++ $FG,2$public$FG$/$FG,2$private$FG$ protections and all functions, even secondary ones in the kernel, can be called.
|
||||
* $FG,4$No multimedia$FG$. Sounds and images will be primarily calculated in real-time, not fetched from storage.
|
||||
|
||||
$FG,8$
|
||||
* "Commodore 64" was a trademark of Commodore Business Machines.
|
||||
* "The Simpsons" is a trademark of Fox.
|
||||
* "Windows" is a trademark of MicroSoft Corp.
|
||||
$FG$
|
||||
|
||||
|
||||
$FG,5$$WW,1$$TX+CX,"Possible Amendments"$$FG$
|
||||
|
||||
The compiler's parser makes RISC code which it optimizes to CISC. I discovered this does not matter because the CPU converts it back to RISC and schedules it, internally. A TempleOS zealot with more zeal than I, might say we should save lines-of-code by removing the CISC optimizing.
|
||||
@@ -2,7 +2,7 @@ $WW,1$$FG,5$$TX+CX,"Command Line Overview"$$FG$
|
||||
|
||||
The cmd line feeds into the $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ compiler as you type. A statement outside a function executes immediately. Remember to add a semicolon.$WW,1$
|
||||
|
||||
Look-up the function headers with $FG,2$WordStat$FG$ by hitting $FG,2$<CTRL-SHIFT-F1>$FG$ after typing the first few letters.
|
||||
Look-up the function headers with $FG,2$AutoComplete$FG$ by hitting $FG,2$<CTRL-SHIFT-F1>$FG$ after typing the first few letters.
|
||||
|
||||
$LK,"Click Here",A="MN:Dir"$ to see the directory cmd header. It accepts default args from C++.
|
||||
|
||||
@@ -27,14 +27,14 @@ The drive can be specified in a $LK,"Cd",A="MN:Cd"$() command as in:
|
||||
>$FG,2$Cd("B:/Temp");$FG$ B drive
|
||||
>$FG,2$Cd("::/Demo");$FG$ Boot drive
|
||||
|
||||
>$FG,2$Cd("HOME/Psalmody");$FG$ HOME is your $LK,"acct dir",A="FF:::/Doc/GuideLines.TXT,ACCT FILES"$.
|
||||
>$FG,2$Cd("::/Home/Psalmody");$FG$ See $LK,"::/Home dir",A="FF:::/Doc/GuideLines.TXT,/Home Files"$.
|
||||
|
||||
If a file is not found, $FG,2$.Z$FG$ is added or removed and a search is done, again. If a file is still not found, all parent directories are searched.
|
||||
|
||||
You can place macros in your $LK,"PersonalMenu",A="FI:HOME/PersonalMenu.TXT"$ for $LK,"Cd",A="MN:Cd"$() commands. $FG,2$<CTRL-m>$FG$ to access your menu.
|
||||
You can place macros in your $LK,"PersonalMenu",A="FI:/Home/PersonalMenu.TXT"$ for $LK,"Cd",A="MN:Cd"$() commands. $FG,2$<CTRL-m>$FG$ to access your menu.
|
||||
|
||||
>$FG,2$Grep("needle","/Demo/*.CPP.Z;*.TXT.Z;");$FG$ See $LK,"File Utils",A="FI:::/Doc/FileUtils.TXT"$.
|
||||
>$FG,2$Find("needle","/Demo/*.CPP.Z;*.TXT.Z;");$FG$ See $LK,"File Utils",A="FI:::/Doc/FileUtils.TXT"$.
|
||||
|
||||
$LK,"Cmd Line Routines",A="HI:Cmd Line (Typically)"$
|
||||
|
||||
$MA-X+PU,"Take Tour",LM="SpawnUser(\"Cd(\\\"::/Misc/Tour\\\");;AutoFile(\\\"Tour\\\");\n\");"$
|
||||
$MA-X+PU,"Take Tour",LM="User(\"Cd(\\\"::/Misc/Tour\\\");;AutoFile(\\\"Tour\\\");\n\");"$
|
||||
@@ -13,8 +13,15 @@ $FG,2$#else
|
||||
$FG,2$#ifaot,#ifjit $FG$Include code if in $FG,2$AOT$FG$ compiler mode.
|
||||
$FG,2$defined()$FG$ Is a function that can be used in expressions.
|
||||
$FG,2$#help_index$FG$, $FG,2$#help_file$FG$ See $LK,"Help System",A="FI:::/Doc/HelpSystem.TXT"$.
|
||||
|
||||
See $LK,"Scoping and Linkages",A="FI:::/Doc/ImportExports.TXT"$, $LK,"preprocessor",A="FF:::/Compiler/Lex.CPP,KW_DEFINE"$ and $LK,"Compiler Options",A="FI:::/Doc/Options.TXT"$.
|
||||
$HL,1$$WW,0$
|
||||
#define __DATE__ #exe{StreamPrint("\"%D\"",Now);}
|
||||
#define __TIME__ #exe{StreamPrint("\"%T\"",Now);}
|
||||
#define __LINE__ #exe{StreamPrint("%d",Fs->last_lex->cur_lfn->line_num);}
|
||||
#define __DEPTH__ #exe{StreamPrint("%d",Fs->last_lex->cur_lfn-&Fs->last_lex->lfns-1);}
|
||||
#define __FILE__ #exe{StreamPrint("\"%s\"",Fs->last_lex->cur_lfn->full_name);}
|
||||
#define __DIR__ #exe{StreamDir;}
|
||||
$HL,0$$WW,1$
|
||||
See $LK,"::/Demo/Directives.CPP"$, $LK,"Scoping and Linkages",A="FI:::/Doc/ImportExports.TXT"$, $LK,"preprocessor",A="FF:::/Compiler/Lex.CPP,KW_DEFINE"$ and $LK,"Compiler Options",A="FI:::/Doc/Options.TXT"$.
|
||||
|
||||
|
||||
$FG,5$$TX+CX,"Assembler Directives"$$FG$
|
||||
|
||||
+3
-5
@@ -1,6 +1,6 @@
|
||||
$WW,1$$FG,5$$TX+CX,"Clearing-up Confusions"$$FG$
|
||||
|
||||
* I, $FG,2$Terry A. Davis$FG$, wrote every one of the $TX,"121,847",D="DD_TEMPLEOS_LOC"$ lines of TempleOS over the past $TX,"10.9",D="DD_TEMPLEOS_AGE"$ years (full-time). It runs on bare hardware with no layering, libraries, tools, modules or anything from other sources. It's 100% independent and stands alone. It has no networking and certainly doesn't call home. Every line of TempleOS src code is including in all distro's, from the kernel to the compiler to the boot loaders.
|
||||
* I, $FG,2$Terry A. Davis$FG$, wrote every one of the $TX,"121,138",D="DD_TEMPLEOS_LOC"$ lines of TempleOS over the past $TX,"11.0",D="DD_TEMPLEOS_AGE"$ years (full-time). It runs on bare hardware with no layering, libraries, tools, modules or anything from other sources. It's 100% independent and stands alone. It has no networking and certainly doesn't call home. Every line of TempleOS src code is including in all distro's, from the kernel to the compiler to the boot loaders.
|
||||
|
||||
* TempleOS does not execute code not written by me and any time except for a few $FG,2$BIOS$FG$ calls for configuration.
|
||||
|
||||
@@ -28,7 +28,7 @@ $WW,1$$FG,5$$TX+CX,"Clearing-up Confusions"$$FG$
|
||||
|
||||
* Files with names ending in $FG,2$.Z$FG$ are compressed, not encrypted. $LK,"Copy",A="MN:Copy"$() or rename them with $LK,"Move",A="MN:Move"$() to store them uncompressed.
|
||||
|
||||
* TempleOS is open src and every bit of the src code is included in the distro. Use $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$() to compile the kernel and compiler.
|
||||
* TempleOS is open src and every bit of the src code is included in the distro. Use $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$() to compile the kernel and compiler.
|
||||
|
||||
* TempleOS does not use object files or a linker.
|
||||
|
||||
@@ -38,9 +38,7 @@ $WW,1$$FG,5$$TX+CX,"Clearing-up Confusions"$$FG$
|
||||
|
||||
* No application has a lock on the speaker so apps can interfere with each other and TempleOS makes speaker noise during disk access on purpose.
|
||||
|
||||
* During boot, TempleOS reads-in all text files and collects statistic on them. It makes a sparse matrix containing the frequency each word was followed by each other word. This makes it able to predict the next word while you type. This feature is called $FG,2$WordStat$FG$.
|
||||
|
||||
* There are no mem leaks. TempleOS allocates mem as more items are displayed on the screen. TempleOS allocates mem for code as it is compiled at the cmd line. If you $FG,2$#include$FG$ a file twice, it allocates more mem for it. If you have a 50,000 line program with each line taking twenty bytes on a machine with 1 Gig, you could $FG,2$#include$FG$ it a thousand times if it had no data or graphics and no other use of mem. Code entered at the cmd line gets allocated and persists. I don't want to hear any bullshit about leaks unless you actually run-out. If it bothers you, hit $FG,2$<CTRL-ALT-x>$FG$ and $FG,2$<CTRL-ALT-e>, $FG$periodically$FG$. Use the pop-up flag on macros in your menu to spawn new tasks, run applications and free the applications when they are finished and everything will be fine. Small mem chunks stick to the task when they are freed until it is killed. The only way to get in trouble involves allocating multiple Meg chunks and freeing them. These can only be reused if the same size gets allocated again. Use $LK,"HeapLog",A="MN:HeapLog"$() and $LK,"HeapLogRep",A="MN:HeapLogRep"$() to see who allocated mem and didn't free it.
|
||||
* There are no mem leaks. TempleOS alllocs mem as more items are displayed on the screen. TempleOS alllocs mem for code as it is compiled at the cmd line. If you $FG,2$#include$FG$ a file twice, it alllocs more mem for it. If you have a 50,000 line program with each line taking twenty bytes on a machine with 1 Gig, you could $FG,2$#include$FG$ it a thousand times if it had no data or graphics and no other use of mem. Code entered at the cmd line gets alloced and persists. I don't want to hear any bullshit about leaks unless you actually run-out. If it bothers you, hit $FG,2$<CTRL-ALT-x>$FG$ and $FG,2$<CTRL-ALT-e>, $FG$periodically$FG$. Use the pop-up flag on macros in your menu to spawn new tasks, run applications and free the applications when they are finished and everything will be fine. Small mem chunks stick to the task when they are freed until it is killed. The only way to get in trouble involves allocating multiple Meg chunks and freeing them. These can only be reused if the same size gets alloced again. Use $LK,"HeapLog",A="MN:HeapLog"$() and $LK,"HeapLogRep",A="MN:HeapLogRep"$() to see who alloced mem and didn't free it.
|
||||
|
||||
* The editor periodically takes a snap-shot for $FG,2$UNDO$FG$ and this looks like a memory leak.
|
||||
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
$WW,1$$FG,5$$TX+CX,"Acknowledgements"$$FG$
|
||||
$WW,1$$FG,5$$TX+CX,"Credits"$$FG$
|
||||
|
||||
1) The font, $LK,"::/Kernel/Font8x8.CPP"$, is taken from $FG,4$$TX,"FreeDOS",HTML="http://www.freedos.org"$$FG$. It's public domain.
|
||||
|
||||
2) $LK,"ATA Reg and Cmd Definitions",A="MN:ATA_NOP"$ are originally from Linux. Later, I got the spec.
|
||||
|
||||
3) The heap algorithm, $LK,"::/Kernel/Mem1b.CPP"$, is adapted from one I saw at Ticketmaster when I worked on their VAX operating system.
|
||||
3) The heap algorithm, $LK,"::/Kernel/MemB.CPP"$, is adapted from one I saw at Ticketmaster when I worked on their VAX operating system.
|
||||
|
||||
4) The LZW compression algorithm, $LK,"::/Kernel/Compress.CPP"$, came from a magazine and I implemented it when I worked for Ticketmaster.
|
||||
|
||||
5) The adaptive-step-size-Runge-Kutta algorithm, $LK,"::/Adam/MathODE.CPP"$, is adapted from the book, $UL,1$Numeric Recipies in C$UL,0$.
|
||||
5) The adaptive-step-size-Runge-Kutta algorithm, $LK,"::/Adam/AMathODE.CPP"$, is adapted from the book, $UL,1$Numeric Recipies in C$UL,0$.
|
||||
|
||||
6) The random number generator is from the book, $UL,1$Numeric Recipies in C$UL,0$.
|
||||
|
||||
7) The mountain, palm trees, sheep and goats in AfterEgypt are from $FG,4$$TX,"http://www.public-domain-photos.com",HTML="http://www.public-domain-photos.com"$$FG$.
|
||||
7) The mountain, palm trees, sheep and goats in AfterEgypt are from $FG,4$$TX,"http://www.public-domain-photos.com",HTML="http://www.public-domain-photos.com"$$FG$. The wolf in BlackDiamond is also from there.
|
||||
|
||||
8) The $FG,2$FAT32$FG$ file system is owned by MicroSoft.
|
||||
|
||||
@@ -34,13 +34,13 @@ $WW,1$$FG,5$$TX+CX,"Acknowledgements"$$FG$
|
||||
|
||||
17) God told me to stick with 640x480 16 color, a single audio voice and kept me from zombie-walking into making child windows like $FG,2$Windows$FG$. Instead, I made one window per task with no child windows. He also guided my progress, very obviously.
|
||||
|
||||
18) I got $FG,4$$TX,"Webster's Dictionary",HTML="http://www.templeos.org/files/DICTIONARY.TXT"$$FG$ and $FG,4$$TX,"The King James Bible",HTML="http://www.templeos.org/files/BIBLE.TXT"$$FG$ from $FG,4$$TX,"Project Gutenberg",HTML="http://promo.net/pg/"$$FG$.
|
||||
18) I got $FG,4$$TX,"Webster's Dictionary",HTML="http://www.templeos.org/files/DICTIONARY.TXT"$$FG$ and $FG,4$$TX,"The King James Bible",HTML="http://www.templeos.org/files/BIBLE.TXT"$$FG$ from $FG,4$$TX,"Project Gutenberg",HTML="http://web.archive.org/web/20110730111436/http://promo.net/pg/"$$FG$.
|
||||
|
||||
19) John Carmack inspired me to use "$LK,"Clamp",A="MN:Clamp"$" as a name instead of "Limit". He inspired me to use "needle" and "haystack" as names. He inspired me to simplify my Frames-Per-Second code.
|
||||
|
||||
20) Bill Gates inspired me to add comments to my $LK,"Help & Index",A="FI:::/Doc/HelpIndex.TXT"$.
|
||||
|
||||
In short, I wrote every one of the $TX,"121,463",D="DD_TEMPLEOS_LOC"$ lines myself, no $FG,2$GPL$FG$ code, no linkage or dependence on other code. Anyone who says otherwise is being an ass.
|
||||
In short, I wrote every one of the $TX,"120,532",D="DD_TEMPLEOS_LOC"$ lines myself, no $FG,2$GPL$FG$ code, no linkage or dependence on other code. Anyone who says otherwise is being an ass.
|
||||
$FG,8$
|
||||
* "MSDOS", "Windows", "MovieMaker" "MS Paint" and "FAT32" are trademarks of MicroSoft Corp.
|
||||
* "SiteBuilder" is a trademark of Yahoo! Inc.
|
||||
+1
-1
@@ -1 +1 @@
|
||||
$WW,1$To create a TempleOS graphic ctrl, you define callback functions and insert a $LK,"CCtrl",A="MN:CCtrl"$ structure in the $LK,"CTask",A="MN:CTask"$ queue. See $LK,"::/Demo/Graphics/SliderCtrl.CPP"$, $LK,"::/Demo/Graphics/ScrollBars.CPP"$ and $LK,"TermButtonNew",A="FF:::/Adam/WallPaper.CPP,TermButtonNew"$. There is a template-code ctrl generator, if you press $FG,2$<CTRL-SHIFT-L>$FG$.
|
||||
$WW,1$To create a TempleOS graphic ctrl, you define callback functions and insert a $LK,"CCtrl",A="MN:CCtrl"$ structure in the $LK,"CTask",A="MN:CTask"$ queue. See $LK,"::/Demo/Graphics/Slider.CPP"$, $LK,"::/Demo/Graphics/ScrollBars.CPP"$ and $LK,"TermButtonNew",A="FF:::/Adam/WallPaper.CPP,TermButtonNew"$. There is a template-code ctrl generator, if you press $FG,2$<CTRL-SHIFT-L>$FG$.
|
||||
+3
-3
@@ -1,6 +1,6 @@
|
||||
|
||||
$WW,1$* You can adjust the mouse movement rate by setting global vars in your start-up file. See $LK,"mouse scale",A="FF:HOME/Adam3aLocalize.CPP,mouse.scale"$.
|
||||
$WW,1$* You can adjust the mouse movement rate by setting global vars in your start-up file. See $LK,"mouse scale",A="FF:/Home/AdamLocalize.CPP,mouse.scale"$.
|
||||
|
||||
* You can set your local time zone by setting the $RED$local_time_offset$FG$ global var in a start-up file. It's units are $LK,"CDATE_FREQ",A="MN:CDATE_FREQ"$. See $LK,"local time",A="FF:HOME/Adam3aLocalize.CPP,local_time"$.
|
||||
* You can set your local time zone by setting the $RED$local_time_offset$FG$ global var in a start-up file. It's units are $LK,"CDATE_FREQ",A="MN:CDATE_FREQ"$. See $LK,"local time",A="FF:/Home/AdamLocalize.CPP,local_time"$.
|
||||
|
||||
* Get rid of this msg $LK,"here",A="FF:HOME/DoOnce.CPP,Customize.TXT"$.
|
||||
* Get rid of this msg $LK,"here",A="FF:/Home/DoOnce.CPP,Customize.TXT"$.
|
||||
+2
-2
@@ -6,8 +6,8 @@ There are a few places where I cut corners in the interest of not junking-up cod
|
||||
|
||||
* TempleOS does not figure-out $FG,2$FAT32$FG$ short name alias numbers. $LK,"FAT32DirNew",A="MN:FAT32DirNew"$(). It can cause hard drive corruption, so I might have to do it. It would really take a lot of junky code for this hatefully, detestable, legacy issue. "Please don't make me ruin my beautiful shiny-new TempleOS with that!" I am also not enthused about $FG,2$FAT32$FG$ because it is in patent limbo. $FG,2$FAT32$FG$ might get removed from TempleOS. There is the $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ 64-bit file system that works perfectly well. $FG,2$FAT32$FG$ is useful, however, because it assists in transferring between dual booted operating systems.
|
||||
|
||||
* I changed the $LK,"asm opcodes",A="FI:::/Compiler/OpCodes.TXT"$ names to remove the ambiguity between instructions with different numbers of arguments, making my $LK,"assembler",A="FI:::/Compiler/Assembler.CPP"$ simpler and I did minimal 16-bit asm support, since 64-bit is what you should be using, unless you're doing a $LK,"boot loader",A="FI:::/Adam/Boot/BootCD.CPP"$.
|
||||
* I changed the $LK,"asm opcodes",A="FI:::/Compiler/OpCodes.TXT"$ names to remove the ambiguity between instructions with different numbers of arguments, making my $LK,"assembler",A="FI:::/Compiler/Asm.CPP"$ simpler and I did minimal 16-bit asm support, since 64-bit is what you should be using, unless you're doing a $LK,"boot loader",A="FI:::/Adam/Boot/BootCD.CPP"$.
|
||||
|
||||
* There are no file-sharing locks of any kind. You're on your own.
|
||||
|
||||
* A hidden window is never refreshed. Certain tasks are never done, therefore. During refresh, the entry count limit of the document buffer is, normally, checked and enforced. If you print to the command-line in a task who's window is covered, no limit on buffer exists and it will allocate memory for the document buffer until the system runs out of memory and crashes.
|
||||
* A hidden window is never refreshed. Certain tasks are never done, therefore. During refresh, the entry count limit of the document buffer is, normally, checked and enforced. If you print to the command-line in a task whose window is covered, no limit on buffer exists and it will alloc memory for the document buffer until the system runs out of memory and crashes.
|
||||
+1
-1
@@ -1,3 +1,3 @@
|
||||
$WW,1$TempleOS has a class for 3 dimensional points consisting of F64s. HolyC is not C++ -- it does not support passing or returning values from functions which are not 64-bits, therefore, it can't be implemented with operator overloading. Making all function args and returns 64-bit is a core prinicple of TempleOS.
|
||||
|
||||
As a courtesy, most of the CD3 functions return the addr of the destination vect, so you can nestle calls. They do not allocate new space for the destination vect.
|
||||
As a courtesy, most of the CD3 functions return the addr of the destination vect, so you can nestle calls. They do not alloc new space for the destination vect.
|
||||
+2
-2
@@ -37,6 +37,6 @@ $ID,-2$
|
||||
|
||||
* There is a heap check utility which can find leaks. Use $LK,"HeapLog",A="MN:HeapLog"$(), and $LK,"HeapLogRep",A="MN:HeapLogRep"$(). It's a really simple program which intercepts $LK,"MAlloc",A="MN:MAlloc"$() and $LK,"Free",A="MN:Free"$(). You can customize the code to find other heap issues.
|
||||
|
||||
* You can define handler functions for $FG,2$<CTRL-ALT-letter>$FG$ keys with $LK,"SetCtrlAltLetCB",A="MN:SetCtrlAltLetCB"$(). They operate either in a interrupt environment or in the window mgr when it queues kbd msgs. You can do $LK,"Raw",A="MN:Raw"$() output. $FG,2$<CTRL-ALT-letter>$FG$ handlers take a scan_code as an arg.
|
||||
* You can define handler functions for $FG,2$<CTRL-ALT-letter>$FG$ keys with $LK,"CtrlAltLetCBSet",A="MN:CtrlAltLetCBSet"$(). They operate either in a interrupt environment or in the window mgr when it queues kbd msgs. You can do $LK,"Raw",A="MN:Raw"$() output. $FG,2$<CTRL-ALT-letter>$FG$ handlers take a scan_code as an arg.
|
||||
|
||||
* If you recompile $FG,2$Kernel$FG,2$$FG$ with $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$(), you can set the $FG,4$MemInit$FG$, option to initialize memory to a value at boot, the $FG,4$HeapInit$FG$ option to cause mem allocated off the heap to be initialized or $FG,4$VarInit$FG$ option so both global and local vars will be initialized to a value. Pick a non-zero value to discover uninitialized var bugs. You can set $LK,"sys_var_init_flag",A="MN:sys_var_init_flag"$, and $LK,"sys_heap_init_flag",A="MN:sys_heap_init_flag"$ directly after booting.
|
||||
* If you recompile $FG,2$Kernel$FG,2$$FG$ with $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(), you can set the $FG,4$MemInit$FG$, option to initialize memory to a value at boot, the $FG,4$HeapInit$FG$ option to cause mem alloced off the heap to be initialized or $FG,4$VarInit$FG$ option so both global and local vars will be initialized to a value. Pick a non-zero value to discover uninitialized var bugs. You can set $LK,"sys_var_init_flag",A="MN:sys_var_init_flag"$, and $LK,"sys_heap_init_flag",A="MN:sys_heap_init_flag"$ directly after booting.
|
||||
+1
-1
@@ -1,2 +1,2 @@
|
||||
$WW,1$Use $FG,2$%p$FG$ to print a pointer with PSect+Offset or use $FG,2$%P$FG$ to print a link to a PSect+Offset.
|
||||
$WW,1$Use $GREEN$%p$FG$ to print a pointer with PSect+Offset or use $GREEN$%P$FG$ to print a link to a PSect+Offset.
|
||||
|
||||
+1
-1
@@ -2,6 +2,6 @@ $WW,1$TempleOS has a string indirection feature implemented with the same hash s
|
||||
|
||||
Each task can load it's own Define strings. Remember, when a $LK,"Hash",A="HI:Hash"$ table is searched for a string, if it is not found, the parent task's table is searched.
|
||||
|
||||
The $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ framework supports text that changes based on entries in the task's symbol table. Set a text entry with a $FG,2$D=$FG$ arg, as in $FG,2$$$TX,"",D="DD_MYSTRING"$$$FG$. See $LK,"::/Demo/DolDoc/DefineStr.CPP"$, $LK,"::/Adam/DocDefines.CPP"$ and $LK,"::/Doc/MemOverview.TXT"$.
|
||||
The $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ framework supports text that changes based on entries in the task's symbol table. Set a text entry with a $FG,2$D=$FG$ arg, as in $FG,2$$$TX,"",D="DD_MYSTRING"$$$FG$. See $LK,"::/Demo/DolDoc/DefineStr.CPP"$, $LK,"::/Adam/ADefine.CPP"$ and $LK,"::/Doc/MemOverview.TXT"$.
|
||||
|
||||
See $LK,"::/Demo/Define.CPP"$.
|
||||
+40
-75
@@ -2,99 +2,64 @@ $WW,1$$FG,5$$TX+CX,"Demands"$$FG$
|
||||
|
||||
When God publically claims this operating system as His temple, here's what I want:
|
||||
|
||||
|
||||
$HC,"<object width=\"640\" height=\"520\"><param name=\"movie\" value=\"http://www.youtube.com/v/EalSFnq9GsY\"></param><param name=\"allowscriptaccess\" value=\"always\"></param><embed src=\"http://www.youtube.com/v/EalSFnq9GsY\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" width=\"640\" height=\"520\"></embed></object>"$
|
||||
|
||||
|
||||
* VMware to again support PC Speaker and provide emulation if no PC Speaker is present.
|
||||
|
||||
* Windows and Linux to support $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ file system so I can get rid of 2,000 lines of redundant, blemished code -- FAT32 and ISO9660. God's temple must be perfect. Redundant code for multiple file systems is imperfect. For this operating system, we want low line count. More than one file system type is bad, just as more than one driver for the same type of device is bad.
|
||||
* Windows, Linux and VMware to support $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ file system so I can get rid of 2,000 lines of redundant, blemished code -- FAT32 and ISO9660. God's temple must be perfect. Redundant code for multiple file systems is imperfect. For this operating system, we want low line count. More than one file system type is bad, just as more than one driver for the same type of device is bad.
|
||||
|
||||
$LK,"::/Kernel/Dsk/FileSysRedSea.CPP"$
|
||||
$LK,"::/Kernel/Dsk/FileSysFAT.CPP"$ :965
|
||||
$LK,"::/Kernel/Dsk/FileSysISO1.CPP"$ :284
|
||||
$LK,"::/Kernel/Dsk/FileSysISO.CPP"$ :284
|
||||
$LK,"::/Adam/Boot/DskCDDVD.CPP"$ :536
|
||||
$LK,"RClustersBlks",A="MN:RClustersBlks"$()
|
||||
|
||||
* Microsoft must cancel SecureBoot because it makes dual booting impossible. TempleOS is an additional operating system that must be used along-side Windows or Linux, not as a replacement. It must dual boot.
|
||||
* Microsoft must cancel SecureBoot because it makes dual booting impossible. TempleOS is an additional operating system that must be used along-side Windows or Linux, not as a replacement. It must dual boot because it has no networking. Real hardware as opposed to $FG,2$VMware$FG$ is like the difference between looking in a telescope eye piece and some link to a photo on the Internet. God said the C64 generation owned ancestral lands and $FG,2$VMware$FG$ is like being moved on a reservation. It will not stand.
|
||||
|
||||
* PC hardware manufacturers: ATA/ATAPI PIO must work. In fact, put them at standard IDE port addresses. Hard disk should be primary master. CDROM/DVD should be secondary master. See what you can do to make flash memory sticks with ATA/ATAPI.
|
||||
* PC hardware manufacturers: ATA/ATAPI PIO must work. In fact, put them at standard IDE port addresses. Hard disk should be primary master 1F0/3F6. CDROM/DVD should be secondary master 170/376. See what you can do to make flash memory sticks with ATA/ATAPI.
|
||||
$LK,"/Kernel/Dsk/DskATAId.CPP",A="FI:::/Kernel/Dsk/DskATAId.CPP"$ :280 lines to figure-out I/O ports
|
||||
$LK,"/Kernel/BIOS32.CPP",A="FI:::/Kernel/BIOS32.CPP"$ :290
|
||||
|
||||
* PS/2 emulated keyboard and mouse must work. The BIOS must enable these.
|
||||
|
||||
* VMware must allow ATAPI interface to real CD/DVD hardware.
|
||||
|
||||
* Perhaps, VMware+Intel can enable faster-than-standard x86 IN/OUT instruction timing for ATA/ATAPI PIO, so bandwidth isn't bad.
|
||||
* Perhaps, VMware+Intel can enable faster-than-standard x86 IN/OUT instruction timing for ATA/ATAPI PIO, so bandwidth isn't bad. $LK,"ATAGetResult",A="MN:ATAGetResult"$().
|
||||
|
||||
* Computers should have a RESET switch and a fast boot option, skipping diagnostics.
|
||||
* Since I practically don't use paging, perhaps, Intel could add optimizations to long (64-bit) mode for no paging.
|
||||
|
||||
* VMware and others should list TempleOS as an official 64-bit operating systems.
|
||||
* Computers should have a RESET switch and a fast boot option, skipping diagnostics. What the heck, replace UEFI with TempleOS. Poetic justice.
|
||||
|
||||
* Windows and Linux must support TempleOS $FG,2$.GRA$FG$ graphics files. These are just right-side-up $FG,2$.BMP$FG$ files with 8-bits-per-pixels 4-bits of color and transparency, with no palette. Compression is an$FG$ LZW compression. $LK,"DCSave",A="MN:DCSave"$(), $LK,"GRAWrite",A="MN:GRAWrite"$(), $LK,"DCLoad",A="MN:DCLoad"$(), and $LK,"GRARead",A="MN:GRARead"$(). $LK,"::/Kernel/Compress.CPP"$
|
||||
* VMware and others should list TempleOS as an official 64-bit operating system.
|
||||
|
||||
* Windows and Linux must support TempleOS $FG,2$.GRA$FG$ graphics files. $LK,"GRA Files",A="FI:::/Doc/GRAFiles.TXT.Z"$ are much cleaner than $FG,2$.BMP$FG$ files.
|
||||
|
||||
* I want a nice dictionary. Someone needs to do a $LK,"Spell Checker",A="FI:::/Demo/SuggestSpelling.CPP"$.
|
||||
|
||||
* We want the ultimate Bible search engine.
|
||||
|
||||
* I would like the Intel architecture manuals in $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ TXT format so we can put links in the code.
|
||||
|
||||
* We want serial ports with software interface more like old style serial ports, but hardware and speed of USB3. They should have big TX and RX FIFOs and allow flow control to jump the queue. We do not want end-point shit -- just put lots of ports on the PC. (I am just interested in desk-tops.) We need two baud rates, fast and slow. Use PIC IRQ3 and IRQ4 (with big FIFOs we could do without IRQs.) We want two joysticks, easy to set-up. We want it to be easy to connect a microcontroller for general purpose communication.
|
||||
|
||||
* Once in a blue moon, perhaps 49 year jubilee, the hardware gets upgraded and perfected, the same way broadcast TV get upgraded. God still wants 640x480 16 color.
|
||||
|
||||
|
||||
----
|
||||
|
||||
In other words, all hardware and BIOSes must support TempleOS, dual booted with Windows or Linux. Hypervisors must support it fully.
|
||||
|
||||
It would be nice if TempleOS were burned into BIOS ROMs in the factory, or Intel CPU chips! Then, the oracle code would be guaranteed trustworthy. My hope is that it will be finalized, mostly unchanging for centuries.
|
||||
|
||||
I need a good dictionary and need to fix spellcheck. Maybe, we leave the dictionary out.
|
||||
|
||||
I do not intend to ever support UEFI. That uses elf and various propriatary graphics formats. It requires additional lines of code and offers nothing!
|
||||
Device Simple Hardware Interface Complicate Interface
|
||||
--------------- ------------------------------- -----------------------------
|
||||
1040-EZ Tax Form 1040 Regular
|
||||
Video VGA 640x480 16 Color 20 Differnet GPUs
|
||||
Sound PC Speaker HD Audio, AC97, Sound Blaster
|
||||
HardDrive ATA Port I/O, Sync No Interrupt PCI AHCI SATA
|
||||
CDROM ATAPI Port I/O PCI AHCI SATA
|
||||
Keyboard/Mouse PS/2 Port I/O USB
|
||||
|
||||
|
||||
During the 49 years jubilee, we do a perfect version of hardware with advances in both simple and complicated interfaces. ATAPI/ATA should be merged and made blemish-free. We want flash memory sticks to interface like hard drives. Design it like the 1040EZ tax form. You do not add extra boxes to get your jollies.
|
||||
|
||||
|
||||
$FG,5$$TX+CX,"New Rules"$$FG$
|
||||
|
||||
$HC,"<object width=\"640\" height=\"520\"><param name=\"movie\" value=\"http://www.youtube.com/v/z3qu-sCei3U\"></param><param name=\"allowscriptaccess\" value=\"always\"></param><embed src=\"http://www.youtube.com/v/z3qu-sCei3U\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" width=\"640\" height=\"520\"></embed></object>"$
|
||||
|
||||
Guess what, biotches? Daddy's home! $LK,"Deuteronomy,16:16",A="BF:Deuteronomy,16:16",HTML="http://www.biblegateway.com/passage/?search=Deuteronomy%2016:16&version=NIV"$ Y'all have to do three offerings per year in the Temple.
|
||||
|
||||
|
||||
These are examples of my offerings.
|
||||
|
||||
1) $TX,"Hymn Videos",HTML="http://www.templeos.org/Wb/Accts/TS/Wb2/Hymns.html"$
|
||||
|
||||
2) $TX,"Moses Comics",HTML="http://www.templeos.org/Wb/Apps/AfterEgypt/Comics"$
|
||||
|
||||
$LK,"Psalms,50:11-15",A="BF:Psalms,50:1",HTML="http://www.biblegateway.com/passage/?search=Psalm%%2050:11-15&version=WYC"$
|
||||
|
||||
$LK,"Malachi,1:1-14",A="BF:Malachi,1:1",HTML="http://www.biblegateway.com/passage/?search=Malachi%%201:1-14&version=NIV"$
|
||||
|
||||
$LK,"Hosea,6:6",A="BF:Hosea,6:6",HTML="http://www.biblegateway.com/passage/?search=Hosea%%206:6&version=NRSV"$
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
$FG,5$$TX+CX,"God's Temple"$$FG$
|
||||
|
||||
God said 640x480 16 color.
|
||||
|
||||
God said single audio voice. (Waveforms okay)
|
||||
|
||||
God said lots of misc stuff, like no child windows.
|
||||
|
||||
I said there is a 100,000 line-of-code limit.
|
||||
|
||||
We have $TX,"81,303",D="DD_TEMPLEOS_LOC_OFFICIAL"$ lines of code, currently, and can expand up to 100,000, but code comments count. I am opening-this-up to letting other people contribute. We'll have some kind of organization.
|
||||
|
||||
When you have a 100,000 line of code limit, you do not get mellow-dramatic code. The vision is a C64, not a manned mission NASA mainframe. If you prance around adding rare-case code, that subtracts from other potential features. So, long as you know that every line of code added, subtracts a feature, we'll be okay.
|
||||
|
||||
|
||||
The 640x480 16 color limit is certainly astounding. God said it was for kid offerings, I guess like 8 crayola colors for kindergardeners. If you must make a art drawing for you three yearly offerings, you'll be happy only 16 colors exist. Just think! Everybody's workload on doing offerings is eased by having only 16 colors. Isn't that good?
|
||||
|
||||
Today, God said dull causes craftiness. I think what God means is... on a C64, you saw fantasticly crafty creativity because you were not burdened with high-demand photo-realism graphics and sound. Otherwise, you spend all your energy just burdened with getting something presentable. Now, you will achieve "presentable" easily and advance to embelishing and getting creative.
|
||||
|
||||
God said 640x480 16 color was a covenant, like circumcision.
|
||||
|
||||
The 100,000 line of code limit should ensure God's temple stays on-course for a thousand years. Also, it must be kept perfect. With these, it will not go astray. I could hand it over to NASA (for example) and, so long as they kept the 100,000 line of code limit, it would be in good hands. For the future, I expect low driver-line-count hardware to be created and utilized when all (mostly) computers have advanced to contain it. All computer are 64-bit, now, for example, if you catch my drift.
|
||||
|
||||
|
||||
|
||||
The original core values for this operating system were based on providing kids, today, what I had as a kid -- Ring-0-Only and Identity-mapped simplicity and accessibility. I had this book, $FG,4$$TX,"Mapping the Commodore 64",HTML="http://unusedino.de/ec64/technical/project64/mapping_c64.html"$$FG$, and it provided years of entertainment. All the public and private operating system code and locations were explained and accessible, useful or not. What I did was learn and tinker. That was the entertainment.
|
||||
|
||||
Today, I imposed the 100,000 line of code limit because -- when you see the light at the end of the tunnel, it is a qualitatively different ball game.
|
||||
|
||||
Look at chapter 6: $TX,"Commodore 64 User's Manual",HTML="http://www.commodore.ca/manuals/c64_users_guide/c64-users_guide.htm"$. The thing you did with a C64 was write BASIC programs with hand-coded binary sprite data statements. Bill Gates would say, "You kids are so lucky today, you can pick from 100 fonts and write HTML webpages."
|
||||
|
||||
|
||||
I would hope NASA (If they were caretakers... 'cause SETI or something, LOL) would not need to be told that Ring-0-Only and Identity-Mapped are core values. I thought maybe I wouldn't have to enshrine that and they would, on their own, just know that. You could fix the gaps in address space, very easily, but you lose a big principle -- virtual same as physical. That's worth fight for and sacrificing for. It's simpler. Think of the kids! It's also fast.
|
||||
|
||||
$FG,8$
|
||||
* "VMware" is a trademark of VMware, Inc.
|
||||
* "Linux" is probably a trademark owned by Linus Torvalds.
|
||||
* "Windows" is a trademark of MicroSoft Corp.
|
||||
+6
-2
@@ -21,6 +21,7 @@ $LK,"::/Demo/MsgLoop.CPP"$
|
||||
$LK,"::/Demo/Graphics/Doodle.CPP"$
|
||||
$LK,"::/Demo/Graphics/Speedline.CPP"$
|
||||
$LK,"::/Demo/Graphics/Bounce.CPP"$
|
||||
$LK,"::/Demo/RandDemo.CPP"$
|
||||
$LK,"::/Demo/KeyBitMap.CPP"$
|
||||
$LK,"::/Demo/Graphics/WinZBuf.CPP"$
|
||||
$LK,"::/Demo/Graphics/Elephant.CPP"$
|
||||
@@ -41,6 +42,7 @@ $LK,"::/Demo/Games/Halogen.CPP"$
|
||||
$LK,"::/Demo/Games/TheDead.CPP"$
|
||||
$LK,"::/Demo/Games/RainDrops.CPP"$
|
||||
$LK,"::/Demo/Snd/MorseCode.CPP"$
|
||||
$LK,"::/Demo/Graphics/Lattice.CPP"$
|
||||
$LK,"::/Demo/Graphics/Collision.CPP"$
|
||||
$LK,"::/Demo/Games/BlackDiamond.CPP"$
|
||||
$LK,"::/Demo/Games/Wenceslas.CPP"$
|
||||
@@ -68,12 +70,12 @@ $LK,"::/Demo/Graphics/Cartesian.CPP"$
|
||||
$LK,"::/Demo/Graphics/Hanoi.CPP"$
|
||||
$LK,"::/Demo/Graphics/Life.CPP"$
|
||||
$LK,"::/Demo/Games/Zing.CPP"$
|
||||
$LK,"::/Demo/Games/ChessNet.CPP"$
|
||||
$LK,"::/Demo/Games/TreeCheckers.CPP"$
|
||||
$LK,"::/Demo/MultiCore/Palindrome.CPP"$
|
||||
$LK,"::/Demo/MultiCore/MPAdd.CPP"$
|
||||
$LK,"::/Demo/MultiCore/Lock.CPP"$
|
||||
$LK,"::/Demo/MultiCore/Clouds.CPP"$
|
||||
$LK,"::/Demo/Graphics/SliderCtrl.CPP"$
|
||||
$LK,"::/Demo/Graphics/Slider.CPP"$
|
||||
$LK,"::/Demo/Graphics/WallPaperCtrl.CPP"$ //Press SHIFT-F5 to Adam Include
|
||||
$LK,"::/Demo/Graphics/ScrollBars.CPP"$
|
||||
$LK,"::/Demo/RegistryDemo.CPP"$
|
||||
@@ -99,6 +101,7 @@ $LK,"::/Demo/Graphics/Shadow.CPP"$
|
||||
$LK,"::/Demo/Graphics/Pick3D.CPP"$
|
||||
$MA-X+PU,"::/Apps/ToTheFront",LM="Cd(\"::/Apps/ToTheFront\");Dir;View;\n"$
|
||||
$LK,"::/Demo/Graphics/SpriteText.CPP"$
|
||||
$LK,"::/Demo/Graphics/SpriteRaw.CPP"$
|
||||
$MA-X+PU,"::/Apps/GrModels",LM="Cd(\"::/Apps/GrModels\");Dir;View;\n"$
|
||||
$MA-X+PU,"::/Apps/KeepAway",LM="Cd(\"::/Apps/KeepAway\");Dir;View;\n"$
|
||||
$LK,"::/Demo/Graphics/Camp.CPP"$
|
||||
@@ -126,6 +129,7 @@ $LK,"::/Demo/PhoneNumWords.CPP"$
|
||||
$LK,"::/Demo/SuggestSpelling.CPP"$
|
||||
$LK,"::/Demo/WordSearch.CPP"$
|
||||
$LK,"::/Demo/Graphics/CommonAncestor.CPP"$
|
||||
$LK,"::/Demo/Directives.CPP"$
|
||||
$LK,"::/Demo/Carry.CPP"$
|
||||
$LK,"::/Demo/Dsk/DataBase.CPP"$
|
||||
$LK,"::/Demo/Dsk/FPrintF.CPP"$
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
$HL,1$$WW,0$#define __DATE__ #exe{StreamPrint("\"%D\"",Now);}
|
||||
#define __TIME__ #exe{StreamPrint("\"%T\"",Now);}
|
||||
#define __LINE__ #exe{StreamPrint("%d",Fs->last_lex->cur_lfn->line_num);}
|
||||
#define __DEPTH__ #exe{StreamPrint("%d",Fs->last_lex->cur_lfn-&Fs->last_lex->lfns-1);}
|
||||
#define __FILE__ #exe{StreamPrint("\"%s\"",Fs->last_lex->cur_lfn->full_name);}
|
||||
#define __DIR__ #exe{StreamDir;}
|
||||
|
||||
See $LK,"::/Demo/Directives.CPP"$.$HL,0$$WW,1$
|
||||
@@ -118,10 +118,10 @@ Examples: <CTRL-t> to see
|
||||
2)$LK,"File link to HelpIndex.TXT with link type file",A="FI:::/Doc/HelpIndex.TXT"$
|
||||
3)File link with same tag str. $LK,"::/Doc/HelpIndex.TXT"$
|
||||
4)$LK,"File find link searching for 'Admin'",A="FF:::/Doc/HelpIndex.TXT,Admin"$
|
||||
5)$LK,"File find link searching for 5th 'CTRL'",A="FF:::/Kernel/Adam1a.HPP,CTRL:5"$
|
||||
5)$LK,"File find link searching for 5th 'CTRL'",A="FF:::/Kernel/KernelA.HPP,CTRL:5"$
|
||||
6)$LK,"Manual page link",A="MN:Print"$
|
||||
7)$LK,"File line num link",A="FL:::/Kernel/Adam1a.HPP,200"$
|
||||
8)$LK,"File anchor link -- <CTRL-t> to see anchor after you click",A="FA:::/Compiler/CmpInit.CPP,IC_INIT_TABLE"$
|
||||
7)$LK,"File line num link",A="FL:::/Kernel/KernelA.HPP,200"$
|
||||
8)$LK,"File anchor link -- <CTRL-t> to see anchor after you click",A="FA:::/Kernel/KEnd.CPP,Independent HeapCtrl Example"$
|
||||
9)$LK,"Bible Link",A="BF:Acts,2:3"$ The chapter:verse actually just does a text search.
|
||||
10) $LK,"Help Index Link",A="HI:Doc"$.
|
||||
11) $LK,"Address Link",A="AD:0x10000"$.
|
||||
@@ -139,7 +139,7 @@ $ID,2$A left macro arg, $FG,2$LM=""$FG$, will send text when the left mouse is c
|
||||
|
||||
A left auto string, $FG,2$+LA$FG$, flag will cause text to be sent to $LK,"AutoStr",A="MN:AutoStr"$() instead of $LK,"Auto",A="MN:Auto"$(). An AutoStr runs code. Literal text is in quotes and messages are sent with $LK,"Msg",A="MN:Msg"$(). See $MA-X+PU,LM="Dir(\"::/Demo/AutoFile\");View;"$.
|
||||
|
||||
Macro's are usually in your $LK,"HOME/PersonalMenu.TXT"$ and have the '$FG,2$+X$FG$' flag set by $LK,"default",A="MN:DocInit"$. Adding '$FG,2$-X$FG$' prevents the usual $FG,2$<ESC>$FG$ from being sent (which exits the PersonalMenu screen). Note: When you click a macro on the cmd line, it will go to the bottom and execute unless you cancel the $FG,2$<ESC>$FG$ with a '$FG,2$-X$FG$'.
|
||||
Macro's are usually in your $LK,"::/Home/PersonalMenu.TXT"$ and have the '$FG,2$+X$FG$' flag set by $LK,"default",A="MN:DocInit"$. Adding '$FG,2$-X$FG$' prevents the usual $FG,2$<ESC>$FG$ from being sent (which exits the PersonalMenu screen). Note: When you click a macro on the cmd line, it will go to the bottom and execute unless you cancel the $FG,2$<ESC>$FG$ with a '$FG,2$-X$FG$'.
|
||||
$ID,-2$$TR,"MU Menu Value"$
|
||||
$ID,2$A left expression arg, $FG,2$LE=<Exp>$FG$, will return a number when clicked with the left mouse.
|
||||
|
||||
@@ -202,7 +202,9 @@ $ID,2$A quit flag is similar to a $FG,2$+X$FG$ except a $FG,2$<SHIFT-ESC>$FG$ in
|
||||
$ID,-2$$TR,"+Z Zero"$
|
||||
$ID,2$A zero flag on a $FG,2$HX$FG$ entry will cause the offset from zero. A $FG,2$-X$FG$ will show the actual memory addr. By default, $FG,2$HX$FG$ has the zero flag set.
|
||||
$ID,-2$$TR,"+RD Refresh Data"$
|
||||
$ID,2$The Refresh Data flag on a $FG,2$DA$FG$ or a $FG,2$CB$FG$ makes the value updated continuously.
|
||||
$ID,2$The Refresh Data flag on a $FG,2$DA$FG$ or a $FG,2$CB$FG$ makes the value on the screen updated continuously.
|
||||
$ID,-2$$TR,"+UD Update Data"$
|
||||
$ID,2$The Update Data flag on a $FG,2$DA$FG$ or a $FG,2$CB$FG$ makes the value in the $LK,"CDocEntry",A="MN:CDocEntry"$ updated when keys are typed on it.
|
||||
$ID,-2$$TR,"+LC Left CallBack"$
|
||||
$ID,2$See $LK,"::/Demo/DolDoc/ClickCallBack.CPP"$.
|
||||
$ID,-2$$TR,"+RC Right CallBack"$
|
||||
@@ -216,9 +218,9 @@ $ID,2$Some cmds need auxilliary strings. $FG,2$A="str"$FG$ means an $LK,"CDocEn
|
||||
$ID,-2$$TR,"D=\"\" Define Str"$
|
||||
$ID,2$A $FG,2$D=""$FG$ means either a $LK,"define",A="HI:Define"$ str indirection is present on a text widget, or a define list is present on a list widget.
|
||||
|
||||
For indirection, the tag will be regenerated by substituting the value of a system $FG,2$#define$FG$ or $LK,"DefineLoad",A="MN:DefineLoad"$() string. See $LK,"::/Demo/DolDoc/DefineStr.CPP"$, $LK,"::/Adam/DocDefines.CPP"$ and $LK,"::/Doc/MemOverview.TXT"$.
|
||||
For indirection, the tag will be regenerated by substituting the value of a system $FG,2$#define$FG$ or $LK,"DefineLoad",A="MN:DefineLoad"$() string. See $LK,"::/Demo/DolDoc/DefineStr.CPP"$, $LK,"::/Adam/ADefine.CPP"$ and $LK,"::/Doc/MemOverview.TXT"$.
|
||||
|
||||
For $FG,2$LS$FG$ widgets, see $LK,"::/Demo/DolDoc/Form.CPP.Z"$.
|
||||
For $FG,2$LS$FG$ widgets, see $LK,"::/Demo/DolDoc/Form.CPP"$.
|
||||
$ID,-2$$TR,"HTML=\"\""$
|
||||
$ID,2$The $LK,"ToHtml",A="MN:ToHtml"$() or $LK,"Doc2Html",A="MN:Doc2Html"$() routines will generate a html version of a document. You can cause html link on an item with $FG,2$HTML=""$FG$.
|
||||
$ID,-2$$TR,"LE=<Exp> Left Expression"$
|
||||
|
||||
+2
-2
@@ -8,7 +8,7 @@
|
||||
|
||||
* Free, $FG,2$public domain$FG$, $FG,2$100% open source$FG$.
|
||||
|
||||
* 64-bit $FG,2$compiler/assembler$FG$ for $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$. Truly compiles, not interprets. $FG,2$Just-in-Time$FG$ and $FG,2$Ahead-of-Time$FG$ compilation. With $FG,2$JIT$FG$, no need for object or exe files.
|
||||
* 64-bit $FG,2$compiler/assembler$FG$ for $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$. Truly compiles, doesn't interpret. $FG,2$Just-in-Time$FG$ and $FG,2$Ahead-of-Time$FG$ compilation. With $FG,2$JIT$FG$, no need for object or exe files.
|
||||
|
||||
* No 32-bit krufty code.
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
* Real-time fancy $FG,2$differential-equation solver$FG$ for physics engines, to use in games. (Adaptive step-size Runge-Kutta, interpolated for real-time.)
|
||||
|
||||
* Auto-completion, jump-to-source tool called $FG,2$WordStat$FG$ with Dictionary.
|
||||
* Auto-completion, jump-to-source tool called $FG,2$AutoComplete$FG$ with Dictionary.
|
||||
|
||||
* Window Manager. Pan screen with $FG,2$<CTRL-LeftDrag>$FG$. Zoom screen on mouse cursor with $FG,2$<CTRL-ALT-z>$FG$/$FG,2$<CTRL-ALT-SHIFT-Z>$FG$.
|
||||
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
$WW,1$GRA graphics files are 8-bits-per-pixels but only 4-bits of color, with transparency and no palette. Compression is the standard TempleOS$FG$ LZW compression.
|
||||
$HL,1$
|
||||
#define DCF_COMPRESSED 1 //This is the only saved flag.
|
||||
|
||||
#define TRANSPARENT 0xFF
|
||||
#define BLACK 0
|
||||
#define BLUE 1
|
||||
#define GREEN 2
|
||||
#define CYAN 3
|
||||
#define RED 4
|
||||
#define PURPLE 5
|
||||
#define BROWN 6
|
||||
#define LTGRAY 7
|
||||
#define DKGRAY 8
|
||||
#define LTBLUE 9
|
||||
#define LTGREEN 10
|
||||
#define LTCYAN 11
|
||||
#define LTRED 12
|
||||
#define LTPURPLE 13
|
||||
#define YELLOW 14
|
||||
#define WHITE 15
|
||||
|
||||
class GRAFile
|
||||
{
|
||||
I32 width;
|
||||
I32 width_internal; //Rounded-up to multiple of 8.
|
||||
I32 height;
|
||||
I32 flags; //DCF_COMPRESSED? See $LK,"::/Kernel/Compress.CPP"$.
|
||||
U8 body[];
|
||||
};$HL,0$
|
||||
|
||||
See $LK,"DCSave",A="MN:DCSave"$(), $LK,"GRAWrite",A="MN:GRAWrite"$(), $LK,"DCLoad",A="MN:DCLoad"$(), and $LK,"GRARead",A="MN:GRARead"$().
|
||||
+16
-12
@@ -2,12 +2,15 @@ $WW,1$$FG,5$$TX+CX,"Glossery"$$FG$
|
||||
|
||||
$TR,"Abbreviations"$
|
||||
$ID,2$$FG,2$Abs$FG$ Absolute
|
||||
$FG,2$AC$FG$ AutoComplete
|
||||
$FG,2$Acct$FG$ Account
|
||||
$FG,2$ACD$FG$ AutoComplete Dictionary
|
||||
$FG,2$Addr$FG$ Address
|
||||
$FG,2$Alloc$FG$ Allocate
|
||||
$FG,2$AOT$FG$ Ahead-of-Time
|
||||
$FG,2$AP$FG$ Application Processor(CPU#>0)
|
||||
$FG,2$Arg$FG$ Argument
|
||||
$FG,2$Asm$FG$ Assemble or Assembly
|
||||
$FG,2$Asm$FG$ Assemble, Assembler or Assembly
|
||||
$FG,2$Attr$FG$ Attribute
|
||||
$FG,2$Aux$FG$ Auxilliary
|
||||
$FG,2$BG$FG$ Backround
|
||||
@@ -55,6 +58,7 @@ $FG,2$Gen$FG$ Generate
|
||||
$FG,2$Glbl$FG$ Global
|
||||
$FG,2$Gr$FG$ Graphic
|
||||
$FG,2$IDE$FG$ Integrated Drive Electronics, Integrated Development Environment
|
||||
$FG,2$Id$FG$ Identification
|
||||
$FG,2$Ident$FG$ Identifier, Identity
|
||||
$FG,2$IDT$FG$ Interrupt Descriptor Table
|
||||
$FG,2$Init$FG$ Initialize
|
||||
@@ -91,11 +95,13 @@ $FG,2$Prec$FG$ Precedence
|
||||
$FG,2$Pri$FG$ Primary
|
||||
$FG,2$Prod$FG$ Product, Production
|
||||
$FG,2$Prof$FG$ Profile, Profiler
|
||||
$FG,2$Prs$FG$ Parse, Parser
|
||||
$FG,2$Prt$FG$ Partition
|
||||
$FG,2$PSect$FG$ Program Section
|
||||
$FG,2$Pt$FG$ Point
|
||||
$FG,2$Ptr$FG$ Pointer
|
||||
$FG,2$Que$FG$ Queue
|
||||
$FG,2$Rand$FG$ Random
|
||||
$FG,2$Ref$FG$ Reference
|
||||
$FG,2$Reg$FG$ Register, Registry, Regular
|
||||
$FG,2$Rem$FG$ Remove
|
||||
@@ -127,18 +133,16 @@ $FG,2$Vect$FG$ Vector
|
||||
$FG,2$Vol$FG$ Volume
|
||||
$FG,2$Win$FG$ Window
|
||||
$FG,2$Wiz$FG$ Wizard
|
||||
$FG,2$WS$FG$ WordStat
|
||||
$FG,2$WSD$FG$ WordStat Dictionary
|
||||
$ID,-2$$TR,"Task/Process/Thread"$
|
||||
$ID,2$There is no distinction between $FG,2$task$FG$, $FG,2$process$FG$ or $FG,2$thread$FG$. The $FG,2$Fs$FG$ segment reg is kept pointing to the current task's $LK,"CTask",A="MN:CTask"$. There is only one window per task, and only $FG,2$core#0$FG$ tasks can have windows. Each task has a code and data heap so memory is returned when it dies. Each task has a $LK,"hash",A="HI:Hash"$ symbol table.
|
||||
$ID,-2$$TR,"Adam Task"$
|
||||
$ID,2$This is Adam, as in Adam and Eve, the parent of all tasks and immortal. This task is created at start-up and appears in the small window at the top beneath the user windows. On it's heap are all memory objects which you don't want destroyed by a task's death. When created, Adam runs the file $LK,"::/Kernel/Adam1.CPP"$ Normally, $FG,2$Adam1.CPP.Z$FG$ ends by $FG,2$#include$FG$ $LK,"::/Adam/Adam2.CPP"$ where the remainder of the operating system is $FG,2$#include$FG$d. When start-up is finished, the adam task enters a server mode where it accepts requests from other tasks. The $LK,"Adam",A="MN:Adam"$("") routine will make Adam compile and run text src code. $FG,2$#include$FG$ statements can be sent to $LK,"Adam",A="MN:Adam"$(""), creating system-wide code and data which don't disappear when any particular task ends.
|
||||
$ID,2$This is Adam, as in Adam and Eve, the parent of all tasks and immortal. This task is created at start-up and appears in the small window at the top beneath the user windows. On it's heap are all memory objects which you don't want destroyed by a task's death. When created, Adam runs the file $LK,"::/Adam.CPP"$. When start-up is finished, the adam task enters a server mode where it accepts requests from other tasks. The $LK,"Adam",A="MN:Adam"$("") routine will make Adam compile and run text src code. $FG,2$#include$FG$ statements can be sent to $LK,"Adam",A="MN:Adam"$(""), creating system-wide code and data which don't disappear when any particular task ends.
|
||||
$ID,-2$$TR,"Seth Task"$
|
||||
$ID,2$$FG,2$Seth$FG$ is Adam and Eve's child. Each CPU core has a special task which is immortal and which is special. The Adam task on $FG,2$CPU#0$FG$ is also it's $FG,2$Seth$FG$ task.
|
||||
$ID,-2$$TR,"Code and Data Heaps"$
|
||||
$ID,2$TempleOS uses the asm $FG,2$CALL$FG$ instruction, exclusively, and that instruction is limited to calling routines $FG,2$+/-2 Gig$FG$ from the current code location. To prevent out-of-range issues, I decided to separate code and data, placing all code within the lowest $FG,2$2 Gig$FG$ of memory, addresses $FG,2$00000000$FG$-$FG,2$7FFFFFFF$FG$. The compiler and $LK,"Load",A="MN:Load"$()er allocate memory from the code heap to store code and glbl vars, unless the compiler option $LK,"OPTf_GLBLS_ON_DATA_HEAP",A="MN:OPTf_GLBLS_ON_DATA_HEAP"$ is used. When programs call $LK,"MAlloc",A="MN:MAlloc"$() is from the data heap, which in not limited in size, except by physical RAM memory. You can allocate from any heap in any task at any time on any core, even making $LK,"independent",A="MN:MemBlksIndependentAlloc"$ heaps.
|
||||
$ID,2$TempleOS uses the asm $FG,2$CALL$FG$ instruction, exclusively, and that instruction is limited to calling routines $FG,2$+/-2 Gig$FG$ from the current code location. To prevent out-of-range issues, I decided to separate code and data, placing all code within the lowest $FG,2$2 Gig$FG$ of memory, addresses $FG,2$00000000$FG$-$FG,2$7FFFFFFF$FG$. The compiler and $LK,"Load",A="MN:Load"$()er alloc memory from the code heap to store code and glbl vars, unless the compiler option $LK,"OPTf_GLBLS_ON_DATA_HEAP",A="MN:OPTf_GLBLS_ON_DATA_HEAP"$ is used. When programs call $LK,"MAlloc",A="MN:MAlloc"$() is from the data heap, which in not limited in size, except by physical RAM memory. You can alloc from any heap in any task at any time on any core, even making $LK,"independent",A="MN:Mem512Alloc"$ heaps.
|
||||
$ID,-2$$TR,"Parent, Child and PopUp Tasks"$
|
||||
$ID,2$Often a task will $LK,"Spawn",A="MN:Spawn"$() or $LK,"PopUp",A="MN:PopUp"$() a task as a helper. The helper is known as a child Task, though you can $LK,"Spawn",A="MN:Spawn"$ a task and assign it a different parent... like $FG,2$Adam$FG$. Links are kept as to who's who's child, so when one task is $LK,"Kill",A="MN:Kill"$()ed the child helper tasks die, too. You can get a report of current system tasks with $LK,"TaskRep",A="MN:TaskRep"$(). There is just one window per task, so child tasks are needed for pop-ups.
|
||||
$ID,2$Often a task will $LK,"Spawn",A="MN:Spawn"$() or $LK,"PopUp",A="MN:PopUp"$() a task as a helper. The helper is known as a child Task, though you can $LK,"Spawn",A="MN:Spawn"$ a task and assign it a different parent... like $FG,2$Adam$FG$. Links are kept as to who's whose child, so when one task is $LK,"Kill",A="MN:Kill"$()ed the child helper tasks die, too. You can get a report of current system tasks with $LK,"TaskRep",A="MN:TaskRep"$(). There is just one window per task, so child tasks are needed for pop-ups.
|
||||
$ID,-2$$TR,"HolyC"$
|
||||
$ID,2$$LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ is more than $FG,2$C$FG$ and less than $FG,2$C++$FG$. It has the default args of $FG,2$C++$FG$ and uses $FG,2$class$FG$ in place of $FG,2$struct$FG$. It uses $FG,2$U0,U8,U16,U32,I64$FG$ and $FG,2$I0,I8,I16,I32,I64$FG$ for signed and unsigned integers. It has different $LK,"operator precedence",A="FF:::/Doc/HolyC.TXT,operator precedence"$. It has $FG,2$PASCAL$FG$-like function calls with no parens, but requires an $FG,2$&$FG,2$$FG$ when referring to function addresses.
|
||||
$ID,-2$$TR,"AOT Compile Mode"$
|
||||
@@ -146,13 +150,13 @@ $ID,2$$FG,2$Ahead-of-Time$FG$ compiling is conventional compilation mode. Do no
|
||||
|
||||
In $FG,2$AOT$FG$ mode, $FG,2$.PRJ$FG$ files are compiled to $FG,2$.BIN$FG$ files, skipping $FG,2$.OBJ$FG$ files. After compiling, $FG,2$.BIN$FG$ files are $LK,"Load",A="MN:Load"$()ed.
|
||||
|
||||
There is no $FG,2$main()$FG$ routine. Instead, statements outside functions are automatically executed upon loading. There is no way to unload except by killing the task. To invoke $FG,2$AOT Compiled Mode$FG$, $LK,"Cmp",A="MN:Cmp"$() is used. The $FG,2$Kernel$FG$ module and compiler are made in $FG,2$AOT$FG$ compiled mode. See $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$() which calls $LK,"MakeAll",A="MN:MakeAll"$() where $FG,2$Kernel.BIN.C$FG$ and $FG,2$Compiler.BIN.Z$FG$ are created.
|
||||
There is no $FG,2$main()$FG$ routine. Instead, statements outside functions are automatically executed upon loading. There is no way to unload except by killing the task. To invoke $FG,2$AOT Compiled Mode$FG$, $LK,"Cmp",A="MN:Cmp"$() is used. The $FG,2$Kernel$FG$ module and compiler are made in $FG,2$AOT$FG$ compiled mode. See $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$() which calls $LK,"MakeAll",A="MN:MakeAll"$() where $FG,2$Kernel.BIN.C$FG$ and $FG,2$Compiler.BIN.Z$FG$ are created.
|
||||
$ID,-2$$TR,"JIT Compile Mode"$
|
||||
$ID,2$In $FG,2$just-in-time$FG$ mode, the compiler places code and data in memory allocated from the heap, incrementally, making them immediately ready for in-place execution. This mode is used during cmd line operations. When you $FG,2$#include$FG$ a file, it is compiled function by function and code ends-up all over in the memory, at least in the first 2Gig of memory. The $LK,"ExeFile",A="MN:ExeFile"$() routine is the same as $FG,2$#include$FG$ but can be used in programs. $LK,"ExePrint",A="MN:ExePrint"$() routine will compile and run a string.
|
||||
$ID,2$In $FG,2$just-in-time$FG$ mode, the compiler places code and data in memory alloced from the heap, incrementally, making them immediately ready for in-place execution. This mode is used during cmd line operations. When you $FG,2$#include$FG$ a file, it is compiled function by function and code ends-up all over in the memory, at least in the first 2Gig of memory. The $LK,"ExeFile",A="MN:ExeFile"$() routine is the same as $FG,2$#include$FG$ but can be used in programs. $LK,"ExePrint",A="MN:ExePrint"$() routine will compile and run a string.
|
||||
$ID,-2$$TR,"Compiler Intermediate Code"$
|
||||
$ID,2$The compiler generates instructions one step before making actual assembly (machine) language instructions. This code is reverse polish stack machine in nature and can be viewed with $LK,"OTrace",A="MN:OTrace"$(). The compiler does not $FG,2$interpret$FG$ code, except in the process of optimization to make the final machine code. Assembly language output can be viewed when code is compiled with the $LK,"CTrace",A="MN:CTrace"$(), or, afterward, with $LK,"U",A="MN:U"$() or $LK,"Uf",A="MN:Uf"$("").
|
||||
$ID,-2$$TR,"Partition/Drive"$
|
||||
$ID,2$There is no distinction between $FG,2$partition$FG$ or $FG,2$drive$FG$. They are specified with a single letter from $FG,2$A$FG$-$FG,2$Z$FG$.
|
||||
$ID,-2$$TR,"Drive/Partition"$
|
||||
$ID,2$There is no distinction between $FG,2$drive$FG$ or $FG,2$partition$FG$. They are specified with a single letter from $FG,2$A$FG$-$FG,2$Z$FG$.
|
||||
|
||||
'$FG,2$:$FG$' is the boot drive.
|
||||
|
||||
@@ -194,7 +198,7 @@ $FG,5$*.DAT.Z;*.DAT$FG$
|
||||
$FG,5$*.ISO$FG$
|
||||
CD-ROM image file--ISO9660.
|
||||
$FG,5$*.AUT.Z;*.AUT$FG$
|
||||
$FG,2$AutoFile$FG$ Basically a HolyC program who's stdout goes to the input of a task when $LK,"AutoFile",A="MN:AutoFile"$() is called.
|
||||
$FG,2$AutoFile$FG$ Basically a HolyC program whose stdout goes to the input of a task when $LK,"AutoFile",A="MN:AutoFile"$() is called.
|
||||
$FG,5$*.GRA.Z;*.GRA$FG$
|
||||
Graphics file
|
||||
|
||||
@@ -235,7 +239,7 @@ $ID,2$The CPU FS segment reg. This reg points to the current task's $LK,"CTask"
|
||||
$ID,-2$$TR,"Gs"$
|
||||
$ID,2$The CPU GS segment reg. This reg points to the current core's $LK,"CCPU",A="MN:CCPU"$.
|
||||
$ID,-2$$TR,"Heap"$
|
||||
$ID,2$Programs can dynamically request chunks of memory allocated from a $FG,2$heap$FG$ using $LK,"MAlloc",A="MN:MAlloc"$(). They must $LK,"Free",A="MN:Free"$() it when finished. Ptrs are used to refer to the chunk. The $FG,2$heap$FG$ is dynamically allocated mem.
|
||||
$ID,2$Programs can dynamically request chunks of memory alloced from a $FG,2$heap$FG$ using $LK,"MAlloc",A="MN:MAlloc"$(). They must $LK,"Free",A="MN:Free"$() it when finished. Ptrs are used to refer to the chunk. The $FG,2$heap$FG$ is dynamically alloced mem.
|
||||
$ID,-2$$TR,"Root"$
|
||||
$ID,2$The base of a binary tree or the head of a queue is the $FG,2$root$FG$. (I don't like the word $FG,2$head$FG$.)
|
||||
$ID,-2$$TR,"Join"$
|
||||
|
||||
Binary file not shown.
+1
-1
@@ -2,7 +2,7 @@ $FG,5$$TX+CX,"The Grub Master Bootloader"$$FG$
|
||||
|
||||
$WW,1$Here are my $FG,2$grub.cfg$FG$ file entries for my TempleOS partitions. I don't have the patience to do it correctly and GRUB obfuscates. Chain loading is just the normal way an operating system like Windows boots. They do drives, zero-based, and partitions on drives, one-based. They call traditional partitioning a "msdos" partition and I presume, if there is a new way to partition drives, it has a new name.
|
||||
|
||||
In addition to a Windows and a Linux partition, I have a Primary TempleOS $FG,2$'D'$FG$, Backup TempleOS $FG,2$'E'$FG$ and a Transfer $FG,2$'I'$FG$ partition for transferring between Windows and TempleOS. "hd0" is 1st hard drive, zero-based numbering. "msdos1" is partition #1, traditional msdos partitioning. I keep $FG,2$'D'$FG$, $FG,2$'E'$FG$, and $FG,2$'I'$FG$ identical by frequently copying all files and I use $FG,2$'I'$FG$ to transfer files. They only need to be a couple Gig in size. Every time I copy files, use $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$() to $LK,"MakeAll",A="MN:MakeAll"$ and prepare the partition $LK,"boot sector",A="FI:::/Adam/Boot/BootHD.CPP"$ for chainloading by patching the new block address and size of $FG,2$Kernel.BIN.C$FG$.
|
||||
In addition to a Windows and a Linux partition, I have a Primary TempleOS $FG,2$'D'$FG$, Backup TempleOS $FG,2$'E'$FG$ and a Transfer $FG,2$'I'$FG$ partition for transferring between Windows and TempleOS. "hd0" is 1st hard drive, zero-based numbering. "msdos1" is partition #1, traditional msdos partitioning. I keep $FG,2$'D'$FG$, $FG,2$'E'$FG$, and $FG,2$'I'$FG$ identical by frequently copying all files and I use $FG,2$'I'$FG$ to transfer files. They only need to be a couple Gig in size. Every time I copy files, use $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$() to $LK,"MakeAll",A="MN:MakeAll"$ and prepare the partition $LK,"boot sector",A="FI:::/Adam/Boot/BootHD.CPP"$ for chainloading by patching the new block address and size of $FG,2$Kernel.BIN.C$FG$.
|
||||
|
||||
menuentry "TempleOS D" {
|
||||
insmod chain
|
||||
|
||||
+15
-15
@@ -1,6 +1,6 @@
|
||||
$WW,1$$FG,5$$TX+CX,"Directory Structure"$$FG$
|
||||
|
||||
$FG,2$/Accts$FG$ Each subdirectory is an acct. When you boot, you can select an acct to login to, unless you compile Kernel soas to pick one. Your acct directory is your $FG,2$HOME$FG$ directory and all your user data should be placed in here to ease backing-up your data. When you Install an application it will create a subdirectory of your $FG,2$HOME$FG$ directory for storage.
|
||||
$FG,2$/Home$FG$ All your user data should be placed in here to ease backing-up your data. When you install an application it will create a subdirectory of your $FG,2$/Home$FG$ directory for storage.
|
||||
|
||||
$FG,2$/Apps$FG$ Applications are placed in subdirectories of $FG,2$/Apps$FG$. Applications should have a file called $FG,2$Install.CPP.Z$FG$ which will install the app for the current user acct. The file, $FG,2$Load.CPP.Z$FG$ will load the application into mem. The file, $FG,2$Run.CPP.Z$FG$, will usually load and execute the app. To add an app to your PersonalMenu, use $FG,2$<CTRL-l>$FG$, insert a macro with the PopUp option checked and invoke the $FG,2$Run.CPP.Z$FG$ file.
|
||||
|
||||
@@ -8,27 +8,27 @@ $FG,2$/Demo$FG$ Here you can find lots of sample code to do various things.
|
||||
|
||||
$FG,2$/Doc$FG$ Here you can find documentation.
|
||||
|
||||
$FG,2$/Kernel$FG$ The core of the operating system is found here. Since priviledge levels are not used, calling it a $FG,2$kernel$FG$ is deceptive. It is $FG,2$AOT$FG$ compiled by $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$(). It is loaded by the boot loader and must fit in 640K.
|
||||
$FG,2$/Kernel$FG$ The core of the operating system is found here. Since priviledge levels are not used, calling it a $FG,2$kernel$FG$ is deceptive. It is $FG,2$AOT$FG$ compiled by $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). It is loaded by the boot loader and must fit in 640K.
|
||||
|
||||
$FG,2$/Compiler$FG$ The compiler module src code is found here. The compiler is $FG,2$AOT$FG$ compiled to produce a binary file which is loaded at boot. It, too, is $FG,2$AOT$FG$ compiled by $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$().
|
||||
$FG,2$/Compiler$FG$ The compiler module src code is found here. The compiler is $FG,2$AOT$FG$ compiled to produce a binary file which is loaded at boot. It, too, is $FG,2$AOT$FG$ compiled by $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$().
|
||||
|
||||
$FG,2$/Adam$FG$ The non-kernel part of the operating system is found here. It is $FG,2$JIT$FG$ compiled during boot.
|
||||
|
||||
|
||||
|
||||
$FG,5$$TX+CX,"Acct Files"$$FG$
|
||||
$FG,5$$TX+CX,"::/Home Files"$$FG$
|
||||
|
||||
You can add and remove accts by making or removing directories in the $FG,2$::/Accts$FG$ directory. An empty account directory should be valid because it will get default files from the parent directory. Compile the $LK,"Kernel",A="MN:MakeOSPrtBootInstall"$ to set the active acct or cause it to prompt an account at boot.
|
||||
An empty $FG,2$::/Home$FG$ directory should be valid because it will get default files from the root directory.
|
||||
|
||||
$LK,"HOME/PersonalMenu.TXT"$ a menu viewed with the $FG,2$<CTRL-m>$FG$ key or by clicking "$FG,2$MENU$FG$" in the upper left border area of a window.
|
||||
$LK,"::/Home/PersonalMenu.TXT"$ a menu viewed with the $FG,2$<CTRL-m>$FG$ key or by clicking "$FG,2$MENU$FG$" in the upper left border area of a window.
|
||||
|
||||
$LK,"HOME/PersonalNotes.TXT"$ a personal note file viewed with the $FG,2$<CTRL-SHIFT-M>$FG$ key.
|
||||
$LK,"::/Home/PersonalNotes.TXT"$ a personal note file viewed with the $FG,2$<CTRL-SHIFT-M>$FG$ key.
|
||||
|
||||
$LK,"HOME/Adam3.CPP"$ files invoked when the adam task starts-up. Customize these!
|
||||
$FG,4$::/Home/Adam*$FG$ Copy $FG,2$Adam*$FG$ files from the root into $FG,2$::/Home$FG$ and customize them. These files are invoked when the adam task starts-up.
|
||||
|
||||
$LK,"HOME/DoOnce.CPP"$ a file invoked at the start-up of the first user. Customize this!
|
||||
$LK,"::/Home/DoOnce.CPP"$ a file invoked at the start-up of the first user. Customize this!
|
||||
|
||||
$LK,"HOME/Registry.CPP"$ can be edited by hand or deleted to reset to defaults. Takes affect next boot.
|
||||
$LK,"::/Home/Registry.CPP"$ can be edited by hand or deleted to reset to defaults. Takes affect next boot.
|
||||
|
||||
|
||||
|
||||
@@ -40,15 +40,15 @@ $FG,5$$TX+CX,"Application Policies"$$FG$
|
||||
|
||||
* Make a file called $FG,2$Run.CPP.Z$FG$ to load and run the application, preferable by $FG,2$#include$FG$ing the $FG,2$Load.CPP.Z$FG$ file.
|
||||
|
||||
* Place user data in a subdirectory of $FG,2$HOME$FG$, preferably naming the subdirectory the same as the $FG,2$/Apps$FG$ subdirectory. Or, place data in the $FG,2$Registry.CPP.Z$FG$ file. See $LK,"::/Demo/RegistryDemo.CPP"$.
|
||||
* Place user data in a subdirectory of $FG,2$/Home$FG$, preferably naming the subdirectory the same as the $FG,2$/Apps$FG$ subdirectory. Or, place data in the $FG,2$Registry.CPP.Z$FG$ file. See $LK,"::/Demo/RegistryDemo.CPP"$.
|
||||
|
||||
* If the app needs files in the $FG,2$HOME$FG$ directory, make an $FG,2$/Apps$FG$ file called $FG,2$Install.CPP.Z$FG$ or $FG,2$Install.AUT.Z$FG$ to create the $FG,2$HOME$FG$ subdirectory and do similar stuff.
|
||||
* If the app needs files in the $FG,2$/Home$FG$ directory, make an $FG,2$/Apps$FG$ file called $FG,2$Install.CPP.Z$FG$ or $FG,2$Install.AUT.Z$FG$ to create the $FG,2$/Home$FG$ subdirectory.
|
||||
|
||||
|
||||
|
||||
$FG,5$$TX+CX,"Programming Guidelines"$$FG$
|
||||
|
||||
* Virtual mem/Paging is not used -- it is identity mapped in $FG,2$x86_64$FG$ mode. The stk does not grow, so allocate enough when the task (process) is $LK,"Spawn",A="MN:Spawn"$ed and use the heap for most things. (The $FG,2$heap$FG$ refers to $LK,"MAlloc",A="MN:MAlloc"$() and $LK,"Free",A="MN:Free"$().)
|
||||
* Virtual mem/Paging is not used -- it is identity mapped in $FG,2$x86_64$FG$ mode. The stk does not grow, so alloc enough when the task (process) is $LK,"Spawn",A="MN:Spawn"$ed and use the heap for most things. (The $FG,2$heap$FG$ refers to $LK,"MAlloc",A="MN:MAlloc"$() and $LK,"Free",A="MN:Free"$().)
|
||||
|
||||
* See $LK,"Naming Convention",A="FF:::/Doc/Glossary.TXT,Naming Convention"$ and $LK,"Abbreviations",A="FF:::/Doc/Glossary.TXT,Abbreviations"$.
|
||||
|
||||
@@ -76,7 +76,7 @@ $FG,5$$TX+CX,"Programming Guidelines"$$FG$
|
||||
|
||||
$FG,5$$TX+CX,"Hash Sym Tables"$$FG$
|
||||
|
||||
* See $LK,"::/Adam/Hash2a.CPP"$ for examples of how the hash tables are set-up. Basically, syms are placed into hash tables and child process hash tables are chained to parents. This provides scopes for vars and functions.
|
||||
* See $LK,"::/Adam/AHash.CPP"$ for examples of how the hash tables are set-up. Basically, syms are placed into hash tables and child process hash tables are chained to parents. This provides scopes for vars and functions.
|
||||
|
||||
* $FG,2$adam_task->hash_table$FG$ holds the $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ syms loaded in on start-up.
|
||||
|
||||
@@ -94,7 +94,7 @@ $FG,5$$TX+CX,"Assembly Language"$$FG$
|
||||
|
||||
* Don't change the segment regs unless interrupts are off. It's hard to do, anyway. $LK,"SET_FS_BASE",A="MN:SET_FS_BASE"$ and $LK,"SET_GS_BASE",A="MN:SET_GS_BASE"$.
|
||||
|
||||
* When interacting with $LK,"HolyC",A="FI:::/Doc/HolyC.TXT.Z"$ compiled code, preserve $FG,2$RBP, RSI, RDI, R10-R15$FG$ because the compiler uses these for reg vars. You are free to clobber $FG,2$RAX, RBX, RCX, RDX$FG$, $FG,2$R8$FG$ and $FG,2$R9$FG$. See $LK,"Compiler Reg Masks",A="MN:REG_VARS_MASK"$, $LK,"PUSH_C_REGS",A="MN:PUSH_C_REGS"$ and $LK,"POP_C_REGS",A="MN:POP_C_REGS"$
|
||||
* When interacting with $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ compiled code, preserve $FG,2$RBP, RSI, RDI, R10-R15$FG$ because the compiler uses these for reg vars. You are free to clobber $FG,2$RAX, RBX, RCX, RDX$FG$, $FG,2$R8$FG$ and $FG,2$R9$FG$. See $LK,"Compiler Reg Masks",A="MN:REG_VARS_MASK"$, $LK,"PUSH_C_REGS",A="MN:PUSH_C_REGS"$ and $LK,"POP_C_REGS",A="MN:POP_C_REGS"$
|
||||
|
||||
* I recommend using the standard stk frame for functions because $LK,"Caller",A="MN:Caller"$() is used to display the call stk, such as for the wallpaper.
|
||||
$FG,2$ PUSH RBP
|
||||
|
||||
Binary file not shown.
+4
-4
@@ -14,7 +14,7 @@ $FG,2$ U0 void, but ZERO size!
|
||||
I32 int
|
||||
U32 unsigned int
|
||||
I64 long (64-bit)
|
||||
I64 unsigned long (64-bit)
|
||||
U64 unsigned long (64-bit)
|
||||
F64 double$FG$
|
||||
$FG,4$no F32 float.$FG$
|
||||
|
||||
@@ -182,7 +182,7 @@ $FG$$ID,-2$
|
||||
|
||||
* There is no question-colon operator.
|
||||
|
||||
* TempleOS $LK,"operator precedence",A="FF:::/Compiler/CmpInit.CPP,cmp.binary_ops"$
|
||||
* TempleOS $LK,"operator precedence",A="FF:::/Compiler/CInit.CPP,cmp.binary_ops"$
|
||||
$FG,2$`$FG$,$FG,2$>>$FG$,$FG,2$<<$FG$
|
||||
$FG,2$*$FG$,$FG,2$/$FG$,$FG,2$%$FG$
|
||||
$FG,2$&$FG$
|
||||
@@ -212,7 +212,7 @@ $FG$$ID,-2$
|
||||
|
||||
* "$FG,2$$$$FG$" is an escape character. Two dollar signs signify an ordinary $$. See $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$. In $FG,2$asm$FG$ or $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ code, it also refers to the instruction's address or the offset in a $FG,2$class$FG$ definition.
|
||||
|
||||
* $FG,2$union$FG$ is more like a class, so you don't reference it with a $FG,2$union$FG$ label after you define it. Some common unions are declared in $LK,"Adam1a.HPP",A="MN:U16"$ for 1,2,4 and 8 byte objects. If you place a type in front of a union declaration, that is the type when used by itself. See $LK,"::/Demo/SubIntAccess.CPP"$.
|
||||
* $FG,2$union$FG$ is more like a class, so you don't reference it with a $FG,2$union$FG$ label after you define it. Some common unions are declared in $LK,"KernelA.HPP",A="MN:U16"$ for 1,2,4 and 8 byte objects. If you place a type in front of a union declaration, that is the type when used by itself. See $LK,"::/Demo/SubIntAccess.CPP"$.
|
||||
|
||||
* $FG,2$class$FG$ member vars can have meta data. $FG,2$fmtstr$FG$ and $FG,2$fmtdata$FG$ are two meta data types now used. All compiler structures are saved and you can access the compiler's info about classes and vars. See $LK,"::/Demo/ClassMeta.CPP"$ and $LK,"DocFormDo",A="MN:DocFormDo"$().
|
||||
|
||||
@@ -226,7 +226,7 @@ $FG$$ID,-2$
|
||||
|
||||
* $FG,2$lock{}$FG$ can be used to apply asm $FG,2$LOCK$FG$ prefixes to code for safe multicore read-modify-write accesses. The code bracked with have $FG,2$LOCK$FG$ asm prefix's applied to relevant instructions within. It's a little shoddy. See $LK,"::/Demo/MultiCore/Lock.CPP"$.
|
||||
|
||||
* There is a function called $LK,"MSize",A="MN:MSize"$() which gives the size of an object allocated off the heap. For larger size allocations, the system rounds-up to a power of two, so $FG,2$MSize()$FG$ lets you know the real size and you can take full advantage of it.
|
||||
* There is a function called $LK,"MSize",A="MN:MSize"$() which gives the size of an object alloced off the heap. For larger size allocations, the system rounds-up to a power of two, so $FG,2$MSize()$FG$ lets you know the real size and you can take full advantage of it.
|
||||
|
||||
* You can $LK,"Free",A="MN:Free"$() a $FG,2$NULL$FG$ ptr. Useful variants of $LK,"MAlloc",A="MN:MAlloc"$() can be found $LK,"Here",A="MN:CAlloc"$. Each task has a heap and you can $FG,2$MAlloc$FG$ and $FG,2$Free$FG$ off of other task's heaps, or make an independent heap with $LK,"HeapCtrlBPInit",A="MN:HeapCtrlBPInit"$().
|
||||
|
||||
|
||||
+6
-6
@@ -4,7 +4,7 @@ Burn a CD with software that supports ISO files. Then, boot it. It's a live CD
|
||||
|
||||
Dual booting with another operating system is the best way to use TempleOS. I only use it in a virtual machine because it won't boot natively on my machine, though. For native dual booting, you need a partition for TempleOS. Windows often comes with a restore disk that does not allow repartitioning. I recommend connecting a spare additional hard drive and using the $FG,2$BIOS$FG$ to select which drive to boot.
|
||||
|
||||
If you boot the CD/DVD-ROM and log-in as the "Install" account it will automate much of this.
|
||||
The $LK,"::/Misc/OSInstall.CPP"$ script will automate much of this. It runs if you boot the CD/DVD-ROM.
|
||||
|
||||
See $LK,"Boot.TXT",A="FI:::/Doc/Boot.TXT"$ for an overview of booting. See $LK,"Requirements",A="FI:::/Doc/Requirements.TXT"$ for supported hardware. See $LK,"Upgrading",A="FI:::/Doc/Upgrade.TXT"$ if you are upgrading.
|
||||
|
||||
@@ -23,20 +23,20 @@ $BK,1$WARNING:$BK,0$ This command erases everything on a hard drive. It repart
|
||||
|
||||
$BK,1$WARNING:$BK,0$ This command doesn't play well with other operating systems. You'll need to do a $LK,"MasterBootZero",A="MN:MasterBootZero"$() to restore your drive to a state where other operating systems can partition it.
|
||||
$ID,-2$
|
||||
$ID,-2$2) $LK,"Fmt",A="MN:Fmt"$($FG,2$'D'$FG$,$FG,2$TRUE,FALSE,PT_FAT32$FG$)
|
||||
$ID,2$This command formats a partition with $FG,2$FAT32$FG$ or the $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ file system type. Use the drive letter of the partition in place of $FG,2$'D'$FG$.
|
||||
$ID,-2$2) $LK,"Fmt",A="MN:Fmt"$($FG,2$'D'$FG$,$FG,2$TRUE,FALSE,DVT_FAT32$FG$)
|
||||
$ID,2$This command formats a drive with $FG,2$FAT32$FG$ or the $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ file system type. Use the drive letter of the partition in place of $FG,2$'D'$FG$.
|
||||
|
||||
$BK,1$WARNING:$BK,0$ If you are upgrading, be sure not to lose the file, $FG,2$/0000Boot/OldMBR.BIN.C$FG$.
|
||||
|
||||
$ID,-2$3) $LK,"CopyTree",A="MN:CopyTree"$($FG,2$"T:/"$FG$,$FG,2$"D:/"$FG$)
|
||||
$ID,2$This command is used to copy files onto a hard drive partition from the CD-ROM. Use the drive letter of the partition in place of $FG,2$'D'$FG$.
|
||||
|
||||
$ID,-2$4) $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$($FG,2$'D'$FG$)
|
||||
$ID,2$This command recompiles the source code on a partition and writes to the $UL,1$partition's$UL,0$ boot record. You'll need to reenter the $LK,"Mount",A="MN:Mount"$ information so it can be stored in the kernel.
|
||||
$ID,-2$4) $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$($FG,2$'D'$FG$)
|
||||
$ID,2$This command recompiles the source code on a drive and writes to the $UL,1$drive's$UL,0$ boot record. You'll need to reenter the $LK,"Mount",A="MN:Mount"$ information so it can be stored in the kernel.
|
||||
|
||||
$ID,-2$5) Use Linux's $LK,"Grub",A="FI:::/Doc/Grub.TXT"$ or TempleOS' $LK,"MasterBootIntall",A="MN:MasterBootIntall"$($FG,2$'D'$FG$)
|
||||
$ID,2$
|
||||
The $LK,"MasterBootIntall",A="MN:MasterBootIntall"$() command places a boot loader on a drive to boot partitions. It saves the old master boot record to $FG,2$/0000Boot/OldMBR.BIN.C$FG$ and replaces it. When you boot, you will have the option of booting the old master boot record. This command can be skipped if you already have a boot loader. Be sure not to lose the copy of the old boot record, like if you reformat the partition.
|
||||
The $LK,"MasterBootIntall",A="MN:MasterBootIntall"$() command places a boot loader on a drive. It saves the old master boot record to $FG,2$/0000Boot/OldMBR.BIN.C$FG$ and replaces it. When you boot, you will have the option of booting the old master boot record. This command can be skipped if you already have a boot loader. Be sure not to lose the copy of the old boot record, like if you reformat the drive.
|
||||
|
||||
Delete $FG,2$/0000Boot/OldMBR.BIN.C$FG$ if you want to get a fresh copy of a mbr, like if installing from your own custom CD containing it's own $FG,2$/0000Boot/OldMBR.BIN.C$FG$ onto a system with a non-TempleOS boot loader.
|
||||
|
||||
|
||||
+4
-4
@@ -10,9 +10,9 @@ $FG,2$<ALT-keys>$FG$ and $FG,2$<ALT-SHIFT-keys>$FG$ Free for user configuration
|
||||
|
||||
$FG,2$<ALT-digit keys>$FG$ Extended ASCII (3 digit decimal number).
|
||||
|
||||
$FG,2$<CTRL-ALT-keys>$FG$ and $FG,2$<CTRL-ALT-SHIFT-keys>$FG$ Handled at a system level, NOT by the $LK,"CDoc",A="MN:CDoc"$ editor. I reserve the right to allocate these, but in the mean time, you can define your own handlers with $LK,"SetCtrlAltLetCB",A="MN:SetCtrlAltLetCB"$(). They operate either in a interrupt environment or in the window mgr when it queues kbd msgs. You can do $LK,"Raw",A="MN:Raw"$() output. $FG,2$<CTRL-ALT-letter>$FG$ handlers take a scan_code as an arg.
|
||||
$FG,2$<CTRL-ALT-keys>$FG$ and $FG,2$<CTRL-ALT-SHIFT-keys>$FG$ Handled at a system level, NOT by the $LK,"CDoc",A="MN:CDoc"$ editor. I reserve the right to alloc these, but in the mean time, you can define your own handlers with $LK,"CtrlAltLetCBSet",A="MN:CtrlAltLetCBSet"$(). They operate either in a interrupt environment or in the window mgr when it queues kbd msgs. You can do $LK,"Raw",A="MN:Raw"$() output. $FG,2$<CTRL-ALT-letter>$FG$ handlers take a scan_code as an arg.
|
||||
|
||||
$FG,2$<CTRL-function key>$FG$ Auto-completes wordstat words.
|
||||
$FG,2$<CTRL-function key>$FG$ Auto-completes local words.
|
||||
|
||||
$FG,2$<CTRL-digit key>$FG$ $FG$Auto-completes dictionary words.
|
||||
|
||||
@@ -20,8 +20,8 @@ $FG,2$<CTRL-SHIFT-function key>$FG$ $FG$Jumps to src code.
|
||||
|
||||
$FG,2$<CTRL-SHIFT-digit key>$FG$ Jumps to dictionary definition.
|
||||
|
||||
$FG,2$<function keys>$FG$ and $FG,2$<SHIFT-function keys>$FG$ $FG$I reserve the right to allocate these, but there are some free now.
|
||||
$FG,2$<function keys>$FG$ and $FG,2$<SHIFT-function keys>$FG$ $FG$I reserve the right to alloc these, but there are some free now.
|
||||
|
||||
$FG,2$<CTRL-key>$FG$ and $FG,2$<CTRL-SHIFT-key>$FG$ I reserve the right to allocate to these. There are not many free.
|
||||
$FG,2$<CTRL-key>$FG$ and $FG,2$<CTRL-SHIFT-key>$FG$ I reserve the right to alloc to these. There are not many free.
|
||||
$AN,"",A="PutKeyHandling"$
|
||||
See $LK,"Keyboard Devices",A="HI:Keyboard Devices/System"$.
|
||||
+1
-1
@@ -1,3 +1,3 @@
|
||||
$WW,1$The compiler's lexical analyzer can be used in your programs to simplify parsing. See $LK,"Doc Parsing",A="FF:::/Adam/DolDoc/DocPlain.CPP,LexNew"$ or $LK,"Parse Opcode File",A="FF:::/Compiler/CmpInit.CPP,Opcodes.TXT"$.
|
||||
$WW,1$The compiler's lexical analyzer can be used in your programs to simplify parsing. See $LK,"Doc Parsing",A="FF:::/Adam/DolDoc/DocPlain.CPP,LexNew"$ or $LK,"Parse Opcode File",A="FF:::/Compiler/CInit.CPP,Opcodes.TXT"$.
|
||||
|
||||
See $LK,"Tokens",A="MN:TK_IDENT"$.
|
||||
Binary file not shown.
+1
-1
@@ -1,4 +1,4 @@
|
||||
$WW,1$A menu appears when you move the mouse to the top of the screen. Menus are created with $LK,"MenuPush",A="MN:MenuPush"$(), $LK,"MenuFilePush",A="MN:MenuFilePush"$(), $LK,"MenuNew",A="MN:MenuNew"$() or $LK,"MenuFile",A="MN:MenuFile"$() and assigned to $FG,4$Fs->cur_menu$FG$. The format is:
|
||||
$WW,1$A pull-down menu appears when you move the mouse to the top of the screen. Menus are created with $LK,"MenuPush",A="MN:MenuPush"$(), $LK,"MenuFilePush",A="MN:MenuFilePush"$(), $LK,"MenuNew",A="MN:MenuNew"$() or $LK,"MenuFile",A="MN:MenuFile"$() and assigned to $FG,4$Fs->cur_menu$FG$. The format is:
|
||||
|
||||
$FG,2$
|
||||
File
|
||||
|
||||
+3
-5
@@ -1,14 +1,12 @@
|
||||
$WW,1$$FG,5$$TX+CX,"MutliCore"$$FG$
|
||||
|
||||
TempleOS does master-slave multicore instead of SMP. $FG,2$Core#0$FG$ is the master. The master core assigns computational jobs to other cores. It is symmetrical, however, in the sense that you can freely do file access and heap allocations because there are locks. See $LK,"::/Demo/MultiCore/LoadTest.CPP"$. TempleOS does not move tasks between cores.
|
||||
$WW,1$TempleOS does master-slave multicore instead of SMP. $GREEN$Core#0$FG$ is the master. The master core assigns computational jobs to other cores. It is symmetrical, however, in the sense that you can freely do file access and heap allocations because there are locks. See $LK,"::/Demo/MultiCore/LoadTest.CPP"$. TempleOS does not move tasks between cores.
|
||||
|
||||
Only tasks on core#0 can have windows, but other cores can help render them.
|
||||
|
||||
Each core has a $FG,2$seth task$FG$ which is the father of all tasks on that core. Adam is the seth task on core 0.
|
||||
Each core has a $GREEN$seth task$FG$ which is the father of all tasks on that core. Adam is the seth task on core 0.
|
||||
|
||||
You give a job to a seth task with $LK,"JobQue",A="MN:JobQue"$() and get the result with $LK,"GetResult",A="MN:GetResult"$(). You spawn a task on another core with $LK,"Spawn",A="MN:Spawn"$().
|
||||
|
||||
Note: You must use the $FG,2$LOCK$FG$ asm prefix when changing shared structures in a multicore environment. The $LK,"LBts",A="MN:LBts"$(), $LK,"LBtr",A="MN:LBtr"$() and $LK,"LBtc",A="MN:LBtc"$() instructions have $FG,2$LOCK$FG$ prefixes. The compiler has a $FG,2$lock{}$FG$ feature but it doesn't work well. See $LK,"::/Demo/MultiCore/Lock.CPP"$.
|
||||
Note: You must use the $GREEN$LOCK$FG$ asm prefix when changing shared structures in a multicore environment. The $LK,"LBts",A="MN:LBts"$(), $LK,"LBtr",A="MN:LBtr"$() and $LK,"LBtc",A="MN:LBtc"$() instructions have $GREEN$LOCK$FG$ prefixes. The compiler has a $GREEN$lock{}$FG$ feature but it doesn't work well. See $LK,"::/Demo/MultiCore/Lock.CPP"$.
|
||||
|
||||
See $LK,"::/Demo/Graphics/Transform.CPP"$.
|
||||
See $LK,"::/Kernel/MultiProc.CPP"$.
|
||||
@@ -1,6 +1,8 @@
|
||||
$FG,5$$TX+CX,"MultiTasking"$$FG$
|
||||
|
||||
$WW,1$TempleOS is a preemptive multitasking operating system. However, you can turn-off preemption on a task by task basis and the task will not yield ctrl unless it volunteers with $LK,"Yield",A="MN:Yield"$(), $LK,"Sleep",A="MN:Sleep"$() or a call to I/O which yields ctrl. Use the $LK,"Preempt",A="MN:Preempt"$() cmd to turn on or off preemption. This is useful when you have multiple tasks modifying data structures, simultaneously. Interrupts still occur when preemption is off. Turning-off preemption does not protect against multicore simultaneous access.
|
||||
$WW,1$TempleOS is a preemptive multitasking operating system. However, you can turn-off preemption on a task by task basis and the task will not yield ctrl unless it volunteers with $LK,"Yield",A="MN:Yield"$(), $LK,"Sleep",A="MN:Sleep"$() or a call to I/O which yields ctrl.
|
||||
|
||||
Use the $LK,"Preempt",A="MN:Preempt"$() cmd to turn on or off preemption. This is useful when you have multiple tasks modifying data structures, simultaneously. Interrupts still occur when preemption is off. Turning-off preemption does not protect against multicore simultaneous access.
|
||||
|
||||
$BK,1$Preemption is turned-off by default when a task is $LK,"Spawn",A="MN:Spawn"$()ed.$BK,0$
|
||||
|
||||
@@ -15,7 +17,7 @@ Disk requests are not broken into pieces for sharing. Therefore, if one task ma
|
||||
|
||||
$FG,5$$TX+CX,"Interrupts"$$FG$
|
||||
|
||||
You can turn on and off interrupts in your user programs. This is part of the mission statement, giving complete freedom to programmers. Use $FG,2$CLI$FG$ or $FG,2$STI$FG$. TempleOS currently doesn't use interrupt besides the timer and keyboard and sometimes mouse interrupt. Since the interrupt flag is part of your task context and since you are voluntarily swapped-out if you call $LK,"GetChar",A="MN:GetChar"$() or whatever, you won't even notice if you turn-off interrupts at the cmd prompt because you are being swapped-out and interrupts are being turned-on by the next task.
|
||||
You can turn on and off interrupts in your user programs. This is part of the mission statement, giving complete freedom to programmers. Use $FG,2$CLI$FG$ or $FG,2$STI$FG$. TempleOS currently doesn't use interrupt besides the timer, keyboard and sometimes mouse interrupt. Since the interrupt flag is part of your task context and since you are voluntarily swapped-out if you call $LK,"GetChar",A="MN:GetChar"$() or whatever, you won't even notice if you turn-off interrupts at the cmd prompt because you are being swapped-out and interrupts are being turned-on by the next task.
|
||||
|
||||
I saw no reason to make the hard drive or CD-ROM code interrupt driven -- it just creates potential compatibility issues. On a home system, you do one thing at a time, mostly. TempleOS can do multiple things at once, but not as efficiently as a server operating system. It would bogg down with a hundred tasks asking for service. It is much simpler, though, the way it is.
|
||||
|
||||
|
||||
+8
-7
@@ -4,7 +4,7 @@ $WW,1$$FG,5$$TX+CX,"Mysteries"$$FG$
|
||||
|
||||
* TempleOS identity-maps all memory, all the time. There is no $FG,2$high half$FG$ memory space. TempleOS is ring-0-only, so everything is kernel, even user programs. There is a special task called $FG,2$Adam$FG$ and he doesn't die, so his heap never gets freed. That's as close to $FG,2$kernel memory$FG$ as it gets.
|
||||
|
||||
* TempleOS puts all code in the lowest 2 Gig, so that $FG,2$REL32$FG$ addressing can be used. TempleOS is 64-bit, but I just thought $FG,2$2 Gig$FG$ was enough for code. It actually puts global variables there, too, but you can turn that off with $LK,"OPTf_GLBLS_ON_DATA_HEAP",A="MN:OPTf_GLBLS_ON_DATA_HEAP"$. $LK,"MAlloc",A="MN:MAlloc"$() can allocate any memory, of course.
|
||||
* TempleOS puts all code in the lowest 2 Gig, so that $FG,2$REL32$FG$ addressing can be used. TempleOS is 64-bit, but I just thought $FG,2$2 Gig$FG$ was enough for code. It actually puts global variables there, too, but you can turn that off with $LK,"OPTf_GLBLS_ON_DATA_HEAP",A="MN:OPTf_GLBLS_ON_DATA_HEAP"$. $LK,"MAlloc",A="MN:MAlloc"$() can alloc any memory, of course.
|
||||
|
||||
* TempleOS doesn't use software interrupts or $FG,2$SYSCALL$FG$ instructions because it never needs to change out of ring-0, even running user programs. Calls are always $FG,2$CALL REL32$FG$ instructions.
|
||||
|
||||
@@ -14,7 +14,7 @@ $WW,1$$FG,5$$TX+CX,"Mysteries"$$FG$
|
||||
|
||||
* If you use $LK,"Grub",A="FI:::/Doc/Grub.TXT"$, you $FG,2$chain-load$FG$ like Windows. You can use the TempleOS boot-loader. $LK,"Master-Boot-Loader-Stage1",A="FI:::/Adam/Boot/BootMHD.CPP"$, $LK,"Master-Boot-Loader-Stage2",A="FI:::/Adam/Boot/BootMHD2.CPP"$, $LK,"Partition-Boot-Loader",A="FI:::/Adam/Boot/BootHD.CPP"$, $LK,"CD-DVD-Boot-Loader",A="FI:::/Adam/Boot/BootCD.CPP"$.
|
||||
|
||||
* The boot-loaders must be patched by you running $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$() or $LK,"MasterBootIntall",A="MN:MasterBootIntall"$(). Those will write the block address into the boot-loader because the boot-loaders do not navigate file systems to find the $LK,"Stage2",A="FI:::/Kernel/KStart.CPP"$ if you relocate it.
|
||||
* The boot-loaders must be patched by you running $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$() or $LK,"MasterBootIntall",A="MN:MasterBootIntall"$(). Those will write the block address into the boot-loader because the boot-loaders do not navigate file systems to find the $LK,"Stage2",A="FI:::/Kernel/KStart.CPP"$ if you relocate it.
|
||||
|
||||
* TempleOS is 64-bit. Like all PC operating systems, the boot-loader starts in 16-bit real-mode. TempleOS calls a few $FG,2$BIOS$FG$ info routines, switches to VGA-640x480x4bit, switches to 32-bit, then, 64-bit mode. There is an odd thing called a $FG,2$$TX,"PCI BIOS",HTML="http://www.o3one.org/hwdocs/bios_doc/pci_bios_21.pdf"$$FG$ which is 32-bit used for $FG,2$PCI$FG$ config space access. TempleOS calls $LK,"that",A="FI:::/Kernel/BIOS32.CPP"$ a couple times. It must temporarily drop-out-of 64-bit mode for that and stop multi-tasking.
|
||||
|
||||
@@ -28,7 +28,7 @@ $WW,1$$FG,5$$TX+CX,"Mysteries"$$FG$
|
||||
|
||||
* TempleOS has a dictionary that is shipped compressed. When you boot the first time it is uncompressed. TempleOS has a Windows utility for uncompressing. That utility needs $FG,2$Microsoft DLL$FG$ files. TempleOS does not use any libraries, modules or code from other sources -- I wrote it all from scratch and it is self-contained.
|
||||
|
||||
* There are no OBJ or EXE files. There are only two files compiled ahead-of-time -- $FG,2$Kernel.BIN.C$FG$ and $FG,2$Compiler.BIN.Z$FG$. You can delete them and recompile with $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$(). TempleOS is $TX,"120,723",D="DD_TEMPLEOS_LOC"$ lines. Roughly 50,000 is compiled AOT and 50,000 during boot $FG,2$JIT$FG$. The rest is $FG,2$JIT$FG$ demos and applications.
|
||||
* There are no OBJ or EXE files. There are only two files compiled ahead-of-time -- $FG,2$Kernel.BIN.C$FG$ and $FG,2$Compiler.BIN.Z$FG$. You can delete them and recompile with $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). TempleOS is $TX,"120,629",D="DD_TEMPLEOS_LOC"$ lines. Roughly 50,000 is compiled AOT and 50,000 during boot $FG,2$JIT$FG$. The rest is $FG,2$JIT$FG$ demos and applications.
|
||||
|
||||
* A major difference between TempleOS and other systems is that the heap and compiler sym table are associated with tasks, not applications.
|
||||
|
||||
@@ -36,7 +36,7 @@ $WW,1$$FG,5$$TX+CX,"Mysteries"$$FG$
|
||||
|
||||
* The compiler only creates $FG,2$pos independent$FG$ code. You can't create code which is loaded at a fixed, specified location. The code is pos independent by virtue of the fact that abs addresses get patched.
|
||||
|
||||
* Binary executable files have export syms which are loaded into the sym tables. The operating system $FG,2$Kernel$FG$ has such an export table. In addition, some map files are processed to provide more information on syms -- src file links. This is how the $LK,"Man",A="MN:Man"$()/$FG,2$WORDSTAT$FG$ feature can find src lines.
|
||||
* Binary executable files have export syms which are loaded into the sym tables. The operating system $FG,2$Kernel$FG$ has such an export table. In addition, some map files are processed to provide more information on syms -- src file links. This is how the $LK,"Man",A="MN:Man"$()/$FG,2$AUTOCOMPLETE$FG$ feature can find src lines.
|
||||
|
||||
* $FG,2$#assert$FG$ might print a message at COMPILE time, not run time.
|
||||
|
||||
@@ -44,9 +44,9 @@ $WW,1$$FG,5$$TX+CX,"Mysteries"$$FG$
|
||||
|
||||
* When compilation takes place, the structures used by the compiler stick around. Data on classes can be accessed by code. See $LK,"ClassRep",A="MN:ClassRep"$().
|
||||
|
||||
* Filenames ending in $FG,2$.Z$FG$ are automatically compressed and uncompressed when writing to disk. File size in directory listing is the compressed size. See $LK,"::/Doc/TSZ.TXT"$ for uncompressing from $FG,2$WINDOWS$FG$.
|
||||
* Filenames ending in $FG,2$.Z$FG$ are automatically compressed and uncompressed when writing to disk. File size in directory listing is the compressed size. See $LK,"::/Doc/TOSZ.TXT"$ for uncompressing from $FG,2$Linux$FG$.
|
||||
|
||||
* Some memory objects are allocated when needed and will decrease the available memory displayed. A task keeps mem objects smaller than a couple blocks in it's own separate heap when freed and these are not counted in the available system free memory, though they are free. They get returned to the system when the task is killed. To get a sense of this, compile the operating system and see the amount of mem used. Then, compile it again and far less will be allocated. This is because it is reusing the small chunks. See $LK,"Memory Overview",A="FI:::/Doc/MemOverview.TXT"$ and $LK,"Memory Routines",A="HI:Memory"$. $MA-X+PU,"Click Here",LM="MemRep;View;"$ for a $LK,"MemRep",A="MN:MemRep"$.
|
||||
* Some memory objects are alloced when needed and will decrease the available memory displayed. A task keeps mem objects smaller than a couple blocks in it's own separate heap when freed and these are not counted in the available system free memory, though they are free. They get returned to the system when the task is killed. To get a sense of this, compile the operating system and see the amount of mem used. Then, compile it again and far less will be alloced. This is because it is reusing the small chunks. See $LK,"Memory Overview",A="FI:::/Doc/MemOverview.TXT"$ and $LK,"Memory Routines",A="HI:Memory"$. $MA-X+PU,"Click Here",LM="MemRep;View;"$ for a $LK,"MemRep",A="MN:MemRep"$.
|
||||
|
||||
* The cursor location is stored as an $FG,2$ASCII 5$FG$ in files. $FG,2$ASCII 31$FG$ is $FG,2$SHIFT-SPACE$FG$, a character which does not get converted to tabs by space-to-tabs, $LK,"S2T",A="MN:S2T"$(). The $FG,2$ASCII 28$FG$ is $FG,2$SHIFT-ESC$FG$.
|
||||
|
||||
@@ -54,7 +54,7 @@ $WW,1$$FG,5$$TX+CX,"Mysteries"$$FG$
|
||||
|
||||
* Sprites can be stored as vector graphics so they might take shockingly little room. They can be converted to bitmaps.
|
||||
|
||||
* If you change code in the $FG,2$/Adam$FG$, $FG,2$/Adam$FG$ or your $FG,2$HOME$FG$ directory, you don't need to recompile, you just need to reboot because those directories get recompiled when you boot. It uses JIT compilation. There is no $FG,2$.BIN$FG$ file for $FG,2$JIT$FG$ compilation.
|
||||
* If you change code in the $FG,2$/Adam$FG$ or your $FG,2$/Home$FG$ directory, you don't need to recompile, you just need to reboot because those directories get recompiled when you boot. It uses JIT compilation. There is no $FG,2$.BIN$FG$ file for $FG,2$JIT$FG$ compilation.
|
||||
|
||||
* If not found, $FG,2$.Z$FG$ is added or removed and a search is done again. If a file is still not found, the parent directories are searched for a file of the same name.
|
||||
|
||||
@@ -64,4 +64,5 @@ $WW,1$$FG,5$$TX+CX,"Mysteries"$$FG$
|
||||
|
||||
$FG,8$
|
||||
* "Windows" is a trademark of MicroSoft Corp.
|
||||
* "Linux" is probably a trademark owned by Linus Torvalds.
|
||||
$FG$
|
||||
+5
-2
@@ -8,7 +8,7 @@ See $LK,"StrPrintJoin",A="MN:StrPrintJoin"$().
|
||||
|
||||
$ID,2$$FG,2$'t'$FG$ truncate to <width>.
|
||||
$FG,2$','$FG$ add commas every three digits or four nibbles.
|
||||
$FG,2$'$$'$FG$ makes $FG,2$%Q$FG$ convert $FG,2$'$$'$FG$ to $FG,2$"\044"$FG$.
|
||||
$FG,2$'$$'$FG$ makes $FG,2$%Q$FG$ convert $FG,2$'$$'$FG$ to $FG,2$"\x24"$FG$.
|
||||
$FG,2$'/'$FG$ makes $FG,2$%Q$FG$ and $FG,2$%q$FG$ convert $FG,2$'%'$FG$ to $FG,2$"%%"$FG$.
|
||||
$ID,-2$
|
||||
<aux_fmt_num>:
|
||||
@@ -31,7 +31,7 @@ $FG,2$"%h*c",25,'\n';$FG$ 25 new-lines.
|
||||
|
||||
$FG,2$"%F"$FG$ text file.
|
||||
|
||||
$FG,2$"%p"$FG$ ptr.
|
||||
$FG,2$"%dv"$FG$ ptr.
|
||||
|
||||
$FG,2$"%P"$FG$ link to ptr.
|
||||
|
||||
@@ -77,6 +77,9 @@ $LK,"AFPrint",A="MN:AFPrint"$(I64 mS,U8 *fmt,...) $LK,"PutChars",A="MN:PutChars"
|
||||
|
||||
$LK,"RawPrint",A="MN:RawPrint"$(I64 mS,U8 *fmt,...) sends direct to screen memory, bypassing window manager.
|
||||
|
||||
$LK,"User",A="MN:User"$(U8 *fmt,...) Spawns a user and execute a string on start-up.
|
||||
|
||||
$LK,"PopUpPrint",A="MN:PopUpPrint"$(U8 *fmt,...) compiles and execute a string in a pop-up win. Note: It returns the result of the last executed expression.
|
||||
$LK,"PopUpViewPrint",A="MN:PopUpViewPrint"$(U8 *fmt,...) creates a pop-up window and views text.
|
||||
|
||||
$BK,1$Note:$BK,0$ Use $FG,2$Print("%s",src)$FG$ if you need an unmodified string.
|
||||
+1
-1
@@ -20,7 +20,7 @@ A) $LK,"DocBottom",A="MN:DocBottom"$() followed by $LK,"DocClear",A="MN:DocClear
|
||||
|
||||
B) Disable window mgr button click checking with $FG,4$Fs->win_inhibit$FG$ set to mask $LK,"WIF_SELF_IP_L",A="MN:WIF_SELF_IP_L"$|$LK,"WIF_FOCUS_TASK_IP_L_D",A="MN:WIF_FOCUS_TASK_IP_L_D"$|$LK,"WIF_SELF_IP_R",A="MN:WIF_SELF_IP_R"$|$LK,"WIF_FOCUS_TASK_IP_R_D",A="MN:WIF_FOCUS_TASK_IP_R_D"$. This inhibits window mgr operations but still generates messages from button clicks.
|
||||
$ID,-2$
|
||||
* $FG,2$switch/case$FG$ statements allocate a single jump table--do not use with wide, sparse ranges of case values.
|
||||
* $FG,2$switch/case$FG$ statements alloc a single jump table--do not use with wide, sparse ranges of case values.
|
||||
|
||||
* Don't do a $FG,2$goto$FG$ out of a $FG,2$try{}$FG$.
|
||||
|
||||
|
||||
+11
-8
@@ -1,9 +1,14 @@
|
||||
$WW,1$$FG,5$$TX+CX,"RedSea File System"$$FG$
|
||||
|
||||
The RedSea file system is a simple, 64-bit, file system which is, basically, FAT32 with fixed-sized 64-byte directory entries and no FAT table, just an allocation bitmap. It has no clustered-blocks, just 512 byte sectors. Files are stored in contiguous blocks and cannot grow in size.
|
||||
The RedSea file system is a simple, 64-bit, file system which is similar to FAT32, but with absolute block addresses instead of clusters, fixed-sized 64-byte directory entries and no FAT table, just an allocation bitmap. A cluster is just one 512 byte sector. Files are stored in contiguous blocks and cannot grow in size.
|
||||
|
||||
$HL,1$#define CDIR_FILENAME_LEN 38 //Must include terminator zero
|
||||
|
||||
The following bit field shows valid 8-Bit ASCII filename characters.
|
||||
|
||||
U32 chars_bitmap_filename[8]=
|
||||
{0x0000000, 0x03FF73FB, 0xEFFFFFFF, 0x2FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
|
||||
|
||||
public class CDirEntry //64-byte fixed-size
|
||||
{
|
||||
U16 attr; //See $LK,"RS_ATTR_DIR",A="MN:RS_ATTR_DIR"$. I would like to change these.
|
||||
@@ -13,15 +18,16 @@ public class CDirEntry //64-byte fixed-size
|
||||
CDate datetime; //See $LK,"DateTime",A="::/Doc/TimeDate.TXT"$, $LK,"Implementation of DateTime",A="FI:::/Kernel/Date.CPP"$
|
||||
};
|
||||
|
||||
public class CBootStruct //RedSea is type FAT32 in partition table to fool BIOS
|
||||
public class CRedSeaBoot //RedSea is type FAT32 in partition table to fool BIOS.
|
||||
{
|
||||
U8 jump_and_nop[3];
|
||||
U8 signature,reserved[4]; //MBR_PT_REDSEA=0x88. Distinguish from real FAT32
|
||||
U8 signature,reserved[4]; //MBR_PT_REDSEA=0x88. Distinguish from real FAT32.
|
||||
I64 base_offset; //For CD/DVD image copy.
|
||||
I64 sects;
|
||||
I64 root_cluster;
|
||||
I64 bitmap_sects;
|
||||
I64 unique_id;
|
||||
U8 code[470];
|
||||
U8 code[462];
|
||||
U16 signature2; //0xAA55
|
||||
};
|
||||
$HL,0$
|
||||
@@ -32,7 +38,4 @@ See $LK,"implementation of LZW compression",A="::/Kernel/Compress.CPP"$.
|
||||
|
||||
I hope to do a ISO9660 replacement that consists of a hard-drive partition image copied onto a CD/DVD starting at about sector 20 with EL TORITO booting. 512-byte sectors will be placed on top of 2048-byte CD/DCD sectors, so there will be four blocks per CD/DVD sector.
|
||||
|
||||
There is no bad block table and no redundant allocation table. When I was a teenager, I used a raw disk block editing program to look at directory blocks and follow chains of blocks on my Commodore 64. I undeleted files. My goal in designing the RedSea system is to be as simple as possible, for kids.
|
||||
|
||||
$FG,8$
|
||||
* "Commodore 64" was a trademark of Commodore Business Machines.
|
||||
There is no bad block table and no redundant allocation table.
|
||||
@@ -4,13 +4,13 @@ $FG,5$User Skills Required$FG$
|
||||
* Knowledge of the $FG,2$C$FG$ programming language.
|
||||
|
||||
$FG,5$Supported Hardware$FG$
|
||||
* $FG,4$$TX,"x86_64",HTML="http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$ PC compatible computer. (Obviously, you need 64-bit hardware for a 64-bit operating system.)
|
||||
* $FG,4$$TX,"x86_64",HTML="http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$ PC compatible computer. (Obviously, you need 64-bit hardware for a 64-bit operating system.)
|
||||
|
||||
* 640x480 16 color VGA graphics.
|
||||
|
||||
* Most$FG$ keyboards and mice.
|
||||
|
||||
* Minimum 256 Meg RAM; Maximum $TX,"128 Gig",D="DD_MAPPED_MEM_SPACE_GIG"$ RAM (easily increased).
|
||||
* Minimum $TX,"512 Meg",D="DD_MEM_MIN_MEG"$ RAM; Maximum $TX,"128 Gig",D="DD_MEM_MAPPED_SPACE_GIG"$ RAM (easily increased).
|
||||
|
||||
* Internal PC Speakers.
|
||||
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
|
||||
$TX+CX,"TempleOS V2.06",D="DD_OS_NAME_VERSION"$
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
$SP+CX,"",BI=1,BP="::/Misc/StockSprites.TXT,TempleOSLogo"$
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
$TX+CX,"God on Tap!"$
|
||||
|
||||
$CM-RE+CX,LE=-9$ $FG,2$<F7>$FG$ Word
|
||||
$CM-RE+CX,LE=-9$$FG,2$<SHIFT-F7>$FG$ Passage
|
||||
$CM-RE+CX,LE=-9$ $FG,2$<F6>$FG$ Song
|
||||
$CM-RE+CX,LE=-9$$FG,2$<SHIFT-F6>$FG$ Doodle
|
||||
|
||||
$LK+CX,"Trivial Solutions",A="FI:::/Doc/TrivialSolutions.TXT"$
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
$WW,1$A $FG,4$CSprite$FG$, is an ordered list of $LK,"these",A="MN:SPT_END"$ elements, created with $FG,2$<CTRL-r>$FG$$FG$. Normally, they are packed together in a list and the address of the first is passed to routines.
|
||||
$WW,1$A $LK,"CSprite",A="MN:CSprite"$ is an ordered list of $LK,"these",A="MN:SPT_END"$ elements, created with $FG,2$<CTRL-r>$FG$$FG$. Normally, they are packed together in a list and the address of the first is passed to routines.
|
||||
|
||||
See $LK,"::/Demo/Graphics/SpritePlot.CPP"$, $LK,"::/Demo/Graphics/SpritePlot3D.CPP"$, $LK,"::/Demo/Graphics/SpritePut.CPP"$ and $LK,"SpriteMeshEd",A="MN:SpriteMeshEd"$().
|
||||
See $LK,"::/Demo/Graphics/SpritePlot.CPP"$, $LK,"::/Demo/Graphics/SpritePlot3D.CPP"$, $LK,"::/Demo/Graphics/SpritePut.CPP"$, $LK,"::/Demo/Graphics/SpriteRaw.CPP"$ and $LK,"SpriteMeshEd",A="MN:SpriteMeshEd"$().
|
||||
|
||||
Be aware that copying $FG,2$SP$FG$, $FG,2$IB$FG$, or $FG,2$IS$FG$ entries with the clipboard results in duplicate entries with different nums. You can manually remove dups by editing with $FG,2$<CTRL-t>$FG$ and setting to the original num.
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
$WW,1$$FG,5$$TX+CX,"Sprite BitMap Menu Help"$$FG$
|
||||
|
||||
Bitmaps have a background color. If you delete to the clipboard, what's left will be background colored.
|
||||
|
||||
While drawing, you can usually press $FG,2$'c'$FG$ to eye-dropper the color under the mouse. Press $FG,2$'t'$FG$ for transparent.
|
||||
@@ -7,3 +7,5 @@ After you create a 3D Mesh, you can edit it by selecting it in the side-bar so i
|
||||
You can convert all elements to a BitMap if END is RED in the side-bar and you CONVERT-TO-BITMAP. Later, you can edit that bitmap by selecting it in the side bar so it is colored RED and clicking EDIT-BITMAP.
|
||||
|
||||
If you have a 3D icon, you might want to place a background-colored rectangle under the 3D icon, so it hovers above. Use TRANSFORM-OFF and TRANSFORM-ON. You will also need to set the Z offset of the icon. Go to the Edit menu and select EDIT-AS-TEXT and change the third INT to Z offset. Good luck.
|
||||
|
||||
While inserting vector elements, you can usually press $FG,2$'c'$FG$ to eye-dropper the color under the mouse. Press $FG,2$'t'$FG$ for transparent.
|
||||
@@ -0,0 +1,18 @@
|
||||
$FG,5$$TX+CX,"AutoComplete is in StandBy"$$FG$
|
||||
|
||||
$FG,4$$TX+CX+L+PU+UL,"System Keys Quick Guide",A="::/Doc/HelpIndex.TXT"$$FG$
|
||||
$FG,4$$TX+CX,"(Works Everywhere)"$$FG$
|
||||
$FG,2$ <SPACE> $FG$Left-Click
|
||||
$FG,2$ <ENTER> $FG$Right-Click
|
||||
$FG,2$ <F1> $FG$Help
|
||||
$FG,2$ <CTRL-m> $FG$Personal Menu
|
||||
$FG,2$ <ESC> $FG$Save & Exit
|
||||
$FG,2$<SHIFT-ESC> $FG$Abort & Exit
|
||||
$FG,2$ <WINDOWS> $FG$Pull-Down Menu
|
||||
|
||||
$FG,4$$TX+CX+L+PU+UL,"Tongues",A="::/Adam/God/HSNotes.TXT"$$FG$
|
||||
$FG,4$$TX+CX,"(Works Everywhere)"$$FG$
|
||||
$FG,2$ <F7> $FG$God Word
|
||||
$FG,2$<SHIFT-F7> $FG$God Passage
|
||||
$FG,2$ <F6> $FG$God Song
|
||||
$FG,2$<SHIFT-F6> $FG$God Doodle
|
||||
+2
-26
@@ -1,29 +1,5 @@
|
||||
$FG,5$$TX+CX,"TempleOS"$$FG$
|
||||
$LK+CX,"Trivial Solutions",A="FI:::/Doc/TrivialSolutions.TXT"$
|
||||
$WW+H,1$$PURPLE$$TX+CX,"TempleOS V2.18",D="DD_OS_NAME_VERSION"$$FG$
|
||||
|
||||
$WW+H,1$$TR-C,"Keyboard Ctrls"$
|
||||
$ID,2$$FG,2$Enter$FG$ Right-click menu
|
||||
$FG,2$Space Bar$FG$ Edit (view)
|
||||
$FG,2$Esc$FG$ Save and exit
|
||||
$FG,2$Shift-Esc$FG$ Abort
|
||||
$FG,2$Ctrl-m$FG$ Personal Menu
|
||||
$FG,2$Windows Key $FG$Pull-down Menu
|
||||
$MA+LA-X,"F1",LM="Msg(MSG_KEY_DOWN,0,SC_F1);"$ Help
|
||||
Other keys: $MA-X+PU,"Key Map",LM="KeyMap;View;\n"$
|
||||
$ID,-2$
|
||||
$TR-C,"Mouse Ctrls"$
|
||||
$ID,2$$FG,2$Right-Click$FG$ Right-click menu
|
||||
$FG,2$Left-Click$FG$ Edit (view)
|
||||
$FG,2$Double-Left$FG$ Save and exit
|
||||
$FG,2$Double-Right$FG$ Abort
|
||||
$FG,2$Top of Screen$FG$ Pull-down menu
|
||||
$ID,-2$
|
||||
$TR-C,"Keyboard-Mouse Ctrls"$
|
||||
$ID,2$$FG,2$Ctrl-LeftDrag$FG$ Grab-Scroll Window
|
||||
$FG,2$Ctrl-Right$FG$ Null scrolling
|
||||
$FG,2$Ctrl-Alt-z$FG$ Zoom screen on Mouse
|
||||
$FG,2$Ctrl-Alt-Z$FG$ Unzoom screen on Mouse
|
||||
$ID,-2$
|
||||
Remember to terminate cmds with a semicolon.
|
||||
$TX+CX,"Public Domain Operating System"$
|
||||
|
||||
$LK,"Help & Index",A="FI:::/Doc/HelpIndex.TXT"$, $LK,"Quick Start: Cmd line",A="FI:::/Doc/CmdLineOverview.TXT"$
|
||||
+24
-7
@@ -1,21 +1,38 @@
|
||||
$WW,1$$FG,5$$TX+CX,"Strategic Decisions Making"$
|
||||
$TX+CX,"TempleOS Simple"$
|
||||
$WW,1$$FG,5$$TX+CX,"Decisions Making TempleOS Simple"$
|
||||
$FG$
|
||||
The $FG,2$$TX,"trivial solution",HTML="http://en.wikipedia.org/wiki/Trivial_solution"$$FG$ in math is the simple, obvious answer. TempleOS has many examples of using trivial solutions.
|
||||
Everybody is obsessed, Jedi mind-tricked, by the notion that when you scale-up, it doesn't get bad, it gets worse. They automatically think things are going to get bigger. Guess what happens when you scale down? It doesn't get good, it gets better!
|
||||
|
||||
I limited it to 100,000 lines of code, forever! I never need a linker or make utility and I can use small labels.
|
||||
|
||||
People mock Bill Gates for, "640K should be enough." I say, "2 Gig for code should be enough." The same people who mock Bill Gates are probably just like the black woman who sued for a trillion dollars.
|
||||
|
||||
My Dad worked on converting the Titan missile to the Gemini Mission rocket. It had to be "man-rated". You can bet that everything got an order of magnitude more complexity and documentation. My vision is a souped-up C64, not a 1970's mainframe; a kayak, not a Titanic.
|
||||
|
||||
Linux is a semi-tractor -- you need professional drivers for 20 gears. Linux has file permissions. Common people are hurt by file permissions.
|
||||
|
||||
Windows is a car.
|
||||
|
||||
TempleOS is a motorcycle -- if you lean-over too far, a motorcycle will crash. Don't do that! There are no side air bags on a motorcycle. DOS and C64 had no memory protections and ran in ring-0, with no security. This saves an order of magnitude complexity.
|
||||
|
||||
Linux and Windows are general purpose operating systems. They attempt to do any task you want. TempleOS cherry-picks tasks and is designed to do the same things a C64 did. This saves and order of magnitude complexity. For example, the $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ file system allocates just contiguous files -- you load and save whole files at once. A benefit is this allows compression. Also, TempleOS does not do networking or multimedia. In theory, memory will fragment with lots of big files. The system would fall to pieces with multimedia, but God said 640x480 16 color is a permanent covenant like circumcision.
|
||||
|
||||
A three button mouse is like a leg you cannot put weight on. TempleOS just does hardware everybody has, with no divergent code bases for each machine's custom hardware. There is one graphics driver instead of 50 for different GPUs. This saves an order of magnitude complexity and makes for a delightful API, so developer's code is not like a frayed rope end.
|
||||
|
||||
|
||||
|
||||
* Everything runs in kernel, $FG,2$ring 0$FG$, mode.
|
||||
|
||||
* $FG,2$One memory map$FG$ for all tasks on all cores with virtual addresses set equal to physical.
|
||||
* $FG,2$One memory map$FG$ for all tasks on all cores with virtual addresses set equal to physical, just as though paging is not used.
|
||||
|
||||
* One platform -- $FG,4$$TX,"x86_64",HTML="http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$ PC's, no 32-bit support.
|
||||
|
||||
* No security.
|
||||
* No security or cryptography.
|
||||
|
||||
* No networking.
|
||||
|
||||
* Least (greatest) common denominator hardware support. Mostly, one driver for each device class. I can't be in the business of different drivers. Compatibility is the greatest challenge for PC operating systems. Disk code does not use interrupts, avoiding compatibility risks. $FG,2$PS/2$FG$ keyboard/mouse is used instead of $FG,2$USB$FG$, also more compatible.
|
||||
|
||||
* $FG,2$640x480$FG$ 16 colors. Updates whole screen at $FG,2$60 fps$FG$, optimized for full screen games where $FG,2$InvalidRectangle$FG$s are counter-productive.
|
||||
* $FG,2$640x480$FG$ 16 colors. Updates whole screen at $FG,2$30 fps$FG$, optimized for full screen games where $FG,2$InvalidRectangle$FG$s are counter-productive.
|
||||
|
||||
* One font, 8x8. Text and graphic layers done in software with text normally on an 8x8 grid. It can run in Text mode if graphic initialization fails.
|
||||
|
||||
@@ -25,7 +42,7 @@ The $FG,2$$TX,"trivial solution",HTML="http://en.wikipedia.org/wiki/Trivial_solu
|
||||
|
||||
* Whole files are processed almost exclusively, allowing compression.
|
||||
|
||||
* One language and compiler for command-line, scripts, songs, automations and code.
|
||||
* $LK,"One language",A="FI:::/Doc/HolyC.TXT"$ and compiler for command-line, scripts, songs, automations and code.
|
||||
|
||||
* One editor/word processor/browser for the command-line window, source code, documentation browser, dialog forms.
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
$WW,1$$FG,5$$TX+CX,"Linux TOSZ Utility"$$FG$
|
||||
|
||||
|
||||
$FG,2$TOSZ [-ascii] filename$FG$
|
||||
|
||||
Will uncompress a single file from within Linux. The $FG,2$-ascii$FG$ flag will convert the irregular TempleOS ASCII 5 and ASCII 31 characters to spaces. (ASCII 5 is used to mark the cursor pos and ASCII 31 is used for shifted space characters and will cause problems unless you convert them.)
|
||||
|
||||
$FG,8$
|
||||
* "Linux" is probably a trademark owned by Linus Torvalds.
|
||||
$FG$
|
||||
-21
@@ -1,21 +0,0 @@
|
||||
$WW,1$$FG,5$$TX+CX,"Linux TSZ Utility"$$FG$
|
||||
|
||||
|
||||
$FG,2$TSZ [-ascii] filename$FG$
|
||||
|
||||
Will uncompress a single file from within Linux. The $FG,2$-ascii$FG$ flag will convert the irregular TempleOS ASCII 5 and ASCII 31 characters to spaces. (ASCII 5 is used to mark the cursor pos and ASCII 31 is used for shifted space characters and will cause problems unless you convert them.)
|
||||
|
||||
|
||||
$FG,5$$TX+CX,"Windows TSZ Utility"$$FG$
|
||||
|
||||
$FG,2$TSZ$FG$ will uncompress TempleOS files you have gotten to Windows. There are two ways to get files from TempleOS to Windows -- via CD-ROM or via a $FG,2$FAT32$FG$ partition.
|
||||
|
||||
|
||||
$FG,2$TSZ [-ascii] dirname$FG$:
|
||||
|
||||
will uncompress all TempleOS files with names ending in "$FG,2$.Z$FG$" in a Windows directory and in all subdirectories. The $FG,2$-ascii$FG$ flag used in combination will convert the irregular TempleOS ASCII 5 and ASCII 31 characters to spaces. (ASCII 5 is used to mark the cursor pos and ASCII 31 is used for shifted space characters and will cause problems unless you convert them.) Note: If you pick names not ending in "$FG,2$.Z$FG$", they will not need to be uncompressed. You can $LK,"Move",A="MN:Move"$() or $LK,"Copy",A="MN:Copy"$() them to a name not ending in "$FG,2$.Z$FG$" and they will be stored uncompressed.
|
||||
|
||||
$FG,8$
|
||||
* "Windows" is a trademark of MicroSoft Corp.
|
||||
* "Linux" is probably a trademark owned by Linus Torvalds.
|
||||
$FG$
|
||||
Binary file not shown.
+1
-1
@@ -1,4 +1,4 @@
|
||||
$WW,1$$LK,"gr.text_base",A="MN:CGrGlbls"$ must be updated 60fps in your Fs->draw_it() callback. You probably want $LK,"GrPrint",A="MN:GrPrint"$() or just $LK,"Print",A="MN:Print"$(). The $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ code takes care of plotting text to $LK,"gr.text_base",A="MN:CGrGlbls"$.
|
||||
$WW,1$$LK,"gr.text_base",A="MN:CGrGlbls"$ must be updated 30fps in your Fs->draw_it() callback. You probably want $LK,"GrPrint",A="MN:GrPrint"$() or just $LK,"Print",A="MN:Print"$(). The $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$ code takes care of plotting text to $LK,"gr.text_base",A="MN:CGrGlbls"$.
|
||||
|
||||
Bits 0-7 8-Bit ASCII Screen Code
|
||||
Bits 8-11 Foreground $LK,"color",A="MN:BLACK"$
|
||||
|
||||
+25
-19
@@ -2,16 +2,18 @@ $WW,1$$FG,5$$TX+CX,"Tips"$$FG$
|
||||
|
||||
* Turn-off or reboot ($FG,2$<CTRL-ALT-DEL>$FG$) at any time, except during disk writes. Writes are not cached.
|
||||
|
||||
* Use $LK,"Seed",A="MN:Seed"$() and the cmd-line to switch $LK,"Rand",A="MN:Rand"$() to non-timer mode and replay games you like.
|
||||
|
||||
* 64-bit values are most efficient for the compiler.
|
||||
|
||||
* See $MA-X+PU,"Key Map",LM="KeyMap;View;\n"$ for a list of defined keys. Define your own keys in $LK,"MyPutKey",A="MN:MyPutKey"$(). See $LK,"Keyboard Devices",A="HI:Keyboard Devices/System"$.
|
||||
|
||||
* $FG,2$<ALT-m>$FG$ maximizes a window. $FG,2$<ALT-SHIFT-w>$FG$ closes WordStat. $FG,2$<ALT-w>$FG$ brings back WordStat. $FG,2$<ALT-v>$FG$ vertically tiles windows. $FG,2$<ALT-h>$FG$ horizontally tiles windows. The $FG,2$ALT$FG$ keys are defined in $LK,"::/Accts/Adam3cKeyPlugIns.CPP"$. You can customize them.
|
||||
* $FG,2$<ALT-m>$FG$ maximizes a window. $FG,2$<ALT-SHIFT-w>$FG$ closes AutoComplete. $FG,2$<ALT-w>$FG$ brings back AutoComplete. $FG,2$<ALT-v>$FG$ vertically tiles windows. $FG,2$<ALT-h>$FG$ horizontally tiles windows. The $FG,2$ALT$FG$ keys are defined in $LK,"::/Home/AdamKeyPlugIns.CPP"$. You can customize them.
|
||||
|
||||
* If you make changes to TempleOS files in your $FG,2$HOME$FG$ directory, generally you reboot to make them take effect. (You don't compile anything.) You should have two TempleOS partitions on your hard drive because a syntax error in a start-up file will make the partition unbootable. Boot to the second partition or boot to a standard TempleOS CD-ROM and use $LK,"Mount",A="MN:Mount"$() to mount your hard drive.
|
||||
* If you make changes to TempleOS files in your $FG,2$/Home$FG$ directory, generally you reboot to make them take effect. (You don't compile anything.) You should have two TempleOS partitions on your hard drive because a syntax error in a start-up file will make the partition unbootable. Boot to the second partition or boot to a standard TempleOS CD-ROM and use $LK,"Mount",A="MN:Mount"$() to mount your hard drive.
|
||||
|
||||
* I copy my files to a mirrored identical partition, periodically with $LK,"CopyTree",A="MN:CopyTree"$() commands in scripts. I do merge commands with a menu entry like this:
|
||||
$FG,5$Merge(\"D:/*\",\"E:/*\",\"+r+d\");$FG$ to check my changes.
|
||||
$FG,2$Merge(\"C:/*\",\"D:/*\",\"+r+d\");$FG$ to check my changes.
|
||||
|
||||
* $FG,2$<CTRL-m>$FG$ at the cmd line to access your PersonalMenu. Place macros there with $FG,2$<CTRL-l>$FG$, or icon-like sprites with $FG,2$<CTRL-r>$FG$. Use the $FG,2$Pop-Up$FG$ option on macros to $LK,"Spawn",A="MN:Spawn"$() a task to run a file. It dies when it is finished. This returns mem to the system. Be sure to press $FG,2$<CTRL-s>$FG$ to save your macro/menu area after making changes.
|
||||
|
||||
@@ -19,19 +21,19 @@ $FG,5$Merge(\"D:/*\",\"E:/*\",\"+r+d\");$FG$ to check my changes.
|
||||
|
||||
* Use the PullDown menu at the top of the screen to learn commands, or for finding the keyboard controls to games.
|
||||
|
||||
* You can adjust the mouse movement rate by setting global vars in your start-up file. See $LK,"mouse scale",A="FF:HOME/Adam3aLocalize.CPP,mouse.scale"$.
|
||||
* You can adjust the mouse movement rate by setting global vars in your start-up file. See $LK,"mouse scale",A="FF:/Home/AdamLocalize.CPP,mouse.scale"$.
|
||||
|
||||
* You can set your local time zone by setting the $LK,"local_time_offset",A="MN:local_time_offset"$ global var in a start-up file. It's units are $LK,"CDATE_FREQ",A="MN:CDATE_FREQ"$. See $LK,"local time",A="FF:HOME/Adam3aLocalize.CPP,local_time"$.
|
||||
* You can set your local time zone by setting the $LK,"local_time_offset",A="MN:local_time_offset"$ global var in a start-up file. It's units are $LK,"CDATE_FREQ",A="MN:CDATE_FREQ"$. See $LK,"local time",A="FF:/Home/AdamLocalize.CPP,local_time"$.
|
||||
|
||||
* $FG,2$<CTRL-SHIFT-L>$FG$ in the editor to reindent a $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ function or renumber an asm routine's local labels.
|
||||
|
||||
* You can use $FG,2$filter_lines$FG$ in the editor text search form ($FG,2$<CTRL-f>$FG$) to temporarily display just lines near each match. A value of $FG,2$filter lines$FG$ set to $FG,2$5$FG$ will display lines within 5 lines of matches. Then, you can do another find to a different string and achieve a $FG,2$AND$FG$ search. When finished, press $FG,2$<ESC>$FG$.
|
||||
|
||||
* You can recompile and reinstall the kernel with $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$(). You'll probably want to make a function for recompiling that uses the $LK,"Auto",A="MN:Auto"$() function to answer the cfg questions. See my technique $LK,"Cfg Strs",A="FL:::/Demo/AcctExample/TSAdam.CPP,1"$ $LK,"Update Funs",A="FL:::/Demo/AcctExample/TSDistro.CPP,1"$.
|
||||
* You can recompile and reinstall the kernel with $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). You'll probably want to make a function for recompiling that uses the $LK,"Auto",A="MN:Auto"$() function to answer the cfg questions. See my technique $LK,"Cfg Strs",A="FL:::/Demo/AcctExample/TOSCfg.CPP,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOSDistro.CPP,1"$.
|
||||
|
||||
* $LK,"Scale2Mem",A="MN:Scale2Mem"$(min,max,limit=2*1024*1024*1024) can be used for cfg questions when recompiling. The $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$() cfg prompts accept expressions, not just numbers. The dft disk cache is $FG,2$Scale2Mem(0x80000,0x8000000)$FG$.
|
||||
* $LK,"Scale2Mem",A="MN:Scale2Mem"$(min,max,limit=2*1024*1024*1024) can be used for cfg questions when recompiling. The $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$() cfg prompts accept expressions, not just numbers. The dft disk cache is $FG,2$Scale2Mem(0x80000,0x8000000)$FG$.
|
||||
|
||||
* You can permanently disable $FG,2$WordStat$FG$ commenting-out $LK,"WSInit",A="FF:HOME/Adam3eSys.CPP,WSInit"$() in $LK,"HOME/Adam3eSys.CPP",A="FF:HOME/Adam3eSys.CPP,WSInit"$.
|
||||
* You can permanently disable $FG,2$AutoComplete$FG$ commenting-out $LK,"ACInit",A="FF:/Home/AdamSys.CPP,ACInit"$() in $LK,"::/Home/AdamSys.CPP",A="FF:/Home/AdamSys.CPP,ACInit"$.
|
||||
|
||||
* Boolean expressions $BK,1$not$BK,0$ in $FG,2$if$FG$ statements don't have short circuit logic and are compiled inefficiently.
|
||||
|
||||
@@ -41,9 +43,9 @@ $FG,5$Merge(\"D:/*\",\"E:/*\",\"+r+d\");$FG$ to check my changes.
|
||||
|
||||
* Many data structures have a $FG,2$user_data$FG$ member. Those are available for you to store a data item, for convenience. $LK,"CTask",A="MN:CTask"$, $LK,"CDocEntry",A="MN:CDocEntry"$ and $LK,"CDirEntry",A="MN:CDirEntry"$ have them. You shouldn't encounter conflicts with TempleOS using them.
|
||||
|
||||
* If, for some strange reason, you wanted to reduce mem usage, make a smaller disk cache when you recompile the kernel; disabling $FG,2$WordStat$FG$; Specify smaller stk sizes when doing $LK,"Spawn",A="MN:Spawn"$(), chang $LK,"DFT_STK",A="MN:DFT_STK"$, and using $LK,"DocMax",A="MN:DocMax"$() to reduce the cmd line buffer size.
|
||||
* If, for some strange reason, you wanted to reduce mem usage, make a smaller disk cache when you recompile the kernel; disabling $FG,2$AutoComplete$FG$; Specify smaller stk sizes when doing $LK,"Spawn",A="MN:Spawn"$(), chang $LK,"DFT_STK",A="MN:DFT_STK"$, and using $LK,"DocMax",A="MN:DocMax"$() to reduce the cmd line buffer size.
|
||||
|
||||
* Filenames ending in "$FG,2$.Z$FG$" will be automatically compressed and uncompressed when read or written. The compression method is not supported by other operating systems. You can store files uncompressed by $LK,"Move",A="MN:Move"$()ing them to a filename not ending in "$FG,2$.Z$FG$". See $LK,"::/Doc/TSZ.TXT"$ if you want to uncompress while in $FG,2$WINDOWS$FG$.
|
||||
* Filenames ending in "$FG,2$.Z$FG$" will be automatically compressed and uncompressed when read or written. The compression method is not supported by other operating systems. You can store files uncompressed by $LK,"Move",A="MN:Move"$()ing them to a filename not ending in "$FG,2$.Z$FG$". See $LK,"::/Doc/TOSZ.TXT"$ if you want to uncompress while in $FG,2$Linux$FG$.
|
||||
|
||||
* $LK,"Merge",A="MN:Merge"$() can be used to see what's changed. The $FG,2$+d$FG$ flag will show differences of files which have changed and allow you to merge code. (The $FG,2$+r$FG$ flag will recurse.)
|
||||
|
||||
@@ -53,7 +55,7 @@ $FG,5$Merge(\"D:/*\",\"E:/*\",\"+r+d\");$FG$ to check my changes.
|
||||
|
||||
* You can use $LK,"OptOn",A="MN:OptOn"$($LK,"OPTf_WARN_DUP_TYPES",A="MN:OPTf_WARN_DUP_TYPES"$) to find unnecessary local var type statements.
|
||||
|
||||
* $LK,"OptEqu",A="MN:OptEqu"$($LK,"OPTf_ECHO",A="MN:OPTf_ECHO"$,ON) can be placed in $LK,"Adam1.CPP",A="FI:::/Kernel/Adam1.CPP"$ to echo start-up scripts.
|
||||
* $LK,"OptEqu",A="MN:OptEqu"$($LK,"OPTf_ECHO",A="MN:OPTf_ECHO"$,ON) can be placed in $LK,"Adam.CPP",A="FI:::/Adam.CPP"$ to echo start-up scripts.
|
||||
|
||||
* Use $LK,"Plain",A="MN:Plain"$() to edit a plain text file. You'll need this if your file has $FG,2$$$$FG$'s. Use the $LK,"::/Misc/ToDolDoc.CPP"$ utility to convert plain text to DolDoc's.
|
||||
|
||||
@@ -71,9 +73,11 @@ $FG,5$Merge(\"D:/*\",\"E:/*\",\"+r+d\");$FG$ to check my changes.
|
||||
|
||||
* You can save a sprite as a $FG,2$.BMP$FG$ file in $FG,2$<CTRL-r>$FG$ on the Sprite BitMap Menu.
|
||||
|
||||
* There are handy functions--$FG,2$F(),R(),FD()$FG$ and $FG,2$RD()$FG$ which are defined in $LK,"HOME/Adam3dWrappers.CPP"$. You're encouraged to change them, since they're in acct files. They will perform find-and-replace operations accross multiple files. The $FG,2$+l$FG$ flag is particularly useful since it limits to whole labels. The $FG,2$+lb$FG$ and $FG,2$+la$FG$ flags limit to whole labels just before or after. You are encouraged to add or modify handy wrapper functions to make cmd line operations easier.
|
||||
* You can eye-dropper colors in the $FG,2$<CTRL-r>$FG$ sprite editor by pressing $FG,2$'c'$FG$. Press $FG,2$'t'$FG$ for transparent.
|
||||
|
||||
* When using $LK,"Grep",A="MN:Grep"$() while modifying code, work from the bottom-up so that line numbers are correct. If you work top-down, then inserting or deleting lines causes the lower file links will be incorrect.
|
||||
* There are handy functions--$FG,2$F(),R(),FD()$FG$ and $FG,2$RD()$FG$ which are defined in $LK,"::/Home/AdamWrappers.CPP"$. You are encouraged to change them and add more. They will perform find-and-replace operations accross multiple files. The $FG,2$+l$FG$ flag is particularly useful since it limits to whole labels. The $FG,2$+lb$FG$ and $FG,2$+la$FG$ flags limit to whole labels just before or after. You are encouraged to add or modify handy wrapper functions to make cmd line operations easier.
|
||||
|
||||
* When using $LK,"Find",A="MN:Find"$() while modifying code, work from the bottom-up so that line numbers are correct. If you work top-down, then inserting or deleting lines causes the lower file links will be incorrect.
|
||||
|
||||
* You can save files after making changes, anytime you are within the editor, like when viewing help/macro files. $FG,2$<CTRL-a>$FG$ saves as, $FG,2$<CTRL-s>$FG$ saves with the same name in the scrolling title bar. Hitting $FG,2$<ESC>$FG$ will exit and save. ($FG,2$<SHIFT-ESC>$FG$ will abort). You can save the cmd line window to a file, too, since you're actually in the editor when you're at the cmd line.
|
||||
|
||||
@@ -85,15 +89,13 @@ $FG,5$Merge(\"D:/*\",\"E:/*\",\"+r+d\");$FG$ to check my changes.
|
||||
|
||||
* Use $LK,"View",A="MN:View"$() in Pop-up macros to linger until the user presses $FG,2$<ESC>$FG$ or $FG,2$<SHIFT-ESC>$FG$.
|
||||
|
||||
* You can access the word under the cursor at $LK,"ws.cur_word",A="MN:CWordStatGlbls"$, but you should probably turn-off preemption or interrupts momentarily to copy it.
|
||||
* You can access the word under the cursor at $LK,"ac.cur_word",A="MN:CAutoCompleteGlbls"$, but you should probably turn-off preemption or interrupts momentarily to copy it.
|
||||
|
||||
* You can reactivate $FG,2$WordStat$FG$ after closing it by pressing $FG,2$<CTRL-Fun Key>$FG$ or $FG,2$<ALT-w>$FG$ if you have it defined.
|
||||
|
||||
* If you use consistent var names for items of different classes, you'll usually be able to use $FG,2$WordStat$FG$'s autocomplete for member vars. I always use $FG,2$lx$FG$ for $LK,"CLex",A="MN:CLex"$ ptrs; $FG,2$doc$FG$ for $LK,"CDoc",A="MN:CDoc"$ ptrs; $FG,2$doc_e$FG$ or $FG,2$doc_ce$FG$ for $LK,"CDocEntry",A="MN:CDocEntry"$ ptrs, etc.
|
||||
* You can reactivate $FG,2$AutoComplete$FG$ after closing it by pressing $FG,2$<CTRL-Fun Key>$FG$ or $FG,2$<ALT-w>$FG$ if you have it defined.
|
||||
|
||||
* $LK,"Preempt",A="MN:Preempt"$() is used to keep a task from being interrupted and swapped-out. It has a similar effect to turning-off interrupts. Each task has it's own preemption ctrl. A task with preemption turned-off can voluntarily $LK,"Yield",A="MN:Yield"$() with preemption off.
|
||||
|
||||
* You can set a color for different drives with $LK,"SetDrvTextAttr",A="MN:SetDrvTextAttr"$(). Place calls to this in $LK,"HOME/Adam3aLocalize.CPP"$.
|
||||
* You can set a color for different drives with $LK,"DrvTextAttrSet",A="MN:DrvTextAttrSet"$(). Place calls to this in $LK,"::/Home/AdamLocalize.CPP"$.
|
||||
|
||||
* $FG,2$<CTRL-SHIFT-T>$FG$ to toggle to/from plain text just the $LK,"CDoc",A="MN:CDoc"$ cmd under the cursor. See $LK,"::/Demo/DolDoc/TextDemo.CPP"$.
|
||||
|
||||
@@ -119,7 +121,7 @@ $FG,5$Merge(\"D:/*\",\"E:/*\",\"+r+d\");$FG$ to check my changes.
|
||||
|
||||
* Using a sub-int array, $FG,2$i.u8[3]$FG$, for example, will force a local var to non-reg.
|
||||
|
||||
* You can delete the $FG,4$HOME/Registry.CPP.Z$FG$ file. The policy is that deleting it will restore defaults. It is a text doc, if you want to edit it. Be careful of tree indentations.
|
||||
* You can delete the $FG,4$/Home/Registry.CPP.Z$FG$ file. The policy is that deleting it will restore defaults. It is a text doc, if you want to edit it. Be careful of tree indentations.
|
||||
|
||||
* Study $LK,"::/Adam/Utils/MemRep.CPP"$ and $LK,"WallPaper",A="MN:WallPaper"$() to learn how the system resources are put together.
|
||||
|
||||
@@ -146,3 +148,7 @@ $FG,5$Merge(\"D:/*\",\"E:/*\",\"+r+d\");$FG$ to check my changes.
|
||||
* With $FG,2$sub_switch_start$FG$/$FG,2$sub_switch_end$FG$, common trailing code is fast. Common leading code is slow.$FG$
|
||||
|
||||
* The first line of the $MA-X+PU,"Psalmody",LM="#include \"::/Apps/Psalmody/Run\"\n"$ $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ song files is a comment with a category recognized by $LK,"JukeBox",A="FF:::/Apps/Psalmody/JukeBox.CPP,JukeBox"$(). The categories are $FG,2$"no nothing"$FG$, $FG,2$"has words"$FG$, $FG,2$"has graphics"$FG$, or $FG,2$"special"$FG$. The third character in the song comment is a digit rating number, shown in $LK,"JukeBox",A="FF:::/Apps/Psalmody/JukeBox.CPP,JukeBox"$(). You can set the song rating in $LK,"JukeBox",A="FF:::/Apps/Psalmody/JukeBox.CPP,JukeBox"$() by pressing $FG,2$0$FG$-$FG,2$9$FG$. You can press $FG,2$<DELETE>$FG$ to delete songs.
|
||||
|
||||
$FG,8$
|
||||
* "Linux" is probably a trademark owned by Linus Torvalds.
|
||||
$FG$
|
||||
+2
-4
@@ -1,7 +1,5 @@
|
||||
$WW,1$$PURPLE$$TX+CX,"Upgrading TempleOS"$$FG$
|
||||
$WW,1$$FG,5$$TX+CX,"Upgrading TempleOS"$$FG$
|
||||
|
||||
To upgrade, you generally boot the new TempleOS CD/DVD, install on top of your partition, modify your files and set it to boot your account by executing $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$(). Often, your code will have to be modified to work with the new version. See $LK,"Change Log",A="FI:::/Doc/ChangeLog.TXT"$. You might have to boot an alternate partition or the CD and modify your code until it boots okay.
|
||||
|
||||
The $GREEN$INSTALL$FG$ option when you boot a CD will install on top of an existing install if you tell it not to reformat.
|
||||
To upgrade, you generally boot the new TempleOS CD/DVD, install on top of your drive, modify your files and set it to boot your account by executing $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). Often, your code will have to be modified to work with the new version. See $LK,"Change Log",A="FI:::/Doc/ChangeLog.TXT"$. You might have to boot an alternate drive or the CD and modify your code until it boots okay.
|
||||
|
||||
See the $LK,"Installing",A="FI:::/Doc/Install.TXT"$ documentation.
|
||||
+12
-11
@@ -1,12 +1,13 @@
|
||||
$WW,1$$FG,5$$TX+CX,"Welcome to TempleOS"$$FG$
|
||||
|
||||
$LK,"Trivial Solutions",A="FI:::/Doc/TrivialSolutions.TXT"$'s TempleOS is a x86_64, multi-cored, multi-tasking, ring-0-only, single-address_mapped (identity), operating system for recreational programming:
|
||||
TempleOS is a x86_64, multi-cored, multi-tasking, ring-0-only, single-address_mapped (identity-mapped), operating system for recreational programming. Paging is almost not used.
|
||||
|
||||
The people whom can most benefit are:
|
||||
$ID,2$* Professionals doing hobby projects
|
||||
* Teenagers doing projects
|
||||
* Non-professional, older-persons projects
|
||||
$ID,-2$
|
||||
Simplicity is a goal to $LK,"keep the line count down",A="FI:::/Doc/Strategy.TXT"$, so it's easy to tinker with. As it turns-out, simplicity makes it faster in some ways, too. It never switches privilege levels, never changes address maps, tends to load whole contiguous files and other, similar things which boost speed. It's only $TX,"120,677",D="DD_TEMPLEOS_LOC"$ lines of code including the kernel, the 64-bit compiler, the graphics library and all the tools. More importantly, it's designed to keep the user's line count down -- you can do a "hello world" application in one line of code and can put graphics on the screen with a three line program!
|
||||
Simplicity is a goal to $LK,"keep the line count down",A="FI:::/Doc/Strategy.TXT"$, so it's easy to tinker with. As it turns-out, simplicity makes it faster in some ways, too. It never switches privilege levels, never changes address maps, tends to load whole contiguous files and other, similar things which boost speed. It's only $TX,"120,471",D="DD_TEMPLEOS_LOC"$ lines of code including the kernel, the 64-bit compiler, the graphics library and all the tools. More importantly, it's designed to keep the user's line count down -- you can do a "hello world" application in one line of code and can put graphics on the screen with a three line program!
|
||||
|
||||
It's a kayak, not a Titanic -- it will crash if you do something wrong. You quickly reboot, however. DOS and the 8-bit home computers of the 80's worked fine without memory protection and most computers in the world -- the embedded ones -- operate without protection. The resulting simplicity of no protections is why TempleOS has value. In facts, that's the point of TempleOS. See the $LK,"TempleOS Charter",A="FI:::/Doc/Charter.TXT"$.
|
||||
|
||||
@@ -14,7 +15,7 @@ Conventional thinking is "failure is not an option" for general purpose operatin
|
||||
|
||||
Two things to know about TempleOS are that $UL,1$tasks$UL,0$ have $LK,"MAlloc",A="MN:MAlloc"$/$LK,"Free",A="MN:Free"$ heap memory, not applications, and tasks have compiler symbol tables that persist at a scope like environment variables in other operating systems, and the symbols can include functions.
|
||||
|
||||
In other operating systems, I hated learning one language for command line scripts and another for programming. With $FG,2$TempleOS$FG$, the command line feeds right into the $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ compiler, line by line, and it places code into memory it $LK,"MAlloc",A="MN:MAlloc"$()s. The compiler is paused at the command line, waiting for input. Naturally, you $FG,2$#include$FG$ a program to load it into memory and, usually, start it. During the boot process, many files get $LK,"compiled",A="FI:::/Kernel/Adam1.CPP"$ before you have access to the command line. (Don't worry, booting takes only a couple of seconds.) All the header declarations for the operating system are compiled and are available for use in your programs without needing to $FG,2$#include $FG$them. Everything is truly compiled to native $FG,2$$TX,"x86_64",HTML="http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$ machine code, nothing is $FG,2$interpreted$FG$ and there is no $FG,2$byte code$FG$.
|
||||
In other operating systems, I hated learning one language for command line scripts and another for programming. With $FG,2$TempleOS$FG$, the command line feeds right into the $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ compiler, line by line, and it places code into memory it $LK,"MAlloc",A="MN:MAlloc"$()s. The compiler is paused at the command line, waiting for input. Naturally, you $FG,2$#include$FG$ a program to load it into memory and, usually, start it. During the boot process, many files get $LK,"compiled",A="FI:::/Adam.CPP"$ before you have access to the command line. (Don't worry, booting takes only a couple of seconds.) All the header declarations for the operating system are compiled and are available for use in your programs without needing to $FG,2$#include $FG$them. Everything is truly compiled to native $FG,2$$TX,"x86_64",HTML="http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$ machine code, nothing is $FG,2$interpreted$FG$ and there is no $FG,2$byte code$FG$.
|
||||
|
||||
Statements at the global scope -- outside the scope of functions -- execute immediately. There is no $FG,2$main()$FG$ function. Instead, you give meaningful names to what would be $FG,2$main()$FG$ functions and you invoke them by calling them with a statement in the global scope, usually at the bottom of your file.
|
||||
|
||||
@@ -52,9 +53,9 @@ TempleOS is for hobbyist programmers on single user (at a time) home computers,
|
||||
|
||||
There is no distinction between the terms $FG,2$task$FG$, $FG,2$process$FG$ or $FG,2$thread$FG$. All have a task record, $LK,"CTask",A="MN:CTask"$, pointed to by the $FG,2$FS$FG$ segment reg and are accessed with $FG,4$Fs->$FG$ while $FG,4$Gs->$FG$ points to a $LK,"CCPU",A="MN:CCPU"$ for the current CPU core. Each task can have just one window, but a task can have children with windows. (The segment regs are just used as extra regs -- there is nothing segmented about TempleOS' memory.)
|
||||
|
||||
In TempleOS, $FG,2$Adam$FG$ refers to a task that is the father of all tasks. He's never supposed to die. Since tasks inherit the symbols of parents, system-wide stuff is associated with $FG,2$Adam$FG$. His heap is like kernel memory in other operating systems. Since $FG,2$Adam$FG$ is immortal, it's safe to allocate objects, not tied to any mortal task, from $FG,2$Adam$FG$'s heap. He stays in a server mode, taking requests, so you can ask him to $FG,2$#include$FG$ something, placing that code system-wide. A funny story is that originally I called it the $FG,2$root$FG$ task and even had a $FG,2$/Root$FG$ directory ;-) $FG,2$Adam$FG$ executes $LK,"::/Kernel/Adam1.CPP"$ at boot time.
|
||||
In TempleOS, $FG,2$Adam$FG$ refers to a task that is the father of all tasks. He's never supposed to die. Since tasks inherit the symbols of parents, system-wide stuff is associated with $FG,2$Adam$FG$. His heap is like kernel memory in other operating systems. Since $FG,2$Adam$FG$ is immortal, it's safe to alloc objects, not tied to any mortal task, from $FG,2$Adam$FG$'s heap. He stays in a server mode, taking requests, so you can ask him to $FG,2$#include$FG$ something, placing that code system-wide. A funny story is that originally I called it the $FG,2$root$FG$ task and even had a $FG,2$/Root$FG$ directory ;-) $FG,2$Adam$FG$ executes $LK,"::/Adam.CPP"$ at boot time.
|
||||
|
||||
For easy back-ups, place everything you author in your $FG,2$HOME$FG$ directory and subdirectories. Then, use $LK,"CopyTree",A="MN:CopyTree"$(). That should make upgrading easy, too. To make an account use $LK,"MkDir",A="MN:MkDir"$() to create a directory under $FG,2$/Accts$FG$. It will be $FG,2$HOME$FG$ if you boot to it. Recompile with $LK,"MakeOSPrtBootInstall",A="MN:MakeOSPrtBootInstall"$() and make it boot your acct. Customizable start-up scripts go in your $FG,2$HOME$FG$ directory. The default start-up scripts are in $FG,2$/Accts$FG$, the parent of all accounts. Copy the start-up files you wish to customize into $FG,2$HOME$FG$ and modify them. See $LK,"Acct Files",A="FF:::/Doc/GuideLines.TXT,ACCT FILES"$. You can make your own distro that includes everything and is a bootable live CD with $LK,"::/Misc/MakeDistro.CPP"$.
|
||||
For easy back-ups, place everything you author in your $FG,2$/Home$FG$ directory and subdirectories. Then, use $LK,"CopyTree",A="MN:CopyTree"$(). That should make upgrading easy, too. Customizable start-up scripts go in your $FG,2$/Home$FG$ directory. The default start-up scripts are in the root directory. Copy the start-up files you wish to customize into $FG,2$/Home$FG$ and modify them. See $LK,"Home Files",A="FF:::/Doc/GuideLines.TXT,/Home Files"$. You can make your own distro that includes everything and is a bootable live CD with $LK,"::/Misc/MakeDistro.CPP"$.
|
||||
|
||||
Typically, your usage pattern through the day will be repeatedly left or right clicking on filenames in a cmd line $LK,"Dir",A="MN:Dir"$() listing. You left-click files to edit them and right-click to $FG,2$#include$FG$ them. To begin a project, type $LK,"Ed",A="MN:Ed"$("filename");, supplying a filename. You can also run programs with $FG,2$<F5>$FG$ when in the editor. $FG,2$<ESC>$FG$ to save and exit the file. You'll need to do a new $LK,"Dir",A="MN:Dir"$() cmd, periodically, so make a macro on your PersonalMenu. Access your PersonalMenu by pressing $FG,2$<CTRL-m>$FG$, cursoring until you are on top of it and pressing $FG,2$<SPACE>$FG$.
|
||||
|
||||
@@ -65,22 +66,22 @@ $FG,2$<CTRL-d>$FG$ brings-up the file manager. It's pretty crappy. I find I do
|
||||
$FG,2$<CTRL-b>$FG$ toggles window border.
|
||||
|
||||
$FG,2$<ALT-m>$FG$ maximizes a window.
|
||||
$FG,2$<ALT-SHIFT-w>$FG$ closes WordStat.
|
||||
$FG,2$<ALT-w>$FG$ brings back WordStat.
|
||||
$FG,2$<ALT-SHIFT-a>$FG$ closes AutoComplete.
|
||||
$FG,2$<ALT-a>$FG$ brings back AutoComplete.
|
||||
$FG,2$<ALT-v>$FG$ vertically tiles windows.
|
||||
$FG,2$<ALT-h>$FG$ horizontally tiles windows.
|
||||
The $FG,2$ALT$FG$ keys are defined in $LK,"HOME/Adam3cKeyPlugIns.CPP"$. You can customize them.
|
||||
The $FG,2$ALT$FG$ keys are defined in $LK,"::/Home/AdamKeyPlugIns.CPP"$. You can customize them.
|
||||
|
||||
$FG,2$<CTRL-ALT-e>$FG$ creates a new terminal window. $FG,2$<CTRL-ALT-x>$FG$ kills a window. You'll do these periodically.
|
||||
|
||||
$LK,"Grep",A="MN:Grep"$() is your best friend. There's a wrapper function called $LK,"F",A="MN:F"$() in your $FG,2$HOME/Adam3dWrappers.CPP.Z$FG$ file. Feel free to make wrapper functions for functions you use often and customize the args. By the way, $LK,"Grep",A="MN:Grep"$() or $LK,"R",A="MN:R"$() can be used to replace strings across multiple files. You can access $LK,"Grep",A="MN:Grep"$() using $FG,2$<CTRL-SHIFT-f>$FG$.
|
||||
$LK,"Find",A="MN:Find"$() is your best friend. There's a wrapper function called $LK,"F",A="MN:F"$() in your $FG,2$/Home/AdamWrappers.CPP.Z$FG$ file. Feel free to make wrapper functions for functions you use often and customize the args. By the way, $LK,"Find",A="MN:Find"$() or $LK,"R",A="MN:R"$() can be used to replace strings across multiple files. You can access $LK,"Find",A="MN:Find"$() using $FG,2$<CTRL-SHIFT-f>$FG$.
|
||||
|
||||
As you browse code, use the $FG,2$WordStat$FG$ window to look-up functions, etc. $FG,2$<CTRL-SHIFT-F1>$FG$ (or whatever number) to follow a sym to it's source. You can browse deeper and deeper. You go back with $FG,2$<SHIFT-ESC>$FG$.
|
||||
As you browse code, use the $FG,2$AutoComplete$FG$ window to look-up functions, etc. $FG,2$<CTRL-SHIFT-F1>$FG$ (or whatever number) to follow a sym to it's source. You can browse deeper and deeper. You go back with $FG,2$<SHIFT-ESC>$FG$.
|
||||
|
||||
Use the $LK,"Help & Index",A="FI:::/Doc/HelpIndex.TXT"$ or $LK,"Demo Index",A="FI:::/Doc/DemoIndex.TXT"$ to find-out what exists. Press $FG,2$<F1>$FG$ for help or use the links on your menu ($FG,2$<CTRL-m>$FG$). Also, look in the $FG,2$/Demo$FG$ or $FG,2$/Apps$FG$ directories for inspiration.
|
||||
|
||||
|
||||
$MA-X+PU,"Take Tour",LM="SpawnUser(\"Cd(\\\"::/Misc/Tour\\\");;AutoFile(\\\"Tour\\\");\n\");"$
|
||||
$MA-X+PU,"Take Tour",LM="User(\"Cd(\\\"::/Misc/Tour\\\");;AutoFile(\\\"Tour\\\");\n\");"$
|
||||
|
||||
$FG,8$
|
||||
* "Windows" is a trademark of MicroSoft Corp.
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
$FG,2$$WW,1$WordStat$FG$ collects statistics from all text files in subdirectories when you call $LK,"WSInit",A="MN:WSInit"$(). It counts which words follow which other words with what frequency in a big sparse matrix.
|
||||
|
||||
It provides auto-complete typing and jump-to-code or jump-to-dictionary_definition functionality.
|
||||
|
||||
Tip: If you use consistent var names for items of different classes, you'll usually be able to autocomplete the member vars. I always use $FG,2$lx$FG$ for $LK,"CLex",A="MN:CLex"$ ptrs; $FG,2$doc$FG$ for $LK,"CDoc",A="MN:CDoc"$ ptrs; $FG,2$doc_e$FG$ or $FG,2$doc_ce$FG$ for $LK,"CDocEntry",A="MN:CDocEntry"$ ptrs, etc.
|
||||
|
||||
If you have the raw Project Gutenberg dictionary file, you can generate the TempleOS processed dictionary files with the stand-alone program $LK,"::/Adam/WordStat/WSDictGen.CPP"$.
|
||||
Reference in new issue
Block a user