UUO Area Scheme for Storage Allocation Description/definitions: UUO Areas, or just "areas", are blocks of core which in theory are infinitely expandable and thus are very useful for dynamic allocation. Each area requires several variables of information such as its current actual core address, size, and pointers (since expansion of area size may involve shifting the entire area to a less restrictive neighborhood). These variables require $ARSIZ consecutive words of storage, and reference to an area is usually made by addressing this Area-info block or ARBLK. The address of this block is called an ARBLK pointer, or ARPT. For example, to use an area called MSGAR, one simply has MSGAR: BLOCK $ARSIZ ; "MSGAR" is the ARPT for this area. Areas can be of two general types, Text and Image. In the former, the area is considered to hold ASCII text, and special operations are done to preserve character counts, byte pointers, etc. whereas in the latter case the area is simply a block of words. General Use: One can "open", "close", "expand", and write into areas. Before doing any of these operations, it is necessary to initialize the core management routines by means of UARINIT (see description). Thereafter, UAROPN is used for "opening" or creating areas, and UARCLS for "closing" or flushing them. During an area's existence, its size can be altered with UAREXP, and its type changed with UARTYP. UARINIT addr ; addr: -<# of pages avail>,, The word addressed should be a "page AOBJN" that describes how many pages are available for use, starting at the specified page. A very common definition, when all core above the program code is free, is to put these as the very last statements in a program: ARPAGS: FFPAG-400,,FFPAG ; Specify pages for core management FFPAG==<.+1777>/2000 ; Define FFPAG as # of first free page. The format of such a table is currently as follows. References can be made directly, but should ALWAYS use the symbol, e.g. to find abs addr of the area in above example, do MOVE A,MSGAR+$ARLOC. None of the locations should be written into unless one is familiar with the way UUO's operate on the table. $ARLOC, $ARLEN, and $ARTYP should NEVER be touched. $ARID: < # similar to old "area no."??> (may not be used at all) $ARLOC: $ARWPT: $ARRPT: $ARLEN: $ARCHL: <# chars left to write into> (only used if type is character) $ARTYP: %ARTMD = Mode is 1 for character, 0 for word. %ARTZM = area should be zeroed when opened, and core additions cleared.