File:  [RetroPC.NET] / xmil / palm / sysmng.c
Revision 1.3: download - view: text, annotated - select for diffs
Mon Feb 28 03:22:06 2005 JST (20 years, 8 months ago) by tk800
Branches: MAIN
CVS tags: HEAD
add battery disp[palm](tk800)

#include	"compiler.h"
#include	"xmil.h"
#include	"dosio.h"
#include	"sysmng.h"
#include	"z80core.h"
#include	"pccore.h"
#include	"fddfile.h"
#include	"makescrn.h"
#include	"resource.h"

#include	"joymng.h"
#include	"palmkbd.h"

	UINT	sys_updates;


static	char	strtitle0[256];
static	char	strtitle1[256];
static	char	strclock[64];
static	char	strframe[64];

static struct {
	UINT32	tick;
	UINT32	clock;
	UINT32	draws;
	SINT32	fps;
	SINT32	khz;
} workclock;

void sysmng_workclockreset(void) {

	workclock.tick = GETTICK();
	workclock.clock = CPU_CLOCK;	// CPU_CLOCK;
	workclock.draws = drawtime;				// drawcount;
}

BOOL sysmng_workclockrenewal(void) {

	SINT32	tick;

	tick = GETTICK() - workclock.tick;
	if (tick < 2000) {
		return(FALSE);
	}
	workclock.tick += tick;
	workclock.fps = ((drawtime - workclock.draws) * 10000) / tick;
	workclock.draws = drawtime;
	workclock.khz = (CPU_CLOCK - workclock.clock) / tick;
	workclock.clock = CPU_CLOCK;
	return(TRUE);
}

static void changelabel(FormType* frm, UINT16 id, char* text) {

	RectangleType	bounds;
	UINT16			index;
	
	index = ARM_FrmGetObjectIndex(frm, id);
	ARM_FrmGetObjectBounds(frm, index, &bounds);
	ARM_FrmHideObject(frm, index);
	ARM_FrmCopyLabel(frm, id, text);
	ARM_FrmSetObjectBounds(frm, index, &bounds);
	ARM_FrmShowObject(frm, index);
}

static void adjustlabel(char* text, UINT length) {

	UINT16 textlen, titlelen;
	
	textlen = ARM_StrLen(text);
	titlelen = ARM_FntWidthToOffset(text, textlen, length, NULL, NULL);
	if (titlelen != textlen) {
		text[titlelen-1] = chrEllipsis;
		text[titlelen] = '\0';
	}
}

void sysmng_updatecaption(BYTE flag) {

	const char nodisk[] = "No Disk Image";
	FormType*	frm = ARM_FrmGetActiveForm();
	UINT16	voltage;
	UINT8	battery;
	
	if (flag & 1) {
		strtitle0[0] = '\0';
		milstr_ncat(strtitle0, "0:", sizeof(strtitle0));
		if (fddfile_diskready(0)) {
			milstr_ncat(strtitle0, file_getname((char *)fddfile_diskname(0)),
															sizeof(strtitle0));
		} else {
			milstr_ncat(strtitle0, nodisk, sizeof(strtitle0));
		}
		adjustlabel(strtitle0, 102);
		changelabel(frm, IDC_FDD0, strtitle0);

		strtitle1[0] = '\0';
		milstr_ncat(strtitle1, "1:", sizeof(strtitle1));
		if (fddfile_diskready(1)) {
			milstr_ncat(strtitle1, file_getname((char *)fddfile_diskname(1)),
															sizeof(strtitle1));
		} else {
			milstr_ncat(strtitle1, nodisk, sizeof(strtitle1));
		}
		adjustlabel(strtitle1, 102);
		changelabel(frm, IDC_FDD1, strtitle1);
	}
	if (flag & 2) {
		strframe[0] = '\0';
		if (xmiloscfg.DISPCLK & 2) {
			if (workclock.fps) {
				ARM_StrPrintF_2(strframe, "%u.%1uFPS",
								workclock.fps / 10, workclock.fps % 10);
			}
			else {
				milstr_ncpy(strframe, "0.0FPS", sizeof(strframe));
			}
		}
		else {
			//milstr_ncpy(strframe, "-.-FPS", sizeof(strframe));
			voltage = ARM_SysBatteryInfo(&battery);
			if (voltage > 0) {
				ARM_StrPrintF(strframe, "%3u", battery);
				milstr_ncat(strframe, "%", sizeof(strtitle1));
			}
		}
		if (ARM_StrLen(strframe) < 33) {
			changelabel(frm, IDC_DISPFRAME, strframe);
		}
		
		strclock[0] = '\0';
		if (xmiloscfg.DISPCLK & 1) {
			ARM_StrPrintF_2(strclock, "%2u.%03uMHz",
								workclock.khz / 1000, workclock.khz % 1000);
		}
		else {
			milstr_ncpy(strclock, "-.---MHz", sizeof(strclock));
		}
		if (workclock.khz < 100000) {
			changelabel(frm, IDC_DISPCLOCK, strclock);
		}
	}
}

void sysmng_cpureset(void) {

	sys_updates &= (SYS_UPDATECFG | SYS_UPDATEOSCFG);
	sysmng_workclockreset();
	joymng_initialize();
	palmkbd_initialize();
}

RetroPC.NET-CVS <cvs@retropc.net>