How to Add User Extensions to AnalyCalc There are 2 subroutines provided with the AnalytiCalc/ PortaCalc package designed to facilitate addition of user defined commands or functions to the sheet without having to get into the logic of the spreadsheet otherwise very deeply. These are the USRCMD.FOR file, for adding user commands, and the USRFCT.* files for adding user functions. Currently supplied: USRFCT.FTN Minimal user functions, supports only the *U IDATE function to return system date. USRFCT.FOR In addition to above supports the *U MTXEQ function to solve matrix equations. USRFCT.ASC In addition to above, supports MOVEV and MDET (move matrix values, compute determinant) USRFCT.SRC In addition supports MPROD, MADDV, MSUBV, MMPYT, MMPYC, and VARY functions for more general matrix math. Standard on VAX. USRCMD.FOR (Only for VAX): no-op at present, but is passed the command line and a "command found" flag and an indicator it may set for type of recalculation to do. The ICODE return may be 1 for no recalc, 3 for default recalc, or 2 to redo sheet & redraw. Set the IGOTIT argument to 1 if you process the command there. Various parsing aids are provided and most system data exists in commons which may be copied from the XQTCMD.FOR source code. Any command desired may be implemented. The USRCMD routine is called ahead of all commands except the *, -, and journaling commands, so may supersede them if need be. The USRFCT function names are stored in an internal array and always appear as *U name [args] in the cell. This routine is called from the CMND subroutine. The method of naming functions allows unlimited use of names. Supplied matrix routines access the array holding values of the spreadsheet. This is the XVBLS array, and subroutines had to be modified to address it correctly. The main thing is that the "distance" between successive rows (same column) on the sheet is now always RRW (in the parameter statements in VKLUGPRM.FTN), rather than the normal Fortran default of the dimensions. You must alter your routines accordingly and remember the sheet is stored so that the rows are the fast-varying elements. (This is also the computational order to avoid paging the program to death.) Glenn Everhart