private void interpretCommand()

in modules/print/src/main/java/windows/org/apache/harmony/x/print/PSInterpreter.java [378:537]


    private void interpretCommand(int command) throws IOException {
        if (queue.size() < commandsParams[command] + 1) {
            System.out.println("Not enough parameters for PS command "
                    + commands[command]);
            return;
        }
        queue.remove(queue.size() - 1);
        switch (command) {
            case COMMAND_MOVETO:
                try {
                    double x, y;
                    y = Double.parseDouble(extractQueueLast());
                    x = Double.parseDouble(extractQueueLast());
                    if (!pathOpened) {
                        beginPath(serviceID);
                        pathOpened = true;
                    }
                    moveTo(serviceID, x, y);
                } catch (NumberFormatException nfe) {
                    System.out.println("NumberFormatException occured: " + nfe);
                    nfe.printStackTrace(System.out);
                }
                break;
            case COMMAND_LINETO:
                try {
                    double x, y;
                    y = Double.parseDouble(extractQueueLast());
                    x = Double.parseDouble(extractQueueLast());
                    if (!pathOpened) {
                        beginPath(serviceID);
                        pathOpened = true;
                    }
                    lineTo(serviceID, x, y);
                } catch (NumberFormatException nfe) {
                    System.out.println("NumberFormatException occured: " + nfe);
                    nfe.printStackTrace(System.out);
                }
                break;
            case COMMAND_SETRGBCOLOR:
                try {
                    double r, g, b;
                    b = Double.parseDouble(extractQueueLast());
                    g = Double.parseDouble(extractQueueLast());
                    r = Double.parseDouble(extractQueueLast());
                    setRGBColor(serviceID, r, g, b);
                } catch (NumberFormatException nfe) {
                    System.out.println("NumberFormatException occured: " + nfe);
                    nfe.printStackTrace(System.out);
                }
                break;
            case COMMAND_NEWPATH:
                beginPath(serviceID);
                pathOpened = true;
                break;
            case COMMAND_CLOSEPATH:
                if (pathOpened) {
                    closePath(serviceID);
                    pathOpened = false;
                    closedPathExists = true;
                }
                break;
            case COMMAND_STROKE:
                if (pathOpened) {
                    closePath(serviceID);
                    strokePath(serviceID);
                    pathOpened = false;
                } else if (closedPathExists) {
                    strokePath(serviceID);
                    closedPathExists = false;
                }
                break;
            case COMMAND_FILL:
                if (pathOpened) {
                    closePath(serviceID);
                    fillPath(serviceID);
                    pathOpened = false;
                } else if (closedPathExists) {
                    fillPath(serviceID);
                    closedPathExists = false;
                }
                break;
            case COMMAND_COLORIMAGE:
                if (extractQueueLast().equals("3") &&
                    extractQueueLast().equals("false")) {
                    try {
                        extractQueueLast(); // removing reading procedure
                        String imageParams = extractQueueLast();
                        int depth = Integer.parseInt(extractQueueLast());
                        int height = Integer.parseInt(extractQueueLast());
                        int width = Integer.parseInt(extractQueueLast());
                        if (depth == 8) {
                            int[] imageData = new int[width * height];
                            for (int j = 0; j < height; j++) {
                                for (int i = 0; i < width; i++) {
                                    int color = hex2decimal(getNextHex() +
                                                            getNextHex() +
                                                            getNextHex());
                                    imageData[j * width + i] = color;
                                }
                            }
                            if (scaleWidth < 0 || scaleHeight < 0) {
                                drawImage(serviceID, translateX, translateY,
                                       width * scaleX, height * scaleY,
                                       imageData, width, height);
                            } else {
                                drawImage(serviceID, translateX, translateY,
                                        scaleWidth, scaleHeight,
                                        imageData, width, height);
                            }
                        }
                    } catch (NumberFormatException nfe) {
                        System.out.println("NumberFormatException occured: " +
                                nfe);
                        nfe.printStackTrace(System.out);
                    }
                }
                break;
            case COMMAND_TRANSLATE:
                try {
                    translateY = Integer.parseInt(extractQueueLast());
                    translateX = Integer.parseInt(extractQueueLast());
                } catch (NumberFormatException nfe) {
                    System.out.println("NumberFormatException occured: " + nfe);
                    nfe.printStackTrace(System.out);
                }
                break;
            case COMMAND_SCALE:
                try {
                    scaleY = Double.parseDouble(extractQueueLast());
                    scaleX = Double.parseDouble(extractQueueLast());
                } catch (NumberFormatException nfe) {
                    System.out.println("NumberFormatException occured: " + nfe);
                    nfe.printStackTrace(System.out);
                }
                break;
            case COMMAND_ARC:
                try {
                    double x, y, r, a, b;
                    b = Double.parseDouble(extractQueueLast());
                    a = Double.parseDouble(extractQueueLast());
                    r = Double.parseDouble(extractQueueLast());
                    y = Double.parseDouble(extractQueueLast());
                    x = Double.parseDouble(extractQueueLast());
                    if (!pathOpened) {
                        beginPath(serviceID);
                        pathOpened = true;
                    }
                    drawArc(serviceID, x, y, r, a, b);
                } catch (NumberFormatException nfe) {
                    System.out.println("NumberFormatException occured: " + nfe);
                    nfe.printStackTrace(System.out);
                }
                break;
            case COMMAND_SHOW:
                String text = extractQueueLast();
                drawText(serviceID, text);
                break;
            default:
        }
    }