(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
