# Far Standard Functions

The FarStandardFunctions structure contains addresses to standard FAR functions. Using these functions allows the plugin to use standard operations and reduce the size of the plugin's DLL.

    struct FarStandardFunctions
    {
      int StructSize;

      FARSTDATOI                 atoi;
      FARSTDATOI64               atoi64;
      FARSTDITOA                 itoa;
      FARSTDITOA64               itoa64;
      FARSTDSPRINTF              sprintf;
      FARSTDSSCANF               sscanf;
      FARSTDQSORT                qsort;
      FARSTDBSEARCH              bsearch;
      FARSTDQSORT                qsortex;
      FARSTDSNPRINTF             snprintf;

      DWORD_PTR                  Reserved[8];

      FARSTDLOCALISLOWER         LIsLower;
      FARSTDLOCALISUPPER         LIsUpper;
      FARSTDLOCALISALPHA         LIsAlpha;
      FARSTDLOCALISALPHANUM      LIsAlphanum;
      FARSTDLOCALUPPER           LUpper;
      FARSTDLOCALLOWER           LLower;
      FARSTDLOCALUPPERBUF        LUpperBuf;
      FARSTDLOCALLOWERBUF        LLowerBuf;
      FARSTDLOCALSTRUPR          LStrupr;
      FARSTDLOCALSTRLWR          LStrlwr;
      FARSTDLOCALSTRICMP         LStricmp;
      FARSTDLOCALSTRNICMP        LStrnicmp;

      FARSTDUNQUOTE              Unquote;
      FARSTDEXPANDENVIRONMENTSTR ExpandEnvironmentStr;
      FARSTDLTRIM                LTrim;
      FARSTDRTRIM                RTrim;
      FARSTDTRIM                 Trim;
      FARSTDTRUNCSTR             TruncStr;
      FARSTDTRUNCPATHSTR         TruncPathStr;
      FARSTDQUOTESPACEONLY       QuoteSpaceOnly;
      FARSTDPOINTTONAME          PointToName;
      FARSTDGETPATHROOT          GetPathRoot;
      FARSTDADDENDSLASH          AddEndSlash;
      FARSTDCOPYTOCLIPBOARD      CopyToClipboard;
      FARSTDPASTEFROMCLIPBOARD   PasteFromClipboard;
      FARSTDKEYTOKEYNAME         FarKeyToName;
      FARSTDKEYNAMETOKEY         FarNameToKey;
      FARSTDINPUTRECORDTOKEY     FarInputRecordToKey;
      FARSTDXLAT                 XLat;
      FARSTDGETFILEOWNER         GetFileOwner;
      FARSTDGETNUMBEROFLINKS     GetNumberOfLinks;
      FARSTDRECURSIVESEARCH      FarRecurseSearch;
      FARSTDMKTEMP               MkTemp;
      FARSTDDELETEBUFFER         DeleteBuffer;
      FARSTDPROCESSNAME          ProcessName;
      FARSTDMKLINK               MkLink;
      FARCONVERTNAMETOREAL       ConvertNameToReal;
      FARGETREPARSEPOINTINFO     GetReparsePointInfo;
    };

### Members

Function | Description
--- | ---
StructSize | Structure size. If the structure will change in the future, this field will allow to determine it.
atoi | converts a string to a 32-bit integer.
atoi64 | converts a string to a 64-bit integer (__int64).
itoa | converts a 32-bit integer value into a string.
itoa64 | converts a 64-bit integer (__int64) value into a string.
sprintf | allows to write formatted output to a string.
sscanf | allows to read formatted data from a string.
qsort | allows to sort an array of any type of data using the QuickSort algorithm.
bsearch | allows to perform a binary search of a sorted array.
qsortex | allows to sort an array of any type of data using the QuickSort algorithm.
snprintf | allows to write formatted output to a string.
LIsLower | tests whether the given character is in lower case.
LIsUpper | tests whether the given character is in upper case.
LIsAlpha | tests whether the given character is a letter.
LIsAlphanum | tests whether the given character is a number or a letter.
LUpper | converts a character to upper case.
LLower | converts a character to lower case.
LUpperBuf | converts an array of characters, including null ones, to upper case.
LLowerBuf | converts an array of characters, including null ones, to lower case.
LStrupr | converts a null-terminated string to upper case.
LStrlwr | converts a null-terminated string to lower case.
LStricmp | compares two strings without case sensitivity.
LStrnicmp | compares portions of two strings without case sensitivity.
Unquote | removes all quotes from a null-terminated string.
ExpandEnvironmentStr | used to expand environment variables in a string to their values.
LTrim | removes leading whitespace from a string.
RTrim | removes trailing whitespace from a string.
Trim | removes all leading and trailing whitespace from a string.
TruncStr | truncates a given string to the specified length and, if needed, inserts in its beginning an ellipsis instead of the truncated part.
TruncPathStr | truncates a given path to specified length and, if needed, inserts an ellipsis to indicate the place of truncation.
QuoteSpaceOnly | quotes the input string if it contains at least one space inside.
PointToName | used to get the file name from a given file path.
GetPathRoot | used to get the root directory from a given file path.
AddEndSlash | used to add a trailing backslash or a slash to a path.
CopyToClipboard | copies a text string to the Windows clipboard.
PasteFromClipboard | used to get data from the Windows clipboard.
FarKeyToName | used to convert an internal FAR key code to a string.
FarNameToKey | used to convert a literal key name to an internal FAR key code.
FarInputRecordToKey | used to convert a key code from an INPUT_RECORD structure to an internal FAR key code.
XLat | used to transliterate a string portion from one character set (for example Russian) to another character set (for example Latin).
GetFileOwner | used to determine the owner of the given file.
GetNumberOfLinks | returns the number of hard links to the specified file.
FarRecursiveSearch | used to find a file in a directory tree with name matching the given mask.
MkTemp | used to create a temporary file name with the path based on a specified template.
DeleteBuffer | used to free an allocated buffer returned by the PasteFromClipboard function.
ProcessName | allows to perform various actions on a file name: compare with a mask, with a list of masks or to generate new file name using a mask.
MkLink | supports creating hard and symbolic links and mounting local drives to the file system.
ConvertNameToReal | converts a relative name of a file object to its full pathname and expands symbolic links (reparse points).
GetReparsePointInfo | allows to determine the target (path to the target drive and directory) of a symbolic link (reparse point).

### Remarks

Before you can start using standard functions you have to store structure contents locally:

    static struct PluginStartupInfo Info;
    static struct FarStandardFunctions FSF;

    void  _export SetStartupInfo(struct PluginStartupInfo *psInfo)
    {
        Info=*psInfo;
        FSF=*psInfo->FSF;
        Info.FSF=&FSF; // now Info.FSF will point to the correct local address
        ...
    }

See also:
Structures | PluginStartupInfo