DIRECTORY PrincOps USING[SD], RTSD USING[sMapStiStd], RTSymbolDefs USING[nullHandle], RTTypesBasicPrivate USING[STDesc, SymbolTableIndex, LOOPHOLEDTMapStiStd, RSTDesc, RMapStiStd, MapStiStd], RTTypesBasicPrivateChanges USING [InitialSTIRangeSize], SafeStorage USING[TypeIndex], UnsafeStorage USING[GetSystemUZone]; SymbolAccessImpl: MONITOR -- protects MapStiStd IMPORTS RTTypesBasicPrivate, UnsafeStorage EXPORTS RTTypesBasicPrivate = BEGIN OPEN RTTypesBasicPrivate, RTTypesBasicPrivateChanges, SafeStorage; lastSTIndex: TypeIndex _ 0; TooManyTypes: ERROR = CODE; BlessMapStiStd: PUBLIC ENTRY PROC = { ENABLE UNWIND => NULL; t: LOOPHOLEDTMapStiStd = LOOPHOLE[RTTypesBasicPrivate.MapStiStd]; LOOPHOLE[RTTypesBasicPrivate.MapStiStd, LOOPHOLEDTMapStiStd] _ NIL; RTTypesBasicPrivate.MapStiStd _ NEW[RMapStiStd[InitialSTIRangeSize]]; FOR i: SymbolTableIndex IN [1..lastSTIndex] DO RTTypesBasicPrivate.MapStiStd[i] _ NEW[STDesc _ t[i]^] ENDLOOP; LOOPHOLE[LONG[@PrincOps.SD[RTSD.sMapStiStd]], LONG POINTER TO LONG POINTER]^ _ LOOPHOLE[RTTypesBasicPrivate.MapStiStd, LONG POINTER]; }; FindSTI: PUBLIC ENTRY PROC [std: STDesc, initializing: BOOL] RETURNS[i: SymbolTableIndex] = { ENABLE UNWIND => NULL; FOR i DECREASING IN [1..lastSTIndex] DO desc: RTTypesBasicPrivate.STDesc _ RTTypesBasicPrivate.MapStiStd[i]^; IF std.symbolsStamp.time # desc.symbolsStamp.time THEN LOOP; IF std.symbolsStamp.host # desc.symbolsStamp.host THEN LOOP; IF std.symbolsStamp.net # desc.symbolsStamp.net THEN LOOP; IF std.bcd # NIL AND std.sgi # desc.sgi THEN LOOP; IF desc.sth = RTSymbolDefs.nullHandle THEN { IF initializing THEN LOOPHOLE[RTTypesBasicPrivate.MapStiStd, LOOPHOLEDTMapStiStd][i].sth _ std.sth ELSE RTTypesBasicPrivate.MapStiStd[i].sth _ std.sth; }; RETURN[i]; ENDLOOP; IF lastSTIndex = InitialSTIRangeSize - 1 THEN ERROR TooManyTypes; i _ lastSTIndex _ lastSTIndex + 1; IF initializing THEN LOOPHOLE[RTTypesBasicPrivate.MapStiStd, LOOPHOLEDTMapStiStd][i] _ UnsafeStorage.GetSystemUZone[].NEW[STDesc _ std] ELSE RTTypesBasicPrivate.MapStiStd[i] _ NEW[STDesc _ std]; }; END. @SymbolAccessImpl.mesa Copyright c 1984 by Xerox Corporation. All rights reserved. BEWARE of assumptions below about RC activity. This module is used before the sun comes up, as well as after the world is safe for SafeStorage. Paul Rovner On August 17, 1983 10:43 am Russ Atkinson On June 19, 1984 6:22:01 pm PDT Êõ˜šœ™Jšœ Ïmœ1™˜J˜Jšœ˜Jšœžœžœ˜J˜š ÏnÐbn œžœžœžœ˜%Jšžœžœžœ˜Jšœžœ ˜AJ˜Jšžœ7žœ˜CJšœ žœ"˜EJ˜šžœžœ˜+Jšžœ$žœžœ˜B—J˜šžœžœ žœžœžœžœžœžœžœ˜LJšœžœ žœžœ˜8—Jšœ˜J˜—š œžœžœž˜Jšœžœžœ˜BJšžœžœžœ˜šžœž œžœž˜'JšœE˜EJšžœ0žœžœ˜