where icon-name is a file containing an icon image in ASCII HEX format, and arg1-3 act as file filters that are put into the file filter lines in the three scrolling window lists in xtalmgr. Commas separate items for multiple arguments. For example: The ‘-‘ indicates that there are no arguments for the second list. The first field will contain all files in the current directory that match *.fin, *.df, and *.mu. Nonwindow applications are similar, except that the image name is replaced with a short description of the format. Spaces in this description are replaced with commas, which are replaced by spaces when xtalmgr loads the file. To pass messages from the lib routines, a routine emess is expected. This should consist of the following C subroutine: Put this in a file and compile it with the command cc -c emess.c. Then add emess.o to the compile line: Here, ns is the length of the string symchar, which is 80 in this case. This routine is called in turn for each symmetry operator (see xf_getnequiv). For example, if the crystal file myprotein contains the line: If the reflection is centric, it returns one of the allowed phases divided by 15. The other allowed phase is plus 180 degrees. Thus, if the reflection is centric and the allowed phases are 0 and 180, the function returns 180/15, or 12. Since xf_iscentric is an integer function but starts with the letter x, be sure to tell the compiler it is an integer with integer*4 xf_iscentric in the variables declaration part of your program. symmops contains the matrices, and opstring contains the ASCII string equivalents. Even if you don’t need opstring, you must allocate the string or the subroutine will crash for lack of space. Here’s an example of using the matrices: This matrix can be overridden if the line ctof is included in the crystal file, in which case the return value is 1. If 0 is returned, the operation failed. The most likely value for this is the wrong number of numbers on the ctof line. There should be 9. Usage of the matrix is: The function dynamically allocates all the space needed so that the address of a pointer of type FIN is sent , that is, in your code you should have: Since there are 4 columns (a column is the pair F, s(F)) in a df file, and only 2 in a fin file, control specifies how this information is read: direction controls the output sort order: 0 is planes of y, 1 is planes of x, and 2 is planes of z. Set centric to 0. Source.