implementation module pictCCall_12





from	ostypes	import :: OSRect{..}, :: HDC

import	rgnCCall_12





::	*PIC

	:== (	!HDC

		,	!*OSToolbox

		)

::	Pt

	:== (	!Int

		,	!Int

		)

::	RGBcolor

	:==	(	!Int

		,	!Int

		,	!Int

		)

::	Fnt

	:== (	!{#Char}

		,	!Int

		,	!Int

		)







iWhitePattern		:== 4

iLtGreyPattern		:== 3

iGreyPattern		:== 2

iDkGreyPattern		:== 1

iBlackPattern		:== 0



iModeNotBic			:== 7

iModeNotXor			:== 6

iModeNotOr			:== 5

iModeNotCopy		:== 4

iModeBic			:== 3

iModeXor			:== 2

iModeOr				:== 1

iModeCopy			:== 0



iStrikeOut			:== 8

iUnderline			:== 4

iItalic				:== 2

iBold				:== 1



//	PA: constants for drawing polygons.

ALTERNATE			:== 1

WINDING				:== 2

//	PA: end of addition.





//	PA: win(Create/Destroy)ScreenHDC added to temporarily create a HDC of a screen.

//		Never use these values for a window or control.

winCreateScreenHDC :: !*OSToolbox -> PIC

winCreateScreenHDC _

	= code

	{

		.inline WinCreateScreenHDC

			ccall WinCreateScreenHDC "I-II"

		.end

	}



winDestroyScreenHDC :: !PIC -> *OSToolbox

winDestroyScreenHDC _

	= code

	{

		.inline WinDestroyScreenHDC

			ccall WinDestroyScreenHDC "II-I"

		.end

	}



// MW: this is never used in the object IO

winGetPicStringWidth ::  !{#Char} !PIC -> ( !Int, !PIC)

winGetPicStringWidth _ _

	= code

	{

		.inline WinGetPicStringWidth

			ccall WinGetPicStringWidth "SII-III"

		.end

	}



winGetPicCharWidth ::  !Char !PIC -> ( !Int, !PIC)

winGetPicCharWidth _ _

	= code

	{

		.inline WinGetPicCharWidth

			ccall WinGetPicCharWidth "III-III"

		.end

	}

// END MW



winGetStringWidth ::  !{#Char} !Fnt !Int !HDC !*OSToolbox -> ( !Int, !*OSToolbox)

winGetStringWidth _ _ _ _ _

	= code

	{

		.inline WinGetStringWidth

			ccall WinGetStringWidth "SSIIIII-II"

		.end

	}



winGetCharWidth ::  !Char !Fnt !Int !HDC !*OSToolbox -> ( !Int, !*OSToolbox)

winGetCharWidth _ _ _ _ _

	= code

	{

		.inline WinGetCharWidth

			ccall WinGetCharWidth "ISIIIII-II"

		.end

	}



winGetPicFontInfo ::  !PIC -> ( !Int, !Int, !Int, !Int, !PIC)

winGetPicFontInfo _

	= code

	{

		.inline WinGetPicFontInfo

			ccall WinGetPicFontInfo "II-IIIIII"

		.end

	}



winGetFontInfo ::  !Fnt !Int !HDC !*OSToolbox -> ( !Int, !Int, !Int, !Int, !*OSToolbox)

winGetFontInfo _ _ _ _

	= code

	{

		.inline WinGetFontInfo

			ccall WinGetFontInfo "SIIIII-IIIII"

		.end

	}



winSetFontStyle ::  !Int !PIC ->  PIC

winSetFontStyle _ _

	= code

	{

		.inline WinSetFontStyle

			ccall WinSetFontStyle "III-II"

		.end

	}



winSetFontSize ::  !Int !PIC ->  PIC

winSetFontSize _ _

	= code

	{

		.inline WinSetFontSize

			ccall WinSetFontSize "III-II"

		.end

	}



winSetFontName ::  !{#Char} !PIC ->  PIC

winSetFontName _ _

	= code

	{

		.inline WinSetFontName

			ccall WinSetFontName "SII-II"

		.end

	}



winSetFont ::  !Fnt !PIC ->  PIC

winSetFont _ _

	= code

	{

		.inline WinSetFont

			ccall WinSetFont "SIIII-II"

		.end

	}





winPrintResizedBitmap :: !(!Int,!Int) !(!Int,!Int) !(!Int,!Int) !{#Char} !PIC -> PIC

winPrintResizedBitmap _ _ _ _ _

	= code

	{

		.inline WinPrintResizedBitmap

			ccall WinPrintResizedBitmap "IIIIIISII-II"

		.end

	}



//	PA: Routines to DRAW bitmaps.

winDrawBitmap :: !(!Int,!Int) !(!Int,!Int) !Int !PIC -> PIC

winDrawBitmap _ _ _ _

	= code

	{

		.inline WinDrawBitmap

			ccall WinDrawBitmap "IIIIIII-II"

		.end

	}



winDrawResizedBitmap :: !(!Int,!Int) !(!Int,!Int) !(!Int,!Int) !Int !PIC -> PIC

winDrawResizedBitmap _ _ _ _ _

	= code

	{

		.inline WinDrawResizedBitmap

			ccall WinDrawResizedBitmap "IIIIIIIII-II"

		.end

	}



winCreateBitmap :: !Int !{#Char} !HDC !*OSToolbox -> (!Int,!*OSToolbox)

winCreateBitmap _ _ _ _

	= code

	{

		.inline WinCreateBitmap

			ccall WinCreateBitmap "ISII-II"

		.end

	}



winInvertPolygon ::  !PIC ->  PIC

winInvertPolygon _

	= code

	{

		.inline WinInvertPolygon

			ccall WinInvertPolygon "II-II"

		.end

	}



winErasePolygon ::  !PIC ->  PIC

winErasePolygon _

	= code

	{

		.inline WinErasePolygon

			ccall WinErasePolygon "II-II"

		.end

	}



winFillPolygon ::  !PIC ->  PIC

winFillPolygon _

	= code

	{

		.inline WinFillPolygon

			ccall WinFillPolygon "II-II"

		.end

	}



winDrawPolygon ::  !PIC ->  PIC

winDrawPolygon _

	= code

	{

		.inline WinDrawPolygon

			ccall WinDrawPolygon "II-II"

		.end

	}



winAddPolygonPoint ::  !Pt !*OSToolbox ->  *OSToolbox

winAddPolygonPoint _ _

	= code

	{

		.inline WinAddPolygonPoint

			ccall WinAddPolygonPoint "III-I"

		.end

	}



winStartPolygon ::  !Int !*OSToolbox ->  *OSToolbox

winStartPolygon _ _

	= code

	{

		.inline WinStartPolygon

			ccall WinStartPolygon "II-I"

		.end

	}



winEndPolygon :: !*OSToolbox -> *OSToolbox

winEndPolygon _

	= code

	{	

		.inline WinEndPolygon

			ccall WinEndPolygon "I-I"

		.end

	}



/*	Operations to create, modify, and destroy polygon shapes.

*/

winAllocPolyShape :: !Int !*OSToolbox -> (!Int,!*OSToolbox)

winAllocPolyShape _ _

	= code

	{	

		.inline WinAllocPolyShape

			ccall WinAllocPolyShape "II-II"

		.end

	}



winSetPolyPoint :: !Int !Int !Int !Int !*OSToolbox -> *OSToolbox

winSetPolyPoint _ _ _ _ _

	= code

	{	

		.inline WinSetPolyPoint

			ccall WinSetPolyPoint "IIIII-I"

		.end

	}



winFreePolyShape :: !Int !*OSToolbox -> *OSToolbox

winFreePolyShape _ _

	= code

	{	

		.inline WinFreePolyShape

			ccall WinFreePolyShape "II-I"

		.end

	}





winInvertWedge ::  !OSRect !Pt !Pt !PIC ->  PIC

winInvertWedge _ _ _ _

	= code

	{

		.inline WinInvertWedge

			ccall WinInvertWedge "IIIIIIIIII-II"

		.end

	}



winEraseWedge ::  !OSRect !Pt !Pt !PIC ->  PIC

winEraseWedge _ _ _ _

	= code

	{

		.inline WinEraseWedge

			ccall WinEraseWedge "IIIIIIIIII-II"

		.end

	}



winFillWedge ::  !OSRect !Pt !Pt !PIC ->  PIC

winFillWedge _ _ _ _

	= code

	{

		.inline WinFillWedge

			ccall WinFillWedge "IIIIIIIIII-II"

		.end

	}



winDrawWedge ::  !OSRect !Pt !Pt !PIC ->  PIC

winDrawWedge _ _ _ _

	= code

	{

		.inline WinDrawWedge

			ccall WinDrawWedge "IIIIIIIIII-II"

		.end

	}





winInvertCircle ::  !Pt !Int !PIC ->  PIC

winInvertCircle _ _ _

	= code

	{

		.inline WinInvertCircle

			ccall WinInvertCircle "IIIII-II"

		.end

	}



winEraseCircle ::  !Pt !Int !PIC ->  PIC

winEraseCircle _ _ _

	= code

	{

		.inline WinEraseCircle

			ccall WinEraseCircle "IIIII-II"

		.end

	}



winFillCircle ::  !Pt !Int !PIC ->  PIC

winFillCircle _ _ _

	= code

	{

		.inline WinFillCircle

			ccall WinFillCircle "IIIII-II"

		.end

	}



winDrawCircle ::  !Pt !Int !PIC ->  PIC

winDrawCircle _ _ _

	= code

	{

		.inline WinDrawCircle

			ccall WinDrawCircle "IIIII-II"

		.end

	}





winInvertOval ::  !OSRect !PIC ->  PIC

winInvertOval _ _

	= code

	{

		.inline WinInvertOval

			ccall WinInvertOval "IIIIII-II"

		.end

	}



winEraseOval ::  !OSRect !PIC ->  PIC

winEraseOval _ _

	= code

	{

		.inline WinEraseOval

			ccall WinEraseOval "IIIIII-II"

		.end

	}



winFillOval ::  !OSRect !PIC ->  PIC

winFillOval _ _

	= code

	{

		.inline WinFillOval

			ccall WinFillOval "IIIIII-II"

		.end

	}



winDrawOval ::  !OSRect !PIC ->  PIC

winDrawOval _ _

	= code

	{

		.inline WinDrawOval

			ccall WinDrawOval "IIIIII-II"

		.end

	}





winInvertRoundRectangle ::  !OSRect !Int !Int !PIC ->  PIC

winInvertRoundRectangle _ _ _ _

	= code

	{

		.inline WinInvertRoundRectangle

			ccall WinInvertRoundRectangle "IIIIIIII-II"

		.end

	}



winEraseRoundRectangle ::  !OSRect !Int !Int !PIC ->  PIC

winEraseRoundRectangle _ _ _ _

	= code

	{

		.inline WinEraseRoundRectangle

			ccall WinEraseRoundRectangle "IIIIIIII-II"

		.end

	}



winFillRoundRectangle ::  !OSRect !Int !Int !PIC ->  PIC

winFillRoundRectangle _ _ _ _

	= code

	{

		.inline WinFillRoundRectangle

			ccall WinFillRoundRectangle "IIIIIIII-II"

		.end

	}



winDrawRoundRectangle ::  !OSRect !Int !Int !PIC ->  PIC

winDrawRoundRectangle _ _ _ _

	= code

	{

		.inline WinDrawRoundRectangle

			ccall WinDrawRoundRectangle "IIIIIIII-II"

		.end

	}





winScrollRectangle :: !OSRect !Pt !PIC -> (!OSRect,!PIC)

winScrollRectangle _ _ _

	= code

	{

		.inline WinScrollRectangle

			ccall WinScrollRectangle "IIIIIIII-IIIIII"

		.end

	}



winScrollRectangle2 :: !OSRect !Pt !PIC -> (!OSRect,!PIC)

winScrollRectangle2 _ _ _

	= code

	{

		.inline WinScrollRectangle2

			ccall WinScrollRectangle2 "IIIIIIII-IIIIII"

		.end

	}



winCopyRectangle ::  !OSRect !Pt !PIC ->  PIC

winCopyRectangle _ _ _

	= code

	{

		.inline WinCopyRectangle

			ccall WinCopyRectangle "IIIIIIII-II"

		.end

	}



winCopyRectangleTo ::  !OSRect !Pt !PIC ->  PIC

winCopyRectangleTo _ _ _

	= code

	{

		.inline WinCopyRectangleTo

			ccall WinCopyRectangleTo "IIIIIIII-II"

		.end

	}



winMoveRectangle ::  !OSRect !Pt !PIC ->  PIC

winMoveRectangle _ _ _

	= code

	{

		.inline WinMoveRectangle

			ccall WinMoveRectangle "IIIIIIII-II"

		.end

	}



winMoveRectangleTo ::  !OSRect !Pt !PIC ->  PIC

winMoveRectangleTo _ _ _

	= code

	{

		.inline WinMoveRectangleTo

			ccall WinMoveRectangleTo "IIIIIIII-II"

		.end

	}





winInvertRectangle ::  !OSRect !PIC ->  PIC

winInvertRectangle _ _

	= code

	{

		.inline WinInvertRectangle

			ccall WinInvertRectangle "IIIIII-II"

		.end

	}



winEraseRectangle ::  !OSRect !PIC ->  PIC

winEraseRectangle _ _

	= code

	{

		.inline WinEraseRectangle

			ccall WinEraseRectangle "IIIIII-II"

		.end

	}



winFillRectangle ::  !OSRect !PIC ->  PIC

winFillRectangle _ _

	= code

	{

		.inline WinFillRectangle

			ccall WinFillRectangle "IIIIII-II"

		.end

	}



winDrawRectangle ::  !OSRect !PIC ->  PIC

winDrawRectangle _ _

	= code

	{

		.inline WinDrawRectangle

			ccall WinDrawRectangle "IIIIII-II"

		.end

	}





winDrawChar ::  !Int !PIC ->  PIC

winDrawChar _ _

	= code

	{

		.inline WinDrawChar

			ccall WinDrawChar "III-II"

		.end

	}



winDrawString ::  !{#Char} !PIC ->  PIC

winDrawString _ _

	= code

	{

		.inline WinDrawString

			ccall WinDrawString "SII-II"

		.end

	}





winDrawCCurve ::  !OSRect !Pt !Pt !RGBcolor !PIC ->  PIC

winDrawCCurve _ _ _ _ _

	= code

	{

		.inline WinDrawCCurve

			ccall WinDrawCCurve "IIIIIIIIIIIII-II"

		.end

	}



winDrawCLine ::  !Pt !Pt !RGBcolor !PIC ->  PIC

winDrawCLine _ _ _ _

	= code

	{

		.inline WinDrawCLine

			ccall WinDrawCLine "IIIIIIIII-II"

		.end

	}



winDrawCPoint ::  !Pt !RGBcolor !PIC ->  PIC

winDrawCPoint _ _ _

	= code

	{

		.inline WinDrawCPoint

			ccall WinDrawCPoint "IIIIIII-II"

		.end

	}



winDrawCurve ::  !OSRect !Pt !Pt !PIC ->  PIC

winDrawCurve _ _ _ _

	= code

	{

		.inline WinDrawCurve

			ccall WinDrawCurve "IIIIIIIIII-II"

		.end

	}



winDrawLine ::  !Pt !Pt !PIC ->  PIC

winDrawLine _ _ _

	= code

	{

		.inline WinDrawLine

			ccall WinDrawLine "IIIIII-II"

		.end

	}



winDrawPoint ::  !Pt !PIC ->  PIC

winDrawPoint _ _

	= code

	{

		.inline WinDrawPoint

			ccall WinDrawPoint "IIII-II"

		.end

	}





winLinePen ::  !Pt !PIC ->  PIC

winLinePen _ _

	= code

	{

		.inline WinLinePen

			ccall WinLinePen "IIII-II"

		.end

	}



winLinePenTo ::  !Pt !PIC ->  PIC

winLinePenTo _ _

	= code

	{

		.inline WinLinePenTo

			ccall WinLinePenTo "IIII-II"

		.end

	}



winMovePen ::  !Pt !PIC ->  PIC

winMovePen _ _

	= code

	{

		.inline WinMovePen

			ccall WinMovePen "IIII-II"

		.end

	}



winMovePenTo ::  !Pt !PIC ->  PIC

winMovePenTo _ _

	= code

	{

		.inline WinMovePenTo

			ccall WinMovePenTo "IIII-II"

		.end

	}



winGetPenPos :: !PIC -> (!Int,!Int,!HDC,!*OSToolbox)

winGetPenPos _

	= code

	{	

		.inline WinGetPenPos

			ccall WinGetPenPos "II-IIII"

		.end

	}





winSetPenSize ::  !Int !PIC ->  PIC

winSetPenSize _ _

	= code

	{

		.inline WinSetPenSize

			ccall WinSetPenSize "III-II"

		.end

	}



winSetPattern ::  !Int !PIC ->  PIC

winSetPattern _ _

	= code

	{

		.inline WinSetPattern

			ccall WinSetPattern "III-II"

		.end

	}



winSetMode ::  !Int !PIC ->  PIC

winSetMode _ _

	= code

	{

		.inline WinSetMode

			ccall WinSetMode "III-II"

		.end

	}



winSetBackColor ::  !RGBcolor !PIC ->  PIC

winSetBackColor _ _

	= code

	{

		.inline WinSetBackColor

			ccall WinSetBackColor "IIIII-II"

		.end

	}



winSetPenColor ::  !RGBcolor !PIC ->  PIC

winSetPenColor _ _

	= code

	{

		.inline WinSetPenColor

			ccall WinSetPenColor "IIIII-II"

		.end

	}





winClipPicture ::  !OSRect !PIC ->  PIC

winClipPicture _ _

	= code

	{

		.inline WinClipPicture

			ccall WinClipPicture "IIIIII-II"

		.end

	}



//	PA: operation to set the clipping region.

winClipRgnPicture :: !HRGN !PIC -> PIC

winClipRgnPicture _ _

	= code

	{	

		.inline WinClipRgnPicture

			ccall WinClipRgnPicture "III-II"

		.end

	}



//	PA+++: new operation to set the complete clipping region.

winSetClipRgnPicture :: !HRGN !PIC -> PIC

winSetClipRgnPicture _ _

	= code

	{

		.inline WinSetClipRgnPicture

			ccall WinSetClipRgnPicture "III-II"

		.end

	}



//	PA+++: new operation to retrieve the current clipping region.

winGetClipRgnPicture :: !PIC -> (!HRGN,!PIC)

winGetClipRgnPicture _

	= code

	{

		.inline WinGetClipRgnPicture

			ccall WinGetClipRgnPicture "II-III"

		.end

	}



winDeleteObject :: !Int !*OSToolbox -> *OSToolbox

winDeleteObject _ _

	= code

	{	

		.inline WinDeleteObject

			ccall WinDeleteObject "II-I"

		.end

	}





winDonePicture :: !PIC -> (!Int,!Int,!RGBcolor,!RGBcolor,!Pt,!Fnt,!PIC)

winDonePicture _

	= code

	{

		.inline WinDonePicture

			ccall WinDonePicture "II-IIIIIIIIIISIIII"

		.end

	}



winInitPicture :: !Int !Int !RGBcolor !RGBcolor !Pt !Fnt !Pt !PIC -> PIC

winInitPicture _ _ _ _ _ _ _ _

	= code

	{

		.inline WinInitPicture

			ccall WinInitPicture "IIIIIIIIIISIIIIII-II"

		.end

	}

