(FILECREATED "30-Sep-85 11:41:40" {ERIS}<LISPCORE>LIBRARY>PIXELBLT.;2 5205   

      changes to:  (FNS PIXELBLT)

      previous date: "14-Jun-85 18:58:32" {ERIS}<LISPCORE>LIBRARY>PIXELBLT.;1)


(* Copyright (c) 1985 by Xerox Corporation. All rights reserved.)

(PRETTYCOMPRINT PIXELBLTCOMS)

(RPAQQ PIXELBLTCOMS ((FNS BLUE+YELLOW=GREEN PIXELBLT PIXELBLT.TABLEBUILDER SPECKLE TESTFN)
		     (VARS BLUECOLOR GREENCOLOR YELLOWCOLOR)))
(DEFINEQ

(BLUE+YELLOW=GREEN
  [LAMBDA (SOURCE DEST XLO YLO)                              (* hdj "14-Jun-85 17:38")
    (LET ((BLUECOLOR 1)
       (YELLOWCOLOR 4)
       (GREENCOLOR 2))
      (if (OR (AND (EQ SOURCE BLUECOLOR)
		   (EQ DEST YELLOWCOLOR))
	      (AND (EQ SOURCE YELLOWCOLOR)
		   (EQ DEST BLUECOLOR)))
	  then GREENCOLOR
	else SOURCE])

(PIXELBLT
  [LAMBDA (COLORTABLE SOURCEBITMAP SOURCELEFT SOURCEBOTTOM DESTBITMAP DESTINATIONLEFT 
		      DESTINATIONBOTTOM WIDTH HEIGHT)        (* hdj "30-Sep-85 11:26")
    (PROG ((REALWIDTH (OR WIDTH (BITMAPWIDTH SOURCEBITMAP)))
	   (REALHEIGHT (OR HEIGHT (BITMAPHEIGHT SOURCEBITMAP)))
	   (REALDESTINATIONLEFT (OR DESTINATIONLEFT 0))
	   (REALDESTINATIONBOTTOM (OR DESTINATIONBOTTOM 0))
	   (REALSOURCELEFT (OR SOURCELEFT 0))
	   (REALSOURCEBOTTOM (OR SOURCEBOTTOM 0))
	   VALID-SOURCE-REGION VALID-DEST-REGION)
          (\DTEST REALWIDTH (QUOTE SMALLP))
          (\DTEST REALHEIGHT (QUOTE SMALLP))
          (\DTEST REALDESTINATIONLEFT (QUOTE SMALLP))
          (\DTEST REALDESTINATIONBOTTOM (QUOTE SMALLP))
          (\DTEST COLORTABLE (QUOTE ARRAYP))
          (\DTEST SOURCEBITMAP (QUOTE BITMAP))
          (\DTEST DESTBITMAP (QUOTE BITMAP))
          (OR (AND (IGEQ REALSOURCELEFT 0)
		   (IGEQ REALSOURCEBOTTOM 0)
		   (IGEQ REALWIDTH 0)
		   (IGEQ REALHEIGHT 0)
		   (ILESSP REALSOURCELEFT (BITMAPWIDTH SOURCEBITMAP))
		   (ILESSP REALSOURCEBOTTOM (BITMAPHEIGHT SOURCEBITMAP))
		   (ILESSP REALDESTINATIONLEFT (BITMAPWIDTH DESTBITMAP))
		   (ILESSP REALDESTINATIONBOTTOM (BITMAPHEIGHT DESTBITMAP)))
	      (RETURN))
          (SETQ VALID-SOURCE-REGION (INTERSECTREGIONS (CREATEREGION 0 0 (BITMAPWIDTH SOURCEBITMAP)
								    (BITMAPHEIGHT SOURCEBITMAP))
						      (CREATEREGION REALSOURCELEFT REALSOURCEBOTTOM 
								    REALWIDTH REALHEIGHT)))
          (SETQ VALID-DEST-REGION (INTERSECTREGIONS (CREATEREGION 0 0 (BITMAPWIDTH DESTBITMAP)
								  (BITMAPHEIGHT DESTBITMAP))
						    (CREATEREGION REALDESTINATIONLEFT 
								  REALDESTINATIONBOTTOM REALWIDTH 
								  REALHEIGHT)))
          (NOT-PIXELBLT (fetch (ARRAYP BASE) of COLORTABLE)
			SOURCEBITMAP REALSOURCELEFT REALSOURCEBOTTOM DESTBITMAP REALDESTINATIONLEFT 
			REALDESTINATIONBOTTOM (IMIN (fetch WIDTH of VALID-SOURCE-REGION)
						    (fetch WIDTH of VALID-DEST-REGION))
			0
			(IMIN (fetch HEIGHT of VALID-SOURCE-REGION)
			      (fetch HEIGHT of VALID-DEST-REGION])

(PIXELBLT.TABLEBUILDER
  [LAMBDA (FN)                                               (* hdj "14-Jun-85 16:41")
    (LET ((TABLE (ARRAY 256 (QUOTE WORD)
			0 0 128)))
      [for sourceNybble from 0 to 15
	 do (for destNybble from 0 to 15
	       do (for XLowBit from 0 to 1
		     do (for YLowBit from 0 to 1
			   do 

          (* The (LLSH ... (UNFOLD ...)) stuff below maps from (XLowBit YLowBit) into the position of the corresponding nybble
	  in the value. Believe it or not, we are saying (0 0) -> LLSH 12 , (1 0) -> LLSH 8 , (0 1) -> LLSH 4 , 
	  (1 1) -> LLSH 0)


			      (LET ((ELEMENT (LOGOR (LLSH sourceNybble 4)
						    destNybble)))
				(SETA TABLE ELEMENT
				      (LOGOR (ELT TABLE ELEMENT)
					     (LLSH (APPLY* FN sourceNybble destNybble XLowBit YLowBit)
						   (UNFOLD (IDIFFERENCE (IDIFFERENCE 3
										     (UNFOLD YLowBit 
											     2))
									XLowBit)
							   4]
      TABLE])

(SPECKLE
  [LAMBDA (SOURCE DEST XLO YLO)                              (* hdj "14-Jun-85 18:24")
    (LET ((BLUECOLOR 1)
       (YELLOWCOLOR 4)
       (GREENCOLOR 2)
       (REDCOLOR 3))
      (if (OR (AND (ODDP XLO)
		   (EQ SOURCE YELLOWCOLOR)
		   (EQ DEST BLUECOLOR))
	      (AND (ODDP XLO)
		   (EQ SOURCE BLUECOLOR)
		   (EQ DEST YELLOWCOLOR)))
	  then YELLOWCOLOR
	elseif (OR (AND (EVENP XLO)
			(EQ SOURCE YELLOWCOLOR)
			(EQ DEST BLUECOLOR))
		   (AND (EVENP XLO)
			(EQ SOURCE BLUECOLOR)
			(EQ DEST YELLOWCOLOR)))
	  then REDCOLOR
	else SOURCE])

(TESTFN
  [LAMBDA (SOURCE DEST XLOW YLOW)                            (* hdj "14-Jun-85 16:17")
    (if (NEQ DEST 15)
	then SOURCE
      else DEST])
)

(RPAQQ BLUECOLOR 1)

(RPAQQ GREENCOLOR 2)

(RPAQQ YELLOWCOLOR 4)
(PUTPROPS PIXELBLT COPYRIGHT ("Xerox Corporation" 1985))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (443 5048 (BLUE+YELLOW=GREEN 453 . 842) (PIXELBLT 844 . 3166) (PIXELBLT.TABLEBUILDER 
3168 . 4216) (SPECKLE 4218 . 4873) (TESTFN 4875 . 5046)))))
STOP