This is the full code of my .c file
/* main.c */
#include <Carbon/Carbon.h>
#include <jni.h>
#include "main.h"
#include <JavaVm/jni.h>
#include <Strings.h>
int IE=0;
int MW=0;
char *Convert(char *pt)
{
int len;
int i;
int j;
int k;
int ii;
int h;
char ch[25];
wchar_t
ptr=(wchar_t*)malloc(strlen(pt)4);
char
pts=(char*)malloc(strlen(pt)6+1);
mbstowcs(ptr,pt,strlen(pt));
len =strlen(pt);
i=0;
while(len!=0)
{
//printf("\n %d \n",ptr
);
i++;
len--;
}
ptr='\0';
j=0;
k=0;
h=0;
while(*ptr!='\0')
{
pts[k]='&';
pts[++k]='#';
ii=ptr[j];
if(ii==131)
{
ptr++;
ii=*ptr;
switch (ii)
{
case 159:ii=913;sprintf(ch,"%d",ii);break;
case 160:ii=914;sprintf(ch,"%d",ii);break;
case 161:ii=914;sprintf(ch,"%d",ii);break;
case 162:ii=916;sprintf(ch,"%d",ii);break;
case 163:ii=917;sprintf(ch,"%d",ii);break;
case 164:ii=918;sprintf(ch,"%d",ii);break;
case 165:ii=919;sprintf(ch,"%d",ii);break;
case 166:ii=920;sprintf(ch,"%d",ii);break;
case 167:ii=921;sprintf(ch,"%d",ii);break;
case 168:ii=922;sprintf(ch,"%d",ii);break;
case 169:ii=923;sprintf(ch,"%d",ii);break;
case 170:ii=924;sprintf(ch,"%d",ii);break;
case 171:ii=925;sprintf(ch,"%d",ii);break;
case 172:ii=926;sprintf(ch,"%d",ii);break;
case 173:ii=927;sprintf(ch,"%d",ii);break;
case 174:ii=928;sprintf(ch,"%d",ii);break;
case 175:ii=929;sprintf(ch,"%d",ii);break;
case 176:ii=931;sprintf(ch,"%d",ii);break;
case 177:ii=932;sprintf(ch,"%d",ii);break;
case 178:ii=933;sprintf(ch,"%d",ii);break;
case 179:ii=934;sprintf(ch,"%d",ii);break;
case 180:ii=935;sprintf(ch,"%d",ii);break;
case 181:ii=936;sprintf(ch,"%d",ii);break;
case 191:ii=945;sprintf(ch,"%d",ii);break;
case 192:ii=946; sprintf(ch,"%d",ii);break;
case 193:ii=947;sprintf(ch,"%d",ii);break;
case 194:ii=948;sprintf(ch,"%d",ii);break;
case 195:ii=949;sprintf(ch,"%d",ii);break;
case 196:ii=950;sprintf(ch,"%d",ii);break;
case 197:ii=951;sprintf(ch,"%d",ii);break;
case 198:ii=952;sprintf(ch,"%d",ii);break;
case 199:ii=953;sprintf(ch,"%d",ii);break;
case 200:ii=954;sprintf(ch,"%d",ii);break;
case 201:ii=955;sprintf(ch,"%d",ii);break;
case 202:ii=956;sprintf(ch,"%d",ii);break;
case 203:ii=957;sprintf(ch,"%d",ii);break;
case 204:ii=958;sprintf(ch,"%d",ii);break;
case 205:ii=959;sprintf(ch,"%d",ii);break;
case 207:ii=961;sprintf(ch,"%d",ii);break;
case 208:ii=963;sprintf(ch,"%d",ii);break;
case 209:ii=964;sprintf(ch,"%d",ii);break;
case 210:ii=965;sprintf(ch,"%d",ii);break;
case 211:ii=966;sprintf(ch,"%d",ii);break;
case 212:ii=967;sprintf(ch,"%d",ii);break;
case 213:ii=968;sprintf(ch,"%d",ii);break;
case 214:ii=969;sprintf(ch,"%d",ii);break;
}
}
else if(ii==63||ii==205||ii==206||ii==216||ii==217||ii==189||ii==192||ii==219||ii==2 20||ii==221||ii==185||ii==86||ii==222||ii==224||ii==241||ii==46||ii==47||ii==63| |ii==171||ii==142||ii==241||ii==225||ii==150||ii==136||ii==137||ii==141||ii==143 ||ii==158)
{
switch(ii)
{
case 46:ii=183;sprintf(ch,"%d",ii);break;
case 47:ii=824;sprintf(ch,"%d",ii);break;
case 63:ii=821;sprintf(ch,"%d",ii);break;
case 171:ii=180;sprintf(ch,"%d",ii);break;
case 185:ii=960;sprintf(ch,"%d",ii);break;
case 86:ii=962;sprintf(ch,"%d",ii);break;
case 205:ii=902;sprintf(ch,"%d",ii);break;
case 206:ii=904;sprintf(ch,"%d",ii);break;
case 216:ii=906;sprintf(ch,"%d",ii);break;
case 217:ii=908;sprintf(ch,"%d",ii);break;
case 142:ii=233;sprintf(ch,"%d",ii);break;
case 150:ii=241;sprintf(ch,"%d",ii);break;
case 225:ii=183;sprintf(ch,"%d",ii);break;
case 136:ii=224;sprintf(ch,"%d",ii);break;
case 137:ii=226;sprintf(ch,"%d",ii);break;
case 141:ii=231;sprintf(ch,"%d",ii);break;
case 143:ii=232;sprintf(ch,"%d",ii);break;
case 158:ii=251;sprintf(ch,"%d",ii);break;
case 189:ii=937;sprintf(ch,"%d",ii);break;
case 192:ii=940;sprintf(ch,"%d",ii);break;
case 219:ii=941;sprintf(ch,"%d",ii);break;
case 220:ii=942;sprintf(ch,"%d",ii);break;
case 221:ii=943;sprintf(ch,"%d",ii);break;
case 222:ii=972;sprintf(ch,"%d",ii);break;
case 224:ii=973;sprintf(ch,"%d",ii);break;
case 241:ii=974;sprintf(ch,"%d",ii);break;
}
}
else
{
k=k-1;
pts[k]=(char)ptr[j];
pts[k+1]='\0';
k++;
ptr++;
continue;
}
while(ch[h]!='\0')
{
pts[++k]=ch[h];
h++;
}
h=0;
pts[++k]=';';
ptr++;
k++;
}
pts[k]='\0';
return pts;
/*
printf("\n The actual value is %s",pts);
pts='\0';
ptr='\0';
free(pts);
free(ptr);*/
}
void VersionAppRunning()
{
char
buff,tempbuff;
char *str;
int length;
int i=0;
int j=0;
int flag;
int k=0;
int count=0;
ProcessSerialNumber PSN;
ProcessInfoRec info;
Str31 aProcessName;
OSErr err;
FSSpec aProcessAppSpec;
PSN.highLongOfPSN=0;
PSN.lowLongOfPSN=kNoProcess;
info.processInfoLength=sizeof(ProcessInfoRec);
info.processName=aProcessName;
info.processAppSpec=&aProcessAppSpec;
while(GetNextProcess(&PSN)==noErr)
{
if(GetProcessInformation(&PSN,&info)==noErr)
{
length=strlen( (char*) aProcessName);
str=(char*)malloc(length);
str=(char*)aProcessName;
str[strlen((char*)aProcessName)]='\0';
str[strlen((char*)aProcessName)-1]=' ';
buff=(char*)malloc(length+1);
tempbuff=(char*)malloc(length);
while(str
!='\0')
{
if(i==0 /*&& str[str[0]==32*/)
{
i++;
flag=1;
}
buff[j]=str;
tempbuff[k]=buff[j];
if(buff[j]==32)
{
tempbuff[k]='\0';
if(tempbuff[3]=='d')
{
tempbuff[4]='\0';
}
if(tempbuff[7]=='r')
{
tempbuff[8]='\0';
}
if(strcmp(tempbuff,"Internet")==0)
{
count=count+1;
tempbuff=NULL;
k=0;
k=k-1;
tempbuff=(char*)malloc(strlen(str));
}
if(count>=1 && strcmp(tempbuff,"Explorer")==0/* (strcmp(tempbuff,"Explorer")==0||strcmp(tempbuff,"Explorere")==0)*/)
{
IE=1;
tempbuff=NULL;
k=0;
k=k-1;
tempbuff=(char*)malloc(strlen(str));
count=0;
}
if(strcmp(tempbuff,"Microsoft")==0)
{
count=count+1;
tempbuff=NULL;
k=0;
k=k-1;
tempbuff=(char*)malloc(strlen(str));
}
if(count>=1 && strcmp(tempbuff,"Word")==0/
(strcmp(tempbuff,"Wordrll")==0||strcmp(tempbuff,"Wordrer")==0)/)
{
MW=1;
tempbuff=NULL;
k=0;
k=k-1;
tempbuff=(char*)malloc(strlen(str));
count=0;
}
}
j++;
i++;
k++;
}
if(flag==1)
{
buff[i-1]='\0';
tempbuff[k]='\0';
}
else
{
buff
='\0';
tempbuff[k]='\0';
}
//printf("%s\n",buff);
//printf("%d\n",IE);
//printf("%d\n",MW);
//printf("%s\n",tempbuff);
free(tempbuff);
free(buff);
tempbuff=NULL;
buff=NULL;
k=0;
i=0;
j=0;
/*
while(length!=0)
{
buff=aProcessName
;
if(buff=='\0')
{
tempBuff=buff;
printf("%s \n",tempBuff);
}
length=length-1;
}
*/
}
}
// printf("%d\n",IE);
// printf("%d\n",MW);
}
JNIEXPORT jstring JNICALL Java
JNIWrappergetWord(JNIEnv *env , jobject obj,jstring j_script)
//(JNIEnv *en , jobject obj, jstring str,jstring j_target,jstring j_location)
{
ComponentInstance theComponent;
AEDesc scriptTextDesc,resultData1;
char *returnChar;
const char *text;
jstring jstr;
Size returnSize;
OSStatus err;
OSAID scriptID, resultID;
theComponent = NULL;
AECreateDesc(typeNull, NULL, 0, &scriptTextDesc);
scriptID = kOSANullScript;
resultID = kOSANullScript;
VersionAppRunning();
if(IE==1 && MW==0)
{
text="tell application \"Internet Explorer\" \n"
"set theString to get selected text as string \n"
"if length of theString is not equal to 0 then \n"
"return theString \n"
"else \n"
"return \"NOWORD\" \n"
"end if \n"
"end tell \n";
}
if(MW==1 && IE==0)
{
text="try \n"
"tell application \"Microsoft Word\" \n"
"set str to get selection as string \n"
"if length of str is not equal to 0 then \n"
"return str \n"
"end if \n"
"end tell \n"
"on error \n"
"return \"NOWORD\" \n"
"end try \n";
}
if(MW==1 && IE==1)
{
/* text= "tell application \"Microsoft Word\" \n"
"set str to get selection as string \n"
"if length of str is 0 then \n"
"tell application \"Internet Explorer\" \n"
"set stre to get selected text as string \n"
"if length of stre is 0 then \n"
"return \"Word from I.E or word document is not selected\" \n"
"else \n"
"return stre \n"
"end if \n"
"end tell \n"
"else \n"
"return str \n"
"end if \n"
"end tell \n";*/
/*text ="tell application \"Microsoft Word\" \n"
"activate \n"
"do Visual Basic \"\n"
"Dim objwrd As Object \n"
"Dim filenum As Interger \n"
"Set objwrd=GetObject(,\"Word.Application\") \n"
"Dim str as String \n"
"str=objwrd.Selection.Words(1).Text \n"
"filenum=FreeFile \n"
"Open \"sample.txt\" For Output As filenum \n"
"Print #filenum, str \n"
"Close #filenum \n"
" \" \n"
"return \"hai\" \n"
"end tell \n" ;*/
text=
/*
"set bMsWord to boolean \n"
"set bInternet to boolean \n"
"tell application \"Finder\" \n"
"set myList to every process as list \n"
"end tell \n"
"repeat with i from 1 to count of myList \n"
"set myItem to (item i of myList) \n"
"set VIS to visible of (item i of myList) \n"
"if VIS is true and (name of myItem is \"Microsoft Word\" or name of myItem is \"Internet Explorer\") then \n"
"if name of myItem is \"Microsoft Word\" then \n"
"set bMsWord to true \n"
"else \n"
"set bInternet to true \n"
"end if \n"
"end if \n"
"end repeat \n"*/
"try \n"
// "if bInternet is true then \n"
"tell application \"Internet Explorer\" \n"
"set stre to get selected text as string \n"
"if length of stre is not equal to 0 then \n"
"return stre \n"
"end if \n"
"end tell \n"
// "end if \n"
// "if bMsWord is true then \n"
"tell application \"Microsoft Word\" \n"
"set str to get selection as string \n"
"if length of str is not equal to 0 then \n"
"return str \n"
"end if \n"
"end tell \n"
// "end if \n"
"on error \n"
"return \"NOWORD\" \n"
"end try \n"
"return \"NOWORD\" \n";
}
if(MW==0 && IE==0)
{
text="return \"NOWORD\" \n";
}
MW=0;
IE=0;
theComponent = OpenDefaultComponent(kOSAComponentType,
typeAppleScript);
if (theComponent == NULL) { err = paramErr; goto bail; }
/* put the script text into an aedesc */
err = AECreateDesc(typeChar, text,strlen(text), &scriptTextDesc);
if (err != noErr) goto bail;
/* compile the script */
err = OSACompile(theComponent, &scriptTextDesc,
kOSAModeNull, &scriptID);
if (err != noErr) goto bail;
/* run the script/get the result */
err = OSAExecute(theComponent, scriptID, kOSANullScript,
kOSAModeNull, &resultID);
if( err ==noErr)
{
err=AECreateDesc(typeNull, NULL, 0, &resultData1);
if( err ==noErr)
{
err=OSADisplay(theComponent,resultID,typeChar,kOSAModeNull,&resultData1);
returnSize=AEGetDescDataSize(&resultData1);
returnChar=malloc(returnSize);
AEGetDescData(&resultData1, returnChar,returnSize);
returnChar=Convert(returnChar);
//printf(returnChar);
// return((*env)->NewStringUTF(returnChar));
jstr=(*env)->NewStringUTF(env,returnChar);
return jstr;
}
}
bail:
AEDisposeDesc(&scriptTextDesc);
if (scriptID != kOSANullScript) OSADispose(theComponent, scriptID);
if (resultID != kOSANullScript) OSADispose(theComponent, resultID);
if (theComponent != NULL) CloseComponent(theComponent);
return (jstring)err;
}
I Mac Mac OS X (10.4.8) Intel based Mac