MovesFromString() is indeed an alternative way for generating pseudo-legal moves for a piece, which overrules the hard-codes moves in GenPseudoLegal() when a string is defined for that piece. (Which, by default, it would not be.) This is the mechanism by which WinBoard 4.8 allows engines to (re)define the pieces in engine-defined variants (of which the rules would be unknown to WinBoard). In reponse to the 'variant' command the engine will send a number of 'piece' commands, containing the move-description string that will then be used by MovesFromString() for the mentioned piece during the rest of the game.
The string describes the moves in so-called
Betza notation. This is a very powerful way to indicate how pieces move, but that makes it pretty hard to interpret the strings with a general algorithm. Especially that directional modifiers like 'f' (forward) and 'r' (right) can combine in a way that depends on the move symmetry (orthogonal, diagonal or oblique) is a pain. The 'a' ('again') modifier needed for specifying hook movers or multi-capturing pieces (such as the Werewolf of Werewolf Chess) also adds a lot of complexity, as directional modifiers of later legs have to be interpreted relatively to the direction of motion of the previous leg.
I don't know what sparks your interest in this routine, but basically all you have to know is that it generates all possible moves (as described by the Betza string) of a given piece in a given board position, and calls the call-back function for each such move. To know exactly which moves those are is easier understood from a tutorial description of the Betza notation system than by looking at the code.
[Edit] I read a bit back through the forum, and realize now that you are the programmer that has been working on Omega Chess. The MovesFromString() function is indeed designed to facilitate implementation of such engines. E.g. when you let the engine reply to 'variant omega' with:
piece W& FC
piece C& WAD(and the pieces W and C would have been defined in the -pieceToCharTable), this would tell WinBoard that the piece indicated by W moves as a Wizzard(Ferz + Camel) and the piece indicated by C moves as a Champion (Wazir + Alfil + Dababba). The other pieces would just keep their default XBoard moves. I guess you would also have to redefine the Pawn, due to the initial triple push
piece P& fmWfceFifmW3I recall having boosted WinBoard's e.p. logic so that it would allow e.p. capture of triply pushed Pawns on both skipped squares. I cannot remember anymore if that was already in 4.8.0 or just in the development version.
In any case, WinBoard has evolved enormously in the direction of being able to support Omega Chess as engine-defined variant. (Blacked-out squares are now also in the repertoire, indicated in FEN as '*'.) I think the multi-variant engine Sjaak II has been configured to play Omega Chess under the standard edition of XBoard. There is just one remaining: move notation. WinBoard would put a1 in the lower-left corner of a 12x12 board with blacked-out squares, while in Omega Chess a1 would be considered the lower-left corner of the central 10x10 area, which WinBoard calls b2, and reserve 'w1' for the 'wizzard square' that WinBoard calls a1.