static int flagsave_com(STFLAGH sfh, const SFENTRY *tbl) { UINT device; COMMNG cm; int ret; COMFLAG flag; device = (UINT)(INTPTR)tbl->arg1; switch(device) { case 0: cm = cm_mpu98; break; case 1: cm = cm_rs232c; break; default: cm = NULL; break; } ret = STATFLAG_SUCCESS; if (cm) { flag = (COMFLAG)cm->msg(cm, COMMSG_GETFLAG, 0); if (flag) { ret |= statflag_write(sfh, flag, flag->size); _MFREE(flag); } } return(ret); }
static int flagload_com(STFLAGH sfh, const SFENTRY *tbl) { UINT device; COMMNG cm; int ret; _COMFLAG fhdr; COMFLAG flag; ret = statflag_read(sfh, &fhdr, sizeof(fhdr)); if (ret != STATFLAG_SUCCESS) { goto flcom_err1; } if (fhdr.size < sizeof(fhdr)) { goto flcom_err1; } flag = (COMFLAG)_MALLOC(fhdr.size, "com stat flag"); if (flag == NULL) { goto flcom_err1; } CopyMemory(flag, &fhdr, sizeof(fhdr)); ret |= statflag_read(sfh, flag + 1, fhdr.size - sizeof(fhdr)); if (ret != STATFLAG_SUCCESS) { goto flcom_err2; } device = (UINT)(INTPTR)tbl->arg1; switch(device) { case 0: commng_destroy(cm_mpu98); cm = commng_create(COMCREATE_MPU98II); cm_mpu98 = cm; break; case 1: commng_destroy(cm_rs232c); cm = commng_create(COMCREATE_SERIAL); cm_rs232c = cm; break; default: cm = NULL; break; } if (cm) { cm->msg(cm, COMMSG_SETFLAG, (INTPTR)flag); } flcom_err2: _MFREE(flag); flcom_err1: return(ret); }
COMMNG commng_create(UINT device) { COMMNG ret; COMCFG *cfg; ret = NULL; switch(device) { case COMCREATE_SERIAL: cfg = &np2oscfg.com1; break; case COMCREATE_PC9861K1: cfg = &np2oscfg.com2; break; case COMCREATE_PC9861K2: cfg = &np2oscfg.com3; break; case COMCREATE_PRINTER: cfg = NULL; if (np2oscfg.jastsnd) { ret = cmjasts_create(); } break; case COMCREATE_MPU98II: cfg = &np2oscfg.mpu; break; default: cfg = NULL; break; } if (cfg) { if ((cfg->port >= COMPORT_COM1) && (cfg->port <= COMPORT_COM4)) { ret = cmserial_create(cfg->port - COMPORT_COM1 + 1, cfg->param, cfg->speed); } else if (cfg->port == COMPORT_MIDI) { ret = cmmidi_create(cfg->mout, cfg->min, cfg->mdl); if (ret) { ret->msg(ret, COMMSG_MIMPIDEFFILE, (long)cfg->def); ret->msg(ret, COMMSG_MIMPIDEFEN, (long)cfg->def_en); } } } if (ret) { return(ret); } return((COMMNG)&com_nc); }
static void IOOUTCALL prt_o40(UINT port, REG8 dat) { COMMNG prt; prt = cm_prt; if (prt == NULL) { prt = commng_create(COMCREATE_PRINTER); cm_prt = prt; } prt->write(prt, (UINT8)dat); // TRACEOUT(("prt - %.2x", dat)); (void)port; }
static void mpuupdate(HWND hWnd) { union { OEMCHAR mmap[MAXPNAMELEN]; OEMCHAR mmdl[64]; OEMCHAR mdef[MAX_PATH]; OEMCHAR mdin[MAXPNAMELEN]; } s; UINT update; update = 0; if (np2cfg.mpuopt != mpu) { np2cfg.mpuopt = mpu; update |= SYS_UPDATECFG | SYS_UPDATEMIDI; } GetDlgItemText(hWnd, IDC_MPU98MMAP, s.mmap, NELEMENTS(s.mmap)); if (milstr_cmp(np2oscfg.mpu.mout, s.mmap)) { milstr_ncpy(np2oscfg.mpu.mout, s.mmap, NELEMENTS(np2oscfg.mpu.mout)); update |= SYS_UPDATEOSCFG | SYS_UPDATEMIDI; } GetDlgItemText(hWnd, IDC_MPU98MDIN, s.mdin, NELEMENTS(s.mdin)); if (milstr_cmp(np2oscfg.mpu.min, s.mdin)) { milstr_ncpy(np2oscfg.mpu.min, s.mdin, NELEMENTS(np2oscfg.mpu.min)); update |= SYS_UPDATEOSCFG | SYS_UPDATEMIDI; } GetDlgItemText(hWnd, IDC_MPU98MMDL, s.mmdl, NELEMENTS(s.mmdl)); if (milstr_cmp(np2oscfg.mpu.mdl, s.mmdl)) { milstr_ncpy(np2oscfg.mpu.mdl, s.mmdl, NELEMENTS(np2oscfg.mpu.mdl)); update |= SYS_UPDATEOSCFG | SYS_UPDATEMIDI; } np2oscfg.mpu.def_en = GetDlgItemCheck(hWnd, IDC_MPU98DEFE); if (cm_mpu98) { cm_mpu98->msg(cm_mpu98, COMMSG_MIMPIDEFEN, np2oscfg.mpu.def_en); } GetDlgItemText(hWnd, IDC_MPU98DEFF, s.mdef, NELEMENTS(s.mdef)); if (milstr_cmp(np2oscfg.mpu.def, s.mdef)) { milstr_ncpy(np2oscfg.mpu.def, s.mdef, NELEMENTS(np2oscfg.mpu.def)); if (cm_mpu98) { cm_mpu98->msg(cm_mpu98, COMMSG_MIMPIDEFFILE, (long)s.mdef); } update |= SYS_UPDATEOSCFG; } sysmng_update(update); }
void commng_destroy(COMMNG hdl) { if (hdl) { hdl->release(hdl); } }