123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398 |
- /* ====================================================================
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- ==================================================================== */
-
- package org.apache.poi.hwmf.record;
-
- /**
- * Each ternary raster operation code represents a Boolean operation in which the values of the pixels in
- * the source, the selected brush, and the destination are combined. Following are the three operands
- * used in these operations.
- *
- * <table>
- * <tr><th>Operand</th><th>Meaning</th></tr>
- * <tr><td>D</td><td>Destination bitmap</td></tr>
- * <tr><td>P</td><td>Selected brush (also called pattern)</td></tr>
- * <tr><td>S</td><td>Source bitmap</td></tr>
- * </table>
- *
- * Following are the Boolean operators used in these operations.
- * <table>
- * <tr><th>Operand</th><th>Meaning</th></tr>
- * <tr><td>a</td><td>Bitwise AND</td></tr>
- * <tr><td>n</td><td>Bitwise NOT (inverse)</td></tr>
- * <tr><td>o</td><td>Bitwise OR</td></tr>
- * <tr><td>x</td><td>Bitwise exclusive OR (XOR)</td></tr>
- * </table>
- *
- * All Boolean operations are presented in reverse Polish notation. For example, the following operation
- * replaces the values of the pixels in the destination bitmap with a combination of the pixel values of the
- * source and brush: PSo.
- *
- * The following operation combines the values of the pixels in the source and brush with the pixel values
- * of the destination bitmap: DPSoo (there are alternative spellings of some functions, so although a
- * particular spelling MAY NOT be listed in the enumeration, an equivalent form SHOULD be).
- *
- * Each raster operation code is a 32-bit integer whose high-order word is a Boolean operation index and
- * whose low-order word is the operation code. The 16-bit operation index is a zero-extended, 8-bit
- * value that represents the result of the Boolean operation on predefined brush, source, and destination
- * values. For example, the operation indexes for the PSo and DPSoo operations are shown in the
- * following list.
- *
- * <table>
- * <tr><th>P</th><th>S</th><th>D</th><th>DPo</th><th>DPan</th></tr>
- * <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr>
- * <tr><td>0</td><td>0</td><td>1</td><td>0</td><td>1</td></tr>
- * <tr><td>0</td><td>1</td><td>0</td><td>1</td><td>1</td></tr>
- * <tr><td>0</td><td>1</td><td>1</td><td>1</td><td>1</td></tr>
- * <tr><td>1</td><td>0</td><td>0</td><td>1</td><td>1</td></tr>
- * <tr><td>1</td><td>0</td><td>1</td><td>1</td><td>1</td></tr>
- * <tr><td>1</td><td>1</td><td>0</td><td>1</td><td>1</td></tr>
- * <tr><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td></tr>
- * </table>
- *
- * The operation indexes are determined by reading the binary values in a column of the table from the
- * bottom up. For example, in the PSo column, the binary value is 11111100, which is equivalent to 00FC
- * (hexadecimal is implicit for these values), which is the operation index for PSo.
- *
- * Using this method, DPSoo can be seen to have the operation index 00FE. Operation indexes define the
- * locations of corresponding raster operation codes in the preceding enumeration. The PSo operation is
- * in line 252 (0x00FC) of the enumeration; DPSoo is in line 254 (0x00FE).
- *
- * The most commonly used raster operations have been given explicit enumeration names, which
- * SHOULD be used; examples are PATCOPY and WHITENESS.
- *
- * When the source and destination bitmaps are monochrome, a bit value of 0 represents a black pixel
- * and a bit value of 1 represents a white pixel. When the source and the destination bitmaps are color,
- * those colors are represented with red green blue (RGB) values.
- */
- public enum HwmfTernaryRasterOp {
- BLACKNESS(0x0000,0x0042,"0"),
- DPSOON(0x0001,0x0289,"DPSoon"),
- DPSONA(0x0002,0x0C89,"DPSona"),
- PSON(0x0003,0x00AA,"PSon"),
- SDPONA(0x0004,0x0C88,"SDPona"),
- DPON(0x0005,0x00A9,"DPon"),
- PDSXNON(0x0006,0x0865,"PDSxnon"),
- PDSAON(0x0007,0x02C5,"PDSaon"),
- SDPNAA(0x0008,0x0F08,"SDPnaa"),
- PDSXON(0x0009,0x0245,"PDSxon"),
- DPNA(0x000A,0x0329,"DPna"),
- PSDNAON(0x000B,0x0B2A,"PSDnaon"),
- SPNA(0x000C,0x0324,"SPna"),
- PDSNAON(0x000D,0x0B25,"PDSnaon"),
- PDSONON(0x000E,0x08A5,"PDSonon"),
- PN(0x000F,0x0001,"Pn"),
- PDSONA(0x0010,0x0C85,"PDSona"),
- NOTSRCERASE(0x0011,0x00A6,"DSon"),
- SDPXNON(0x0012,0x0868,"SDPxnon"),
- SDPAON(0x0013,0x02C8,"SDPaon"),
- DPSXNON(0x0014,0x0869,"DPSxnon"),
- DPSAON(0x0015,0x02C9,"DPSaon"),
- PSDPSANAXX(0x0016,0x5CCA,"PSDPSanaxx"),
- SSPXDSXAXN(0x0017,0x1D54,"SSPxDSxaxn"),
- SPXPDXA(0x0018,0x0D59,"SPxPDxa"),
- SDPSANAXN(0x0019,0x1CC8,"SDPSanaxn"),
- PDSPAOX(0x001A,0x06C5,"PDSPaox"),
- SDPSXAXN(0x001B,0x0768,"SDPSxaxn"),
- PSDPAOX(0x001C,0x06CA,"PSDPaox"),
- DSPDXAXN(0x001D,0x0766,"DSPDxaxn"),
- PDSOX(0x001E,0x01A5,"PDSox"),
- PDSOAN(0x001F,0x0385,"PDSoan"),
- DPSNAA(0x0020,0x0F09,"DPSnaa"),
- SDPXON(0x0021,0x0248,"SDPxon"),
- DSNA(0x0022,0x0326,"DSna"),
- SPDNAON(0x0023,0x0B24,"SPDnaon"),
- SPXDSXA(0x0024,0x0D55,"SPxDSxa"),
- PDSPANAXN(0x0025,0x1CC5,"PDSPanaxn"),
- SDPSAOX(0x0026,0x06C8,"SDPSaox"),
- SDPSXNOX(0x0027,0x1868,"SDPSxnox"),
- DPSXA(0x0028,0x0369,"DPSxa"),
- PSDPSAOXXN(0x0029,0x16CA,"PSDPSaoxxn"),
- DPSANA(0x002A,0x0CC9,"DPSana"),
- SSPXPDXAXN(0x002B,0x1D58,"SSPxPDxaxn"),
- SPDSOAX(0x002C,0x0784,"SPDSoax"),
- PSDNOX(0x002D,0x060A,"PSDnox"),
- PSDPXOX(0x002E,0x064A,"PSDPxox"),
- PSDNOAN(0x002F,0x0E2A,"PSDnoan"),
- PSNA(0x0030,0x032A,"PSna"),
- SDPNAON(0x0031,0x0B28,"SDPnaon"),
- SDPSOOX(0x0032,0x0688,"SDPSoox"),
- NOTSRCCOPY(0x0033,0x0008,"Sn"),
- SPDSAOX(0x0034,0x06C4,"SPDSaox"),
- SPDSXNOX(0x0035,0x1864,"SPDSxnox"),
- SDPOX(0x0036,0x01A8,"SDPox"),
- SDPOAN(0x0037,0x0388,"SDPoan"),
- PSDPOAX(0x0038,0x078A,"PSDPoax"),
- SPDNOX(0x0390,0x604,"SPDnox"),
- SPDSXOX(0x003A,0x0644,"SPDSxox"),
- SPDNOAN(0x003B,0x0E24,"SPDnoan"),
- PSX(0x003C,0x004A,"PSx"),
- SPDSONOX(0x003D,0x18A4,"SPDSonox"),
- SPDSNAOX(0x003E,0x1B24,"SPDSnaox"),
- PSAN(0x003F,0x00EA,"PSan"),
- PSDNAA(0x0040,0x0F0A,"PSDnaa"),
- DPSXON(0x0041,0x0249,"DPSxon"),
- SDXPDXA(0x0042,0x0D5D,"SDxPDxa"),
- SPDSANAXN(0x0043,0x1CC4,"SPDSanaxn"),
- SRCERASE(0x0044,0x0328,"SDna"),
- DPSNAON(0x0045,0x0B29,"DPSnaon"),
- DSPDAOX(0x0046,0x06C6,"DSPDaox"),
- PSDPXAXN(0x0047,0x076A,"PSDPxaxn"),
- SDPXA(0x0048,0x0368,"SDPxa"),
- PDSPDAOXXN(0x0049,0x16C5,"PDSPDaoxxn"),
- DPSDOAX(0x004A,0x0789,"DPSDoax"),
- PDSNOX(0x004B,0x0605,"PDSnox"),
- SDPANA(0x004C,0x0CC8,"SDPana"),
- SSPXDSXOXN(0x004D,0x1954,"SSPxDSxoxn"),
- PDSPXOX(0x004E,0x0645,"PDSPxox"),
- PDSNOAN(0x004F,0x0E25,"PDSnoan"),
- PDNA(0x0050,0x0325,"PDna"),
- DSPNAON(0x0051,0x0B26,"DSPnaon"),
- DPSDAOX(0x0052,0x06C9,"DPSDaox"),
- SPDSXAXN(0x0053,0x0764,"SPDSxaxn"),
- DPSONON(0x0054,0x08A9,"DPSonon"),
- DSTINVERT(0x0055,0x0009,"Dn"),
- DPSOX(0x0056,0x01A9,"DPSox"),
- DPSOAN(0x0005,0x70389,"DPSoan"),
- PDSPOAX(0x0058,0x0785,"PDSPoax"),
- DPSNOX(0x0059,0x0609,"DPSnox"),
- PATINVERT(0x005A,0x0049,"DPx"),
- DPSDONOX(0x005B,0x18A9,"DPSDonox"),
- DPSDXOX(0x005C,0x0649,"DPSDxox"),
- DPSNOAN(0x005D,0x0E29,"DPSnoan"),
- DPSDNAOX(0x005E,0x1B29,"DPSDnaox"),
- DPAN(0x005F,0x00E9,"DPan"),
- PDSXA(0x0060,0x0365,"PDSxa"),
- DSPDSAOXXN(0x0061,0x16C6,"DSPDSaoxxn"),
- DSPDOAX(0x0062,0x0786,"DSPDoax"),
- SDPNOX(0x0063,0x0608,"SDPnox"),
- SDPSOAX(0x0064,0x0788,"SDPSoax"),
- DSPNOX(0x0065,0x0606,"DSPnox"),
- SRCINVERT(0x0066,0x0046,"DSx"),
- SDPSONOX(0x0067,0x18A8,"SDPSonox"),
- DSPDSONOXXN(0x0068,0x58A6,"DSPDSonoxxn"),
- PDSXXN(0x0069,0x0145,"PDSxxn"),
- DPSAX(0x006A,0x01E9,"DPSax"),
- PSDPSOAXXN(0x006B,0x178A,"PSDPSoaxxn"),
- SDPAX(0x006C,0x01E8,"SDPax"),
- PDSPDOAXXN(0x006D,0x1785,"PDSPDoaxxn"),
- SDPSNOAX(0x006E,0x1E28,"SDPSnoax"),
- // PDXNAN(0x006F,0x0C65,"PDXnan"), // invalid combo
- PDSANA(0x0070,0x0CC5,"PDSana"),
- SSDXPDXAXN(0x0071,0x1D5C,"SSDxPDxaxn"),
- SDPSXOX(0x0072,0x0648,"SDPSxox"),
- SDPNOAN(0x0073,0x0E28,"SDPnoan"),
- DSPDXOX(0x0074,0x0646,"DSPDxox"),
- DSPNOAN(0x0075,0x0E26,"DSPnoan"),
- SDPSNAOX(0x0076,0x1B28,"SDPSnaox"),
- DSAN(0x0077,0x00E6,"DSan"),
- PDSAX(0x0078,0x01E5,"PDSax"),
- DSPDSOAXXN(0x0079,0x1786,"DSPDSoaxxn"),
- DPSDNOAX(0x007A,0x1E29,"DPSDnoax"),
- SDPXNAN(0x007B,0x0C68,"SDPxnan"),
- SPDSNOAX(0x007C,0x1E24,"SPDSnoax"),
- DPSXNAN(0x007D,0x0C69,"DPSxnan"),
- SPXDSXO(0x007E,0x0955,"SPxDSxo"),
- DPSAAN(0x007F,0x03C9,"DPSaan"),
- DPSAA(0x0080,0x03E9,"DPSaa"),
- SPXDSXON(0x0081,0x0975,"SPxDSxon"),
- DPSXNA(0x0082,0x0C49,"DPSxna"),
- SPDSNOAXN(0x0083,0x1E04,"SPDSnoaxn"),
- SDPXNA(0x0084,0x0C48,"SDPxna"),
- PDSPNOAXN(0x0085,0x1E05,"PDSPnoaxn"),
- DSPDSOAXX(0x0086,0x17A6,"DSPDSoaxx"),
- PDSAXN(0x0087,0x01C5,"PDSaxn"),
- SRCAND(0x0088,0x00C6,"DSa"),
- SDPSNAOXN(0x0089,0x1B08,"SDPSnaoxn"),
- DSPNOA(0x008A,0x0E06,"DSPnoa"),
- DSPDXOXN(0x008B,0x0666,"DSPDxoxn"),
- SDPNOA(0x008C,0x0E08,"SDPnoa"),
- SDPSXOXN(0x008D,0x0668,"SDPSxoxn"),
- SSDXPDXAX(0x008E,0x1D7C,"SSDxPDxax"),
- PDSANAN(0x008F,0x0CE5,"PDSanan"),
- PDSXNA(0x0090,0x0C45,"PDSxna"),
- SDPSNOAXN(0x0091,0x1E08,"SDPSnoaxn"),
- DPSDPOAXX(0x0092,0x17A9,"DPSDPoaxx"),
- SPDAXN(0x0093,0x01C4,"SPDaxn"),
- PSDPSOAXX(0x0094,0x17AA,"PSDPSoaxx"),
- DPSAXN(0x0095,0x01C9,"DPSaxn"),
- DPSXX(0x0096,0x0169,"DPSxx"),
- PSDPSONOXX(0x0097,0x588A,"PSDPSonoxx"),
- SDPSONOXN(0x0098,0x1888,"SDPSonoxn"),
- DSXN(0x0099,0x0066,"DSxn"),
- DPSNAX(0x009A,0x0709,"DPSnax"),
- SDPSOAXN(0x009B,0x07A8,"SDPSoaxn"),
- SPDNAX(0x009C,0x0704,"SPDnax"),
- DSPDOAXN(0x009D,0x07A6,"DSPDoaxn"),
- DSPDSAOXX(0x009E,0x16E6,"DSPDSaoxx"),
- PDSXAN(0x009F,0x0345,"PDSxan"),
- DPA(0x00A0,0x00C9,"DPa"),
- PDSPNAOXN(0x00A1,0x1B05,"PDSPnaoxn"),
- DPSNOA(0x00A2,0x0E09,"DPSnoa"),
- DPSDXOXN(0x00A3,0x0669,"DPSDxoxn"),
- PDSPONOXN(0x00A4,0x1885,"PDSPonoxn"),
- PDXN(0x00A5,0x0065,"PDxn"),
- DSPNAX(0x00A6,0x0706,"DSPnax"),
- PDSPOAXN(0x00A7,0x07A5,"PDSPoaxn"),
- DPSOA(0x00A8,0x03A9,"DPSoa"),
- DPSOXN(0x00A9,0x0189,"DPSoxn"),
- D(0x00AA,0x0029,"D"),
- DPSONO(0x00AB,0x0889,"DPSono"),
- SPDSXAX(0x00AC,0x0744,"SPDSxax"),
- DPSDAOXN(0x00AD,0x06E9,"DPSDaoxn"),
- DSPNAO(0x00AE,0x0B06,"DSPnao"),
- DPNO(0x00AF,0x0229,"DPno"),
- PDSNOA(0x00B0,0x0E05,"PDSnoa"),
- PDSPXOXN(0x00B1,0x0665,"PDSPxoxn"),
- SSPXDSXOX(0x00B2,0x1974,"SSPxDSxox"),
- SDPANAN(0x00B3,0x0CE8,"SDPanan"),
- PSDNAX(0x00B4,0x070A,"PSDnax"),
- DPSDOAXN(0x00B5,0x07A9,"DPSDoaxn"),
- DPSDPAOXX(0x00B6,0x16E9,"DPSDPaoxx"),
- SDPXAN(0x00B7,0x0348,"SDPxan"),
- PSDPXAX(0x00B8,0x074A,"PSDPxax"),
- DSPDAOXN(0x00B9,0x06E6,"DSPDaoxn"),
- DPSNAO(0x00BA,0x0B09,"DPSnao"),
- MERGEPAINT(0x00BB,0x0226,"DSno"),
- SPDSANAX(0x00BC,0x1CE4,"SPDSanax"),
- SDXPDXAN(0x00BD,0x0D7D,"SDxPDxan"),
- DPSXO(0x00BE,0x0269,"DPSxo"),
- DPSANO(0x00BF,0x08C9,"DPSano"),
- MERGECOPY(0x00C0,0x00CA,"PSa"),
- SPDSNAOXN(0x00C1,0x1B04,"SPDSnaoxn"),
- SPDSONOXN(0x00C2,0x1884,"SPDSonoxn"),
- PSXN(0x00C3,0x006A,"PSxn"),
- SPDNOA(0x00C4,0x0E04,"SPDnoa"),
- SPDSXOXN(0x00C5,0x0664,"SPDSxoxn"),
- SDPNAX(0x00C6,0x0708,"SDPnax"),
- PSDPOAXN(0x00C7,0x07AA,"PSDPoaxn"),
- SDPOA(0x00C8,0x03A8,"SDPoa"),
- SPDOXN(0x00C9,0x0184,"SPDoxn"),
- DPSDXAX(0x00CA,0x0749,"DPSDxax"),
- SPDSAOXN(0x00CB,0x06E4,"SPDSaoxn"),
- SRCCOPY(0x00CC,0x0020,"S"),
- SDPONO(0x00CD,0x0888,"SDPono"),
- SDPNAO(0x00CE,0x0B08,"SDPnao"),
- SPNO(0x00CF,0x0224,"SPno"),
- PSDNOA(0x00D0,0x0E0A,"PSDnoa"),
- PSDPXOXN(0x00D1,0x066A,"PSDPxoxn"),
- PDSNAX(0x00D2,0x0705,"PDSnax"),
- SPDSOAXN(0x00D3,0x07A4,"SPDSoaxn"),
- SSPXPDXAX(0x00D4,0x1D78,"SSPxPDxax"),
- DPSANAN(0x00D5,0x0CE9,"DPSanan"),
- PSDPSAOXX(0x00D6,0x16EA,"PSDPSaoxx"),
- DPSXAN(0x00D7,0x0349,"DPSxan"),
- PDSPXAX(0x00D8,0x0745,"PDSPxax"),
- SDPSAOXN(0x00D9,0x06E8,"SDPSaoxn"),
- DPSDANAX(0x00DA,0x1CE9,"DPSDanax"),
- SPXDSXAN(0x00DB,0x0D75,"SPxDSxan"),
- SPDNAO(0x00DC,0x0B04,"SPDnao"),
- SDNO(0x00DD,0x0228,"SDno"),
- SDPXO(0x00DE,0x0268,"SDPxo"),
- SDPANO(0x00DF,0x08C8,"SDPano"),
- PDSOA(0x00E0,0x03A5,"PDSoa"),
- PDSOXN(0x00E1,0x0185,"PDSoxn"),
- DSPDXAX(0x00E2,0x0746,"DSPDxax"),
- PSDPAOXN(0x00E3,0x06EA,"PSDPaoxn"),
- SDPSXAX(0x00E4,0x0748,"SDPSxax"),
- PDSPAOXN(0x00E5,0x06E5,"PDSPaoxn"),
- SDPSANAX(0x00E6,0x1CE8,"SDPSanax"),
- SPXPDXAN(0x00E7,0x0D79,"SPxPDxan"),
- SSPXDSXAX(0x00E8,0x1D74,"SSPxDSxax"),
- DSPDSANAXXN(0x00E9,0x5CE6,"DSPDSanaxxn"),
- DPSAO(0x00EA,0x02E9,"DPSao"),
- DPSXNO(0x00EB,0x0849,"DPSxno"),
- SDPAO(0x00EC,0x02E8,"SDPao"),
- SDPXNO(0x00ED,0x0848,"SDPxno"),
- SRCPAINT(0x00EE,0x0086,"DSo"),
- SDPNOO(0x00EF,0x0A08,"SDPnoo"),
- PATCOPY(0x00F0,0x0021,"P"),
- PDSONO(0x00F1,0x0885,"PDSono"),
- PDSNAO(0x00F2,0x0B05,"PDSnao"),
- PSNO(0x00F3,0x022A,"PSno"),
- PSDNAO(0x00F4,0x0B0A,"PSDnao"),
- PDNO(0x00F5,0x0225,"PDno"),
- PDSXO(0x00F6,0x0265,"PDSxo"),
- PDSANO(0x00F7,0x08C5,"PDSano"),
- PDSAO(0x00F8,0x02E5,"PDSao"),
- PDSXNO(0x00F9,0x0845,"PDSxno"),
- DPO(0x00FA,0x0089,"DPo"),
- PATPAINT(0x00FB,0x0A09,"DPSnoo"),
- PSO(0x00FC,0x008A,"PSo"),
- PSDNOO(0x00FD,0x0A0A,"PSDnoo"),
- DPSOO(0x00FE,0x02A9,"DPSoo"),
- WHITENESS(0x00FF,0x0062,"1");
-
- int opIndex;
- int opCode;
- String opCmd;
-
- HwmfTernaryRasterOp(int opIndex, int opCode, String opCmd) {
- this.opIndex=opIndex;
- this.opCode=opCode;
- this.opCmd=opCmd;
- }
-
- public static HwmfTernaryRasterOp valueOf(int opIndex) {
- for (HwmfTernaryRasterOp bb : HwmfTernaryRasterOp.values()) {
- if (bb.opIndex == opIndex) {
- return bb;
- }
- }
- return null;
- }
-
- public String describeCmd() {
- String stack[] = new String[10];
- int stackPnt = 0;
-
- for (char c : opCmd.toCharArray()) {
- switch (c) {
- case 'S':
- case 'D':
- case 'P':
- stack[stackPnt++] = ""+c;
- break;
- case 'n':
- stack[stackPnt-1] = "not("+stack[stackPnt-1]+")";
- break;
- case 'a':
- stack[stackPnt-2] = "("+stack[stackPnt-1]+" and "+stack[stackPnt-2]+")";
- stackPnt--;
- break;
- case 'o':
- stack[stackPnt-2] = "("+stack[stackPnt-1]+" or "+stack[stackPnt-2]+")";
- stackPnt--;
- break;
- case 'x':
- stack[stackPnt-2] = "("+stack[stackPnt-1]+" xor "+stack[stackPnt-2]+")";
- stackPnt--;
- break;
- case '1':
- stack[stackPnt++] = "all white";
- break;
- case '0':
- stack[stackPnt++] = "all black";
- break;
- default:
- throw new RuntimeException("unknown cmd '"+c+"'.");
- }
- }
-
- return stack[--stackPnt];
- }
- }
|