DIRECTORY Environment USING [Byte], Format USING [Number, SubString, StringProc], MopOps USING [ESCAlphaNames, FopNames, MopNames, SDDefsNames], Runtime USING [GetTableBase, IsBound], String USING [ AppendOctal, AppendSubString, SubString, SubStringDescriptor, UpperCase]; MopImpl: PROGRAM IMPORTS Format, MopOps, Runtime, String EXPORTS MopOps = BEGIN CompStrDesc: TYPE = RECORD [offset, length: CARDINAL]; OpRecord: TYPE = RECORD [ stringOffset: OpPtr RELATIVE POINTER TO StringBody, opcode: ARRAY Environment.Byte OF CompStrDesc]; OpPtr: TYPE = LONG BASE POINTER TO OpRecord; mopdata: OpPtr _ NIL; fopdata: OpPtr _ NIL; escdata: OpPtr _ NIL; sddata: OpPtr _ NIL; PutMopcode: PUBLIC PROC [proc: Format.StringProc, n: CARDINAL] = { IF mopdata = NIL THEN mopdata _ GetBase[MopOps.MopNames]; PutOpcode[proc, n, mopdata]}; AppendMopcodeName: PUBLIC PROC [s: LONG STRING, n: CARDINAL] = { IF mopdata = NIL THEN mopdata _ GetBase[MopOps.MopNames]; AppendOpcodeName[s, n, mopdata]}; MopcodeValue:PUBLIC PROC [s: LONG STRING] RETURNS [INTEGER] = { IF mopdata = NIL THEN mopdata _ GetBase[MopOps.MopNames]; RETURN[SearchForOp[s, mopdata]]}; PutFopcode: PUBLIC PROC [proc: Format.StringProc, n: CARDINAL] = { IF fopdata = NIL THEN fopdata _ GetBase[MopOps.FopNames]; PutOpcode[proc, n, fopdata]}; AppendFopcodeName: PUBLIC PROC [s: LONG STRING, n: CARDINAL] = { IF fopdata = NIL THEN fopdata _ GetBase[MopOps.FopNames]; AppendOpcodeName[s, n, fopdata]}; FopcodeValue:PUBLIC PROC [s: LONG STRING] RETURNS [INTEGER] = { IF fopdata = NIL THEN fopdata _ GetBase[MopOps.FopNames]; RETURN[SearchForOp[s, fopdata]]}; PutEscAlpha: PUBLIC PROC [proc: Format.StringProc, n: CARDINAL] = { IF escdata = NIL THEN escdata _ GetBase[MopOps.ESCAlphaNames]; PutOpcode[proc, n, escdata]}; AppendEscAlpha: PUBLIC PROC [s: LONG STRING, n: CARDINAL] = { IF escdata = NIL THEN escdata _ GetBase[MopOps.ESCAlphaNames]; AppendOpcodeName[s, n, escdata]}; EscAlphaValue:PUBLIC PROC [s: LONG STRING] RETURNS [INTEGER] = { IF escdata = NIL THEN escdata _ GetBase[MopOps.ESCAlphaNames]; RETURN[SearchForOp[s, escdata]]}; PutSdName: PUBLIC PROC [proc: Format.StringProc, n: CARDINAL] = { IF sddata = NIL THEN sddata _ GetBase[MopOps.SDDefsNames]; PutOpcode[proc, n, sddata]}; AppendSdName: PUBLIC PROC [s: LONG STRING, n: CARDINAL] = { IF sddata = NIL THEN sddata _ GetBase[MopOps.SDDefsNames]; AppendOpcodeName[s, n, sddata]}; SdNameValue: PUBLIC PROC [s: LONG STRING] RETURNS [INTEGER] = { IF sddata = NIL THEN sddata _ GetBase[MopOps.SDDefsNames]; RETURN[SearchForOp[s, sddata]]}; GetBase: PROC [p: PROGRAM] RETURNS [LONG POINTER] = { IF Runtime.IsBound[p] THEN RETURN [Runtime.GetTableBase[p]] ELSE RETURN[NIL]}; PutOpcode: PROC [proc: Format.StringProc, n: CARDINAL, lp: OpPtr] = { ss: String.SubStringDescriptor; SetupOp[lp, n, @ss]; IF ss.length = 0 THEN Format.Number[proc, n, [8,TRUE,TRUE,3]] ELSE Format.SubString[proc, @ss]}; AppendOpcodeName: PROC [s: LONG STRING, n: CARDINAL, lp: OpPtr] = { ss: String.SubStringDescriptor; SetupOp[lp, n, @ss]; IF ss.length = 0 THEN String.AppendOctal[s, n] ELSE String.AppendSubString[s, @ss]}; SetupOp: PROC [lp: OpPtr, n: CARDINAL, ss: String.SubString] = { IF lp = NIL THEN ss^ _ [base: NIL, length: 0, offset: 0] ELSE { ss.base _ @lp[lp.stringOffset]; [offset: ss.offset, length: ss.length] _ lp.opcode[n]}}; SearchForOp: PROC [s: LONG STRING, lp: OpPtr] RETURNS [INTEGER] = { desc: String.SubStringDescriptor; mopdesc: String.SubStringDescriptor; IF lp = NIL THEN RETURN[-1]; desc _ [base: s, offset: 0, length: s.length]; mopdesc.base _ @lp[lp.stringOffset]; FOR byte: Environment.Byte IN Environment.Byte DO [offset: mopdesc.offset, length: mopdesc.length] _ lp.opcode[byte]; IF desc.length = mopdesc.length AND SameChars[@desc, @mopdesc] THEN RETURN[byte]; ENDLOOP; RETURN[-1]}; SameChars: PROC [a,b: POINTER TO String.SubStringDescriptor] RETURNS [BOOLEAN] = BEGIN FOR i: CARDINAL IN [0..a.length) DO IF String.UpperCase[a.base[a.offset+i]] # String.UpperCase[b.base[b.offset+i]] THEN RETURN [FALSE]; ENDLOOP; RETURN [TRUE]; END; END. ÊMopImpl.mesa Edited by Bruce, 15-Sep-81 17:19:47 Edited by Sweet, 14-Jan-83 12:03:01 Last Edited by: Sweet, July 12, 1984 2:29:57 pm PDT Mopcodes Fopcodes ESCAlpha names SDDefs names Utilities Êï˜Jšœ™Jšœ#™#Jšœ#™#J™3J˜šÏk ˜ Jšœ œ˜Jšœœ!˜-Jšœœ2˜>Jšœœ˜&šœœ˜J˜IJ˜——šœ œ˜Jšœ ˜'Jšœ ˜Jš˜J˜Jšœ œœœ˜6šœ œœ˜Jšœœœœ ˜3Jšœœœ˜/—Jš œœœœœœ ˜,J˜Jšœœ˜Jšœœ˜Jšœœ˜Jšœœ˜J˜Jšœ™J˜šÏn œœœœ˜BJšœ œœ$˜9J˜J˜—š žœœœœœœ˜@Jšœ œœ$˜9J˜!J˜—šž œœœœœœœ˜?Jšœ œœ$˜9Jšœ˜!J˜—Jšœ™J˜šž œœœœ˜BJšœ œœ$˜9J˜J˜—š žœœœœœœ˜@Jšœ œœ$˜9J˜!J˜—šž œœœœœœœ˜?Jšœ œœ$˜9Jšœ˜!J˜—Jšœ™J˜šž œœœœ˜CJšœ œœ)˜>J˜J˜—š žœœœœœœ˜=Jšœ œœ)˜>J˜!J˜—šž œœœœœœœ˜@Jšœ œœ)˜>Jšœ˜!J˜—Jšœ ™ J˜šž œœœœ˜AJšœ œœ&˜:J˜J˜—š ž œœœœœœ˜;Jšœ œœ&˜:J˜ J˜—šž œœœœœœœ˜?Jšœ œœ&˜:Jšœ˜ J˜—Jšœ ™ J˜š žœœœœœœ˜5Jšœœœ˜;Jšœœœ˜J˜—šž œœœ˜EJ˜J˜Jšœœœœ˜=Jšœ˜"J˜—š žœœœœœ˜CJ˜J˜Jšœœ˜.Jšœ!˜%J˜—šžœœœ˜@Jšœœœœ˜8šœ˜J˜J˜8J˜——š ž œœœœ œœ˜CJ˜!J˜$J˜Jšœœœœ˜J˜.J˜$J˜šœœ˜1J˜Cšœ˜#Jšœœœ˜-—Jšœ˜—Jšœ˜ J˜—šž œœœœ˜