// This file is part of Gopher2600.
//
// Gopher2600 is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Gopher2600 is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Gopher2600.  If not, see <https://www.gnu.org/licenses/>.

// Package notifications allow communication from a cartridge directly to the
// emulation instance. This is useful, for example, by the Supercharger
// emulation to indicate the start/stop of the Supercharger tape.
//
// Notifications are sometimes passed onto the GUI to inidicate to the user the
// event that has happened (eg. tape stopped, etc.) For some notifications
// however, it is appropriate for the emulation instance to deal with the
// notification invisibly.
//
// Finally, some notifications are not generated by the cartridge but by the
// emulation instance, and sent to the GUI.
//
// We can therefore think of the flow of notifications in the following manner:
//
//	   (a)              (b)                    (c)
//	Cartridge -----> Emulation Instance -----> GUI ----
//	            1                         2      \____|  3
//
// The diagram also suggests that a GUI can both produce and receive a
// notification. This is possible and sometimes convenient to do.
package notifications
