Beispiel #1
0
//////////
//
// Called to create a pseudo device context
//
//////
	SHdcX* iHwndX_createHdc(s32 tnWidth, s32 tnHeight, SBitmap* bmp)
	{
		union {
			uptr	_hdc;
			SHdcX*	hdc;
		};


		//////////
		// Make sure we have our HDC buffer allocated
		//////
			if (!gsHdcs)
				iBuilder_createAndInitialize(&gsHdcs, -1);


		//////////
		// Allocate a new one
		//////
			hdc = (SHdcX*)iBuilder_appendData(gsHdcs, (s8*)NULL, sizeof(SHdcX));
			if (hdc)
			{
				// Initialize
				hdc->isValid			= true;
				hdc->hdc				= _hdc;

				// Default settings
				hdc->isOpaque			= false;
				hdc->colorFore.color	= rgba(0,0,0,255);
				hdc->colorBack.color	= rgba(255,255,255,255);;

				// Allocate the default font
				hdc->font				= iFont_create(cgcFontName_default, 10, FW_NORMAL, 0, 0);

				// Allocate a bitmap
				if (!bmp)
				{
					// Create a bitmap
					hdc->bmp = iBmp_allocate();
					iBmp_createBySize(hdc->bmp, tnWidth, tnHeight, 24);

				} else {
					// Use the indicated bitmap
					hdc->bmp = bmp;
				}
			}


		//////////
		// Indicate success or failure
		//////
			return(hdc);
	}
Beispiel #2
0
	void iiDebo1_initialize(void)
	{
		//////////
		// Window size
		//////
			gnWidth		= 800;
			gnHeight	= 600;


		//////////
		// Create the base fonts
		//////
			iBuilder_createAndInitialize(&gFonts, -1);
			fontUbuntuMono8		= iFont_create(cgcUbuntuMono,	8,	FW_NORMAL, 0, 0);
			fontUbuntuMono10	= iFont_create(cgcUbuntuMono,	10,	FW_NORMAL, 0, 0);
			fontUbuntu14		= iFont_create(cgcUbuntu,		14,	FW_NORMAL, 0, 0);


		//////////
		// Create the base bitmaps
		//////
			iBmp_createBySize(bmpDebo1				= iBmp_allocate(),			gnWidth,	gnHeight,	24);
			iBmp_createBySize(bmpStage1				= iBmp_allocate(),			67,			114,		24);
			iBmp_createBySize(bmpStage2				= iBmp_allocate(),			94,			114,		24);
			iBmp_createBySize(bmpStage3				= iBmp_allocate(),			94,			114,		24);
			iBmp_createBySize(bmpStage4				= iBmp_allocate(),			244,		133,		24);
			iBmp_createBySize(bmpStage5				= iBmp_allocate(),			83,			114,		24);
			iBmp_createBySize(bmpMemory				= iBmp_allocate(),			616,		449,		24);
			iBmp_createBySize(bmpRegisters			= iBmp_allocate(),			179,		171,		24);
			iBmp_createBySize(bmpDisassembly		= iBmp_allocate(),			181,		427,		24);
			// Mouse neutral colors
			iBmp_createBySize(bmp1Kb				= iBmp_allocate(),			74,			22,			24);
			iBmp_createBySize(bmp2Kb				= iBmp_allocate(),			74,			22,			24);
			iBmp_createBySize(bmp8Bits				= iBmp_allocate(),			64,			22,			24);
			iBmp_createBySize(bmp16Bits				= iBmp_allocate(),			64,			22,			24);
			iBmp_createBySize(bmp32Bits				= iBmp_allocate(),			64,			22,			24);
			iBmp_createBySize(bmp64Bits				= iBmp_allocate(),			64,			22,			24);
			iBmp_createBySize(bmpF5Run				= iBmp_allocate(),			50,			19,			24);
			iBmp_createBySize(bmpF8Step				= iBmp_allocate(),			54,			19,			24);
			iBmp_createBySize(bmpF12Throttle		= iBmp_allocate(),			84,			19,			24);
			// Mouse over colors
			iBmp_createBySize(bmp1KbOver			= iBmp_allocate(),			74,			22,			24);
			iBmp_createBySize(bmp2KbOver			= iBmp_allocate(),			74,			22,			24);
			iBmp_createBySize(bmp8BitsOver			= iBmp_allocate(),			64,			22,			24);
			iBmp_createBySize(bmp16BitsOver			= iBmp_allocate(),			64,			22,			24);
			iBmp_createBySize(bmp32BitsOver			= iBmp_allocate(),			64,			22,			24);
			iBmp_createBySize(bmp64BitsOver			= iBmp_allocate(),			64,			22,			24);
			iBmp_createBySize(bmpF5RunOver			= iBmp_allocate(),			50,			19,			24);
			iBmp_createBySize(bmpF8StepOver			= iBmp_allocate(),			54,			19,			24);
			iBmp_createBySize(bmpF12ThrottleOver	= iBmp_allocate(),			84,			19,			24);
			// Externally rendered
			bmpLibSF_386_x40 = iBmp_rawLoad(cgc_libSF386x40Bmp);


		//////////
		// Populate the static images
		//////
			iiDebo1_populateStaticImages();
	}
Beispiel #3
0
	void iiSubobj_resetToDefaultCheckbox(SObject* checkbox, bool tlResetProperties, bool tlResetMethods, SObjPropMap* propList, u32 tnPropCount, SObjEventMap* eventList, u32 tnEventCount)
	{
		SObject*	objChild;
		SBitmap*	bmp;
		RECT		lrc;


		logfunc(__FUNCTION__);
		if (checkbox)
		{
			//////////
			// Reset the common settings
			//////
				iiObj_resetToDefaultCommon(checkbox, true, true, propList, tnPropCount, eventList, tnEventCount);


			//////////
			// Set default size, position, font
			//////
				SetRect(&checkbox->rc, 0, 0, 60, 17);
				SetRect(&checkbox->rco, 0, 0, 60, 17);
				SetRect(&checkbox->rcp, 0, 0, 60, 17);

				// Set the size
				iObj_setSize(checkbox, 0, 0, 60, 17);

				// Font
				checkbox->p.font = iFont_duplicate(gsFontDefault9);


			//////////
			// Set the default values
			//////
				propSetValue_s32(checkbox, 0);

				propSetBackColor(checkbox, whiteColor);
				propSetForeColor(checkbox, blackColor);
				propSetAlignment(checkbox, _ALIGNMENT_LEFT);
				propSetStyle(checkbox, _STYLE_3D);
				propSetCaption(checkbox, cgcName_checkbox);
				propSetBackStyle(checkbox, _BACK_STYLE_TRANSPARENT);
				propSetBorderStyle(checkbox, _BORDER_STYLE_NONE);
				propSetBorderColor(checkbox, blackColor);
				propSetDisabledBackColor(checkbox, disabledBackColor);
				propSetDisabledForeColor(checkbox, disabledForeColor);


			//////////
			// Default child settings
			//////
				SetRect(&lrc, 0, 0, bmpArrowUl->bi.biWidth, bmpArrowUl->bi.biHeight);
				objChild = checkbox->firstChild;
				while (objChild)
				{
					// See which object this is
					if (objChild->objType == _OBJ_TYPE_IMAGE && propIsName_byText(objChild, cgcName_checkboxImage))
					{
						// Adjust the size
						iObj_setSize(objChild, objChild->rc.left, objChild->rc.top, 17, objChild->rc.bottom);

						// Checkbox image
						bmp = iBmp_allocate();
						iBmp_createBySize(bmp, 17, 17, 24);

						// Based on type, populate the image
						if (iObjProp_get_s32_direct(checkbox, _INDEX_VALUE) == 0)
						{
							// Off
							iBmp_scale(bmp, bmpCheckboxOff);	// Set the new

						} else {
							// On
							iBmp_scale(bmp, bmpCheckboxOn);		// Set the new
						}

						// Replicate that image for the over and down images
						iObjProp_set_bitmap_direct(objChild, _INDEX_PICTUREBMP,			bmp);
						iObjProp_set_bitmap_direct(objChild, _INDEX_PICTUREBMP_DOWN,	bmp);
						iObjProp_set_bitmap_direct(objChild, _INDEX_PICTUREBMP_OVER,	bmp);

						// Delete the temporary image
						iBmp_delete(&bmp, true, true);

						// Add highlighting for the over and down
						bmp = iObjProp_get_bitmap(objChild, _INDEX_PICTUREBMP_OVER);			iBmp_colorize(bmp, &lrc, colorMouseOver, false, 0.5f);
						bmp = iObjProp_get_bitmap(objChild, _INDEX_PICTUREBMP_DOWN);			iBmp_colorize(bmp, &lrc, colorMouseDown, false, 0.5f);

						// Mark it for re-rendering
						objChild->isDirtyRender	= true;
						propSetVisible(objChild, _LOGICAL_TRUE);

					} else if (objChild->objType == _OBJ_TYPE_LABEL && propIsName_byText(objChild, cgcName_checkboxLabel)) {
						// Adjust the size
						iObj_setSize(objChild, 17, 0, 60, objChild->rc.bottom);

						// Checkbox label
						propSetCaption(objChild, cgcName_checkbox);
						propSetBackStyle(objChild, _BACK_STYLE_TRANSPARENT);
						iFont_delete(&objChild->p.font, true);
						objChild->p.font = iFont_duplicate(checkbox->p.font);

						// Mark it for re-rendering
						objChild->isDirtyRender	= true;
						propSetVisible(objChild, _LOGICAL_TRUE);
					}

					// Move to next object
					objChild = objChild->ll.nextObj;
				}
		}
	}
Beispiel #4
0
//////////
//
// Called to render a bitmap which is a visualization of the node
//
//////
	SBitmap* iNode_renderBitmap(SNode* node, s32 tnMaxTokenLength, s32 tnMaxOverallLength, f64 tfRodLength, s32 tnMarginWidth, s32 tnBorderWidth, bool tlIncludeExtraInfo, bool tlGoDeeper, SNodeFlags* nodeFlags, bool tlDeeperNodesExtendInAllDirections)
	{
		s32			lnIter_uid, lnWidth, lnHeight;
		POINTS		p;
		RECT		lrc;
		SBitmap*	bmp;
		SNodeProps	props[1];


		// Make sure our environment is sane
		bmp = NULL;
		if (node)
		{

			//////////
			// (Re-)Render everything
			//////
				// Grab a uid for render
				lnIter_uid = iGetNextUid();

				// Setup the render prop
				props[0].backColor			= whiteColor;
				props[0].foreColor			= blackColor;
				props[0].marginWidth		= tnMarginWidth;
				props[0].fillColor			= silverColor;
				props[0].borderWidth		= tnBorderWidth;
				props[0].borderColor		= darkGrayColor;
				props[0].rodColor			= charcoalColor;
				props[0].colorize			= true;
				props[0].colorizeColor		= pastelBlueColor;
#ifdef iFont_create
				props[0].font				= iFont_create(cgcFontName_defaultFixed);
#endif

				// Render out in all directions from this point
				iiNode_renderBitmap(node, node, NULL, tnMaxTokenLength, tnMaxOverallLength, props, 1, lnIter_uid, tlIncludeExtraInfo, tlGoDeeper, nodeFlags, tlDeeperNodesExtendInAllDirections);


			//////////
			// Determine extents
			//////
				// Grab a uid for get extents
				lnIter_uid = iGetNextUid();

				// Get our starting point
				SetRect(&lrc, 0, 0, 0, 0);
				p.x = 0;
				p.y = 0;

				// Get our extents
				iiNode_get_bitmapExtents(node, node, NULL, _NODE_SE, NULL, &lrc, p, p, tfRodLength, lnIter_uid, props, tlGoDeeper, nodeFlags, tlDeeperNodesExtendInAllDirections);


			//////////
			// Render
			//////
				bmp = iBmp_allocate();
				if (bmp)
				{
					// get our sizes
					lnWidth		= lrc.right - lrc.left;
					lnHeight	= lrc.bottom - lrc.top;

					// Create the bitmap
					iBmp_createBySize(bmp, lnWidth, lnHeight, 24);

					// Grab a uid for get extents
					lnIter_uid = iGetNextUid();

					// Get our starting point
					p.x			= (s16)-lrc.left;
					p.y			= (s16)-lrc.top;
					SetRect(&lrc, 0, 0, lnWidth, lnHeight);

					// Actually render
					iiNode_get_bitmapExtents(node, node, NULL, _NODE_SE, bmp, &lrc, p, p, tfRodLength, lnIter_uid, props, tlGoDeeper, nodeFlags, tlDeeperNodesExtendInAllDirections);
				}

		}

		// Indicate our rendered bitmap
		return(bmp);
	}
Beispiel #5
0
//////////
//
// Startup initialization, called from WinMain() only.
//
//////
	void iVjr_init(HACCEL* hAccelTable)
	{
		SThisCode*		thisCode = NULL;
		RECT			lrc;
#if !defined(_NONVJR_COMPILE)
		u8				logBuffer[256];
		SBitmap*		bmp;
#if defined(_GRACE_COMPILE)
		SGraceParams	params;
#endif
#endif


		// Get startup time
		systemStartedTickCount	= GetTickCount();
		systemStartedMs			= iTime_getLocalMs();

		// Fixup values that can't be properly encoded at compile-time
		iObjProp_init_fixup();

		// Initialize basic data engine
		iDbf_startup(true);

		// Create a 1x1 no image bitmap placeholder
		bmpNoImage = iBmp_allocate();
		iBmp_createBySize(bmpNoImage, 1, 1, 24);

		// Initialize primitive variables
		iVariable_createDefaultValues(NULL);
		iVariable_createPropsMaster(NULL);
		iVjr_init_createConstants();

		// Initialize our critical sections
		InitializeCriticalSection(&cs_uniqueIdAccess);
		InitializeCriticalSection(&cs_logData);

		// These arrows are used as a standard throughout the system for the size of an icon.
		// They must be loaded first.
		bmpArrowUl		= iBmp_rawLoad(cgc_arrowUlBmp);
		bmpArrowUr		= iBmp_rawLoad(cgc_arrowUrBmp);
		bmpArrowLl		= iBmp_rawLoad(cgc_arrowLlBmp);
		bmpArrowLr		= iBmp_rawLoad(cgc_arrowLrBmp);

		// Initialize our builders
		iBuilder_createAndInitialize(&gWindows,	-1);
		iBuilder_createAndInitialize(&gFonts,	-1);

		// Default font
		gsFontDefault				= iFont_create(cgcFontName_default,			10,	FW_NORMAL,	0, 0);
		gsFontDefault9				= iFont_create(cgcFontName_default,			9,	FW_NORMAL,	0, 0);
		gsFontDefaultBold			= iFont_create(cgcFontName_default,			10,	FW_BOLD,	0, 0);
		gsFontDefaultItalic8		= iFont_create(cgcFontName_default,			8,	FW_NORMAL,	1, 0);
		gsFontDefaultFixedPoint		= iFont_create(cgcFontName_defaultFixed,	10,	FW_NORMAL,	0, 0);
		gsWindowTitleBarFont		= iFont_create(cgcFontName_windowTitleBar,	12,	FW_NORMAL,	0, 0);
		gsWindowTitleBarFontSubform	= iFont_create(cgcFontName_windowTitleBar,	10,	FW_NORMAL,	0, 0);
		gsFontDefaultTooltip		= iFont_create(cgcFontName_defaultTooltip,	9,	FW_BOLD,	0, 0);
		gsFontCask					= iFont_create(cgcFontName_cask,			20, FW_BOLD,	0, 0);

		// Initialize the sound system
		isound_initialize();
		memset(&gseRootSounds, 0, sizeof(gseRootSounds));	// Initialize our root sounds array

//////////
// Jul.29.2014
// Removed due to limitations in the Shobjidl.h in MinGW.  Can be manually re-added with copy-and-paste... enjoy doing that! :-)
//		// Taskbar interface
//		HRESULT		hRes;
//		hRes = OleInitialize(NULL);
//		CoCreateInstance(CLSID_TaskbarList, 0, CLSCTX_INPROC_SERVER, IID_ITaskbarList, (void**)&giTaskbar);
//////////


		//////////
		// Allocate a sourceLight area
		//////
			bmpSourceLight = iBmp_allocate();
			iBmp_createBySize(bmpSourceLight, 800, 1024, 24);
			iSourceLight_reset();


		//////////
		// Load our icons and images
		//////
			bmpVjrIcon						= iBmp_rawLoad(cgc_appIconBmp);
			bmpJDebiIcon					= iBmp_rawLoad(cgc_jdebiAppIconBmp);
			bmpSourceCodeIcon				= iBmp_rawLoad(cgc_sourcecodeIconBmp);
			bmpLocalsIcon					= iBmp_rawLoad(cgc_localsIconBmp);
			bmpWatchIcon					= iBmp_rawLoad(cgc_watchIconBmp);
			bmpCommandIcon					= iBmp_rawLoad(cgc_commandIconBmp);
			bmpDebugIcon					= iBmp_rawLoad(cgc_debugIconBmp);
			bmpOutputIcon					= iBmp_rawLoad(cgc_outputIconBmp);
			bmpSourceLightIcon				= iBmp_rawLoad(cgc_sourcelightIconBmp);

			// Carousels
			bmpCarouselCarouselIcon			= iBmp_rawLoad(cgc_carouselCarouselBmp);
			bmpCarouselTabsIcon				= iBmp_rawLoad(cgc_carouselTabsBmp);
			bmpCarouselPad					= iBmp_rawLoad(cgc_carouselPadBmp);
			bmpCarouselIcon					= iBmp_rawLoad(cgc_carouselIconBmp);
			bmpCarouselRiderTabClose		= iBmp_rawLoad(cgc_carouselRiderTabCloseBmp);

			bmpClose						= iBmp_rawLoad(cgc_closeBmp);
			bmpMaximize						= iBmp_rawLoad(cgc_maximizeBmp);
			bmpMinimize						= iBmp_rawLoad(cgc_minimizeBmp);
			bmpMove							= iBmp_rawLoad(cgc_moveBmp);

			bmpCheckboxOn					= iBmp_rawLoad(cgc_checkboxOnBmp);
			bmpCheckboxOff					= iBmp_rawLoad(cgc_checkboxOffBmp);

			bmpButton						= iBmp_rawLoad(cgc_buttonBmp);
			bmpTextbox						= iBmp_rawLoad(cgc_textboxBmp);

			bmpStoplightRed					= iBmp_rawLoad(cgc_stoplightRedBmp);
			bmpStoplightAmber				= iBmp_rawLoad(cgc_stoplightAmberBmp);
			bmpStoplightGreen				= iBmp_rawLoad(cgc_stoplightGreenBmp);
			bmpStoplightBlue				= iBmp_rawLoad(cgc_stoplightBlueBmp);

			bmpBreakpointAlways				= iBmp_rawLoad(cgc_breakpointAlways);
			bmpBreakpointAlwaysCountdown	= iBmp_rawLoad(cgc_breakpointAlwaysCountdown);
			bmpConditionalTrue				= iBmp_rawLoad(cgc_breakpointConditionalTrue);
			bmpConditionalFalse				= iBmp_rawLoad(cgc_breakpointConditionalFalse);
			bmpConditionalTrueCountdown		= iBmp_rawLoad(cgc_breakpointConditionalTrueCountdown);
			bmpConditionalFalseCountdown	= iBmp_rawLoad(cgc_breakpointConditionalFalseCountdown);

			bmpDapple1						= iBmp_rawLoad(cgc_dappleBmp);
			bmpDapple1Tmp					= iBmp_rawLoad(cgc_dappleBmp);
			bmpDapple2						= iBmp_rawLoad(cgc_dapple2Bmp);
			bmpDapple2Tmp					= iBmp_rawLoad(cgc_dapple2Bmp);


		//////////
		// Casks
		//////
			iVjr_init_loadCaskIcons();


		//////////
		// Bitmap array
		//////
			iVjr_init_loadBitmapArray();


		//////////
		// The radio image has a 44x44 dot in the upper-left.
		//////
			bmpRadio	= iBmp_rawLoad(cgc_radioBmp);											// Load the raw bmpRadio
			bmpRadioDot = iBmp_createAndExtractRect(bmpRadio, 0, 0, 44, 44);					// Extract the 44x44 rectangle
			SetRect(&lrc, 0, 0, 44, 44);
			iBmp_fillRect(bmpRadio, &lrc, whiteColor, whiteColor, whiteColor, whiteColor, false, NULL, false);		// And cover it up with white


		//////////
		// Splash screen
		//////
#if !defined(_NONVJR_COMPILE)
			// Load the splash screen
			if (glShowSplashScreen)
			{
				bmpVjrSplash = iBmp_rawLoad(cgc_splashBmp);
				bmp = iiVjr_buildSplashScreen(bmpVjrSplash);
				CreateThread(0, 0, &iSplash_show, bmp, 0, 0);
			}

			// Play the startup music if any
			sprintf((s8*)logBuffer, "VJr launched %u milliseconds after system boot\0", systemStartedTickCount);
			iVjr_appendSystemLog(thisCode, logBuffer);
			if (glShowSplashScreen)
				CreateThread(0, 0, &iPlay_ariaSplash, (LPVOID)cgcSoundStartupWav, 0, 0);
#endif

		// Focus window accumulator
#if !defined(_NONVJR_COMPILE)
		iVjr_appendSystemLog(thisCode, (u8*)"Create focus highlight buffer");
#endif
		iBuilder_createAndInitialize(&gFocusHighlights, -1);

		// Create the default reference datetimes
#if !defined(_NONVJR_COMPILE)
		iVjr_appendSystemLog(thisCode, (u8*)"Create default datetime variables");
#endif
		iVjr_init_createDefaultDatetimes();

		// Create our message window
#if !defined(_NONVJR_COMPILE)
		iVjr_appendSystemLog(thisCode, (u8*)"Create message window");
#endif
		iVjr_init_createMessageWindow();

		// Create our global variables
#if !defined(_NONVJR_COMPILE)
		iVjr_appendSystemLog(thisCode, (u8*)"Create global and system variables");
#endif
		iVjr_init_createGlobalSystemVariables();

		// Create our default objects
#if !defined(_NONVJR_COMPILE)
		iVjr_appendSystemLog(thisCode, (u8*)"Create default objects");
#endif
		iVjr_init_createDefaultObjects();

		// Create our main screen window
#if !defined(_NONVJR_COMPILE)
		iVjr_appendSystemLog(thisCode, (u8*)"TEMPORARY:  Manually create _jdebi");
		iVjr_init_jdebi_create();

		// Initially render each one
		iVjr_appendSystemLog(thisCode, (u8*)"Render _jdebi");
		iObj_render(NULL, _jdebi, true);

		// Attach them to physical windows
		iVjr_appendSystemLog(thisCode, (u8*)"Allocate OS Window for _jdebi");
		gWinJDebi = iWindow_allocate();
		iObj_createWindowForForm(NULL, _jdebi, gWinJDebi, IDI_JDEBI);

		// Initially populate _screen
		// Load in the history if it exists
		if (!iSEM_loadFromDisk(thisCode, NULL, screenData, cgcScreenDataFilename, false, true))
		{
			// Indicate success
			sprintf((s8*)logBuffer, "Loaded: %s\0", cgcScreenDataFilename);
			iSEM_appendLine(thisCode, _output_editbox->p.sem, logBuffer, (s32)strlen(logBuffer), false);
			iVjr_appendSystemLog(thisCode, (u8*)"Populate _screen with default data");
			iSEM_appendLine(thisCode, screenData, (u8*)cgcScreenTitle, -1, false);
			iSEM_appendLine(thisCode, screenData, NULL, 0, false);
			iSEM_appendLine(thisCode, screenData, (u8*)"Please report any bugs:  http://www.visual-freepro.org/vjr", -1, false);
			iSEM_appendLine(thisCode, screenData, (u8*)"Thank you, and may the Lord Jesus Christ bless you richly. :-)", -1, false);
			iSEM_appendLine(thisCode, screenData, NULL, 0, false);
			iSEM_appendLine(thisCode, screenData, (u8*)"              _____              In God's sight we've come together.", -1, false);
			iSEM_appendLine(thisCode, screenData, (u8*)"             |     |             We've come together to help each other.", -1, false);
			iSEM_appendLine(thisCode, screenData, (u8*)"             |     |             Let's grow this project up ... together!", -1, false);
			iSEM_appendLine(thisCode, screenData, (u8*)"     ________|     |________     In service and love to The Lord, forever!", -1, false);
			iSEM_appendLine(thisCode, screenData, (u8*)"    |                       |", -1, false);
			iSEM_appendLine(thisCode, screenData, (u8*)"    |________       ________|    Sponsored by:", -1, false);
			iSEM_appendLine(thisCode, screenData, (u8*)"             |     |                 LibSF -- Liberty Software Foundation", -1, false);
			iSEM_appendLine(thisCode, screenData, (u8*)"             |     |", -1, false);
			iSEM_appendLine(thisCode, screenData, (u8*)"             |     |    Contributors:", -1, false);
			iSEM_appendLine(thisCode, screenData, (u8*)"             |     |        Hernan Cano, Stefano D'Amico", -1, false);
			iSEM_appendLine(thisCode, screenData, (u8*)"             |     |", -1, false);
			iSEM_appendLine(thisCode, screenData, (u8*)"             |     |    Lead Project Contact:  [email protected]", -1, false);
			iSEM_appendLine(thisCode, screenData, (u8*)"             |     |", -1, false);
			iSEM_appendLine(thisCode, screenData, (u8*)"             |     |    We need more coders. Please consider helping out.", -1, false);
			iSEM_appendLine(thisCode, screenData, (u8*)"             |_____|    Your contribution would make a difference. :-)", -1, false);
			iSEM_appendLine(thisCode, screenData, NULL, 0, false);
		}
		// Navigate to the end of the content
		iSEM_navigateToEndLine(thisCode, screenData, _screen);

		// Initially populate _jdebi
		// Load in the history if it exists
		if (!iSEM_loadFromDisk(thisCode, NULL, _command_editbox->p.sem, cgcCommandHistoryFilename, true, true))
		{
			// Indicate success
			sprintf((s8*)logBuffer, "Loaded: %s\0", cgcCommandHistoryFilename);
			iSEM_appendLine(thisCode, _output_editbox->p.sem, logBuffer, (s32)strlen(logBuffer), false);
			iSEM_appendLine(thisCode, _command_editbox->p.sem, (u8*)"*** Welcome to Visual FreePro, Junior! :-)", -1, false);
			iSEM_appendLine(thisCode, _command_editbox->p.sem, (u8*)"*** For now, this can be thought of as a command window ... with a twist.", -1, false);
			iSEM_appendLine(thisCode, _command_editbox->p.sem, (u8*)"*** It works like an editor window.  You can insert new lines, edit old ones, etc.", -1, false);
			iSEM_appendLine(thisCode, _command_editbox->p.sem, (u8*)"*** To execute a command, press F6. If you're on the last line use F6 or Enter.", -1, false);
			iSEM_appendLine(thisCode, _command_editbox->p.sem, (u8*)"*** See http://www.visual-freepro.org/wiki/index.php/VXB for supported commands.", -1, false);
			iSEM_appendLine(thisCode, _command_editbox->p.sem, (u8*)"*** Remember always:  Love makes you smile. It keeps an inner peace like no other. :-)", -1, false);
		}

		// Navigate to the last line
		iSEM_navigateToEndLine(thisCode, _command_editbox->p.sem, _command_editbox);

		// Make sure there's a blank line at the end
		if (_command_editbox->p.sem->line_cursor->sourceCode_populatedLength != 0)
		{
			iSEM_appendLine(thisCode, _command_editbox->p.sem, NULL, 0, false);
			iSEM_navigateToEndLine(thisCode, _command_editbox->p.sem, _command_editbox);
		}

		// Load some source code
		if (iSEM_loadFromDisk(thisCode, _sourceCode_rider, _sourceCode_editbox->p.sem, cgcStartupPrgFilename, true, true))
		{
			// Indicate success
			sprintf((s8*)logBuffer, "Loaded: %s\0", cgcStartupPrgFilename);
			iSEM_appendLine(thisCode, _output_editbox->p.sem, logBuffer, (s32)strlen(logBuffer), false);
		}

		// Redraw
		iVjr_appendSystemLog(thisCode, (u8*)"Final render _jdebi");
		iWindow_render(NULL, gWinJDebi, true);

		// Remove the splash screen 1/2 second later
		CreateThread(0, 0, &iSplash_delete, (LPVOID)500, 0, 0);

#if defined(_GRACE_COMPILE)
		// Create a thread to display the content in 3D
		memset(&params, 0, sizeof(params));
		params._func_mouse			= (uptr)&iGrace_mouse;
		params._func_motion			= (uptr)&iGrace_motion;
		params._func_passiveMotion	= (uptr)&iGrace_passiveMotion;
		params._func_key			= (uptr)&iGrace_key;
		params._func_special		= (uptr)&iGrace_special;
		params._func_reshape		= (uptr)&iGrace_reshape;
		params._func_display		= (uptr)&iGrace_display;
		params._func_idle			= (uptr)&iGrace_idle;
		CreateThread(0, 0, &iGrace, (LPVOID)&params, 0, 0);
#endif
#endif
	}