<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://library.morph.zone/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Polluks</id>
		<title>MorphOS Library - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://library.morph.zone/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Polluks"/>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/Special:Contributions/Polluks"/>
		<updated>2026-04-28T16:25:26Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https://library.morph.zone/index.php?title=Reggae_tutorial:_Playing_a_sound_from_file&amp;diff=4354</id>
		<title>Reggae tutorial: Playing a sound from file</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Reggae_tutorial:_Playing_a_sound_from_file&amp;diff=4354"/>
				<updated>2025-05-12T11:39:24Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: /* Opening a sound file */ link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Grzegorz Kraszewski''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Playing a sound file from disk is one of most common media related tasks. Reggae can perform it with a few lines of code. Using Reggae for audio playback has several advantages:&lt;br /&gt;
* Wide range of supported audio formats. A codec is selected and loaded by Reggae automatically.&lt;br /&gt;
* Playback is asynchronous. Reggae offloads decoding and playback to a dedicated process. The main application may perform other tasks during playback. It gets informed when the playback ends.&lt;br /&gt;
* Reggae streams audio from disk, so it does not load the whole file to memory. Doublebuffering is fully automatic.&lt;br /&gt;
* Audio is played through selected unit of [[AHI]]. Multiple sounds (up to 32, depending on user settings of [[AHI]]) may be played simultaneously.&lt;br /&gt;
Playing audio directly from disk is best suited for long sounds without low latency requirements. A typical example is music player or playing background music in the game. &lt;br /&gt;
&lt;br /&gt;
From Reggae point of view, the task of playing audio from disk can be divided in two major parts. The first one is to get raw audio samples out of encoded file. The second task is to feed audio data to the output.&lt;br /&gt;
&lt;br /&gt;
==Opening a sound file==&lt;br /&gt;
This part of the job is highly automated. Reggae recognizes the file format and builds complete decoding pipeline for the file with a single function call. The result is returned to the application as one, opaque object (it may contain many objects inside, but it is irrelevant for application programmer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Object* media;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;media = MediaNewObject(&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;MMA_StreamType, (ULONG)&amp;quot;file.stream&amp;quot;,&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;MMA_StreamName, (ULONG)&amp;quot;RAM:sound&amp;quot;,&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;MMA_MediaType, MMT_SOUND,&amp;lt;br&amp;gt;TAG_END);&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This single call creates a complete decoding infrastructure for a specified file. Data source is specified by two tags, ''MMA_StreamName'' and ''MMA_StreamType''. The first one is the name of the source. In case of files it is just path to the file, which may be absolute (as in the example), relative to the current directory, or relative to program executable location (using ''PROGDIR:'' [[Shell Commands/Assign|assign]]). ''MMA_StreamType'' is used to specify which Reggae stream class (or &amp;quot;transport&amp;quot;) should be used. Of course ''file.stream'' is for disk based files (and other things recognized by DOS as filesystems).&lt;br /&gt;
&lt;br /&gt;
The last tag is a kind of filter. If Reggae recognizes the file, but it is not sound, the file will be rejected, and the function will return NULL. Of course if file is not recognized at all, NULL will be returned as well. Checking the result of ''MediaNewObject()'' against NULL is a very good idea.&lt;br /&gt;
&lt;br /&gt;
In case of success ''media'' contains a pointer to Reggae object, having at least one output data port, port 0.&lt;br /&gt;
&lt;br /&gt;
==Creating output==&lt;br /&gt;
The second step is to add audio output object to the Reggae processing pipeline. Then one can &amp;quot;run&amp;quot; the pipeline, which results in playing the file. The output object belongs to ''audio.output'' class. Before an object can be created, the class must be loaded from disk. It is done by opening the class with ''OpenLibrary()''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;struct Library* AudioOutputBase;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;AudioOutputBase = OpenLibrary(&amp;quot;multimedia/audio.output&amp;quot;, 51);&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is worth noting that ''audio.output'' has no specific functions in its shared library API (it is true for all Reggae classes except of the main ''multimedia.class''). Then, the name of variable holding the library base is completely irrelevant (as the name is never used implicitly), and may be anything, &amp;quot;hja76_d62eg&amp;quot; for example. The name used in the example is a bit more readable however.&lt;br /&gt;
&lt;br /&gt;
After class opening, an instance of the class may be created:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Object* play;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;play = NewObject(NULL, &amp;quot;audio.output&amp;quot;, TAG_END);&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The instance is created with generic ''NewObject()'' call. There are no tags for attributes. The output object will read all sound properties from media object when they are connected together. I remind again that checking return value here may be a good idea. If objects are ready, let's connect them:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;MediaConnectTagList(media, 0, play, 0, NULL);&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Output port 0 of ''media'' object is connected with input port 0 of ''play'' object. Both the objects form a complete Reggae processing pipeline. Now we are ready to play sound. The whole playback control is done by talking to ''output'' object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Making noise==&lt;br /&gt;
Playback is controlled with three methods: ''MMM_Play()'', ''MMM_Stop()'' and '' MMM_Pause()'' performed on the ''audio.output'' instance.&lt;br /&gt;
&lt;br /&gt;
*'''''MMM_Play()''''' starts playback if object is stopped, is ignored when object is playing.&lt;br /&gt;
&lt;br /&gt;
*'''''MMM_Stop()''''' stops playback and rewinds the audio stream to the start (if possible).&lt;br /&gt;
&lt;br /&gt;
*'''''MMM_Pause()''''' (available since version 51.14 of ''audio.output'') stops playback, but does not rewind audio stream. Following ''MMM_Play()'' will continue from paused position.&lt;br /&gt;
&lt;br /&gt;
All the methods are performed immediately, so just&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;DoMethod(play, MMM_Play);&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
starts the playback and&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;DoMethod(play, MMM_Stop);&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
stops it at any time. All methods are asynchronous to the caller and return immediately. Even if ''MMM_Play()'' setup time is long (because of prebuffering for example), calling process is not stopped because setup is done by ''audio.output'' process.&lt;br /&gt;
&lt;br /&gt;
==Waiting for end of sound==&lt;br /&gt;
Because ''audio.output'' plays the sound asynchronously, there must be a way to inform the main process about sound end. By &amp;quot;sound end&amp;quot; I mean either actual audio stream end, or calling ''MMM_Stop()''. Then the application programmer need not to write separate code for handling natural and forced playback stop.&lt;br /&gt;
&lt;br /&gt;
The class offers two methods for signalling sound end event, namely audio process can send a '''signal''' or can reply a '''message'''. Application specifies method choosen and its parameters by performing one of the two methods described below on ''audio.output'' object. Methods are usually called before the playback is started, but may be also called when object is already playing. The later solution is tricky however, as the sound may be very short, so a method may be called '''after''' the sound end. In this case signalling requests will be never triggered.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''MMM_SignalAtEnd()''''' method should be used, when we want to receive a signal to be Wait()-ed. It has two parameters, pointer to process to be signalled and signal number (not mask!) to be sent. We usually want to be signalled ourselves, but it is not a requirement, so process A can start playback, but signal may be received by process B. A typical usage may look like this:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;DoMethod(play, MMM_SignalAtEnd, FindTask(NULL), SIGBREAKB_CTRL_C);&amp;lt;br&amp;gt;&lt;br /&gt;
DoMethod(play, MMM_Play);&amp;lt;br&amp;gt;&lt;br /&gt;
Wait(SIGBREAKF_CTRL_C);&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this code we send a request to be signalled themselves with system CTRL-C signal. It can be of course allocated private signal. Note that ''MMM_SignalAtEnd()'' method expect '''signal number''' while following ''Wait()'' needs a '''signal mask'''.&lt;br /&gt;
&lt;br /&gt;
[http://krashan.ppa.pl/reggae/library/playaudio_signal.c A complete example source code using a signal]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
'''''MMM_ReplyMsgAtEnd()''''' signals the end of sound by sending a system message prepared by application to some message port set up by application as well. This method is useful especially when an application uses multiple sounds at once. Number of signals available to a process is very limited. Number of created messages is limited only by available memory. The method is also useful if application creates&lt;br /&gt;
message port for other purposes. Then audio end messages can be directed to this port and distinguished by message contents. Typical usage looks as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;struct MsgPort *port;      /* created elsewhere */&amp;lt;br&amp;gt;&lt;br /&gt;
struct Message *msg;           /* allocated elsewhere */&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
msg-&amp;gt;mn_Node.ln_Type = NT_MESSAGE;&amp;lt;br&amp;gt;&lt;br /&gt;
msg-&amp;gt;mn_Length = sizeof(struct Message);&amp;lt;br&amp;gt;&lt;br /&gt;
msg-&amp;gt;mn_ReplyPort = port;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
DoMethod(play, MMM_Sound_ReplyMsgAtEnd, msg);&amp;lt;br&amp;gt;&lt;br /&gt;
DoMethod(play, MMM_Play);&amp;lt;br&amp;gt;&lt;br /&gt;
WaitPort(port);&amp;lt;br&amp;gt;&lt;br /&gt;
GetMsg(port);&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main difference between these two methods is that message signalling is &amp;quot;one-shot&amp;quot;. After the message is sent to application's port, it must be got from the port and reinitialized before it can be reused again. Signal method may be used repeatedly, which is comfortable when a short sound is triggered multiple times.&lt;br /&gt;
&lt;br /&gt;
[http://krashan.ppa.pl/reggae/library/playaudio_message.c A complete example source code using a message]&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Shell_Commands/RXCmd&amp;diff=4351</id>
		<title>Shell Commands/RXCmd</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Shell_Commands/RXCmd&amp;diff=4351"/>
				<updated>2024-10-03T22:13:40Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: Undo revision 4350 by Polluks (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''RXCmd''' - Executes an ARexx command on a given ARexx port directly&lt;br /&gt;
&lt;br /&gt;
PORT/A,COMMAND/A&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
PORT    - Name of an ARexx port (case sensitive)&lt;br /&gt;
COMMAND - ARexx command to be executed&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RXCmd can be used to send single ARexx commands to a program. It even works with the dummy rexxsyslib.library file provided with the standard MorphOS installation, while the traditional RX command requires installation of a 3rd party rexxsyslib.library file.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
 RXCmd OWB.1 FULLSCREEN&lt;br /&gt;
 RXCmd JUKEBOX &amp;quot;GET TITLE&amp;quot;&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Shell_Commands/RXCmd&amp;diff=4350</id>
		<title>Shell Commands/RXCmd</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Shell_Commands/RXCmd&amp;diff=4350"/>
				<updated>2024-09-30T14:57:28Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: restriction&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''RXCmd''' - Executes an ARexx command on a given ARexx port directly&lt;br /&gt;
&lt;br /&gt;
PORT/A,COMMAND/A&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
PORT    - Name of an ARexx port (case sensitive)&lt;br /&gt;
COMMAND - ARexx command to be executed&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RXCmd can be used to send single ARexx commands to a program. It even works with the dummy rexxsyslib.library file provided with the standard MorphOS installation, while the traditional RX command requires installation of a 3rd party rexxsyslib.library file.&lt;br /&gt;
However RXCmd does not support &amp;quot;result&amp;quot; of a command, for example with CygnusEd's port.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
 RXCmd OWB.1 FULLSCREEN&lt;br /&gt;
 RXCmd JUKEBOX &amp;quot;GET TITLE&amp;quot;&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Reggae:_MorphOS_multimedia_framework&amp;diff=4347</id>
		<title>Reggae: MorphOS multimedia framework</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Reggae:_MorphOS_multimedia_framework&amp;diff=4347"/>
				<updated>2024-09-05T07:35:25Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: /* Overview */ ReggaeList&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Grzegorz Kraszewski''&lt;br /&gt;
==Introduction==&lt;br /&gt;
'''Reggae''' is the name for modular MorphOS subsystem for handling media files (currently pictures and sounds, video and other contents will come in the future). Reggae is implemented as a large set of MorphOS shared libraries stored in ''MOSSYS:Classes/Multimedia/'' directory. Third party Reggae classes may be copied to ''SYS:Classes/Multimedia/''. Using Reggae an application developer can easily perform following tasks related to media processing:&lt;br /&gt;
* Recognizing media type and format.&lt;br /&gt;
* Streaming media via different transports.&lt;br /&gt;
* Demultiplexing compound media streams.&lt;br /&gt;
* Decoding media to plain, uncompressed format.&lt;br /&gt;
* Processing by applying filters.&lt;br /&gt;
* Presenting media to the user.&lt;br /&gt;
* Encoding and multiplexing.&lt;br /&gt;
Reggae is an object oriented framework. Every media processing task creates a pipe (or tree) of Reggae objects connected to each other. Media data travel along this structure in relatively small chunks. This pipelined processing allows for handling very big data, much bigger than available system memory.&lt;br /&gt;
==Overview==&lt;br /&gt;
This section contains general Reggae information, its design principles, usage patterns and rules.&lt;br /&gt;
* [[Kinds of Reggae classes]].&lt;br /&gt;
* [[Reggae common formats]].&lt;br /&gt;
See also [https://www.morphos-storage.net/?id=1532522 ReggaeList].&lt;br /&gt;
&lt;br /&gt;
==Tutorials==&lt;br /&gt;
This section contains Reggae programming tutorials with example code.&lt;br /&gt;
===General===&lt;br /&gt;
* [[Reggae tutorial: Accessing Reggae in applications|Accessing Reggae in applications]]&lt;br /&gt;
* [[Downloading web resources with http.stream - basics]]&lt;br /&gt;
* [[Downloading web resources with http.stream - advanced]]&lt;br /&gt;
* [[Writing Reggae classes]]&lt;br /&gt;
* [[Reggae and XPK]]&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
* [[Reggae tutorial: Playing a sound from file|Playing a sound from file]].&lt;br /&gt;
* [[Reggae tutorial: Playing a sound from memory|Playing a sound from memory]].&lt;br /&gt;
* [[Reggae tutorial: Playing a synthesized, continuous wave|Playing a continuous, synthesized wave]].&lt;br /&gt;
* [[Reggae tutorial: Saving audio in user selected format|Saving audio in user selected format]].&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Writing_Custom_Startup_Code&amp;diff=4346</id>
		<title>Writing Custom Startup Code</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Writing_Custom_Startup_Code&amp;diff=4346"/>
				<updated>2024-08-04T16:56:43Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: /* A Complete Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Grzegorz Kraszewski''&lt;br /&gt;
&lt;br /&gt;
One can find in every C programming handboook, that program execution starts from ''main()'' function. In fact we have such an impression, when we write a program. There is no evidence to disprove it. In fact however, this is not true. There are at least a few, and sometimes even a few teens of kilobytes of code between the start of program execution and the first line of ''main()''. Most of this code is not really needed in most cases.&lt;br /&gt;
&lt;br /&gt;
What is being done by this code? Let's say for the start, it is perfectly possible to have a program without any startup code at all. The system can jump into ''main()'' right away. Unfortunately such a program would run only from commandline window. It would crash, when started from Ambient. It is because Ambient sends a special message to a message port of a freshly created process. This message serves two purposes. Firstly, it contains Ambient launch parameters, namely program icon descriptor and optionally descriptors of other icons, which have been shift-clicked, or dropped onto a panel. Secondly, a reply for the message is a signal for Ambient that the program finished its execution. Sending a reply is obligatory. This is the minimal set of things to be done by startup code. In practice it also should open required shared libraries. When one wants to use the C standard library, either with ''libnix'' or ''ixemul.library'', the startup code also creates a &amp;quot;standard environment&amp;quot; for the C standard library and POSIX functions ([[Installation of Software Development Kit and its basic usage#Standard C and C++ Libraries|more on this]]). Because of this, startup code linked when using one of these libraries is quite complex, so also long.&lt;br /&gt;
&lt;br /&gt;
=Reasons for Writing Own Startup=&lt;br /&gt;
&lt;br /&gt;
The main advantage of an own startup is its shortness. Reducing program startup time is negligible. Very short startup is good for very short programs (for example shell commands), a few kB in size. In this case the standard startup may be easily longer than the program code itself. One can also use own startup just for satisfaction of making the program shorter by those few kilobytes. Custom startup code cannot be used, when the program uses ''ixemul.library''. When the program is linked with ''libnix'', the possibility of using own startup depends on the standard C library functions used. Most of them do not need any preparations and will work with any startup. Some more complex functions however require constructors to be executed in startup. If we use such functions, we will get linker errors of unresolved symbols. In such a case there is a simple choice &amp;amp;ndash; one either must replace these functions with something else, or just use the standard startup code. Own startup is then useful mostly when standard C library is not used at all (in favour of the native MorphOS API), or only simple functions from it are used.&lt;br /&gt;
&lt;br /&gt;
If we are still determined to use own startup, it is the time to tell the compiler about it. Skipping standard startup is done with '''&amp;amp;minus;nostartfiles''' argument. Then when we try to use our startup with ''libnix'', we use '''&amp;amp;minus;nostartfiles''' together with '''&amp;amp;minus;noixemul'''. Programmers wanting to go the pure MorphOS API way (without the C library), should use '''&amp;amp;minus;nostdlib''' option, which also implies '''&amp;amp;minus;nostartfiles'''.&lt;br /&gt;
&lt;br /&gt;
=Let's Write It=&lt;br /&gt;
&lt;br /&gt;
Before we start to write the code, note that except things executed before calling the ''main()'' function, some code must be also called '''after''' it returns. Then we also have &amp;quot;cleanup code&amp;quot;. As this code is usually placed in the same function (the one that calls ''main()''), both the parts are commonly called just startup code.&lt;br /&gt;
&lt;br /&gt;
As mentioned before, program execution does not really start from the ''main()'' function. Where does it start then? When an ELF executable is loaded from disk, a section named &amp;quot;.text&amp;quot; is found and operating system jumps to the start of its contents. When a program is written in C, it means start of the first function in code, as in C there is no way to write code outside of a function. It must be noted, that C compiler may reorder functions in a single object file. The GCC 2.95.3 compiler never does it, but aggressive optimizer of GCC 4 can change order of functions. Fortunately it is done only inside a single source file. To make sure that our startup function will be the first, it must be placed in a separate file. Then resulting object file must be linked as the first one, as linking order is always preserved. After this important note it is time for the code:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;amp;lt;proto/exec.h&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;proto/dos.h&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;dos/dos.h&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;workbench/startup.h&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
The thing starts with including needed header files. We will need two basic system libraries: ''exec.library'' and ''dos.library''. It explains why standard startup code, be it ''libnix'' or ''ixemul.library'', opens these two libraries &amp;amp;ndash; it simply needs them for itself.&lt;br /&gt;
&lt;br /&gt;
 struct Library *SysBase;&lt;br /&gt;
 struct Library *DOSBase;&lt;br /&gt;
&lt;br /&gt;
As our code will use these two libaries, we need to define their bases.&lt;br /&gt;
&lt;br /&gt;
 extern ULONG Main(struct WBStartup *wbmessage);&lt;br /&gt;
&lt;br /&gt;
This is a declaration of the main function of our program. As the object file containing startup code should contain only one function (the entry one), the rest of code has to be moved to other object files, for reasons explained above. That is why the main function has to be declared here, as we call it from the startup code. Alternatively its declaration may be placed in some header file and included here. The name ''Main()'' is arbitrary, it can be anything. I've just called it typically, capitalizing the first letter to avoid possible name confilct with the standard library. The argument of ''Main()'' is startup message (mentioned above) being sent by Ambient. If we do not plan to use it inside ''Main()'', we can just declare it this way:&lt;br /&gt;
&lt;br /&gt;
 extern ULONG Main(void);&lt;br /&gt;
&lt;br /&gt;
The next important thing is to define a mysterious global symbol ''__abox__''.&lt;br /&gt;
&lt;br /&gt;
 ULONG __abox__ = 1;&lt;br /&gt;
&lt;br /&gt;
While not needed in the code, this symbol is used by the system executable loader to differentiate between MorphOS ELF executables and other possible PowerPC ELF binaries. If there is no ''__abox__'' defined, the executable will be recognized as PowerUP one and executed through ''ppc.library'', with unpredictable results.&lt;br /&gt;
&lt;br /&gt;
 ULONG Start(void)&lt;br /&gt;
 {&lt;br /&gt;
   struct Process *myproc = 0;&lt;br /&gt;
   struct Message *wbmessage = 0;&lt;br /&gt;
   BOOL have_shell = FALSE; &lt;br /&gt;
   ULONG return_code = RETURN_OK;&lt;br /&gt;
&lt;br /&gt;
''Start()'' is the code entry point. Again, name of this function is not important, it may be anything. It just has to be the first function in the linked executable. Some local variables are declared here, which will be needed later. ''myproc'' will contain a pointer to our process, ''wbmessage'' will hold the Ambient startup message pointer. Variable ''have_shell'' will be used to detect if the program has been started from shell console or from Ambient. Finally ''return_code'' is just the return code of the program, it will be returned to the system. The return value is usually 0 when the program executed succesfully and ''RETURN_OK'' constant is just 0.&lt;br /&gt;
&lt;br /&gt;
   SysBase = *(struct Library**)4L;&lt;br /&gt;
&lt;br /&gt;
Time for initialization of the ''SysBase'', the base of ''exec.library''. The library is always open. For historical and backward compatibility reasons the base pointer is always placed by the system at address $00000004, so we just take it from there. Having ''exec.library'' available, our code can check whether it has been started from shell or from Ambient:&lt;br /&gt;
&lt;br /&gt;
   myproc = (struct Process*)FindTask(0);&lt;br /&gt;
   if (myproc-&amp;gt;pr_CLI) have_shell = TRUE;&lt;br /&gt;
&lt;br /&gt;
This information is taken from the ''Process'' structure being just system process descriptor. The ''exec.library'' call ''FindTask()'' returns the calling task's own descriptor if 0 is passed as its argument. In case we are started from Ambient, receiving its message is compulsory:&lt;br /&gt;
&lt;br /&gt;
   if (!have_shell)&lt;br /&gt;
   {&lt;br /&gt;
     WaitPort(&amp;amp;myproc-&amp;gt;pr_MsgPort);&lt;br /&gt;
     wbmessage = GetMsg(&amp;amp;myproc-&amp;gt;pr_MsgPort);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
The startup message is being sent to process system port, so we receive it there. The message may be then passed to our ''Main()'' function, if we plan to make some use of it, like handling additional icon arguments.&lt;br /&gt;
&lt;br /&gt;
   if (DOSBase = OpenLibrary((STRPTR)&amp;quot;dos.library&amp;quot;, 0))&lt;br /&gt;
   {&lt;br /&gt;
&lt;br /&gt;
The next step is opening ''dos.library'', this library is opened in a pretty standard way. In fact this minimal startup code does not need it. There are two reasons to open it anyway. First, it is hard to imagine a program, which does not need ''dos.library'' &amp;amp;ndash; even &amp;quot;Hello world!&amp;quot; needs it. Secondly, all standard startup codes open it, so usually main code takes it for granted. Then my startup behaves conventionally and opens ''dos.library'' as well.&lt;br /&gt;
&lt;br /&gt;
     return_code = Main((struct WBStartup*)wbmessage);&lt;br /&gt;
&lt;br /&gt;
Yes, after these few lines we are ready to call the main code. As stated above, passing the startup message from Ambient is optional. On the other hand, receiving the result and passing it back to the system later is obligatory.&lt;br /&gt;
&lt;br /&gt;
     CloseLibrary(DOSBase);&lt;br /&gt;
   }&lt;br /&gt;
   else return_code = RETURN_FAIL;&lt;br /&gt;
&lt;br /&gt;
From this point the startup code becomes cleanup one. Note also that proper error handling must be done. ''dos.library'' is being closed, but if its opening failed before, the result of execution is changed to ''RETURN_FAIL''. This is the hardest fail and means total inability to execute. In practice MorphOS can't boot if ''dos.library'' is not present in the system. But ''OpenLibrary()'' may fail for other reasons, for example simple lack of free memory. Then the startup code has to handle it in some reasonable way.&lt;br /&gt;
&lt;br /&gt;
   if (wbmessage)&lt;br /&gt;
   {&lt;br /&gt;
     Forbid();&lt;br /&gt;
     ReplyMsg(wbmessage);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
This snippet of code handles the Ambient startup message. Even if we make no use of it, it '''must''' be replied at exit. But what does ''Forbid()'' do here? This function halts system multitasking, specifically it prevents the system process scheduler to switch our process away. Usually it may be done for a very short period of time only and followed by a matching ''Permit()''. At the first glance this code makes no sense then, a process stops process switching and... exits. We have to know one important thing however: process switching is automatically reenabled when the process which called ''Forbid()'' ends. Then here is what happens:&lt;br /&gt;
* Our task calls ''Forbid()'', so no other process can interrupt it.&lt;br /&gt;
* It replies the Ambient startup message. As multitasking is stopped, Ambient is unable to receive yet. The message just waits at its message port.&lt;br /&gt;
* Our task exits. Then the system restores multitasking.&lt;br /&gt;
* Ambient gets CPU time and receives the message. Note that at this point it is absolutely certain, that our task does not exist anymore. Possibility of a race condition is eliminated. Without ''Forbid()'' it could be possible that our process is removed from the system while it still executes.&lt;br /&gt;
Of course multitasking halt period is extremely short, because our cleanup code ends immediately after replying to Ambient:&lt;br /&gt;
&lt;br /&gt;
   return return_code;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=$VER: &amp;amp;ndash; program identification string=&lt;br /&gt;
&lt;br /&gt;
This topic is not strictly related to startup code, but the version string is usually placed in it, so I've decided to write a few words about it. The version string is a short text in some defined format. This string contains the program name, version and revision number, compilation date and optionally copyrigth or author info. The version string is decoded by many applications including Ambient, the system command ''version'', the Installer program and more. The text starts with '''$VER:''', so it can be easily found in the program executable. As version tools search for the version string from the start of the executable file, it is best if version string is placed as close to the beginning of the file as possible. If the version string is declared as a simple string constant, it is unfortunately placed in one of the ELF data sections. These sections are placed after the code section by the linker. However we can force the version string to be placed in the code section:&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;#95;_attribute__ ((section(&amp;quot;.text&amp;quot;))) UBYTE VString[] =&lt;br /&gt;
   &amp;quot;$VER: program 1.0 (21.6.2011) &amp;amp;copy; 2011 morphos.pl\r\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Using a GCC specific extension ''__attribute__'' we can push the string into the ELF section named ''.text'', which is the code section. As the startup code object is linked as the first object, the version string will appear at the beginning of the executable, just after the code of the ''Start()'' function. Why after? It is simple, if we place it before the real code, the operating system will jump &amp;quot;into&amp;quot; the string, trying to execute it, and then of course it will crash.&lt;br /&gt;
&lt;br /&gt;
=A Complete Example=&lt;br /&gt;
&lt;br /&gt;
A complete &amp;quot;Hello world!&amp;quot; [http://krashan.ppa.pl/mph/files/helloworld.lha example] with custom startup code shows the described ideas at work. It only uses the MorphOS API, so is compiled with '''&amp;amp;minus;nostdlib''' option. Executable size is 1,592 bytes. For comparision, ''libnix'' startup and ''printf()'' gives 30,964 bytes, when one replaces ''printf()'' with MorphOS ''Printf()'' from ''dos.library'' it is still 13,500 bytes.&lt;br /&gt;
&lt;br /&gt;
As the project consists of two *.c files, a simple makefile is added to it. Example may be compiled just by entering ''make'' in a console.&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Reggae_and_XPK&amp;diff=4344</id>
		<title>Reggae and XPK</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Reggae_and_XPK&amp;diff=4344"/>
				<updated>2024-06-18T17:55:24Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: /* Introduction */ author&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Grzegorz Kraszewski''&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
XPK is a modular system for data compression. It consists of the main library, xpkmaster.library, and sublibraries stored in LIBS:Compressors/ directory. The main library provides API, while sublibraries provide compression algorithms. XPK has been designed for classic AmigaOS, then it has been ported to MorphOS and is now a native system component with 5 sublibs delivered with the system. Old sublibraries, compiled for M680x0 processors may be installed and used as well. XPK package provides also a set of shell based tools to compress, decompress and manipulate the data.&lt;br /&gt;
&lt;br /&gt;
While XPK tools work only for files, the API itself supports generalized stream concept, which fits Reggae nicely. Reggae interfaces to XPK with a demultiplexer class named xpk.demuxer. The class features not only interface, but also automatic recognition of streams compressed with XPK. It also hides some XPK API problems, like forcing application to decompress whole data chunks.&lt;br /&gt;
&lt;br /&gt;
== How Reggae uses xpk.demuxer automatically ==&lt;br /&gt;
&lt;br /&gt;
The xpk.demuxer class has been designed to be transparent for application in most common cases. It means, when Reggae decoding tree is created with MediaNewObject(), a programmer does not need to care if data are compressed with XPK, or not. In case data are compressed, the first pass of format detection and demultiplexer matching will match xpk.demuxer. Then, xpk.demuxer object announces raw data stream on its output, which will cause the second pass of format detection, on decompressed data this time.&lt;br /&gt;
&lt;br /&gt;
Let's assume a stream containing XPK compressed PCM WAVE audio file. Reggae will cascade xpk.demuxer with wave.demuxer, then add audiopcm.decoder as usual. The file will be then decoded the same way as not compressed one. There is no change in application code, all this is fully automatic. It is worth noting, that XPK support in MediaNewObject() is 100% transparent and all applications, even those written before xpk.demuxer release will gain XPK support with no changes in code or recompilation.&lt;br /&gt;
&lt;br /&gt;
Example 1 (see a frame on the left) loads an XPK packed BMP image (It is a Reggae logo, 512 × 512 pixels, 24-bit) from a file and displays it in a window using picture.output. As BMP format has no compression and the image has big areas of solid colors, the compression ratio is very good (98.48% of gain, from 786 486 to 11 992 bytes). The file is compressed with GZIP packer. What is interesting in this code, it really does not matter if the file reggae512.bmp.xpk is compressed or not. One can try to decompress the file leaving the original name. The .xpk extension does not matter, as Reggae does not rely on extension in format recognition code. The example will load and display uncompressed image with no single character changed in the code. This is how transparency of XPK support works.&lt;br /&gt;
&lt;br /&gt;
A few words about the code. The main() function opens needed libraries and creates a Reggae decoding tree starting from file stream of given name. There is MMT_PICTURE filter added to avoid loading files not being pictures. Then display_picture() function gets picture dimensions and opens a window of needed size. Finally blit_picture() creates picture.output object, connects it with processing tree, sets destinaion RastPort to the window one and specifies offsets, so the image is displayed inside window borders. MMM_Play() method causes the picture to be drawn. Note that picture.output does it in strips, so memory footprint is kept low. Function wait_for_closing() is nothing more than a plain Intuition message handling loop, which exits after window close gadget is clicked.&lt;br /&gt;
&lt;br /&gt;
== Compressed data in memory ==&lt;br /&gt;
&lt;br /&gt;
Instead of loading image from a file, one can convert compressed data into link object or C source and then link it with executable. This is useful for things like program logo or some specific gadget imagery. Example 2 program demonstrates this technique. The code is almost identical to example 1 (that is why the code is not repeated here). The first, obvious difference is addition of large table containing compressed data. The table has been generated with BinToC tool. The second difference is data source specification for MediaNewObject(). Stream type is now memory.stream. Instead of passing stream name, stream handle is specified, which for memory streams is just address of the data. Memory stream needs also length specification (as there is no such thing as stream end) with MMA_StreamLength attribute. The rest of code is unchanged. XPK decompression is fully automatic, as in the previous example.&lt;br /&gt;
&lt;br /&gt;
== Using xpk.demuxer for raw data ==&lt;br /&gt;
&lt;br /&gt;
Sometimes it may be feasible to compress some raw data with XPK. For example storing images as BMP files has a disadvantage of inverted scanline order, which forces Reggae to buffer the whole image in memory. Both example programs above allocate 786 432 bytes for image buffer. It may be avoided by storing the image as raw data with proper top-to-bottom scanline order (in fact it may be avoided also by using some sane image format with strong internal compression like PNG, so the whole XPK game is not worth playing...). The class may be also used for any data not to be decoded by Reggae, just as a comfortable wrapper over XPK API. One may be surprised that XpkRead() and XpkSeek() are not counterparts of Read() and Seek() respectively. XpkRead() forces to read decompressed data in big chunks, size of chunk depends on packing method used and varies typically from 32 to 256 kB. XpkSeek() seeks to the chunk boundary and returns position in the next uncompressed chunk yet to be read.&lt;br /&gt;
&lt;br /&gt;
Using xpk.demuxer as a standalone component, one can avoid these XPK API obstacles. The class provides MMM_Pull() and MMM_Seek() methods with single byte resolution, all buffering needed is handled internally. The example 3 illustrates the usage of xpk.demuxer for raw data. The example is a fully featured file fragments cutter. Because of this the source code is a bit longer, but still compact. Because we can't use MediaNewObject() automation here, file.stream and xpk.demuxer classes have to be opened manually with OpenLibrary() in Main(). Then, after parsing commandline arguments, perform_action() creates Reggae processing pipeline by hand. Stream object and xpk.demuxer instance are created and then connected together with MediaConnectTagList() call. When the pipeline is ready and an output file is opened with usual Open(), pump_data() function is called for every fragment. The pump_data() function could consist of a single MMM_Seek(), MMM_Pull and Write(), but data copying has been programmed in a loop with 64 kB buffer. Then cutting large data chunks is not memory demanding. Thanks to wrapping XPK with xpk.demuxer, data can be pulled with arbitrary amounts every time independently of any previous MMM_Seek() or compressor natural chunk size.&lt;br /&gt;
&lt;br /&gt;
In this example XPK support is transparent as well, as uncompressed files are handled just fine. Note however that this is done other way than in previous examples. When Reggae creates a processing tree automatically with MediaNewObject(), an xpk.demuxer object is created only if datastream is compressed. In the last example, xpk.demuxer instance is always created and data always go through it. Then XPK itself is instructed to pass uncompressed data through. This feature of XPK may cause some troubles however. When xpkmaster.library detects uncompressed data and is requested to pass them through, it wants to know the length of data first. Then, if a stream object connected to an xpk.demuxer instance reports unknown stream length, connecting stream and demuxer with MediaConnect() will fail. Most of stream classes report known stream length. At the time of writing, the only stream able to return 0 (unknown) length is http.stream when using chunked transfer (see RFC 2616 for details).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define __NOLIBBASE__&lt;br /&gt;
#define USE_INLINE_STDARG&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;proto/exec.h&amp;gt;&lt;br /&gt;
#include &amp;lt;proto/intuition.h&amp;gt;&lt;br /&gt;
#include &amp;lt;proto/multimedia.h&amp;gt;&lt;br /&gt;
#include &amp;lt;classes/multimedia/video.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
extern struct Library *SysBase, *DOSBase;&lt;br /&gt;
struct Library *IntuitionBase, *MultimediaBase;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void wait_for_closing(struct Window *window)&lt;br /&gt;
{&lt;br /&gt;
  BOOL running = TRUE;&lt;br /&gt;
  struct IntuiMessage *imsg;&lt;br /&gt;
&lt;br /&gt;
  while (running)&lt;br /&gt;
  {&lt;br /&gt;
    WaitPort(window-&amp;gt;UserPort);&lt;br /&gt;
&lt;br /&gt;
    while (imsg = (struct IntuiMessage*)GetMsg(window-&amp;gt;UserPort))&lt;br /&gt;
    {&lt;br /&gt;
      if (imsg-&amp;gt;Class == IDCMP_CLOSEWINDOW) running = FALSE;&lt;br /&gt;
      ReplyMsg(&amp;amp;imsg-;&amp;gt;ExecMessage);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void blit_picture(Object *picture, struct Window *window)&lt;br /&gt;
{&lt;br /&gt;
  Object *pic_output;&lt;br /&gt;
  struct Library *picture_output_base;&lt;br /&gt;
&lt;br /&gt;
  if (picture_output_base = OpenLibrary(&amp;quot;multimedia/picture.output&amp;quot;, 51))&lt;br /&gt;
  {&lt;br /&gt;
    if (pic_output = NewObject(NULL, &amp;quot;picture.output&amp;quot;,&lt;br /&gt;
      MMA_Video_DestOffsetX, window-&amp;gt;BorderLeft,&lt;br /&gt;
      MMA_Video_DestOffsetY, window-&amp;gt;BorderTop,&lt;br /&gt;
      MMA_Video_RastPort, (ULONG)window-&amp;gt;RPort,&lt;br /&gt;
    TAG_END))&lt;br /&gt;
    {&lt;br /&gt;
      if (MediaConnectTagList(picture, 0, pic_output, 0, TAG_END))&lt;br /&gt;
      {&lt;br /&gt;
        DoMethod(pic_output, MMM_Play);&lt;br /&gt;
      }&lt;br /&gt;
      DisposeObject(pic_output);&lt;br /&gt;
    }&lt;br /&gt;
    CloseLibrary(picture_output_base);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void display_picture(Object *picture)&lt;br /&gt;
{&lt;br /&gt;
  LONG width, height;&lt;br /&gt;
&lt;br /&gt;
  width = MediaGetPort(picture, 0, MMA_Video_Width);&lt;br /&gt;
  height = MediaGetPort(picture, 0, MMA_Video_Height);&lt;br /&gt;
&lt;br /&gt;
  if (width &amp;amp;&amp;amp; height)&lt;br /&gt;
  {&lt;br /&gt;
    struct Window *window;&lt;br /&gt;
&lt;br /&gt;
    if (window = OpenWindowTags(NULL,&lt;br /&gt;
      WA_InnerWidth, width,&lt;br /&gt;
      WA_InnerHeight, height,&lt;br /&gt;
      WA_Title, (ULONG)&amp;quot;Reggae and XPK tutorial, example 1&amp;quot;,&lt;br /&gt;
      WA_DragBar, TRUE,&lt;br /&gt;
      WA_DepthGadget, TRUE,&lt;br /&gt;
      WA_CloseGadget, TRUE,&lt;br /&gt;
      WA_IDCMP, IDCMP_CLOSEWINDOW,&lt;br /&gt;
    TAG_END))&lt;br /&gt;
    {&lt;br /&gt;
      blit_picture(picture, window);&lt;br /&gt;
      wait_for_closing(window);&lt;br /&gt;
      CloseWindow(window);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  if (IntuitionBase = OpenLibrary(&amp;quot;intuition.library&amp;quot;, 50))&lt;br /&gt;
  {&lt;br /&gt;
    if (MultimediaBase = OpenLibrary(&amp;quot;multimedia/multimedia.class&amp;quot;, 52))&lt;br /&gt;
    {&lt;br /&gt;
      Object *picture;&lt;br /&gt;
&lt;br /&gt;
      if (picture = MediaNewObjectTags(&lt;br /&gt;
        MMA_StreamType, (ULONG)&amp;quot;file.stream&amp;quot;,&lt;br /&gt;
        MMA_StreamName, (ULONG)&amp;quot;reggae512.bmp.xpk&amp;quot;,&lt;br /&gt;
        MMA_MediaType, MMT_PICTURE,&lt;br /&gt;
      TAG_END))&lt;br /&gt;
      {&lt;br /&gt;
        display_picture(picture);&lt;br /&gt;
        DisposeObject(picture);&lt;br /&gt;
      }&lt;br /&gt;
      CloseLibrary(MultimediaBase);&lt;br /&gt;
    }&lt;br /&gt;
    CloseLibrary(IntuitionBase);&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Reggae_and_XPK&amp;diff=4343</id>
		<title>Reggae and XPK</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Reggae_and_XPK&amp;diff=4343"/>
				<updated>2024-06-18T17:49:30Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: Created page with &amp;quot;== Introduction ==  XPK is a modular system for data compression. It consists of the main library, xpkmaster.library, and sublibraries stored in LIBS:Compressors/ directory. T...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
XPK is a modular system for data compression. It consists of the main library, xpkmaster.library, and sublibraries stored in LIBS:Compressors/ directory. The main library provides API, while sublibraries provide compression algorithms. XPK has been designed for classic AmigaOS, then it has been ported to MorphOS and is now a native system component with 5 sublibs delivered with the system. Old sublibraries, compiled for M680x0 processors may be installed and used as well. XPK package provides also a set of shell based tools to compress, decompress and manipulate the data.&lt;br /&gt;
&lt;br /&gt;
While XPK tools work only for files, the API itself supports generalized stream concept, which fits Reggae nicely. Reggae interfaces to XPK with a demultiplexer class named xpk.demuxer. The class features not only interface, but also automatic recognition of streams compressed with XPK. It also hides some XPK API problems, like forcing application to decompress whole data chunks.&lt;br /&gt;
&lt;br /&gt;
== How Reggae uses xpk.demuxer automatically ==&lt;br /&gt;
&lt;br /&gt;
The xpk.demuxer class has been designed to be transparent for application in most common cases. It means, when Reggae decoding tree is created with MediaNewObject(), a programmer does not need to care if data are compressed with XPK, or not. In case data are compressed, the first pass of format detection and demultiplexer matching will match xpk.demuxer. Then, xpk.demuxer object announces raw data stream on its output, which will cause the second pass of format detection, on decompressed data this time.&lt;br /&gt;
&lt;br /&gt;
Let's assume a stream containing XPK compressed PCM WAVE audio file. Reggae will cascade xpk.demuxer with wave.demuxer, then add audiopcm.decoder as usual. The file will be then decoded the same way as not compressed one. There is no change in application code, all this is fully automatic. It is worth noting, that XPK support in MediaNewObject() is 100% transparent and all applications, even those written before xpk.demuxer release will gain XPK support with no changes in code or recompilation.&lt;br /&gt;
&lt;br /&gt;
Example 1 (see a frame on the left) loads an XPK packed BMP image (It is a Reggae logo, 512 × 512 pixels, 24-bit) from a file and displays it in a window using picture.output. As BMP format has no compression and the image has big areas of solid colors, the compression ratio is very good (98.48% of gain, from 786 486 to 11 992 bytes). The file is compressed with GZIP packer. What is interesting in this code, it really does not matter if the file reggae512.bmp.xpk is compressed or not. One can try to decompress the file leaving the original name. The .xpk extension does not matter, as Reggae does not rely on extension in format recognition code. The example will load and display uncompressed image with no single character changed in the code. This is how transparency of XPK support works.&lt;br /&gt;
&lt;br /&gt;
A few words about the code. The main() function opens needed libraries and creates a Reggae decoding tree starting from file stream of given name. There is MMT_PICTURE filter added to avoid loading files not being pictures. Then display_picture() function gets picture dimensions and opens a window of needed size. Finally blit_picture() creates picture.output object, connects it with processing tree, sets destinaion RastPort to the window one and specifies offsets, so the image is displayed inside window borders. MMM_Play() method causes the picture to be drawn. Note that picture.output does it in strips, so memory footprint is kept low. Function wait_for_closing() is nothing more than a plain Intuition message handling loop, which exits after window close gadget is clicked.&lt;br /&gt;
&lt;br /&gt;
== Compressed data in memory ==&lt;br /&gt;
&lt;br /&gt;
Instead of loading image from a file, one can convert compressed data into link object or C source and then link it with executable. This is useful for things like program logo or some specific gadget imagery. Example 2 program demonstrates this technique. The code is almost identical to example 1 (that is why the code is not repeated here). The first, obvious difference is addition of large table containing compressed data. The table has been generated with BinToC tool. The second difference is data source specification for MediaNewObject(). Stream type is now memory.stream. Instead of passing stream name, stream handle is specified, which for memory streams is just address of the data. Memory stream needs also length specification (as there is no such thing as stream end) with MMA_StreamLength attribute. The rest of code is unchanged. XPK decompression is fully automatic, as in the previous example.&lt;br /&gt;
&lt;br /&gt;
== Using xpk.demuxer for raw data ==&lt;br /&gt;
&lt;br /&gt;
Sometimes it may be feasible to compress some raw data with XPK. For example storing images as BMP files has a disadvantage of inverted scanline order, which forces Reggae to buffer the whole image in memory. Both example programs above allocate 786 432 bytes for image buffer. It may be avoided by storing the image as raw data with proper top-to-bottom scanline order (in fact it may be avoided also by using some sane image format with strong internal compression like PNG, so the whole XPK game is not worth playing...). The class may be also used for any data not to be decoded by Reggae, just as a comfortable wrapper over XPK API. One may be surprised that XpkRead() and XpkSeek() are not counterparts of Read() and Seek() respectively. XpkRead() forces to read decompressed data in big chunks, size of chunk depends on packing method used and varies typically from 32 to 256 kB. XpkSeek() seeks to the chunk boundary and returns position in the next uncompressed chunk yet to be read.&lt;br /&gt;
&lt;br /&gt;
Using xpk.demuxer as a standalone component, one can avoid these XPK API obstacles. The class provides MMM_Pull() and MMM_Seek() methods with single byte resolution, all buffering needed is handled internally. The example 3 illustrates the usage of xpk.demuxer for raw data. The example is a fully featured file fragments cutter. Because of this the source code is a bit longer, but still compact. Because we can't use MediaNewObject() automation here, file.stream and xpk.demuxer classes have to be opened manually with OpenLibrary() in Main(). Then, after parsing commandline arguments, perform_action() creates Reggae processing pipeline by hand. Stream object and xpk.demuxer instance are created and then connected together with MediaConnectTagList() call. When the pipeline is ready and an output file is opened with usual Open(), pump_data() function is called for every fragment. The pump_data() function could consist of a single MMM_Seek(), MMM_Pull and Write(), but data copying has been programmed in a loop with 64 kB buffer. Then cutting large data chunks is not memory demanding. Thanks to wrapping XPK with xpk.demuxer, data can be pulled with arbitrary amounts every time independently of any previous MMM_Seek() or compressor natural chunk size.&lt;br /&gt;
&lt;br /&gt;
In this example XPK support is transparent as well, as uncompressed files are handled just fine. Note however that this is done other way than in previous examples. When Reggae creates a processing tree automatically with MediaNewObject(), an xpk.demuxer object is created only if datastream is compressed. In the last example, xpk.demuxer instance is always created and data always go through it. Then XPK itself is instructed to pass uncompressed data through. This feature of XPK may cause some troubles however. When xpkmaster.library detects uncompressed data and is requested to pass them through, it wants to know the length of data first. Then, if a stream object connected to an xpk.demuxer instance reports unknown stream length, connecting stream and demuxer with MediaConnect() will fail. Most of stream classes report known stream length. At the time of writing, the only stream able to return 0 (unknown) length is http.stream when using chunked transfer (see RFC 2616 for details).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define __NOLIBBASE__&lt;br /&gt;
#define USE_INLINE_STDARG&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;proto/exec.h&amp;gt;&lt;br /&gt;
#include &amp;lt;proto/intuition.h&amp;gt;&lt;br /&gt;
#include &amp;lt;proto/multimedia.h&amp;gt;&lt;br /&gt;
#include &amp;lt;classes/multimedia/video.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
extern struct Library *SysBase, *DOSBase;&lt;br /&gt;
struct Library *IntuitionBase, *MultimediaBase;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void wait_for_closing(struct Window *window)&lt;br /&gt;
{&lt;br /&gt;
  BOOL running = TRUE;&lt;br /&gt;
  struct IntuiMessage *imsg;&lt;br /&gt;
&lt;br /&gt;
  while (running)&lt;br /&gt;
  {&lt;br /&gt;
    WaitPort(window-&amp;gt;UserPort);&lt;br /&gt;
&lt;br /&gt;
    while (imsg = (struct IntuiMessage*)GetMsg(window-&amp;gt;UserPort))&lt;br /&gt;
    {&lt;br /&gt;
      if (imsg-&amp;gt;Class == IDCMP_CLOSEWINDOW) running = FALSE;&lt;br /&gt;
      ReplyMsg(&amp;amp;imsg-;&amp;gt;ExecMessage);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void blit_picture(Object *picture, struct Window *window)&lt;br /&gt;
{&lt;br /&gt;
  Object *pic_output;&lt;br /&gt;
  struct Library *picture_output_base;&lt;br /&gt;
&lt;br /&gt;
  if (picture_output_base = OpenLibrary(&amp;quot;multimedia/picture.output&amp;quot;, 51))&lt;br /&gt;
  {&lt;br /&gt;
    if (pic_output = NewObject(NULL, &amp;quot;picture.output&amp;quot;,&lt;br /&gt;
      MMA_Video_DestOffsetX, window-&amp;gt;BorderLeft,&lt;br /&gt;
      MMA_Video_DestOffsetY, window-&amp;gt;BorderTop,&lt;br /&gt;
      MMA_Video_RastPort, (ULONG)window-&amp;gt;RPort,&lt;br /&gt;
    TAG_END))&lt;br /&gt;
    {&lt;br /&gt;
      if (MediaConnectTagList(picture, 0, pic_output, 0, TAG_END))&lt;br /&gt;
      {&lt;br /&gt;
        DoMethod(pic_output, MMM_Play);&lt;br /&gt;
      }&lt;br /&gt;
      DisposeObject(pic_output);&lt;br /&gt;
    }&lt;br /&gt;
    CloseLibrary(picture_output_base);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void display_picture(Object *picture)&lt;br /&gt;
{&lt;br /&gt;
  LONG width, height;&lt;br /&gt;
&lt;br /&gt;
  width = MediaGetPort(picture, 0, MMA_Video_Width);&lt;br /&gt;
  height = MediaGetPort(picture, 0, MMA_Video_Height);&lt;br /&gt;
&lt;br /&gt;
  if (width &amp;amp;&amp;amp; height)&lt;br /&gt;
  {&lt;br /&gt;
    struct Window *window;&lt;br /&gt;
&lt;br /&gt;
    if (window = OpenWindowTags(NULL,&lt;br /&gt;
      WA_InnerWidth, width,&lt;br /&gt;
      WA_InnerHeight, height,&lt;br /&gt;
      WA_Title, (ULONG)&amp;quot;Reggae and XPK tutorial, example 1&amp;quot;,&lt;br /&gt;
      WA_DragBar, TRUE,&lt;br /&gt;
      WA_DepthGadget, TRUE,&lt;br /&gt;
      WA_CloseGadget, TRUE,&lt;br /&gt;
      WA_IDCMP, IDCMP_CLOSEWINDOW,&lt;br /&gt;
    TAG_END))&lt;br /&gt;
    {&lt;br /&gt;
      blit_picture(picture, window);&lt;br /&gt;
      wait_for_closing(window);&lt;br /&gt;
      CloseWindow(window);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  if (IntuitionBase = OpenLibrary(&amp;quot;intuition.library&amp;quot;, 50))&lt;br /&gt;
  {&lt;br /&gt;
    if (MultimediaBase = OpenLibrary(&amp;quot;multimedia/multimedia.class&amp;quot;, 52))&lt;br /&gt;
    {&lt;br /&gt;
      Object *picture;&lt;br /&gt;
&lt;br /&gt;
      if (picture = MediaNewObjectTags(&lt;br /&gt;
        MMA_StreamType, (ULONG)&amp;quot;file.stream&amp;quot;,&lt;br /&gt;
        MMA_StreamName, (ULONG)&amp;quot;reggae512.bmp.xpk&amp;quot;,&lt;br /&gt;
        MMA_MediaType, MMT_PICTURE,&lt;br /&gt;
      TAG_END))&lt;br /&gt;
      {&lt;br /&gt;
        display_picture(picture);&lt;br /&gt;
        DisposeObject(picture);&lt;br /&gt;
      }&lt;br /&gt;
      CloseLibrary(MultimediaBase);&lt;br /&gt;
    }&lt;br /&gt;
    CloseLibrary(IntuitionBase);&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Reggae:_MorphOS_multimedia_framework&amp;diff=4342</id>
		<title>Reggae: MorphOS multimedia framework</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Reggae:_MorphOS_multimedia_framework&amp;diff=4342"/>
				<updated>2024-06-18T17:37:40Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: /* General */ Reggae and XPK&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Grzegorz Kraszewski''&lt;br /&gt;
==Introduction==&lt;br /&gt;
'''Reggae''' is the name for modular MorphOS subsystem for handling media files (currently pictures and sounds, video and other contents will come in the future). Reggae is implemented as a large set of MorphOS shared libraries stored in ''MOSSYS:Classes/Multimedia/'' directory. Third party Reggae classes may be copied to ''SYS:Classes/Multimedia/''. Using Reggae an application developer can easily perform following tasks related to media processing:&lt;br /&gt;
* Recognizing media type and format.&lt;br /&gt;
* Streaming media via different transports.&lt;br /&gt;
* Demultiplexing compound media streams.&lt;br /&gt;
* Decoding media to plain, uncompressed format.&lt;br /&gt;
* Processing by applying filters.&lt;br /&gt;
* Presenting media to the user.&lt;br /&gt;
* Encoding and multiplexing.&lt;br /&gt;
Reggae is an object oriented framework. Every media processing task creates a pipe (or tree) of Reggae objects connected to each other. Media data travel along this structure in relatively small chunks. This pipelined processing allows for handling very big data, much bigger than available system memory.&lt;br /&gt;
==Overview==&lt;br /&gt;
This section contains general Reggae information, its design principles, usage patterns and rules.&lt;br /&gt;
* [[Kinds of Reggae classes]].&lt;br /&gt;
* [[Reggae common formats]].&lt;br /&gt;
&lt;br /&gt;
==Tutorials==&lt;br /&gt;
This section contains Reggae programming tutorials with example code.&lt;br /&gt;
===General===&lt;br /&gt;
* [[Reggae tutorial: Accessing Reggae in applications|Accessing Reggae in applications]]&lt;br /&gt;
* [[Downloading web resources with http.stream - basics]]&lt;br /&gt;
* [[Downloading web resources with http.stream - advanced]]&lt;br /&gt;
* [[Writing Reggae classes]]&lt;br /&gt;
* [[Reggae and XPK]]&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
* [[Reggae tutorial: Playing a sound from file|Playing a sound from file]].&lt;br /&gt;
* [[Reggae tutorial: Playing a sound from memory|Playing a sound from memory]].&lt;br /&gt;
* [[Reggae tutorial: Playing a synthesized, continuous wave|Playing a continuous, synthesized wave]].&lt;br /&gt;
* [[Reggae tutorial: Saving audio in user selected format|Saving audio in user selected format]].&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Printing&amp;diff=4341</id>
		<title>Printing</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Printing&amp;diff=4341"/>
				<updated>2024-06-14T11:58:20Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: /* General Information */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General Information ==&lt;br /&gt;
MorphOS has two separate printing systems, see [https://www.morphos-storage.net/?id=1588365 this PDF]&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
== Output Devices ==&lt;br /&gt;
=== USBPAR: ===&lt;br /&gt;
This option allows any '''Hardware Compatible''' PostScript printer, with a printer's compatible PPD file installed in the System:Preferences/ '''Printers''' (which is '''NOT''' the '''PRINTER''' Preferences option) with a USB2 port to be able to direct its output as PostScript data using the '''USBPAR''': device, which is by default '''NOT installed''' in the default setup of MorphOS, and requires the USBPAR: device to be transferred from the MOSSYS: (MorphOS root directory inside the '''System''': otherwise known as '''SYS''': folder) from within the MorphOS/Storage/DOSDrivers folder to the DEVS:DOSDrivers folder of the main System (SYS:) partition.&lt;br /&gt;
&lt;br /&gt;
''copy Mossys:Storage/DOSDrivers/USBPAR to sys:Devs/DOSDrivers/ move''&lt;br /&gt;
&lt;br /&gt;
=== NETPAR: ===&lt;br /&gt;
The NETPAR: device can be used to print directly to network attached printers...&lt;br /&gt;
&lt;br /&gt;
Configure a network connected printer from the NetPrinter settings in the MorphOS Preferences application...&lt;br /&gt;
&lt;br /&gt;
Mount the NETPAR: device by....&lt;br /&gt;
&lt;br /&gt;
=== PS: ===&lt;br /&gt;
PostScript output via TurboPrint by using GhostScript...&lt;br /&gt;
&lt;br /&gt;
== Setting Up a Printer ==&lt;br /&gt;
=== TurboPrint ===&lt;br /&gt;
Open the '''Printer''' preferences from the MorphOS Preferences application...&lt;br /&gt;
&lt;br /&gt;
=== PostScript ===&lt;br /&gt;
Open the '''Printers''' preferences from the MorphOS Preferences application...&lt;br /&gt;
&lt;br /&gt;
== Printing From Applications ==&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Applications/VNCServer&amp;diff=4329</id>
		<title>Applications/VNCServer</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Applications/VNCServer&amp;diff=4329"/>
				<updated>2023-12-15T14:25:50Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: /* Autostart */ why?!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
Remote access server allowing clients to connect using the VNC protocol.  &lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
=== Autostart ===&lt;br /&gt;
&lt;br /&gt;
Add to &amp;lt;nowiki&amp;gt;S:Network-User-Startup&amp;lt;/nowiki&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 Run &amp;gt;NIL: SYS:Applications/VNCServer/VNCServer&lt;br /&gt;
&lt;br /&gt;
Once started VNCServer will be available in the Exchange ([[Utilities/Commodities#Exchange.C2.A0]]).&lt;br /&gt;
&lt;br /&gt;
=== Without GFX card ===&lt;br /&gt;
&lt;br /&gt;
Copy Virtual driver with its icon (MOSSYS:Storage/Devs/Virtual) to SYS:Devs/Monitors/.&lt;br /&gt;
Edit its icon information to enable wanted screenmodes.&lt;br /&gt;
&lt;br /&gt;
== Screenshot ==&lt;br /&gt;
: [[File:MorphOS3_jPV_Vncserver.png]]&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=%22Hello_world!%22_in_MUI&amp;diff=4328</id>
		<title>&quot;Hello world!&quot; in MUI</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=%22Hello_world!%22_in_MUI&amp;diff=4328"/>
				<updated>2023-12-11T14:30:32Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: Fixed link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Grzegorz Kraszewski''&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;small&amp;gt;This article in other languages: [[&amp;quot;Hello world!&amp;quot; w MUI|Polish]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:helloworld.png|left]] This is the window of the example MUI application. It is very simple, it contains only one static text object and no gadgets, except for window border gadgets. Note that the number of gadgets on the right side of the window depends on user MUI settings. The source code of the application is very simple too and fits into 60 lines, including proper vertical spacing. It is cut in pieces in the article for better reading. A complete, ready to compile version [https://web.archive.org/web/20160730092654/http://krashan.ppa.pl/mph/files/helloworld-mui.c is available] too.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;proto/muimaster.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;proto/intuition.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Header files for ''muimaster.library'' and ''intuition.library'' are included. Note that these libraries will be [[MorphOS_API_and_Its_Organization#How_to_Use_a_Library_in_an_Application|opened and closed automatically]].&lt;br /&gt;
 &lt;br /&gt;
 Object *App, *Win;&lt;br /&gt;
&lt;br /&gt;
Global pointers for the application object and the window object. While using many global variables is considered inelegant, having globals for the most important objects is handy, especially in such a small project.&lt;br /&gt;
 &lt;br /&gt;
 Object* build_gui(void)&lt;br /&gt;
 {&lt;br /&gt;
   App = MUI_NewObject(MUIC_Application,&lt;br /&gt;
     MUIA_Application_Author, (ULONG)&amp;quot;Grzegorz Kraszewski&amp;quot;,&lt;br /&gt;
     MUIA_Application_Base, (ULONG)&amp;quot;HELLOWORLD&amp;quot;,&lt;br /&gt;
     MUIA_Application_Copyright, (ULONG)&amp;quot;© 2010 Grzegorz Kraszewski&amp;quot;,&lt;br /&gt;
     MUIA_Application_Description, (ULONG)&amp;quot;Hello World in MUI.&amp;quot;,&lt;br /&gt;
     MUIA_Application_Title, (ULONG)&amp;quot;Hello World&amp;quot;,&lt;br /&gt;
     MUIA_Application_Version, (ULONG)&amp;quot;$VER: HelloWorld 1.0 (16.11.2010)&amp;quot;,&lt;br /&gt;
     MUIA_Application_Window, (ULONG)(Win = MUI_NewObject(MUIC_Window,&lt;br /&gt;
       MUIA_Window_Title, (ULONG)&amp;quot;Hello World&amp;quot;,&lt;br /&gt;
       MUIA_Window_RootObject, MUI_NewObject(MUIC_Group,&lt;br /&gt;
         MUIA_Group_Child, MUI_NewObject(MUIC_Text,&lt;br /&gt;
           MUIA_Text_Contents, (ULONG)&amp;quot;Hello world!&amp;quot;,&lt;br /&gt;
         TAG_END),&lt;br /&gt;
       TAG_END),&lt;br /&gt;
     TAG_END)),&lt;br /&gt;
   TAG_END);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
The above function creates the complete object tree for ''HelloWorld''. The master object is the ''Application'' class instance. It has a ''Window'' object. The window root is a ''Group'' object containing one ''Text'' object. The application object has 6 attributes working as descriptors used in different places in the system. They are not required for running the program, but help integrating it with the system. The meaning of these attributes is explained in the autodoc of ''Application'' class in the SDK. The rest of the attributes are self-explaining, please refer to the autodocs of respective MUI classes for details.&lt;br /&gt;
&lt;br /&gt;
The function illustrates a typical way of creating a MUI interface. The complete object tree is created in one big ''MUI_NewObject()'' call containing nested sub-calls. The order of code execution is different to the order of reading. The most nested objects are created first and passed to constructors of their parents. The application object is created last. This way of creating the application also ensures automatic error handling. If any of constructors fails, it passes ''NULL'' to a parent constructor, making it fail too and then dispose all successfully constructed child objects. Finally the application constructor fails and returns ''NULL''. Then only two states of the application are possible: either the application is fully constructed, or it is not constructed at all. This behaviour greatly simplifies error handling.&lt;br /&gt;
&lt;br /&gt;
 void notifications(void)&lt;br /&gt;
 {&lt;br /&gt;
   DoMethod(Win, MUIM_Notify, MUIA_Window_CloseRequest, TRUE, App, 2,&lt;br /&gt;
    MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The next step is to make [[Event Driven Programming, Notifications#Notifications in MUI|notifications]]. This simple program contains only one notification, which terminates the program after the window close gadget is clicked. MUI maps a left mouse button click on the gadget to a change of ''MUIA_Window_CloseRequest'' attribute. The notification target is the application, the ''MUIM_Application_ReturnID()'' method then passes the quit action identifier to the main loop.&lt;br /&gt;
&lt;br /&gt;
 void main_loop(void)&lt;br /&gt;
 {&lt;br /&gt;
   ULONG signals = 0;&lt;br /&gt;
 &lt;br /&gt;
   set(Win, MUIA_Window_Open, TRUE);&lt;br /&gt;
 			 &lt;br /&gt;
   while (DoMethod(App, MUIM_Application_NewInput, &amp;amp;signals) != MUIV_Application_ReturnID_Quit)&lt;br /&gt;
   {&lt;br /&gt;
     signals = Wait(signals | SIGBREAKF_CTRL_C);&lt;br /&gt;
     if (signals &amp;amp; SIGBREAKF_CTRL_C) break;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   set(Win, MUIA_Window_Open, FALSE);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The standard main loop has been discussed in the [[Event_Driven_Programming,_Notifications#The_Ideal_MUI_Main_Loop|previous chapter]]. The only addition is opening the window before the loop and closing it after.&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   App = build_gui();&lt;br /&gt;
 &lt;br /&gt;
   if (App)&lt;br /&gt;
   {&lt;br /&gt;
     notifications();&lt;br /&gt;
     main_loop();&lt;br /&gt;
     MUI_DisposeObject(App);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Finally, the main function of the program. It builds the object tree first and checks if it succeeded. In case of a fail, the program ends immediately. After all the objects are created, notifications are added and the program enters the main loop. When the loop finishes, the application object is disposed. It also disposes all its sub-objects.&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Links&amp;diff=4325</id>
		<title>Links</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Links&amp;diff=4325"/>
				<updated>2023-10-19T15:01:57Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: /* File Repositories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Official MorphOS Website==&lt;br /&gt;
* http://www.morphos-team.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Community Portals &amp;amp; Forums==&lt;br /&gt;
* http://morph.zone&lt;br /&gt;
&lt;br /&gt;
* https://www.morphos-forum.de&lt;br /&gt;
&lt;br /&gt;
* http://www.pegasos.org&lt;br /&gt;
&lt;br /&gt;
* http://www.pegasos.hu&lt;br /&gt;
&lt;br /&gt;
* http://www.ppa.pl&lt;br /&gt;
&lt;br /&gt;
* http://saku.bbs.fi/foorumi&lt;br /&gt;
&lt;br /&gt;
* http://www.warmup-asso.org&lt;br /&gt;
&lt;br /&gt;
* http://www.warmup-asso.fr&lt;br /&gt;
&lt;br /&gt;
* http://www.morphos-store.com - A website to buy and sell MorphOS hardware and software.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File Repositories==&lt;br /&gt;
&lt;br /&gt;
* http://mos.aminet.net - Aminet MorphOS Section&lt;br /&gt;
&lt;br /&gt;
* http://www.morphos-storage.net -  MorphOS Storage by WArMUp&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;http://morphos-files.ppa.pl&amp;lt;/s&amp;gt; - MorphOS File Hosting Service (abandoned)&lt;br /&gt;
&lt;br /&gt;
* http://morphos.lukysoft.cz - MorphOS Software Database&lt;br /&gt;
&lt;br /&gt;
==Shops==&lt;br /&gt;
&lt;br /&gt;
* https://www.morphos-store.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Demoscene&lt;br /&gt;
&lt;br /&gt;
* http://amiga.bbs.fi/demopack_morphos/ - MorphOS Demopack&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Emulation&lt;br /&gt;
&lt;br /&gt;
* http://www.amidog.com/amiga/fpse/ - Free PlayStation Emulator, ported by Mathias 'AmiDog' Roslund&lt;br /&gt;
&lt;br /&gt;
* http://ace.cpcscene.net/en:introduction - The acidulous CPC/CPC+ emulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Internet &amp;amp; Network&lt;br /&gt;
&lt;br /&gt;
* http://www.amipodder.com - AmiPodder, free podcast client&lt;br /&gt;
&lt;br /&gt;
* http://www.heightanxiety.com/AmiSSL/ - Port of OpenSSL for legacy applications&lt;br /&gt;
&lt;br /&gt;
* http://amitradecenter.net - AmiTradeCenter, FTP client&lt;br /&gt;
&lt;br /&gt;
* http://www.students.tut.fi/~komsa/amiga/beehive/ - Home of Beehive, a BitTorrent client&lt;br /&gt;
&lt;br /&gt;
* http://sourceforge.net/projects/simplemail/ - SimpleMail, open source email client&lt;br /&gt;
&lt;br /&gt;
* http://www.yam.ch - YAM, open source email client&lt;br /&gt;
&lt;br /&gt;
* http://www.amirc.org - The famous IRC client&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Music&lt;br /&gt;
&lt;br /&gt;
* http://www.digiboosterpro.de/en/ - Home of Digibooster Pro&lt;br /&gt;
&lt;br /&gt;
* http://jahjah.free.fr/morphos/ - Home of Ripper, a CD music ripping and conversion tool&lt;br /&gt;
&lt;br /&gt;
* http://amigadev.free.fr/songplayer/index_en.html - Home of SongPlayer, a music player&lt;br /&gt;
&lt;br /&gt;
* http://tcheko.binaryriot.org/soundbankster/ - A realtime audio mixing application dedicated to DJ enthusiasts&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Office&lt;br /&gt;
&lt;br /&gt;
* http://amigadev.free.fr/pointrider/ - PowerPoint viewer application&lt;br /&gt;
&lt;br /&gt;
* http://www.grasshopperllc.com - Home of Pagestream, a commercial desktop publishing / page layout software&lt;br /&gt;
&lt;br /&gt;
* http://beebase.sourceforge.net - Home of BeeBase aka MUIBase, Steffen Gutmann's relational programmable database (with GUI)&lt;br /&gt;
&lt;br /&gt;
* http://shinkuro.altervista.org/amiga/software/nowined.htm - Home of NoWinEd, text editor&lt;br /&gt;
&lt;br /&gt;
* http://www.winfield.demon.nl - Free MS Word reader&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Package Management&lt;br /&gt;
&lt;br /&gt;
* http://www.geit.de/eng_grunch.html - Search, download, install, update, and uninstall programs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
System&lt;br /&gt;
&lt;br /&gt;
* http://morphosambient.sourceforge.net - Ambient 'desktop' environment&lt;br /&gt;
&lt;br /&gt;
* http://scalos.noname.fr - Scalos desktop, an alternative to Ambient&lt;br /&gt;
&lt;br /&gt;
* http://sourceforge.net/projects/snoopium/ - System monitor application.&lt;br /&gt;
&lt;br /&gt;
* http://sourceforge.net/projects/backman/ - Backman, open source backup program&lt;br /&gt;
&lt;br /&gt;
* http://amigazeux.net/diavolo/ - Diavolo Backup, formerly commercial backup program&lt;br /&gt;
&lt;br /&gt;
==Developers==&lt;br /&gt;
&lt;br /&gt;
* http://amigazeux.org - AmiNet Radio, Dragon, Wetter, SkinClock, and much more.&lt;br /&gt;
&lt;br /&gt;
* http://polymere.free.fr/index_en.html - Home of PolyNet (icon bar), PolyOrganizer and PolyGlot (MSN messenger)&lt;br /&gt;
&lt;br /&gt;
* http://members.shaw.ca/realstar/ - Developer of the Aqua, Eve and HyperCannon game titles.&lt;br /&gt;
&lt;br /&gt;
* http://fabportnawak.free.fr - MPlayer, ScummVM, Odyssey Web Browser, MAME, and more.&lt;br /&gt;
&lt;br /&gt;
* http://krashan.ppa.pl - DigiBooster 3, MorphOS Programmer's Handbook, audio tools, and more.&lt;br /&gt;
&lt;br /&gt;
* http://tbs-software.com/morgoth/&lt;br /&gt;
&lt;br /&gt;
* http://khtml.ppa.pl&lt;br /&gt;
&lt;br /&gt;
* http://bigfoot.morphos-team.net&lt;br /&gt;
&lt;br /&gt;
* http://dreamolers.binaryriot.org&lt;br /&gt;
&lt;br /&gt;
* http://tokai.binaryriot.org&lt;br /&gt;
&lt;br /&gt;
* http://www.biclodon.com&lt;br /&gt;
&lt;br /&gt;
* http://www.iki.fi/sintonen&lt;br /&gt;
&lt;br /&gt;
* http://www.tbs-software.com/stefkos/&lt;br /&gt;
&lt;br /&gt;
* http://home.elka.pw.edu.pl/~mszyprow/programy/ - Author of SFSDoctor.&lt;br /&gt;
&lt;br /&gt;
* http://kiero.binaryriot.org - Freespace 1&amp;amp;2, Foobilliard, Homeworld, scube, szoom, and more.&lt;br /&gt;
&lt;br /&gt;
* http://www.geit.de - Home of Grunch, MagicBeacon, MMKeyboard, and more.&lt;br /&gt;
&lt;br /&gt;
* http://yellowblue.free.fr - Home of Yomgui, who maintains Blender, Python, PyMUI and Helios (Firewire)&lt;br /&gt;
&lt;br /&gt;
* http://www.orel.rekom.ru/~imax/ - Maxim Ilyin ported VirtualJaguar, Mike Steed's FlashPlayer, and more.&lt;br /&gt;
&lt;br /&gt;
* http://haru.at/ - Creator of MorphUp packagement system, ported VLC, MLDonkey, and more.&lt;br /&gt;
&lt;br /&gt;
* http://www.amirus.org.ru - Various utilities such a KeyMorpher, a MUI-based key mapper. (Website is in Russian.)&lt;br /&gt;
&lt;br /&gt;
* http://tbs-software.com/mark/ - Developer of PowerD, various utilities.&lt;br /&gt;
&lt;br /&gt;
* http://tbs-software.com/powerd/ - PowerD programming language&lt;br /&gt;
&lt;br /&gt;
* http://www.lukysoft.cz - Home of Lukáš Stehlík (AmiGod benchmark)&lt;br /&gt;
&lt;br /&gt;
* http://dasixk.free.fr - Home of SixK, who ported a multitude of apps&lt;br /&gt;
&lt;br /&gt;
* http://alfie.altervista.org - Home of Alfonso 'alfie' Ranieri, creator of RxMUI, AmRSS (RSS client), and much more. &lt;br /&gt;
&lt;br /&gt;
* http://morphware.schwarzes.net - Various small tools made by Andreas Schwarz.&lt;br /&gt;
&lt;br /&gt;
* http://www.onyxsoft.se - Home of Onyxsoft who have released a number of applications and games.&lt;br /&gt;
&lt;br /&gt;
* http://www.mguc.ppa.pl - Marian Guc's website, developer of PciTool, AutoDoc Reader and the unfinished Nemesis desktop.&lt;br /&gt;
&lt;br /&gt;
* http://brain.umcs.lublin.pl/~rzookol/ - Michał Żukowski's website, developer of SCANdal (scanner software)&lt;br /&gt;
&lt;br /&gt;
* http://www.igracki.de - gTranslator, yWeather, CRABUM, and more.&lt;br /&gt;
&lt;br /&gt;
* http://www.morguesoft.eu - Various screen savers.&lt;br /&gt;
&lt;br /&gt;
* http://tcheko.binaryriot.org/ - SoundBankster, commodities, utils.&lt;br /&gt;
&lt;br /&gt;
* http://bszili.morphos.me/ - Home of BSzili, who has ported numerous games.&lt;br /&gt;
&lt;br /&gt;
* http://jpv.wmhost.com/jpv_software/ - Hollywood applications and Lua, ARexx, and shell scripts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Misc==&lt;br /&gt;
&lt;br /&gt;
* http://www.via-altera.de/mid.htm - some documents about MorphOS (German/English)&lt;br /&gt;
* https://morphosuser.wordpress.com - Yasu's MorphOS Blog&lt;br /&gt;
* http://pegasos.lena-johannson.de/ - Otti website with many Deutsch translations&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Utilities/KeyExplorer&amp;diff=4324</id>
		<title>Utilities/KeyExplorer</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Utilities/KeyExplorer&amp;diff=4324"/>
				<updated>2023-10-16T15:01:44Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: /* Screenshot */ 2nd screenshot&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
A utility showing ascii and hex values for characters. The utility also shows the keyboard combination for a character.&lt;br /&gt;
&lt;br /&gt;
Useful for finding codes when typing unsupported characters on limited keyboards. You may also open the virtual keyboard from the menu bar.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* Click any character to show information about it in the Details area.&lt;br /&gt;
* The selected character can be copied to the clipboard with the context menu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Screenshot ==&lt;br /&gt;
:[[File:KeyExplorer.png]]&lt;br /&gt;
:[[File:MorphOS 3.10 Screenbar Keyinput.png]]&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Utilities/KeyExplorer&amp;diff=4323</id>
		<title>Utilities/KeyExplorer</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Utilities/KeyExplorer&amp;diff=4323"/>
				<updated>2023-10-16T14:50:17Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: /* Description */ virtual keyboard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
A utility showing ascii and hex values for characters. The utility also shows the keyboard combination for a character.&lt;br /&gt;
&lt;br /&gt;
Useful for finding codes when typing unsupported characters on limited keyboards. You may also open the virtual keyboard from the menu bar.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* Click any character to show information about it in the Details area.&lt;br /&gt;
* The selected character can be copied to the clipboard with the context menu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Screenshot ==&lt;br /&gt;
:[[File:KeyExplorer.png]]&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=How_to_Install_Directory_Opus_Magellan_II&amp;diff=4322</id>
		<title>How to Install Directory Opus Magellan II</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=How_to_Install_Directory_Opus_Magellan_II&amp;diff=4322"/>
				<updated>2023-10-06T06:55:43Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: /* Misc */ Fixed link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Author: jPV/RNO''&lt;br /&gt;
&lt;br /&gt;
== Preface ==&lt;br /&gt;
&lt;br /&gt;
This is a tutorial how to install the original Amiga version of '''Directory Opus 5.82 Magellan II''' filemanager on a MorphOS machine. There are newer [http://sourceforge.net/projects/dopus5allamigas/ open source] versions of the program [http://www.dopus5.org/ available] nowadays too, but at least MorphOS ports are a bit unstable at the moment and you might prefer to use the original version.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Installing from the Pre-installed Archive ===&lt;br /&gt;
&lt;br /&gt;
The easy method is to install from the pre-installed archive found [http://kas1e.mikendezign.com/misc/dopus5/opus_installed_original_582.lha here].&lt;br /&gt;
# Download [http://kas1e.mikendezign.com/misc/dopus5/opus_installed_original_582.lha the archive] and extract it to the location you want.&lt;br /&gt;
# Edit the S:user-startup file with correct Assign and Path lines. It is important that DOpus5: assign points to the correct directory where you extracted the archive. Here's how it looks after the original installer:&amp;lt;br /&amp;gt;[[File:Dopus5_assigns.png|320px]]&lt;br /&gt;
# Reboot (or set both assign and path manually on the shell).&lt;br /&gt;
# Remove the supplied LHA archive, LZX archive, and Sound Module filetypes, because they don't work properly on MorphOS. Delete them from DOpus5:Filetypes/ directory or move them to the DOpus5:Storage/ directory. Or use Filetypes Settings on the program itself to remove or store them.&lt;br /&gt;
You can now jump to the [http://library.morph.zone/How_to_Install_Directory_Opus_Magellan_II#Registration Registration] section of this tutorial.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installing from Floppy Images ===&lt;br /&gt;
&lt;br /&gt;
Nothing prevents from installing the program from scratch either. It just has more steps and requires original floppy images in ADF format.&lt;br /&gt;
# Download [http://amiga.unikko.org/DOpus5-MagellanII/disks/adf/ ADF images] or convert [http://sourceforge.net/projects/dopus5allamigas/files/Dopus5.82/release/dms/ DMS images] to ADF with [http://morphos-files.net/download/xDMS xDMS], for example.&lt;br /&gt;
# Download two patch archives from [http://sourceforge.net/projects/dopus5allamigas/files/Dopus5.82/release/patches_to_5.82/ SourceForge] or [http://aminet.net/search?query=dopuspatch8 Aminet]. These will be used to update from the initial Magellan II release (5.80) to the latest 5.82 version.&lt;br /&gt;
# Start the Tools/FileImageCtrl program and insert &amp;quot;Opus55_Install&amp;quot; and &amp;quot;Opus55_Extras&amp;quot; ADF files into it (you can drag&amp;amp;drop the files or use the Insert button).&lt;br /&gt;
# Mount the images by selecting &amp;quot;Amiga FFS&amp;quot; filesystem and clicking the Mount button for each file. FileImageCtrl window can be closed after successful mounting.&amp;lt;br /&amp;gt;[[File:Dopus5_adf_mount.png|320px]]&lt;br /&gt;
# Open the Opus55_Install disk from the desktop and double click the InstallOpus icon. Only the important options are covered in the following steps, otherwise just follow the instructions and make your preferred selections.&lt;br /&gt;
# Select &amp;quot;Install or Update Opus 5.5&amp;quot;.&amp;lt;br /&amp;gt;[[File:Dopus5_adf_install.png|320px]]&lt;br /&gt;
# Do '''not''' install ArcDir, because it's broken under MorphOS! We will replace it with XADopus instead.&amp;lt;br /&amp;gt;[[File:Dopus5_adf_install_arcdir.png|320px]]&lt;br /&gt;
# Select &amp;quot;'''Do not start Directory Opus on boot'''&amp;quot; in startup options selection.&amp;lt;br /&amp;gt;[[File:Dopus5_adf_install_not_on_boot.png|320px]]&lt;br /&gt;
# '''Reboot''' the machine after the installation is done.&lt;br /&gt;
# Start the Tools/FileImageCtrl program again, insert the MagellanII_Install ADF image, and mount it.&lt;br /&gt;
# Open the disk on the desktop, double click the Install_Opus_MagellanII icon, and select &amp;quot;Update Opus to Magellan-II&amp;quot;. Installation should be straightforward to finish.&amp;lt;br /&amp;gt;[[File:Dopus5_adf_magellan2_update.png|320px]]&lt;br /&gt;
# After successful Magellan II update, extract the two patch archive files (5.81 and 5.82 updates) to a temporary directory, like &amp;quot;Ram Disk:&amp;quot; for example.&lt;br /&gt;
# Navigate to &amp;quot;PCH581&amp;quot; drawer, double click the Opus_Patch580-581 file, and do the installation.&amp;lt;br /&amp;gt;[[File:Dopus5_adf_581_patch.png|320px]]&lt;br /&gt;
# Navigate to &amp;quot;PCH582&amp;quot; drawer, double click the Opus_Patch581-582 file, and start the installation.&amp;lt;br /&amp;gt;[[File:Dopus5_adf_582_patch.png|320px]]&lt;br /&gt;
# When it asks to update the OS 3.5 icon.library, select &amp;quot;'''Skip This Part'''&amp;quot;.&amp;lt;br /&amp;gt;[[File:Dopus5_adf_582_patch_skip_iconlibrary.png|320px]]&lt;br /&gt;
The base installation is now done and you can start the program from the location you originally chose.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Registration ==&lt;br /&gt;
&lt;br /&gt;
You can use a free serial number (4456BLJEM4616474390) to finalize the installation and to prevent the registration window popping up on program startup. Registration window may cause debug hits on MorphOS if it doesn't accept the data you entered. If that happens, reboot the machine before continuing.&lt;br /&gt;
&lt;br /&gt;
:: [[File:Dopus5 registration.png|320px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Workarounds for Graphical Issues on MorphOS ==&lt;br /&gt;
&lt;br /&gt;
When the program is run with default settings, it opens on its own screen and some quite visible graphical issues are seen. A custom screen title and two window gadgets don't seem to fit with the rest, and Ambient's PNG icons don't work.&lt;br /&gt;
&lt;br /&gt;
:: [[File:Dopus5 firstrun.png|320px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The custom screen title can be removed with the DOpus/WorkbenchTitle env variable. Type in the shell: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Setenv SAVE DOpus/WorkbenchTitle 1&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the problematic gadgets can be removed with the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Setenv SAVE DOpus/HidePadLock 1&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:: [[File:Dopus5_env_set.png|320px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The other gadget (iconify) can be removed only by patching the original DirectoryOpus executable. A suitable patch for it can be found inside the [http://jpv.wmhost.com/magellan2ambient/d2a.lha D2A] program's archive. Extract the [http://jpv.wmhost.com/magellan2ambient/d2a.lha D2A] archive and run D2A/Patch/Script file. It will make a backup of the original executable and replace it with a new patched one.&lt;br /&gt;
&lt;br /&gt;
:: [[File:Dopus5 gadget patch.png|320px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your Directory Opus screen should look like this now:&lt;br /&gt;
&lt;br /&gt;
:: [[File:Dopus5 gadgets patched.png|320px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Integrating with Ambient ==&lt;br /&gt;
&lt;br /&gt;
PNG icons can't be shown on the Directory Opus screen, but Directory Opus and its functionality can be integrated quite seamlessly to the Ambient screen. It's convenient to select which way you want to manage the files when both Ambient and Directory Opus are on the same screen. You can open Ambient windows when wanting to view by PNG icons and unleash the power of Directory Opus in many other cases.&lt;br /&gt;
&lt;br /&gt;
The integration can be taken a step further by hiding the Directory Opus's main window and enabling the pop up of its listers when clicking on the Ambient screen. This can be achieved with [http://jpv.wmhost.com/magellan2ambient/d2a.lha D2A] or [http://jpv.wmhost.com/magellan2ambient/magellambient.lha Magellambient] programs.&lt;br /&gt;
&lt;br /&gt;
D2A will be used in this tutorial and it requires a working ARexx environment. If you haven't enabled ARexx in your system yet, install rexxsyslib.library with Grunch or [http://library.morph.zone/Tips_and_Tricks#Modifying_the_System_Directory manually].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Download and extract [http://jpv.wmhost.com/magellan2ambient/d2a.lha D2A] to some temporary directory if you haven't done it already.&lt;br /&gt;
# Disable (uncheck) the Backdrop mode from the pulldown menu on Directory Opus.&amp;lt;br /&amp;gt;[[File:Dopus5 disable backdrop.png|320px]]&amp;lt;br /&amp;gt;Main window will show up in full screen size:&amp;lt;br /&amp;gt;[[File:Dopus5 main window.png|320px]]&lt;br /&gt;
# Resize the main window as small as possible.&amp;lt;br /&amp;gt;[[File:Dopus5 main window resized.png|320px]]&lt;br /&gt;
# Select &amp;quot;Settings/Save Layout&amp;quot; from the pulldown menu to snapshot window positions.&amp;lt;br /&amp;gt;[[File:Dopus5 save layout.png|320px]]&lt;br /&gt;
# Open Environment settings from the &amp;quot;Settings/Environment...&amp;quot; pulldown menu and select &amp;quot;Workbench: Use&amp;quot; to a display mode. Click &amp;quot;Save&amp;quot; button.&amp;lt;br /&amp;gt;[[File:Dopus5 display mode.png|320px]]&amp;lt;br /&amp;gt;Directory Opus uses the Ambient screen now:&amp;lt;br /&amp;gt;[[File:Dopus5 on ambient screen.png|320px]]&lt;br /&gt;
# Open the D2A drawer and copy the D2A program to your WBStartup drawer (to be started on boot).&amp;lt;br /&amp;gt;[[File:Dopus5 d2a to wbstartup.png|320px]]&lt;br /&gt;
# (Optional step) By defalut D2A will open a DOpus lister when doing the double click on the desktop, but it may clash with the similar function in Ambient if you have enabled it. D2A can be configured to open the DOpus lister with a single middle (wheel) click instead. Open the icon information window of the D2A in your WBStartup drawer (right click on it and select &amp;quot;Information...&amp;quot; or left click to select the icon and lcommand-i from the keyboard). Double click the &amp;quot;MIDDLE&amp;quot; tooltype so that parentheses around it are removed. Click &amp;quot;Save&amp;quot; button.&amp;lt;br /&amp;gt;[[File:Dopus5 d2a tooltypes.png|320px]]&lt;br /&gt;
# (Optional step) If you want to disable the progress bar on the program startup, you can tune it with the D2A tooltypes too. Add a new tooltype &amp;lt;tt&amp;gt;DOPUS_COMMAND=Run DETACH QUIET DOpus5:DirectoryOpus QUIET&amp;lt;/tt&amp;gt; and save it. The last QUIET disables the progress bar.&amp;lt;br /&amp;gt;[[File:Dopus5 disabling progressbar.png|320px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you now have Directory Opus quitted and double click the D2A icon on the WBStartup drawer (or reboot the computer), Directory Opus will load and it shows the little main window for a few seconds until it gets hidden. The rest of DOpus windows will stay visible on the Ambient screen and you can open new DOpus listers by middle click on empty space on the Ambient desktop (or double left click if you skipped the first optional step).&lt;br /&gt;
&lt;br /&gt;
:: [[File:Dopus5 main window hidden.png|320px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main window can be moved somewhere else on the screen to be less noticeable at the boot. For example to the lower right corner where it doesn't pop up over the drive icons. You can unhide the hidden window with ctrl-alt-u or ctrl-alt-a keyboard combinations if you want to move it after the hiding. I also like to close all DOpus windows to let it be more under the hood on the startup. Use &amp;quot;Save Layout&amp;quot; again to snapshot the window setup and positions.&lt;br /&gt;
&lt;br /&gt;
:: [[File:Dopus5 saving layout with everything hidden.png|320px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Directory Opus running under the hood after a reboot, available with a one click:&lt;br /&gt;
&lt;br /&gt;
:: [[File:Dopus5 hidden on boot.png|320px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Enabling the Archive Browsing with XADopus ===&lt;br /&gt;
&lt;br /&gt;
# Make sure that you don't have any archive filetypes enabled. The File Types window in Directory Opus should look like this after the initial installation:&amp;lt;br /&amp;gt;[[File:Dopus5 filetypes cleared.png|320px]]&lt;br /&gt;
# Download [http://aminet.net/package/util/dopus/XADopus.lha XADopus] archive from Aminet.&lt;br /&gt;
# Copy '''Modules/XADopus.module''' file from the downloaded archive to DOpus5:Modules/ directory.&lt;br /&gt;
# Copy contents of the '''Filetypes''' directory from the downloaded archive to the DOpus5:Filetypes/ directory.&amp;lt;br /&amp;gt;[[File:Dopus5 copy xadopus filetypes.png|320px]]&amp;lt;br /&amp;gt;Your File Types window should look like this after that and you're ready to browse archives:&amp;lt;br /&amp;gt;[[File:Dopus5 filetypes xadopus.png|320px]]&lt;br /&gt;
&lt;br /&gt;
=== Environment variables ===&lt;br /&gt;
&lt;br /&gt;
Type this in the shell to view certain pictures in more MorphOS friendly way:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Setenv SAVE DOpus/ShowUseDatatypesFirst 1&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Environment Settings ===&lt;br /&gt;
&lt;br /&gt;
The default settings are very modest in Directory Opus and you should go through the settings and read the documentation to get an impression what could be useful for you. Here are the most significant environment settings which should at least be enabled.&lt;br /&gt;
&lt;br /&gt;
# Filename Length should be increased to the maximum of 107 characters.&amp;lt;br /&amp;gt;[[File:Dopus5 filename length.png|320px]]&lt;br /&gt;
# It's probably a good idea to enable the RTG Mode for NewIcons.&amp;lt;br /&amp;gt;[[File:Dopus5_rtg_mode.png|320px]]&lt;br /&gt;
# Name Mode PopUp (RMB contextual menus on name mode listers) and Inline Editing (realtime filename/date/protectionbit/comment/etc renaming) are very powerful options which should be enabled always.&amp;lt;br /&amp;gt;[[File:Dopus5_namemodepopup_inlineedit.png|320px]]&lt;br /&gt;
# Thin Gadget Borders will look better on 1x1 pixel displays nowadays. Enabling &amp;quot;Mouse buttons over inactive banks&amp;quot; did cause some issues on MorphOS 1.x, but quickly tried it wouldn't look like that anymore, but keep it in mind if you decide to enable it.&amp;lt;br /&amp;gt;[[File:Dopus5_tgb.png|320px]]&lt;br /&gt;
&lt;br /&gt;
=== Filetypes ===&lt;br /&gt;
&lt;br /&gt;
Filetypes system is the heart of Directory Opus in practise. Filetypes will identify the type of a file and define actions available for it. Every user should create new filetypes according the other software, needs, and configurations they have and prefer, but [http://jpv.wmhost.com/files/dopus_filetypes_morphos.lha here] is a small collection for starters. It should work generally under any MorphOS setup. Copy the filetypes found in it to your DOpus5:Filetypes/ directory.&lt;br /&gt;
&lt;br /&gt;
The [http://jpv.wmhost.com/files/dopus_filetypes_morphos.lha collection] includes the next filetypes:&lt;br /&gt;
&lt;br /&gt;
'''All''' - a filetype for all files&lt;br /&gt;
* Double click (with Ctrl key pressed): SmartRead&lt;br /&gt;
* Double click (Alt): Version&lt;br /&gt;
* Drag&amp;amp;drop: Copy MOVEWHENSAME&lt;br /&gt;
* Context menu: Duplicate, SmartRead, Version, Open with XAD &lt;br /&gt;
'''All, Directories''' - a filetype for all directories&lt;br /&gt;
* Double click (Ctrl): GetSizes&lt;br /&gt;
* Drag&amp;amp;drop: Copy MOVEWHENSAME&lt;br /&gt;
* Context menu: Get size, Find file, Burn to Disc&lt;br /&gt;
'''Archive, LHA'''&lt;br /&gt;
* Double click: browse the archive with XADopus&lt;br /&gt;
* Drag&amp;amp;drop: extracts to the destination&lt;br /&gt;
* Context menu: Extract to, Extract to RAM:, Extract here&lt;br /&gt;
'''Archive, XZ'''&lt;br /&gt;
* Double click: browse the archive with XADopus&lt;br /&gt;
* Context menu: Extract here&lt;br /&gt;
'''ASCII'''&lt;br /&gt;
* Double click: Multiview&lt;br /&gt;
* Context menu: Edit with Ed, Edit with Scribble&lt;br /&gt;
'''Audio, MP3'''&lt;br /&gt;
* Double click: Play in Jukebox&lt;br /&gt;
'''Document, AmigaGuide'''&lt;br /&gt;
* Double click: Multiview&lt;br /&gt;
'''Document, HTML'''&lt;br /&gt;
* Double click: OpenURL&lt;br /&gt;
'''Document, PDF'''&lt;br /&gt;
* Double click: View with VPDF&lt;br /&gt;
* Context menu: View with APDF&lt;br /&gt;
'''Executable, ELF''' - Recognizes MorphOS PPC native executable files&lt;br /&gt;
* Double click: runs the file as shell command and asks arguments for it&lt;br /&gt;
* Double click (Ctrl): runs the program with WBRun, like you'd clicked the icon&lt;br /&gt;
* Context menu: Execute with WBRun&lt;br /&gt;
'''Image file, ADF'''&lt;br /&gt;
* Double click: browse the image with XADopus&lt;br /&gt;
'''Image file, ISO'''&lt;br /&gt;
* Double click: browses the image on Ambient&lt;br /&gt;
* Context menu: Mount, Burn to Disc&lt;br /&gt;
'''Picture''' - a filetype for all picture files recognized by the datatypes&lt;br /&gt;
* Double click: views the picture by Ambient definitions&lt;br /&gt;
* Context menu: View in Showgirls&lt;br /&gt;
'''Version'''&lt;br /&gt;
* Double click: shows the version information for the following type of files: library, device, gadget, datatype, handler, mcp, mcc, mui&lt;br /&gt;
* This is very simple output from the Version command. For a more advanced version I'd use the WB-Version command or Severin's cool [http://www.amigans.net/modules/xforum/viewtopic.php?post_id=82855#forumpost82855 script] for example.&lt;br /&gt;
'''Video'''&lt;br /&gt;
* Double click: plays the popular video formats by Ambient definitions&lt;br /&gt;
&lt;br /&gt;
[[File:Dopus5_filetypes_example.png|320px]]&lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
&lt;br /&gt;
Directory Opus is a very flexible and configurable program. Play around, learn, and remember RMB menus and ctrl key options in many places. Button banks and Start Menus do work over Ambient screen, hotkeys do also work fine and with the global hotkeys option you can use Directory Opus as a general purpose hotkey manager too.&lt;br /&gt;
&lt;br /&gt;
Graphical tuning requires mostly icon files or IFF images, but when converted to the correct formats you'll get the look you want.&lt;br /&gt;
&lt;br /&gt;
Here's an example video how you can tune Start Menus on MorphOS for example: https://www.youtube.com/watch?v=lRrIi0datLs&lt;br /&gt;
&lt;br /&gt;
And here are some examples of different lister toolbar images. MagicWB one comes with the install disk and others can be found from Aminet for example.&lt;br /&gt;
&lt;br /&gt;
[[File:Dopus5_listerbuttons_mwb.png]] [[File:Dopus5_listerbuttons.png]]&lt;br /&gt;
&lt;br /&gt;
3rd party modules should work generally, but of course ones hitting the original Amiga hw (like some audio players) won't work. I'd recommend for example CycleMode (for cycling lister view modes from the keyboard), RootParent (to view the device list if going parent from the root level), and CutNPaste (copy/cut/paste files).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Directory Opus manuals are available at least in these places:&lt;br /&gt;
&lt;br /&gt;
[http://aminet.net/package/util/dopus/dopus_5_pdf_manual Remastered manuals in Aminet]&lt;br /&gt;
&lt;br /&gt;
[http://amiga.unikko.org/DOpus5-MagellanII/ Original scanned manuals]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Happy tuning! :)&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Supported_HD_cards&amp;diff=4321</id>
		<title>Supported HD cards</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Supported_HD_cards&amp;diff=4321"/>
				<updated>2023-08-21T11:06:38Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: https://morph.zone/modules/newbb_plus/viewtopic.php?topic_id=12785&amp;amp;forum=53&amp;amp;start=7&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Supported HD cards for PCIe-based [[Supported_Computers#Power_Macintosh_G5|PowerMac G5]] by user experience:&lt;br /&gt;
* HD3450 works&lt;br /&gt;
* HD3650 works&lt;br /&gt;
* HD4550 works&lt;br /&gt;
* HD4650 works&lt;br /&gt;
* HD5450 works&lt;br /&gt;
* HD6450 doesn't work&lt;br /&gt;
* HD6570 doesn't work&lt;br /&gt;
''NB working conditions may depend on detailed info on memory size and/or vendor plus output connector options.''&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Main_Page&amp;diff=4320</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Main_Page&amp;diff=4320"/>
				<updated>2023-08-21T10:55:02Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: /* Articles */ Supported HD cards&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;siteLogo&amp;quot; style=&amp;quot;float: right;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:162%; border:none; margin:0; padding:.1em; color:#274572;&amp;quot;&amp;gt;Welcome to the MorphOS Library,&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;top:+0.2em; font-size:95%; margin-bottom: 30px;&amp;quot;&amp;gt;the wiki based library of MorphOS related documentation.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Would you like to contribute and edit articles?&amp;lt;/strong&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Please contact us to set up an account via:&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-top: -10px; margin-bottom: 20px;&amp;quot;&amp;gt;https://morph.zone/message2library.png&amp;lt;/div&amp;gt;&lt;br /&gt;
'''Important notes to editors:''' [[Basic Guidelines]] - [[List of Wanted Articles]]&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;small&amp;gt;This page in other languages: [[Strona główna|Polish]] [[Page principale|Français]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==About MorphOS==&lt;br /&gt;
MorphOS - The Lightning OS&lt;br /&gt;
&amp;lt;div class=&amp;quot;threecolumns&amp;quot;&amp;gt;&lt;br /&gt;
* [[What is MorphOS?]]&lt;br /&gt;
* [[Hardware Platforms]]&lt;br /&gt;
* [[Installation]]&lt;br /&gt;
* [[Characteristic features]]&lt;br /&gt;
* [[MorphOS integration]]&lt;br /&gt;
* [[MorphOS Development]]&lt;br /&gt;
* [[Developer tools]]&lt;br /&gt;
* [[3D graphics]]&lt;br /&gt;
* [[Games]]&lt;br /&gt;
* [[MorphOS key applications]]&lt;br /&gt;
* [[Platform expansion]]&lt;br /&gt;
* [[Who needs MorphOS?]]&lt;br /&gt;
* [[Conclusions]]&lt;br /&gt;
* [[Useful links]]&lt;br /&gt;
* [[F.A.Q.]]&lt;br /&gt;
* [[Historical notes]]&lt;br /&gt;
* [[Contributors]]&amp;lt;/div&amp;gt;&lt;br /&gt;
A five minute read for users familiar with the Commodore Amiga&lt;br /&gt;
*[[MorphOS in 5 minutes]]&lt;br /&gt;
&lt;br /&gt;
==Articles==&lt;br /&gt;
The core of the MorphOS Library can be found here.  Along with the provided manuals, there are several documents designed to help users get the most out of their MorphOS powered computer.&lt;br /&gt;
&lt;br /&gt;
* [[Fundamentals of MorphOS]]&lt;br /&gt;
* [[Dictionary of Terms]]&lt;br /&gt;
* [[First_Steps_Using_MorphOS | First Steps Using MorphOS]]&lt;br /&gt;
* [[Volume Names]]&lt;br /&gt;
* [[Applications|Applications Included with MorphOS]]&lt;br /&gt;
* [[Tools|Tools Included with MorphOS]]&lt;br /&gt;
* [[Utilities|Utilities Included with MorphOS]]&lt;br /&gt;
* [[Screenbar_Modules|Screenbar Modules Included with MorphOS]]&lt;br /&gt;
* [[Bundled_Games|Games Included with MorphOS]]&lt;br /&gt;
* [[Blankers|Blankers Included with MorphOS]]&lt;br /&gt;
* [[Shell Commands|Shell: Commands]]&lt;br /&gt;
* [[Pattern matching|Shell: Pattern Matching]]&lt;br /&gt;
* [[Filesystems | File Systems]]&lt;br /&gt;
* [[Supported Computers]]&lt;br /&gt;
* [[Supported HD cards]]&lt;br /&gt;
* [[Hardware Compatibility]]&lt;br /&gt;
* [[MIDI | MIDI Support]]&lt;br /&gt;
* [[Tips and Tricks]]&lt;br /&gt;
&lt;br /&gt;
==Tutorials==&lt;br /&gt;
Welcome to the Tutorials section of the MorphOS Library.  In this aisle of the library you can find examples and step by step instructions to help get the most out of your MorphOS experience.&lt;br /&gt;
&lt;br /&gt;
*[[Getting_Started | Getting Started - A Beginner's Guide to MorphOS]]&lt;br /&gt;
*[[Modifying the User-Startup file]]&lt;br /&gt;
*[[Configuring_Network | Configuring a Network Connection]]&lt;br /&gt;
*[[Installing_software | Installing Third Party Software]]&lt;br /&gt;
*[[Dual-boot MorphOS and MacOS X on a Mac Mini G4]]&lt;br /&gt;
*[[How to write Mails with SimpleMail]]&lt;br /&gt;
*[[Creating Backups]]&lt;br /&gt;
*[[MorphOS External USB Drive Backup Guide]]&lt;br /&gt;
*[[Scanning with SCANdal]]&lt;br /&gt;
*[[Recording an LP with Audio Evolution 4]]&lt;br /&gt;
*[[Passwordless SSH login with RemoteShell]]&lt;br /&gt;
*[[How to Install Directory Opus Magellan II]]&lt;br /&gt;
*[[How to Make MorphOS Look Like OS4]]&lt;br /&gt;
*[[How to Use Game Controllers]]&lt;br /&gt;
*[[Preparing_an_Amiga_Hard_Drive]]&lt;br /&gt;
*[[Mounting_Network_Drives]]&lt;br /&gt;
*[[How to translate program with SimpleCat]]&lt;br /&gt;
*[[Creating_Ambient_Filetypes]]&lt;br /&gt;
*[[Open_Firmware | Using Open Firmware]]&lt;br /&gt;
*[[Print_System | Using the New Printing System]]&lt;br /&gt;
*[[Multi-display | Using Multi-display Setups]]&lt;br /&gt;
&lt;br /&gt;
==Development==&lt;br /&gt;
In the development section of the MorphOS Library, you can find a collection of helpful articles and tutorials focused on MorphOS software development.&lt;br /&gt;
&lt;br /&gt;
*[[First steps in MorphOS programming]]&lt;br /&gt;
*[[Magic User Interface Programming]]&lt;br /&gt;
*[[In-depth: The New MorphOS Memory System]]&lt;br /&gt;
*[[Reggae: MorphOS multimedia framework]]&lt;br /&gt;
*[[An Introduction to MorphOS PPC Assembly]]&lt;br /&gt;
*[[Advanced Topics]]&lt;br /&gt;
*[[Getting Started with Lua]]&lt;br /&gt;
*[[Crash_Course_to_Hollywood_Programming]]&lt;br /&gt;
&lt;br /&gt;
==Benchmarks, Reports &amp;amp; Reviews==&lt;br /&gt;
*[[jPV's MorphOS 2 Review]]&lt;br /&gt;
*[[What's New in MorphOS 3]]&lt;br /&gt;
*[[What's New in MorphOS 3.10]]&lt;br /&gt;
*[[What's New in MorphOS 3.16]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
The MorphOS Link Database is a collection of websites that are of interest to all current and potential future users of MorphOS. For easier navigation, we have separated the list of websites into multiple categories.&lt;br /&gt;
&lt;br /&gt;
*[[Links#Community_Portals_.26_Forums|Community Portals]]&lt;br /&gt;
*[[Links#File_Repositories|File Repositories]]&lt;br /&gt;
*[[Links#Shops|Shops]]&lt;br /&gt;
*[[Links#Software|Software]]&lt;br /&gt;
*[[Links#Developers|Developers]]&lt;br /&gt;
*[[Links#Misc|Misc]]&lt;br /&gt;
&lt;br /&gt;
==Work in Progress==&lt;br /&gt;
*[[ReTooled]]&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Shell_Commands/Break&amp;diff=4319</id>
		<title>Shell Commands/Break</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Shell_Commands/Break&amp;diff=4319"/>
				<updated>2023-08-02T11:09:34Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: See also&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Break''' - Allows to send a signal (for eg. CTRL+C) to a process&lt;br /&gt;
&lt;br /&gt;
PROCESS/N, PORT, ALL/S, C/S, D/S, E/S, F/S&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
PROCESS - number of the process to send a signal to                                  &lt;br /&gt;
PORT    - public port name of the process to send a signal to&lt;br /&gt;
ALL     - sends all signals to the process (see below)&lt;br /&gt;
C       - sends a CTRL+C&lt;br /&gt;
D       - sends a CTRL+D&lt;br /&gt;
E       - sends a CTRL+E&lt;br /&gt;
F       - sends a CTRL+F&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Break sets the specified attention flags in the PROCESS indicated.&lt;br /&gt;
Use the Status command to display the current process numbers.&lt;br /&gt;
By default, only the Ctrl+C flag is set.&lt;br /&gt;
&lt;br /&gt;
Break acts the same as selecting the relevant process by clicking&lt;br /&gt;
in its window and pressing the appropriate Ctrl+key combinations.&lt;br /&gt;
&lt;br /&gt;
Ctrl+C is the default for sending a Break signal to halt a process.&lt;br /&gt;
A process that has been aborted this way displays ***Break&lt;br /&gt;
in the Shell window. Ctrl+D halts execution of a script file. Ctrl+E closes a process' window. Ctrl+F activates the process' window.&lt;br /&gt;
&lt;br /&gt;
See also: [[Shell_Commands/Status | Status]] command.&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Shell_Commands/TaskList&amp;diff=4318</id>
		<title>Shell Commands/TaskList</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Shell_Commands/TaskList&amp;diff=4318"/>
				<updated>2023-08-02T11:04:59Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''TaskList''' - Displays a detailed list of all running tasks&lt;br /&gt;
&lt;br /&gt;
VERBOSE/S&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
VERBOSE - Be verbose for each task&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
When using the VERBOSE switch, a lot of details, including&lt;br /&gt;
the 68k and PPC stack pointers, Wait signals,... are reported.&lt;br /&gt;
&lt;br /&gt;
See also: [[Shell_Commands/Status | Status]] and [[Shell_Commands/Break | Break]] commands.&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Applications/Jalapeno&amp;diff=4317</id>
		<title>Applications/Jalapeno</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Applications/Jalapeno&amp;diff=4317"/>
				<updated>2023-07-15T19:15:30Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: /* Description */ mkisofs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
&lt;br /&gt;
Very user friendly CD/DVD authoring and imaging tool. &lt;br /&gt;
Supports burning ISO files to disc, burning data files to disc and creating image files from CD/DVDs and [http://library.morph.zone/Tips_and_Tricks#Creating_an_ISO_Image from filesystem]. It's a frontend of mkisofs.&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
&lt;br /&gt;
: [[File:MorphOS3_jPV_Jalapeno1.png|300px]] [[File:MorphOS3_jPV_Jalapeno2.png|300px]] [[File:MorphOS3_jPV_Jalapeno3.png|300px]]&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Utilities/ArchiveIt&amp;diff=4313</id>
		<title>Utilities/ArchiveIt</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Utilities/ArchiveIt&amp;diff=4313"/>
				<updated>2023-06-19T22:48:20Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: /* Description */ zip.library&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
An archive creator and extractor application, which currently supports ZIP archives using zip.library (with the password support).&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
: [[File:ArchiveIt_1.png]]&lt;br /&gt;
: [[File:ArchiveIt_2.png]]&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Utilities/TaskManager&amp;diff=4312</id>
		<title>Utilities/TaskManager</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Utilities/TaskManager&amp;diff=4312"/>
				<updated>2023-06-15T14:40:00Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: /* Notes */ DEVELOPERMODE&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
System monitoring tool. &lt;br /&gt;
&lt;br /&gt;
Lists running processes and tasks, allows adjusting the priority of tasks and sending break signals. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
The tooltype DEVELOPERMODE enables a menu item &amp;quot;Dump State&amp;quot;, see [[Applications/LogTool|LogTool]].&lt;br /&gt;
&lt;br /&gt;
== Screenshot ==&lt;br /&gt;
: [[File:TaskManager.png]]&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Tools/PFSDoctor&amp;diff=4291</id>
		<title>Tools/PFSDoctor</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Tools/PFSDoctor&amp;diff=4291"/>
				<updated>2023-05-04T14:28:56Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: Screenshot&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
Diagnostic and repair tool for PFS formatted partitions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
== Screenshot ==&lt;br /&gt;
: [[File:PFSDoctor.png]]&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Links&amp;diff=4275</id>
		<title>Links</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Links&amp;diff=4275"/>
				<updated>2022-09-19T12:34:48Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: /* Software */ new name of MUIBase&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Official MorphOS Website==&lt;br /&gt;
* http://www.morphos-team.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Community Portals &amp;amp; Forums==&lt;br /&gt;
* http://morph.zone&lt;br /&gt;
&lt;br /&gt;
* https://www.morphos-forum.de&lt;br /&gt;
&lt;br /&gt;
* http://www.pegasos.org&lt;br /&gt;
&lt;br /&gt;
* http://www.pegasos.hu&lt;br /&gt;
&lt;br /&gt;
* http://www.ppa.pl&lt;br /&gt;
&lt;br /&gt;
* http://saku.bbs.fi/foorumi&lt;br /&gt;
&lt;br /&gt;
* http://www.warmup-asso.org&lt;br /&gt;
&lt;br /&gt;
* http://www.warmup-asso.fr&lt;br /&gt;
&lt;br /&gt;
* http://www.morphos-store.com - A website to buy and sell MorphOS hardware and software.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File Repositories==&lt;br /&gt;
&lt;br /&gt;
* http://mos.aminet.net - Aminet MorphOS Section&lt;br /&gt;
&lt;br /&gt;
* http://www.morphos-storage.net -  MorphOS Storage by WArMUp&lt;br /&gt;
&lt;br /&gt;
* http://morphos-files.ppa.pl - MorphOS File Hosting Service (abandoned)&lt;br /&gt;
&lt;br /&gt;
* http://morphos.lukysoft.cz - MorphOS Software Database&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Shops==&lt;br /&gt;
&lt;br /&gt;
* https://www.morphos-store.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Demoscene&lt;br /&gt;
&lt;br /&gt;
* http://amiga.bbs.fi/demopack_morphos/ - MorphOS Demopack&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Emulation&lt;br /&gt;
&lt;br /&gt;
* http://www.amidog.com/amiga/fpse/ - Free PlayStation Emulator, ported by Mathias 'AmiDog' Roslund&lt;br /&gt;
&lt;br /&gt;
* http://ace.cpcscene.net/en:introduction - The acidulous CPC/CPC+ emulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Internet &amp;amp; Network&lt;br /&gt;
&lt;br /&gt;
* http://www.amipodder.com - AmiPodder, free podcast client&lt;br /&gt;
&lt;br /&gt;
* http://www.heightanxiety.com/AmiSSL/ - Port of OpenSSL for legacy applications&lt;br /&gt;
&lt;br /&gt;
* http://amitradecenter.net - AmiTradeCenter, FTP client&lt;br /&gt;
&lt;br /&gt;
* http://www.students.tut.fi/~komsa/amiga/beehive/ - Home of Beehive, a BitTorrent client&lt;br /&gt;
&lt;br /&gt;
* http://sourceforge.net/projects/simplemail/ - SimpleMail, open source email client&lt;br /&gt;
&lt;br /&gt;
* http://www.yam.ch - YAM, open source email client&lt;br /&gt;
&lt;br /&gt;
* http://www.amirc.org - The famous IRC client&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Music&lt;br /&gt;
&lt;br /&gt;
* http://www.digiboosterpro.de/en/ - Home of Digibooster Pro&lt;br /&gt;
&lt;br /&gt;
* http://jahjah.free.fr/morphos/ - Home of Ripper, a CD music ripping and conversion tool&lt;br /&gt;
&lt;br /&gt;
* http://amigadev.free.fr/songplayer/index_en.html - Home of SongPlayer, a music player&lt;br /&gt;
&lt;br /&gt;
* http://tcheko.binaryriot.org/soundbankster/ - A realtime audio mixing application dedicated to DJ enthusiasts&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Office&lt;br /&gt;
&lt;br /&gt;
* http://amigadev.free.fr/pointrider/ - PowerPoint viewer application&lt;br /&gt;
&lt;br /&gt;
* http://www.grasshopperllc.com - Home of Pagestream, a commercial desktop publishing / page layout software&lt;br /&gt;
&lt;br /&gt;
* http://beebase.sourceforge.net - Home of BeeBase aka MUIBase, Steffen Gutmann's relational programmable database (with GUI)&lt;br /&gt;
&lt;br /&gt;
* http://shinkuro.altervista.org/amiga/software/nowined.htm - Home of NoWinEd, text editor&lt;br /&gt;
&lt;br /&gt;
* http://www.winfield.demon.nl - Free MS Word reader&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Package Management&lt;br /&gt;
&lt;br /&gt;
* http://www.geit.de/eng_grunch.html - Search, download, install, update, and uninstall programs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
System&lt;br /&gt;
&lt;br /&gt;
* http://morphosambient.sourceforge.net - Ambient 'desktop' environment&lt;br /&gt;
&lt;br /&gt;
* http://scalos.noname.fr - Scalos desktop, an alternative to Ambient&lt;br /&gt;
&lt;br /&gt;
* http://sourceforge.net/projects/snoopium/ - System monitor application.&lt;br /&gt;
&lt;br /&gt;
* http://sourceforge.net/projects/backman/ - Backman, open source backup program&lt;br /&gt;
&lt;br /&gt;
* http://amigazeux.net/diavolo/ - Diavolo Backup, formerly commercial backup program&lt;br /&gt;
&lt;br /&gt;
==Developers==&lt;br /&gt;
&lt;br /&gt;
* http://amigazeux.org - AmiNet Radio, Dragon, Wetter, SkinClock, and much more.&lt;br /&gt;
&lt;br /&gt;
* http://polymere.free.fr/index_en.html - Home of PolyNet (icon bar), PolyOrganizer and PolyGlot (MSN messenger)&lt;br /&gt;
&lt;br /&gt;
* http://members.shaw.ca/realstar/ - Developer of the Aqua, Eve and HyperCannon game titles.&lt;br /&gt;
&lt;br /&gt;
* http://fabportnawak.free.fr - MPlayer, ScummVM, Odyssey Web Browser, MAME, and more.&lt;br /&gt;
&lt;br /&gt;
* http://krashan.ppa.pl - DigiBooster 3, MorphOS Programmer's Handbook, audio tools, and more.&lt;br /&gt;
&lt;br /&gt;
* http://tbs-software.com/morgoth/&lt;br /&gt;
&lt;br /&gt;
* http://khtml.ppa.pl&lt;br /&gt;
&lt;br /&gt;
* http://bigfoot.morphos-team.net&lt;br /&gt;
&lt;br /&gt;
* http://dreamolers.binaryriot.org&lt;br /&gt;
&lt;br /&gt;
* http://tokai.binaryriot.org&lt;br /&gt;
&lt;br /&gt;
* http://www.biclodon.com&lt;br /&gt;
&lt;br /&gt;
* http://www.iki.fi/sintonen&lt;br /&gt;
&lt;br /&gt;
* http://www.tbs-software.com/stefkos/&lt;br /&gt;
&lt;br /&gt;
* http://home.elka.pw.edu.pl/~mszyprow/programy/ - Author of SFSDoctor.&lt;br /&gt;
&lt;br /&gt;
* http://kiero.binaryriot.org - Freespace 1&amp;amp;2, Foobilliard, Homeworld, scube, szoom, and more.&lt;br /&gt;
&lt;br /&gt;
* http://www.geit.de - Home of Grunch, MagicBeacon, MMKeyboard, and more.&lt;br /&gt;
&lt;br /&gt;
* http://yellowblue.free.fr - Home of Yomgui, who maintains Blender, Python, PyMUI and Helios (Firewire)&lt;br /&gt;
&lt;br /&gt;
* http://www.orel.rekom.ru/~imax/ - Maxim Ilyin ported VirtualJaguar, Mike Steed's FlashPlayer, and more.&lt;br /&gt;
&lt;br /&gt;
* http://haru.at/ - Creator of MorphUp packagement system, ported VLC, MLDonkey, and more.&lt;br /&gt;
&lt;br /&gt;
* http://www.amirus.org.ru - Various utilities such a KeyMorpher, a MUI-based key mapper. (Website is in Russian.)&lt;br /&gt;
&lt;br /&gt;
* http://tbs-software.com/mark/ - Developer of PowerD, various utilities.&lt;br /&gt;
&lt;br /&gt;
* http://tbs-software.com/powerd/ - PowerD programming language&lt;br /&gt;
&lt;br /&gt;
* http://www.lukysoft.cz - Home of Lukáš Stehlík (AmiGod benchmark)&lt;br /&gt;
&lt;br /&gt;
* http://dasixk.free.fr - Home of SixK, who ported a multitude of apps&lt;br /&gt;
&lt;br /&gt;
* http://alfie.altervista.org - Home of Alfonso 'alfie' Ranieri, creator of RxMUI, AmRSS (RSS client), and much more. &lt;br /&gt;
&lt;br /&gt;
* http://morphware.schwarzes.net - Various small tools made by Andreas Schwarz.&lt;br /&gt;
&lt;br /&gt;
* http://www.onyxsoft.se - Home of Onyxsoft who have released a number of applications and games.&lt;br /&gt;
&lt;br /&gt;
* http://www.mguc.ppa.pl - Marian Guc's website, developer of PciTool, AutoDoc Reader and the unfinished Nemesis desktop.&lt;br /&gt;
&lt;br /&gt;
* http://brain.umcs.lublin.pl/~rzookol/ - Michał Żukowski's website, developer of SCANdal (scanner software)&lt;br /&gt;
&lt;br /&gt;
* http://www.igracki.de - gTranslator, yWeather, CRABUM, and more.&lt;br /&gt;
&lt;br /&gt;
* http://www.morguesoft.eu - Various screen savers.&lt;br /&gt;
&lt;br /&gt;
* http://tcheko.binaryriot.org/ - SoundBankster, commodities, utils.&lt;br /&gt;
&lt;br /&gt;
* http://bszili.morphos.me/ - Home of BSzili, who has ported numerous games.&lt;br /&gt;
&lt;br /&gt;
* http://jpv.wmhost.com/jpv_software/ - Hollywood applications and Lua, ARexx, and shell scripts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Misc==&lt;br /&gt;
&lt;br /&gt;
* http://www.via-altera.de/mid.htm - some documents about MorphOS (German/English)&lt;br /&gt;
* https://morphosuser.wordpress.com - Yasu's MorphOS Blog&lt;br /&gt;
* http://pegasos.lena-johannson.de/ - Otti website with many Deutsch translations&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Reggae_tutorial:_Accessing_Reggae_in_applications&amp;diff=4269</id>
		<title>Reggae tutorial: Accessing Reggae in applications</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Reggae_tutorial:_Accessing_Reggae_in_applications&amp;diff=4269"/>
				<updated>2022-04-26T14:34:35Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reggae is operated from application with two APIs. One of them is generic object oriented BOOPSI API with its ''DoMethod()'', ''GetAttr()'', ''SetAttrs()'' etc. The second API is just a shared MorphOS library one, provided by ''multimedia.class'' and is, of course, Reggae specific. To use Reggae one must open ''multimedia.class'' as every shared library. For BOOPSI API ''intuition.library'' must be opened, which almost all programs do anyway. &lt;br /&gt;
&lt;br /&gt;
==Opening and closing multimedia.class==&lt;br /&gt;
The first step is to add needed includes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;proto/multimedia.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;proto/exec.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;proto/intuition.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;clib/alib_protos.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The first file contains definition of multimedia.class library API. It also includes ''&amp;lt;classes/multimedia/multimedia.h&amp;gt;'', containing Reggae structures, constants, tags and macros. The rest of includes are not Reggae specific, in fact most projects include them anyway, as they define basic system services. There are also additional Reggae headers, their including depends on application and will be covered in further tutorials.&lt;br /&gt;
&lt;br /&gt;
Now we are ready for Reggae initialization. All what has to be done is opening ''multimedia.class'' just like an ordinary MorphOS shared library. The only noticeable difference is that library name contains path part, as Reggae classes are not directly on library search path:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 struct Library* MultimediaBase;&lt;br /&gt;
 &lt;br /&gt;
 if (MultimediaBase = OpenLibrary(&amp;quot;multimedia/multimedia.class&amp;quot;, 52))&lt;br /&gt;
 {&lt;br /&gt;
 &amp;amp;nbsp;&amp;amp;nbsp;/* Now Reggae is ready to use until the library is closed. */&lt;br /&gt;
 &amp;amp;nbsp;&amp;amp;nbsp;CloseLibrary(MultimediaBase);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As with every library, the name of the base is important, as it is implicitly used in all calls to the library API as a hidden parameter. Note also the usual error handling, ''multimedia.class'' is disk-based and also performs some disk activity at startup, then checking the library base against NULL is recommended. 52 is the current ''multimedia.class'' version. Applications should request this version, as previous ones have some important features missing. Reggae cleanup is done with classic ''CloseLibrary()'' call.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Some programmers use automatic library opening and closing by linking with ''libauto''. ''multimedia.class'' can be added to the list of automatically opened libraries, but it is not added by default.&lt;br /&gt;
&lt;br /&gt;
A complete [http://krashan.ppa.pl/reggae/files/tutorial_basic.c example code] shows Reggae initialization. The example opens ''multimedia.class'' and, if it succeeded, prints the version and revision of ''multimedia.class'' to the console.&lt;br /&gt;
==Opening and closing individual classes==&lt;br /&gt;
Typical Reggae usage is just calling ''MediaNewObject()'' to get a data stream recognized, demultiplexed and decoded down to [[Reggae_common_formats|common formats]] automatically. In this case Reggae opens (and later closes) all needed classes automatically. Things change, when application builds processing chain by hand, or just uses single components. Then every used class must be opened and closed explicitly. It is done in the same way as with ''multimedia.class''. Let's assume our application uses just ''http.stream'' object to download some data from the net. Before object creation class must be opened. It is typically done in application setup code:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 struct Library *HttpStreamBase;&lt;br /&gt;
 &lt;br /&gt;
 HttpStreamBase = OpenLibrary(&amp;quot;multimedia/http.stream&amp;quot;, 51);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As for every disk based library, checking the base against NULL is highly recommended. The class must be unloaded after use, for example in application cleanup:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 CloseLibrary(HttpStreamBase);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reggae classes are handled just like ordinary shared libraries. Note that &amp;quot;multimedia/&amp;quot; path is added to the class name, reason for this has been explained above. When a class is not used constantly in application, it may be a good idea to open it just before it is needed and close right after it is not needed anymore. For example if ''http.stream'' is used only for automatic application updates, there is no need to keep it opened after update checking/downloading. The last remark concerns names of library bases for classes. No Reggae class '''except of ''multimedia.class''''' has library-style API. Because of this library base name is not used for anything else than opening and closing the class. That is why, the name is not important and can be anything. In these tutorials, bases names derived from classes names are used, just for improved code readability.&lt;br /&gt;
&lt;br /&gt;
==I don't like C/C++, what now?==&lt;br /&gt;
Reggae can be used from any programming language. It has to fulfill some minimal set of features however. The first one is ability to call functions from standard MorphOS shared libraries, ''intuition.library'' and ''exec.library'' at least. Then ability to call functions from ''multimedia.class''. Many programming languages used on MorphOS have tools for creating bindings (or stubs, or whatever it is called) to shared libraries, based on C headers and *.fd files. Creating bindings for ''multimedia.class'' should not be difficult then. Then the language must have ''DoMethod()'' call. For C/C++ this call is provided by ''libabox'', a static library. Another important feature is ability to handle tag-based functions in some sane way. Taglist can be always built by hand, but passing tags as arguments to variable args functions is convenient.&lt;br /&gt;
&lt;br /&gt;
==NewObject() and MediaNewObject()==&lt;br /&gt;
These two functions have similar names, but they are different. Programmers using MUI may think that MediaNewObject() is some kind of wrapper around NewObject(), similarly to MUI_NewObject() being such a wrapper. This is not true for MediaNewObject() however. NewObject() is a basic BOOPSI call, and just creates an object of specified class. Reggae objects are created with this function as well.&lt;br /&gt;
&lt;br /&gt;
MediaNewObject() creates a complete tree of objects needed to decode a media stream to basic formats. The tree consists of stream object, one or more demultiplexer objects, one or more decoder objects and a few auxiliary ones like multiread buffers or processblocks. The whole tree is presented to the application as a single object delivering decoded streams on its output ports.&lt;br /&gt;
&lt;br /&gt;
Another difference between the two functions is automatic loading of Reggae classes. NewObject() call does not load a disk based BOOPSI class into memory automatically. Then an application must load such a class manually with OpenLibrary() before object creation (and unload it after use with CloseLibrary()). On the other hand MediaNewObject() opens all needed classes automatically and takes care of their unloading.&lt;br /&gt;
&lt;br /&gt;
==Error Checking==&lt;br /&gt;
Many operations on Reggae objects may fail for different reasons. It may be just memory shortage, I/O error, wrong arguments passed by application etc. A good programming practice is to verify results of operations and take appropriate actions in case of failure. The first step of verification is checking method return value. Its exact meaning depends on the method itself, and is described in autodocs. The common cases are described below. The second stage of error checking is to get an error code of operation. This is done by getting a MMA_ErrorCode attribute value from an object. Error code values are defined in &amp;lt;classes/multimedia/multimedia.h&amp;gt; header file. The usual way is just getting the attribute from an object, which is done with BOOPSI call GetAttr().&lt;br /&gt;
&lt;br /&gt;
 LONG error;&lt;br /&gt;
 &lt;br /&gt;
 GetAttr(object, MMA_ErrorCode, (ULONG)&amp;amp;error);&lt;br /&gt;
&lt;br /&gt;
Alternatively, one can get the attribute through any of object's port (input or output, it does not matter):&lt;br /&gt;
&lt;br /&gt;
 error = MediaGetPort(object, 0, MMA_ErrorCode);&lt;br /&gt;
&lt;br /&gt;
==Errors During Object Creation==&lt;br /&gt;
Creation of an object is a special case in error handling for two reasons. Firstly, this is the most probable place for errors, as creating a new Reggae object may be a complex operation involving creation of many basic objects, connecting them, performing I/O operations on data source, parsing stream headers etc. Secondly – if object creation fails, there is no object to ask for MMA_ErrorCode attribute. That is why MMA_ErrorCode can be passed to OM_NEW() method (that means NewObject() and MediaNewObject() accept it), and its tag value contains a pointer to a variable, where error code will be placed. An example code below shows error handling during object creation:&lt;br /&gt;
&lt;br /&gt;
 Object *obj;&lt;br /&gt;
 LONG error = 0; /* initialization is recommended */&lt;br /&gt;
 &lt;br /&gt;
 if (obj = MediaNewObjectTags( /* any tags here */ , MMA_ErrorCode, (IPTR)&amp;amp;error, TAG_END))&lt;br /&gt;
 {&lt;br /&gt;
  /* use object */&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
  /* error code is in 'error' variable, take some action, inform user etc. */&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Errors During Data Pulling==&lt;br /&gt;
The first stage of error checking in this case is checking the return value of MMM_Pull() method. When there is no error, it should be equal to the amount of bytes requested. If it is not the case, one should get MMA_ErrorCode value, as described above. There is one case however, when the value returned by MMM_Pull() will be not equal to the request size, and MMA_ErrorCode will be zero. It can happen, when the request size is not aligned to the smallest chunk allowed by Reggae. This chunk is a single pixel for video, and a single sample frame for audio. Such a misaligned pull request is truncated silently and only the whole chunks are returned. That is why aligning request size to the size of a pixel or sample frame should be a rule of thumb while programming Reggae. A code fragment below demonstrates error checking after MMM_Pull():&lt;br /&gt;
&lt;br /&gt;
 if ((pulled = DoMethod(MMM_Pull, object, port, buffer, length)) == length)&lt;br /&gt;
 {&lt;br /&gt;
  /* Data pull has been succesfull. */&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
  LONG error = 0;&lt;br /&gt;
 &lt;br /&gt;
  GetAttr(object, MMA_ErrorCode, (IPTR)&amp;amp;error);&lt;br /&gt;
 &lt;br /&gt;
  /* Data pull failed, some data can be valid however (number of valid&lt;br /&gt;
     data bytes is stored in 'pulled'). Error code is in 'error'. */&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Displaying Error Messages==&lt;br /&gt;
Some of Reggae errors (especially those, which are somehow expected, like file or network I/O errors) should be reported to user. Note that for less probable errors advanced users may use MediaLogger, which shows Reggae event log. Basic problems however should be reported by application. Of course displaying some cryptic error code is not recommended. The simplest way is to use MediaFault() function to convert these codes into text messages. A big advantage of MediaFault() is that its messages are localized, so it automatically returns texts in user's preferred language. The function may be for example used as follows:&lt;br /&gt;
&lt;br /&gt;
 LONG error;&lt;br /&gt;
 &lt;br /&gt;
 GetAttr(object, MMA_ErrorCode, (IPTR)&amp;amp;error);&lt;br /&gt;
 &lt;br /&gt;
 if (error) Printf(&amp;quot;Operation failed: %s.\n&amp;quot;, MediaFault(error));&lt;br /&gt;
&lt;br /&gt;
This simple example prints message to a console, GUI based programs will pass it to ''MUI_Request()'' for example. Strings returned by ''MediaFault()'' are not capitalized and have no dot at the end.&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Shell_Commands/DRadioTool&amp;diff=4268</id>
		<title>Shell Commands/DRadioTool</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Shell_Commands/DRadioTool&amp;diff=4268"/>
				<updated>2022-04-19T22:44:56Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''DRadioTool''' - Controls a USB Radio manufactured by D-Link or GemTek&lt;br /&gt;
&lt;br /&gt;
ON/S, OFF/S, FREQ/K/N, SCAN/S, AUTO/S, SIGNAL/S, UNIT/N/K&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
ON     - turns the radio ON                                                 &lt;br /&gt;
OFF    - turns the radio OFF again&lt;br /&gt;
FREQ   - sets the current frequency to the given value. It must be&lt;br /&gt;
         given in kHz and range between 87 MHz and 108 MHz.&lt;br /&gt;
SCAN   - starts a frequency scan. It starts at 87 MHz, if no FREQ value&lt;br /&gt;
         had been given and stops at 107 MHz. If a radio channel is&lt;br /&gt;
         detected it will output its frequency in KHz on the shell.&lt;br /&gt;
         The last found channel will be kept. The scan can be aborted&lt;br /&gt;
         at any time using Ctrl-C.&lt;br /&gt;
AUTO   - only useful in conjunction with the SCAN switch. If a station&lt;br /&gt;
         is found, the program will pause for three seconds, asking the&lt;br /&gt;
         user to press Ctrl-C to keep the radio station found.&lt;br /&gt;
SIGNAL - sets the shell return value to WARN (5), if no radio station&lt;br /&gt;
         is detected on the current frequency. If there's a stereo&lt;br /&gt;
         signal, it will return OK (0). This switch can be used to&lt;br /&gt;
         implement a manual scan routine.&lt;br /&gt;
UNIT   - if multiple radios are connected, you can choose the right&lt;br /&gt;
         unit with this argument. Defaults to unit 0 of course.&lt;br /&gt;
&lt;br /&gt;
Examples:  DRadioTool ON SCAN AUTO&lt;br /&gt;
           DRadioTool FREQ 104000&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Shell_Commands/SonixCamTool&amp;diff=4267</id>
		<title>Shell Commands/SonixCamTool</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Shell_Commands/SonixCamTool&amp;diff=4267"/>
				<updated>2022-04-19T22:44:13Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''SonixCamTool''' - Read out images from a USB webcam using the Sonix Technologies chipset with OV7630 sensors.&lt;br /&gt;
&lt;br /&gt;
TO/A, INTERVAL/N, UPTO/N/K, GAMMA/K, SHARPEN/S, TEXT/K, FONT/K, FONTSIZE/N/K, UNIT/N/K&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
TO/A         - mandatory filename to save the picture to.  This  filename&lt;br /&gt;
               may  also  contain  a  format string such as &amp;quot;%ld&amp;quot; (do not&lt;br /&gt;
               forget the 'l')  to  generate  a  number  when  using  the&lt;br /&gt;
               INTERVAL option.&lt;br /&gt;
&lt;br /&gt;
INTERVAL/N   - if this numeric parameter is given, SonixcamTool will loop&lt;br /&gt;
               and  take  pictures  at  the  given interval (in ticks, 50&lt;br /&gt;
               ticks  is  one  second).   Use   Ctrl-C   to   abort   the&lt;br /&gt;
               SonixcamTool.&lt;br /&gt;
&lt;br /&gt;
UPTO/N/K     - if specified, multiple pictures can be grabbed in one  go,&lt;br /&gt;
               stopping after the UPTO pictures. Be sure to give a format&lt;br /&gt;
               string such as &amp;quot;%ld&amp;quot; inside the filename or you will write&lt;br /&gt;
               all  pictures to the same image. Only useful together with&lt;br /&gt;
               INTERVAL.&lt;br /&gt;
&lt;br /&gt;
GAMMA/K      - enable white balance and gamma correction with  the  given&lt;br /&gt;
               floating point gamma value. 0.45 is a good setting. If you&lt;br /&gt;
               only want white balance and no  gamma  correction,  use  a&lt;br /&gt;
               value of 1.0.&lt;br /&gt;
&lt;br /&gt;
SHARPEN/S    - apply a highly optimized 5x5 sharpen filter on the image.&lt;br /&gt;
&lt;br /&gt;
TEXT/K       - optionally adds the given line of text to  the  bottom  of&lt;br /&gt;
               the  picture.  If  the line is too long to fit, it will be&lt;br /&gt;
               truncated.&lt;br /&gt;
&lt;br /&gt;
FONT/K       - name of the font to use (e.g. xen.font). If this parameter&lt;br /&gt;
               is missing, the default system font will be used.&lt;br /&gt;
&lt;br /&gt;
FONTSIZE/N/K - size of the font in pixels&lt;br /&gt;
&lt;br /&gt;
UNIT/N/K     - if several cameras are connected, specify the unit to use.&lt;br /&gt;
               Defaults to unit 0.&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Examples:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
  SonixcamTool Snap.ppm&lt;br /&gt;
  SonixcamTool Snap.ppm GAMMA 0.45 SHARPEN&lt;br /&gt;
  SonixcamTool Movie%04ld.ppm INTERVAL 0 GAMMA 0.5&lt;br /&gt;
  SonixcamTool Webcam.ppm GAMMA 0.45 SHARPEN TEXT &amp;quot;Platon's Cam&amp;quot;&lt;br /&gt;
               FONT small.font FONTSIZE 6&lt;br /&gt;
  SonixcamTool Shotseries%03ld.ppm INTERVAL 0 UPTO 79 GAMMA 0.45 SHARPEN&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Filesystems&amp;diff=4265</id>
		<title>Filesystems</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Filesystems&amp;diff=4265"/>
				<updated>2022-04-08T21:29:10Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: /* Disk File Systems */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About ==&lt;br /&gt;
This page collects information about file systems working natively under MorphOS. In addition to these, Amiga 68k file systems can be used too ([[Preparing_an_Amiga_Hard_Drive|example]]).&lt;br /&gt;
&lt;br /&gt;
'''NOTE: this page is still under construction and many values would need to be verified!''' Any feedback is welcome to this [https://morph.zone/modules/newbb_plus/viewtopic.php?topic_id=12144&amp;amp;forum=3 thread].&lt;br /&gt;
&lt;br /&gt;
== Disk File Systems ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Name&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Location&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Bootable&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Native File Properties&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Max File Name Length&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Max File Size&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Max Partition Size&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
| Smart File System (SFS)&lt;br /&gt;
| Built-in (boot.img)&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| 107&lt;br /&gt;
| 4 GiB - 2 bytes&lt;br /&gt;
| 128 GiB&lt;br /&gt;
| The default file system&lt;br /&gt;
|-&lt;br /&gt;
| Professional File System III (PFS3)&lt;br /&gt;
| Built-in (boot.img)&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| 107&lt;br /&gt;
| 2 GiB&lt;br /&gt;
| 104 GiB&lt;br /&gt;
| Legacy support for PFS2 and AFS1&lt;br /&gt;
|-&lt;br /&gt;
| Fast File System 2 (FFS)&lt;br /&gt;
| Built-in (boot.img)&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| 107&lt;br /&gt;
| 4 GiB - 2 bytes&lt;br /&gt;
| 2 TiB to 128 TiB&lt;br /&gt;
| Legacy support for OFS and FFS&lt;br /&gt;
|-&lt;br /&gt;
| FAT File System (FAT)&lt;br /&gt;
| Built-in (boot.img)&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| 255* (UCS-2)&lt;br /&gt;
| 4 GiB&lt;br /&gt;
| 2 TiB&lt;br /&gt;
| Supports FAT12, FAT16, and FAT32 with LFN&lt;br /&gt;
|-&lt;br /&gt;
| Mac File System (HFS)&lt;br /&gt;
| Built-in (MOSSYS:L)&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| 31&lt;br /&gt;
| 2 GiB&lt;br /&gt;
| 2 TiB&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hierarchical File System (HFS+)&lt;br /&gt;
| Built-in (MOSSYS:L)&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| 255* (UTF-16) &lt;br /&gt;
| 2 TiB**&lt;br /&gt;
| 2 TiB**&lt;br /&gt;
| Read-only&lt;br /&gt;
|-&lt;br /&gt;
| Second Extended File System (ext2, ext3, ext4)&lt;br /&gt;
| Built-in (MOSSYS:L)&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| 255*&lt;br /&gt;
| 16 GiB to 2 TiB&lt;br /&gt;
| 2 TiB&lt;br /&gt;
| Limited read-only support for ext4&lt;br /&gt;
|-&lt;br /&gt;
| NT File System (NTFS)&lt;br /&gt;
| Built-in (MOSSYS:L)&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| 255*&lt;br /&gt;
| 2 TiB**&lt;br /&gt;
| 2 TiB**&lt;br /&gt;
| Read-only&lt;br /&gt;
|-&lt;br /&gt;
| SGI X File System (XFS)&lt;br /&gt;
| Built-in (MOSSYS:L)&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| 255*&lt;br /&gt;
| 2 TiB**&lt;br /&gt;
| 2 TiB**&lt;br /&gt;
| Read-only&lt;br /&gt;
|-&lt;br /&gt;
| Ice File System (IceFS)&lt;br /&gt;
| 3rd party ([http://blubbedev.net/icefs/ link])&lt;br /&gt;
| Yes/No&lt;br /&gt;
| Yes&lt;br /&gt;
| 107 (255)&lt;br /&gt;
| 9 EB&lt;br /&gt;
| 9 EB&lt;br /&gt;
| Bootable on Pegasos and Efika, but not on Macs&lt;br /&gt;
|-&lt;br /&gt;
| ExFAT File System (ExFAT)&lt;br /&gt;
| 3rd party ([http://www.morphos-storage.net/?page=System/Devices/HD/Filesystems&amp;amp;file=exFAT-FS_1.1.lha link])&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| 255 UTF-16&lt;br /&gt;
| 128 PiB&lt;br /&gt;
| 128 PiB&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| NT File System 3G (NTFS-3G)&lt;br /&gt;
| 3rd party ([http://blubbedev.net/filesysbox/ link])&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| 255&lt;br /&gt;
| 16 EiB&lt;br /&gt;
| 16 EiB&lt;br /&gt;
| Can't be placed on RDB&lt;br /&gt;
|-&lt;br /&gt;
| FS1541&lt;br /&gt;
| 3rd party ([http://aminet.net/package/disk/misc/FS1541-MorphOS link])&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| 16&lt;br /&gt;
| 164 KiB&lt;br /&gt;
| 170 KiB&lt;br /&gt;
| For CBM 1541 disks/images&lt;br /&gt;
|-&lt;br /&gt;
| CDRive File System (CDFS)&lt;br /&gt;
| Built-in (boot.img)&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| 255*&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| ISO 9660/Amiga Rock Ridge/Joliet, audio as WAV files, ISO file support&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;* &amp;lt;/nowiki&amp;gt;Filenames over 107 characters will be stripped&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;** &amp;lt;/nowiki&amp;gt;Theoretical sizes may be bigger, but filesystems using deviceio.library are limited to 2 TiB&lt;br /&gt;
&lt;br /&gt;
== Network File Systems ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Name&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Location&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Native File Properties&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Notes&lt;br /&gt;
|-&lt;br /&gt;
| [http://library.morph.zone/Mounting_Network_Drives#SmbFS SmbFS]&lt;br /&gt;
| Built-in (MOSSYS:C)&lt;br /&gt;
| No&lt;br /&gt;
| For mounting Windows shares or Samba shares on other platforms&lt;br /&gt;
|-&lt;br /&gt;
| [https://library.morph.zone/Mounting_Network_Drives#Ssh2FS Ssh2FS]&lt;br /&gt;
| Built-in (MOSSYS:C)&lt;br /&gt;
| No&lt;br /&gt;
| For mounting SFTP shares on other platforms&lt;br /&gt;
|-&lt;br /&gt;
| [http://library.morph.zone/Mounting_Network_Drives#NetFS_Revised NetFS Revised]&lt;br /&gt;
| 3rd party ([http://aminet.net/package/comm/net/NetFS-revised link])&lt;br /&gt;
| Yes&lt;br /&gt;
| For mounting partitions between MorphOS and/or AmigaOS systems&lt;br /&gt;
|-&lt;br /&gt;
| [http://library.morph.zone/Mounting_Network_Drives#FTPMount FTPMount]&lt;br /&gt;
| 3rd party ([http://aminet.net/package/comm/tcp/FTPMount_MOS link])&lt;br /&gt;
| No&lt;br /&gt;
| For mounting FTP sites as part of a filesystem&lt;br /&gt;
|-&lt;br /&gt;
| [http://library.morph.zone/Mounting_Network_Drives#Google_Drive_and_Dropbox_Handlers Amiga Cloud Handlers]&lt;br /&gt;
| 3rd party ([http://aminet.net/package/comm/tcp/AmigaCloudHandlers link])&lt;br /&gt;
| No&lt;br /&gt;
| For mounting Google Drive and Dropbox storage&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Supported_Computers&amp;diff=4221</id>
		<title>Supported Computers</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Supported_Computers&amp;diff=4221"/>
				<updated>2022-02-11T08:34:23Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: /* iMac */ 17-Inch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Originally published at: http://www.amiga.org/forums/showthread.php?t=65055''&lt;br /&gt;
&lt;br /&gt;
''Author:  takemehomegrandma''&lt;br /&gt;
&lt;br /&gt;
This is a list of complete computer setups for MorphOS use. More detailed harware support information is available at http://morphos-team.net/hardware&lt;br /&gt;
&lt;br /&gt;
MorphOS has certain limits for the main memory on all supported systems. Quark kernel can use up to 2GiB of memory and ABox up to 1.7GiB. If more than 2GiB of memory is installed, it is just ignored. Some systems also have lower physical limits.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Genesi Hardware ==&lt;br /&gt;
&lt;br /&gt;
In the beginning of the MorphOS journey, Genesi and bPlan played an important role of the early MorphOS development in many fundamental ways. Providing resources was one, providing a new HW platform was another. Although Genesi and the MorphOS Team later moved in separate directions, a legacy remains in the shape of two official Genesi systems that MorphOS runs on, and a few mainboards (motherboards) besides that.&lt;br /&gt;
&lt;br /&gt;
Of course, those mainboards were also used as a central component by *several* third party resellers when they put together their own various systems (of various configurations) for their customers that probably still is available from time to time on the second hand market. Those systems are not listed here though.&lt;br /&gt;
&lt;br /&gt;
These mainboards that MorphOS runs on are:&lt;br /&gt;
&lt;br /&gt;
* Pegasos 1 (&amp;quot;original&amp;quot;/unfixed), 750CXe G3 @ 600MHz&lt;br /&gt;
* Pegasos 1 (April 1), 750CXe G3 @ 600MHz&lt;br /&gt;
* Pegasos 1 (April 2), 750CXe G3 @ 600MHz&lt;br /&gt;
* Pegasos 2, 750CXe G3 @ 600MHz&lt;br /&gt;
* Pegasos 2, MPC7447 G4 @ 1.0GHz&lt;br /&gt;
* Efika 5200B&lt;br /&gt;
&lt;br /&gt;
As previously mentioned, many systems were put together by numerous third party dealers based on these motherboards. &lt;br /&gt;
&lt;br /&gt;
Official systems based on these were:&lt;br /&gt;
&lt;br /&gt;
* [http://www.genesi-tech.com/products/opendesktop Open Desktop Workstation (ODW)]&lt;br /&gt;
* [http://www.genesi-tech.com/products/openclient/5200b EFIKA Open Client]&lt;br /&gt;
&lt;br /&gt;
(BTW, The Efika mainboard, the case, and a bundle of board and case, can still be purchased new from [http://search.directron.com/newsearch.php?find=efika&amp;amp;x=-250&amp;amp;y=-93 Directron.com])&lt;br /&gt;
&lt;br /&gt;
== Mac mini ==&lt;br /&gt;
&lt;br /&gt;
We are many who has fallen in love with the Mac Mini, a very small footprint, highly integrated, silent, yet very powerful G4 computer. All models works fine with MorphOS, but if you can, you should look for the 1.5GHz silent upgrade version that has 64MB Video Memory. You *can* use MorphOS with the 32MB coming with the other versions (depending on how you use the computer, you may want to turn off some visual &amp;quot;bells and whistles&amp;quot; that MorphOS offers), but with 64MB you will have your back covered in a better way. And this is not something specific to the Mac Mini, but to MorphOS in general — if you have the option to get 64MB or more of Video Memory, do it!&lt;br /&gt;
&lt;br /&gt;
Here is a list of supported Mac Mini machines, with links to the great &amp;quot;everymac.com&amp;quot; site with loads of additional, detailed information on each and every one of these:&lt;br /&gt;
&lt;br /&gt;
* [http://www.everymac.com/systems/apple/mac_mini/specs/mac_mini_g4_1.25.html Mac Mini G4/1.25]&lt;br /&gt;
* [http://www.everymac.com/systems/apple/mac_mini/specs/mac_mini_g4_1.42.html Mac Mini G4/1.42]&lt;br /&gt;
* [http://www.everymac.com/systems/apple/mac_mini/specs/mac_mini_g4_1.33.html Mac Mini G4/1.33] (silent upgrade)&lt;br /&gt;
* [http://www.everymac.com/systems/apple/mac_mini/specs/mac_mini_g4_1.5.html Mac Mini G4/1.5] (silent upgrade, '''with 64MB VRAM''')&lt;br /&gt;
&lt;br /&gt;
== eMac ==&lt;br /&gt;
&lt;br /&gt;
The eMac line, originally released exclusively to the education market and later available to the consumer market as well, features an all-in-one case design and affordable performance. It's especially &amp;quot;affordable&amp;quot; today, when you most certainly will pick one up for $0 (or thereabout). It has a CRT built in, which may show some blurry signs of age by now. But hey, its extremely low cost in combination with MorphOS and a G4 performance that &amp;quot;traditional Amigan's&amp;quot; only dreamt of, may very well make this machine interesting.&lt;br /&gt;
&lt;br /&gt;
Here is a list of the supported eMac machines (those not listed here aren't supported), with links to the great &amp;quot;everymac.com&amp;quot; site with loads of additional, detailed information on each and every one of these:&lt;br /&gt;
&lt;br /&gt;
* [http://www.everymac.com/systems/apple/emac/specs/emac_1.25.html eMac G4/1.25 (USB 2.0)] (This was also sold as 1.0 GHz version to educational market and it is supported too, but don't mix it to 1.0 GHz PowerMac4,4 which doesn't work.)&lt;br /&gt;
* [http://www.everymac.com/systems/apple/emac/specs/emac_1.42.html eMac G4/1.42 (2005)]&lt;br /&gt;
&lt;br /&gt;
== Power Macintosh G4 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA cards are not supported by MorphOS&amp;lt;/font&amp;gt; and would need to be replaced with a suitable Radeon card instead. Special Mac versions of Radeon cards should be used. A GFX card with 64MB or more VMEM is recommended.&lt;br /&gt;
&lt;br /&gt;
Audio is currently only supported for PowerMac3,4 to 3,6 models.&lt;br /&gt;
&lt;br /&gt;
DP = Dual Processors, but MorphOS only supports using one CPU, the other one will be sitting idle.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Mac Server&amp;quot; is essentially the same HW as PowerMac but with server SW bundled. Doesn't matter if you are going to use it with MorphOS (right?). &lt;br /&gt;
&lt;br /&gt;
Here is a list of supported Power Macintosh G4 machines, with links to the great &amp;quot;everymac.com&amp;quot; site with loads of additional, detailed information on each and every one of these:&lt;br /&gt;
&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_350_agp.html Power Macintosh G4 350 (AGP)], PowerMac3,1&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_400_agp.html Power Macintosh G4 400 (AGP)], PowerMac3,1&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_450.html Power Macintosh G4 450 (AGP)], PowerMac3,1&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_500.html Power Macintosh G4 500 (AGP)], PowerMac3,1&lt;br /&gt;
* [http://www.everymac.com/systems/apple/mac_server_g4/specs/macserver_g4_350.html Mac Server G4 350 (AGP)], PowerMac3,1 &lt;br /&gt;
* [http://www.everymac.com/systems/apple/mac_server_g4/specs/macserver_g4_400.html Mac Server G4 400 (AGP)], PowerMac3,1&lt;br /&gt;
* [http://www.everymac.com/systems/apple/mac_server_g4/specs/macserver_g4_450.html Mac Server G4 450 (AGP)], PowerMac3,1&lt;br /&gt;
* [http://www.everymac.com/systems/apple/mac_server_g4/specs/macserver_g4_500.html Mac Server G4 500 (AGP)], PowerMac3,1&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_400_2.html Power Macintosh G4 400 (Gigabit)], PowerMac3,3&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_450_dp.html Power Macintosh G4 450 DP (Gigabit)], PowerMac3,3&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_500_dp.html Power Macintosh G4 500 DP (Gigabit)], PowerMac3,3&lt;br /&gt;
* [http://www.everymac.com/systems/apple/mac_server_g4/specs/macserver_g4_450_dp.html Mac Server G4 450 DP (Gigabit)], PowerMac3,3&lt;br /&gt;
* [http://www.everymac.com/systems/apple/mac_server_g4/specs/macserver_g4_500_dp.html Mac Server G4 500 DP (Gigabit)], PowerMac3,3&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_466.html Power Macintosh G4 466 (Digital Audio)], PowerMac3,4&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_533.html Power Macintosh G4 533 (Digital Audio)], PowerMac3,4, &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA card&amp;lt;/font&amp;gt;&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_667.html Power Macintosh G4 667 (Digital Audio)], PowerMac3,4, &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA card&amp;lt;/font&amp;gt;&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_733.html Power Macintosh G4 733 (Digital Audio)], PowerMac3,4, &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA card&amp;lt;/font&amp;gt;&lt;br /&gt;
* [http://www.everymac.com/systems/apple/mac_server_g4/specs/macserver_g4_533.html Mac Server G4 533 (Digital Audio)], PowerMac3,4, &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA card&amp;lt;/font&amp;gt;&lt;br /&gt;
* [http://www.everymac.com/systems/apple/mac_server_g4/specs/macserver_g4_533_dp.html Mac Server G4 533 DP (Digital Audio)], PowerMac3,4, &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA card&amp;lt;/font&amp;gt;&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_733_qs.html Power Macintosh G4 733 (Quicksilver)], PowerMac3,5, &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA card&amp;lt;/font&amp;gt;&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_800_dp_qs.html Power Macintosh G4 800 DP (Quicksilver)], PowerMac3,5, &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA card&amp;lt;/font&amp;gt;&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_800_qs.html Power Macintosh G4 800 (QS 2002)], PowerMac3,5 &lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_867_qs.html Power Macintosh G4 867 (Quicksilver)], PowerMac3,5, &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA card&amp;lt;/font&amp;gt;&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_933_qs.html Power Macintosh G4 933 (QS 2002)], PowerMac3,5, &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA card&amp;lt;/font&amp;gt;&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_1ghz_dp_qs.html Power Macintosh G4 1.0 DP (QS 2002)], PowerMac3,5, &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA card&amp;lt;/font&amp;gt;&lt;br /&gt;
* [http://www.everymac.com/systems/apple/mac_server_g4/specs/macserver_g4_733_qs.html Mac Server G4 733 (Quicksilver)], PowerMac3,5, &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA card&amp;lt;/font&amp;gt;&lt;br /&gt;
* [http://www.everymac.com/systems/apple/mac_server_g4/specs/macserver_g4_800_dp_qs.html Mac Server G4 800 DP (Quicksilver)], PowerMac3,5, &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA card&amp;lt;/font&amp;gt;&lt;br /&gt;
* [http://www.everymac.com/systems/apple/mac_server_g4/specs/macserver_g4_933_qs.html Mac Server G4 933 (QS 2002)], PowerMac3,5&lt;br /&gt;
* [http://www.everymac.com/systems/apple/mac_server_g4/specs/macserver_g4_1ghz_dp_qs.html Mac Server G4 1.0 DP (QS 2002)], PowerMac3,5&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_867_dp_mdd.html Power Macintosh G4 867 DP (MDD)], PowerMac3,6, &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA card&amp;lt;/font&amp;gt;&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_1.0_dp_mdd.html Power Macintosh G4 1.0 DP (MDD)], PowerMac3,6&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_1.25_dp_mdd.html Power Macintosh G4 1.25 DP (MDD)], PowerMac3,6&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_1.0_mdd.html Power Macintosh G4 1.0 (FW 800)], PowerMac3,6, &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA card&amp;lt;/font&amp;gt;&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_1.25_dp_mdd_fw800.html Power Macintosh G4 1.25 DP (FW 800)], PowerMac3,6&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_1.42_dp_mdd.html Power Macintosh G4 1.42 DP (FW 800)], PowerMac3,6&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_1.25_mdd.html Power Macintosh G4 1.25 (MDD 2003)], PowerMac3,6&lt;br /&gt;
* [http://www.everymac.com/systems/apple/mac_server_g4/specs/macserver_g4_1.0_dp_mdd.html Mac Server G4 1.0 DP (MDD)], PowerMac3,6, &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA card&amp;lt;/font&amp;gt;&lt;br /&gt;
* [http://www.everymac.com/systems/apple/mac_server_g4/specs/macserver_g4_1.25_dp_mdd.html Mac Server G4 1.25 DP (MDD)], PowerMac3,6&lt;br /&gt;
&lt;br /&gt;
== PowerBook ==&lt;br /&gt;
&lt;br /&gt;
MorphOS supports all G4 PowerBooks equipped with a Radeon graphics card. Audio isn't currently supported on Titanium (Ti) models.&lt;br /&gt;
&lt;br /&gt;
The MorphOS PowerBook support includes most of the things you would need/expect from an OS supporting Laptops. Touchpad has some extra functionality on models 5,6-5,9.&lt;br /&gt;
&lt;br /&gt;
Here is a list of supported PowerBook G4 machines, with links to the great &amp;quot;everymac.com&amp;quot; site with loads of additional, detailed information on each and every one of these:&lt;br /&gt;
&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powerbook_g4/specs/powerbook_g4_867.html PowerBook G4 867 (Ti)], PowerBook3,5 - A1025&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powerbook_g4/specs/powerbook_g4_1.0.html PowerBook G4 1.0 (Ti)], PowerBook3,5 - A1025&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powerbook_g4/specs/powerbook_g4_1.0_15.html PowerBook G4 1.0 15&amp;quot; (FW800 - Al)], PowerBook5,2 - A1046&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powerbook_g4/specs/powerbook_g4_1.25_15.html PowerBook G4 1.25 15&amp;quot; (FW800 - Al)], PowerBook5,2 - A1046 &lt;br /&gt;
* [http://www.everymac.com/systems/apple/powerbook_g4/specs/powerbook_g4_1.33_17.html PowerBook G4 1.33 17&amp;quot; (Al)], PowerBook5,3 - A1052&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powerbook_g4/specs/powerbook_g4_1.33_15.html PowerBook G4 1.33 15&amp;quot; (Al)], PowerBook5,4 - A1095&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powerbook_g4/specs/powerbook_g4_1.5_15.html PowerBook G4 1.5 15&amp;quot; (Al)], PowerBook5,4 - A1095&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powerbook_g4/specs/powerbook_g4_1.5_17.html PowerBook G4 1.5 17&amp;quot; (Al)], PowerBook5,5 - A1085&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powerbook_g4/specs/powerbook_g4_1.5_15_2.html PowerBook G4 1.5 15&amp;quot; (SMS/BT2 - Al)], PowerBook5,6 - A1106&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powerbook_g4/specs/powerbook_g4_1.67_15.html PowerBook G4 1.67 15&amp;quot; (Al)], PowerBook5,6 - A1106&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powerbook_g4/specs/powerbook_g4_1.67_17.html PowerBook G4 1.67 17&amp;quot; (Al)], PowerBook5,7 - A1107&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powerbook_g4/specs/powerbook_g4_1.67_15_hr.html PowerBook G4 1.67 15&amp;quot; (DLSD/HR - Al)], PowerBook5,8 - A1138&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powerbook_g4/specs/powerbook_g4_1.67_17_hr.html PowerBook G4 1.67 17&amp;quot; (DLSD/HR - Al)], PowerBook5,9 - A1139&lt;br /&gt;
&lt;br /&gt;
== iBook ==&lt;br /&gt;
&lt;br /&gt;
Here is a list of supported iBook machines (in short: all G4 iBooks), with links to the great &amp;quot;everymac.com&amp;quot; site with loads of additional, detailed information on each and every one of these:&lt;br /&gt;
&lt;br /&gt;
* [http://www.everymac.com/systems/apple/ibook/specs/ibook_g4_800_12.html iBook G4/800 12-Inch (Original - Op)]&lt;br /&gt;
* [http://www.everymac.com/systems/apple/ibook/specs/ibook_g4_933_14.html iBook G4/933 14-Inch (Original - Op)]&lt;br /&gt;
* [http://www.everymac.com/systems/apple/ibook/specs/ibook_g4_1.0_14.html iBook G4/1.0 14-Inch (Original - Op)]&lt;br /&gt;
* [http://www.everymac.com/systems/apple/ibook/specs/ibook_g4_1.0_12.html iBook G4/1.0 12-Inch (Early 2004 - Op)]&lt;br /&gt;
* [http://www.everymac.com/systems/apple/ibook/specs/ibook_g4_1.0_14_2.html iBook G4/1.0 14-Inch (Early 2004 - Op)]&lt;br /&gt;
* [http://www.everymac.com/systems/apple/ibook/specs/ibook_g4_1.2_14.html iBook G4/1.2 14-Inch (Early 2004 - Op)]&lt;br /&gt;
* [http://www.everymac.com/systems/apple/ibook/specs/ibook_g4_1.2_12.html iBook G4/1.2 12-Inch (Late 2004 - Op)]&lt;br /&gt;
* [http://www.everymac.com/systems/apple/ibook/specs/ibook_g4_1.33_14.html iBook G4/1.33 14-Inch (Late 2004 - Op)]&lt;br /&gt;
* [http://www.everymac.com/systems/apple/ibook/specs/ibook_g4_1.33_12.html iBook G4/1.33 12-Inch (Mid-2005 - Op)]&lt;br /&gt;
* [http://www.everymac.com/systems/apple/ibook/specs/ibook_g4_1.42_14.html iBook G4/1.42 14-Inch (Mid-2005 - Op)]&lt;br /&gt;
&lt;br /&gt;
== Power Macintosh G5 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA cards are not supported by MorphOS&amp;lt;/font&amp;gt; and would need to be replaced with a suitable Radeon card instead. Special Mac versions of Radeon cards should be used.&lt;br /&gt;
&lt;br /&gt;
DP = Dual Processors (MorphOS only supports using one CPU though)&lt;br /&gt;
&lt;br /&gt;
Here is a list of supported Power Macintosh G5 machines, oldest models first, then ascending in performance:&lt;br /&gt;
&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g5/specs/powermac_g5_1.6.html Power Macintosh G5 1.6 (PCI)], PowerMac7,2, &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA card&amp;lt;/font&amp;gt;&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g5/specs/powermac_g5_1.8.html Power Macintosh G5 1.8 (PCI-X)], PowerMac7,2, &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA card&amp;lt;/font&amp;gt;&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g5/specs/powermac_g5_1.8_dp.html Power Macintosh G5 1.8 DP (PCI-X)], PowerMac7,2, &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA card&amp;lt;/font&amp;gt;&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g5/specs/powermac_g5_1.8_dp_2.html Power Macintosh G5 1.8 DP (PCI)], PowerMac'''7,3''', &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA card&amp;lt;/font&amp;gt;&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g5/specs/powermac_g5_2.0_dp.html Power Macintosh G5 2.0 DP (PCI-X)], PowerMac7,2&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g5/specs/powermac_g5_2.0_dp_2.html Power Macintosh G5 2.0 DP (PCI-X 2)], PowerMac7,3, &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA card&amp;lt;/font&amp;gt;&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g5/specs/powermac_g5_2.5_dp.html Power Macintosh G5 2.5 DP (PCI-X)], PowerMac7,3&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g5/specs/powermac_g5_2.0_dp_pci.html Power Macintosh G5 2.0 DP (PCI)], PowerMac7,3&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g5/specs/powermac_g5_2.3_dp.html Power Macintosh G5 2.3 DP (PCI-X)], PowerMac7,3&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g5/specs/powermac_g5_2.7_dp.html Power Macintosh G5 2.7 DP (PCI-X)], PowerMac7,3&lt;br /&gt;
* [https://everymac.com/systems/apple/powermac_g5/specs/powermac_g5_dual_2.0.html Power Macintosh G5 2.0 Dual Core], PowerMac11,2, &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA card&amp;lt;/font&amp;gt;, unofficially supported machine ([https://morph.zone/modules/newbb_plus/viewtopic.php?topic_id=12716&amp;amp;forum=11 more info])&lt;br /&gt;
* [https://everymac.com/systems/apple/powermac_g5/specs/powermac_g5_dual_2.3.html Power Macintosh G5 2.3 Dual Core], PowerMac11,2, &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA card&amp;lt;/font&amp;gt;, unofficially supported machine ([https://morph.zone/modules/newbb_plus/viewtopic.php?topic_id=12716&amp;amp;forum=11 more info])&lt;br /&gt;
* [https://everymac.com/systems/apple/powermac_g5/specs/powermac_g5_quad_2.5.html Power Macintosh G5 2.5 Quad Core], PowerMac11,2, &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NVIDIA card&amp;lt;/font&amp;gt;, unofficially supported machine ([https://morph.zone/modules/newbb_plus/viewtopic.php?topic_id=12716&amp;amp;forum=11 more info])&lt;br /&gt;
&lt;br /&gt;
== Power Macintosh G4 Cube ==&lt;br /&gt;
&lt;br /&gt;
MorphOS runs on &amp;quot;the Cube&amp;quot;, but some HW features are not supported. Network can be made working with some tweaks, but the USB audio presents a problem ([http://www.morphzone.org/modules/newbb_plus/viewtopic.php?forum=11&amp;amp;topic_id=6835&amp;amp;start=27 link]).&lt;br /&gt;
&lt;br /&gt;
Here is a list of the Cube machines, with links to the great &amp;quot;everymac.com&amp;quot; site with loads of additional, detailed information:&lt;br /&gt;
&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_450_cube.html Power Macintosh G4 450 Cube], PowerMac5,1&lt;br /&gt;
* [http://www.everymac.com/systems/apple/powermac_g4/specs/powermac_g4_500_cube.html Power Macintosh G4 500 Cube], PowerMac5,1&lt;br /&gt;
&lt;br /&gt;
== ACube Systems Hardware ==&lt;br /&gt;
&lt;br /&gt;
MorphOS 3.8 added the support for Sam460cr and Sam460ex mainboards.&lt;br /&gt;
&lt;br /&gt;
Official systems based on these are:&lt;br /&gt;
&lt;br /&gt;
* [http://www.acube-systems.biz/index.php?page=hardware&amp;amp;pid=7 AmigaOne 500 (Old/Sam460ex)] &lt;br /&gt;
* [https://acube-systemsbiz.serversicuro.it/shop/en/14-case-systems AmigaOne 500 (New/Sam460cr)]&lt;br /&gt;
&lt;br /&gt;
== A-EON Technology Hardware ==&lt;br /&gt;
&lt;br /&gt;
MorphOS 3.10 added the support for AmigaOne X5000 mainboard.&lt;br /&gt;
&lt;br /&gt;
* [http://www.a-eon.com/?page=x5000 AmigaOne X5000]&lt;br /&gt;
&lt;br /&gt;
== iMac ==&lt;br /&gt;
&lt;br /&gt;
Support for this particular iMac model (with the 20&amp;quot; display, the 17&amp;quot; one does not boot) was unofficially enabled in MorphOS 3.12.&lt;br /&gt;
&lt;br /&gt;
* [https://everymac.com/systems/apple/imac/specs/imac_g5_2.1_20.html iMac G5/2.1 20-Inch (iSight)], PowerMac12,1, unofficially supported machine&lt;br /&gt;
* [https://everymac.com/systems/apple/imac/specs/imac_g5_1.9_17.html iMac G5 1.9 17-Inch (iSight)], PowerMac12,1, supported machine since 3.16&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=The_Style_Guide&amp;diff=4218</id>
		<title>The Style Guide</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=The_Style_Guide&amp;diff=4218"/>
				<updated>2022-02-08T09:09:18Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: Scripts&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Stefan Haubenthal''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Short Cuts ==&lt;br /&gt;
Shift should invert an action.&lt;br /&gt;
* Navigate&lt;br /&gt;
** page down: Space&lt;br /&gt;
** page up: Shift Space&lt;br /&gt;
&lt;br /&gt;
* Find: Amiga-F (should toggle, avoid Shift Esc)&lt;br /&gt;
** find next: Return&lt;br /&gt;
** find previous: Shift Return&lt;br /&gt;
&lt;br /&gt;
* Settings: Amiga-, (or its own menu, avoid &amp;quot;S&amp;quot; or &amp;quot;P&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
* Scripts: Amiga-.&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=The_Style_Guide&amp;diff=4217</id>
		<title>The Style Guide</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=The_Style_Guide&amp;diff=4217"/>
				<updated>2022-02-08T09:07:30Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: /* Short Cuts */ Settings&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Stefan Haubenthal''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Short Cuts ==&lt;br /&gt;
Shift should invert an action.&lt;br /&gt;
* Navigate&lt;br /&gt;
** page down: Space&lt;br /&gt;
** page up: Shift Space&lt;br /&gt;
&lt;br /&gt;
* Find: Amiga-F (should toggle, avoid Shift Esc)&lt;br /&gt;
** find next: Return&lt;br /&gt;
** find previous: Shift Return&lt;br /&gt;
&lt;br /&gt;
* Settings: Amiga-, (or its own menu, avoid &amp;quot;S&amp;quot; or &amp;quot;P&amp;quot;)&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Shell_Commands/Play&amp;diff=4216</id>
		<title>Shell Commands/Play</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Shell_Commands/Play&amp;diff=4216"/>
				<updated>2021-12-18T22:36:05Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Play''' - Plays audio files supported by the Reggae multimedia framework&lt;br /&gt;
&lt;br /&gt;
FILE/A, VOLUME/N, AHIUNIT/N, LOOP/S, QUIET/S&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
FILE    - File to play&lt;br /&gt;
VOLUME  - Audio volume&lt;br /&gt;
AHIUNIT - AHI unit to output&lt;br /&gt;
LOOP    - Plays the file in loop&lt;br /&gt;
QUIET   - Disables playing information displaying&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Shell_Commands/PlayMidi&amp;diff=4215</id>
		<title>Shell Commands/PlayMidi</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Shell_Commands/PlayMidi&amp;diff=4215"/>
				<updated>2021-12-18T22:34:02Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''PlayMidi''' - CAMD Midi player&lt;br /&gt;
&lt;br /&gt;
FILE/A, MIDICLUSTERNAME/A&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
FILE            - File to play&lt;br /&gt;
MIDICLUSTERNAME - CAMD cluster&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=The_Style_Guide&amp;diff=4214</id>
		<title>The Style Guide</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=The_Style_Guide&amp;diff=4214"/>
				<updated>2021-11-28T18:38:56Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: Navigate&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Stefan Haubenthal''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Short Cuts ==&lt;br /&gt;
Shift should invert an action.&lt;br /&gt;
* Navigate&lt;br /&gt;
** page down: Space&lt;br /&gt;
** page up: Shift Space&lt;br /&gt;
&lt;br /&gt;
* Find: Amiga-F (should toggle, avoid Shift Esc)&lt;br /&gt;
** find next: Return&lt;br /&gt;
** find previous: Shift Return&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Shell_Commands/Ssh2FS&amp;diff=4213</id>
		<title>Shell Commands/Ssh2FS</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Shell_Commands/Ssh2FS&amp;diff=4213"/>
				<updated>2021-09-11T21:07:54Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Ssh2FS''' - Mounts a SFTP share&lt;br /&gt;
&lt;br /&gt;
REMOTE/A, VOLUME/A, AUTH/A, DCMAX/N, ACMAX/N, CTIME/N, VERBOSE/S, PORT/N, HOME/K, NTIME/N, ALIVE/N, MINBUF/N, RAHEAD/S, MAXBUFS/N, REMPASS/S, RECONN/S, DISCONN/N, NODEV/S&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
REMOTE  - [user@]host[:/dir]&lt;br /&gt;
VOLUME  - VolumeName:&lt;br /&gt;
AUTH    - pw | ia | pk | pkp&lt;br /&gt;
DCMAX   - Maximum # of dirs to cache at one time. Default: 10.&lt;br /&gt;
ACMAX   - Maximum # of attrs to cache at one time. Default: 64.&lt;br /&gt;
CTIME   - Cache timeout for dirs and attrs (seconds). Default: 300.&lt;br /&gt;
VERBOSE - Print extra information&lt;br /&gt;
PORT    - Use different port number. Default: 22.&lt;br /&gt;
HOME    - Change where to look for .ssh/ directory. Default: $HOME.&lt;br /&gt;
NTIME   - Network timeout in milli seconds. Default: 0 = no timeout.&lt;br /&gt;
ALIVE   - Keep alive rate in seconds. Default: 10.&lt;br /&gt;
MINBUF  - Minimum number of buffers (per open file). Default: ?.&lt;br /&gt;
BUFSIZE - Minimum size of io buffers. Default: 32768.&lt;br /&gt;
RAHEAD  - Enable speculative read-ahead.&lt;br /&gt;
MAXBUFS - Maximum number of buffers (per open file). Default: 4.&lt;br /&gt;
REMPASS - Remember password for reconnects&lt;br /&gt;
RECONN  - Reconnect on lost connection.&lt;br /&gt;
DISCONN - Disconnect?&lt;br /&gt;
NODEV   - No not create a device node automatically.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 Ssh2FS user@server UserHome: pw&lt;br /&gt;
&lt;br /&gt;
See also: [[Shell_Commands/RunFS | RunFS]]&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Shell_Commands/RunFS&amp;diff=4212</id>
		<title>Shell Commands/RunFS</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Shell_Commands/RunFS&amp;diff=4212"/>
				<updated>2021-09-11T21:07:10Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''RunFS''' - Runs/mounts a network filesystem in background&lt;br /&gt;
&lt;br /&gt;
PRI=PRIORITY/K/N, Q=QUIET/S, O=OPEN/S, A=ALIAS/K, WV=WAITVOLUME/K, INVOCATION/F&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
PRIORITY   - Priority of filesystem (default 0)&lt;br /&gt;
QUIET      - Be quiet, don't output messages from filesystem in shell&lt;br /&gt;
OPEN       - Automatically open Ambient window for the filesystem's volume&lt;br /&gt;
ALIAS      - Start filesystem based on connection description file in &amp;quot;Sys:Prefs/Network Connections/&amp;quot;, mutually exclusive with INVOCATION&lt;br /&gt;
INVOCATION - Rest of line, filesystem invocation (Ex: mydir/myfilesystem args...)&lt;br /&gt;
WAITVOLUME - Waits for a volume to become ready in doslist. This is mainly for non filesysbox filesystems. Give name of volume here, without &amp;quot;:&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 RunFS OPEN ssh2fs user@bla.foo.bar Foo:&lt;br /&gt;
&lt;br /&gt;
See also: [[Shell_Commands/Ssh2FS | Ssh2FS]]&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=The_Style_Guide&amp;diff=4195</id>
		<title>The Style Guide</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=The_Style_Guide&amp;diff=4195"/>
				<updated>2021-06-06T16:42:08Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: /* Short Cuts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Stefan Haubenthal''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Short Cuts ==&lt;br /&gt;
* Find: Amiga-F (should toggle, avoid Shift Esc)&lt;br /&gt;
** next: Return&lt;br /&gt;
** previous: Shift Return&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Text_Class:_Buttons,_Textfields,_Labels&amp;diff=4194</id>
		<title>Text Class: Buttons, Textfields, Labels</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Text_Class:_Buttons,_Textfields,_Labels&amp;diff=4194"/>
				<updated>2021-06-05T09:32:12Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Grzegorz Kraszewski''&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;small&amp;gt;This article in other languages: [[Klasa &amp;quot;Text&amp;quot;: przyciski, pola tekstowe, etykiety|Polish]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The ''Text'' class is the most commonly used one for creating gadgets. This is because it not only creates plain labels (also called &amp;quot;static text&amp;quot; in other GUI engines), but also framed read-only text gadgets and textual buttons. In fact MUI has no special class for buttons, a button is just a ''Text'' object with a proper frame and background and user input activated. This versatility can have the disadvantage of allowing for creation of [[The_Style_Guide|style guide]] nonconforming interfaces.&lt;br /&gt;
&lt;br /&gt;
The ''Text'' class uses the [[MUI Text Rendering Engine]] for text output. It allows for multiline text, using styles (bold, italic), colors and inlined images. These features should be used sparingly to keep user interfaces consistent and comfortable to use. The rendering engine is controlled by inserting escape sequences in the text. Another engine feature is aligning the text inside the object rectangle (left, right, centered).&lt;br /&gt;
&lt;br /&gt;
==Common Attributes==&lt;br /&gt;
*'''''MUIA_Background''''' and '''''MUIA_Frame''''' are attributes inherited from the ''Area'' class. They specify a background and frame used for an object.&lt;br /&gt;
*'''''MUIA_Text_Contents''''' specifies the text. It may contain formatting engine escape sequences. The text is buffered internally, so the value of this attribute may point to a local variable or a dynamically allocated buffer.&lt;br /&gt;
*'''''MUIA_Text_PreParse''''' may be considered a fixed prefix, which is always added at the start of text before rendering. It is usually used for applying constant styles and formatting, for example setting it to &amp;quot;\33c&amp;quot; will always center the text. This attribute simplifies text handling when the text displayed is not constant (for example is loaded from a locale catalog). &lt;br /&gt;
*'''''MUIA_Font''''' is another attribute inherited from the ''Area'' class and specifies a font to be used for text rendering. In most cases it is one of the fonts predefined by the user in MUI settings.&lt;br /&gt;
&lt;br /&gt;
For more attributes and detailed descriptions refer to the ''Text'' class autodoc in the SDK.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Labels==&lt;br /&gt;
Labels are the simplest form of ''Text'' instances. They have no frame and inherit their background from the parent object (neither ''MUIA_Frame'' nor ''MUIA_Background'' is specified). They use the standard MUI font in most cases, so ''MUIA_Font'' does not need to be specified either. An important (and often forgotten) detail is a proper text baseline align when a label is used with some framed gadget also containing text (a ''String'' gadget for example). The default MUI behaviour for vertical text positioning is to center it. If the framed gadget uses uneven vertical padding, baselines of the label and the gadget may be unaligned. A special attribute ''MUIA_FramePhantomHoriz'' solves this problem. It is specified for a label with a ''TRUE'' value. The label also has ''MUIA_Frame'' specified with the same frame type as the gadget. Then the label gets an invisible frame of this type (frame horizontal parts to be exact, hence the attribute name) and the text is laid out accordingly. As a result the label and the gadget text are always aligned vertically, assuming they use the same font. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Label_align.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The magnified screenshot above illustrates the label align problem. The string gadget uses uneven padding (top padding is 2 pixels, bottom padding is 0 pixels), which causes the text baseline to misalign by 1 pixel shown on the left. The label on the right has been defined with two additional tags:&lt;br /&gt;
&lt;br /&gt;
 MUIA_FramePhantomHoriz,  TRUE,&lt;br /&gt;
 MUIA_Frame,              MUIV_Frame_String,&lt;br /&gt;
&lt;br /&gt;
A label can have one character underlined with the ''MUIA_Text_HiChar'' attribute. It is used to create a visual hint for a hotkey of a labeled gadget. See [[#Buttons|Buttons]] section below for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Textfields==&lt;br /&gt;
A textfield is a read-only framed area showing some (usually changing at runtime) text. The difference between a label and a textfield is that the latter has a frame and a background specified:&lt;br /&gt;
&lt;br /&gt;
 MUIA_Frame,             MUIV_Frame_Text,&lt;br /&gt;
 MUIA_Background,        MUII_TextBack,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Buttons==&lt;br /&gt;
A text button is an instance of the ''Text'' class too. It has more attributes than a plain label however, because it handles user input. MUI has a predefined background and frame for buttons:&lt;br /&gt;
&lt;br /&gt;
 MUIA_Frame,             MUIV_Frame_Button,&lt;br /&gt;
 MUIA_Background,        MUII_ButtonBack,&lt;br /&gt;
&lt;br /&gt;
These attributes also specify a frame and background for the &amp;quot;pressed&amp;quot; state. MUI also has separate font settings for buttons. Forgetting the ''MUIA_Font'' attribute for buttons is one of most common errors in MUI design.&lt;br /&gt;
&lt;br /&gt;
 MUIA_Font,              MUIV_Font_Button,&lt;br /&gt;
&lt;br /&gt;
Many users (and programmers) just have the default font defined for buttons, so the bug is not visible. It is recommended to always test a GUI with some unusual font settings for buttons, so the problem is easily visible. Button text is usually centered, which may be done either by inserting the &amp;quot;\33c&amp;quot; sequence at the start of the button label, or using ''MUIA_Text_PreParse''.&lt;br /&gt;
&lt;br /&gt;
 MUIA_Text_PreParse,     &amp;quot;\33c&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
After definition of the button appearance it is time to handle user input. The button behaviour is defined by the ''MUIA_InputMode'' attribute with three values:&lt;br /&gt;
*'''''MUIV_InputMode_None''''' &amp;amp;ndash; The default value, button does not react on anything.&lt;br /&gt;
*'''''MUIV_InputMode_RelVerify''''' &amp;amp;ndash; A simple pushbutton activated by a left mouse button click.&lt;br /&gt;
*'''''MUIV_InputMode_Toggle''''' &amp;amp;ndash; A two-state button, one click switches it on, another one switches it off.&lt;br /&gt;
&lt;br /&gt;
Another common bug with MUI buttons is to omit keyboard handling. The mouse is not everything. The first, obligatory step is to enter the button into the window's TAB key cycle chain:&lt;br /&gt;
&lt;br /&gt;
 MUIA_CycleChain,        TRUE,&lt;br /&gt;
&lt;br /&gt;
Any gadget entered into the chain may be selected by pressing the TAB key (for default MUI keyboard settings). The selected object has a special frame drawn around it. Then it may be activated by some key set in MUI preferences. For buttons the default &amp;quot;pressing&amp;quot; key is the return key. A rule of thumb for cycle chaining:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;center&amp;gt;'''Every''' gadget accepting user input '''must''' be added to the TAB cycle chain.&amp;lt;/center&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another keyboard handling feature provided by MUI is hotkeys. A hotkey just activates a button associated to it. Hotkeys have the following features:&lt;br /&gt;
*MUI provides a visual hint of a button hotkey by underlining the hotkey letter in the button label. It implies that the hotkey letter must exist in the label.&lt;br /&gt;
*There is visual feedback for using a hotkey, the button is pressed as if it has been clicked with the mouse.&lt;br /&gt;
Not every button in a GUI has to have a hotkey. The best practice is to assign hotkeys only for the most used buttons, especially if there are many buttons in a window. A hotkey is defined with two attributes:&lt;br /&gt;
*'''''MUIA_Text_HiChar''''' &amp;amp;ndash; this attribute specifies a letter to be underlined in the label. It is case insensitive.&lt;br /&gt;
*'''''MUIA_ControlChar''''' &amp;amp;ndash; this attribute specifies a hotkey. Of course it should be the same as the above one. It should be a lowercase letter, as uppercase forces a user to press SHIFT, making the hotkey less comfortable to use. There is also no visual hint for SHIFT requirement. Digits may be also used as hotkeys if the label contains them. Using punctuation and other characters should be avoided. An example of use:&lt;br /&gt;
&lt;br /&gt;
 MUIA_Text_Contents,     &amp;quot;Destroy All&amp;quot;,&lt;br /&gt;
 MUIA_Text_HiChar,       'a',&lt;br /&gt;
 MUIA_Text_ControlChar,  'a'&lt;br /&gt;
&lt;br /&gt;
Note that these attributes take a single char, not a string.&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=The_Style_Guide&amp;diff=4193</id>
		<title>The Style Guide</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=The_Style_Guide&amp;diff=4193"/>
				<updated>2021-06-05T09:26:17Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: Created page with &amp;quot;''Stefan Haubenthal''   == Short Cuts == * Find: Amiga-F (should toggle) ** next: Return ** previous: Shift Return&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Stefan Haubenthal''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Short Cuts ==&lt;br /&gt;
* Find: Amiga-F (should toggle)&lt;br /&gt;
** next: Return&lt;br /&gt;
** previous: Shift Return&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Magic_User_Interface_Programming&amp;diff=4192</id>
		<title>Magic User Interface Programming</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Magic_User_Interface_Programming&amp;diff=4192"/>
				<updated>2021-06-05T09:21:55Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: /* The First Steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Grzegorz Kraszewski''&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;small&amp;gt;This article in other languages: [[Programowanie w MUI|Polish]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
Magic User Interface (MUI for short) is the MorphOS toolkit for creating applications with a graphical user interface. It provides a broad set of gadgets (controls) as well as a complete framework for designing event driven programs. MUI is object oriented, but does not rely on any specific programming language. A BOOPSI (''Basic Object Oriented System for Intuition'') is used as the foundation of MUI object oriented design.&lt;br /&gt;
&lt;br /&gt;
MUI offers a dynamic layout as its basic mode of operation. The placement of gadgets is determined by grouping them in horizontal, vertical or matrix groups. Pixel coordinates of gadgets adapt dynamically to user preferences like font sizes, spacing between gadgets, objects' frames and backgrounds. The two screenshots below show '''the same''' example application. The only difference is that user MUI settings are different.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:digiroller1.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The first settings are plain and clean. They may even be called a bit oldschool for using simple, vector frames and uniform color backgrounds. A simple window skin, named ''Mahalaxmi'' fits this design nicely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:digiroller2.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The second example uses some MUI 4 features, like bitmap frames with transparency masks. This dark design is achieved by using the ''Nox'' window skin. All gadget position calculations are done automatically, accounting for a larger font and fancy frames. The programmer need not care about user taste and preferences (a good programmer would test the program appearance with a few different settings however).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==The First Steps==&lt;br /&gt;
* [[Short BOOPSI Overview]]&lt;br /&gt;
* [[Event Driven Programming, Notifications]]&lt;br /&gt;
* [[&amp;quot;Hello world!&amp;quot; in MUI]]&lt;br /&gt;
* [[The Style Guide]]&lt;br /&gt;
&lt;br /&gt;
==Subclassing==&lt;br /&gt;
* [[General Rules and Purpose of Subclassing]]&lt;br /&gt;
* Overriding General Methods&lt;br /&gt;
** [[Overriding Constructors]]&lt;br /&gt;
** [[Overriding Destructors]]&lt;br /&gt;
** [[Overriding OM_SET()]]&lt;br /&gt;
** [[Overriding OM_GET()]]&lt;br /&gt;
* [[Subclassing Application Class]]&lt;br /&gt;
* [[Subclassing List Class]]&lt;br /&gt;
* [[Subclassing Numeric Class and its Subclasses]]&lt;br /&gt;
* [[Subclassing Area Class]]&lt;br /&gt;
* [[MUI Subclassing Tutorial: SciMark2 Port]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Useful Techniques==&lt;br /&gt;
* [[Locating Objects in the Object Tree]]&lt;br /&gt;
* [[Text Class: Buttons, Textfields, Labels]]&lt;br /&gt;
* [[MUI Text Rendering Engine]]&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Multi-display&amp;diff=4187</id>
		<title>Multi-display</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Multi-display&amp;diff=4187"/>
				<updated>2020-12-16T08:57:44Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: /* Basics */ blankers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Basics ==&lt;br /&gt;
MorphOS has limited support for multi-display setups. On the hardware side there's multi-head support for selected Radeon R3xx cards and configurations on PowerMac G5, PowerBook, and iMac setups. It's also possible to use multiple individual graphics cards in specific setups.&lt;br /&gt;
&lt;br /&gt;
On the software side, from a users' perspective, multi-display setups rely on the [[Fundamentals_of_MorphOS#Screens|screens]] concept, which is inherited from AmigaOS. Individual screens can be configured to be opened on individual displays/monitors. The Ambient desktop will always be on its own screen and it cannot be stretched over several screens, it's always displayed only on one monitor, but you can open other programs on other monitors quite freely and decide which program is displayed on which monitor.&lt;br /&gt;
&lt;br /&gt;
Neither is there a system provided way to move the mouse pointer to another screen by moving it over the screen borders, so it must be done by cycling the screens just as when using multiple screens on a single monitor setup. Therefore blankers only work for a single screen.&lt;br /&gt;
&lt;br /&gt;
== Configuring ==&lt;br /&gt;
When booting a multi-display setup for the first time, the Ambient screen opens on the largest or first display it finds. The other display(s) should show a mirrored image of the Ambient screen, but it may fail dependant on monitor specifications.&lt;br /&gt;
&lt;br /&gt;
Which screen is displayed on which monitor can be configured from the '''Screens preferences''' in the MorphOS [[Getting_Started#System_Settings|system settings]]. There you can edit existing screens or create whole new screens.&lt;br /&gt;
&lt;br /&gt;
To change the monitor a screen is displayed on, double-clicking the corresponding entry in the screens list and the '''Edit Screen''' window should then open.&lt;br /&gt;
: [[File:GettingStarted_MorphOS_Preferences_Screens.png|500px]]&lt;br /&gt;
&lt;br /&gt;
The '''mode list''' shows all the available screenmodes on the computer, and these can be selected for the screen that needs editing. Mode names start with the graphics cards' name. On single-display setups all modes have the same name, but on multi-display setups the mode names reveal on which monitor the mode will be shown. On multi-head setups (single card/chipset, but several outputs), names only differ by the number added at the end of the names.&lt;br /&gt;
: [[File:Multi-display_modes.png]]&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== Configuring Ambient for the Internal Display on PowerBooks ===&lt;br /&gt;
For example, on PowerBook5,9 modes for the internal display have the name '''Radeon9700Mob''' and modes for the external monitor have the name '''Radeon9700Mob.1'''. To set the Ambient screen to the internal display, you'd select the ''Radeon9700Mob 24bit 1680 x 1050'' mode when editing the Ambient screen settings. Available resolutions differ between PowerBook models, but you should always select a mode that is equal to the native resolution of your display.&lt;br /&gt;
&lt;br /&gt;
=== Configuring a Program to Use the Other Display ===&lt;br /&gt;
All MUI (the native GUI toolkit of MorphOS) programs can be configured to use a screen on any monitor. With non-MUI programs (legacy 68k programs mainly) it depends on whether a program has a specific setting for its screenmode.&lt;br /&gt;
&lt;br /&gt;
Here's a tutorial on how to configure a MUI program to use its own screen: [[Getting_Started#Making_OWB_to_Use_Its_Own_Screen|Making_OWB_to_Use_Its_Own_Screen]]. Just remember to select a screenmode for the required monitor in this case.&lt;br /&gt;
&lt;br /&gt;
=== Using Several Programs on a Single External Screen ===&lt;br /&gt;
If you want to keep things tidy by only having one screen per monitor, you can create a single external screen to accompany your Ambient screen, and spread regularly used programs between them.&lt;br /&gt;
&lt;br /&gt;
To create the screen, click '''New''' in the Screens preferences. Fill the '''Name''' and '''Title''' fields, for example, with ''External'' and ''External Monitor'' texts. Select a screenmode that has an alternate mode name than your Ambient screen has (ending in .1, for instance). Click '''Ok''', and '''Save''' or '''Use''' to test out the available screen on your system.&lt;br /&gt;
: [[File:Multi-display_external_setup.png|550px]]&lt;br /&gt;
&lt;br /&gt;
Now you can move (MUI) programs to that screen by selecting '''Jump to Screen -&amp;gt; External''' from the [[Fundamentals_of_MorphOS#Window_border_gadgets|window popup gadget]]. If you don't see the gadget, check the ''Windows'' page in the MUI settings to enable it. The next screenshots show how to move a Shell window to the external screen.&lt;br /&gt;
: [[File:Multi-display_external_jump.png]] [[File:Multi-display_external_screen.png]]&lt;br /&gt;
&lt;br /&gt;
Programs can also be set to use the external screen permanently, you don't have to make them jump around all the time after reboots. Open the program's own MUI settings by clicking the [[Fundamentals_of_MorphOS#Window_border_gadgets|window popup gadget]] and select '''MUI Settings...''', or by selecting the '''Settings -&amp;gt; MUI...''' pull-down menu option when program's window is active. Activate the '''Screen''' page and select ''External'' from the list.&lt;br /&gt;
: [[File:Multi-display_mui_settings.png]]&lt;br /&gt;
&lt;br /&gt;
Program windows can be saved to fixed positions on the screen by selecting the '''Snapshot''' option from the [[Fundamentals_of_MorphOS#Window_border_gadgets|window popup gadget]].&lt;br /&gt;
&lt;br /&gt;
Here's an example screenshot with several networking related programs snapshotted in fixed positions on the external screen.&lt;br /&gt;
: [[File:Multi-display_netscreen.png|550px]]&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
Only one screen can be active at once, and both the mouse pointer and the active text input will be on that screen.&lt;br /&gt;
&lt;br /&gt;
To change the active screen, and thus the display/monitor you work on, you'll have to ''cycle'' screens in the traditional Amiga/MorphOS ways. By default that can be done by pressing the '''lcommand m''' keyboard shortcut or by using the [[Fundamentals_of_MorphOS#Screen_Depth_Gadget|screen depth gadget]].&lt;br /&gt;
&lt;br /&gt;
The keyboard shortcut, or mouse action, can be freely configured from the [[Getting_Started#IControl|IControl]] preferences in the MorphOS [[Getting_Started#System_Settings|system settings]]. It's done by editing the '''Screen: To Back''' hotkey.&lt;br /&gt;
&lt;br /&gt;
It's also possible to add several different hotkeys for each action. Here's an example screenshot where both ''lcommand m'' and double-click with the middle mouse button (wheel) will cycle screens.&lt;br /&gt;
: [[File:Multi-display_icontrol.png|550px]]&lt;br /&gt;
&lt;br /&gt;
There are also some 3rd party programs, or ''commodities'', to cycle the screens in different ways.&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=WirelessManager&amp;diff=4183</id>
		<title>WirelessManager</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=WirelessManager&amp;diff=4183"/>
				<updated>2020-11-23T01:16:57Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: disconnect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Interface of MOSSYS:Net/WirelessManager&lt;br /&gt;
* DEVICE/K for example atheros5000.device or prism2.device&lt;br /&gt;
* UNIT/K/N&lt;br /&gt;
* CONFIG/K&lt;br /&gt;
* VERBOSE/S&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;rxcmd WLANMNGR.1 &amp;quot;reassociate&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;rxcmd WLANMNGR.1 &amp;quot;disconnect&amp;quot;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=WirelessManager&amp;diff=4182</id>
		<title>WirelessManager</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=WirelessManager&amp;diff=4182"/>
				<updated>2020-11-21T22:46:14Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: Created page with &amp;quot;Interface of MOSSYS:Net/WirelessManager * DEVICE/K for example atheros5000.device * UNIT/K/N * CONFIG/K * VERBOSE/S  &amp;lt;code&amp;gt;rxcmd WLANMNGR.1 &amp;quot;reassociate&amp;quot;&amp;lt;/code&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Interface of MOSSYS:Net/WirelessManager&lt;br /&gt;
* DEVICE/K for example atheros5000.device&lt;br /&gt;
* UNIT/K/N&lt;br /&gt;
* CONFIG/K&lt;br /&gt;
* VERBOSE/S&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;rxcmd WLANMNGR.1 &amp;quot;reassociate&amp;quot;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=How_to_translate_program_with_SimpleCat&amp;diff=4173</id>
		<title>How to translate program with SimpleCat</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=How_to_translate_program_with_SimpleCat&amp;diff=4173"/>
				<updated>2020-10-14T11:39:42Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: just a hint&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Hint: SimpleCat does not support the negative stringNum of ObjC catalogs.''&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Passwordless_SSH_login_with_RemoteShell&amp;diff=4170</id>
		<title>Passwordless SSH login with RemoteShell</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Passwordless_SSH_login_with_RemoteShell&amp;diff=4170"/>
				<updated>2020-08-24T10:48:18Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: markup&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are lots of tutorials about this for linux, but not much for MorphOS, even if the process is mostly the same. So when I started doing this, I decided to write down all steps, in case someone else needs to do it in the future. I assume you already have a suitable unix / linux system properly configured. If not, google for some linux tutorial.&lt;br /&gt;
&lt;br /&gt;
While &amp;quot;passwordless login&amp;quot; might sound terribly insecure, it's actually often more secure than traditional passworded login. Oversimplified, you &amp;quot;create a really secure &amp;amp; random password, which you upload to the server&amp;quot;. In practice, this is of course quite a bit more complex (and more secure). Of course this can be combined with a password for even more protection.&lt;br /&gt;
&lt;br /&gt;
Also note that MorphOS SDK comes with own SSH, SCP etc. which have their own config file. These instructions are for RemoteShell. Commands in SDK have their own config files, to which you can do the same changes.&lt;br /&gt;
&lt;br /&gt;
Step 1: Set hostname&lt;br /&gt;
You might want to set your hostname in Settings =&amp;gt; Network =&amp;gt; Host and DNS&lt;br /&gt;
&lt;br /&gt;
Step 2: Create public &amp;amp; private key pair&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SYS:Applications/RemoteShell/Files/ssh-keygen -t rsa&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When asked for password, just press enter for none.&lt;br /&gt;
Enter same password again.&lt;br /&gt;
&lt;br /&gt;
Step 3: Get the public key to server&lt;br /&gt;
Doesn't matter how you do it. With USB massstorage device:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;copy sys:Applications/RemoteShell/Files/conf/id_rsa.pub UMSD0:&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Move the USB device to the server.&lt;br /&gt;
&lt;br /&gt;
Step 4: Add key to authorized keys&amp;lt;br /&amp;gt;&lt;br /&gt;
Mount the USB disk (if not done automatically)&amp;lt;br /&amp;gt;&lt;br /&gt;
Append the key to your list of authorized keys:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat /media/disk/id_rsa.pub &amp;gt;&amp;gt; ~/.ssh/authorized_keys&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NOTE: Use the path where the disk is mounted.&lt;br /&gt;
&lt;br /&gt;
Step 5: RemoteShell configuration&amp;lt;br /&amp;gt;&lt;br /&gt;
Preferences =&amp;gt; Servers =&amp;gt; Add&amp;lt;br /&amp;gt;&lt;br /&gt;
Alias: Whatever you like&amp;lt;br /&amp;gt;&lt;br /&gt;
Server: Address of the server&amp;lt;br /&amp;gt;&lt;br /&gt;
Login: User name (on the server)&amp;lt;br /&amp;gt;&lt;br /&gt;
Password: Empty (unless you use one)&amp;lt;br /&amp;gt;&lt;br /&gt;
Port: Whatever the server is using.&lt;br /&gt;
&lt;br /&gt;
When connecting to the server for the first time, RemoteShell asks if you want to continue connecting (as the host isn't yet marked as known). After answering yes, the connection will be done automatically.&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Tips_and_Tricks&amp;diff=4146</id>
		<title>Tips and Tricks</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Tips_and_Tricks&amp;diff=4146"/>
				<updated>2020-04-12T15:25:52Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: /* Copying a CD/DVD to an ISO Image */ typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Originally published at: http://jpv.wmhost.com/morphos/tips/''&lt;br /&gt;
&lt;br /&gt;
Miscellaneous tips and tricks for MorphOS use. Some may even be hackish and not officially encouraged by MorphOS Team. Everyone is welcome to make additions and corrections here.&lt;br /&gt;
== Basic Features ==&lt;br /&gt;
&lt;br /&gt;
=== Modifying the System Directory ===&lt;br /&gt;
: Tip #1: NEVER modify anything in the MOSSYS: (SYS:MorphOS/) path! All the changes are lost in the system upgrade. If you need to add any 3rd party drivers or libraries, add them to SYS:. If there isn't a correct directory by default, make one.&lt;br /&gt;
&lt;br /&gt;
: There's only one exception (of course there is one) to this: you can rename MOSSYS:Libs/rexxsyslib.library to MOSSYS:Libs/rexxsyslib.library_disabled when you copy 68k version of rexxsyslib.library to SYS:Libs/ in order to get the AREXX working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Keyboard Commands ===&lt;br /&gt;
&lt;br /&gt;
: At first, check the default ones and define your favourites in '''System Settings -&amp;gt; IControl -&amp;gt; Hotkeys''' and in '''Ambient Settings -&amp;gt; Keyboard'''.&lt;br /&gt;
&lt;br /&gt;
: For example IControl has &amp;quot;Active Window: Activate Next&amp;quot; and &amp;quot;All Windows: Depth Menu&amp;quot; options, which can be used to achieve alt/ctrl/command-tab style window cycling functionality familiar from other operating systems.&lt;br /&gt;
&lt;br /&gt;
: Other keys: &lt;br /&gt;
:* To zoom Ambient icons in icon mode: keep CTRL pressed and use the mouse wheel. &lt;br /&gt;
:* To find and select files in Ambient windows by letter: start typing the wanted name when the window is active. Keep shift-key pressed for directories. &lt;br /&gt;
:* To enter a path manually (for example for hidden dirs like .recycled): press the / key in an Ambient window and type in the path. &lt;br /&gt;
:* Command-f activates the find function in most programs. &lt;br /&gt;
:* The r-key rotates the pictures in Ambient's internal viewer and page up/down keys select previous and next images in a dir &lt;br /&gt;
:* Check the keyboard commands of the shell, like by default, commands can be completed with CTRL-tab, devices with ALT-tab, history with shift-tab etc. &lt;br /&gt;
:* Keeping the alt-key pressed while double clicking drawer gives you different ways to open drawers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enabling/Disabling Icon Tooltypes ===&lt;br /&gt;
&lt;br /&gt;
: Double click single tooltypes to enable and disable them in the icon information window.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Browsing History in Ambient ===&lt;br /&gt;
&lt;br /&gt;
: Clicking the parent button ([[File:Tips_Parent.png|middle]]) on an Ambient window (in browser mode) with the right mouse button gives you a browsing history popup menu for quick jumping between locations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sync the Clock from Internet at Boot ===&lt;br /&gt;
&lt;br /&gt;
: Add this line to S:user-network-startup file:&lt;br /&gt;
: &amp;lt;tt&amp;gt;Run DETACH MOSSYS:C/SetClockNTP SAVE&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Redirecting AHI Music Unit ===&lt;br /&gt;
&lt;br /&gt;
: You can select Unit 0 as the Music Unit in AHI to be able hear audio output from multiple programs at the same time, with a slight decrease in quality.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Keeping AHI Audio Quality Better ===&lt;br /&gt;
&lt;br /&gt;
: Audio quality with AHI will be better if you reduce available channels for its shared modes (Unit 0 usually). Available channels will limit the amount of simultaneus playback of sounds, but you really don't need the default 32 channels and even two channels can be quite enough. Should there be more concurrent sounds, some of them just get muted until the other have been finished.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mime Type Configuration ===&lt;br /&gt;
&lt;br /&gt;
: Learn to configure mime types from the Ambient settings. It really gives so much for your system and your user experience. [http://jpv.wmhost.com/pics/mimemplayer.png Here] is one example of how to configure MPlayer for all the video files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Inline Editing ===&lt;br /&gt;
&lt;br /&gt;
: Inline editing is a quick way to edit filenames by clicking them with the mouse wheel or with the long left mouse click. Its behaviour can be configured from the Lister settings in Ambient Settings.&lt;br /&gt;
&lt;br /&gt;
: File comments can also be edited with the inline editing.&lt;br /&gt;
&lt;br /&gt;
: [[File:Tips_Inlineedit.png|280px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Batch Renaming in Ambient ===&lt;br /&gt;
&lt;br /&gt;
# Select files you want to be in the range of renaming.&lt;br /&gt;
# Hit rename button or command-r keyboard shortcut.&lt;br /&gt;
# Use pattern to rename. For example renaming all files which begin with &amp;quot;mod.&amp;quot; to files which end with &amp;quot;.mod&amp;quot;, use &amp;quot;mod.*&amp;quot; as source and &amp;quot;*.mod&amp;quot; as destination (quotation marks not needed).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Don't Forget RMB/Long-LMB Gadget Menus ===&lt;br /&gt;
&lt;br /&gt;
: You get menus from zoom and depth gadgets with right mouse button or by holding left mouse button pressed on them.&lt;br /&gt;
&lt;br /&gt;
: [[File:Tips_Zoommenu.png]] [[File:Tips_Windowdepthmenu.png]] [[File:Tips_Screendepthmenu.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How to Use RMB with One-button Mouse ===&lt;br /&gt;
&lt;br /&gt;
: The right mouse button can be emulated in several different ways:&lt;br /&gt;
:* The '''System Settings -&amp;gt; Mouse -&amp;gt; Open menus by clicking...''' setting lets your mouse button act as the right mouse button if you hold a qualifier key pressed while clicking. The qualifier key can be configured for your preferences, but it's the shift key by default.&lt;br /&gt;
:* Press right alt and right command keys together. This probably doesn't work on systems with ADB keyboard, like on older Mac laptops. The ADB keyboard doesn't make difference between left and right keys.&lt;br /&gt;
:* With non-ADB laptops (PowerBook 5,6-5,9 and 6,7 (iBook)) you can also use two finger tap or two finger hold + button combination on the touchpad for RMB.&lt;br /&gt;
:* You can define a hotkey for menu launching on the IControl preferences (the default one is rcommand+space). It doesn't work exactly as the RMB everywhere, but works if you're mostly using the RMB for menus.&lt;br /&gt;
:* A multi button USB mouse works always!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Starting Programs Iconified ===&lt;br /&gt;
&lt;br /&gt;
: MUI has an option to start programs in iconified mode. It's useful for example for programs like Synergy, which you'd like to start on background without their main window jumping up. The option can be found from program's MUI Settings (Windows -&amp;gt; Iconify on startup).&lt;br /&gt;
&lt;br /&gt;
: [[File:Tips_Iconify.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Checking the Debug Log ===&lt;br /&gt;
&lt;br /&gt;
: If you want a stable system, you need to check the debug log periodically to see if any program misbehaves when used, especially when running new software.&lt;br /&gt;
&lt;br /&gt;
: An easy way to do it is to enable Debug screenbar module from the screen depth gadget menu. Bug looking Debug button on the screenbar will then give you a debug menu where you can view the log etc. If &amp;quot;Show Log...&amp;quot; option is ghosted, there's nothing in the log and everything is fine, but if it shows hundreds of cryptic lines (it's called a hit), then you have something to worry and the system probably isn't stable anymore. Some programs may output their own harmless debug information to the log too, but it's usually limited to few or tens of lines maximum. You'll recognize a real hit for sure.&lt;br /&gt;
&lt;br /&gt;
: [[File:Tips_Debug1.png|x64px]] [[File:Tips_Debug2.png|x64px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Printing to a PostScript Compatible Network Printer ===&lt;br /&gt;
&lt;br /&gt;
: You should mount the NETPAR: device and print to that device from programs like VPDF and OWB, which can output PostScript. NETPAR: is faster than printing through Turboprint (PRT:) and doesn't need Ghostscript installed (PS:).&lt;br /&gt;
&lt;br /&gt;
: &amp;quot;Mount NETPAR:&amp;quot; can be added to S:user-startup, for example.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== .recycled Directory ===&lt;br /&gt;
&lt;br /&gt;
: SFS is the default filesystem on MorphOS. It can have a special directory which contains recently deleted files. The directory is named as .recycled and it resides at the root level of every SFS partition (SYS:.recycled for example). Depending the format options it may be disabled, hidden but accessible, or visible.&lt;br /&gt;
&lt;br /&gt;
: If it's hidden, you can't see it even with &amp;quot;View All Files&amp;quot; option, but you can access it from the shell or Ambient (for example by pressing / key and then writing it to the path string after the volume name).&lt;br /&gt;
&lt;br /&gt;
: You shouldn't modify any files in it, but you can recover deleted files by copying them to some other path.&lt;br /&gt;
&lt;br /&gt;
: The PFS3 filesystem has a similar directory, but its name is &amp;quot;.deldir&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How to Reduce Graphics Memory Usage ===&lt;br /&gt;
&lt;br /&gt;
: MorphOS can use graphics memory quite extensively which can cause slowdowns or glitches if you run out of it. It usually isn't an issue if you have 64MB or more graphics memory, but lower spec systems with today's resolutions may need some tuning. There are several ways to reduce memory usage and you have to decide or try which is the best for you.&lt;br /&gt;
&lt;br /&gt;
: MorphOS has an &amp;quot;Enhanced Display&amp;quot; mode, which uses the graphics card's 3D functions to draw graphic layers. It consumes more memory than the traditional 2D mode, but it provides some eyecandy, tearless moving etc.&lt;br /&gt;
&lt;br /&gt;
: To reduce its memory usage, you may:&lt;br /&gt;
:* Change its buffering settings on the DisplayEngine settings in MorphOS Preferences. You need to reboot or switch screens for the new settings to take effect.&lt;br /&gt;
:* Disable it completely from the Screens settings in MorphOS Preferences for some or all screens. It may also help if you let it be enabled for Ambient screen, but disable it on other screens you might have.&lt;br /&gt;
&lt;br /&gt;
: Other ways to reduce graphics memory usage:&lt;br /&gt;
:* Lower the color depth of screens from the Screens settings. 16-bit might be enough sometimes.&lt;br /&gt;
:* Don't use too many separate screens at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How to Open MUI Programs on Their Own Screens ===&lt;br /&gt;
&lt;br /&gt;
: 1) An easy way is to select &amp;quot;Jump to Screen -&amp;gt; New&amp;quot; from the MUI popup menu gadget in program's window border. It always opens in an enhanced mode and clones the resolution from the Ambient screen. Open and save program's MUI settings to save it permanently.&lt;br /&gt;
: [[FIle:MorphOS3_jPV_Newscreen.png|120px]]&lt;br /&gt;
&lt;br /&gt;
: 2) A more configurable method is to open program's MUI settings, select the Screen tab, and create a totally new screen definition there. You can edit the screen name and the title to suit your use (you can use program's name for those for example), select any resolution and depth, enable or disable the enhanced mode etc. In many cases this is a better method, because you can save graphics memory by not using the enhanced mode for screens which you're going to use for full screen apps only or so.&lt;br /&gt;
&lt;br /&gt;
: You can switch between the screens with lamiga-m (lcommand-m) keyboard shortcut, or by clicking the screen depth gadget (left click switches to the next screen, right click gives you a menu where you can select any open screen).&lt;br /&gt;
: [[File:Tips_Screendepthmenu.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Advanced Features ==&lt;br /&gt;
&lt;br /&gt;
=== Default Device Icons ===&lt;br /&gt;
&lt;br /&gt;
: If you want a certain default icon for all the units of a certain device, you can create an icon named def_DEVICENAMExdisk.info to your default icons path (SYS:Prefs/Presets/Deficons/ by default).&lt;br /&gt;
&lt;br /&gt;
: For example the deficon for SMBFS devices would be called def_SMBFSxdisk.info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Default Icon for Ambient Windows ===&lt;br /&gt;
&lt;br /&gt;
: By default there isn't a default icon file for the icon you see when iconifying an Ambient window (a view). If you want to override the built-in icon, create or copy a new icon file to your default icons path and name it to '''def_view.info'''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Old Style Preferences Icons ===&lt;br /&gt;
&lt;br /&gt;
[[File:Separate_prefs_in_MorphOS.png|thumb|Example of separate system prefs in MorphOS]]&lt;br /&gt;
: You can have separate preferences icons in the SYS:Prefs/ directory in the old Amiga style for MorphOS system prefs. Make or copy icons named with a corresponding sub preference name into the SYS:Prefs/ dir and edit their Default Tool to &amp;quot;:MorphOS/Prefs/Preferences&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
: There's already a main preferences icon in SYS:Prefs, so here's an easy example: &amp;quot;copy SYS:Prefs/Preferences.info SYS:Prefs/Network.info&amp;quot;, after which double clicking the new Network icon opens the network preferences directly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hilight Options in Listers ===&lt;br /&gt;
&lt;br /&gt;
: If you want to use &amp;quot;Alternated rows&amp;quot; and &amp;quot;Hilighted sorting column&amp;quot; options in the Lister settings with a grapchics card that doesn't support 3D acceleration.&lt;br /&gt;
: Type in shell:&lt;br /&gt;
: &amp;lt;tt&amp;gt;Setenv MUI/fastppa SAVE 1&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Copy Selected Filenames ===&lt;br /&gt;
&lt;br /&gt;
: You can use the internal Ambient command &amp;quot;copyselectiontoclipboard&amp;quot; to copy selected filenames with or without path information to the clipboard. For example, create a new custom hotkey in the Ambient Settings and define &amp;quot;copyselectiontoclipboard VIEWID=%Si FULLPATH&amp;quot; as an internal command for it.&lt;br /&gt;
&lt;br /&gt;
: User may find it very useful to paste around the names selected in the Ambient windows in many situations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Using ARexx Ports from Lua ===&lt;br /&gt;
&lt;br /&gt;
: MorphOS comes with a native implementation of the Lua scripting language. It can be used for script writing with application interacting instead of the emulated 3rd party ARexx. Lua can use existing ARexx ports with its ipc.module.&lt;br /&gt;
&lt;br /&gt;
: Load the IPC module first with the '''require 'ipc'''' line (unlike the standard Lua distribution, all modules have to be loaded with the ''require'' function on MorphOS. Check available modules from the ''MOSSYS:Libs/Lua/'' directory.)&lt;br /&gt;
&lt;br /&gt;
:* ipc.address(port) - sets the default ARexx port. Port &amp;quot;COMMAND&amp;quot; executes commands as DOS shell commands. &lt;br /&gt;
:* ipc.checkport(port) - checks if ARexx port is available. &lt;br /&gt;
:* ipc.rx(command) - sends command to a port set with ipc.address. It returns ARexx RESULT. &lt;br /&gt;
:* ipc.waitforport(name[, interval]) - Waits for a ARexx port. Script is aborted if the port isn't found.&lt;br /&gt;
&lt;br /&gt;
: Few examples can be found from [http://jpv.wmhost.com/morphos/ here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Copying a Whole Disk As an Image File ===&lt;br /&gt;
&lt;br /&gt;
: You can access raw data of drives by MorphOS's RAWDISK: device. Partitions or whole disk can be copied in or out with it, but be careful to write to the correct destination! For copying you need to use SDK's cp command or standard Copy command with the DIRECT option.&lt;br /&gt;
&lt;br /&gt;
: You can browse available disks and devices by opening RAWDISK: device from the shell (just type RAWDISK: on the shell) or from Ambient (hit the / key, clear existing text, and write RAWDISK: to the string line). Browse to the Devices directory and then to the wanted device and unit to see the actual disk image file (rawdisk) and partition files in a separate partition table directory. Partition files let you recognize more easily that you're accessing the wanted disk. They also have information like device and filesystem names told in file comments (use the List command or Ambient to see them).&lt;br /&gt;
&lt;br /&gt;
: As an example, to make a backup of a whole SD card which is placed in a USB reader (the card is found in usbscsi.device unit 3):&lt;br /&gt;
: &amp;lt;tt&amp;gt;Copy DIRECT RAWDISK:Devices/usbscsi.device/3/rawdisk work:sdcard.img&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: And to copy the image back to the SD card (removes all existing data, be careful!):&lt;br /&gt;
: &amp;lt;tt&amp;gt;Copy DIRECT work:sdcard.img RAWDISK:Devices/usbscsi.device/3/rawdisk&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: This works with all raw disk image files like Raspberry Pi's OS distributions etc.&lt;br /&gt;
&lt;br /&gt;
: Single partitions can also be copied from the RAWDISK:Disks directory.&lt;br /&gt;
&lt;br /&gt;
: If you want to access the data in saved image files without needing to write them back to any device, you can mount them with help of [[Tools/FileImageCtrl]] and [[Tools/Mounter]] programs. You can either mount partitions directly with the [[Tools/FileImageCtrl|FileImageCtrl]] tool or insert disk images on it and mount the wanted partitions with the [[Tools/Mounter|Mounter]] tool.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Using WLAN with Hidden SSID ===&lt;br /&gt;
&lt;br /&gt;
: If you have to use wireless network with hidden SSID, you can add &amp;quot;scan_ssid=1&amp;quot; line in your ENVARC:sys/Wireless.prefs file's network block.&lt;br /&gt;
&lt;br /&gt;
: Contents should look something like this:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tt&amp;gt;network={&lt;br /&gt;
: &amp;amp;nbsp;&amp;amp;nbsp;ssid=&amp;quot;ThatHiddenSSID&amp;quot;&lt;br /&gt;
: &amp;amp;nbsp;&amp;amp;nbsp;scan_ssid=1&lt;br /&gt;
: &amp;amp;nbsp;&amp;amp;nbsp;psk=&amp;quot;password&amp;quot;&lt;br /&gt;
: }&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Note: It's not recommended to hide the SSID, because it doesn't add security in practise. Use this only if you can't control the network you're connecting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modifying Screen and Keyboard Brightness on a Laptop without Using KB Shortcuts ===&lt;br /&gt;
&lt;br /&gt;
: Brightness values can be modified by editing the ENVARC:sys/laptopquick.conf file with a text editor. The values are taken in use after a reboot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Opening Ambient Windows from the Shell or Scripts ===&lt;br /&gt;
&lt;br /&gt;
: Directories can be opened with the [[Shell_Commands/Open|Open]] command, but it only opens them in the default view mode:&lt;br /&gt;
: &amp;lt;tt&amp;gt;Open SYS:Applications&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: If you need to open windows with certain location, size, position, and mode, you can use the LoadURI ARexx command. LoadURI accepts the following parameters:&lt;br /&gt;
:* URI which contains a path and attributes with values. The attributes are given after a question mark and they are separated with the &amp;amp; delimiter. Possible attributes are ''view'' (icon or list), ''mode'' (all, icons, or thumbs),  ''top'' (pixels from the top border), ''left'' (pixels from the left border), ''width'', and ''height''.&lt;br /&gt;
:* NEW=NEWWIN/S: opens a new window even if similar window would already be opened&lt;br /&gt;
:* RELOAD/S: reloads the URI&lt;br /&gt;
:* FORCE/S: forces full reloading&lt;br /&gt;
:* BROWSER/N: forces the browser mode on (1) or off (0)&lt;br /&gt;
:* VIEWID/N: specifies view/window ID&lt;br /&gt;
&lt;br /&gt;
: Use the ''AMBIENT'' port in ARexx scripts.&lt;br /&gt;
&lt;br /&gt;
: To open the SYS:Libs directory in the list mode showing all files in a 440x600 window at position x=350, y=50, no matter if it has been opened previously:&lt;br /&gt;
: &amp;lt;tt&amp;gt;'LoadURI &amp;quot;file://SYS:Libs?view=list&amp;amp;mode=all&amp;amp;top=50&amp;amp;left=350&amp;amp;width=440&amp;amp;height=600&amp;quot; NEW'&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: To open a directory in the icon mode showing thumbnails in a 500x400 window at position x=350, y=50, the window is also opened in the spatial (non browser) mode:&lt;br /&gt;
: &amp;lt;tt&amp;gt;'LoadURI &amp;quot;file://MOSSYS:Prefs/Wallpapers/1280x1024?view=icon&amp;amp;mode=thumbs&amp;amp;top=50&amp;amp;left=350&amp;amp;width=500&amp;amp;height=400&amp;quot; BROWSER=0'&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: If you don't want to write full ARexx scripts but would like to run them just as single shell commands, you can use the [[Shell_Commands/RXCmd|RXCmd]] shell command (notice that you have to escape the inner quotation marks with the asterisks):&lt;br /&gt;
: &amp;lt;tt&amp;gt;RXCmd AMBIENT &amp;quot;LoadURI *&amp;quot;file://SYS:Libs?view=list&amp;amp;mode=all&amp;amp;top=50&amp;amp;left=350&amp;amp;width=440&amp;amp;height=600*&amp;quot; NEW&amp;quot;&lt;br /&gt;
: RXCmd AMBIENT &amp;quot;LoadURI *&amp;quot;file://MOSSYS:Prefs/Wallpapers/1280x1024?view=icon&amp;amp;mode=thumbs&amp;amp;top=50&amp;amp;left=350&amp;amp;width=500&amp;amp;height=400*&amp;quot; BROWSER=0&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bundled Software ==&lt;br /&gt;
&lt;br /&gt;
=== Flacapella Settings for MP3 Encoding ===&lt;br /&gt;
&lt;br /&gt;
: Example of a custom encoder setting in Flacapella:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tt&amp;gt;Compress Command: c:lame -V0 --tt &amp;quot;{title}&amp;quot; --ta &amp;quot;{artist}&amp;quot; --tl &amp;quot;{album}&amp;quot; --tn {track} {?coverfile:--ti &amp;quot;{coverfile}&amp;quot;} {input} {output}&lt;br /&gt;
: File Extension: mp3&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: This will encode tracks to mp3 files with title, artist, album and track number tags. It also embeds fetched cover image in files, if image was found. &lt;br /&gt;
: Example assumes you have [http://morphos-files.net/find.php?find=lame LAME] installed in C:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Jukebox Tips ===&lt;br /&gt;
&lt;br /&gt;
:* If you select any song in playlist by clicking it just once, it's played next no matter if you have random or sequential mode in use. &lt;br /&gt;
:* You can adjust volume in Jukebox by using mouse wheel over its screenbar module. &lt;br /&gt;
:* Displayed columns can be configured on the fly by right clicking the column title.&lt;br /&gt;
:* Jukebox can be better integrated into Ambient and its contextual menus with the [http://aminet.net/package/mus/play/JukeboxAdder JukeboxAdder] script.&lt;br /&gt;
:* Two new tooltypes were presented in MorphOS 3.8: &lt;br /&gt;
:** '''FRAMESCAN=NO''' disables the Reggae framescanning for tracks that have unknown duration. It speeds up the loading of such tracks, but you'll lose the seeking ability with them. &lt;br /&gt;
:** '''STREAMBUFFER=YES''' activates the Reggae streambuffer class which reduces stuttering, but causes lag on track change and seeking.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How to Reduce OWB's HD Writes ===&lt;br /&gt;
&lt;br /&gt;
: OWB writes a lot of data to the hard drive by default. You might want to reduce it if you're paranoid about SFS fragmentation, filesystem corruption, privacy, or you'd like to avoid certain databases getting too big (which can cause slowdowns). Or you just want your .recycled dir to have other than the OWB files. One option is to use the Private Browsing mode always, but here are tips if you don't want to activate that always or you want to restrict certain writes only.&lt;br /&gt;
&lt;br /&gt;
:* Disable the TopSites feature. This makes a write for every page you visit, it's an awful amount. Its database (conf/TopSites.db) can also grow to hundreds of megabytes, which causes very noticeable slowdowns to browsing. You can disable it with the &amp;quot;Setenv SAVE OWB_DISABLE_TOPSITES 1&amp;quot; command in the shell, and if the database file has already grown too big, you can remove it.&lt;br /&gt;
:* Disable the Website Icons feature. Open the Interface settings and uncheck all Website Icons checkmarks. &lt;br /&gt;
:* Disable all saving options from the Privacy settings.&lt;br /&gt;
&lt;br /&gt;
: If you still need some option enabled, because some site requires it, you can soft link its configuration file to Ram Disk. I, for example, still have Local Storage enabled, but I have linked its dir to ENV: (which resides in Ram Disk). To do that, make LocalStorage directories to both ENV: and ENVARC: (that ensures that it's created after a reboot too), open the shell and cd into your OWB/Conf/ dir, rename or delete the old LocalStorage dir, type &amp;quot;makelink LocalStorage ENV:LocalStorage&amp;quot;. Using ENV: gives the advantage to have some files saved so that those settings are restored in every boot. If you're happy with a certain setting, copy the corresponding file to ENVARC: and it will be preserved without being messed up with the later usage. If you just want to have the configuration files enabled, but cleared on every boot, you could soft link them to T: for example.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alternative YouTube Script for OWB ===&lt;br /&gt;
&lt;br /&gt;
: [http://www.morphzone.info/modules/newbb_plus/viewtopic.php?forum=9&amp;amp;topic_id=9799&amp;amp;post_id=109979&amp;amp;viewmode=flat&amp;amp;sortorder=0&amp;amp;showonepost=1 YouTube Center] is a feature rich configureable userscript for improving YouTube experience. It's made for mainstream browsers, but it also works on OWB! All videos can be forced to HTML5 to get them work in OWB. It's heavier than Fab's official OWB script, but works fine as an option or as a backup plan :). Script saves its settings to LocalStorage to #?www.youtube.com#? files.&lt;br /&gt;
&lt;br /&gt;
: Note: YouTube defaults to the HTML5 player nowadays and you might be fine without any Flash-&amp;gt;HTML5 converter scripts. It's probably better to install this script only if you want some other features from it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Watching Videos with Less CPU Load in OWB ===&lt;br /&gt;
&lt;br /&gt;
: When watching a video in OWB, the fullscreen mode makes a lot less CPU load than the default embedded mode, because the fast overlay mode is used then. CPU load may drop from 100% to 40% for example. Wait until the video really starts playing before clicking the fullscreen button on it, or it may fail and you have to reload the video to be able to try it again. Some videos may have a fullscreen option in their contextual menu too. Remember to have Fullscreen Fix scripts added and enabled from the Scripts window (&amp;quot;Windows-&amp;gt;Scripts...&amp;quot; pulldown menu entry) for YouTube, Dailymotion, and Vimeo.&lt;br /&gt;
&lt;br /&gt;
: Note: check that you really have the latest YouTube fullscreen fix script from http://fabportnawak.free.fr/owb/scripts/YouTube_Fullscreen_Fix.js in your OWB/Scripts/ directory. Grunch doesn't get updated for the latest version always for example.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Problems with YouTube Videos ===&lt;br /&gt;
&lt;br /&gt;
:* Now that YouTube defaults to HTML5, our days of ad-free videos have ended. It also means that the Content Blocking (AdBlock) option in the OWB's settings can block some videos. If you have some videos which won't start playing, try to disable the Content Blocking option and try again. If that was the problem, but you want to keep the content blocking enabled, add an allow rule to the Content Blocking settings. Open &amp;quot;Windows-&amp;gt;Content Blocking...&amp;quot; from the OWB's pulldown menus, click the Add button, and write &amp;quot;youtube.com&amp;quot; to the Rule line. Close the window and try the video again.&amp;lt;br /&amp;gt;[[File:OWB_ContentBlockingYT.png]]&lt;br /&gt;
&lt;br /&gt;
:* If all videos refuse to play, check if you have any YouTube converter scripts enabled in the &amp;quot;Windows-&amp;gt;Scripts...&amp;quot; settings. The Fullscreen Fix script is the only one needed and you should disable all converter scripts.&lt;br /&gt;
&lt;br /&gt;
:* Flash plugins can also break compatibility with YouTube, so if you have the swfdec_plugin.library file in your OWB/Plugins/ directory, you have the following options to choose from:&lt;br /&gt;
:** Remove the file from use if you don't need flash anywhere. The plugin doesn't work too well generally anyway.&lt;br /&gt;
:** Keep the file, but disable it for all pages by unchecking the &amp;quot;Settings-&amp;gt;Preferencfes-&amp;gt;Content-&amp;gt;Allow plugins&amp;quot; option. You can then enable it temporarily from &amp;quot;Settings-&amp;gt;Plugins-&amp;gt;Enable&amp;quot; if needed.&lt;br /&gt;
:** Disable it temporarily from &amp;quot;Settings-&amp;gt;Plugins-&amp;gt;Disable&amp;quot;, and reload the page.&lt;br /&gt;
:** Disable it just for YouTube by adding a new URL setting from &amp;quot;Windows-&amp;gt;URL Settings...&amp;quot;. Click the Add button, edit the URL line to for example &amp;quot;youtube.com&amp;quot;, and uncheck the Plugins option.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OWB Doesn't Work or Stopped Working with Certain Web Pages ===&lt;br /&gt;
&lt;br /&gt;
:* Sometimes it helps to change the &amp;quot;Spoof as&amp;quot; setting in OWB. Web pages may offer different kind of content depending on what browser they think you are using. Some popular CAPTCHAs don't work with the default spoofing, but do work when spoofed as iPad for instance. iPad is generally a good option to start trying the spoofing, because you probably get the page in its simpliest form then.&lt;br /&gt;
&lt;br /&gt;
:* There are some bugs in the JavaScript engine in the latest available OWB version (1.24 at the time of writing) and that causes problems with some web pages, but there's a chance that these pages would still work with an earlier OWB version. You can download earlier OWB versions from [http://fabportnawak.free.fr/owb/ Fab's homepage] and install them, for example, to a different directory than your current OWB installation. There's no problem having two or even several OWB installations on your system, you can just launch whichever you want. As an example, Google Maps stopped working with OWB 1.24 in autumn 2017, but it still continued to work with [http://fabportnawak.free.fr/owb/owb-morphos-1.23.lha OWB 1.23].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Creating an ISO Image ===&lt;br /&gt;
&lt;br /&gt;
: Jalapeno can also create and save ISO images which will preserve MorphOS/AmigaOS file attributes and comments. Images can be used for backups or even be booted from USB devices.&lt;br /&gt;
&lt;br /&gt;
: An option to create an ISO image is found on the pulldown menu in the Burn Files section.&lt;br /&gt;
&lt;br /&gt;
: [[File:Tips_Create_ISO.png|200px]]&lt;br /&gt;
&lt;br /&gt;
: If the resulting image file will be bigger than 1GB, Jalapeno splits it into 1GB parts. Those parts can be joined into one big image file with the Join command in the shell, but remember the filesize limits of your target [https://library.morph.zone/Filesystems filesystem] when doing that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Copying a CD/DVD to an ISO Image ===&lt;br /&gt;
&lt;br /&gt;
: If you want to make a standard, easily mountable, ISO image out of an existing CD or DVD, a good way to achieve it is to use the ReadCD program provided with the Jalapeno program on the standard MorphOS installation. Jalapeno itself can also create image files of optical media by selecting &amp;quot;Save as...&amp;quot; from the &amp;quot;Copy Tracks&amp;quot; pull-down menu, but resulting images aren't mountable by the system, because Jalapeno uses options that include more data into the images, for error checking etc.&lt;br /&gt;
&lt;br /&gt;
: Do these steps from the shell to read a CD/DVD into a standard ISO image:&lt;br /&gt;
:# Find your CD drive device by typing: MOSSYS:Data/Jalapeno/readcd -scanbus&lt;br /&gt;
:# Create an ISO image by typing (replace &amp;quot;1,1,0&amp;quot; to what you saw in the previous step, and the image path to what you want): MOSSYS:Data/Jalapeno/readcd -dev 1,1,0 f=ram:image.iso&lt;br /&gt;
&lt;br /&gt;
=== Disabling the Default UTF-8 Mode with Scribble ===&lt;br /&gt;
&lt;br /&gt;
: Scribble uses UTF-8 encoding by default, but you might prefer to default to the traditional ASCII format instead. The UTF-8 mode can be disabled from the pulldown menu in Scribble, but the setting isn't saved if you save the program settings.&lt;br /&gt;
: [[File:Scribble_ascii1.png|128px]]&lt;br /&gt;
&lt;br /&gt;
: If you want to disable it by default, you have to open the &amp;quot;Save As...&amp;quot; requester, enable the &amp;quot;Make Default&amp;quot; option (also check that Encoding is set to ASCII), and save a file (can be any file anywhere).&lt;br /&gt;
: [[File:Scribble_ascii2.png|205px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 3rd Party Software ==&lt;br /&gt;
&lt;br /&gt;
=== Where to Get Software? ===&lt;br /&gt;
:* Check [http://library.morph.zone/Links#File_Repositories file repositories] for manual installing&lt;br /&gt;
:* [http://www.geit.de/eng_grunch.html Grunch] is a good packet manager for automatic installation and updating of selected software&lt;br /&gt;
:* [http://www.meta-morphos.org/WArMUp/chrysalis_en.pdf Chrysalis] is a preconfigured environment and software distribution package ([http://www.warmup-asso.org/download/pack/chrysalis.iso Download ISO image])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Custom Ambient Menus with AREXX ===&lt;br /&gt;
&lt;br /&gt;
: You can add own menu items to Ambient pulldown menus with AREXX. Read SYS:MorphOS/Ambient/docs/arexx.txt for more info about AREXX usage or download the [http://morphos-files.net/remote/CRABUM CRABUM] program, which helps you to create correct AREXX lines ([http://library.morph.zone/Getting_Started#Creating_Menus_with_CRABUM tutorial]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Help with Shell Commands ===&lt;br /&gt;
&lt;br /&gt;
: MorphOS Library contains descriptions of all [http://library.morph.zone/Shell_Commands shell commands] and the descriptions can be displayed on the shell with the [http://aminet.net/package/util/batch/Chelp Chelp] script. The script can be used to replace older [http://aminet.net/package/util/cli/Help Help] program (which would otherwise be nice still, but it only contains help for MorphOS 1.x commands).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Utilizing Your Keyboard's Multimedia Keys ===&lt;br /&gt;
&lt;br /&gt;
:* The [http://www.geit.de/eng_mmkeyboard.html MMKeyboard] software can be used to assign different kinds of functions to extra keys found on some keyboards.&lt;br /&gt;
:* The [http://aminet.net/package/mus/play/MultiMeedio MultiMeedio] script provides a unified control for all popular media players.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware Related ==&lt;br /&gt;
&lt;br /&gt;
=== Removing Startup Sound on Macs ===&lt;br /&gt;
&lt;br /&gt;
: Sadly there isn't any known way to disable that annoying startup sound from MorphOS itself or from Open Firmware, but there are few different ways to achieve it anyway.&lt;br /&gt;
&lt;br /&gt;
:* If you plan to use Mac as MorphOS only system, but you still have OSX installed, you can mute the audio from OSX before wiping it out by installing MorphOS. Startup sound doesn't come back if you won't boot into OSX anymore.&lt;br /&gt;
:* If you don't have OSX anymore, you could try to remove sound with some Linux distribution's live/installation CD. More info [http://www.meta-morphos.org/faq.php?id_cat=2&amp;amp;myfaq=yes&amp;amp;categories=Installation+et+d%E9marrage#74 here] and [https://morphosuser.wordpress.com/2014/12/28/removing-the-boot-sound/ here].&lt;br /&gt;
:* If you use OSX and MorphOS as a dualboot system you can install [http://www5e.biglobe.ne.jp/~arcana/StartupSound/index.en.html StartupSound.prefPane] for OSX.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Speeding Up the Startup Manager on Macs ===&lt;br /&gt;
&lt;br /&gt;
: Startup Manager (the boot menu you get by booting with option/alt key pressed) can be slow when it tries to find network boot devices. To speed it up go to the OF prompt and type &amp;quot;'''setenv skip-netboot? true'''&amp;quot;. Funnily enough, it only affects if you have network cable plugged in.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Booting MorphOS ISO from USB Stick ===&lt;br /&gt;
&lt;br /&gt;
: MorphOS Team has released an [http://www.morphos-team.net/guide/usb-boot official guide] for USB booting, but I've also noticed that at least some Macs (Mac mini and Powerbook for example) have certain ud alias for USB drive. You can use that as a shortcut and get the booting done with less work (no need to search the correct path, works even when USB stick is in a hub, less typing and less to remember).&lt;br /&gt;
&lt;br /&gt;
: If you have only one mass storage device connected, you can just boot into Open Firmware prompt (command-alt-o-f) and type:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tt&amp;gt;boot ud:,\boot.img bi umsd0:morphos.iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: (Remember to have both boot.img and morphos.iso on the stick)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Keyboard Reboot on ADB Laptops ===&lt;br /&gt;
&lt;br /&gt;
: The traditional Ctrl-Command-Command (Ctrl-Amiga-Amiga) keyboard combination doesn't work on laptops using the ADB interface for the keyboard, because ADB doesn't make difference between the left and right command keys. You can reboot them with an alternative Fn-Alt-Alt keyboard combination.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Blackouts or Graphical Flickering on Mac mini ===&lt;br /&gt;
&lt;br /&gt;
: Mac minis suffer from short blackouts with some monitors when the connection is made with a DVI cable. The screen gets usually blanked for few seconds, and depending of the monitor it may happen more or less frequently. Issue may also show up as flickering lines on the screen and it may get worse and worse until the monitor is unable to sync to the signal anymore.&lt;br /&gt;
&lt;br /&gt;
: One option to get around it is to use a VGA adapter/cable, because it doesn't seem to happen with it.&lt;br /&gt;
&lt;br /&gt;
: An another option is to try to lower the pixel clock value for the used screenmode from the Monitors settings in the MorphOS preferences. If your default mode has for example vertical frequency of 75 Hz, going to 60 Hz mode may help. Sometimes even a small change can help, and lowering just couple clicks from 60 Hz does the trick.&lt;br /&gt;
&lt;br /&gt;
: This seems to be a common problem with Mac minis and &amp;quot;non-coherent&amp;quot; displays as discussed for example [https://discussions.apple.com/thread/2723110 here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Disabling the Internal Touchpad on Laptops ===&lt;br /&gt;
==== From the Touchpad Settings (Preferred)====&lt;br /&gt;
: An internal touchpad can be disabled from the MorphOS system settings nowadays, and this is the preferred method. Open '''System Settings -&amp;gt; Touchpad''' and disable the '''Enable the Touchpad driver''' setting.&lt;br /&gt;
&lt;br /&gt;
: [[File:MorphOS_Preferences_disabling_touchpad.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==== From the USB Settings ====&lt;br /&gt;
: The touchpad can be disabled temporarily by removing its binding in the USB settings. This setting is reverted back next time the machine is booted or if USB class scanning is done otherwise.&lt;br /&gt;
&lt;br /&gt;
: To remove the binding, open the USB settings from the MorphOS Preferences application and go to the Devices list.&lt;br /&gt;
:* If you have &amp;quot;Apple Internal Trackpad&amp;quot; alone in the list, you can just select it and click the Unbind button.&lt;br /&gt;
:: [[File:Disabling touchpad ibook.png|200px]]&lt;br /&gt;
:* If your machine has a combined internal keyboard and trackpad device, double click it (&amp;quot;Apple Internal Keyboard / Trackpad&amp;quot;). Select Touchpad from the newly opened window and then click the Release Binding button.&lt;br /&gt;
:: [[File:Disabling touchpad powerbook.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==== Removing the Driver at Boot Time ====&lt;br /&gt;
: Touchpad can also be disabled permanently by removing touchpad.library from use. Removing it is a bit tricky, because it resides in &amp;quot;ROM&amp;quot; and not as a file in system directories, but it can be done with the mf (module filter) boot command argument.&lt;br /&gt;
&lt;br /&gt;
: The boot command arguments can be edited by editing the bootinfo.txt file on Macs. The bootinfo.txt file is found on the Boot: partition, which also contains the boot.img file. If you don't see the partition, you probably need to mount it first by using, for example, the [[Tools/Mounter | Mounter]] tool. '''Note that if you edit the bootinfo.txt file, you must bless the file with the [[Shell_Commands/HFSSetMacBoot | HFSSetMacBoot]] command or the system won't be bootable anymore!'''&lt;br /&gt;
&lt;br /&gt;
: To add the mf argument, open the bootinfo.txt file with a text editor, find the line between &amp;lt;BOOT-SCRIPT&amp;gt; and &amp;lt;/BOOT-SCRIPT&amp;gt; lines (it starts with &amp;quot;boot&amp;quot;), and add ''mf=touchpad.library'' at the end of the boot line. Save the file and '''remember to bless it with the ''HFSSetMacBoot Boot:bootinfo.txt'' command from the shell or your system won't boot again!'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MorphOS Boot Arguments on U-boot Systems ===&lt;br /&gt;
: To boot into MorphOS, hardware has to load a MorphOS boot image file that contains the kernel and core drivers. The boot image file also accepts arguments to control the boot procedure before the actual operating system is loaded from the system partition. The boot arguments usage on [[Open Firmware]] systems is well [[Open_Firmware#Boot_Arguments | documented]], but they must be given in a different way on [http://www.intuitionbase.com/static.php?section=uboot U-boot] systems (Sam460ex/cr, AmigaOne X5000).&lt;br /&gt;
&lt;br /&gt;
: On the U-boot systems the boot arguments have to be set in the '''morphosargs''' environment variable in the U-boot console.&lt;br /&gt;
&lt;br /&gt;
: To check if you already have the variable set:&lt;br /&gt;
: &amp;lt;tt&amp;gt;printenv morphosargs&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: To set an argument (in this example we'd disable an unsupported SCSI controller by removing the SCSI driver from the boot image by using the ''module filter (mf)'' boot argument):&lt;br /&gt;
: &amp;lt;tt&amp;gt;setenv morphosargs mf=symbios.device&amp;lt;/tt&amp;gt;&lt;br /&gt;
: &amp;lt;tt&amp;gt;saveenv&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: To edit an existing variable:&lt;br /&gt;
: &amp;lt;tt&amp;gt;editenv morphosargs&amp;lt;/tt&amp;gt;&lt;br /&gt;
: &amp;lt;tt&amp;gt;saveenv&amp;lt;/tt&amp;gt;&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=User:Polluks&amp;diff=4143</id>
		<title>User:Polluks</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=User:Polluks&amp;diff=4143"/>
				<updated>2019-12-28T03:34:42Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: Some uploads&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://www.google.com/search?q=polluks%2Baminet%40sdf.lonestar.org Some uploads]&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Shell_Commands/Ssh2FS&amp;diff=4142</id>
		<title>Shell Commands/Ssh2FS</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Shell_Commands/Ssh2FS&amp;diff=4142"/>
				<updated>2019-12-28T03:11:32Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: 3.12 update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Ssh2FS''' - Mounts a SFTP share&lt;br /&gt;
&lt;br /&gt;
REMOTE/A, VOLUME/A, AUTH/A, DCMAX/N, ACMAX/N, CTIME/N, VERBOSE/S, PORT/N, HOME/K, NTIME/N, ALIVE/N, MINBUF/N, RAHEAD/S, MAXBUFS/N, REMPASS/S, RECONN/S, DISCONN/N, NODEV/S&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
REMOTE  - [user@]host[:/dir]&lt;br /&gt;
VOLUME  - VolumeName:&lt;br /&gt;
AUTH    - pw | ia | pk | pkp&lt;br /&gt;
DCMAX   - Maximum # of dirs to cache at one time. Default: 10.&lt;br /&gt;
ACMAX   - Maximum # of attrs to cache at one time. Default: 64.&lt;br /&gt;
CTIME   - Cache timeout for dirs and attrs (seconds). Default: 300.&lt;br /&gt;
VERBOSE - Print extra information&lt;br /&gt;
PORT    - Use different port number. Default: 22.&lt;br /&gt;
HOME    - Change where to look for .ssh/ directory. Default: $HOME.&lt;br /&gt;
NTIME   - Network timeout in milli seconds. Default: 0 = no timeout.&lt;br /&gt;
ALIVE   - Keep alive rate in seconds. Default: 10.&lt;br /&gt;
MINBUF  - Minimum number of buffers (per open file). Default: ?.&lt;br /&gt;
BUFSIZE - Minimum size of io buffers. Default: 32768.&lt;br /&gt;
RAHEAD  - Enable speculative read-ahead.&lt;br /&gt;
MAXBUFS - Maximum number of buffers (per open file). Default: 4.&lt;br /&gt;
REMPASS - Remember password for reconnects&lt;br /&gt;
RECONN  - Reconnect on lost connection.&lt;br /&gt;
DISCONN - Disconnect?&lt;br /&gt;
NODEV   - No not create a device node automatically.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 Ssh2FS user@server UserHome: pw&lt;br /&gt;
&lt;br /&gt;
See also: RunFS&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=How_to_write_Mails_with_SimpleMail&amp;diff=4140</id>
		<title>How to write Mails with SimpleMail</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=How_to_write_Mails_with_SimpleMail&amp;diff=4140"/>
				<updated>2019-11-19T21:41:11Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Download:'''&lt;br /&gt;
---------------&lt;br /&gt;
The homepage is:&lt;br /&gt;
http://simplemail.sourceforge.net&lt;br /&gt;
&lt;br /&gt;
'''Installing'''&lt;br /&gt;
---------------&lt;br /&gt;
Just unarchive the previously downloaded archive and place it wherever you want.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Setup'''&lt;br /&gt;
---------------&lt;br /&gt;
[[File:SM Main.png|200px|thumb|left|Main window]]&lt;br /&gt;
Start the program.&lt;br /&gt;
Open the configuration via the rightmost button in the mainmenu.&lt;br /&gt;
Or open it via the contextmenu. Rightclick within the mainwindow and go to settings.&lt;br /&gt;
&lt;br /&gt;
[[File:SM Conf.png|200px|thumb|left|Configuration]]&lt;br /&gt;
You can setup multiple mailaccounts in the 2nd entry.&lt;br /&gt;
&lt;br /&gt;
[[File:SM Conf Account.png|200px|thumb|center|Account]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the screenshot you will notice white areas, there you have to enter your respective values.&lt;br /&gt;
Please note that servers subdomain is mostoften called &amp;quot;pop3&amp;quot; or &amp;quot;mail&amp;quot;.&lt;br /&gt;
However each mailprovider is free to use its own value.&lt;br /&gt;
You need to find out the value in the FAQ of your mailprovider.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Systemsettings'''&lt;br /&gt;
---------------&lt;br /&gt;
[[File:OpenURL.png|200px|thumb|left|OpenURL]]&lt;br /&gt;
With included OpenURL each application can support preparing and sending mails systemwide.&lt;br /&gt;
See the screenshot on how to setup SimpleMail and change the path to your local settings.&lt;br /&gt;
&lt;br /&gt;
'''First steps'''&lt;br /&gt;
---------------&lt;br /&gt;
Now that you have setup the Mailclient it seems to be a good idea to try out some of the functions.&lt;br /&gt;
&lt;br /&gt;
Setting up the addressbook to your needs.&lt;br /&gt;
Fill in your contacts or import them with the filemenu.&lt;br /&gt;
&lt;br /&gt;
You can send/receive a set of existing mails via button in the main window.&lt;br /&gt;
&lt;br /&gt;
For creating mails please stick to some simple rules that can be found here:&lt;br /&gt;
[http://learn.to/quote/ link How to quote]&lt;br /&gt;
[http://esl.about.com/od/businessenglishwriting/a/bizdocs_3.htm link Writing a mail]&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	<entry>
		<id>https://library.morph.zone/index.php?title=Shell_Commands/Debug&amp;diff=4054</id>
		<title>Shell Commands/Debug</title>
		<link rel="alternate" type="text/html" href="https://library.morph.zone/index.php?title=Shell_Commands/Debug&amp;diff=4054"/>
				<updated>2019-09-23T09:44:44Z</updated>
		
		<summary type="html">&lt;p&gt;Polluks: word wrap&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Debug''' - Sets debug options&lt;br /&gt;
&lt;br /&gt;
LOG/K,LOGFILE/K,LOGKPRINTF/K,EXT=EXTENDEDLOG/K,MT=MEMTRACK/K,PMT=PERMMEMTRACK/K,&lt;br /&gt;
IZP=INVZEROPAGE/K,INIT/K,CYBERGUARD/K,CGX=CYBERGRAPHICS/K,LOADSEG/K,UNLOADSEG/K,&lt;br /&gt;
PPCSTART/K,INITRESIDENT/K,INITCODE/K,FINDRESIDENT/K,CREATELIBRARY/K,SETFUNCTION/K,&lt;br /&gt;
NEWSETFUNCTION/K,CHIPRAM/K,ADDTASK/K,REMTASK/K,GETTASKATTR/K,SETTASKATTR/K,&lt;br /&gt;
EXCEPTHANDLER/K,ADDDOSNODE/K,PCI/K,RAMLIB/K,NOLOGSERVER/K,NOLOGWINDOW/K,QUIET/S&lt;br /&gt;
&lt;br /&gt;
The command shows the state of all debug options if ran without arguments.&lt;/div&gt;</summary>
		<author><name>Polluks</name></author>	</entry>

	</feed>