ACCT FILES

You can add and remove accts by making or removing directories in the ::/LT/Acct
s directory.  An empty account directory should be valid because it will get 
default files from the parent directory.

See HOME/UserStartUp.CPZ for the user start-up file.

See HOME/PersonalMenu.TXZ for a personal menu which can be viewed at the cmd 
line with the WINDOWS key or by clicking "MENU" in the upper left border area of 
a window.

See HOME/DoItOnce.CPZ for a file which is invoked at the start-up of the first 
user.

See HOME/Favorites.TXZ for a handy "favorites" file which can be reached by 
pressing ALT-F, pretty-much anywhere.  Users can place links and todo lists or 
any text within this.

See HOME/Adam3.APZ for the user files that get loaded into the adam task at 
start-up.  These are only loaded once.

HOME/Registry.CPZ can be edited by hand or deleted to reset to defaults.  Takes 
affect next boot.

See HOME/ServantStartUp.CPZ for the start-up file other cmds which Spawn() 
tasks.


                              APPLICATION POLICIES

* Place applications in their own /LT/Apps subdirectory.

* Make a file called Load.CPZ to load the application.

* Make a file called Run.CPZ to load and run the application, preferable by #inc
ludeing the Load.CPZ file.

* Place user data in a subdirectory of HOME, preferably naming the subdirectory 
the same as the /LT/Apps subdirectory.  Or, place data in the Registry.CPZ file. 
 See ::/LT/Demo/RegistryDemo.CPZ.

* Make a file called Install.CPZ or Install.AUZ to create the HOME subdirectory 
and do similar stuff.

 

                           OS PROGRAMMING GUIDELINES:

* Virtual mem is not used (It is identity mapped in EM64T mode).  The stack does 
not grow, so allocate enough when the task (process) is Spawned and use the heap 
for most things.  (The "heap" refers to MAlloc() and Free().)

* I've tried to standardize names see Naming convention

* There are two modes of compiling Static Compiled Mode and JIT Mode.  Actual 
compilation is done in both--nothing is "interpreted".

* Differences from C/C++

* I got rid of continue for loops because I don't use it, don't like it, and it 
bloats the compiler.  Use goto.

* System Programming Guidelines

                              Hash symbol tables:

* See ::/LT/Adam/Hash2a.APZ for examples of how the hash tables are set-up.  
Basically, symbols are placed into hash tables and child process hash tables are 
chained to parents.  This provides scopes for variables and functions.

* adam_task->hash_table holds the C/C++ symbols loaded in on start-up.

* Fs->hash_table holds user C+ symbols and if a symbol is not found, it checks 
parents.  When a duplicate symbol is added to the table, it overshadows the 
previous symbol unless you have done OptOn(OPTf_REPLACE_SYMS).  When developing 
software, typically you include the file at the cmd prompt, make changes and 
reinclude it.  Old symbols 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 PopUp() a 
task to run the application and kill it when it's done.

* To display the contents of a hash table, use the HashRep() routine or the 
varients.  HashDepthRep() gives a histogram  of how long the chains are, in case 
you wish to make hash table sizes bigger.

                          Assembly Language Concerns:

* FS must always point to the per-TASK's structure.  See C+ and Asm.

* GS must always point to the per-CPU's structure.  See C+ and Asm.

* Don't change the segment registers unless interrupts are off.

* When interacting with compiled code, preserve RBP, RSI, RDI, R12-R15 because 
the compiler uses these for register vars.  You are free to trash RAX, RBX, RCX, 
RDX and R8-R11.

* I recommend using the standard stack frame for functions because Caller() is 
used to display the call stack, such as for the wallpaper.
        PUSH    RBP
        MOV     RBP,RSP
...
        POP     RBP
        RET