/******************************************************************************
 **
 **	C++ Class Library for the Amiga© system software.
 **
 **	Copyright (C) 1994 by Armin Vogt  **  EMail: armin@uni-paderborn.de
 **	All Rights Reserved.
 **
 **	$Source: apphome:APlusPlus/RCS/libsource/taglist.cxx,v $
 **	$Revision: 1.3 $
 **	$Date: 1994/04/23 21:02:38 $
 **	$Author: Armin_Vogt $
 **
 ******************************************************************************/


extern "C" {
/*
#include <intuition/intuition.h>
#include <intuition/screens.h>
#include <intuition/imageclass.h>
#include <intuition/gadgetclass.h>
#include <intuition/icclass.h>
#include <utility/tagitem.h>
#include <libraries/gadtools.h>
*/
}

// include tag sources
//#include <APlusPlus/graphics/GraphicObject.h>
#include <APlusPlus/graphics/Canvas.h>

volatile static char rcs_id[] = "$Id: taglist.cxx,v 1.3 1994/04/23 21:02:38 Armin_Vogt Exp Armin_Vogt $";


/*************************************************************************************************
      This file defines a taglist output operator that knows most of the system and APlusPlus tags.
 *************************************************************************************************/


#define TN(v) v,(STRPTR)#v

struct TI
{
      ULONG tagvalue;
      STRPTR tagname;
}
tagnames[] =
{
TN( GOB_LeftFromLeftOfParent ), 
TN( GOB_RightFromLeftOfParent ), 
TN( GOB_TopFromTopOfParent ),    
TN( GOB_BottomFromTopOfParent ), 

TN( GOB_LeftFromRightOfParent ), 
TN( GOB_RightFromRightOfParent ),
TN( GOB_TopFromBottomOfParent ), 
TN( GOB_BottomFromBottomOfParent ),

TN( GOB_LeftFromLeftOfPred ),      
TN( GOB_RightFromLeftOfPred ),     
TN( GOB_TopFromTopOfPred ),        
TN( GOB_BottomFromTopOfPred ),     

TN( GOB_LeftFromRightOfPred ),     
TN( GOB_RightFromRightOfPred ),    
TN( GOB_TopFromBottomOfPred ),     
TN( GOB_BottomFromBottomOfPred ),  

TN( GOB_Left        ),
TN( GOB_Top         ),
TN( GOB_Width       ),
TN( GOB_Height      ),

TN(   CNV_ViewX ),
TN(   CNV_GranularityX ),
TN(	CNV_VisibleX ),
TN(   CNV_ViewY ),
TN(   CNV_GranularityY ),
TN(	CNV_VisibleY ),
TN(   CNV_Width ),
TN(	CNV_Height ),
    
TN(   GA_Dummy   ),
TN(   GA_Left     ),
TN(   GA_RelRight     ),
TN(   GA_Top    ),
TN(   GA_RelBottom    ),
TN(   GA_Width     ),
TN(   GA_RelWidth     ),
TN(   GA_Height    ),
TN(   GA_RelHeight    ),
TN(   GA_Text      ), /* ti_Data is (UBYTE *) */
TN(   GA_Image     ),
TN(   GA_Border    ),
TN(   GA_SelectRender ),
TN(   GA_Highlight    ),
TN(   GA_Disabled     ),
TN(   GA_GZZGadget    ),
TN(   GA_ID     ),
TN(   GA_UserData     ),
TN(   GA_SpecialInfo  ),
TN(   GA_Selected     ),
TN(   GA_EndGadget    ),
TN(   GA_Immediate    ),
TN(   GA_RelVerify    ),
TN(   GA_FollowMouse  ),
TN(   GA_RightBorder  ),
TN(   GA_LeftBorder   ),
TN(   GA_TopBorder    ),
TN(   GA_BottomBorder ),
TN(   GA_ToggleSelect ),
/****************************
TN(  GTVI_NewWindow	  ),
TN(  GTVI_NWTags	     ),

TN(  GT_Private0	     ),

TN(  GTCB_Checked	     ),

TN(  GTLV_Top	     ),
TN(  GTLV_Labels	     ),
TN(  GTLV_ReadOnly	     ),
TN(  GTLV_ScrollWidth     ),

TN(  GTMX_Labels	     ),
TN(  GTMX_Active	     ),

TN(  GTTX_Text	     ),
TN(  GTTX_CopyText	     ),
TN(  GTNM_Number	     ),

TN(  GTCY_Labels	     ),
TN(  GTCY_Active	     ),

TN(  GTPA_Depth	     ),
TN(  GTPA_Color	     ),
TN(  GTPA_ColorOffset     ),
TN(  GTPA_IndicatorWidth  ),
TN(  GTPA_IndicatorHeight ),

TN(  GTSC_Top	     ),
TN(  GTSC_Total	     ),
TN(  GTSC_Visible	     ),
TN(  GTSC_Overlap	     ),

TN(  GTSL_Min	     ),
TN(  GTSL_Max	     ),
TN(  GTSL_Level	     ),
TN(  GTSL_MaxLevelLen     ),
TN(  GTSL_LevelFormat     ),
TN(  GTSL_LevelPlace      ),
TN(  GTSL_DispFunc	     ),

TN(  GTST_String	     ),
TN(  GTST_MaxChars	     ),

TN(  GTIN_Number	     ),
TN(  GTIN_MaxChars	     ),

TN(  GTMN_TextAttr	     ),
TN(  GTMN_FrontPen	     ),

TN(  GTBB_Recessed	     ),

TN(  GT_VisualInfo	     ),

TN(  GTLV_ShowSelected    ),
TN(  GTLV_Selected	     ),
TN(  GT_Reserved1	     ),

TN(  GTTX_Border	     ),
TN(  GTNM_Border	     ),

TN(  GTSC_Arrows	     ),

TN(  GTMN_Menu	     ),
TN(  GTMX_Spacing	     ),

TN(  GTMN_FullMenu	     ),
TN(  GTMN_SecondaryError  ),
TN(  GT_Underscore	     ),
TN(  GTST_EditHook	     ),
TN(  GTIN_EditHook	     ),
TN(  GTST_EditHook ),

TN(  GTMN_Checkmark	     ),
TN(  GTMN_AmigaKey	     ),
TN(  GTMN_NewLookMenus    ),

TN(  GTCB_Scaled	     ),
TN(  GTMX_Scaled	     ),

TN(  GTPA_NumColors	     ),

TN(  GTMX_TitlePlace      ),

TN(  GTTX_FrontPen	     ),
TN(  GTTX_BackPen	     ),
TN(  GTTX_Justification   ),

TN(  GTNM_FrontPen	     ),
TN(  GTNM_BackPen	     ),
TN(  GTNM_Justification   ),
TN(  GTNM_Format	     ),
TN(  GTNM_MaxNumberLen    ),

TN(  GTBB_FrameType	     ),

TN(  GTLV_MakeVisible     ),
TN(  GTLV_ItemHeight      ),

TN(  GTSL_MaxPixelLen     ),
TN(  GTSL_Justification   ),

TN(  GTPA_ColorTable      ),

TN(  GTLV_CallBack	     ),
TN(  GTLV_MaxPen	     ),

TN(  GTTX_Clipped	     ),
TN(  GTNM_Clipped	     ),
***************************/
TN( PGA_Freedom  ),
TN( PGA_Borderless  ),
TN( PGA_HorizPot ),
TN( PGA_HorizBody   ),
TN( PGA_VertPot  ),
TN( PGA_VertBody ),
TN( PGA_Total ),
TN( PGA_Visible  ),
TN( PGA_Top      ),
TN( PGA_NewLook  ),
TN( GA_IntuiText    ),
TN( GA_LabelImage      ),
TN( GA_TabCycle     ),
TN(    GA_SysGadget    ),
TN(    GA_SysGType     ),
TN(    GA_Previous     ),
TN(    GA_Next      ),
TN(    GA_DrawInfo     ),
/***********************************
TN( STRINGA_MaxChars   ),
TN( STRINGA_Buffer     ),
TN( STRINGA_UndoBuffer ),
TN( STRINGA_WorkBuffer ),
TN( STRINGA_BufferPos  ),
TN( STRINGA_DispPos    ),
TN( STRINGA_AltKeyMap  ),
TN( STRINGA_Font    ),
TN( STRINGA_Pens    ),
TN( STRINGA_ActivePens ),
TN( STRINGA_EditHook   ),
TN( STRINGA_EditModes  ),
TN( LAYOUTA_LayoutObj  ),
TN( LAYOUTA_Spacing    ),
TN( LAYOUTA_Orientation   ),
TN( STRINGA_ReplaceMode   ),
TN( STRINGA_FixedFieldMode   ),
TN( STRINGA_NoFilterMode  ),
TN( STRINGA_Justification ),
TN( STRINGA_LongVal    ),
TN( STRINGA_TextVal    ),
TN( STRINGA_ExitHelp   ),

TN( WA_Left         ),
TN( WA_Top       ),
TN( WA_Width     ),
TN( WA_Height    ),
TN( WA_DetailPen    ),
TN( WA_BlockPen     ),
TN( WA_IDCMP     ),
TN( WA_Flags     ),
TN( WA_Gadgets      ),
TN( WA_Checkmark    ),
TN( WA_Title     ),
TN( WA_ScreenTitle     ),
TN( WA_CustomScreen    ),
TN( WA_SuperBitMap     ),
TN( WA_MinWidth     ),
TN( WA_MinHeight    ),
TN( WA_MaxWidth     ),
TN( WA_MaxHeight    ),
TN( WA_InnerWidth      ),
TN( WA_InnerHeight     ),
TN( WA_PubScreenName   ),
TN( WA_PubScreen    ),
TN( WA_PubScreenFallBack  ),
TN( WA_WindowName      ),
TN( WA_Colors    ),
TN( WA_Zoom      ),
TN( WA_MouseQueue      ),
TN( WA_BackFill     ),
TN( WA_RptQueue     ),
TN( WA_SizeGadget      ),
TN( WA_DragBar      ),
TN( WA_DepthGadget     ),
TN( WA_CloseGadget     ),
TN( WA_Backdrop     ),
TN( WA_ReportMouse     ),
TN( WA_NoCareRefresh   ),
TN( WA_Borderless      ),
TN( WA_Activate     ),
TN( WA_RMBTrap      ),
TN( WA_SimpleRefresh   ),
TN( WA_SmartRefresh    ),
TN( WA_SizeBRight      ),
TN( WA_SizeBBottom     ),
TN( WA_AutoAdjust      ),
TN( WA_GimmeZeroZero   ),
TN( WA_MenuHelp     ),

TN( ICA_TARGET   ),
TN( ICA_MAP      ),
TN( ICSPECIAL_CODE  ),
TN( IA_Left         ),
TN( IA_Top       ),
TN( IA_Width     ),
TN( IA_Height    ),
TN( IA_FGPen     ),
TN( IA_BGPen     ),
TN( IA_Data         ),
TN( IA_LineWidth    ),
TN( IA_Pens         ),
TN( IA_Resolution      ),
TN( IA_APattern     ),
TN( IA_APatSize     ),
TN( IA_Mode         ),
TN( IA_Font         ),
TN( IA_Outline      ),
TN( IA_Recessed     ),
TN( IA_DoubleEmboss    ),
TN( IA_EdgesOnly    ),
TN( SYSIA_Size      ),
TN( SYSIA_Depth     ),
TN( SYSIA_Which     ),
TN( SYSIA_DrawInfo     ),
TN( IA_ShadowPen    ),
TN( IA_HighlightPen    ),

TN( SA_Left      ),
TN( SA_Top    ),
TN( SA_Width  ),
TN( SA_Height ),
TN( SA_Depth  ),
TN( SA_DetailPen ),
TN( SA_BlockPen  ),
TN( SA_Title  ),
TN( SA_Colors ),
TN( SA_ErrorCode ),
TN( SA_Font      ),
TN( SA_SysFont   ),
TN( SA_Type      ),
TN( SA_BitMap ),
TN( SA_PubName   ),
TN( SA_PubSig ),
TN( SA_PubTask   ),
TN( SA_DisplayID ),
TN( SA_DClip  ),
TN( SA_Overscan  ),
TN( SA_Obsolete1 ),
TN( SA_ShowTitle ),
TN( SA_Behind ),
TN( SA_Quiet  ),
TN( SA_AutoScroll   ),
TN( SA_Pens      ),
TN( SA_FullPalette  ),
***************************************/
TN( TAG_DONE   ),
TN( TAG_END ),
TN(  TAG_IGNORE ),
TN(  TAG_MORE   ),
TN(  TAG_SKIP   ),
0L,NULL
};

ostream& operator << (ostream& OS,struct TagItem *taglist)
{
      struct TagItem *tstate,*tag;

      tstate = taglist;
      while (tag = NextTagItem(&tstate))
      {
         struct TI *ti = &tagnames[0];
         while (ti->tagvalue)
         {
            if (ti->tagvalue == tag->ti_Tag)
            {
               OS << ti->tagname <<","<< (LONG)tag->ti_Data<<"\t";
               break;
            }
            else ti++;
         }
			if (ti->tagvalue==0) OS << "_UNKNOWN_\t";
      }
      return OS;
}

