/****************************************************************************/ /* */ /* Example for ACGD Add-Ons: "GDL I/O Report" */ /* */ /****************************************************************************/ #define _REPORTGD_TRANSL_ #include #if defined (_MSC_VER) #include #endif #include "ACGDinc.h" #include "GSUtils.h" #include "FileSystem.hpp" /***************************************************************************** ** ** ** Required functions ** ** ** *****************************************************************************/ /*--------------------------------------------------------------** ** Called first when this extension is loaded ** **--------------------------------------------------------------*/ GSErr __GDLEXT_CALL Initialize (void) { GSErr err; err = NoError; char str[512]; sprintf (str, "GDL extension has been loaded"); AC_WriteReport (str, false, true); /* Make the necessary initialization to handle multiple I/O channels */ return err; } // --------------------------------------------------------------------------------------------------------------------- // // --------------------------------------------------------------------------------------------------------------------- GSErr __GDLEXT_CALL GetAddonInfo (Int32 /*channel*/, const GS::UniString& /*filename*/, const GS::UniString& /*paramstring*/, bool* isDeterministicAddOn) { *isDeterministicAddOn = false; return NoError; } /*--------------------------------------------------------------** ** Open/Create file using parameter string ** **--------------------------------------------------------------*/ GSErr __GDLEXT_CALL OpenDataFile ( Int32 channel, const GS::UniString& fileName, const GS::UniString& paramString, GSHandle* optionhdl ) { UNUSED_PARAMETER (channel); UNUSED_PARAMETER (optionhdl); char str[512]; sprintf (str, "GDL OPEN file <%s> parameters <%s>", static_cast (fileName.ToCStr ()), static_cast (paramString.ToCStr ())); AC_WriteReport (str, false, true); return NoError; } /*--------------------------------------------------------------** ** Read nrvals values from file ** **--------------------------------------------------------------*/ GSErr __GDLEXT_CALL InputFromDataFile ( Int32 channel, const GS::UniString& recordID, const GS::UniString& fieldID, Int32 nrvals, Int32 *nrgotvals, GS::Array& values, GS::Array& stringvals) { if (nrgotvals == NULL) return -1; GSErr err = NoError; *nrgotvals = 0; char str[512]; sprintf (str, "GDL INPUT channel %d recordID <%s> fieldID <%s> %d value(s)", channel, static_cast (recordID.ToCStr ()), static_cast (fieldID.ToCStr ()), nrvals); AC_WriteReport (str, false, true); if (nrvals >= 2) { /* Example code */ GdlValueRecord tmpVal; /* 1st: string value */ stringvals[0] = GS::UniString ("A STRING"); tmpVal.SetString (0); values.Push (tmpVal); /* 2nd: numeric value */ tmpVal.SetDouble (234.567); values.Push (tmpVal); *nrgotvals = 2; /*....*/ } return err; } /*--------------------------------------------------------------** ** Write nrvals values to file ** **--------------------------------------------------------------*/ GSErr __GDLEXT_CALL OutputToDataFile (Int32 channel, const GS::UniString& recordID, const GS::UniString& fieldID, const GS::Array& values, const GS::Array& stringsHdl) { Int32 i; GSErr err; err = NoError; char str[512]; sprintf (str, "GDL OUTPUT to channel %d recordID <%s> fieldID <%s> %d value(s)", channel, static_cast (recordID.ToCStr ()), static_cast (fieldID.ToCStr()), values.GetSize ()); AC_WriteReport (str, false, true); for (i = 0; i <= (Int32) values.GetSize () - 1; i++) { if (values[i].GetType () == NUMTYPE) { sprintf (str, " %g", values[i].GetDouble ()); AC_WriteReport (str, false, true); } else { sprintf (str, " <%s>", static_cast (stringsHdl[values[i].GetString ()].ToCStr ())); AC_WriteReport (str, false, true); } } return err; } /*--------------------------------------------------------------** ** Close file identified by channel ** **--------------------------------------------------------------*/ GSErr __GDLEXT_CALL CloseDataFile (Int32 channel) { GSErr err; err = NoError; char str[512]; sprintf (str, "GDL CLOSE channel %d", channel); AC_WriteReport (str, false, true); return err; } /*--------------------------------------------------------------** ** Free own data structures ** ** Called when this extension is unloaded ** **--------------------------------------------------------------*/ GSErr __GDLEXT_CALL FreeData (void) { char str[512]; sprintf (str, "Unloading GDL extension..."); AC_WriteReport (str, false, true); /* Free local arrays etc. */ return NoError; }