TempleOSTS_131005.ISO
This commit is contained in:
1 parent
1343005a29
commit
2d2a65d572
547 files changed
+33608
-12549
No files matched your search
@@ -1,6 +1,6 @@
|
||||
$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$.
|
||||
|
||||
When an $FG,2$AutoFile$FG$ runs, a child task is $LK,"Spawn","MN:Spawn"$()ed which intercepts real user input and generates fake input. AutoFiles are $LK,"Holy C","FI:::/TempleOS/Doc/HolyC.TXT"$ programs run by the child who's stdout goes to the parent's input buffer. $LK,"Msg","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","MN:Spawn"$()ed which intercepts real user input and generates fake input. AutoFiles are $LK,"HolyC","FI:::/TempleOS/Doc/HolyC.TXT"$ programs run by the child who's stdout goes to the parent's input buffer. $LK,"Msg","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-A,"::/TempleOS/Demo/AutoFile/AFDir.AUT"$.
|
||||
|
||||
|
||||
Binary file not shown.
+127
-4
@@ -1,6 +1,129 @@
|
||||
$WW,1$$FG,2$Use $LK,"R","MN:R"$() to rename if I change a label.$FG$
|
||||
|
||||
$IV,1$----07/07/13 11:58:10----$IV,0$
|
||||
$IV,1$----10/05/13 00:44:25----$IV,0$
|
||||
|
||||
$IV,1$----10/03/13 20:25:16----$IV,0$
|
||||
* Improved $LK,"Ed","MN:Ed"$() code.
|
||||
* Added $LK-A,"::/TempleOS/Apps/MusicOrgan/JukePuppet.CPP.Z"$.
|
||||
|
||||
$IV,1$----09/29/13 15:42:18----$IV,0$
|
||||
* Added $LK,"PutBibleLines","MN:PutBibleLines"$().
|
||||
* Changed dft return from $LK,"DocEntryRun","MN:DocEntryRun"$() to $LK,"DOCM_EXIT","MN:DOCM_EXIT"$ for $LK,"DocFormDo","MN:DocFormDo"$(). I hope it doesn't have side effects.
|
||||
|
||||
$IV,1$----09/27/13 23:55:48----$IV,0$
|
||||
* $BK,1$TempleOS version 1.06 Released$BK,0$
|
||||
* Renumbered sprite commands -- old sprites are invalid until converted. $LK-A,"::/TempleOS/Misc/SpriteCvt0106.CPP.Z"$.
|
||||
|
||||
$IV,1$----09/27/13 07:03:37----$IV,0$
|
||||
* Added $FG,2$haserrcode$FG$ keyword to compiler to help make interrupt handlers. See $LK-A,"::/TempleOS/Demo/Lectures/PageTableEntries2.CPP.Z"$.
|
||||
* Improved compiler's $LK,"PrsClass","MN:PrsClass"$().
|
||||
|
||||
$IV,1$----09/25/13 20:59:12----$IV,0$
|
||||
* Made compiler N passes.
|
||||
* Compiler change: Made compare to zero same as test.
|
||||
* Fixed signed and unsigned asm opcodes. (Optimizes some cases.)
|
||||
* Moved compiler to low mem.
|
||||
* Added $FG,2$lastclass$FG$ as a special compiler dft arg.
|
||||
* Used $FG,2$lastclass$FG$ in $LK,"ClassRep","MN:ClassRep"$() and $LK,"DocFormDo","MN:DocFormDo"$().
|
||||
* Chged arg order in $LK,"ClassRep","MN:ClassRep"$().
|
||||
* $LK,"R","MN:R"$("NamedFrame","Frame");
|
||||
* Changed imports in binary file format.
|
||||
|
||||
$IV,1$----09/25/13 00:12:26----$IV,0$
|
||||
* Added $LK-A,"::/TempleOS/Demo/Graphics/Elephant.CPP.Z"$.
|
||||
|
||||
$IV,1$----09/14/13 22:16:43----$IV,0$
|
||||
* Added $LK-A,"::/TempleOS/Demo/Carry.CPP.Z"$.
|
||||
* Got rid of $LK,"CDirEntry","MN:CDirEntry"$.expanded_size.
|
||||
$BK,1$$FG,4$!!! Warning !!!$FG$$BK,0$ RedSea file system is different, old RedSea partitions will
|
||||
not work.
|
||||
|
||||
$IV,1$----09/11/13 14:17:45----$IV,0$
|
||||
* $LK,"R","MN:R"$("FUF_JUST_TXT_FILES","FUF_JUST_TXT");
|
||||
* $LK,"R","MN:R"$("FILENAME_MASK","FILEMASK");
|
||||
* $LK,"R","MN:R"$("Lit","Imm");
|
||||
* Compiler optimization: Compare immediates.
|
||||
|
||||
$IV,1$----08/31/13 14:36:22----$IV,0$
|
||||
* Made $LK,"tS","MN:tS"$ use $LK,"HPET","MN:HPET"$ if available.
|
||||
|
||||
$IV,1$----08/30/13 03:21:38----$IV,0$
|
||||
* $BK,1$TempleOS version 1.05 Released$BK,0$
|
||||
* $LK,"R","MN:R"$("GetCurTimeDate","GetDateTime");
|
||||
* $LK,"R","MN:R"$("GetTimeStamp","GetTSC");
|
||||
* $LK,"R","MN:R"$("GetF","Scan");
|
||||
* $LK,"R","MN:R"$("BASE_PTR","RBP");
|
||||
* $LK,"R","MN:R"$("STK_PTR","RSP");
|
||||
* $LK,"R","MN:R"$("Getlags","GetRFlags");
|
||||
* $LK,"R","MN:R"$("SetFlags","SetRFlags");
|
||||
* Changed args on $LK,"FilesFindMatch","MN:FilesFindMatch"$().
|
||||
* $LK,"R","MN:R"$("SearchStr","StrFind"); and change args.
|
||||
* $LK,"R","MN:R"$("WildCardMatch","WildMatch"); and change args.
|
||||
* $LK,"R","MN:R"$("StrStr","StrMatch"); and changed args.
|
||||
* $LK,"R","MN:R"$("LstEntryMatch","LstMatch");
|
||||
* $LK,"R","MN:R"$("LstEntryPt","LstSub");
|
||||
* Added $LK,"RawPrint","MN:RawPrint"$().
|
||||
* $LK,"R","MN:R"$("DbgI64","RawI64"); etc.
|
||||
* $LK,"R","MN:R"$("MSPrintF","MPrint");
|
||||
* $LK,"R","MN:R"$("PrintF","Print");
|
||||
* $LK,"R","MN:R"$("AFDelayedPutS","AFPrint");
|
||||
* Converted PutS to Print
|
||||
|
||||
$IV,1$----08/28/13 13:00:02----$IV,0$
|
||||
* $LK,"R","MN:R"$("HashRep","Who");
|
||||
* Converted file utils to flattened list.
|
||||
* Got rid of "hidden widgets".
|
||||
|
||||
$IV,1$----08/27/13 19:31:01----$IV,0$
|
||||
* Fixed $LK,"Randomize","MN:Randomize"$().
|
||||
* Added $LK,"PopUpI64","MN:PopUpI64"$().
|
||||
* Added seed to $LK-A,"::/TempleOS/Apps/ToTheFront/ToTheFront.CPP.Z"$.
|
||||
|
||||
$IV,1$----08/27/13 12:13:35----$IV,0$
|
||||
* Got rid of $FG,4$IOSnd$FG$().
|
||||
* Got rid of $LK,"CDirEntry","MN:CDirEntry"$.xsum
|
||||
|
||||
$IV,1$----08/26/13 15:54:09----$IV,0$
|
||||
* Improved $LK-A,"::/TempleOS/Demo/Games/EagleDive.CPP.Z"$.
|
||||
* Improved $LK-A,"::/TempleOS/Apps/HolySpirit/HolySpirit.CPP.Z"$.
|
||||
* Songs
|
||||
|
||||
$IV,1$----08/20/13 11:19:56----$IV,0$
|
||||
* $LK,"R","MN:R"$("CDirEntryDel","DirEntryDel");
|
||||
|
||||
$IV,1$----08/12/13 08:42:47----$IV,0$
|
||||
* Added $LK-A,"::/TempleOS/Demo/Graphics/PanText.CPP.Z"$.
|
||||
* Added $LK,"gr_pan_text_x","MN:gr_pan_text_x"$, $LK,"gr_pan_text_y","MN:gr_pan_text_y"$.
|
||||
* Fixed compiler bug -- Pow() operator type conversion.
|
||||
|
||||
$IV,1$----08/04/13 10:31:36----$IV,0$
|
||||
* New Logo
|
||||
|
||||
$IV,1$----07/27/13 07:17:43----$IV,0$
|
||||
* Fixed bug in $LK-A,"::/TempleOS/Apps/MusicOrgan/MakeSong.CPP.Z"$.
|
||||
* Improved $LK,"GrRect3","MN:GrRect3"$();
|
||||
|
||||
$IV,1$----07/25/13 08:01:06----$IV,0$
|
||||
* Fixed $LK,"ROP_XOR","MN:ROP_XOR"$ in $LK,"GrRect","MN:GrRect"$().
|
||||
|
||||
$IV,1$----07/24/13 22:56:09----$IV,0$
|
||||
* $LK,"R","MN:R"$("SpritePlot3b","SpritePlot3B");
|
||||
* $LK,"R","MN:R"$("P3I32","D3I32");
|
||||
* Added $LK,"GrRectB","MN:GrRectB"$().
|
||||
|
||||
$IV,1$----07/14/13 21:14:25----$IV,0$
|
||||
* Fixed bug with saved cursor location.
|
||||
|
||||
$IV,1$----07/12/13 11:54:11----$IV,0$
|
||||
* $LK,"R","MN:R"$("CONSTANT","CONST");
|
||||
|
||||
$IV,1$----07/11/13 22:52:45----$IV,0$
|
||||
* Fixed bug in $LK,"Auto","MN:Auto"$().
|
||||
* Added score to $LK-A,"::/TempleOS/Demo/Games/Varoom.CPP.Z"$.
|
||||
|
||||
$IV,1$----07/08/13 05:12:13----$IV,0$
|
||||
* $LK,"R","MN:R"$("Expression","LexExpression");
|
||||
* Cleaned-up compiler.
|
||||
* Made graphics routines return I64, not Bool.
|
||||
|
||||
$IV,1$----06/30/13 00:41:54----$IV,0$
|
||||
@@ -85,7 +208,7 @@ $IV,1$----05/11/13 03:31:59----$IV,0$
|
||||
|
||||
$IV,1$----05/08/13 13:04:22----$IV,0$
|
||||
* $LK,"R","MN:R"$("NativeFS","RedSeaFS");
|
||||
* $LK,"R","MN:R"$("C+","Holy C");
|
||||
* $LK,"R","MN:R"$("C+","HolyC");
|
||||
|
||||
$IV,1$----04/30/13 06:15:35----$IV,0$
|
||||
* $LK,"R","MN:R"$("GameStarters","Games");
|
||||
@@ -97,7 +220,7 @@ $IV,1$----04/10/13 12:41:18----$IV,0$
|
||||
* $FG,4$dft_drv$FG$ is now $FG,4$*sys_acct$FG$.
|
||||
* Made so RAM drives are not reformatted at boot.
|
||||
* $FG,4$$BK,1$WARNING$BK,0$$FG$: Added new prompt to RAM disk creation.
|
||||
* Added $LK,"StreamExePutS","MN:StreamExePutS"$() and $LK,"StreamExePrintF","MN:StreamExePrintF"$().
|
||||
* Added $LK,"StreamExePrint","MN:StreamExePrint"$().
|
||||
|
||||
$IV,1$----04/08/13 10:46:20----$IV,0$
|
||||
* $BK,1$TempleOS version 1.01 Released$BK,0$
|
||||
@@ -140,7 +263,7 @@ $IV,1$----03/27/13 04:18:15----$IV,0$
|
||||
* Changed $MA+A,"Tour","Cd(\"::/TempleOS/Misc/Tour\");;AutoFile(\"Tour\");\n"$.
|
||||
|
||||
$IV,1$----03/24/13 14:44:28----$IV,0$
|
||||
* Made $LK,"PutChar","MN:PutChar"$('Hello') accept multiple chars. This is tricky. My compiler allows multi-byte char constants.
|
||||
* Made $LK,"PutChar","MN:PutChar"$('Hello') accept multiple chars. This is tricky. My compiler allows multi-byte char consts.
|
||||
|
||||
$IV,1$----03/19/13 16:18:53----$IV,0$
|
||||
* Added $LK,"DocType","MN:DocType"$() and $LK,"DocNewLine","MN:DocNewLine"$().
|
||||
|
||||
@@ -20,7 +20,7 @@ TempleOS is God's official temple. God said to use 640x480 16 color graphics an
|
||||
|
||||
9) All function args and returns will be 64-bit. No plans for C++.
|
||||
|
||||
10) 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 ASCII.
|
||||
10) 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 "8-bit ASCII".
|
||||
|
||||
11) 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.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
$WW,1$The cmd line feeds into the $LK,"Holy C","FI:::/TempleOS/Doc/HolyC.TXT"$ compiler as you type. A statement outside a function executes immediately. Remember to add a semicolon.$WW,1$
|
||||
$WW,1$The cmd line feeds into the $LK,"HolyC","FI:::/TempleOS/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.
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ $WW,1$$FG,5$$TX+CX,"Clearing-up Confusions"$$FG$
|
||||
|
||||
* $LK,"Fs","MN:Fs"$ is a segment register, not "file system". (It is kept pointing to the current task's record.) There is no memory segmentation -- FS and GS are used as general purpose registers, more or less.
|
||||
|
||||
* TempleOS uses a dialect of C/C++ called $LK,"Holy C","FI:::/TempleOS/Doc/HolyC.TXT"$. It is not PASCAL. I altered the syntax making parenthesis optional on function calls with no paramaters.
|
||||
* TempleOS uses a dialect of C/C++ called $LK,"HolyC","FI:::/TempleOS/Doc/HolyC.TXT"$. It is not PASCAL. I altered the syntax making parenthesis optional on function calls with no paramaters.
|
||||
|
||||
* $LK,"Sleep","MN:Sleep"$() makes a program pause. It is not hybernation for a laptop.
|
||||
|
||||
|
||||
@@ -9,3 +9,7 @@ There are a few places where I cut corners in the interest of not junking-up cod
|
||||
* I changed the $LK,"asm opcodes","FI:::/TempleOS/Compiler/OpCodes.TXT"$ names to remove the ambiguity between instructions with different numbers of arguments, making my $LK,"assembler","FI:::/TempleOS/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","FI:::/TempleOS/Adam/Boot/BootCD.CPP"$.
|
||||
|
||||
* There are no file-sharing locks of any kind. You're on your own.
|
||||
|
||||
* The compiler does not support $FG,2$bool$FG$; see the definition of $LK,"Bool","MN:Bool"$, LOL.
|
||||
|
||||
* 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.
|
||||
+1
-1
@@ -1,3 +1,3 @@
|
||||
$WW,1$TempleOS has a class for 3 dimensional points consisting of F64s. Holy C 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.
|
||||
$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.
|
||||
@@ -1,24 +1,24 @@
|
||||
$WW,1$* You can enter the debugger with $LK,"Dbg","MN:Dbg"$() or $FG,2$<CTRL-ALT-D>$FG$. You might enter the debugger through a fault. Enter $LK,"G","MN:G"$() or $LK,"G2","MN:G2"$() to continue execution. Place a call to $LK,"Dbg","MN:Dbg"$() in your code at fatal error points to enter the debugger. If you see a stk dump, record the label+offset and unassemble, $LK,"U","MN:U"$().
|
||||
$WW,1$* You can enter the debugger with $LK,"Dbg","MN:Dbg"$() or $FG,2$<CTRL-ALT-D>$FG$. You might enter the debugger through a fault. Enter $LK,"G","MN:G"$() or $LK,"G2","MN:G2"$() to continue execution. Place a call to $LK,"Dbg","MN:Dbg"$() in your code at fatal error points to enter the debugger. If you see a stk dump, record the label+offset and unassemble, $LK,"U","MN:U"$(). $LK,"U","MN:U"$($LK,"_RIP","MN:_RIP"$);
|
||||
|
||||
* I use $LK,"progress1","MN:progress1"$-$LK,"progress4","MN:progress4"$ for debugging because they show on the wallpaper. They're just global integer vars.
|
||||
|
||||
* While debugging, you specify addresses of assembly routines with just the label, as in $FG,2$_MALLOC+0x20$FG$. You specify $LK,"Holy C","FI:::/TempleOS/Doc/HolyC.TXT"$ function names with $FG,2$&$FG$ before functions as in $FG,2$&PrintF+0x10$FG$.
|
||||
* While debugging, you specify addresses of assembly routines with just the label, as in $FG,2$_MALLOC+0x20$FG$. You specify $LK,"HolyC","FI:::/TempleOS/Doc/HolyC.TXT"$ function names with $FG,2$&$FG$ before functions as in $FG,2$&Print+0x10$FG$.
|
||||
|
||||
* You can use $LK,"AdamLog","MN:AdamLog"$() to send text to the Adam task window. It works like $LK,"PrintF","MN:PrintF"$(). I never use this. Instead I use $LK,"DbgI64","MN:DbgI64"$().
|
||||
* You can use $LK,"AdamLog","MN:AdamLog"$() to send text to the Adam task window. It works like $LK,"Print","MN:Print"$(). I never use this. Instead I use $LK,"RawI64","MN:RawI64"$().
|
||||
|
||||
* $LK,"D","MN:D"$() $LK,"DocD","MN:DocD"$() to do 16 column hex dump mem with numbering from zero. With $LK,"DocD","MN:DocD"$ the values are updated continually and you can alter mem by editing.
|
||||
* $LK,"D","MN:D"$(), $LK,"DocD","MN:DocD"$(), $LK,"RawD","MN:RawD"$() to do 16 column hex dump mem with numbering from zero. With $LK,"DocD","MN:DocD"$ the values are updated continually and you can alter mem by editing.
|
||||
|
||||
* $LK,"Dm","MN:Dm"$() $LK,"DocDm","MN:DocDm"$() to do 16 column hex dump mem with addresses showing.
|
||||
* $LK,"Dm","MN:Dm"$(), $LK,"DocDm","MN:DocDm"$(), $LK,"RawDm","MN:RawDm"$() to do 16 column hex dump mem with addresses showing.
|
||||
|
||||
* $LK,"Da","MN:Da"$() to do one column address dump (for stk, etc.) with symbolic addresses.
|
||||
|
||||
* $LK,"Dr","MN:Dr"$() dumps registers. You can display and modify registers in the debugger with var-like labels, $FG,4$_RAX$FG$, $FG,4$_RBX$FG$, etc.
|
||||
|
||||
* $LK,"U","MN:U"$(&FunName+offset) to unassemble mem or $LK,"Uf","MN:Uf"$("FunName") to unassemble a function.
|
||||
* $LK,"U","MN:U"$(&FunName+offset) to unassemble mem or $LK,"Uf","MN:Uf"$("FunName") to unassemble a function. $LK,"U","MN:U"$($LK,"_RIP","MN:_RIP"$-16);
|
||||
|
||||
* $LK,"ProfBin","MN:ProfBin"$(),$LK,"ProfAll","MN:ProfAll"$() and $LK,"ProfRep","MN:ProfRep"$() provide code profiling. See $LK-A,"::/TempleOS/Demo/AutoFile/AFProfile.AUT"$ (This is an $LK,"AutoFile","FF:::/TempleOS/Doc/Glossary.TXT,AutoFile"$.)
|
||||
|
||||
* Use $LK,"DbgI64","MN:DbgI64"$(), $LK,"DbgStr","MN:DbgStr"$() and $LK,"DbgAdd","MN:DbgAdd"$() to print debug info bypassing the window framework. You pass these routines a count in milliseconds for how long it should be displayed. You can use $LK,"Raw","MN:Raw"$($FG,2$TRUE$FG$) to make all output bypass the window framework. The WinMgr runs on core0 and will overwrite raw text from other cores when it updates the screen.
|
||||
* Use $LK,"RawI64","MN:RawI64"$(), $LK,"RawF64","MN:RawF64"$(), $LK,"RawStr","MN:RawStr"$(), $LK,"RawAdd","MN:RawAdd"$(), $LK,"RawPutChar","MN:RawPutChar"$() and $LK,"RawPrint","MN:RawPrint"$() to print debug info bypassing the window framework. You pass these routines a count in milliseconds for how long it should be displayed. You can use $LK,"Raw","MN:Raw"$($FG,2$TRUE$FG$) to make all output bypass the window framework. The WinMgr runs on core0 and will overwrite raw text from other cores when it updates the screen.
|
||||
|
||||
* Use $LK,"SysDbg","MN:SysDbg"$() to set a flag which you can read with $LK,"IsSysDbg","MN:IsSysDbg"$() when you wish to trigger some debug activity. It's just a handy simple flag, nothing fancy.
|
||||
|
||||
@@ -30,7 +30,7 @@ $LK,"Echo","MN:Echo"$() turns on or off raw data going into the lexical analyzer
|
||||
|
||||
$LK,"LTrace","MN:LTrace"$() shows the tokens coming out of the lexical analyzer.
|
||||
|
||||
$LK,"CTrace","MN:CTrace"$() unassembles code generated from the Holy C compiler.
|
||||
$LK,"CTrace","MN:CTrace"$() unassembles code generated from the HolyC compiler.
|
||||
|
||||
$LK,"PTrace","MN:PTrace"$() shows $FG,2$intermediate code$FG$ comming out of the first stage of the compiler (it's not 100% valid because it hasn't been fixed-up).
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ $LK-A,"::/TempleOS/Demo/Graphics/Speedline.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/Graphics/Bounce.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/KeyBitMap.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/Graphics/WinZBuf.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/Graphics/Elephant.CPP.Z"$
|
||||
$LK-A,"::/TempleOS/Demo/Graphics/Mountain.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/Games/Coach.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/Graphics/WallPaperFish.CPP"$
|
||||
@@ -52,6 +53,7 @@ $LK-A,"::/TempleOS/Demo/Graphics/SpritePlot3D.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/Graphics/Logo.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/Graphics/RotateTank.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/ScreenCodes.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/Graphics/PanText.CPP.Z"$
|
||||
$LK-A,"::/TempleOS/Demo/Graphics/CharGraphics.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/Games/Maze.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/Graphics/FontEd.CPP"$
|
||||
@@ -59,7 +61,7 @@ $LK-A,"::/TempleOS/Demo/ExtendedChars.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/TimeIns.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/Snd/WaterFowl.CPP"$
|
||||
$MA+A-X+PU,"::/TempleOS/Apps/MusicOrgan/Examples","Cd(\"::/TempleOS/Apps/MusicOrgan/Examples\");Dir;View;\n"$
|
||||
$LK-A,"::/TempleOS/Demo/MultiCore/MPPrintF.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/MultiCore/MPPrint.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/Graphics/PredatorPrey.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/Graphics/Cartesian.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/Graphics/Hanoi.CPP"$
|
||||
@@ -118,10 +120,11 @@ $LK-A,"::/TempleOS/Demo/PhoneNumWords.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/SuggestSpelling.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/WordSearch.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/Graphics/CommonAncestor.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/Carry.CPP.Z"$
|
||||
$LK-A,"::/TempleOS/Demo/Dsk/DataBase.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/Dsk/OrderedIO.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/Dsk/FPrintF.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/Dsk/Raw.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/Dsk/DskRaw.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/Dsk/UnusedSpaceRep.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/Lectures/MiniGrLib.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/Lectures/MiniCompiler.CPP"$
|
||||
@@ -136,7 +139,7 @@ $MA+A-X+PU,"::/TempleOS/Demo/Lectures","Cd(\"::/TempleOS/Demo/Lectures\");Dir;Vi
|
||||
$ID,-2$$TR,"TempleOS Specific"$
|
||||
$ID,2$$MA+A-X+PU,"::/TempleOS/Demo/OldSchool","Cd(\"::/TempleOS/Demo/OldSchool\");Dir;View;\n"$
|
||||
$MA+A-X+PU,"::/TempleOS/Demo/AutoFile","Cd(\"::/TempleOS/Demo/AutoFile\");Dir;View;\n"$
|
||||
$LK-A,"::/TempleOS/Demo/PrintF.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/Print.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/DateTime.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/SubIntAccess.CPP"$
|
||||
$LK-A,"::/TempleOS/Demo/ParenWarn.CPP"$
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
$WW,1$The compiler looks-ahead a token most of the time, so you might throw an extra semicolon after the directive if it's not taking affect right away.
|
||||
|
||||
$FG,2$#include ""$FG$ There is no angle bracket <> form of this directive.
|
||||
$FG,2$#exe {}$FG$ Will execute code at compile-time and can be used to insert code into the stream being compiled using $LK,"StreamPrintF","MN:StreamPrintF"$().
|
||||
$FG,2$#define$FG$ Define string constant
|
||||
$FG,2$#exe {}$FG$ Will execute code at compile-time and can be used to insert code into the stream being compiled using $LK,"StreamPrint","MN:StreamPrint"$().
|
||||
$FG,2$#define$FG$ Define string const
|
||||
$FG,2$#assert$FG$ Print a warning during compilation if an expression is not true.
|
||||
$FG,2$#if$FG$ Include code if an expresion is true.
|
||||
$FG,2$#else
|
||||
@@ -23,7 +23,7 @@ Here are example instruction formats:
|
||||
$HL,1$ ADD RAX,I64 FS:DISP[RSI+RDI*8]
|
||||
$HL,0$$HL,1$ ADD RAX,I64 [DISP]
|
||||
$HL,0$
|
||||
$FG,2$$$$FG$ Current compiler output pos (instruction ptr). Even works in Holy C expressions.
|
||||
$FG,2$$$$FG$ Current compiler output pos (instruction ptr). Even works in HolyC expressions.
|
||||
|
||||
$FG,2$$$$FG$ works in $FG,2$class$FG$es.
|
||||
$FG,2$class MyFun
|
||||
|
||||
@@ -20,7 +20,7 @@ $ID,2$The cursor pos is usually stored as a ASCII#5 character and is not bracket
|
||||
$ID,-2$$TR,"ID Indent +/- num"$
|
||||
$ID,2$This changes the indention deeper if positive or shallower if negative. It effects the behavior of trees.
|
||||
$ID,-2$$TR,"DA Data"$
|
||||
$ID,2$primarily used for forms that prompt for data. Use $FG,2$<CTRL-L>$FG$ as a resource editor-type thing to generate the text you'll need in your "$FG,2$fmtstr$FG$" cmd in a $FG,2$class$FG$. If you add it directly with $LK,"DocPutS","MN:DocPutS"$(), you'll need to fill-in the data addr. See $LK,"DocFormDo","MN:DocFormDo"$(),$LK-A,"::/TempleOS/Demo/Doc/Form.CPP"$.
|
||||
$ID,2$primarily used for forms that prompt for data. Use $FG,2$<CTRL-L>$FG$ as a resource editor-type thing to generate the text you'll need in your "$FG,2$fmtstr$FG$" cmd in a $FG,2$class$FG$. If you add it directly with $LK,"DocPrint","MN:DocPrint"$(), you'll need to fill-in the data addr. See $LK,"DocFormDo","MN:DocFormDo"$(),$LK-A,"::/TempleOS/Demo/Doc/Form.CPP"$.
|
||||
|
||||
If there is a ':', the space after the first ':' in the format string marks the first valid cursor pos.
|
||||
|
||||
@@ -70,11 +70,13 @@ Examples: <CTRL-T> to see
|
||||
3)File link without different tag str.$LK-A,"::/TempleOS/Doc/HelpIndex.TXT"$
|
||||
4)$LK,"File find link searching for 'Admin'","FF:::/TempleOS/Doc/HelpIndex.TXT,Admin"$
|
||||
5)$LK,"File find link searching for 5th 'CTRL'","FF:::/TempleOS/Kernel/Adam1a.HPP,CTRL:5"$
|
||||
6)$LK,"Manual page link","MN:PrintF"$
|
||||
6)$LK,"Manual page link","MN:Print"$
|
||||
7)$LK,"File line num link","FL:::/TempleOS/Kernel/Adam1a.HPP,200"$
|
||||
8)$LK,"File anchor link -- <CTRL-T> to see anchor after you click","FA:::/TempleOS/Kernel/Define1a.CPP,OS_DEFINE"$
|
||||
9)$LK,"Bible Link","BF:Acts,2:3"$ The chapter:verse actually just does a text search.
|
||||
10) $LK,"Help Index Link","HI:Doc"$.
|
||||
11) $LK,"Address Link","AD:0x10000"$.
|
||||
|
||||
$ID,-2$$TR,"BT Button"$
|
||||
$ID,2$See $LK-A,"::/TempleOS/Demo/Doc/MenuButton.CPP"$.
|
||||
$ID,-2$$TR,"CB Check Box"$
|
||||
@@ -86,16 +88,12 @@ $ID,-2$$TR,"MU Menu Value"$
|
||||
$ID,2$See $LK,"PopUpRangeI64","MN:PopUpRangeI64"$().
|
||||
$ID,-2$$TR,"HX Hex Edit"$
|
||||
$ID,2$See $LK,"DocD","MN:DocD"$().
|
||||
$ID,-2$$TR,"Hidden Text Widget"$
|
||||
$ID,2$$FG,5$HS Start of hidden text$FG$
|
||||
$FG,5$HE End of hidden text$FG$
|
||||
$FG,5$$FG$Hidden text widgets allow text to be placed in collapsable brackets like this $HS$$FG$This is hidden.$HE$ which can be expanded by clicking them. If you place a '$FG,4$-C$FG$' flag to uncollapse it, it will start expanded like this $HS$$FG$Click to hide$HE$. They can be nestled like this $HS$Click here:$HS$This is nestled.$HE$ okay?$HE$.
|
||||
$ID,-2$$TR,"TR Tree Widget"$
|
||||
$ID,2$A tree widget is a branch in a collapsable tree. The domain of the branch extends from the first +indent until enough -indents bring it back to where it started. Tree's begin collapsed unless a $FG,4$-C$FG$ flag is present.
|
||||
$ID,-2$$TR,"SP Sprite"$
|
||||
$ID,2$You can insert a sprite into text with $FG,2$<CTRL-R>$FG$. It is critical where the cursor is at the time you enter $FG,2$<CTRL-R>$FG$ because the sprite will be offset from that location. This is especially important when adding images to programs. Numbers for sprites are automatically chosen because copying to and from the clipboard requires this. You can insert another sprite with the same image by hitting $FG,2$<CTRL-T>$FG$ and manually adding a $FG,4$$$SP$$$FG$ entry with the same num. You can cause the $FG,4$$$SP$$$FG$ cmd to appear with some text associated with it by manually adding text into the $FG,4$$$SP$$$FG$ cmd, as in $FG,4$$$SP,"pic 2",2$$$FG$.
|
||||
$ID,-2$$TR,"IB Insert Binary"$
|
||||
$ID,2$This cmd is used to tell the compiler to fetch the binary data stored after the end of text. There is basically one type of binary data in DOC's at this point--sprites-- created with $FG,2$<CTRL-R>$FG$. They have a number associated with them. This number is automatically chosen, because copying to the clip-board and back requires renuming. To use a $FG,4$$$IB$$$FG$ cmd, toggle to plain text ($FG,2$<CTRL-T>$FG$) after inserting a sprite and check the number in the $FG,4$$$SP$$$FG$ cmd. Create a $FG,4$$$IB$$$FG$ cmd with the same number and the sprite will be inserted into the compiled stream like a string constant. You can optionally include tag text to be displayed for the $FG,4$$$IB$$$FG$ cmd.
|
||||
$ID,2$This cmd is used to tell the compiler to fetch the binary data stored after the end of text. There is basically one type of binary data in DOC's at this point--sprites-- created with $FG,2$<CTRL-R>$FG$. They have a number associated with them. This number is automatically chosen, because copying to the clip-board and back requires renuming. To use a $FG,4$$$IB$$$FG$ cmd, toggle to plain text ($FG,2$<CTRL-T>$FG$) after inserting a sprite and check the number in the $FG,4$$$SP$$$FG$ cmd. Create a $FG,4$$$IB$$$FG$ cmd with the same number and the sprite will be inserted into the compiled stream like a string const. You can optionally include tag text to be displayed for the $FG,4$$$IB$$$FG$ cmd.
|
||||
|
||||
The main reason for the $FG,4$$$IB$$$FG$ cmd at this point is to pass a arg to the $LK,"SpritePlot3","MN:SpritePlot3"$() function. See $LK-A,"::/TempleOS/Demo/Graphics/SpritePlot.CPP"$.
|
||||
|
||||
@@ -125,7 +123,7 @@ $ID,2$* Make a tree branch. Usually, this is placed on a text($FG,5$TX$FG$) ent
|
||||
$ID,-2$$TR,"+PU PopUp"$
|
||||
$ID,2$A PopUp flag on a macro ($FG,5$MA$FG$) will cause the cmds to run in a new task, a pop-up window.
|
||||
$ID,-2$$TR,"+C Collapsed"$
|
||||
$ID,2$A collapsed flag on a tree $FG,5$TR$FG$ entry or a hide start $FG,5$HS$FG$ will cause it to start collapsed. A $FG,4$-C$FG$ flag will make it start open.
|
||||
$ID,2$A collapsed flag on a tree $FG,5$TR$FG$ entry will cause it to start collapsed. A $FG,4$-C$FG$ flag will make it start open.
|
||||
$ID,-2$$TR,"+X <ESC> (Exit)"$
|
||||
$ID,2$* A exit flag will cause a macro to send an $FG,2$<ESC>$FG$ before running(to exit the personal menu screen and return to the cmd prompt). Actually, the default has an exit flag set so you might add a $FG,4$-X$FG$ to turn-off $FG,2$ESC$FG$.
|
||||
* If an entry is already at the cmd prompt, the $FG,4$+X$FG$ will cause a movement to the bottom of the window.
|
||||
@@ -136,7 +134,7 @@ $ID,2$A zero flag on a hex edit($FG,5$HX$FG$) entry will cause the offset from z
|
||||
$ID,-2$$TR,"+HTML"$
|
||||
$ID,2$The $LK,"ToHtml","MN:ToHtml"$() or $LK,"Doc2Html","MN:Doc2Html"$() routines will generate a html version of a document. You can cause html link on an item with $FG,4$+HTML$FG$.
|
||||
$ID,-2$$TR,"+BP"$
|
||||
$ID,2$The Bin Ptr Link flags lets you specify a file name and bin num to import a bin$FG$. $FG,2$$$SP+BP,"<tag>",1,"filename,1"$$$FG$ will import bin num "1" from filename.
|
||||
$ID,2$The Bin Ptr Link flags lets you specify a filename and bin num to import a bin$FG$. $FG,2$$$SP+BP,"<tag>",1,"filename,1"$$$FG$ will import bin num "1" from filename.
|
||||
$ID,-2$$TR,"+AL Alias"$
|
||||
$ID,2$An alias flag on a tree entry ($FG,4$+TR$FG$) will cause the text of the current entry the cursor is on to be copied to this entry. This creates something similar to a drop-down window, but it doesn't work well yet.
|
||||
$ID,-2$$TR,"+RD Refresh Data"$
|
||||
|
||||
+21
-13
@@ -1,30 +1,30 @@
|
||||
$WW,1$$FG,5$$TX+CX,"TempleOS' Features"$$FG$
|
||||
|
||||
* Oracle in program, $FG,2$AfterEgypt$FG$, for $LK,"tongues","FI:::/TempleOS/Apps/HolySpirit/HSNotes.TXT.Z"$.
|
||||
|
||||
* $FG,4$$TX+HTML,"x86_64","http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$, ring-0-only, single-address-map (identity), multitasking kernel with multicore support.
|
||||
|
||||
* Free, $FG,2$public domain$FG$, and $FG,2$100% open source$FG$.
|
||||
* Free, $FG,2$public domain$FG$, $FG,2$100% open source$FG$.
|
||||
|
||||
* 64-bit $FG,2$compiler/assembler$FG$ that truly compiles, no interpreter.
|
||||
* 64-bit $FG,2$compiler/assembler$FG$ for $LK,"HolyC","FI:::/TempleOS/Doc/HolyC.TXT.Z"$. 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.
|
||||
|
||||
* No 32-bit krufty code.
|
||||
|
||||
* 640x480 16 color $FG,2$VGA$FG$ graphics.
|
||||
|
||||
* Keyboard & mouse support.
|
||||
* Keyboard & Mouse support.
|
||||
|
||||
* Hard drives, support for $FG,2$FAT32$FG$ and $FG,2$RedSea$FG$ file systems with file compression.
|
||||
|
||||
* $LK,"Partitioning","MN:PrtDsk"$ tool.
|
||||
* $FG,2$CD/DVD$FG$ support with $FG,2$ISO9660$FG$ file system. Can make bootable $FG,2$ISO9660$FG$ ISO files so you can roll-your-own distro's.
|
||||
|
||||
* $FG,2$Boot loaders$FG$ for CD-ROM and hard disk.
|
||||
* $LK,"Partitioning","MN:PrtDsk"$ tool, installer, $FG,2$boot loaders$FG$ for CD-ROM and hard disk.
|
||||
|
||||
* $FG,2$CD/DVD$FG$ reading and writing, $FG,2$ISO9660$FG$ file system. Can make bootable $FG,2$ISO9660$FG$ ISO files so you can roll-your-own distro's.
|
||||
* $FG,2$Editor/Browser$FG$ for a new $LK,"Document Format","FI:::/TempleOS/Doc/Dollar.TXT.Z"$. Source files and the command line window can have graphics, links, icons, trees, colors, super/sub scripts, margins. Everything is seamless through-out the tool chain. No need for separate resource files.
|
||||
|
||||
* Source files and the command line window can have graphics, links, icons, trees, colors, super/sub scripts, margins. Everything is seamless through-out the tool chain. No need for separate resource files.
|
||||
* 8-bit $FG,2$ASCII$FG$, not just 7-bit. Supported in entire tool chain. $FG,2$<CTRL-ALT-A>$FG$
|
||||
|
||||
* $FG,2$Just-in-time$FG$ compilation. No need for object or exe files.
|
||||
|
||||
* $FG,2$Graphics in source code$FG$. No need for resource files.
|
||||
* $FG,2$Graphics in source code$FG$, no resource files, $FG,2$graphic resource editor$FG$. $FG,2$<CTRL-R>$FG$
|
||||
|
||||
* $FG,2$64-bit pointers$FG$. All memory, even more than 4 Gig, can be directly accessed by all tasks on all cores at all times.
|
||||
|
||||
@@ -32,12 +32,20 @@ $WW,1$$FG,5$$TX+CX,"TempleOS' Features"$$FG$
|
||||
|
||||
* $FG,2$2D/3D$FG$ graphics library
|
||||
|
||||
* Real-time fancy differential-equation solver (physics engine) for use in games. (Adaptive step-size Runge-Kutta, interpolated for real-time.)
|
||||
* 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.
|
||||
|
||||
* 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$.
|
||||
|
||||
* File Manager, $FG,2$<CTRL-D>$FG$.
|
||||
|
||||
* Code $LK,"profiler","MN:ProfAll"$, $LK,"merge","MN:MergeChk"$, $LK,"diff","MN:Diff"$ utils.
|
||||
|
||||
* $FG,2$HD Audio$FG$ and many songs.
|
||||
* $FG,2$PC Speaker$FG$ support with many hymns.
|
||||
|
||||
* $LK,"Demos","FI:::/TempleOS/Doc/DemoIndex.TXT"$ and $LK,"documentation","FI:::/TempleOS/Doc/HelpIndex.TXT"$.
|
||||
* Music composing tool.
|
||||
|
||||
* Many games, $LK,"demos","FI:::/TempleOS/Doc/DemoIndex.TXT"$ and $LK,"documentation","FI:::/TempleOS/Doc/HelpIndex.TXT"$.
|
||||
|
||||
* $FG,2$All source code$FG$ included. Only compiles with the included TempleOS compiler and assembler.
|
||||
@@ -0,0 +1 @@
|
||||
$WW,1$If you require separate global vars for multiple instances of a routine, you can use $FG,4$Frame$FG$s. See $LK,"SpriteMesh","MN:SpriteMesh"$(), $LK-A,"::/TempleOS/Demo/Graphics/Pick3D.CPP"$ or $LK,"Noise","MN:Noise"$().
|
||||
+16
-17
@@ -14,6 +14,7 @@ $FG,5$CB$FG$ Call-Back or Code Block
|
||||
$FG,5$Cfg$FG$ Config
|
||||
$FG,5$Chg$FG$ Change
|
||||
$FG,5$Chk$FG$ Check
|
||||
$FG,5$Const$FG$ Consant
|
||||
$FG,5$Cmd$FG$ Command
|
||||
$FG,5$Cmp$FG$ Compiler
|
||||
$FG,5$Cnt$FG$ Count
|
||||
@@ -56,7 +57,6 @@ $FG,5$Kbd$FG$ Keyboard
|
||||
$FG,5$Len$FG$ Length
|
||||
$FG,5$Let$FG$ Letter
|
||||
$FG,5$Lex$FG$ Lexical Analyser
|
||||
$FG,5$Lit$FG$ Literal
|
||||
$FG,5$Loc$FG$ Location, Lines of Code
|
||||
$FG,5$Log$FG$ Logarithm or Logical
|
||||
$FG,5$Lst$FG$ List
|
||||
@@ -128,8 +128,8 @@ $ID,2$TempleOS uses the asm $FG,2$CALL$FG$ instruction exclusively and it's limi
|
||||
$ID,-2$$TR,"Parent/Child Task"$
|
||||
$ID,2$Often a task will $LK,"Spawn","MN:Spawn"$() or $LK,"PopUp","MN:PopUp"$() a task as a helper. The helper is known as a Child Task, though you can $FG,2$Spawn$FG$ a task and assign it a different parent... like $FG,2$Adam$FG$. Links are kept as to who spawned what so when one task is $LK,"Kill","MN:Kill"$()ed the helper tasks disappear, too. You can get a report on current system tasks with $LK+S,"TaskRep","MN:TaskRep"$(). There is just one possible window per task, so child tasks are needed.
|
||||
|
||||
$ID,-2$$TR,"Holy C"$
|
||||
$ID,2$The language used by TempleOS is more than $FG,2$C$FG$ and less than $FG,2$C++$FG$. See $LK,"Holy C","FI:::/TempleOS/Doc/HolyC.TXT"$. It has the default arg feature 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 a slightly different operator precedence. See $LK,"OP_precedence","FA:::/TempleOS/Doc/HolyC.TXT,OP_precedence"$ It has the $FG,2$PASCAL$FG$-like feature of function calls with no parens, but requires an "$FG,2$&$FG,2$$FG$" when referring to function addresses.
|
||||
$ID,-2$$TR,"HolyC"$
|
||||
$ID,2$The language used by TempleOS is more than $FG,2$C$FG$ and less than $FG,2$C++$FG$. See $LK,"HolyC","FI:::/TempleOS/Doc/HolyC.TXT"$. It has the default arg feature 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 a slightly different operator precedence. See $LK,"OP_precedence","FA:::/TempleOS/Doc/HolyC.TXT,OP_precedence"$ It has the $FG,2$PASCAL$FG$-like feature of function calls with no parens, but requires an "$FG,2$&$FG,2$$FG$" when referring to function addresses.
|
||||
|
||||
$ID,-2$$TR,"AOT Compile Mode"$
|
||||
$ID,2$This term to refers to conventional compilation mode. It is not the preferred mode for this operating system and is discouraged. $FG,2$.PRJ$FG$ files are compiled to $FG,2$.BIN$FG$ files, skipping $FG,2$.OBJ$FG$ files. After compiling, you do a $LK,"Load","MN:Load"$() cmd which is available by right-clicking on a link (like from $LK,"Dir","MN:Dir"$()). 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$, use the $LK,"Cmp","MN:Cmp"$() routine or right-click on a link. The $FG,2$Kernel$FG$ modules and compiler are made in $FG,2$AOT$FG$ compiled mode and stored in $FG,2$Kernel.BIN.C$FG$ and $FG,2$Compiler.BIN.Z$FG$, respectively.
|
||||
@@ -137,7 +137,7 @@ $ID,2$This term to refers to conventional compilation mode. It is not the prefe
|
||||
See $LK-A,"::/TempleOS/Demo/Games/EagleDive.CPP"$ for an example of an $FG,2$AOT$FG$ module.
|
||||
|
||||
$ID,-2$$TR,"JIT Compile Mode"$
|
||||
$ID,2$In just-in-time mode, the compiler allocates objects, code and data, from the heap, incrementally. This mode is used during cmd line operations. When you $FG,2$#include$FG$ a file, it is compiled function by function and objects are placed all over in mem. The $LK,"ExeFile","MN:ExeFile"$() routine is the same as $FG,2$#include$FG$ but can be placed in programs. $LK,"ExePutS","MN:ExePutS"$() routine will compile and run a string.
|
||||
$ID,2$In just-in-time mode, the compiler allocates objects, code and data, from the heap, incrementally. This mode is used during cmd line operations. When you $FG,2$#include$FG$ a file, it is compiled function by function and objects are placed all over in mem. The $LK,"ExeFile","MN:ExeFile"$() routine is the same as $FG,2$#include$FG$ but can be placed in programs. $LK,"ExePrint","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 in nature and can be viewed with $LK,"PTrace","MN:PTrace"$() or $LK,"OTrace","MN:OTrace"$(). The compiler does not "interpret" code, except in the process of optimization. The assembly language can be viewed when it is compiled with the $LK,"CTrace","MN:CTrace"$() routine, or afterward with $LK,"U","MN:U"$().
|
||||
@@ -160,9 +160,7 @@ $LK,"Link Types","MN:LK_FILE"$
|
||||
$TR,"files_find_mask"$
|
||||
$ID,2$$LK,"FilesFindMatch","MN:FilesFindMatch"$(). An optional directory plus a list of file name masks, as in $FG,2$/TempleOS/Demo/*.TXT.Z;*.CPP.Z$FG$
|
||||
|
||||
See $LK,"FUF_RECURSE","MN:FUF_RECURSE"$ and $LK,"ST_FILE_UTIL_FLAGS","MN:ST_FILE_UTIL_FLAGS"$.
|
||||
|
||||
Be aware of $LK,"FILENAME_MASK_TXT","MN:FILENAME_MASK_TXT"$ and $LK,"FILENAME_MASK_SRC","MN:FILENAME_MASK_SRC"$.
|
||||
See $LK,"FUF_RECURSE","MN:FUF_RECURSE"$, $LK,"ST_FILE_UTIL_FLAGS","MN:ST_FILE_UTIL_FLAGS"$, $LK,"FILEMASK_TXT","MN:FILEMASK_TXT"$, $LK,"FILEMASK_SRC","MN:FILEMASK_SRC"$, $LK,"FILEMASK_AOT","MN:FILEMASK_AOT"$, $LK,"FILEMASK_JIT","MN:FILEMASK_JIT"$, and $LK,"FILEMASK_GRA","MN:FILEMASK_GRA"$.
|
||||
|
||||
$ID,-2$$TR,"Filename Extention Types"$
|
||||
$ID,2$
|
||||
@@ -173,11 +171,11 @@ $FG,5$*.???.C$FG$
|
||||
$FG,5$*.TXT.Z;*.TXT;*.LOG.Z;*.LOG$FG$
|
||||
Text Files
|
||||
$FG,5$*.CPP.Z;*.CPP$FG$
|
||||
Holy C src files. The default Holy C compiler type is "$FG,2$.CPP.Z$FG$".
|
||||
HolyC src files. The default HolyC compiler type is "$FG,2$.CPP.Z$FG$".
|
||||
$FG,5$*.PRJ.Z;*.PRJ$FG$
|
||||
Holy C src files to be compiled $FG,2$AOT$FG$.
|
||||
HolyC src files to be compiled $FG,2$AOT$FG$.
|
||||
$FG,5$*.HPP.Z;*.HPP$FG$
|
||||
Holy C src header files.
|
||||
HolyC src header files.
|
||||
$FG,5$*.MAP.Z;*.MAP$FG$
|
||||
Compiler "map" files
|
||||
$FG,5$*.BIN.Z;*.BIN.C;*.BIN$FG$
|
||||
@@ -187,14 +185,15 @@ $FG,5$*.DAT.Z;*.DAT$FG$
|
||||
$FG,5$*.ISO$FG$
|
||||
CD-ROM image file--ISO9660.
|
||||
$FG,5$*.AUT.Z;*.AUT$FG$
|
||||
"AutoFile" Basically a Holy C program who's stdout goes to the input of a task when $LK,"AutoFile","MN:AutoFile"$() is called.
|
||||
"AutoFile" Basically a HolyC program who's stdout goes to the input of a task when $LK,"AutoFile","MN:AutoFile"$() is called.
|
||||
$FG,5$*.GRA.Z;*.GRA$FG$
|
||||
Graphics file
|
||||
|
||||
$LK,"FILENAME_MASK_SRC","MN:FILENAME_MASK_SRC"$$FG$
|
||||
This $FG,2$#define$FG$ holds a list of src file extensions.
|
||||
$LK,"FILENAME_MASK_TXT","MN:FILENAME_MASK_TXT"$$FG$
|
||||
This $FG,2$#define$FG$ holds a list of text file extensions.
|
||||
$LK,"FILEMASK_TXT","MN:FILEMASK_TXT"$
|
||||
$LK,"FILEMASK_SRC","MN:FILEMASK_SRC"$
|
||||
$LK,"FILEMASK_AOT","MN:FILEMASK_AOT"$
|
||||
$LK,"FILEMASK_JIT","MN:FILEMASK_JIT"$
|
||||
$LK,"FILEMASK_GRA","MN:FILEMASK_GRA"$
|
||||
|
||||
$ID,-2$$TR,"Naming Convention"$
|
||||
$ID,2$$FG,5$$FG$The following are rules I stick to. If you work on the operating system, it'd be good to stick with them for uniformity, but you can do what you like. Since there are no "$FG,2$namespaces$FG$" and I don't plan to implement name spaces, I highly recommend putting a 2-3 character module code prefix on syms. e.g. "WS","Doc","Lex"
|
||||
@@ -203,10 +202,10 @@ $FG,5$ALL_CAPS$FG$
|
||||
Assembly Language labels are capitalized with underscores between words. So are $FG,2$#define$FG$'s.
|
||||
|
||||
$FG,5$_ALL_CAPS$FG$
|
||||
Asm routines which are $LK,"Holy C","FI:::/TempleOS/Doc/HolyC.TXT"$ callible should have a leading underscore.
|
||||
Asm routines which are $LK,"HolyC","FI:::/TempleOS/Doc/HolyC.TXT"$ callible should have a leading underscore.
|
||||
|
||||
$FG,5$MixedCaps$FG$
|
||||
$LK,"Holy C","FI:::/TempleOS/Doc/HolyC.TXT"$ Functions and class names are MixedCaps.
|
||||
$LK,"HolyC","FI:::/TempleOS/Doc/HolyC.TXT"$ Functions and class names are MixedCaps.
|
||||
|
||||
$FG,5$lower_case$FG$
|
||||
Local function vars and glbl vars are lower case. Class member names are also lower_case.
|
||||
|
||||
Binary file not shown.
@@ -54,7 +54,7 @@ $FG,5$$TX+CX,"PROGRAMMING GUIDELINES"$$FG$
|
||||
|
||||
* There are two modes of compiling $LK,"AOT Compile Mode","FF:::/TempleOS/Doc/Glossary.TXT,AOT Compile Mode"$ and $LK,"JIT Compile Mode","FF:::/TempleOS/Doc/Glossary.TXT,JIT Compile Mode"$. Actual compilation is done in both -- nothing is "interpreted".
|
||||
|
||||
* $LK,"Holy C","FI:::/TempleOS/Doc/HolyC.TXT"$
|
||||
* $LK,"HolyC","FI:::/TempleOS/Doc/HolyC.TXT"$
|
||||
|
||||
* I often use 64-bit values when smaller would be more appropriate because the compiler generally is more efficient with 64-bit values. (All value get promoted to 64-bit by the TempleOS compiler, when fetched.)
|
||||
|
||||
@@ -78,11 +78,11 @@ $FG,5$$TX+CX,"HASH SYM TABLES"$$FG$
|
||||
|
||||
* See $LK-A,"::/TempleOS/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.
|
||||
|
||||
* $FG,2$adam_task->hash_table$FG$ holds the Holy C syms loaded in on start-up.
|
||||
* $FG,2$adam_task->hash_table$FG$ holds the HolyC syms loaded in on start-up.
|
||||
|
||||
* $FG,2$Fs->hash_table$FG$ holds user Holy C syms and if a sym is not found, it checks parents. When a duplicate sym is added to the table, it overshadows the previous sym unless you have done $LK,"OptOn","MN:OptOn"$($LK,"OPTf_REPLACE_SYMS","MN:OPTf_REPLACE_SYMS"$). When developing software, typically you include the file at the cmd prompt, make changes and reinclude it. Old syms are overshadowed but they are still there. Periodically, kill the TASK and start fresh when mem is low. If you wish your applications to free themselves instead of staying in mem, spawn or $LK,"PopUp","MN:PopUp"$() a task to run the application and kill it when it's done.
|
||||
* $FG,2$Fs->hash_table$FG$ holds user HolyC syms and if a sym is not found, it checks parents. When a duplicate sym is added to the table, it overshadows the previous sym unless you have done $LK,"OptOn","MN:OptOn"$($LK,"OPTf_REPLACE_SYMS","MN:OPTf_REPLACE_SYMS"$). When developing software, typically you include the file at the cmd prompt, make changes and reinclude it. Old syms are overshadowed but they are still there. Periodically, kill the TASK and start fresh when mem is low. If you wish your applications to free themselves instead of staying in mem, spawn or $LK,"PopUp","MN:PopUp"$() a task to run the application and kill it when it's done.
|
||||
|
||||
* To display the contents of a hash table, use the $LK,"HashRep","MN:HashRep"$() routine or the varients. $LK,"HashDepthRep","MN:HashDepthRep"$() gives a histogram of how long the chains are, in case you wish to make hash table sizes bigger.
|
||||
* To display the contents of a hash table, use the $LK,"Who","MN:Who"$() routine or the varients. $LK,"HashDepthRep","MN:HashDepthRep"$() gives a histogram of how long the chains are, in case you wish to make hash table sizes bigger.
|
||||
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
@@ -1,5 +1,7 @@
|
||||
$WW,1$$FG,2$#help_index "Topic/SubTopic;OtherTopic"$FG$
|
||||
The help index preprocessor compiler directive sets the topics for syms subsequently defined. You specify subtopics with a '$FG,2$/$FG$' tree hierarchy and multiple topics separated by a '$FG,2$;$FG$'. The index ctrls $FG,4$HI:topic$FG$ links.
|
||||
|
||||
$FG,2$public$FG$ can be placed before symbol to make it show.
|
||||
|
||||
$FG,2$#help_file "filename[.TXT.Z]"$FG$
|
||||
The help file preprocessor directive places a file as the heading text in a $FG,4$HI:topic$FG$ link for the current help index.
|
||||
+52
-49
@@ -1,4 +1,4 @@
|
||||
$WW,1$$FG,5$$TX+CX,"Holy C"$$FG$
|
||||
$WW,1$$FG,5$$TX+CX,"HolyC"$$FG$
|
||||
|
||||
* See $LK,"Scoping and Linkages","FI:::/TempleOS/Doc/ImportExports.TXT"$ for details on $FG,2$extern$FG$, $FG,2$import$FG$, $FG,2$_extern$FG$, $FG,2$_import$FG$, etc.
|
||||
|
||||
@@ -18,28 +18,28 @@ $FG,2$ U0 void
|
||||
F64 double$FG$
|
||||
$FG,4$no F32 float.$FG$
|
||||
|
||||
* Function with no, or just default args can be called without parentheses.
|
||||
* Function with no args, or just default args can be called without parentheses.
|
||||
|
||||
* Default args don't have to be on the end. This code is valid:
|
||||
$ID,2$$FG,2$U0 Test(I64 i=4,I64 j,I64 k=5)
|
||||
{
|
||||
PrintF("%X %X %X\n",i,j,k);
|
||||
Print("%X %X %X\n",i,j,k);
|
||||
}
|
||||
|
||||
Test(,3);$FG$
|
||||
$ID,-2$
|
||||
* A string or char constant all alone is sent to $LK,"PutS","MN:PutS"$() or $LK,"PutChar","MN:PutChar"$(). A string with args is sent to $LK,"PrintF","MN:PrintF"$(). An empty string literal signals a variable fmt_str follows.
|
||||
* A char const all alone is sent to $LK,"PutChar","MN:PutChar"$(). A string with or without args is sent to $LK,"Print","MN:Print"$(). An empty string literal signals a variable fmt_str follows.
|
||||
|
||||
$ID,2$$FG,2$U0 Demo1(U8 drv,U8 *fmt,U8 *name,I64 age)
|
||||
$ID,2$$FG,2$void Demo(char drv,char *fmt,char *name,int age)
|
||||
{
|
||||
PutS("Hello World!\n");
|
||||
PrintF("%s age %d\n",name,age);
|
||||
PrintF(fmt,name,age);
|
||||
PutChar(drv);
|
||||
PutChar('*');
|
||||
printf("Hello World!\n");
|
||||
printf("%s age %d\n",name,age);
|
||||
printf(fmt,name,age);
|
||||
putchar(drv);
|
||||
putchar('*');
|
||||
}
|
||||
|
||||
U0 Demo2(U8 drv,U8 *fmt,U8 *name,I64 age)
|
||||
U0 Demo(U8 drv,U8 *fmt,U8 *name,I64 age)
|
||||
{
|
||||
"Hello World!\n";
|
||||
"%s age %d\n",name,age;
|
||||
@@ -56,10 +56,10 @@ $FG$$ID,-2$
|
||||
|
||||
* Variable arg count functions ($FG,2$...$FG$) can access their args with built-in variables similar to '$FG,2$this$FG$' in C++. They are '$FG,2$I64 argc$FG$' and '$FG,2$I64 argv[]$FG$'.
|
||||
$ID,2$$WW,0$
|
||||
$FG,2$U0 GrPrintF(CDC *dc,I64 x,I64 y,U8 *fmt,...)
|
||||
$FG,2$U0 GrPrint(CDC *dc,I64 x,I64 y,U8 *fmt,...)
|
||||
{
|
||||
U8 *buf=SPrintFJoin(NULL,fmt,argc,argv);
|
||||
GrPutS(dc,x,y,buf);
|
||||
U8 *buf=SPrintJoin(NULL,fmt,argc,argv);
|
||||
GrPrint(dc,x,y,buf);
|
||||
Free(buf);
|
||||
}
|
||||
$WW,1$$FG$$ID,-2$
|
||||
@@ -76,7 +76,7 @@ $FG$$ID,-2$
|
||||
|
||||
* $FG,2$noreg$FG$ or $FG,2$reg$FG$ can be placed before a function local var name. You can, optionally, specify a register after the $FG,2$reg$FG$ keyword.
|
||||
|
||||
* $FG,2$interrupt$FG$, $FG,2$public$FG$, $FG,2$argpop$FG$ or $FG,2$noargpop$FG$ are function flags.
|
||||
* $FG,2$interrupt$FG$, $FG,2$haserrcode$FG$, $FG,2$public$FG$, $FG,2$argpop$FG$ or $FG,2$noargpop$FG$ are function flags. See $LK-A,"::/TempleOS/Demo/Lectures/PageTableEntries2.CPP.Z"$.
|
||||
|
||||
* A $FG,2$nounusedwarn$FG$ statement will suppress an unused var warning.
|
||||
|
||||
@@ -108,7 +108,7 @@ $FG$$ID,-2$
|
||||
|
||||
* You can use $LK,"OptOn","MN:OptOn"$($LK,"OPTf_WARN_DUP_TYPES","MN:OPTf_WARN_DUP_TYPES"$) to find dup local var type statements.
|
||||
|
||||
* With the $FG,2$#exe{}$FG$ feature in your src code, you can place programs that insert text into the stream of code being compiled. See $LK,"#exe {}","FF:::/TempleOS/Kernel/KEnd.CPP,#exe {"$ for an example where the date/time and compile-time prompting for cfguration data is placed into a program. The $LK,"StreamPrintF","MN:StreamPrintF"$() and $LK,"StreamPutS","MN:StreamPutS"$() place text into a src program stream following the conclusion of the $FG,2$#exe{}$FG$ blk.
|
||||
* With the $FG,2$#exe{}$FG$ feature in your src code, you can place programs that insert text into the stream of code being compiled. See $LK,"#exe {}","FF:::/TempleOS/Kernel/KEnd.CPP,#exe {"$ for an example where the date/time and compile-time prompting for cfguration data is placed into a program. $LK,"StreamPrint","MN:StreamPrint"$() places text into a src program stream following the conclusion of the $FG,2$#exe{}$FG$ blk.
|
||||
|
||||
* No $FG,2$#define$FG$ functions exist (I'm not a fan)
|
||||
|
||||
@@ -118,12 +118,14 @@ $FG$$ID,-2$
|
||||
|
||||
* Can't use $FG,2$<>$FG$ with $FG,2$#include$FG$, use $FG,2$""$FG$.
|
||||
|
||||
* "$FG,2$$$$FG$" is an escape character. Two dollar signs signify an ordinary $$. See $LK-A,"::/TempleOS/Doc/Dollar.TXT"$. In $FG,2$asm$FG$ or $LK,"Holy C","FI:::/TempleOS/Doc/HolyC.TXT"$ code, it also refers to the instruction's addr.
|
||||
* "$FG,2$$$$FG$" is an escape character. Two dollar signs signify an ordinary $$. See $LK-A,"::/TempleOS/Doc/Dollar.TXT"$. In $FG,2$asm$FG$ or $LK,"HolyC","FI:::/TempleOS/Doc/HolyC.TXT"$ code, it also refers to the instruction's addr.
|
||||
|
||||
* $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","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-A,"::/TempleOS/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-A,"::/TempleOS/Demo/ClassMeta.CPP"$ and $LK,"DocFormDo","MN:DocFormDo"$().
|
||||
|
||||
* There is a keyword $FG,2$lastclass$FG$ you use as a dft arg. It is set to the class name of the previous arg. See $LK,"ClassRep","MN:ClassRep"$().
|
||||
|
||||
* See $LK-A,"::/TempleOS/Demo/Exceptions.CPP"$. $FG,2$try{} catch{}$FG$ and $FG,2$throw$FG$ are different from C++. $FG,2$throw$FG$ is a function with var ("$FG,2$...$FG$") args. The values passed in $FG,2$throw()$FG$ can be accessed from within a $FG,2$catch{}$FG$ using the $FG,2$Fs->except_argc$FG$ and $FG,2$Fs->except_argv[]$FG$ vars. Within a $FG,2$catch {}$FG$ blk, set the var $FG,2$Fs->catch_except$FG$ to $FG,2$TRUE$FG$ if you want to terminate the search for a handler. By convention, the first arg of $FG,2$except_argv[]$FG$ specifies the exception type num. A list of assigned exception types can be found at $LK,"EXCEPT_LOCAL","MN:EXCEPT_LOCAL"$. For a handler that will catch all excepts, you can use $LK,"CatchAll","MN:CatchAll"$().
|
||||
|
||||
* A function is available similar to $FG,2$sizeof$FG$ which provides the offset of a member of a class. It's called $FG,2$offset$FG$. You place the class name and member inside as in $FG,2$offset(classname.membername)$FG$. It has nothing to do with 16-bit code. Both $FG,2$sizeof$FG$ and $FG,2$offset$FG$ only accept one level of member vars. That is, you can't do $FG,2$sizeof(classname.membername.submembername)$FG$.$FG$
|
||||
@@ -151,46 +153,47 @@ I32 j;
|
||||
j=i=0x12345678; //Resulting i is 0x5678 but j is 0x12345678
|
||||
|
||||
I64 i=0x8000000000000000;
|
||||
PrintF("%X\n",i>>1); //Result is 0xC000000000000000 as expected
|
||||
Print("%X\n",i>>1); //Result is 0xC000000000000000 as expected
|
||||
|
||||
I64 u=0x8000000000000000;
|
||||
PrintF("%X\n",u>>1); //Result is 0x4000000000000000 as expected
|
||||
U64 u=0x8000000000000000;
|
||||
Print("%X\n",u>>1); //Result is 0x4000000000000000 as expected
|
||||
|
||||
I32 i=0x80000000; //constant is loaded into a 64-bit register var.
|
||||
PrintF("%X\n",i>>1); //Result is 0x40000000
|
||||
I32 i= 0x80000000; //const is loaded into a 64-bit register var.
|
||||
Print("%X\n",i>>1); //Result is 0x40000000
|
||||
|
||||
I32 i=-0x80000000;
|
||||
PrintF("%X\n",i>>1); //Result is 0xC0000000 as expected
|
||||
Print("%X\n",i>>1); //Result is 0xC0000000 as expected
|
||||
|
||||
$ID,-2$$FG$
|
||||
$FG,5$$TX+CX,"PrintF Family"$$FG$
|
||||
$FG,5$$TX+CX,"Print Family"$$FG$
|
||||
|
||||
$LK,"MSPrintF","MN:MSPrintF"$() is like $LK,"SPrintF","MN:SPrintF"$() but it returns a $LK+S,"MAlloc","MN:MAlloc"$ated str. It is vary handy because you don't have to worry about overflow.
|
||||
$LK,"MPrint","MN:MPrint"$() is like $LK,"SPrint","MN:SPrint"$() but it returns a $LK+S,"MAlloc","MN:MAlloc"$ated str. It is vary handy because you don't have to worry about overflow.
|
||||
|
||||
$LK,"PutS","MN:PutS"$() doesn't print a new line.
|
||||
$LK,"Auto","MN:Auto"$(U8 *fmt,...) sends text to the current task's input buffer.
|
||||
$LK,"AutoStr","MN:AutoStr"$(U8 *fmt,...) sends text of an $LK,"AutoFile","FF:::/TempleOS/Doc/Glossary.TXT,AutoFile"$ to the keyboard stream of the current TASK but can also do mouse cmds.
|
||||
|
||||
$LK,"Auto","MN:Auto"$(U8 *fmtstr,...) sends text to the current task's input buffer.
|
||||
$LK,"AutoStr","MN:AutoStr"$(U8 *fmtstr,...) sends text of an $LK,"AutoFile","FF:::/TempleOS/Doc/Glossary.TXT,AutoFile"$ to the keyboard stream of the current TASK but can also do mouse cmds.
|
||||
$LK,"XTalk","MN:XTalk"$(CTask *task,U8 *fmt,...) and text to another task's input buffer.
|
||||
$LK,"XTalkStr","MN:XTalkStr"$(CTask *task,U8 *fmt,...) sends text of an $LK,"AutoFile","FF:::/TempleOS/Doc/Glossary.TXT,AutoFile"$ to the keyboard stream of another TASK but can also do mouse cmds.
|
||||
|
||||
$LK,"XTalk","MN:XTalk"$(CTask *task,U8 *fmtstr,...) and text to another task's input buffer.
|
||||
$LK,"XTalkStr","MN:XTalkStr"$(CTask *task,U8 *fmtstr,...) sends text of an $LK,"AutoFile","FF:::/TempleOS/Doc/Glossary.TXT,AutoFile"$ to the keyboard stream of another TASK but can also do mouse cmds.
|
||||
$LK,"DocPrint","MN:DocPrint"$(CDoc *doc,U8 *fmt,...) sends text to a document. You can buffer to a Doc and save it, providing the functionality of $FG,2$fprintf$FG$. See $LK-A,"::/TempleOS/Demo/Dsk/FPrintF.CPP"$.
|
||||
|
||||
$LK,"Adam","MN:Adam"$(U8 *fmt,...) sends text to the adam task to be compiled and run.
|
||||
$LK,"AdamLog","MN:AdamLog"$(U8 *fmt,...) and $LK,"AdamErr","MN:AdamErr"$(U8 *fmt,...) send text to the adam task to be displayed.
|
||||
|
||||
$LK,"StreamPrint","MN:StreamPrint"$(U8 *fmt,...) sends text to the stream of code being compiled and must reside in a $FG,2$#exe{}$FG$ blk.
|
||||
|
||||
$LK,"GrPrint","MN:GrPrint"$(CDC *dc,I64 x,I64 y,U8 *fmt,...) and $LK,"GrVPrint","MN:GrVPrint"$() plots text in graphics mode.
|
||||
|
||||
$LK,"ExePrint","MN:ExePrint"$(U8 *fmt,...) compiles and execute a string. Note: It returns the result of the last executed expression.
|
||||
|
||||
$LK,"AFPrint","MN:AFPrint"$(I64 mS,U8 *fmt) $LK,"PutChar","MN:PutChar"$()s one at a time with a delay.
|
||||
|
||||
$LK,"RawPrint","MN:RawPrint"$(I64 mS,U8 *fmt) sends direct to screen memory, bypassing window manager.
|
||||
|
||||
$BK,1$Note:$BK,0$ Use $FG,2$Print("%s",src)$FG$ if you need an unmodified string.
|
||||
|
||||
|
||||
$LK,"DocPutS","MN:DocPutS"$(CDoc *doc,U8 *src) and $LK,"DocPrintF","MN:DocPrintF"$(CDoc *doc,U8 *fmtstr,...) send text to a linked text file. You can buffer to a Doc and save it, providing the functionality of $FG,2$fprintf$FG$. See $LK-A,"::/TempleOS/Demo/Dsk/FPrintF.CPP"$.
|
||||
|
||||
$LK,"Adam","MN:Adam"$(U8 *fmtstr,...) send text to the adam task to be compiled and run.
|
||||
$LK,"AdamLog","MN:AdamLog"$(U8 *fmtstr,...) and $LK,"AdamErr","MN:AdamErr"$(U8 *fmtstr,...) send text to the adam task to be displayed.
|
||||
|
||||
$LK,"StreamPrintF","MN:StreamPrintF"$(U8 *fmtstr,...) and $LK,"StreamPutS","MN:StreamPutS"$(U8 *src) send text to the stream of code being compiled and must reside in a $FG,2$#exe{}$FG$ blk.
|
||||
|
||||
$LK,"GrPrintF","MN:GrPrintF"$(CDC *dc,I64 x,I64 y,U8 *fmtstr,...) and $LK,"GrPutS","MN:GrPutS"$(CDC *dc,I64 x,I64 y,U8 *src) plots text in graphics mode. $LK,"GrVPrintF","MN:GrVPrintF"$() and $LK,"GrVPutS","MN:GrVPutS"$() will print vertically.
|
||||
|
||||
$LK,"ExePrintF","MN:ExePrintF"$(U8 *fmtstr,...) and $LK,"ExePutS","MN:ExePutS"$(U8 *src) compile and execute a string. Note: It returns the result of the last executed expression.
|
||||
|
||||
$BK,1$Note:$BK,0$ If no $FG,2$PutS$FG$ variant is available, you can use $FG,2$PrintF("%s",src)$FG$.
|
||||
|
||||
|
||||
$AN,"","PrintF_Codes"$The $LK,"PrintF","MN:PrintF"$() family supports extended format codes. See $LK,"SPrintFJoin","MN:SPrintFJoin"$().
|
||||
$AN,"","Print_Codes"$The $LK,"Print","MN:Print"$() family supports extended format codes. See $LK,"SPrintJoin","MN:SPrintJoin"$().
|
||||
$ID,2$$FG,2$%$FG$[$FG,2$-$FG$][$FG,2$0$FG$][$FG,5$width$FG$][$FG,2$.$FG,5$decimals$FG$][$FG,5$flags$FG$][$FG,2$h$FG,5$sub_fmt$FG$][$FG,5$main_fmt$FG$]
|
||||
|
||||
$FG,5$flags:$FG$
|
||||
@@ -203,7 +206,7 @@ $FG,5$sub_fmt:$FG$
|
||||
$ID,2$On date or time entries, the sub_format specifies the format. See $LK-A,"::/TempleOS/Demo/DateTime.CPP"$.
|
||||
|
||||
$AN,"","sub_fmt"$On $FG,2$"%n"$FG$, $FG,2$"%d"$FG$ or $FG,2$"%u"$FG$, the sub_fmt causes thousands mode.
|
||||
$FG,2$"%h?n"$FG$ will pick a var exponent multiples of three unit, while $FG,2$"%h-3n"$FG$, for example, will display milli units or $FG,2$"%h6n"$FG$ will display mega units. The $FG,2$'k'$FG$ flag is always on for $FG,2$"%n"$FG$. See $LK-A,"::/TempleOS/Demo/PrintF.CPP"$.
|
||||
$FG,2$"%h?n"$FG$ will pick a var exponent multiples of three unit, while $FG,2$"%h-3n"$FG$, for example, will display milli units or $FG,2$"%h6n"$FG$ will display mega units. The $FG,2$'k'$FG$ flag is always on for $FG,2$"%n"$FG$. See $LK-A,"::/TempleOS/Demo/Print.CPP"$.
|
||||
$ID,-2$
|
||||
* $FG,2$"%n"$FG$ will print a floating point in engineering notation, exponents being multiples of three. If it has a $FG,5$sub_fmt$FG$ code, it will display scientific units letters.
|
||||
|
||||
@@ -215,11 +218,11 @@ $ID,-2$
|
||||
|
||||
* $FG,2$"%P"$FG$ will display a PSECT expression which is good for ptrs or addresses.
|
||||
|
||||
* $FG,2$"%T"$FG$ and $FG,2$"%D"$FG$ will display a date or time and the format is selected with a subcode, entered after a "$FG,2$h$FG$". Example: "$FG,2$%20h1D$FG$" uses date format code "1". See $LK-A,"::/TempleOS/Demo/DateTime.CPP"$, $LK,"MSPrintFDate","MN:MSPrintFDate"$() and $LK,"MSPrintFTime","MN:MSPrintFTime"$() for subcodes.
|
||||
* $FG,2$"%T"$FG$ and $FG,2$"%D"$FG$ will display a date or time and the format is selected with a subcode, entered after a "$FG,2$h$FG$". Example: "$FG,2$%20h1D$FG$" uses date format code "1". See $LK-A,"::/TempleOS/Demo/DateTime.CPP"$, $LK,"MPrintDate","MN:MPrintDate"$() and $LK,"MPrintTime","MN:MPrintTime"$() for subcodes.
|
||||
|
||||
* $FG,2$"%z"$FG$ will display a subentry of an enumerated list of text entries. It calls $LK+S,"LstEntryPt","MN:LstEntryPt"$(). Pass entry_num first, list second.
|
||||
* $FG,2$"%z"$FG$ will display a subentry of an enumerated list of text entries. It calls $LK+S,"LstSub","MN:LstSub"$(). Pass subentry first, list second.
|
||||
|
||||
* $FG,2$"%Z"$FG$ will display a Define subentry. Pass entry_num first, lst_systext second.
|
||||
* $FG,2$"%Z"$FG$ will display a Define subentry. Pass subentry first, lst_define second.
|
||||
|
||||
* $FG,2$"%Q"$FG$ will convert "\" to "\\" and quote to backslash quote. (For use in creating strs in strs.)
|
||||
|
||||
|
||||
@@ -95,7 +95,7 @@ $WW,1$
|
||||
|
||||
* All offspring tasks of a task inherit syms.
|
||||
|
||||
* The $FG,2$sizeof()$FG$ and Holy C structure members can be used in asm blks.
|
||||
* The $FG,2$sizeof()$FG$ and HolyC structure members can be used in asm blks.
|
||||
|
||||
* No register vars are used in functions with a try/catch. They will be force to $FG,2$noreg$FG$.
|
||||
|
||||
|
||||
@@ -64,6 +64,6 @@ $FG,2$0x40000000$FG$ $LK,"AKDInputFilterPutKey","MN:AKDInputFilterPutKey"$() for
|
||||
$FG,2$0x60000000$FG$ $LK,"AKDRawDisplayPutKey","MN:AKDRawDisplayPutKey"$() direct to video mem debug output.
|
||||
$FG,2$0x80000000$FG$ $LK,"AKDDocPutKey","MN:AKDDocPutKey"$() standard document cmds
|
||||
|
||||
Since handling individual keys is slow, TempleOS supports $LK,"PutS","MN:PutS"$() as well. If no puts handler is defined, individual keys are sent.
|
||||
Since handling individual keys is slow, TempleOS supports PutS() as well. If no puts handler is defined, individual keys are sent.
|
||||
|
||||
$LK,"CDoc","MN:CDoc"$$FG,2$.user_put_key$FG$ and $LK,"CDoc","MN:CDoc"$$FG,2$.user_put_s$FG$ are call back routines which offer some neat tricks. See $LK-A,"::/TempleOS/Apps/MusicOrgan/JukeBox.CPP"$. There is a var $LK,"CDoc","MN:CDoc"$$FG,2$.user_put_data$FG$ which gets passed to them.
|
||||
Binary file not shown.
@@ -29,7 +29,7 @@ $WW,1$$FG,5$This is to clearify how several mysterious things happen in TempleOS
|
||||
|
||||
* 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 Microsoft DLL 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,"MakeOSInstallPrtBootLoader","MN:MakeOSInstallPrtBootLoader"$(). TempleOS is $TX+D,"142,999","DD_TEMPLEOS_LOC"$ lines. Roughly 50,000 is compiled AOT and 50,000 during boot JIT. The rest is JIT 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,"MakeOSInstallPrtBootLoader","MN:MakeOSInstallPrtBootLoader"$(). TempleOS is $TX+D,"123,521","DD_TEMPLEOS_LOC"$ lines. Roughly 50,000 is compiled AOT and 50,000 during boot JIT. The rest is JIT demos and applications.
|
||||
|
||||
* The main difference between TempleOS and other systems is that the heap and compiler sym table are associated with tasks, not applications.
|
||||
|
||||
@@ -39,7 +39,7 @@ $WW,1$$FG,5$This is to clearify how several mysterious things happen in TempleOS
|
||||
|
||||
* 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","MN:Man"$()/$FG,2$WORDSTAT$FG$ feature can find src lines.
|
||||
|
||||
* The word "$FG,2$public$FG$" does very little except allow the $LK,"help_index","FI:::/TempleOS/Doc/HelpIndex.TXT"$ and $LK,"HashRep","MN:HashRep"$() program varients to exclude meaningless syms. If you wish a full report of public and nonpublic syms $MA+A-X+PU,"Click Here","DocMax(1000000);HAllRep;View;\n"$.
|
||||
* The word "$FG,2$public$FG$" does very little except allow the $LK,"help_index","FI:::/TempleOS/Doc/HelpIndex.TXT"$ and $LK,"Who","MN:Who"$() program varients to exclude meaningless syms. If you wish a full report of public and nonpublic syms $MA+A-X+PU,"Click Here","DocMax(1000000);Who;View;\n"$.
|
||||
|
||||
* When compilation takes place, the structures used by the compiler stick around. Data on classes can be accessed by code. See $LK,"ClassRep","MN:ClassRep"$().
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
$WW,1$If you require separate global vars for multiple instances of a routine, you can use $FG,4$NamedFrame$FG$s. See $LK,"CSpriteMesh","MN:CSpriteMesh"$(), $LK-A,"::/TempleOS/Demo/Graphics/Pick3D.CPP"$ or $LK,"Noise","MN:Noise"$().
|
||||
@@ -1,5 +1,5 @@
|
||||
$FG,5$$WW,1$$TX+CX,"Adding a New File System"$$FG$
|
||||
|
||||
If you want to add a support for a new file system, do a text search on "PT_FAT32". All the places where that occurs will require new entries for your file system type. $MA+A-X+PU,"Click here for search.","Grep(\"PT_FAT32\",\"/TempleOS/\" FILENAME_MASK_SRC);View;"$
|
||||
If you want to add a support for a new file system, do a text search on "PT_FAT32". All the places where that occurs will require new entries for your file system type. $MA+A-X+PU,"Click here for search.","Grep(\"PT_FAT32\",\"/TempleOS/*\",\"+S\");View;"$
|
||||
|
||||
You will also need to add an entry $LK,"here.","FF:::/TempleOS/Kernel/Define1a.CPP,ST_PRT_TYPES"$
|
||||
@@ -12,7 +12,7 @@ $WW,1$* You run a risk of problems if you do file operations on the same files s
|
||||
|
||||
* Accessing CD-ROM's is flacky. Try $LK,"Drv","MN:Drv"$() or $LK,"ChgDsk","MN:ChgDsk"$() twice.
|
||||
|
||||
* You can only $FG,2$extern$FG$ something once. There is a varient called $FG,2$_extern$FG$ which binds a Holy C definition to a asm sym. This, too, can only be done once.
|
||||
* You can only $FG,2$extern$FG$ something once. There is a varient called $FG,2$_extern$FG$ which binds a HolyC definition to a asm sym. This, too, can only be done once.
|
||||
|
||||
* You must call $LK,"TaskInitExt","MN:TaskInitExt"$() in a task you $LK,"Spawn","MN:Spawn"$() before you can do file I/O. And, preemption is off by default, so use $LK,"Preempt","MN:Preempt"$(ON) if you wish.
|
||||
|
||||
|
||||
@@ -2,4 +2,4 @@ $WW,1$$FG,5$$TX+CX,"Graphic Resource Help"$$FG$
|
||||
|
||||
A sprite is an ordered list of elements such as lines, rectangles, bitmaps and color changes. In a program's source code, you first make a sprite. Then, you insert a pointer to it.
|
||||
|
||||
You can create an icon on your personal menu or in any document by placing a sprite with a payload of $LK,"Holy C","FI:::/TempleOS/Doc/HolyC.TXT"$ code to execute. This is a called "sprite macro". If you check "Pop-Up", it will spawn a new task and run the payload. If you have it on your personal menu, you can, optionally, check "Esc" and it will exit to the cmd-line shell and print the macro similar to how the Linux history works.
|
||||
You can create an icon on your personal menu or in any document by placing a sprite with a payload of $LK,"HolyC","FI:::/TempleOS/Doc/HolyC.TXT"$ code to execute. This is a called "sprite macro". If you check "Pop-Up", it will spawn a new task and run the payload. If you have it on your personal menu, you can, optionally, check "Esc" and it will exit to the cmd-line shell and print the macro similar to how the Linux history works.
|
||||
@@ -1,6 +1,5 @@
|
||||
|
||||
$TX+CX+D,"TempleOS VDD_TEMPLEOS_VERSION","DD_OS_NAME_VERSION"$
|
||||
|
||||
$TX+CX+D,"TempleOS V1.06","DD_OS_NAME_VERSION"$
|
||||
|
||||
|
||||
|
||||
@@ -22,9 +21,11 @@ $TX+CX+D,"TempleOS VDD_TEMPLEOS_VERSION","DD_OS_NAME_VERSION"$
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Public Domain
|
||||
Operating System
|
||||
|
||||
Divine Intellect,
|
||||
Public Domain,
|
||||
64-Bit,
|
||||
Kept Perfect,
|
||||
Operating System
|
||||
|
||||
$LK,"Trivial Solutions","FI:::/TempleOS/Doc/TrivialSolutions.TXT"$
|
||||
@@ -1,6 +1,6 @@
|
||||
$WW,1$A $FG,4$CSprite$FG$, is an ordered list of $LK,"these","MN:GRST_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-A,"::/TempleOS/Demo/Graphics/SpritePlot.CPP"$, $LK-A,"::/TempleOS/Demo/Graphics/SpritePlot3D.CPP"$ and $LK-A,"::/TempleOS/Demo/Graphics/SpritePut.CPP"$ and $LK,"CSpriteMesh","MN:CSpriteMesh"$().
|
||||
See $LK-A,"::/TempleOS/Demo/Graphics/SpritePlot.CPP"$, $LK-A,"::/TempleOS/Demo/Graphics/SpritePlot3D.CPP"$ and $LK-A,"::/TempleOS/Demo/Graphics/SpritePut.CPP"$ and $LK,"SpriteMesh","MN:SpriteMesh"$().
|
||||
|
||||
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,6 +1,6 @@
|
||||
$WW,1$One jiffy is one time slice. $LK,"sys_jiffies","MN:sys_jiffies"$ returns time slices since boot.
|
||||
|
||||
$LK,"SysTimerRead","MN:SysTimerRead"$ reads the timer ticks since boot. It's not as fast as $LK,"GetTimeStamp","MN:GetTimeStamp"$.
|
||||
$LK,"SysTimerRead","MN:SysTimerRead"$ reads the timer ticks since boot. It's not as fast as $LK,"GetTSC","MN:GetTSC"$.
|
||||
|
||||
Use $LK,"JIFFY_FREQ","MN:JIFFY_FREQ"$ to convert $LK,"sys_jiffies","MN:sys_jiffies"$.
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ $FG,5$M(\"D:/TempleOS/*\",\"E:/TempleOS/*\",\"+r+d\");$FG$ to check my changes.
|
||||
|
||||
* See $MA+A-X+PU,"Key Map","KeyMap;View;\n"$ for a list of defined keys. Define your own keys in $LK,"MyPutKey","MN:MyPutKey"$(). See $LK-A,"::/TempleOS/Doc/KeyBoard.TXT"$.
|
||||
|
||||
* $FG,2$<CTRL-SHIFT-L>$FG$ in the editor to reindent a $LK,"Holy C","FI:::/TempleOS/Doc/HolyC.TXT"$ function or renumber an asm routine's local labels.
|
||||
* $FG,2$<CTRL-SHIFT-L>$FG$ in the editor to reindent a $LK,"HolyC","FI:::/TempleOS/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$.
|
||||
|
||||
@@ -33,7 +33,7 @@ $FG,5$M(\"D:/TempleOS/*\",\"E:/TempleOS/*\",\"+r+d\");$FG$ to check my changes.
|
||||
|
||||
* You can disable $FG,2$WORDSTAT$FG$ commenting-out $LK,"WSInit","FF:HOME/Adam3fSys.CPP,WSInit"$() in $LK,"HOME/Adam3fSys.CPP","FF:HOME/Adam3fSys.CPP,WSInit"$.
|
||||
|
||||
* You can rst MultiCore CPU's if they get hung with $LK,"MPStart","MN:MPStart"$(). HD Audio will get screwed-up, however.
|
||||
* You can rst MultiCore CPU's if they get hung with $LK,"MPStart","MN:MPStart"$().
|
||||
|
||||
* Boolean expressions $BK,1$not$BK,0$ in $FG,2$if$FG$ statements don't have short circuit logic and are compiled inefficiently.
|
||||
|
||||
@@ -63,8 +63,6 @@ $FG,5$M(\"D:/TempleOS/*\",\"E:/TempleOS/*\",\"+r+d\");$FG$ to check my changes.
|
||||
|
||||
* Use $LK,"Silent","MN:Silent"$() to disable screen text output.
|
||||
|
||||
* Use $LK,"IOSnd","MN:IOSnd"$() to disable noise from disk access.
|
||||
|
||||
* Grab-scroll any window at any time with $FG,2${CTRL-LEFT-DRAG}$FG$. Null grab-scrolling with $FG,2${CTRL-RIGHT}$FG$.
|
||||
|
||||
* Use $FG,2$<CTRL-ALT-Z>$FG$ to zoom-in and $FG,2$<CTRL-ALT-SHIFT-Z>$FG$ to zoom-out. You can scroll by moving to the edge of the window. Set $LK,"gr_continuous_scroll","MN:gr_continuous_scroll"$ to $FG,2$TRUE$FG$ if you want.
|
||||
@@ -130,7 +128,7 @@ $FG,5$M(\"D:/TempleOS/*\",\"E:/TempleOS/*\",\"+r+d\");$FG$ to check my changes.
|
||||
|
||||
* The editor's select-text mechanism allows for disjoint portions of selected text. This is a feature, not a bug -- you can cut-and-paste disjoint text.
|
||||
|
||||
* $LK,"time_stamp_freq","MN:time_stamp_freq"$ is continuously calibrated, so be careful because expressions involving it might decrease. Take a snap-shot, like this: $FG,2$timeout=$LK,"GetTimeStamp","MN:GetTimeStamp"$+$LK,"time_stamp_freq","MN:time_stamp_freq"$ x seconds;$FG$ and compare against $LK,"GetTimeStamp","MN:GetTimeStamp"$().
|
||||
* $LK,"time_stamp_freq","MN:time_stamp_freq"$ is continuously calibrated, so be careful because expressions involving it might decrease. Take a snap-shot, like this: $FG,2$timeout=$LK,"GetTSC","MN:GetTSC"$+$LK,"time_stamp_freq","MN:time_stamp_freq"$ x seconds;$FG$ and compare against $LK,"GetTSC","MN:GetTSC"$().
|
||||
|
||||
* Use $LK,"HeapLog","MN:HeapLog"$() and $LK,"HeapLogRep","MN:HeapLogRep"$() to find leaks. Don't be confused by $LK,"CDoc","MN:CDoc"$ allocations. Those are generated when text is written to the cmd line buffer.
|
||||
|
||||
|
||||
@@ -6,15 +6,17 @@ $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","FI:::/TempleOS/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+D,"129,156","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","FI:::/TempleOS/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+D,"123,479","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","FI:::/TempleOS/Doc/Charter.TXT"$.
|
||||
|
||||
Conventional thinking is "failure is not an option" for general purpose operating systems. Since this OS is used in addition to Windows or Linux, however, failure is an option -- just use Windows if you can't do something.
|
||||
|
||||
Two things to know about TempleOS are that $UL,1$tasks$UL,0$ have $LK,"MAlloc","MN:MAlloc"$/$LK,"Free","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,"Holy C","FI:::/TempleOS/Doc/HolyC.TXT"$ (more than $FG,2$C$FG$, less than $FG,2$C++$FG$) compiler, line by line, and it places code into memory it $LK,"MAlloc","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 compiled 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,4$$TX+HTML,"x86_64","http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$ and nothing is "interpreted".
|
||||
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","FI:::/TempleOS/Doc/HolyC.TXT"$ (more than $FG,2$C$FG$, less than $FG,2$C++$FG$) compiler, line by line, and it places code into memory it $LK,"MAlloc","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 compiled 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,4$$TX+HTML,"x86_64","http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$ and nothing is "interpreted".
|
||||
|
||||
Statements at the global scope (outside the scope of $LK,"Holy C","FI:::/TempleOS/Doc/HolyC.TXT"$ 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.
|
||||
Statements at the global scope (outside the scope of $LK,"HolyC","FI:::/TempleOS/Doc/HolyC.TXT"$ 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.
|
||||
|
||||
I started with $FG,2$C$FG$ syntax, but didn't like the command line for a directory listing looking like this:
|
||||
|
||||
@@ -30,7 +32,7 @@ $FG$I didn't like that, so I made parentheses optional on calls with no args and
|
||||
|
||||
The syntax change created an ambiguity when specifying function addresses. To resolve it, I made a '$FG,2$&$FG$' required in front of function names when specifying an address of a function, which is better anyway.
|
||||
|
||||
Once I was no longer using standard C/C++ syntax, I decided to change everything I didn't like and call it $LK,"Holy C","FI:::/TempleOS/Doc/HolyC.TXT"$. Here are the new $LK,"operator precedence","FA:::/TempleOS/Doc/HolyC.TXT,OP_precedence"$ rules. It's Biblical! See $LK,"Luke,5:37","BF:Luke,5:37"$.
|
||||
Once I was no longer using standard C/C++ syntax, I decided to change everything I didn't like and call it $LK,"HolyC","FI:::/TempleOS/Doc/HolyC.TXT"$. Here are the new $LK,"operator precedence","FA:::/TempleOS/Doc/HolyC.TXT,OP_precedence"$ rules. It's Biblical! See $LK,"Luke,5:37","BF:Luke,5:37"$.
|
||||
|
||||
There are no object files in TempleOS and, normally, you don't make executable files either, but you can. That's known as "$FG,2$Ahead-Of-Time$FG$" compilation. Instead, you "$FG,2$Just-In-Time$FG$" compile.
|
||||
|
||||
@@ -38,7 +40,7 @@ Tasks have no priority scheme and are never removed from the queue. Instead, th
|
||||
|
||||
The TempleOS $FG,2$RedSea$FG$ file system is simple, so I don't get sued. There is an allocation bitmap for clusters and all files are stored contiguously. You can't grow files.
|
||||
|
||||
TempleOS is geared toward reading and writing whole files. Since whole files are processed, checksums and compression are possible. Filenames ending in "$FG,2$.Z$FG$" are automatically compressed or uncompressed when stored or fetched. TempleOS supports direct block random access into files, however -- $LK,"FRBlks","MN:FRBlks"$() and $LK,"FWBlks","MN:FWBlks"$().
|
||||
TempleOS is geared toward reading and writing whole files. Since whole files are processed, compression is possible. Filenames ending in "$FG,2$.Z$FG$" are automatically compressed or uncompressed when stored and fetched. TempleOS does support direct block random access into files, however -- $LK,"FRBlks","MN:FRBlks"$() and $LK,"FWBlks","MN:FWBlks"$().
|
||||
|
||||
If a file is not found, "$FG,2$.Z$FG$" is added or removed and a search is done, again. There is no $FG,2$PATH$FG$, but parent directories are searched when a file is not found. This feature is especially useful for default account files.
|
||||
|
||||
@@ -72,3 +74,7 @@ Use the $LK,"Help Index","FI:::/TempleOS/Doc/HelpIndex.TXT"$ or $LK,"Demo Index"
|
||||
|
||||
|
||||
$MA+A-X+PU,"Take Tour","SpawnUser(\"Cd(\\\"::/TempleOS/Misc/Tour\\\");;AutoFile(\\\"Tour\\\");\n\");"$
|
||||
|
||||
$FG,8$
|
||||
* "Windows" is a trademark of MicroSoft Corp.
|
||||
$FG$
|
||||
@@ -2,7 +2,7 @@ $WW,1$$FG,5$$TX+CX,"Text-Widget Help"$$FG$
|
||||
|
||||
See $LK-A,"::/TempleOS/Doc/Dollar.TXT"$ for details on dollar sign cmds.
|
||||
|
||||
$FG,2$"Expression"$FG$ a num or Holy C algebraic term with operators and Holy C syms can be entered.
|
||||
$FG,2$"Expression"$FG$ a num or HolyC algebraic term with operators and HolyC syms can be entered.
|
||||
$FG,2$"Macro"$FG$ Most entries can behave like macro entries if you assign them macro strs.
|
||||
$FG,2$"AutoStr"$FG$ Like a macro except it is an $LK,"AutoFile","FF:::/TempleOS/Doc/Glossary.TXT,AutoFile"$. You can't have both an autostr and macro text defined.
|
||||
|
||||
|
||||
Reference in new issue
Block a user