IPApplyImpl.mesa
Copyright © 1984, 1985, 1986 by Xerox Corporation. All rights reserved.
Doug Wyatt, May 30, 1986 5:16:34 pm PDT
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];
IF self.stats#NIL THEN self.stats[op] ← self.stats[op]+1;
};
END.