/* _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

	縲先ゥ溯�讎りヲ√€�    : 蜈ア譛峨Γ繝「繝ェ讀懃エ「逕ィWHERE蜿・隗」譫�/邱ィ髮�API
					  蜈ア譛峨Γ繝「繝ェ螳夂セゥ繝輔ぃ繧、繝ォ縺ョ險倩ソー蜀�ョケ繧定ァ」譫舌@縺ヲ縲∝他縺ウ蜈��繝ュ繧ー繝ゥ繝�
					  縺ォ蜀�ョケ繧定ソ泌唆縺吶k

	縲蝉ス懈�譌・縲�		: 2021.04.23

	縲仙他蜃コ蠖「蠑上€�	: GG_SHM1003 (
						 char *inWhere				# 隗」譫仙ッセ雎。WHERE蜿・��in��
						,char *outWhere				# 邱ィ髮�オ先棡WHERE蜿・��out��
					  )
	縲先綾繧雁€、縲�		: int                           #  0 : 豁」蟶ク邨ゆコ�
													# -1 : 逡ー蟶ク邨ゆコ�
													#  n : 逡ー蟶ク邨ゆコ�€]縺ッinWhere縺ョ繧ィ繝ゥ繝シ邂�園

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include "GG_SHMCOM.h"

int	GG_SHM1003 ( char *inWhere , char *outWhere ) {
	
	int  inPos  = 0 ;
	int  outPos = 0 ;
	char Ketugo [ 20 ] ;
	int  whereStat = 0 ; /* 0 : 蟾ヲ霎コ邱ィ髮�クュ�域ッ碑シ�擅莉カ蜷ォ繧€�� , 1 : 蜿ウ霎コ邱ィ髮�クュ , 2 : and/or 繧オ繝シ繝∽クュ */

	memset ( Ketugo , 0x00 , sizeof(Ketugo) ) ;

	// 繧ケ繝壹�繧ケ縺励°險倩ソー縺ョ縺ェ縺ЦHERE蜿・縺ッ繧ィ繝ゥ繝シ邨ゆコ�
	for (;inPos < strlen(inWhere) ;inPos++)
		if ( inWhere [ inPos ] != ' ' ) break ; 
	if ( inPos == strlen(inWhere) ) return ( -1 ) ;

	/* _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		WHERE蜿・縺ョ隗」譫舌�邱ィ髮��逅�
		蜈ア譛峨Γ繝「繝ェ繧「繧ッ繧サ繧ケ逕ィ縺ョWHERE蜿・縺ッ縲∽サ・荳九�譚。莉カ縺ァ縺ゅk蠢�ヲ√′縺ゅk
			1. 蜷���岼縺ィ豈碑シ�擅莉カ縲∫オ仙粋譚。莉カ縺ッ縲∝濠隗偵せ繝壹�繧ケ縺ァ縺ゅk縺薙→
			2. 豈碑シ�擅莉カ縺ッ縲�6遞ョ��=,<,<=,>,>=,!=)縺ョ縺�★繧後°縺ァ縺ゅk縺薙→
			3. 邨仙粋譚。莉カ縺ッ縲�2遞ョ��and,or�峨�縺�★繧後°縺ァ縲∝�縺ヲ縺ョ邨仙粋譚。莉カ縺ッ蜷後§縺ァ縺ゅk縺薙→
		1.縺ォ縺、縺�※縺ッ縲∽ク贋ス喉P縺九i貂。縺輔l縺欷HERE蜿・繧堤キィ髮�@縺ヲ縲∵ュ」縺励>蠖「縺ォ邱ィ髮�☆繧九€�
		2,3.縺ォ縺、縺�※縺ッ縲∬ェ、繧翫′縺ゅ▲縺溷�エ蜷医�繧ィ繝ゥ繝シ繝ェ繧ソ繝シ繝ウ縺吶k縲�
 	_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ */

	for (;;) {
		// 蟾ヲ霎コ鬆�岼縺セ縺溘�豈碑シ�擅莉カ縺ョ蛻�梵繝サ邱ィ髮�
		if ( whereStat == 0 ) {	
			if ( inWhere [ inPos ] == '=' ) {
				outWhere [ outPos ]     = ' ' ;						// 豈碑シ�擅莉カ縲�=縲阪�蜑榊セ後↓繧ケ繝壹�繧ケ繧堤ゥコ縺代k
				outWhere [ outPos + 1 ] = inWhere [ inPos ] ;
				outWhere [ outPos + 2 ] = ' ' ;
				inPos  ++ ;
				outPos += 3 ;
				for ( ; inPos < strlen(inWhere) ; inPos++ )
					if ( inWhere [ inPos ] != ' ' ) break ; 
				whereStat = 1 ;										// 蜿ウ霎コ縺ョ髢句ァ倶ス咲スョ縺ァwhereSet=1繧定ィュ螳�
			} else if ( inWhere [ inPos ] == '<' ||
						inWhere [ inPos ] == '>' ) {
				outWhere [ outPos ]     = ' ' ;						// 豈碑シ�擅莉カ縲�>縲阪€�<縲阪�譎ゅ€∵ッ碑シ�擅莉カ縺ョ蜑阪↓繧ケ繝壹�繧ケ繧堤ゥコ縺代k
				outWhere [ outPos + 1 ] = inWhere [ inPos ] ;
				if ( inWhere [ inPos  + 1 ] == '=' ) {
					outWhere [ outPos + 2 ] = inWhere [ inPos + 1 ] ;// 縲�>縲阪€�<縲阪�谺。縺後€�=縲阪�蝣エ蜷医€√€�=縲阪r縺昴�縺セ縺セ莉倅ク�
					inPos  += 2 ;
					outPos += 3 ;
				} else {
					inPos  ++ ;
					outPos += 2 ;
				}
				outWhere [ outPos ] = ' ' ;							// 豈碑シ�擅莉カ縺ョ蠕後↓繧ケ繝壹�繧ケ繧堤ゥコ縺代k
				outPos ++ ;
				for ( ; inPos < strlen(inWhere) ; inPos++ )
					if ( inWhere [ inPos ] != ' ' ) break ;
				whereStat = 1 ;										// 蜿ウ霎コ縺ョ髢句ァ倶ス咲スョ縺ァwhereSet=1繧定ィュ螳�
			} else if ( inWhere [ inPos ] == '!' ) {
				outWhere [ outPos ]     = ' ' ;						// 豈碑シ�擅莉カ縲�!縲阪�譎ゅ€∵ッ碑シ�擅莉カ縺ョ蜑阪↓繧ケ繝壹�繧ケ繧堤ゥコ縺代k
				outWhere [ outPos + 1 ] = inWhere[ inPos ] ;
				if ( inWhere[ inPos + 1 ] == '=' ) {
					outWhere [ outPos + 2 ] = inWhere [ inPos + 1 ] ;// 縲�!縲阪�谺。縺後€�=縲阪�蝣エ蜷医€√€�=縲阪r縺昴�縺セ縺セ莉倅ク�
					inPos  += 2 ;
					outPos += 3 ;
				} else {
					return ( inPos ) ;								// 縲�!縲阪�谺。縺後€�=縲堺サ・螟悶�譎ゅ�繧ィ繝ゥ繝シ邨ゆコ�
				}
				outWhere [ outPos ] = ' ' ;							// 豈碑シ�擅莉カ縺ョ蠕後↓繧ケ繝壹�繧ケ繧堤ゥコ縺代k
				outPos ++ ;
				for ( ; inPos < strlen(inWhere) ; inPos++ )
					if ( inWhere [ inPos ] != ' ' ) break ;
				whereStat = 1 ;										// 蜿ウ霎コ縺ョ髢句ァ倶ス咲スョ縺ァwhereSet=1繧定ィュ螳�
			} else if ( inWhere [ inPos ] == ' ' ) {
				inPos  ++ ;											// 荳崎ヲ√↑繧ケ繝壹�繧ケ縺ッ蜑企勁
			} else {
				outWhere [ outPos ] = inWhere [ inPos ] ;			// 蟾ヲ霎コ鬆�岼蜷咲ァー繧�1繝舌う繝医★縺、莉倅ク�
				inPos  ++ ;
				outPos ++ ;
			}
			if ( inPos >= strlen(inWhere) ) return ( -1 ) ;
		} else
		// 蜿ウ霎コ鬆�岼縺ョ蛻�梵繝サ邱ィ髮�
		if ( whereStat == 1 ) {
			if ( inWhere [ inPos ] != ' ' ) {
				outWhere [ outPos ] = inWhere [ inPos ] ;			// 繧ケ繝壹�繧ケ莉・螟悶�蛟、縺ッ蜿ウ霎コ鬆�岼繧�1繝舌う繝医★縺、莉倅ク�
				inPos  ++ ;
				outPos ++ ;
				if ( inPos >= strlen(inWhere) ) {
					outWhere [ outPos ] = '\0' ;
					return ( 0 ) ;									// inWhere繧オ繝シ繝√′螳御コ�@縺溘◆繧∵ュ」蟶ク邨ゆコ�
				}
			} else {												// 繧ケ繝壹�繧ケ縺後≠縺」縺溷�エ蜷�
				for ( ; inPos < strlen(inWhere) ; inPos++ )
					if ( inWhere [ inPos ] != ' ' ) break ;
				if ( inPos >= strlen(inWhere) ) {
					outWhere [ outPos ] = '\0' ;
					return ( 0 ) ;									// 繧ケ繝壹�繧ケ縺九i谺。縺ョ譁�ュ怜�繧偵し繝シ繝√@縺ヲ縲√せ繝壹�繧ケ
																	// 縺後↑縺代l縺ー縲∵ュ」蟶ク邨ゆコ�
				} else {
					whereStat = 2 ;									// 繧ケ繝壹�繧ケ莉・螟悶′縺ゅl縺ー縲『hereStat=2繧定ィュ螳�
				}
			}
		} else
		// 邨仙粋譚。莉カ縺ョ蛻�梵繝サ邱ィ髮�
		if ( whereStat == 2 ) {
			char KetugoWork [ 20 ] ;
			int  KetugoPos = 0 ;
			for ( ; inPos < strlen(inWhere) ; inPos++ ) {			
				if ( inWhere [ inPos ] != ' ' ) {
					KetugoWork [ KetugoPos ] = inWhere [ inPos ] ;	// 繧ケ繝壹�繧ケ莉・螟悶�邨仙粋譚。莉カ縺ォ1繝舌う繝井サ倅ク�
					KetugoPos ++ ;
				} else {
					KetugoWork [ KetugoPos ] = '\0' ;
					inPos ++ ;
					break ;											// 繧ケ繝壹�繧ケ縺後≠繧後�邨仙粋譚。莉カ縺ッ邨ゅo繧�
				}
			}
			if ( Ketugo[0] == '\0' ) {
				if ( strcmp ( KetugoWork , "and" ) == 0 ||
					 strcmp ( KetugoWork , "or"  ) == 0 ) {
					strcpy ( Ketugo , KetugoWork ) ;				// 譛€蛻昴�邨仙粋譚。莉カ縺ョ蝣エ蜷医€゜etugo縺ォand/or繧定ィュ螳�
				} else {
					return ( inPos ) ;								// and/or莉・螟悶�繧ィ繝ゥ繝シ邨ゆコ�
				}
			} else if ( 0 == strcmp ( Ketugo , KetugoWork ) ) {
				strcpy ( Ketugo , KetugoWork ) ;					// 2蝗樒岼莉・髯阪�邨仙粋譚。莉カ縺ョ蝣エ蜷医€∝�蝗槭→蜷後§縺ェ繧碓K
			} else {
				return ( inPos ) ;									// 逡ー縺ェ繧狗オ仙粋譚。莉カ縺ョ蝣エ蜷医€√お繝ゥ繝シ邨ゆコ�
			}
			outWhere [ outPos ] = ' ' ;								// 邨仙粋譚。莉カ縺ィ蜑榊セ後�繧ケ繝壹�繧ケ繧剃サ倅ク�
			strcpy ( outWhere + outPos + 1 , Ketugo ) ;
			outWhere [ outPos + 1 + strlen(Ketugo) ] = ' ' ;
			outPos += strlen ( Ketugo ) + 2 ;

			for ( ; inPos < strlen(inWhere) ; inPos++ )
				if ( inWhere [ inPos ] != ' ' ) break ; 
			if ( inPos >= strlen(inWhere) ) return ( -1 ) ;
			whereStat = 0 ;											// 繧ケ繝壹�繧ケ莉・螟悶′縺ゅl縺ー縲『hereStat=0繧定ィュ螳�
		}
	}
}