
4.22.4 changes that might be of interest for developers:

  * there are two new functions in one_file.c for management of
    temporary files: void add_tmpfile(char*), and
    void remove_tmpfiles(void). The first one links a string
    into a list of file names that are to be deleted at the end
    of a Csound performance. The latter, called at RESET time and
    at exit, deletes all files that were added by add_tmpfile(),
    and frees the temporary file name list; it is safe to call
    remove_tmpfiles() multiple times, however, only the first call
    will have any effect. atexit(remove_tmpfiles) should be called
    at Csound start-up (but not after RESET); this is currently
    done in jpff_glue.c, function main(), but some platforms (for
    example, Winsound) may need to do it elsewhere.
    Old temporary file functions like deleteScore() are all removed.

  * the two new files namedins.c and namedins.h contain an interface
    for efficient handling of string lists (this is currently used
    for named instruments and opcode names (see also isopcod() and
    getopnum() in rdorch.c)). The documentation for each function
    can be found in the namedins.h header file.
    One important issue is that after the call to otran() (which also
    calls opcode_list_create()), no new opcodes should be added to
    opcodlst[] (though this would not make much sense anyway).

  * the orchestra is now read and compiled (otran()) *before* score
    sorting. This is required because the numbers of named
    instruments (as assigned by otran()) must be known at the score
    sort stage. I do not know of any problems that might be caused
    by this change (the two relevant functions, create_opcodlst() and
    otran(), do not seem do depend on the score in any way), but it
    may be important for developers of other versions of Csound.
    It is recommended to read the new csoundMain() function very
    carefully (not least because of the temporary file changes also
    in this function).

  * the argument type checking code in rdorch.c (getoptxt()) was
    replaced by a new, more generalized implementation that uses
    tables for simple type checking rules (see also typetabl.h),
    and only a few input types (notably s, x, Z, and S) require
    special checks. This makes adding new types easier, and, due
    to the simplified code and avoiding the large switch..case
    statement, bugs are less likely.
    The argument types of xin and xout are now also checked in
    getoptxt().

  * in various places (musmon.c, sread.c, linevent.c, etc.) there is
    new code to deal with named instruments

