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

📄 ide_bal.c

📁 NASA 开发使用的一个专家系统
💻 C
字号:
   /*******************************************************/   /*      "C" Language Integrated Production System      */   /*                                                     */   /*                  A Product Of The                   */   /*             Software Technology Branch              */   /*             NASA - Johnson Space Center             */   /*                                                     */   /*               CLIPS Version 6.00  01/01/93          */   /*              IDE Text Editor 1.00  01/01/93         */   /*                                                     */   /*                   BALANCE MODULE                    */   /*******************************************************//**************************************************************//* Purpose: Handle the Balance Command within an Edit Window  *//*                                                            *//* Principal Programmer(s):                                   *//*      Christopher J. Ortiz                                  *//*      Gary Riley                                            *//*                                                            *//* Contributing Programmer(s):                                *//*                                                            *//* Revision History:                                          *//*                                                            *//**************************************************************/#include <windows.h>#include <stdlib.h> // GDR#include "ide_bal.h"#include "ide_main.h" // GDRvoid BalanceIt ( int, int, int, int, char*, DWORD, HWND );/******************************************************** Balance: Handle Balance Command********************************************************/void Balance ( hWindow )   HWND hWindow;{  DWORD sel;	int left_middle, right_middle, text_length;	// HLOCAL textHandle; // GDR	char *text_ptr;	/*-----------------------------------------------------------+	| Get information about the current selection to be balanced |	+-----------------------------------------------------------*/	sel = SendMessage ( hWindow, EM_GETSEL, 0, 0 );	left_middle = (int)LOWORD(sel);	right_middle= (int)HIWORD(sel);	// Begin GDR	// textHandle  = (HLOCAL) SendMessage(hWindow, EM_GETHANDLE, 0, 0);	// text_length = LocalSize ( textHandle );	// text_ptr = LocalLock ( textHandle);	text_length = SendMessage(hWindow,WM_GETTEXTLENGTH,									  0,0);	text_ptr = malloc(text_length+1);	if (text_ptr == NULL )	  {		MessageBeep ( 0 );		MessageBox (hWindow,"Can not complete operation",					"Memory Low", MB_ICONSTOP | MB_TASKMODAL );		return;	  }	SendMessage(hWindow,WM_GETTEXT,text_length+1,					(LPARAM) text_ptr);	// End GDR	/*----------------------------------+	| If the selection is empty then... |   +----------------------------------*/	if ( left_middle == right_middle )	{  /*---------------------------------------------+		| if the '(' is to the right of the cursor,    |		| then all balancing should occur to the right.|		+---------------------------------------------*/		if ((text_ptr[left_middle] == '(') && (left_middle < text_length))      {  BalanceIt ( left_middle-1, left_middle+1, 1, 0,	 text_ptr, text_length, hWindow );      }      /*-------------------------------------------+      |Else if ')' is to the left of the cursor,   |		|then all balancing should occur to the left |		+-------------------------------------------*/		else if ((left_middle > 0) ? (text_ptr[left_middle-1] == ')'): 0)		{  BalanceIt ( left_middle-2, right_middle, // GDR							0, -1, text_ptr, text_length, hWindow );      }      /*------------------------------------------------------+      |Else balancing occurs to the left and right of cursor |      +------------------------------------------------------*/      else      {  BalanceIt (left_middle-1, right_middle, 0, 0,	 text_ptr, text_length, hWindow );      }   }	else   {  /*----------------------------------------------+      | Determine the number of right parentheses ')' |      |  that need to be balanced from the left side. |      +----------------------------------------------*/      int count, i;      int left_count, right_count;      count = 0;      left_count = 0;		for ( i = left_middle; i < right_middle; i++ )      {  if (text_ptr[i] == '(') count ++;	 else if ( text_ptr[i] == ')') count --;         if ( count < left_count) left_count = count;      }      /*----------------------------------------------+       | Determine the number of right parentheses ')' |      |  that need to be balanced from the left side. |      +----------------------------------------------*/      count = 0;		right_count = 0;      for ( i = right_middle-1; i >= left_middle; i--)      {  if ( text_ptr[i] == '(') count++;	 else if ( text_ptr[i] == ')') count--;         if ( count > right_count) right_count = count;      }      /*--------------------------------------------+      | Balance to the left and right of the cursor |      +--------------------------------------------*/		BalanceIt ( left_middle-1, right_middle, left_count, right_count,	 text_ptr, text_length, hWindow );	}	// Begin GDR	free(text_ptr);	// LocalUnlock ( textHandle );   // End GDR}/******************************************************** BalanceIt: Balances a selection of text by extending *    extending it to the left and right until the      *    number of left and right parentheses is balanced. ********************************************************/static void BalanceIt ( left_middle, right_middle, left_count, right_count,   text_ptr, text_length, hWindow )   int left_middle, right_middle;   int left_count, right_count;   char *text_ptr;   DWORD text_length;   HWND hWindow;{  /*-----------------------------+   | Balance the left side of the |   | text by moving left and up   |   +-----------------------------*/   while ( left_count <= 0 )   {  if ( left_middle < 0 )      {  MessageBeep(0);         return;      }      if (text_ptr[left_middle] == '(') left_count++;      else if (text_ptr[left_middle] == ')') left_count--;      left_middle--;   }   /*-------------------------------+   | Balance the right side of the  |   | text by moving right and down. |   +-------------------------------*/   while ( right_count >= 0)   {  if( right_middle > text_length )      { MessageBeep(0);        return;      }      if (text_ptr[right_middle] == '(') right_count ++;      else if ( text_ptr[right_middle] == ')') right_count --;      right_middle++;   }   /*-------------------------------------------+	| Set the current selection to balanced text |	+-------------------------------------------*/	// Begin GDR#if WIN_32	SendMessage(hWindow,EM_SETSEL,					left_middle+1,right_middle);#else	SendMessage(hWindow,EM_SETSEL,0,					MAKELONG(left_middle+1, right_middle));#endif	// End GDR	/*-----------------------------------+	| Make sure the selection is visible |	+-----------------------------------*/	SendMessage (hWindow, EM_LINESCROLL, 0,      MAKELPARAM (0, -(GetScrollPos ( hWindow, SB_HORZ))));}

⌨️ 快捷键说明

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