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