⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test15.c

📁 安装DDD之前
💻 C
📖 第 1 页 / 共 5 页
字号:
/* $Id: test15.c,v 1.7 2001/05/30 08:15:14 amai Exp $ *//** --------------------------------------------------------------- **/#include <stdlib.h>#include <stdio.h>#include <ctype.h>#include <Xm/TextP.h>#include <Xm/TextStrSoP.h>#include <Xm/Text.h>#include <Xm/Form.h>#include <Xm/MainW.h>#include <Xm/PushB.h>#include <Xm/CascadeB.h>#include <Xm/RowColumn.h>#include <Xm/ScrolledW.h>XtAppContext	app_context;XmTextWidget 	text = 0;int argInitialString = False ;int argLongString = False ;int argStringValues = False ;int argShowDrawCursor = False ;int argShowReadProc = False ;#ifndef Out_Rows#define Out_XDraw(OUTPUT) ( OUTPUT -> insertx )#define Out_YDraw(OUTPUT) ( OUTPUT -> inserty )#define Out_XOffset(OUTPUT) ( OUTPUT -> hoffset )#define Out_DrawGC(OUTPUT) ( OUTPUT -> gc )#define Out_DrawGCInverted(OUTPUT) ( OUTPUT -> have_inverted_image_gc )#define Out_Rows(OUTPUT) ( OUTPUT -> rows )#define Text_OutputData( WID )	( ((XmTextWidget)WID) -> text.output -> data )#define Text_InputData( WID )	( ((XmTextWidget)WID) -> text.input -> data )#define Text_Line( WID )	( ((XmTextWidget)WID) -> text.line )#define Text_LineTable( WID )	( ((XmTextWidget)WID) -> text.line_table )#define Text_LastPos( WID )	( ((XmTextWidget)WID) -> text.last_position )#define Text_Source( WID )	( ((XmTextWidget)WID) -> text.source )#define Text_TopLine( WID )	( ((XmTextWidget)WID) -> text.top_line )#define Text_TotalLines( WID )	( ((XmTextWidget)WID) -> text.total_lines )#define Text_Highlight( WID )	( ((XmTextWidget)WID) -> text.highlight )#define Text_OldHighlight( WID )	( ((XmTextWidget)WID) -> text.old_highlight )#define Text_CurPos( WID )	( ((XmTextWidget)WID) -> text.cursor_position )#define Out_Font( OUTPUT ) ( OUTPUT -> font )#define Out_TabWidth( OUTPUT ) ( OUTPUT -> tabwidth )#define Out_FontHeight( OUTPUT ) ( OUTPUT -> font -> ascent + OUTPUT -> font -> descent )#define Text_LastTopChar(w) (((XmTextWidget)(w))->text.last_top_char)#if XmVersion == 2000extern LineNum _XmTextPosToLine(XmTextWidget widget,                                XmTextPosition position);#endif#endif#ifndef Text#define Text( WID )	( ((XmTextWidget)WID) -> text )#define Source_CurPos(SOURCE) ( SOURCE -> data -> widgets[0] -> text.cursor_position )#endifstatic int indent = 0;void ShowRangeData ( XmTextWidget, int, Boolean  );void ShowLine ( XmTextWidget, LineNum, int  );void ShowLineTable ( XmTextWidget, LineNum, int  );void ShowSecondarySelectionData ( XmTextWidget );void ShowHighlightData ( XmTextWidget );void ShowSelectionData ( XmTextWidget );/* Pointers to hooks which I "catch" */static	DrawProc DefaultDraw = 0;ReplaceProc DefaultReplace;static DrawInsertionPointProc DefaultDrawInsertionPoint;static MakePositionVisibleProc DefaultMakePositionVisible;ReadProc DefaultRead;static GetSelectionProc DefaultGetSelectionProc = 0;static MeasureLineProc DefaultMeasureLineProc = 0;static MoveLinesProc DefaultMoveLines;static SetSelectionProc DefaultSetSelectionProc = 0;static InputInvalidateProc DefaultInputInvalidateProc = 0;static InvalidateProc DefaultOutputInvalidateProc = 0;static CountLinesProc DefaultCountLines = 0;static InputGetSecResProc DefaultInputGetSecResDataProc = 0;static ScanProc DefaultScanProc = 0;XtProc DefaultClassInitialize ;XtWidgetClassProc DefaultClassPartInitialize ;OutputCreateProc DefaultOutputCreate;InputCreateProc DefaultInputCreate;XtRealizeProc DefaultRealize ;XtWidgetProc DefaultResize;XtExposeProc DefaultExpose ;XYToPosProc DefaultXYToPos ;PosToXYProc DefaultPosToXY ;GetPreferredSizeProc DefaultGetPreferredSize ;SetValuesProc DefaultOutputSetValues ;GetValuesProc DefaultOutputGetValues ;XmRealizeOutProc DefaultOutputRealize ;XmResizeFlagProc DefaultOutputResize;XtExposeProc DefaultOutputExpose ;XtInitProc DefaultInitialize ;XmTextStatus MyReplaceProc( XmTextWidget, XEvent *, XmTextPosition *,    		XmTextPosition *, XmTextBlock , Boolean);XmTextPosition MyReadProc( XmTextSource, XmTextPosition, XmTextPosition, XmTextBlock );XmTextPosition MyXYToPos( XmTextWidget, Position, Position );XmTextPosition MyScanProc( XmTextSource, XmTextPosition, XmTextScanType,    		XmTextScanDirection, int, Boolean);Boolean MyGetSelectionProc  ( XmTextSource , XmTextPosition* , XmTextPosition* );Boolean MyMeasureLineProc ( XmTextWidget, LineNum, XmTextPosition, XmTextPosition *,			LineTableExtraRec **);Boolean MyMoveLinesProc( XmTextWidget, LineNum, LineNum, LineNum );Boolean MyPosToXY( XmTextWidget, XmTextPosition, Position *, Position *);Boolean MyOutputSetValues( Widget, Widget, Widget, ArgList, Cardinal*);int MyCountLines ( XmTextSource, XmTextPosition, unsigned long);void MyDraw ( XmTextWidget, LineNum, XmTextPosition, XmTextPosition, XmHighlightMode);void MyDrawInsertionPointProc ( XmTextWidget, XmTextPosition, OnOrOff );void MyMakePositionVisibleProc ( XmTextWidget, XmTextPosition );void MyInvalidateProc ( XmTextWidget, XmTextPosition, XmTextPosition, long );void MySetSelectionProc ( XmTextSource, XmTextPosition, XmTextPosition, Time );void MyInputInvalidateProc ( XmTextWidget, XmTextPosition, XmTextPosition, long );void MyClassInitialize();void MyClassPartInitialize ( WidgetClass wclass);void MyOutputCreate( Widget, ArgList, Cardinal);void MyInputCreate( Widget, ArgList, Cardinal);void MyRealize( Widget, XtValueMask*, XSetWindowAttributes*);void MyResize ( Widget );void MyExpose ( Widget, XEvent*, Region );void MyGetPreferredSize( Widget, Dimension *, Dimension *);void MyOutputGetValues( Widget, ArgList, Cardinal);void MyOutputRealize( Widget, Mask *, XSetWindowAttributes *);void MyOutputResize( Widget, Boolean);void MyOutputExpose( Widget, XEvent*, Region );void MyInitialize ( Widget, Widget, ArgList, Cardinal* );XmTextPart copyOfTextInternals;XmSourceDataRec copyOfTextSourceInternals;InputDataRec copyOfTextInputInternals;OutputDataRec copyOfTextOutputInternals;RangeRec copyOfRangeAtIndex0;LineRec copyOfLineRec [ 100 ]; /* 100 seems to be a reasonably enough huge number */Boolean widgetInitialized = False;XmTextLineTableRec copyOfLineTable[101];static int printedBanner =0;void InitTextInternals ( ){	memset ( &copyOfTextInternals, 170, sizeof ( XmTextPart ) );	memset ( &copyOfTextSourceInternals, 170, sizeof ( XmSourceDataRec ) );	copyOfTextSourceInternals.ptr = copyOfTextSourceInternals.value = 		copyOfTextSourceInternals.gap_start = copyOfTextSourceInternals.gap_end = 		copyOfTextSourceInternals.PSWC_NWLN = 0;	memset ( &copyOfTextInputInternals, 170, sizeof ( InputDataRec ) );	memset ( &copyOfTextOutputInternals, 170, sizeof ( OutputDataRec ) );	memset ( &copyOfRangeAtIndex0, 170, sizeof ( RangeRec ) );	memset ( copyOfLineRec, 170, sizeof ( LineRec ) * 100 ) ; /*	memset ( &copyOfLineTable, 170, sizeof ( LineTable ) * 100 ) ; *//*CP: due to a change in type from Motif 1.2 to 2.0 */	copyOfTextInternals.cursor_position_x = 0;}void CopyTextInternals ( XmTextWidget toBeCopied ){	memcpy ( &copyOfTextInternals, &(toBeCopied -> text), sizeof ( XmTextPart ) );	if ( ! widgetInitialized )		return;	memcpy ( &copyOfTextSourceInternals, toBeCopied -> text.source->data, sizeof ( XmSourceDataRec ) );	memcpy ( &copyOfTextInputInternals, toBeCopied -> text.input->data, sizeof ( InputDataRec ) );	memcpy ( &copyOfTextOutputInternals, toBeCopied -> text.output->data, sizeof ( OutputDataRec ) );	memcpy ( &copyOfRangeAtIndex0, &toBeCopied -> text.repaint.range[0], sizeof ( RangeRec ) );	memcpy ( copyOfLineRec, toBeCopied -> text.line, 		sizeof ( LineRec ) * ( toBeCopied -> text.maximum_lines < 100 ? toBeCopied -> text.maximum_lines : 100 ) );	if ( toBeCopied -> text.line_table ) 		memcpy ( copyOfLineTable, toBeCopied -> text.line_table, 			sizeof ( XmTextLineTableRec ) * ( toBeCopied -> text.total_lines < 100 ? toBeCopied -> text.total_lines : 100 ) );}void PrintTime ( Widget w, Time timeToCheck ){	Time lastTime =	XtLastTimestampProcessed ( XtDisplay ( w ) ) ;	if ( timeToCheck == lastTime )		printf ( " is last processed timestamp\n" );	else if ( timeToCheck == 0 )		printf ( " 0\n" );	else		printf ( " %u ( is the difference between last time and set time ) \n",			(unsigned int)(lastTime - timeToCheck) );}void PrintDiffDesc ( char* part, char* start ){	printf ( "\t\t%s %s", part, start );}#define PRINT_BANNER \		if ( ! printedBanner )		\			{			\			printf ( "\tDiffing text with previous saved version:\n" ); \			printedBanner = 1;	\			}			\void PrintInts ( char* part, char* nameToBeChecked, long int copy, long int original ){	if ( copy != original )                 {                PRINT_BANNER                 PrintDiffDesc ( part, nameToBeChecked );                if ( copy == PASTENDPOS )                        printf ( " ( old = PASTENDPOS  new = %li )\n", original );                else if ( original == PASTENDPOS )                        printf ( " ( old = %li  new = PASTENDPOS )\n", copy );                else                        printf ( " ( old = %li  new = %li )\n", copy, original );                }}#define CHECK_X_SMALL_VALUE(nameToBeChecked,format,cast) \	if ( COPY.nameToBeChecked != COMPARE.nameToBeChecked ) \		{				\		PRINT_BANNER			\		PrintDiffDesc ( PART, #nameToBeChecked );	\                printf ( format, COPY.nameToBeChecked, COMPARE.nameToBeChecked ); \		}void PrintDiffs ( XmTextWidget toBeCompared ){	int i;	XmTextPart textPart = toBeCompared->text;	printedBanner = 0;	if ( text != 0 && text != toBeCompared )		/* for when I create another text I do not want to see them			cross pollution each other */		return;#define CHECK_X_CHANGED(nameToBeChecked,cast) \	if ( COPY.nameToBeChecked != COMPARE.nameToBeChecked ) \		{				\		PRINT_BANNER			\		PrintDiffDesc ( PART, #nameToBeChecked );	\		if ( ! COMPARE.nameToBeChecked ) \			printf ( " is zero now\n" ); \		else if ( ! COPY.nameToBeChecked ) \			printf ( " is non-zero now\n" ); \		else 		\		    printf ( " has changed values\n" ); \		}#define CHECK_X_VALUE(nameToBeChecked,format,cast) \	PrintInts ( PART, #nameToBeChecked, (long int)COPY.nameToBeChecked, (long int)COMPARE.nameToBeChecked );#define CHECK_TIME(nameToBeChecked) \	if ( COPY.nameToBeChecked != COMPARE.nameToBeChecked ) \		{				\		PRINT_BANNER			\		PrintDiffDesc ( PART, #nameToBeChecked );	\		PrintTime((Widget)toBeCompared, COMPARE.nameToBeChecked ); \		}#define CHECK_PTR_CHANGED(nameToBeChecked) \	CHECK_X_CHANGED(nameToBeChecked, void* )#define CHECK_PTR_VALUE(nameToBeChecked) \	CHECK_X_VALUE(nameToBeChecked, " ( old = %p  new = %p )\n", void* )#define CHECK_INT_VALUE(nameToBeChecked) \	CHECK_X_VALUE(nameToBeChecked, " ( old = %i  new = %i )\n", int )#define CHECK_LONG_VALUE(nameToBeChecked) \	CHECK_X_VALUE(nameToBeChecked, " ( old = %li  new = %li )\n", long )#define CHECK_CHAR_VALUE(nameToBeChecked) \	CHECK_X_SMALL_VALUE(nameToBeChecked, " ( old = %i  new = %i )\n", char )#define CHECK_STRING_VALUE(nameToBeChecked) \	if ( COPY.nameToBeChecked != COMPARE.nameToBeChecked ) \		{				\		PRINT_BANNER			\		PrintDiffDesc ( PART, #nameToBeChecked );	\		printf ( " ( old = <%s>  new = <%s> )\n", 	\			((char*)COPY.nameToBeChecked)? (char*)COPY.nameToBeChecked : "", \			((char*)COMPARE.nameToBeChecked)? (char*)COMPARE.nameToBeChecked  : ""); \		}#define CHECK_SHORT_VALUE(nameToBeChecked) \	CHECK_X_VALUE(nameToBeChecked, " ( old = %i  new = %i )\n", short )#define COPY copyOfTextInternals#define COMPARE textPart#define PART "       "	CHECK_PTR_CHANGED ( activate_callback )	CHECK_PTR_CHANGED ( focus_callback )	CHECK_PTR_CHANGED ( losing_focus_callback )	CHECK_PTR_CHANGED ( value_changed_callback )	CHECK_PTR_CHANGED ( modify_verify_callback )	CHECK_PTR_CHANGED ( wcs_modify_verify_callback )	CHECK_PTR_CHANGED ( motion_verify_callback )	CHECK_PTR_CHANGED ( gain_primary_callback )	CHECK_PTR_CHANGED ( lose_primary_callback )	CHECK_PTR_CHANGED ( value )	CHECK_PTR_CHANGED ( wc_value ) 	CHECK_INT_VALUE ( margin_height )	CHECK_INT_VALUE ( margin_width )#define NITTY_GRITTY_POS#ifdef NITTY_GRITTY_POS	CHECK_INT_VALUE ( cursor_position_x )#endif	CHECK_PTR_CHANGED ( output_create )	CHECK_PTR_CHANGED ( input_create )	CHECK_INT_VALUE ( top_character )	CHECK_INT_VALUE ( bottom_position )	CHECK_INT_VALUE ( cursor_position )	CHECK_INT_VALUE ( max_length )	CHECK_INT_VALUE ( edit_mode )	CHECK_CHAR_VALUE ( auto_show_cursor_position )	CHECK_CHAR_VALUE ( editable )	CHECK_CHAR_VALUE ( verify_bell )	CHECK_CHAR_VALUE ( add_mode )	CHECK_CHAR_VALUE ( traversed )	CHECK_CHAR_VALUE ( in_redisplay )	CHECK_CHAR_VALUE ( needs_redisplay )	CHECK_CHAR_VALUE ( in_refigure_lines )	CHECK_CHAR_VALUE ( needs_refigure_lines )	CHECK_CHAR_VALUE ( in_setvalues )	CHECK_CHAR_VALUE ( in_resize )	CHECK_CHAR_VALUE ( in_expose )	CHECK_CHAR_VALUE ( highlight_changed )	if ( widgetInitialized && Text( toBeCompared ) . highlight_changed &&			! copyOfTextInternals . highlight_changed  )		ShowHighlightData ( toBeCompared );	CHECK_CHAR_VALUE ( pendingoff )	CHECK_CHAR_VALUE ( char_size )	CHECK_CHAR_VALUE ( on_or_off )	CHECK_INT_VALUE ( first_position )	CHECK_INT_VALUE ( last_position )	CHECK_INT_VALUE ( forget_past )	CHECK_INT_VALUE ( force_display )	CHECK_INT_VALUE ( new_top )	CHECK_INT_VALUE ( last_top_char )	CHECK_INT_VALUE ( dest_position )	CHECK_INT_VALUE ( disable_depth )	CHECK_INT_VALUE ( pending_scroll )	CHECK_INT_VALUE ( total_lines )	if ( widgetInitialized && textPart.line_table && textPart.total_lines > copyOfTextInternals.total_lines )		for ( i = 0; i <= textPart.total_lines; i++ )			{			ShowLineTable ( toBeCompared, i, True );			}	else if ( widgetInitialized && textPart.line_table )		{		for ( i = 0; i < textPart.total_lines && i < 100; i++ )			if ( copyOfLineTable[i].start_pos != textPart.line_table[i].start_pos )				{				ShowLineTable ( toBeCompared, i, True );				}		}	CHECK_INT_VALUE ( top_line )	CHECK_INT_VALUE ( vsbar_scrolling )	CHECK_INT_VALUE ( number_lines )/*	if ( textPart.number_lines > copyOfTextInternals.number_lines )		ShowLine ( toBeCompared, textPart.number_lines - 1, True );*/	CHECK_INT_VALUE ( maximum_lines )	CHECK_PTR_CHANGED ( line )	if ( widgetInitialized && textPart.line != copyOfTextInternals.line )		{		int i = (copyOfTextInternals.maximum_lines>0 ? copyOfTextInternals.maximum_lines : 0);		for ( ; i < textPart.maximum_lines ; i ++ )			{			Line lineData = &textPart.line [ i ];			if ( lineData -> changed_position != 0 )				{				static int isInitialized = 0;				if ( isInitialized )					{					printf ("Motif does not intialize these properly so I am doing it so that it is easier to may comparisions later\n");					isInitialized = 1;					}				lineData -> changed_position = 0;				}			}		}	if ( widgetInitialized  )		for ( i = 0; i < textPart.maximum_lines ; i ++ )			if ( copyOfLineRec[i].start != textPart.line[i].start				|| copyOfLineRec[i].changed != textPart.line[i].changed				|| copyOfLineRec[i].extra != textPart.line[i].extra				|| copyOfLineRec[i].past_end != textPart.line[i].past_end				|| copyOfLineRec[i].changed_position != textPart.line[i].changed_position )				{				PRINT_BANNER				if ( copyOfLineRec[i].start >=  0 ) /*CP: This means that 						the correct values have not yet been initialized here */				    {					    if ( copyOfLineRec[i].start != textPart.line[i].start )					printf ( " \t\t\t\tstart was %i\n", (int) copyOfLineRec[i].start);				    if ( copyOfLineRec[i].changed != textPart.line[i].changed )					printf ( " \t\t\t\tchanged was %s\n", 							(copyOfLineRec[i].changed?"true":"false" ) );				    if ( copyOfLineRec[i].changed_position != textPart.line[i].changed_position )					printf ( " \t\t\t\tchanged_position was %i\n",  							(int)copyOfLineRec[i].changed_position );				    if ( copyOfLineRec[i].past_end != textPart.line[i].past_end )					printf ( " \t\t\t\tpast_end was %s\n", 							(copyOfLineRec[i].past_end?"true":"false" ) );				    if ( copyOfLineRec[i].extra != textPart.line[i].extra )					{					printf ( " \t\t\t\textra ptr changed " );					if ( i > 0 && textPart.line[i].extra == copyOfLineRec[i-1].extra )						printf ( "( copy of prev line's extra !)" );					if ( i > 0 && textPart.line[i].extra == copyOfLineRec[i+1].extra )						printf ( "( copy of next line's extra !)" );					printf ( "\n" );					}				    }				ShowLine  ( toBeCompared, i, True );				}	CHECK_PTR_CHANGED ( repaint.range )	CHECK_PTR_CHANGED ( highlight.list )	CHECK_PTR_CHANGED ( old_highlight.list )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -