TrueType Instructions(op_ttf.rfi):
Class: Machine OpCodes representation, Status: Complete, Last change: 5/2/2001 5:42:52 PM

set byteorder norm

type bit
TBit num+(1)
TBit2 num+(2)
TBit3 num+(3)
TBit4 num+(4)
TBit6 num+(6)

TBit8 num+(8)

TAxisSel enum TBit (y=0,x=1)
TDirectionSel enum TBit (Par=0,Ort=1)
TPositionSel enum TBit (Cur=0,Org=1)
TZoneSel enum TBit (zp1_rp2=0,zp0_rp1=1)

TDistType enum TBit2 (Gray=0, Black=1, White=2)

type

TTTFOpCode enum TBit8 fields (
  A: TAxisSel @0.1,
  D: TDirectionSel @0.1,
  P: TPositionSel @0.1,
  Z: TZoneSel @0.1,
  Cnt3: TBit3 @0.3,
  SetRP0: TBit @0.1,
  round: TBit @0.1,
  DT: TDistType  @0.2,
  round_2: TBit @2.1,
  KeepMin: TBit @3.1,
  SetRP0_4: TBit @4.1
) of (
//Pushing data onto the interpreter stack
  NPUSHB = 0x40, //PUSH N Bytes
  NPUSHW = 0x41, //PUSH N Words
  PUSHB(Cnt3)= 0xB0, //PUSH Bytes
  PUSHW(Cnt3)= 0xB8, //PUSH Words

//Managing the Storage Area
  WS=0x42, //Write Store
  RS=0x43, //Read Store

//Managing the Control Value Table
  WCVTP=0x44, //Write Control Value Table in Pixel units
  WCVTF=0x70, //Write Control Value Table in FUnits
  RCVT=0x45, //Read Control Value Table

//Managing the Graphics State

  SVTCA(A)=0x00, //Set freedom and projection Vectors To Coordinate Axis
  SPVTCA(A)=0x02, //Set Projection_Vector To Coordinate Axis
  SFVTCA(A)=0x04, //Set Freedom_Vector to Coordinate Axis
  SPVTL(D)=0x06, //Set Projection_Vector To Line
  SFVTL(D)=0x08, //Set Freedom_Vector To Line
  SDPVTL(D)=0x86, //Set Dual Projection_Vector To Line
  SPVFS=0x0A, //Set Projection_Vector From Stack
  SFVFS=0x0B, //Set Freedom_Vector From Stack
  GPV=0x0C, //Get Projection_Vector
  GFV=0x0D, //Get Freedom_Vector
  SFVTPV=0x0E, //Set Freedom_Vector To Projection Vector
  SRP0=0x10, //Set Reference Point 0
  SRP1=0x11, //Set Reference Point 1
  SRP2=0x12, //Set Reference Point 2
  SZP0=0x13, //Set Zone Pointer 0
  SZP1=0x14, //Set Zone Pointer 1
  SZP2=0x15, //Set Zone Pointer 2
  SZPS=0x16, //Set Zone PointerS
  RTG=0x18, //Round To Grid
  RTHG=0x19, //Round To Half Grid
  RTDG=0x3D, //Round To Double Grid
  SROUND=0x76, //Super ROUND
  S45ROUND=0x77, //Super ROUND 45 degrees
  ROFF=0x7A, //Round OFF
  RUTG=0x7C, //Round Up To Grid
  RDTG=0x7D, //Round Down To Grid
  SLOOP=0x17, //Set LOOP variable
  SMD=0x1A, //Set Minimum_ Distance
  SCVTCI=0x1D, //Set Control Value Table Cut In
  SSWCI=0x1E, //Set Single_Width_Cut_In
  SSW=0x1F, //Set Single-width
  FLIPON=0x4D, //Set the auto_flip Boolean to ON
  FLIPOFF=0x4E, //Set the auto_flip Boolean to OFF
  SDB=0x5E, //Set Delta_Base in the graphics state
  SDS=0x5F, //Set Delta_Shift in the graphics state
  SANGW=0x7E, //Set Angle _Weight
  SCANCTRL=0x85, //SCAN conversion ConTRoL
  SCANTYPE=0x8D,
  INSTCTRL=0x8E, //INSTRuction execution ConTRoL

//Reading and writing data
  GC(P)=0x46, //Get Coordinate projected onto the projection_vector
  SCFS=0x48, //Sets Coordinate From the Stack using projection_vector and freedom_vector
  MDGrid=0x49, //MD[a] - Measure Distance, 0:	measure distance in grid-fitted outline
  MDOrg=0x4A,  //MD[a] - Measure Distance, 1:	measure distance in original outline
  MPPEM=0x4B, //Measure Pixels Per EM
  MPS=0x4C, //Measure Point Size

//Managing outlines
  FLIPPT=0x80, //FLIP PoinT
  FLIPRGON=0x81, //FLIP  RanGe ON
  FLIPRGOFF=0x82, //FLIP RanGe OFF
  SHP(Z)=0x32, //SHift Point by the last point
  SHC(Z)=0x34, //SHift Contour by the last point
  SHZ(Z)=0x36, //SHift Zone by the last point
  SHPIX=0x38, //SHift point by a PIXel amount
  MSIRP(SetRP0)=0x3A, //Move Stack Indirect Relative Point
  MDAP(round)=0x2E, //Move Direct Absolute Point
  MIAP(round)=0x3E, //Move Indirect Absolute Point
  MDRP(SetRP0_4,KeepMin,round_2,DT)=0xC0, //Move Direct Relative Point
  MIRP(SetRP0_4,KeepMin,round_2,DT)=0xE0, //Move Indirect Relative Point
  ALIGNRP=0x3C, //ALIGN Relative Point
  ISECT=0x0F, //moves point p to the InterSECTion of two lines
  ALIGNPTS=0x27, //ALIGN Points
  IP=0x39, //Interpolate Point by the last relative stretch
  UTP=0x29, //UnTouch Point
  IUP(A)=0x30, //Interpolate Untouched Points through the outline

//Managing exceptions
  DELTAP1=0x5D, //DELTA exception P1
  DELTAP2=0x71, //DELTA exception P2
  DELTAP3=0x72, //DELTA exception P3
  DELTAC1=0x73, //DELTA exception C1
  DELTAC2=0x74, //DELTA exception C2
  DELTAC3=0x75, //DELTA exception C3

//Managing the stack
  DUP=0x20, //Duplicate top stack element
  POP=0x21, //POP top stack element
  CLEAR=0x22, //Clear the entire stack
  SWAP=0x23, //SWAP the top two elements on the stack
  DEPTH=0x24, //Returns the DEPTH of the stack
  CINDEX=0x25, //Copy the INDEXed element to the top of the stack
  MINDEX=0x26, //Move the INDEXed element to the top of the stack
  ROLL=0x8a, //ROLL the top three stack elements

//Managing the flow of control
  IF=0x58, //IF test
  ELSE=0x1B,
  EIF=0x59, //End IF
  JROT=0x78, //Jump Relative On True
  JMPR=0x1C, //JuMP Relative
  JROF=0x79, //Jump Relative On False

//Logical functions
  LT=0x50, //Less Than
  LTEQ=0x51, //Less Than or Equal
  GT=0x52, //Greater Than
  GTEQ=0x53, //Greater Than or Equal
  EQ=0x54, //EQual
  NEQ=0x55, //Not EQual
  ODD=0x56,
  EVEN=0x57,
  AND=0x5A, //logical AND
  OR=0x5B, //logical OR
  NOT=0x5C, //logical NOT

//Arithmetic and math instructions
  ADD=0x60,
  SUB=0x61, //SUBtract
  DIV=0x62, //DIVide
  MUL=0x63, //MULtiply
  ABS=0x64, //ABSolute value
  NEG=0x65, //NEGate
  FLOOR=0x66,
  CEILING=0x67,
  MAX=0x8B, //MAXimum of top two stack elements
  MIN=0x8C, //MINimum of top two stack elements

//Compensating for the engine characteristics
  ROUND(DT)=0x68, //ROUND value
  NROUND(DT)=0x6C, //No ROUNDing of value
  
//Defining and using functions and instructions
  FDEF=0x2C, //Function DEFinition
  ENDF=0x2D, //END Function definition
  CALL=0x2B, //CALL function
  LOOPCALL=0x2A, //LOOP and CALL function
  IDEF=0x89, //Instruction DEFinition

//Debugging
  DEBUG=0x4F, //DEBUG call

//Miscellaneous instructions
  GETINFO=0x88 //GET INFOrmation
)

set byteorder rev
type
TNPUSHB struc
  Byte N
  array[@.N]of Byte D
ends

TNPUSHW struc
  Byte N
  array[@.N]of SHORT D
ends

TTTFInstr struc pas
  Op: TTTFOpCode
  Arg: case @.Op of
    NPUSHB: TNPUSHB
    NPUSHW: TNPUSHW
    PUSHB: array[@@.Op.Cnt3+1]of Byte
    PUSHW: array[@@.Op.Cnt3+1]of SHORT
    RS,WS: void
    WCVTP,WCVTF,RCVT: void
  endc
ends: displ=(@.Op,@.Arg)

TTTFInstructions(Sz) array of (TTTFInstr):[@:Size=@:Sz]: displ=('(',
  ShowArray(@,(NL,HEX(&@-&@:@,4),': ',@)),NL,')')

/*
TTTFInstrTbl(Sz) array of (TTTFInstr):[@:Size=@:Sz]: displ=('(',
  ShowArray(@,(NL,HEX(&@-&@:@,4),': ',@)),NL,')')

TTTFInstructions(Sz) struc
  TTTFInstrTbl(@:Sz) Tbl
  raw[] rest
ends:[@:Size=@:Sz]
*/


Other specifications.


FlexT home page, Author`s home page.