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);
		}
	}