1 /*****************************************************************************
2  * Copyright (C) The Apache Software Foundation. All rights reserved.        *
3  * ------------------------------------------------------------------------- *
4  * This software is published under the terms of the Apache Software License *
5  * version 1.1, a copy of which has been included with this distribution in  *
6  * the LICENSE file.                                                         *
7  *****************************************************************************/
8 
9 package jogamp.graph.font.typecast.ot;
10 
11 /**
12  * The Mnemonic representations of the TrueType instruction set.
13  * @author <a href="mailto:davidsch@dev.java.net">David Schweinsberg</a>
14  * @version $Id: Mnemonic.java,v 1.1.1.1 2004-12-05 23:14:30 davidsch Exp $
15  */
16 public class Mnemonic {
17 
18     public static final short SVTCA = 0x00;  // [a]
19     public static final short SPVTCA = 0x02; // [a]
20     public static final short SFVTCA = 0x04; // [a]
21     public static final short SPVTL = 0x06;  // [a]
22     public static final short SFVTL = 0x08;  // [a]
23     public static final short SPVFS = 0x0A;
24     public static final short SFVFS = 0x0B;
25     public static final short GPV = 0x0C;
26     public static final short GFV = 0x0D;
27     public static final short SFVTPV = 0x0E;
28     public static final short ISECT = 0x0F;
29     public static final short SRP0 = 0x10;
30     public static final short SRP1 = 0x11;
31     public static final short SRP2 = 0x12;
32     public static final short SZP0 = 0x13;
33     public static final short SZP1 = 0x14;
34     public static final short SZP2 = 0x15;
35     public static final short SZPS = 0x16;
36     public static final short SLOOP = 0x17;
37     public static final short RTG = 0x18;
38     public static final short RTHG = 0x19;
39     public static final short SMD = 0x1A;
40     public static final short ELSE = 0x1B;
41     public static final short JMPR = 0x1C;
42     public static final short SCVTCI = 0x1D;
43     public static final short SSWCI = 0x1E;
44     public static final short SSW = 0x1F;
45     public static final short DUP = 0x20;
46     public static final short POP = 0x21;
47     public static final short CLEAR = 0x22;
48     public static final short SWAP = 0x23;
49     public static final short DEPTH = 0x24;
50     public static final short CINDEX = 0x25;
51     public static final short MINDEX = 0x26;
52     public static final short ALIGNPTS = 0x27;
53     public static final short UTP = 0x29;
54     public static final short LOOPCALL = 0x2A;
55     public static final short CALL = 0x2B;
56     public static final short FDEF = 0x2C;
57     public static final short ENDF = 0x2D;
58     public static final short MDAP = 0x2E;  // [a]
59     public static final short IUP = 0x30;   // [a]
60     public static final short SHP = 0x32;
61     public static final short SHC = 0x34;   // [a]
62     public static final short SHZ = 0x36;   // [a]
63     public static final short SHPIX = 0x38;
64     public static final short IP = 0x39;
65     public static final short MSIRP = 0x3A; // [a]
66     public static final short ALIGNRP = 0x3C;
67     public static final short RTDG = 0x3D;
68     public static final short MIAP = 0x3E;  // [a]
69     public static final short NPUSHB = 0x40;
70     public static final short NPUSHW = 0x41;
71     public static final short WS = 0x42;
72     public static final short RS = 0x43;
73     public static final short WCVTP = 0x44;
74     public static final short RCVT = 0x45;
75     public static final short GC = 0x46;    // [a]
76     public static final short SCFS = 0x48;
77     public static final short MD = 0x49;    // [a]
78     public static final short MPPEM = 0x4B;
79     public static final short MPS = 0x4C;
80     public static final short FLIPON = 0x4D;
81     public static final short FLIPOFF = 0x4E;
82     public static final short DEBUG = 0x4F;
83     public static final short LT = 0x50;
84     public static final short LTEQ = 0x51;
85     public static final short GT = 0x52;
86     public static final short GTEQ = 0x53;
87     public static final short EQ = 0x54;
88     public static final short NEQ = 0x55;
89     public static final short ODD = 0x56;
90     public static final short EVEN = 0x57;
91     public static final short IF = 0x58;
92     public static final short EIF = 0x59;
93     public static final short AND = 0x5A;
94     public static final short OR = 0x5B;
95     public static final short NOT = 0x5C;
96     public static final short DELTAP1 = 0x5D;
97     public static final short SDB = 0x5E;
98     public static final short SDS = 0x5F;
99     public static final short ADD = 0x60;
100     public static final short SUB = 0x61;
101     public static final short DIV = 0x62;
102     public static final short MUL = 0x63;
103     public static final short ABS = 0x64;
104     public static final short NEG = 0x65;
105     public static final short FLOOR = 0x66;
106     public static final short CEILING = 0x67;
107     public static final short ROUND = 0x68;  // [ab]
108     public static final short NROUND = 0x6C; // [ab]
109     public static final short WCVTF = 0x70;
110     public static final short DELTAP2 = 0x71;
111     public static final short DELTAP3 = 0x72;
112     public static final short DELTAC1 = 0x73;
113     public static final short DELTAC2 = 0x74;
114     public static final short DELTAC3 = 0x75;
115     public static final short SROUND = 0x76;
116     public static final short S45ROUND = 0x77;
117     public static final short JROT = 0x78;
118     public static final short JROF = 0x79;
119     public static final short ROFF = 0x7A;
120     public static final short RUTG = 0x7C;
121     public static final short RDTG = 0x7D;
122     public static final short SANGW = 0x7E;
123     public static final short AA = 0x7F;
124     public static final short FLIPPT = 0x80;
125     public static final short FLIPRGON = 0x81;
126     public static final short FLIPRGOFF = 0x82;
127     public static final short SCANCTRL = 0x85;
128     public static final short SDPVTL = 0x86; // [a]
129     public static final short GETINFO = 0x88;
130     public static final short IDEF = 0x89;
131     public static final short ROLL = 0x8A;
132     public static final short MAX = 0x8B;
133     public static final short MIN = 0x8C;
134     public static final short SCANTYPE = 0x8D;
135     public static final short INSTCTRL = 0x8E;
136     public static final short PUSHB = 0xB0; // [abc]
137     public static final short PUSHW = 0xB8; // [abc]
138     public static final short MDRP = 0xC0;  // [abcde]
139     public static final short MIRP = 0xE0;  // [abcde]
140 
141     /**
142      * Gets the mnemonic text for the specified opcode
143      * @param opcode The opcode for which the mnemonic is required
144      * @return The mnemonic, with a description
145      */
getMnemonic(final short opcode)146     public static String getMnemonic(final short opcode) {
147         if (opcode >= MIRP) return "MIRP["+((opcode&16)==0?"nrp0,":"srp0,")+((opcode&8)==0?"nmd,":"md,")+((opcode&4)==0?"nrd,":"rd,")+(opcode&3)+"]";
148         else if (opcode >= MDRP) return "MDRP["+((opcode&16)==0?"nrp0,":"srp0,")+((opcode&8)==0?"nmd,":"md,")+((opcode&4)==0?"nrd,":"rd,")+(opcode&3)+"]";
149         else if (opcode >= PUSHW) return "PUSHW["+((opcode&7)+1)+"]";
150         else if (opcode >= PUSHB) return "PUSHB["+((opcode&7)+1)+"]";
151         else if (opcode >= INSTCTRL) return "INSTCTRL";
152         else if (opcode >= SCANTYPE) return "SCANTYPE";
153         else if (opcode >= MIN) return "MIN";
154         else if (opcode >= MAX) return "MAX";
155         else if (opcode >= ROLL) return "ROLL";
156         else if (opcode >= IDEF) return "IDEF";
157         else if (opcode >= GETINFO) return "GETINFO";
158         else if (opcode >= SDPVTL) return "SDPVTL["+(opcode&1)+"]";
159         else if (opcode >= SCANCTRL) return "SCANCTRL";
160         else if (opcode >= FLIPRGOFF) return "FLIPRGOFF";
161         else if (opcode >= FLIPRGON) return "FLIPRGON";
162         else if (opcode >= FLIPPT) return "FLIPPT";
163         else if (opcode >= AA) return "AA";
164         else if (opcode >= SANGW) return "SANGW";
165         else if (opcode >= RDTG) return "RDTG";
166         else if (opcode >= RUTG) return "RUTG";
167         else if (opcode >= ROFF) return "ROFF";
168         else if (opcode >= JROF) return "JROF";
169         else if (opcode >= JROT) return "JROT";
170         else if (opcode >= S45ROUND) return "S45ROUND";
171         else if (opcode >= SROUND) return "SROUND";
172         else if (opcode >= DELTAC3) return "DELTAC3";
173         else if (opcode >= DELTAC2) return "DELTAC2";
174         else if (opcode >= DELTAC1) return "DELTAC1";
175         else if (opcode >= DELTAP3) return "DELTAP3";
176         else if (opcode >= DELTAP2) return "DELTAP2";
177         else if (opcode >= WCVTF) return "WCVTF";
178         else if (opcode >= NROUND) return "NROUND["+(opcode&3)+"]";
179         else if (opcode >= ROUND) return "ROUND["+(opcode&3)+"]";
180         else if (opcode >= CEILING) return "CEILING";
181         else if (opcode >= FLOOR) return "FLOOR";
182         else if (opcode >= NEG) return "NEG";
183         else if (opcode >= ABS) return "ABS";
184         else if (opcode >= MUL) return "MUL";
185         else if (opcode >= DIV) return "DIV";
186         else if (opcode >= SUB) return "SUB";
187         else if (opcode >= ADD) return "ADD";
188         else if (opcode >= SDS) return "SDS";
189         else if (opcode >= SDB) return "SDB";
190         else if (opcode >= DELTAP1) return "DELTAP1";
191         else if (opcode >= NOT) return "NOT";
192         else if (opcode >= OR) return "OR";
193         else if (opcode >= AND) return "AND";
194         else if (opcode >= EIF) return "EIF";
195         else if (opcode >= IF) return "IF";
196         else if (opcode >= EVEN) return "EVEN";
197         else if (opcode >= ODD) return "ODD";
198         else if (opcode >= NEQ) return "NEQ";
199         else if (opcode >= EQ) return "EQ";
200         else if (opcode >= GTEQ) return "GTEQ";
201         else if (opcode >= GT) return "GT";
202         else if (opcode >= LTEQ) return "LTEQ";
203         else if (opcode >= LT) return "LT";
204         else if (opcode >= DEBUG) return "DEBUG";
205         else if (opcode >= FLIPOFF) return "FLIPOFF";
206         else if (opcode >= FLIPON) return "FLIPON";
207         else if (opcode >= MPS) return "MPS";
208         else if (opcode >= MPPEM) return "MPPEM";
209         else if (opcode >= MD) return "MD["+(opcode&1)+"]";
210         else if (opcode >= SCFS) return "SCFS";
211         else if (opcode >= GC) return "GC["+(opcode&1)+"]";
212         else if (opcode >= RCVT) return "RCVT";
213         else if (opcode >= WCVTP) return "WCVTP";
214         else if (opcode >= RS) return "RS";
215         else if (opcode >= WS) return "WS";
216         else if (opcode >= NPUSHW) return "NPUSHW";
217         else if (opcode >= NPUSHB) return "NPUSHB";
218         else if (opcode >= MIAP) return "MIAP["+((opcode&1)==0?"nrd+nci":"rd+ci")+"]";
219         else if (opcode >= RTDG) return "RTDG";
220         else if (opcode >= ALIGNRP) return "ALIGNRP";
221         else if (opcode >= MSIRP) return "MSIRP["+(opcode&1)+"]";
222         else if (opcode >= IP) return "IP";
223         else if (opcode >= SHPIX) return "SHPIX";
224         else if (opcode >= SHZ) return "SHZ["+(opcode&1)+"]";
225         else if (opcode >= SHC) return "SHC["+(opcode&1)+"]";
226         else if (opcode >= SHP) return "SHP";
227         else if (opcode >= IUP) return "IUP["+((opcode&1)==0?"y":"x")+"]";
228         else if (opcode >= MDAP) return "MDAP["+((opcode&1)==0?"nrd":"rd")+"]";
229         else if (opcode >= ENDF) return "ENDF";
230         else if (opcode >= FDEF) return "FDEF";
231         else if (opcode >= CALL) return "CALL";
232         else if (opcode >= LOOPCALL) return "LOOPCALL";
233         else if (opcode >= UTP) return "UTP";
234         else if (opcode >= ALIGNPTS) return "ALIGNPTS";
235         else if (opcode >= MINDEX) return "MINDEX";
236         else if (opcode >= CINDEX) return "CINDEX";
237         else if (opcode >= DEPTH) return "DEPTH";
238         else if (opcode >= SWAP) return "SWAP";
239         else if (opcode >= CLEAR) return "CLEAR";
240         else if (opcode >= POP) return "POP";
241         else if (opcode >= DUP) return "DUP";
242         else if (opcode >= SSW) return "SSW";
243         else if (opcode >= SSWCI) return "SSWCI";
244         else if (opcode >= SCVTCI) return "SCVTCI";
245         else if (opcode >= JMPR) return "JMPR";
246         else if (opcode >= ELSE) return "ELSE";
247         else if (opcode >= SMD) return "SMD";
248         else if (opcode >= RTHG) return "RTHG";
249         else if (opcode >= RTG) return "RTG";
250         else if (opcode >= SLOOP) return "SLOOP";
251         else if (opcode >= SZPS) return "SZPS";
252         else if (opcode >= SZP2) return "SZP2";
253         else if (opcode >= SZP1) return "SZP1";
254         else if (opcode >= SZP0) return "SZP0";
255         else if (opcode >= SRP2) return "SRP2";
256         else if (opcode >= SRP1) return "SRP1";
257         else if (opcode >= SRP0) return "SRP0";
258         else if (opcode >= ISECT) return "ISECT";
259         else if (opcode >= SFVTPV) return "SFVTPV";
260         else if (opcode >= GFV) return "GFV";
261         else if (opcode >= GPV) return "GPV";
262         else if (opcode >= SFVFS) return "SFVFS";
263         else if (opcode >= SPVFS) return "SPVFS";
264         else if (opcode >= SFVTL) return "SFVTL["+((opcode&1)==0?"y-axis":"x-axis")+"]";
265         else if (opcode >= SPVTL) return "SPVTL["+((opcode&1)==0?"y-axis":"x-axis")+"]";
266         else if (opcode >= SFVTCA) return "SFVTCA["+((opcode&1)==0?"y-axis":"x-axis")+"]";
267         else if (opcode >= SPVTCA) return "SPVTCA["+((opcode&1)==0?"y-axis":"x-axis")+"]";
268         else if (opcode >= SVTCA) return "SVTCA["+((opcode&1)==0?"y-axis":"x-axis")+"]";
269         else return "????";
270     }
271 
getComment(final short opcode)272     public static String getComment(final short opcode) {
273         if (opcode >= MIRP) return "MIRP["+((opcode&16)==0?"nrp0,":"srp0,")+((opcode&8)==0?"nmd,":"md,")+((opcode&4)==0?"nrd,":"rd,")+(opcode&3)+"]\t\tMove Indirect Relative Point";
274         else if (opcode >= MDRP) return "MDRP["+((opcode&16)==0?"nrp0,":"srp0,")+((opcode&8)==0?"nmd,":"md,")+((opcode&4)==0?"nrd,":"rd,")+(opcode&3)+"]\t\tMove Direct Relative Point";
275         else if (opcode >= PUSHW) return "PUSHW["+((opcode&7)+1)+"]";
276         else if (opcode >= PUSHB) return "PUSHB["+((opcode&7)+1)+"]";
277         else if (opcode >= INSTCTRL) return "INSTCTRL\tINSTruction Execution ConTRol";
278         else if (opcode >= SCANTYPE) return "SCANTYPE\tSCANTYPE";
279         else if (opcode >= MIN) return "MIN\t\tMINimum of top two stack elements";
280         else if (opcode >= MAX) return "MAX\t\tMAXimum of top two stack elements";
281         else if (opcode >= ROLL) return "ROLL\t\tROLL the top three stack elements";
282         else if (opcode >= IDEF) return "IDEF\t\tInstruction DEFinition";
283         else if (opcode >= GETINFO) return "GETINFO\tGET INFOrmation";
284         else if (opcode >= SDPVTL) return "SDPVTL["+(opcode&1)+"]\tSet Dual Projection_Vector To Line";
285         else if (opcode >= SCANCTRL) return "SCANCTRL\tSCAN conversion ConTRoL";
286         else if (opcode >= FLIPRGOFF) return "FLIPRGOFF\tFLIP RanGe OFF";
287         else if (opcode >= FLIPRGON) return "FLIPRGON\tFLIP RanGe ON";
288         else if (opcode >= FLIPPT) return "FLIPPT\tFLIP PoinT";
289         else if (opcode >= AA) return "AA";
290         else if (opcode >= SANGW) return "SANGW\t\tSet Angle _Weight";
291         else if (opcode >= RDTG) return "RDTG\t\tRound Down To Grid";
292         else if (opcode >= RUTG) return "RUTG\t\tRound Up To Grid";
293         else if (opcode >= ROFF) return "ROFF\t\tRound OFF";
294         else if (opcode >= JROF) return "JROF\t\tJump Relative On False";
295         else if (opcode >= JROT) return "JROT\t\tJump Relative On True";
296         else if (opcode >= S45ROUND) return "S45ROUND\tSuper ROUND 45 degrees";
297         else if (opcode >= SROUND) return "SROUND\tSuper ROUND";
298         else if (opcode >= DELTAC3) return "DELTAC3\tDELTA exception C3";
299         else if (opcode >= DELTAC2) return "DELTAC2\tDELTA exception C2";
300         else if (opcode >= DELTAC1) return "DELTAC1\tDELTA exception C1";
301         else if (opcode >= DELTAP3) return "DELTAP3\tDELTA exception P3";
302         else if (opcode >= DELTAP2) return "DELTAP2\tDELTA exception P2";
303         else if (opcode >= WCVTF) return "WCVTF\t\tWrite Control Value Table in FUnits";
304         else if (opcode >= NROUND) return "NROUND["+(opcode&3)+"]";
305         else if (opcode >= ROUND) return "ROUND["+(opcode&3)+"]";
306         else if (opcode >= CEILING) return "CEILING\tCEILING";
307         else if (opcode >= FLOOR) return "FLOOR\t\tFLOOR";
308         else if (opcode >= NEG) return "NEG\t\tNEGate";
309         else if (opcode >= ABS) return "ABS\t\tABSolute value";
310         else if (opcode >= MUL) return "MUL\t\tMULtiply";
311         else if (opcode >= DIV) return "DIV\t\tDIVide";
312         else if (opcode >= SUB) return "SUB\t\tSUBtract";
313         else if (opcode >= ADD) return "ADD\t\tADD";
314         else if (opcode >= SDS) return "SDS\t\tSet Delta_Shift in the graphics state";
315         else if (opcode >= SDB) return "SDB\t\tSet Delta_Base in the graphics state";
316         else if (opcode >= DELTAP1) return "DELTAP1\tDELTA exception P1";
317         else if (opcode >= NOT) return "NOT\t\tlogical NOT";
318         else if (opcode >= OR) return "OR\t\t\tlogical OR";
319         else if (opcode >= AND) return "AND\t\tlogical AND";
320         else if (opcode >= EIF) return "EIF\t\tEnd IF";
321         else if (opcode >= IF) return "IF\t\t\tIF test";
322         else if (opcode >= EVEN) return "EVEN";
323         else if (opcode >= ODD) return "ODD";
324         else if (opcode >= NEQ) return "NEQ\t\tNot EQual";
325         else if (opcode >= EQ) return "EQ\t\t\tEQual";
326         else if (opcode >= GTEQ) return "GTEQ\t\tGreater Than or Equal";
327         else if (opcode >= GT) return "GT\t\t\tGreater Than";
328         else if (opcode >= LTEQ) return "LTEQ\t\tLess Than or Equal";
329         else if (opcode >= LT) return "LT\t\t\tLess Than";
330         else if (opcode >= DEBUG) return "DEBUG";
331         else if (opcode >= FLIPOFF) return "FLIPOFF\tSet the auto_flip Boolean to OFF";
332         else if (opcode >= FLIPON) return "FLIPON\tSet the auto_flip Boolean to ON";
333         else if (opcode >= MPS) return "MPS\t\tMeasure Point Size";
334         else if (opcode >= MPPEM) return "MPPEM\t\tMeasure Pixels Per EM";
335         else if (opcode >= MD) return "MD["+(opcode&1)+"]\t\t\tMeasure Distance";
336         else if (opcode >= SCFS) return "SCFS\t\tSets Coordinate From the Stack using projection_vector and freedom_vector";
337         else if (opcode >= GC) return "GC["+(opcode&1)+"]\t\t\tGet Coordinate projected onto the projection_vector";
338         else if (opcode >= RCVT) return "RCVT\t\tRead Control Value Table";
339         else if (opcode >= WCVTP) return "WCVTP\t\tWrite Control Value Table in Pixel units";
340         else if (opcode >= RS) return "RS\t\t\tRead Store";
341         else if (opcode >= WS) return "WS\t\t\tWrite Store";
342         else if (opcode >= NPUSHW) return "NPUSHW";
343         else if (opcode >= NPUSHB) return "NPUSHB";
344         else if (opcode >= MIAP) return "MIAP["+((opcode&1)==0?"nrd+nci":"rd+ci")+"]\t\tMove Indirect Absolute Point";
345         else if (opcode >= RTDG) return "RTDG\t\tRound To Double Grid";
346         else if (opcode >= ALIGNRP) return "ALIGNRP\tALIGN Relative Point";
347         else if (opcode >= MSIRP) return "MSIRP["+(opcode&1)+"]\t\tMove Stack Indirect Relative Point";
348         else if (opcode >= IP) return "IP\t\t\tInterpolate Point by the last relative stretch";
349         else if (opcode >= SHPIX) return "SHPIX\t\tSHift point by a PIXel amount";
350         else if (opcode >= SHZ) return "SHZ["+(opcode&1)+"]\t\tSHift Zone by the last pt";
351         else if (opcode >= SHC) return "SHC["+(opcode&1)+"]\t\tSHift Contour by the last point";
352         else if (opcode >= SHP) return "SHP\t\tSHift Point by the last point";
353         else if (opcode >= IUP) return "IUP["+((opcode&1)==0?"y":"x")+"]\t\tInterpolate Untouched Points through the outline";
354         else if (opcode >= MDAP) return "MDAP["+((opcode&1)==0?"nrd":"rd")+"]\t\tMove Direct Absolute Point";
355         else if (opcode >= ENDF) return "ENDF\t\tEND Function definition";
356         else if (opcode >= FDEF) return "FDEF\t\tFunction DEFinition ";
357         else if (opcode >= CALL) return "CALL\t\tCALL function";
358         else if (opcode >= LOOPCALL) return "LOOPCALL\tLOOP and CALL function";
359         else if (opcode >= UTP) return "UTP\t\tUnTouch Point";
360         else if (opcode >= ALIGNPTS) return "ALIGNPTS\tALIGN Points";
361         else if (opcode >= MINDEX) return "MINDEX\tMove the INDEXed element to the top of the stack";
362         else if (opcode >= CINDEX) return "CINDEX\tCopy the INDEXed element to the top of the stack";
363         else if (opcode >= DEPTH) return "DEPTH\t\tReturns the DEPTH of the stack";
364         else if (opcode >= SWAP) return "SWAP\t\tSWAP the top two elements on the stack";
365         else if (opcode >= CLEAR) return "CLEAR\t\tClear the entire stack";
366         else if (opcode >= POP) return "POP\t\tPOP top stack element";
367         else if (opcode >= DUP) return "DUP\t\tDuplicate top stack element";
368         else if (opcode >= SSW) return "SSW\t\tSet Single-width";
369         else if (opcode >= SSWCI) return "SSWCI\t\tSet Single_Width_Cut_In";
370         else if (opcode >= SCVTCI) return "SCVTCI\tSet Control Value Table Cut In";
371         else if (opcode >= JMPR) return "JMPR\t\tJuMP";
372         else if (opcode >= ELSE) return "ELSE";
373         else if (opcode >= SMD) return "SMD\t\tSet Minimum_ Distance";
374         else if (opcode >= RTHG) return "RTHG\t\tRound To Half Grid";
375         else if (opcode >= RTG) return "RTG\t\tRound To Grid";
376         else if (opcode >= SLOOP) return "SLOOP\t\tSet LOOP variable";
377         else if (opcode >= SZPS) return "SZPS\t\tSet Zone PointerS";
378         else if (opcode >= SZP2) return "SZP2\t\tSet Zone Pointer 2";
379         else if (opcode >= SZP1) return "SZP1\t\tSet Zone Pointer 1";
380         else if (opcode >= SZP0) return "SZP0\t\tSet Zone Pointer 0";
381         else if (opcode >= SRP2) return "SRP2\t\tSet Reference Point 2";
382         else if (opcode >= SRP1) return "SRP1\t\tSet Reference Point 1";
383         else if (opcode >= SRP0) return "SRP0\t\tSet Reference Point 0";
384         else if (opcode >= ISECT) return "ISECT\t\tmoves point p to the InterSECTion of two lines";
385         else if (opcode >= SFVTPV) return "SFVTPV\tSet Freedom_Vector To Projection Vector";
386         else if (opcode >= GFV) return "GFV\t\tGet Freedom_Vector";
387         else if (opcode >= GPV) return "GPV\t\tGet Projection_Vector";
388         else if (opcode >= SFVFS) return "SFVFS\t\tSet Freedom_Vector From Stack";
389         else if (opcode >= SPVFS) return "SPVFS\t\tSet Projection_Vector From Stack";
390         else if (opcode >= SFVTL) return "SFVTL["+((opcode&1)==0?"y-axis":"x-axis")+"]\t\tSet Freedom_Vector To Line";
391         else if (opcode >= SPVTL) return "SPVTL["+((opcode&1)==0?"y-axis":"x-axis")+"]\t\tSet Projection_Vector To Line";
392         else if (opcode >= SFVTCA) return "SFVTCA["+((opcode&1)==0?"y-axis":"x-axis")+"]\tSet Freedom_Vector to Coordinate Axis";
393         else if (opcode >= SPVTCA) return "SPVTCA["+((opcode&1)==0?"y-axis":"x-axis")+"]\tSet Projection_Vector To Coordinate Axis";
394         else if (opcode >= SVTCA) return "SVTCA["+((opcode&1)==0?"y-axis":"x-axis")+"]\t\tSet freedom and projection Vectors To Coordinate Axis";
395         else return "????";
396     }
397 }
398