DIRECTORY IPBase -- USING everything --, IPImage -- USING everything --, IPInterpreter USING [MasterError, Op, Ref]; IPApplyImpl: CEDAR PROGRAM IMPORTS IPBase, IPImage, IPInterpreter EXPORTS IPInterpreter ~ BEGIN OPEN IPInterpreter; PrimitiveOp: TYPE ~ Op[nil..beginBody); ApplyArray: TYPE ~ ARRAY PrimitiveOp OF Operation; Operation: TYPE ~ PROC [Ref] _; -- can't be defaulted apply: REF ApplyArray ~ NEW[ApplyArray _ [ nil: ApplyBUG, get: IPBase.ApplyGET, makeveclu: IPBase.ApplyMAKEVECLU, makevec: IPBase.ApplyMAKEVEC, shape: IPBase.ApplySHAPE, getprop: IPBase.ApplyGETPROP, getp: IPBase.ApplyGETP, mergeprop: IPBase.ApplyMERGEPROP, fget: IPBase.ApplyFGET, fset: IPBase.ApplyFSET, makesimpleco: IPBase.ApplyMAKESIMPLECO, do: IPBase.ApplyDO, dosave: IPBase.ApplyDOSAVE, dosaveall: IPBase.ApplyDOSAVEALL, dosavesimplebody: IPBase.ApplyDOSAVESIMPLEBODY, findoperator: IPBase.ApplyFINDOPERATOR, pop: IPBase.ApplyPOP, copy: IPBase.ApplyCOPY, dup: IPBase.ApplyDUP, roll: IPBase.ApplyROLL, exch: IPBase.ApplyEXCH, mark: IPBase.ApplyMARK, unmark: IPBase.ApplyUNMARK, unmark0: IPBase.ApplyUNMARK0, count: IPBase.ApplyCOUNT, nop: IPBase.ApplyNOP, error: IPBase.ApplyERROR, if: IPBase.ApplyIF, ifelse: IPBase.ApplyIFELSE, ifcopy: IPBase.ApplyIFCOPY, eq: IPBase.ApplyEQ, gt: IPBase.ApplyGT, ge: IPBase.ApplyGE, and: IPBase.ApplyAND, or: IPBase.ApplyOR, not: IPBase.ApplyNOT, type: IPBase.ApplyTYPE, add: IPBase.ApplyADD, sub: IPBase.ApplySUB, neg: IPBase.ApplyNEG, abs: IPBase.ApplyABS, floor: IPBase.ApplyFLOOR, ceiling: IPBase.ApplyCEILING, trunc: IPBase.ApplyTRUNC, round: IPBase.ApplyROUND, mul: IPBase.ApplyMUL, div: IPBase.ApplyDIV, mod: IPBase.ApplyMOD, rem: IPBase.ApplyREM, iget: IPImage.ApplyIGET, iset: IPImage.ApplyISET, maket: IPImage.ApplyMAKET, translate: IPImage.ApplyTRANSLATE, rotate: IPImage.ApplyROTATE, scale: IPImage.ApplySCALE, scale2: IPImage.ApplySCALE2, concat: IPImage.ApplyCONCAT, concatt: IPImage.ApplyCONCATT, move: IPImage.ApplyMOVE, trans: IPImage.ApplyTRANS, show: IPImage.ApplySHOW, showandxrel: IPImage.ApplySHOWANDXREL, showandfixedxrel: IPImage.ApplySHOWANDFIXEDXREL, setxy: IPImage.ApplySETXY, setxyrel: IPImage.ApplySETXYREL, setxrel: IPImage.ApplySETXREL, setyrel: IPImage.ApplySETYREL, getcp: IPImage.ApplyGETCP, makepixelarray: IPImage.ApplyMAKEPIXELARRAY, extractpixelarray: IPImage.ApplyEXTRACTPIXELARRAY, finddecompressor: IPImage.ApplyFINDDECOMPRESSOR, makegray: IPImage.ApplyMAKEGRAY, findcolor: IPImage.ApplyFINDCOLOR, findcoloroperator: IPImage.ApplyFINDCOLOROPERATOR, findcolormodeloperator: IPImage.ApplyFINDCOLORMODELOPERATOR, makesampledcolor: IPImage.ApplyMAKESAMPLEDCOLOR, makesampledblack: IPImage.ApplyMAKESAMPLEDBLACK, setgray: IPImage.ApplySETGRAY, setsampledcolor: IPImage.ApplySETSAMPLEDCOLOR, setsampledblack: IPImage.ApplySETSAMPLEDBLACK, moveto: IPImage.ApplyMOVETO, lineto: IPImage.ApplyLINETO, linetox: IPImage.ApplyLINETOX, linetoy: IPImage.ApplyLINETOY, curveto: IPImage.ApplyCURVETO, conicto: IPImage.ApplyCONICTO, arcto: IPImage.ApplyARCTO, makeoutline: IPImage.ApplyMAKEOUTLINE, makeoutlineodd: IPImage.ApplyMAKEOUTLINEODD, maskfill: IPImage.ApplyMASKFILL, maskfillparity: IPImage.ApplyMASKFILLPARITY, maskstroke: IPImage.ApplyMASKSTROKE, maskstrokeclosed: IPImage.ApplyMASKSTROKECLOSED, maskvector: IPImage.ApplyMASKVECTOR, maskdashedstroke: IPImage.ApplyMASKDASHEDSTROKE, maskrectangle: IPImage.ApplyMASKRECTANGLE, startunderline: IPImage.ApplySTARTUNDERLINE, maskunderline: IPImage.ApplyMASKUNDERLINE, masktrapezoidx: IPImage.ApplyMASKTRAPEZOIDX, masktrapezoidy: IPImage.ApplyMASKTRAPEZOIDY, maskpixel: IPImage.ApplyMASKPIXEL, clipoutline: IPImage.ApplyCLIPOUTLINE, cliprectangle: IPImage.ApplyCLIPRECTANGLE, maskchar: IPImage.ApplyMASKCHAR, makefont: IPImage.ApplyMAKEFONT, findfont: IPImage.ApplyFINDFONT, modifyfont: IPImage.ApplyMODIFYFONT, setfont: IPImage.ApplySETFONT, correctmask: IPImage.ApplyCORRECTMASK, correctspace: IPImage.ApplyCORRECTSPACE, correct: IPImage.ApplyCORRECT, setcorrectmeasure: IPImage.ApplySETCORRECTMEASURE, setcorrecttolerance: IPImage.ApplySETCORRECTTOLERANCE, space: IPImage.ApplySPACE ]]; ApplyBUG: PROC [self: Ref] ~ { MasterError[$undefinedOperation, "Invalid primitive operator"]; }; Apply: PUBLIC PROC [self: Ref, op: Op] ~ { apply[op][self]; }; END. ΔIPApplyImpl.mesa Copyright c 1984, 1985, 1986 by Xerox Corporation. All rights reserved. Doug Wyatt, May 30, 1986 5:16:34 pm PDT IF self.stats#NIL THEN self.stats[op] _ self.stats[op]+1; Κ`˜codešœ™Kšœ Οmœ=™HKšœ'™'—K™šΟk ˜ KšœΟcžŸœ˜KšœŸžŸœ˜Kšœžœ˜+—K˜KšΠbl œžœž˜Kšžœ˜&Kšžœ˜Kšœžœžœ˜K˜Kšœ žœ˜'Kšœ žœžœ žœ ˜2Kšœ žœžœ Ÿ˜5K˜šœžœžœ˜*Kšœ˜Kšœ˜Kšœ!˜!Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ!˜!Kšœ˜Kšœ˜Kšœ'˜'Kšœ˜Kšœ˜Kšœ!˜!Kšœ/˜/Kšœ'˜'Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ"˜"Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ&˜&Kšœ0˜0Kšœ˜Kšœ ˜ Kšœ˜Kšœ˜Kšœ˜Kšœ,˜,Kšœ2˜2Kšœ0˜0Kšœ ˜ Kšœ"˜"Kšœ2˜2Kšœ<˜