diff --git a/src/os_qnx.c b/src/os_qnx.c
new file mode 100644
index 0000000..704061a
--- /dev/null
+++ b/src/os_qnx.c
@@ -0,0 +1,162 @@
+/* vi:set ts=8 sts=4 sw=4:
+ *
+ * VIM - Vi IMproved	by Bram Moolenaar
+ *
+ * QNX port by Julian Kinraid
+ *
+ * Do ":help uganda"  in Vim to read copying and usage conditions.
+ * Do ":help credits" in Vim to see a list of people who contributed.
+ */
+
+/*
+ * os_qnx.c
+ */
+
+#include "vim.h"
+
+
+#if defined(FEAT_GUI_PHOTON)
+int is_photon_available;
+#endif
+
+void qnx_init()
+{
+#if defined(FEAT_GUI_PHOTON)
+    PhChannelParms_t parms;
+
+    memset( &parms, 0, sizeof( parms ) );
+    parms.flags = Ph_DYNAMIC_BUFFER;
+
+    is_photon_available = (PhAttach( NULL, &parms ) != NULL) ? TRUE : FALSE;
+#endif
+}
+
+#if (defined(FEAT_GUI_PHOTON) && defined(FEAT_CLIPBOARD)) || defined(PROTO)
+
+#define CLIP_TYPE_VIM "VIMTYPE"
+#define CLIP_TYPE_TEXT "TEXT"
+
+/* Turn on the clipboard for a console vim when photon is running */
+void qnx_clip_init()
+{
+    if( is_photon_available == TRUE && !gui.in_use)
+	clip_init( TRUE );
+}
+
+/*****************************************************************************/
+/* Clipboard */
+
+/* No support for owning the clipboard */
+int
+clip_mch_own_selection( VimClipboard *cbd )
+{
+    return FALSE;
+}
+
+void
+clip_mch_lose_selection( VimClipboard *cbd )
+{
+}
+
+void
+clip_mch_request_selection( VimClipboard *cbd )
+{
+    int		    type = MLINE, clip_length = 0, is_type_set = FALSE;
+    void	    *cbdata;
+    PhClipHeader    *clip_header;
+    char_u	    *clip_text = NULL;
+
+    cbdata = PhClipboardPasteStart( PhInputGroup( NULL ));
+    if( cbdata != NULL )
+    {
+	/* Look for the vim specific clip first */
+	clip_header = PhClipboardPasteType( cbdata, CLIP_TYPE_VIM );
+	if( clip_header != NULL && clip_header->data != NULL )
+	{
+	    switch( *(char *) clip_header->data )
+	    {
+		default: /* fallthrough to line type */
+		case 'L': type = MLINE; break;
+		case 'C': type = MCHAR; break;
+#ifdef FEAT_VISUAL
+		case 'B': type = MBLOCK; break;
+#endif
+	    }
+	    is_type_set = TRUE;
+	}
+
+	/* Try for just normal text */
+	clip_header = PhClipboardPasteType( cbdata, CLIP_TYPE_TEXT );
+	if( clip_header != NULL )
+	{
+	    clip_text = clip_header->data;
+	    clip_length  = clip_header->length - 1;
+
+	    if( clip_text != NULL && is_type_set == FALSE )
+		type = (strchr( clip_text, '\r' ) != NULL) ? MLINE : MCHAR;
+	}
+
+	if( (clip_text != NULL) && (clip_length > 0) )
+	{
+	    clip_yank_selection( type, clip_text, clip_length, cbd );
+	}
+
+	PhClipboardPasteFinish( cbdata );
+    }
+}
+
+void
+clip_mch_set_selection( VimClipboard *cbd )
+{
+    int type;
+    long_u  len;
+    char_u *text_clip, vim_clip[2], *str = NULL;
+    PhClipHeader clip_header[2];
+
+    /* Prevent recursion from clip_get_selection() */
+    if( cbd->owned == TRUE )
+	return;
+
+    cbd->owned = TRUE;
+    clip_get_selection( cbd );
+    cbd->owned = FALSE;
+
+    type = clip_convert_selection( &str, &len, cbd );
+    if( type >= 0 )
+    {
+	text_clip = lalloc( len + 1, TRUE ); /* Normal text */
+
+	if( text_clip && vim_clip )
+	{
+	    memset( clip_header, 0, sizeof( clip_header ) );
+
+	    STRNCPY( clip_header[0].type, CLIP_TYPE_VIM, 8 );
+	    clip_header[0].length = sizeof( vim_clip );
+	    clip_header[0].data   = vim_clip;
+
+	    STRNCPY( clip_header[1].type, CLIP_TYPE_TEXT, 8 );
+	    clip_header[1].length = len + 1;
+	    clip_header[1].data   = text_clip;
+
+	    switch( type )
+	    {
+		default: /* fallthrough to MLINE */
+		case MLINE:	*vim_clip = 'L'; break;
+		case MCHAR:	*vim_clip = 'C'; break;
+#ifdef FEAT_VISUAL
+		case MBLOCK:	*vim_clip = 'B'; break;
+#endif
+	    }
+
+	    STRNCPY( text_clip, str, len );
+	    text_clip[ len ] = NUL;
+
+	    vim_clip[ 1 ] = NUL;
+
+	    PhClipboardCopy( PhInputGroup( NULL ), 2, clip_header);
+	}
+	vim_free( text_clip );
+    }
+    vim_free( str );
+}
+#endif
