private void processDeskSave(RdpPacket_Localised data,
            DeskSaveOrder desksave, int present, boolean delta)
            throws RdesktopException {
        int width = 0, height = 0;

        if ((present & 0x01) != 0) {
            desksave.setOffset(data.getLittleEndian32());
        }

        if ((present & 0x02) != 0) {
            desksave.setLeft(setCoordinate(data, desksave.getLeft(), delta));
        }

        if ((present & 0x04) != 0) {
            desksave.setTop(setCoordinate(data, desksave.getTop(), delta));
        }

        if ((present & 0x08) != 0) {
            desksave.setRight(setCoordinate(data, desksave.getRight(), delta));
        }

        if ((present & 0x10) != 0) {
            desksave
                    .setBottom(setCoordinate(data, desksave.getBottom(), delta));
        }

        if ((present & 0x20) != 0) {
            desksave.setAction(data.get8());
        }

        width = desksave.getRight() - desksave.getLeft() + 1;
        height = desksave.getBottom() - desksave.getTop() + 1;

        if (desksave.getAction() == 0) {
            int[] pixel = surface.getImage(desksave.getLeft(), desksave
                    .getTop(), width, height);
            cache.putDesktop((int) desksave.getOffset(), width, height, pixel);
        } else {
            int[] pixel = cache.getDesktopInt((int) desksave.getOffset(),
                    width, height);
            surface.putImage(desksave.getLeft(), desksave.getTop(), width,
                    height, pixel);
        }
    }