/* WARNING: This file was machine generated from "\mactools\include\mpw\grlibrar.mpw". ** Changes to this file will be lost when it is next generated. */ /* graphics libraries: general library interfaces by Cary Clark, Georgiann Delaney, Michael Fairman, Dave Good, Robert Johnson, Keith McGreggor, Oliver Steele, David Van Brink, Chris Yerga Copyright 1987 - 1991 Apple Computer, Inc. All rights reserved. */ #ifndef graphicsLibrariesIncludes #define graphicsLibrariesIncludes #ifdef __cplusplus extern "C" { #endif #ifndef graphicsRoutinesIncludes #include "grroutin.h" #endif #ifndef mathRoutinesIncludes #include "mathrout.h" #endif #ifndef qdTextIncludes #define DrawChar gDrawChar #endif #define NilShapeReturn(a) {if ((a) == (shape) nil) {PostGraphicsError(shape_is_nil); return; }} #define NilShapeReturnNil(a) {if ((a) == (shape) nil) {PostGraphicsError(shape_is_nil); return 0L; }} #define NilStyleReturn(a) {if ((a) == (style) nil) {PostGraphicsError(style_is_nil); return; }} #define NilStyleReturnNil(a) {if ((a) == (style) nil) {PostGraphicsError(style_is_nil); return 0L; }} #define NilInkReturn(a) {if ((a) == (ink) nil) {PostGraphicsError(ink_is_nil); return; }} #define NilInkReturnNil(a) {if ((a) == (ink) nil) {PostGraphicsError(ink_is_nil); return 0L; }} #define NilTransformReturn(a) {if ((a) == (transform) nil) {PostGraphicsError(transform_is_nil); return; }} #define NilTransformReturnNil(a) {if ((a) == (transform) nil) {PostGraphicsError(transform_is_nil); return 0L; }} #define NilColorSetReturn(a) {if ((a) == (colorSet) nil) {PostGraphicsError(colorSet_is_nil); return; }} #define NilColorSetReturnNil(a) {if ((a) == (colorSet) nil) {PostGraphicsError(colorSet_is_nil); return 0L; }} #define NilColorProfileReturn(a) {if ((a) == (colorProfile) nil) {PostGraphicsError(colorProfile_is_nil); return; }} #define NilColorProfileReturnNil(a) {if ((a) == (colorProfile) nil) {PostGraphicsError(colorProfile_is_nil); return 0L; }} #define NilTagReturn(a) {if ((a) == (tag) nil) {PostGraphicsError(tag_is_nil); return; }} #define NilTagReturnNil(a) {if ((a) == (tag) nil) {PostGraphicsError(tag_is_nil); return 0L; }} #ifdef debugging #define IfDebug(a, b) {if (a) DebugStr(b);} #define IfDebugReturn(a, b) {if (a) { DebugStr(b); return; }} #define IfDebugReturnNil(a, b) {if (a) { DebugStr(b); return 0L; }} #define NilParamReturn(a) {if ((a) == 0L) {PostGraphicsError(parameter_is_nil); return; }} #define NilParamReturnNil(a) {if ((a) == 0L) {PostGraphicsError(parameter_is_nil); return 0L; }} #define IfErrorReturn(a,b) {if (a) { PostGraphicsError(b); return; }} #define IfErrorReturnNil(a,b) {if (a) { PostGraphicsError(b); return 0L; }} #define IfNotice(a, b) {if (a) PostGraphicsNotice(b);} #define IfWarning(a,b) {if (a) PostGraphicsWarning(b);} #define IfWarningReturn(a,b) {if (a) { PostGraphicsWarning(b); return; }} #define IfWarningReturnNil(a,b) {if (a) { PostGraphicsWarning(b); return 0L; }} #else #define IfDebug(a, b) #define IfDebugReturn(a, b) #define IfDebugReturnNil(a, b) #define NilParamReturn(a) #define NilParamReturnNil(a) #define IfErrorReturn(a,b) #define IfErrorReturnNil(a,b) #define IfNotice(a, b) #define IfWarning(a,b) #define IfWarningReturn(a,b) {if (a) return;} #define IfWarningReturnNil(a,b) {if (a) return 0L;} #endif typedef enum { /* color names */ gxWhite = 1, gxBlack, gxGray, gxGrey = gxGray, #ifndef __QUICKDRAW__ white = 1, black, gray, grey = gray, #endif /* primaries */ red, green, blue, /* secondaries */ cyan, magenta, yellow, /* tertiaries */ orange, chartreuse, aqua, teal = aqua, slate, purple, violet = purple, maroon, /* others */ brown, pink, turquoise, cadmium_lemon, cadmium_light_yellow, aureoline_yellow, naples_deep_yellow, cadmium_yellow, cadmium_deep_yellow, cadmium_orange, cadmium_light_red, cadmium_deep_red, geranium_lake, alizarin_crimson, rose_madder, madder_deep_lake, brown_madder, permanent_red_violet, cobalt_deep_violet, ultramarine_violet, ultramarine_blue, cobalt_blue, royal_blue, cerulean_blue, manganese_blue, indigo, turquoise_blue, emerald_green, permanent_green, viridian_light, cobalt_green, cinnabar_green, sap_green, chromium_oxide_green, terre_verte, yellow_ochre, mars_yellow, raw_sienna, mars_orange, gold_ochre, brown_ochre, deep_ochre, burnt_umber, burnt_sienna, flesh, flesh_ochre, english_red, venetian_red, indian_red, raw_umber, greenish_umber, van_dyck_brown, sepia, warm_grey, cold_grey, ivory_black, lamp_black, titanium_white, zinc_white, pale_gold, gold, old_gold, pink_gold, white_gold, yellow_gold, green_gold, platinum, silver, antique_silver, chrome, steel, copper, antique_copper, oxidized_copper, bronze, brass, iron, rusted_iron, lead, fluorescent_pink, fluorescent_green, fluorescent_blue, incadescent_high, incadescent_low, moonlight, sodium, daylight, dawn, afternoon, dusk, mauve, apple_green, apple_yellow, apple_orange, apple_red, apple_purple, apple_blue, /* color modifiers */ light = 512, dark = 1024, warm = 2048, reddish = warm, cool = 4096, bluish = cool, grayish = 8192, whitish = light, blackish = dark, greenish = 16384 } commonColors; typedef long commonColor; extern colorSet commonColorSet; extern setColor commonColorList[]; extern short commonColorCount; /* some very useful constructive definitions for creating colors */ /* see 'color library.c' for an example of their use... */ #define makeRGBSHORT(a,b,c) ((c >> 14) + ((b >> 13) + (a >> 13) << 3) << 3) #define makeCMYKSHORT(a,b,c,d) ((d >> 14) + ((c >> 14) + ((b >> 14) + (a >> 14) << 2) << 2) << 2) #define makeRGB16(a,b,c) ((c >> 11) + ((b >> 11) + (a >> 11) << 5) << 5) #define makeCMYK16(a,b,c,d) ((d >> 12) + ((c >> 12) + ((b >> 12) + (a >> 12) << 4) << 4) << 4) #define xRGB256(a,b,c) {rgbSpace,nil,{(a << 8)+a,(b << 8)+b,(c << 8)+c, 0 }} #define xRGB(a,b,c) {rgbSpace,nil,{a,b,c,0}} #define xCMYK(a,b,c,d) {cmykSpace,nil,{a,b,c,d}} #define xHSV(a,b,c) {hsvSpace,nil,{a,b,c,0}} #define xCIE(a,b,c) {cieSpace,nil,{a,b,c,0}} #define xYIQ(a,b,c) {yiqSpace,nil,{a,b,c,0}} #define xXYZ(a,b,c) {xyzSpace,nil,{a,b,c,0}} #define xYUV(a,b,c) {yuvSpace,nil,{a,b,c,0}} #define xLUV(a,b,c) {luvSpace,nil,{a,b,c,0}} #define xLAB(a,b,c) {labSpace,nil,{a,b,c,0}} #define xHLS(a,b,c) {hlsSpace,nil,{a,b,c,0}} #define xACC(a,b,c) {accSpace,nil,{a,b,c,0}} #define xNTSC(a,b,c) {ntscSpace,nil,{a,b,c,0}} #define xPAL(a,b,c) {palSpace,nil,{a,b,c,0}} #define xSECAM(a,b,c) {secamSpace,nil,{a,b,c,0}} #define xDIGITALVIDEO(a,b,c) {digitalVideoSpace,nil,{a,b,c,0}} #define xGRAY(a) {graySpace,nil,{a,0,0,0}} #define xRGB16(a,b,c) {rgb16Space,nil,{makeRGB16(a,b,c),0,0,0}} #define xCMYK16(a,b,c,d) {cmyk16Space,nil,{makeCMYK16(a,b,c,d),0,0,0}} #define xRGB32(a,b,c) {rgb32Space,nil,{(a >> 8),((c >> 8) + (b >> 8) << 8),0,0}} #define xCMYK32(a,b,c,d) {cmyk32Space,nil,{((b >> 8) + (a >> 8) << 8),((d >> 8) + (c >> 8) << 8),0,0}} #define sRGB(r,g,b) {r,g,b,0} #define sCMYK(c,m,y,k) {c,m,y,k} #define sRGB256(a,b,c) {(a << 8)+a,(b << 8)+b,(c << 8)+c, 0 } #ifndef _Quickdraw_ #ifndef __QUICKDRAW__ /* * The following items are duplicated in LSC QuickDraw.h, so we might * skip them here. */ typedef enum { bold = 1, italic = 2, underline = 4, outline = 8, shadow = 0x10, condense = 0x20, extend = 0x40 } commonFaces; #endif #endif // /* ifndef _Quickdraw_ */ enum { plain, lighten = 0x80 }; typedef char commonFace; typedef enum { /* These modes simulate QuickDraw's transfer modes */ commonAddOverMode = 2000, commonSubtractOverMode, commonSubtractPinMode, commonTransparentMode, commonInMode, commonOutMode } commonTransferModes; typedef struct { point a; point b; point c; point d; } cubic; typedef struct { point a; point b; point c; fixed lambda; } conic; /* shape library */ __sysapi shape __cdecl NewPath(const path *); __sysapi shape __cdecl NewPolygon(const polygon *); __sysapi polygon * __cdecl GetPolygon(shape, long contour, polygon *); __sysapi path * __cdecl GetPath(shape, long contour, path *); __sysapi void __cdecl SetPath(shape, long contour, const path *); __sysapi void __cdecl SetPolygon(shape, long contour, const polygon *); __sysapi void __cdecl DrawPolygon(const polygon *, shapeFill); __sysapi void __cdecl DrawPath(const path *, shapeFill); __sysapi void __cdecl SetShapeIndexPoint(shape, long index, const point *); __sysapi void __cdecl SetShapeIndexControl(shape, long index, long control); __sysapi point * __cdecl GetShapeIndexPoint(shape, long index, point *); __sysapi long __cdecl GetShapeIndexControl(shape, long index, long *control); __sysapi void __cdecl InsertShape(shape, long index, shape toAdd); __sysapi shape __cdecl ExtractShape(shape source, long firstPoint, long numPoints); __sysapi void __cdecl AddToShape(shape dest, shape add); __sysapi void __cdecl ExtendShape(shape dest, shape add); #ifdef debugging __sysapi shape __cdecl NewShape2(shapeType, fixed, fixed); __sysapi shape __cdecl NewShape4(shapeType, fixed, fixed, fixed, fixed); __sysapi shape __cdecl NewShape6(shapeType, fixed, fixed, fixed, fixed, fixed, fixed); __sysapi void __cdecl SetShape2(shape, fixed, fixed); __sysapi void __cdecl SetShape4(shape, fixed, fixed, fixed, fixed); __sysapi void __cdecl SetShape6(shape, fixed, fixed, fixed, fixed, fixed, fixed); #else #define NewShape2(type,p1,p2) NewShapeMany(type, (fixed)p1, (fixed)p2) #define NewShape4(type,p1,p2, p3, p4) NewShapeMany(type, (fixed)p1, (fixed)p2, (fixed)p3, (fixed)p4) #define NewShape6(type,p1,p2, p3, p4, p5, p6) NewShapeMany(type, (fixed)p1, (fixed)p2, (fixed)p3, (fixed)p4, (fixed)p5, (fixed)p6) #define SetShape2(source,p1,p2) SetShapeMany(source, (fixed)p1, (fixed)p2) #define SetShape4(source,p1,p2, p3, p4) SetShapeMany(source, (fixed)p1, (fixed)p2, (fixed)p3, (fixed)p4) #define SetShape6(source,p1,p2, p3, p4, p5, p6) SetShapeMany(source, (fixed)p1, (fixed)p2, (fixed)p3, (fixed)p4, (fixed)p5, (fixed)p6) #endif __sysapi shape __cdecl NewShapeMany(shapeType type, fixed firstArg, ...); __sysapi void __cdecl SetShapeMany(shape target, fixed firstArg, ...); /* arc library, oval library, roundrect library, cubic library, and conic library */ __sysapi shape __cdecl NewArc(const rectangle *, fixed startAng, fixed sweep, boolean wedge); __sysapi shape __cdecl NewOval(const rectangle *); __sysapi shape __cdecl NewRoundRect(const rectangle *, const point *ovalSize); __sysapi shape __cdecl NewCubic(const cubic *); __sysapi shape __cdecl NewConic(const conic *); __sysapi void __cdecl DrawArc(const rectangle *, fixed startAng, fixed sweep, boolean wedge); __sysapi void __cdecl DrawOval(const rectangle *, shapeFill); __sysapi void __cdecl DrawRoundRect(const rectangle *, const point *ovalSize, shapeFill); __sysapi void __cdecl DrawCubic(const cubic *, shapeFill); __sysapi void __cdecl DrawConic(const conic *, shapeFill); __sysapi void __cdecl SetArc(shape, const rectangle *, fixed startAng, fixed sweep, boolean wedge); __sysapi void __cdecl SetOval(shape, const rectangle *); __sysapi void __cdecl SetRoundRect(shape, const rectangle *, const point *ovalSize); __sysapi void __cdecl SetCubic(shape, const cubic *); __sysapi void __cdecl SetConic(shape, const conic *); /* graphics debug library */ __sysapi void __cdecl SetGraphicsLibraryErrors(void); /* set the error and warning routines */ __sysapi void __cdecl SetGraphicsLibraryNotices(void); /* set the notice routine */ __sysapi char * __cdecl GraphicsErrorMessage(graphicsError); __sysapi char * __cdecl GraphicsWarningMessage(graphicsWarning); __sysapi char * __cdecl GraphicsNoticeMessage(graphicsNotice); __sysapi void __cdecl DisplayGraphicsErrorMessage(graphicsError, long); __sysapi void __cdecl DisplayGraphicsWarningMessage(graphicsWarning, long); __sysapi void __cdecl DisplayGraphicsNoticeMessage(graphicsNotice, long); /* shape library */ __sysapi void __cdecl CenterShape(shape, rectangle *); __sysapi void __cdecl MoveShapeCenterTo(shape, fixed x, fixed y); __sysapi void __cdecl RotateShapeAboutCenter(shape, fixed degrees); __sysapi void __cdecl SkewShapeAboutCenter(shape, fixed xSkew, fixed ySkew); __sysapi void __cdecl ScaleShapeAboutCenter(shape, fixed hScale, fixed vScale); /* graphics library */ __sysapi void __cdecl MapShapeToSpace(shape, viewPort, viewDevice); __sysapi void __cdecl MapShapeFromSpace(shape, viewPort, viewDevice); __sysapi void __cdecl MapPointToSpace(point *, viewPort, viewDevice); __sysapi void __cdecl MapPointFromSpace(point *, viewPort, viewDevice); /* transform library */ __sysapi viewPort __cdecl GetTransformViewPort(transform); __sysapi void __cdecl SetTransformViewPort(transform, viewPort); __sysapi void __cdecl AddToTransformViewPort(transform target, viewPort); __sysapi void __cdecl SetShapeViewPort(shape, viewPort); __sysapi viewPort __cdecl GetShapeViewPort(shape); __sysapi void __cdecl SetDeepShapeViewPort(shape, viewPort); __sysapi void __cdecl SetDeepShapeViewPorts(shape, long count, const viewPort portList[]); __sysapi void __cdecl SetDeepShapeTransform(shape, transform); __sysapi void __cdecl SetDefaultViewPort(viewPort); __sysapi viewGroup __cdecl CopyViewGroup(viewGroup group); __sysapi transform __cdecl ChangeTransformViewGroup(transform xform, viewGroup oldGroup, viewGroup newGroup); __sysapi shape __cdecl ChangeShapeViewGroup(shape source, viewGroup oldGroup, viewGroup newGroup); __sysapi transform __cdecl SeparateShapeTransform(shape source); __sysapi void __cdecl ReuniteShapeTransform(shape target, transform separate); /* graphics state library */ __sysapi style __cdecl SeparateShapeStyle(shape source); __sysapi void __cdecl ReuniteShapeStyle(shape target, style separate); __sysapi ink __cdecl SeparateShapeInk(shape source); __sysapi void __cdecl ReuniteShapeInk(shape target, ink separate); /* shape library */ __sysapi void __cdecl GetPathsIndexPointControl(const paths *, long index, point **pt, long **controlPtr, long *controlMask); __sysapi void __cdecl SetShapeOpenPath(shape); __sysapi void __cdecl PreMapTransform(transform source, mapping map); /* graphics library */ #define CopyShape(s) CopyToShape(nil,s) #define CopyStyle(s) CopyToStyle(nil,s) #define CopyInk(s) CopyToInk(nil,s) #define CopyTransform(s) CopyToTransform(nil,s) __sysapi void __cdecl DisposeTransformAt(transform *); __sysapi void __cdecl DisposeShapeAt(shape *); __sysapi void __cdecl DisposeStyleAt(style *); __sysapi void __cdecl DisposeInkAt(ink *); __sysapi void __cdecl DisposeTagAt(tag *); /* color matching library */ __sysapi colorProfile __cdecl CreateQMSColorProfile(void); __sysapi colorProfile __cdecl CreateCanonColorProfile(void); /* color library */ __sysapi void __cdecl InitCommonColors(void); __sysapi void __cdecl DisposeCommonColors(void); __sysapi void __cdecl SetShapeRGB(shape, colorValue red, colorValue green, colorValue blue); __sysapi void __cdecl SetInkRGB(ink, colorValue red, colorValue green, colorValue blue); __sysapi void __cdecl SetShapeHSV(shape, colorValue hue, colorValue saturation, colorValue value); __sysapi void __cdecl SetInkHSV(ink, colorValue hue, colorValue saturation, colorValue value); __sysapi void __cdecl SetShapeGray(shape, colorValue gray); __sysapi void __cdecl SetInkGray(ink, colorValue gray); /* transferMode library, color library, text library */ __sysapi void __cdecl SetShapeCommonTransfer(shape, componentMode); __sysapi void __cdecl SetShapeCommonColor(shape, commonColor); __sysapi void __cdecl SetShapeCommonFace(shape, commonFace); __sysapi void __cdecl SetInkCommonTransfer(ink, componentMode); __sysapi void __cdecl SetInkCommonColor(ink, commonColor); __sysapi void __cdecl SetStyleCommonFace(style, commonFace); __sysapi componentMode __cdecl GetInkCommonTransfer(ink); __sysapi commonColor __cdecl GetInkCommonColor(ink); __sysapi commonFace __cdecl GetStyleCommonFace(style); __sysapi componentMode __cdecl GetShapeCommonTransfer(shape); __sysapi commonColor __cdecl GetShapeCommonColor(shape); __sysapi commonFace __cdecl GetShapeCommonFace(shape); __sysapi color * __cdecl SetCommonColor(color *, commonColor); __sysapi commonColor __cdecl GetCommonColor(const color *); /* color library */ __sysapi colorSpace __cdecl GetShapeColorSpace(shape target); __sysapi colorProfile __cdecl GetShapeColorProfile(shape source); __sysapi colorSet __cdecl GetShapeColorSet(shape source); __sysapi colorSpace __cdecl GetInkColorSpace(ink target); __sysapi colorProfile __cdecl GetInkColorProfile(ink source); __sysapi colorSet __cdecl GetInkColorSet(ink source); __sysapi void __cdecl SetShapeColorSpace(shape target, colorSpace space); __sysapi void __cdecl SetShapeColorProfile(shape target, colorProfile profile); __sysapi void __cdecl SetShapeColorSet(shape target, colorSet set); __sysapi void __cdecl SetInkColorSpace(ink target, colorSpace space); __sysapi void __cdecl SetInkColorProfile(ink target, colorProfile profile); __sysapi void __cdecl SetInkColorSet(ink target, colorSet set); __sysapi colorSet __cdecl GetViewDeviceColorSet(viewDevice source); __sysapi void __cdecl SetViewDeviceColorSet(viewDevice target, colorSet set); __sysapi colorProfile __cdecl GetViewDeviceColorProfile(viewDevice source); __sysapi void __cdecl SetViewDeviceColorProfile(viewDevice target, colorProfile profile); __sysapi long __cdecl GetColorSpaceComponents(colorSpace space); /* transferMode library */ __sysapi void __cdecl InitTransferMode(transferMode *); __sysapi transferMode * __cdecl SetCommonTransfer(transferMode *, componentMode, unsigned short opValue, const color *opColor); __sysapi color * __cdecl TransmogrifyColor(color *dstColor, const color *srcColor, const transferMode *); __sysapi void __cdecl SetInkFastXorTransfer(ink inky, viewDevice destDevice, color *background, color *result); __sysapi void __cdecl SetShapeFastXorTransfer(shape source, color *background, color *result); __sysapi shape __cdecl NewCString(const char *cString, const point *position); __sysapi shape __cdecl NewPString(const char *pascalString, const point *position); __sysapi shape __cdecl NewChar(const char theChar, const point *position); __sysapi void __cdecl SetCString(shape target, const char *cString, const point *position); __sysapi void __cdecl SetPString(shape target, const char *pascalString, const point *position); __sysapi void __cdecl SetChar(shape target, char theChar, const point *position); __sysapi void __cdecl DrawCString(const char *cString, const point *position); __sysapi void __cdecl DrawPString(const char *pascalString, const point *position); #ifndef qdTextIncludes __sysapi void __cdecl DrawChar(const char theChar, const point *position); #endif __sysapi fixed __cdecl FixTextWidth(const unsigned char *, short length); __sysapi fixed __cdecl FixCStringWidth(const char *); __sysapi fixed __cdecl FixPStringWidth(const char *); __sysapi fixed __cdecl FixCharWidth(char); __sysapi point * __cdecl GetShapeAdvance(shape target, point *advance); __sysapi void __cdecl SetGlyphText(shape, const unsigned char *text, long length); __sysapi void __cdecl SetGlyphAdvance(shape, const long advanceBits[]); __sysapi void __cdecl SetGlyphStyles(shape, const short styleRuns[], const style glyphStyles[]); __sysapi long __cdecl GetGlyphText(shape, unsigned char *text); __sysapi long __cdecl GetGlyphAdvance(shape, long advanceBits[]); __sysapi long __cdecl GetGlyphStyles(shape, short styleRuns[], style glyphStyles[]); /* mapping library */ __sysapi void __cdecl PolyToPolyMap(const polygon *source, const polygon *dest, mapping); /* shape library */ __sysapi void __cdecl PaintRectangle(const rectangle *, commonColor); __sysapi void __cdecl PaintRectangle2(const point *, const point *, commonColor); __sysapi void __cdecl PaintRectangle4(long left, long top, long right, long bottom, commonColor); /* picture library */ __sysapi void __cdecl AddToPicture(shape picture, shape newShape, style newStyle, ink newInk, transform newTransform); __sysapi void __cdecl InsertPictureItem(shape picture, long index, shape newShape, style newStyle, ink newInk, transform newTransform); __sysapi shape __cdecl GetPictureItem(shape picture, long index, shape *destShape, style *destStyle, ink *destInk, transform *destTransform); __sysapi void __cdecl SetPictureItem(shape picture, long index, shape newShape, style newStyle, ink newInk, transform newTransform); /* user library */ __sysapi void __cdecl AddShapeUser(shape source, const void *data, long length, long type); __sysapi long __cdecl GetShapeUser(shape source, void *data, long *length, long requestedType, long *foundType, long index); __sysapi void __cdecl RemoveShapeUser(shape source, long type, long index); /* ramp library */ __sysapi shape __cdecl NewRamp(const color *firstColor, const color *lastColor, long steps, const rectangle *bounds); __sysapi void __cdecl DrawRamp(const color *firstColor, const color *lastColor, long steps, const rectangle *bounds); __sysapi shape __cdecl NewCommonRamp(commonColor firstColor, commonColor lastColor, long steps, const rectangle *bounds); __sysapi void __cdecl DrawCommonRamp(commonColor firstColor, commonColor lastColor, long steps, const rectangle *bounds); #ifdef MacintoshIncludes #ifndef qdTextIncludes #undef DrawChar #endif #endif #ifdef __cplusplus } #endif #endif