If you decide to write code for fldigi here is a very simple guideline for code structure https://sourceforge.net/p/fldigi/wiki/dev-docs/ Development, including compiling and linking is best when performed in a Unix like environment. That includes Linux, Free-BSD, and MacOS. It is possible to develop on a Windows OS, but I do not recomment doing so. Most of the fldigi developers use Geany for coding and the command line interface for building and debugging binaries. All modems are derived from the virtual base class modem. dave@tk7:~/SF/fldigi.git$ ls src ale cw flarq-src kml mt63 rtaudio waterfall blank cw_rtty fldigi libtiniconv navtex rtty wefax cmedia debug fldigi-main.o logbook network soundcard widgets combo dialogs fldigirc.rc logger olivia spot wwv common.rc dominoex flsynop.rc main.cxx openmp3 ssb xmlrpcpp compat dtmf fmt Makefile packet stamp-h1 config.h dxcluster fsq Makefile.am psk status config.h.in feld globals Makefile.in psm synop-src config.h.in~ fft-monitor ifkp mbedtls qrunner thor config_script fileselector include mfsk rigcontrol throb contestia filters irrxml misc rsid trx Blank contains blank.cxx and blank.h, outline class definition for any future added modem types. Use them as a starting point. Suggest studying psk.cxx and psk.h and comparing to the blank class code. The new modem type will need to be added to both modem.cxx and modem.h src/dialogs/fldigi.cxx will need to be modified to add the new mode to the menu system and for linkage to modem initialization. Configuration UI is in the very large source files, confdialog.cxx and confialog.h. These are not maintained by hand coding! The UI library, fltk, has a simple gui builder called fluid. The UI structures for fluid are in files with the extension .fl From the top level source directory: fluid src/dialogs/confdialog.fl make UI changes exit fluid make flgen to create src/dialogs/confdialog.cxx src/include/confdialog.h Modem specific configuration items are easily added to the file src/include/configuration.h Very few modem types require any hand coding in src/misc/configuration.cxx The new modem may require a different style of user interface, for example FSQ, IFKP, FMT (frequency measurement test). This is coded in the file src/dialogs/fldigi_main.cxx. Note that there are two principal fldigi user interfaces, (1) full UI with all controls available, (2) waterfall only UI with a very limited set of controls. The additional modem specific UI must address both. Each UI has its own set of menus. All UI source is hand coded, so you must become intimate with the fltk widget types. fltk is a C++ library. All functions which modify the UI behavior, writing to a widget, changing it's UI size, location, color, accessibility, etc must be made from the UI thread which is managed by the fltk library. You cannot make those calls directly. Doing so will eventually cause a segmentation fault. Modem code runs in a separate audio streaming thread (fldigi can have more than 20 concurrent threads). Communication between the modem code and it's widgets is accomplished using a qrunner helper using macros. See qrunner.h and check out various modem class code for instances of REQ, for exampe: dave@tk7:~/SF/fldigi.git/src$ rgrep REQ fmt fmt/fmt.cxx: REQ (clear_unk_scope); fmt/fmt.cxx: REQ (clear_ref_scope); fmt/fmt.cxx: REQ (put_unk_value, msg1); fmt/fmt.cxx: REQ (put_unk_amp, msg1a); fmt/fmt.cxx: REQ (put_unk_value, ""); fmt/fmt.cxx: REQ (put_unk_amp, ""); fmt/fmt.cxx: REQ (put_ref_value, msg2); fmt/fmt.cxx: REQ (put_ref_amp, msg2a); fmt/fmt.cxx: REQ (put_ref_value, ""); fmt/fmt.cxx: REQ (put_ref_amp, ""); fmt/fmt.cxx: REQ (set_fmt_scope); A formidable task for the first time modem developer. I am always available for consultation. Suggest you clone the git repository for the latest code base. When you are ready to be a contributor I can provide you with the ability to push changes to the remote code base. git clone git://git.code.sf.net/p/fldigi/fldigi fldigi-src