100 lines
2.6 KiB
C++
100 lines
2.6 KiB
C++
/////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////
|
|
//
|
|
// LoadUnicodeString
|
|
//
|
|
/////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////
|
|
#include "CKAll.h"
|
|
|
|
CKObjectDeclaration *FillBehaviorLoadUnicodeStringDecl();
|
|
CKERROR CreateLoadUnicodeStringProto(CKBehaviorPrototype **);
|
|
int LoadUnicodeString(const CKBehaviorContext& behcontext);
|
|
|
|
|
|
CKObjectDeclaration *FillBehaviorLoadUnicodeStringDecl()
|
|
{
|
|
CKObjectDeclaration *od = CreateCKObjectDeclaration("Load Unicode String");
|
|
od->SetDescription("Loads an unicode string from a file.");
|
|
/* rem:
|
|
<SPAN CLASS=in>In: </SPAN>triggers the process.<BR>
|
|
<SPAN CLASS=out>Out: </SPAN>is activated when the process is completed.<BR>
|
|
<BR>
|
|
<SPAN CLASS=pin>File: </SPAN>name of the file containing the string to load. Must be given as an absolute path or relative to the .cmo or the .exe.<BR>
|
|
<BR>
|
|
<SPAN CLASS=pout>String: </SPAN>the loaded string.<BR>
|
|
*/
|
|
od->SetCategory("Interface/Text");
|
|
od->SetType( CKDLL_BEHAVIORPROTOTYPE);
|
|
od->SetGuid(CKGUID(0x391555d7,0x42f25aae));
|
|
od->SetAuthorGuid(VIRTOOLS_GUID);
|
|
od->SetAuthorName("Virtools");
|
|
od->SetVersion(0x00010000);
|
|
od->SetCreationFunction(CreateLoadUnicodeStringProto);
|
|
od->SetCompatibleClassId(CKCID_BEOBJECT);
|
|
return od;
|
|
}
|
|
|
|
|
|
CKERROR CreateLoadUnicodeStringProto(CKBehaviorPrototype **pproto)
|
|
{
|
|
CKBehaviorPrototype *proto = CreateCKBehaviorPrototype("Load Unicode String");
|
|
if(!proto) return CKERR_OUTOFMEMORY;
|
|
|
|
proto->DeclareInput("In");
|
|
proto->DeclareOutput("Out");
|
|
proto->DeclareOutput("File Error");
|
|
|
|
proto->DeclareInParameter("File",CKPGUID_STRING);
|
|
|
|
proto->DeclareOutParameter("UString",CKPGUID_UNICODESTRING);
|
|
|
|
proto->SetFlags(CK_BEHAVIORPROTOTYPE_NORMAL);
|
|
proto->SetFunction(LoadUnicodeString);
|
|
|
|
*pproto = proto;
|
|
return CK_OK;
|
|
|
|
}
|
|
|
|
|
|
int LoadUnicodeString(const CKBehaviorContext& behcontext)
|
|
{
|
|
CKBehavior* beh = behcontext.Behavior;
|
|
|
|
///
|
|
// Input / Outputs
|
|
beh->ActivateInput(0,FALSE);
|
|
|
|
CKSTRING string = (CKSTRING)beh->GetInputParameterReadDataPtr(0);
|
|
XString filename(string);
|
|
behcontext.Context->GetPathManager()->ResolveFileName(filename,DATA_PATH_IDX,-1);
|
|
|
|
FILE* file = fopen(filename.Str(),"r");
|
|
if (file) {
|
|
beh->ActivateOutput(0);
|
|
|
|
fseek(file,0,SEEK_END);
|
|
long size = ftell(file);
|
|
fseek(file,0,SEEK_SET);
|
|
|
|
|
|
|
|
short* text = new short[size/2+1];
|
|
// we read from the file
|
|
int realcount = 0;
|
|
if (size) realcount = fread(text,1,size,file);
|
|
|
|
// eof
|
|
text[realcount/2] = L'\0';
|
|
|
|
beh->SetOutputParameterValue(0,text,realcount+2);
|
|
fclose(file);
|
|
delete [] text;
|
|
} else {
|
|
beh->ActivateOutput(1);
|
|
}
|
|
|
|
|
|
return CKBR_OK;
|
|
} |