extern "C" __declspec(dllexport) kkrError_t KkrSetEventHandler(kkrHandle_t hBoard, kkrSolveEventRequest_t req, kkrSolveEventHandler_t cb, void * pUser) { kkrError_t retVal = KKRERR_NO_ERROR; if(!HandleExists(hBoard)) return KKRERR_INVALID_HANDLE; kakuro::slvEventRequest_t kReq; switch(req) { case KKRREQEVENT_NONE: kReq = kakuro::REQEVENT_NONE; break; case KKRREQEVENT_SOLUTION: kReq = kakuro::REQEVENT_SOLUTION; break; case KKRREQEVENT_DETERMINED: kReq = kakuro::REQEVENT_DETERMINED; break; case KKRREQEVENT_TEMPORARY: kReq = kakuro::REQEVENT_TEMPORARY; break; default: retVal = KKRERR_INVALID_ARGUMENT; goto quit; } kakuro::solver_t * pSolver = reinterpret_cast<kakuro::solver_t *>(hBoard); try { pSolver->SetEventHandler(kReq, cb, pUser); } catch(kakuro::slvExceptionInvalidArgument_t & eArg) { retVal = KKRERR_INVALID_ARGUMENT; } catch(kakuro::slvException_t & e) { retVal = KKRERR_INTERNAL_ERROR; } catch(...) { retVal = KKRERR_SYSTEM_ERROR; } quit: return retVal; }
extern "C" __declspec(dllexport) kkrError_t KkrSolve(kkrHandle_t HBoard) { kkrError_t retVal = KKRERR_NO_ERROR; if(!HandleExists(HBoard)) return KKRERR_INVALID_HANDLE; kakuro::solver_t * pSolver = reinterpret_cast<kakuro::solver_t *>(HBoard); try { pSolver->Solve(); } catch(kakuro::slvException_t & eKkr) { retVal = KKRERR_INTERNAL_ERROR; } catch(...) { retVal = KKRERR_SYSTEM_ERROR; } return retVal; }
/*---------------------------------------------------------------------------- DispatchEvent Handles all OSL messages that this object should handle ----------------------------------------------------------------------------*/ void AEGenericClass::DispatchEvent(AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply) { OSErr err = noErr; AEEventID eventID; OSType typeCode; Size actualSize = 0L; // Get the event ID err = AEGetAttributePtr(appleEvent, keyEventIDAttr, typeType, &typeCode, (Ptr)&eventID, sizeof(eventID), &actualSize); ThrowIfOSErr(err); try { switch (eventID) { case kAEClone: HandleDuplicate(token, appleEvent, reply); break; case kAEClose: HandleClose(token, appleEvent, reply); break; case kAECountElements: HandleCount(token, appleEvent, reply); break; case kAECreateElement: HandleMake(token, appleEvent, reply); break; case kAEDelete: HandleDelete(token, appleEvent, reply); break; case kAEDoObjectsExist: HandleExists(token, appleEvent, reply); break; case kAEGetData: HandleGetData(token, appleEvent, reply); break; case kAEGetDataSize: HandleDataSize(token, appleEvent, reply); break; case kAEMove: HandleMove(token, appleEvent, reply); break; case kAEOpen: // == kAEOpenDocuments HandleOpen(token, appleEvent, reply); break; case kAEPrint: HandlePrint(token, appleEvent, reply); break; case kAEOpenApplication: HandleRun(token, appleEvent, reply); break; case kAEReopenApplication: HandleReOpen(token, appleEvent, reply); break; case kAEQuitApplication: HandleQuit(token, appleEvent, reply); break; case kAESave: HandleSave(token, appleEvent, reply); break; case kAESetData: HandleSetData(token, appleEvent, reply); break; // MT-NW suite case kAEExtract: HandleExtract(token, appleEvent, reply); break; case kAESendMessage: HandleSendMessage(token, appleEvent, reply); break; default: err = errAEEventNotHandled; break; } } catch (OSErr catchErr) { PutReplyErrorNumber(reply, catchErr); throw; } catch ( ... ) { PutReplyErrorNumber(reply, paramErr); throw; } }