UnsafeStorage: DEFINITIONS = BEGIN NewUObject: PROC[size: CARDINAL--words--, zone: UNCOUNTED ZONE] RETURNS [LONG POINTER]; NewUZone: PROC[initialSize: INT _ 0--words--] RETURNS[UNCOUNTED ZONE]; FreeUZone: PROC[uz: UNCOUNTED ZONE]; ExtendUZone: UZoneFullProc; UZoneFullProc: TYPE = PROC[zone: UNCOUNTED ZONE, size: INT--words--]; SetUZoneFullProc: PROC[zone: UNCOUNTED ZONE, proc: UZoneFullProc] RETURNS[oldProc: UZoneFullProc]; TrimUZone: PROC[zone: UNCOUNTED ZONE]; IsUZoneEmpty: PROC[zone: UNCOUNTED ZONE] RETURNS[BOOL]; GetSystemUZone: PROC RETURNS[UNCOUNTED ZONE]; InvalidPointer: ERROR[ptr: LONG POINTER]; -- Raised by FREE END. ‚UnsafeStorage.Mesa last edited May 10, 1983 10:26 am by Paul Rovner use this instead of uz.NEW if explicit control of the size arg is required releases all storage associeated with the zone. Beware of dangling pointers! a uzone's fullProc is called when there is insufficient VM assigned to the uzone to satisfy a request (via NEW) to allocate an object of "size" words. After the fullProc returns another allocation attempt is made. the default UZoneFullProc for a uzone is ExtendUZone returns free VM pages to the operating system TRUE if no VM pages are assigned to it Access to a pre-defined UNCOUNTED ZONE SIGNALs and ERRORs ʵ˜Jšœ™Jšœ0™0˜JšœÏk ˜Jšœ˜J™š Ïn œœÏc œ œœ˜?šœœœ˜JšœJ™J——J˜JšžœœœŸ œœ œœ˜FJ˜šž œœ œœ˜$JšœL™L—J˜šÏb œ˜Jš œœœ œœŸ œ˜EJšœÖ™Ö—J˜šžœœ œœ˜AJšœ˜ Jšœ4™4—J˜šž œœ œœ˜&J™-—J˜š ž œœ œœœœ˜7Jšœ&™&—J™š žœœœ œœ˜-Jšœ&™&—J™J™Jšœ™J˜JšœœœœŸ˜