TASKTYPE TASKMOD tmon4(void * nv) { HEventRec e; HWin w; printf("WinMsg Monitor task running\n"); fflush(stdout); w = MakeAWindow("monitor",40,40,200,50,1); do { e = HGetEvent(NULL,NULL); printf("event %d\n",e.event); } while (e.event != HMOUSEDOWN); return 0; }
// ASyn task TASKTYPE TASKMOD ASyn_Task(void * p) { ASyn *asp = (ASyn *)p; APacket pkt,mkr; char buf[100],cname[100]; HEventRec e; try{ strcpy(cname,asp->cname.c_str()); asp->ackbuf->RequestBufferEvents(ACKBUFID); asp->RequestMessageEvents(); while (!asp->IsTerminated()){ e = HGetEvent(0,0); switch(e.event){ case HTBUFFER: switch(e.c){ case MSGEVENTID: asp->ChkMessage(); while (asp->IsSuspended()) asp->ChkMessage(TRUE); break; case ACKBUFID: asp->ChkAckBuf(); break; } /* switch(e.c) */ break; case HWINCLOSE: sprintf(buf, "terminating"); HPostMessage(HThreadSelf(),buf); asp->terminated = TRUE; break; } } if (asp->trace&T_TOP) printf("%s synthesiser exiting\n",asp->cname.c_str()); HExitThread(0); return 0; } catch (ATK_Error e){ ReportErrors("ATK",e.i); return 0;} catch (HTK_Error e){ ReportErrors("HTK",e.i); return 0;} }
/* EXPORT->TrackButtons: tracks the buttons until the mouse button is released */ ButtonId TrackButtons(HButton *btnlist, HEventRec hev) { HButton *pressed, *released; bool done; pressed = CheckButtonList(btnlist, hev.x, hev.y); if (pressed != NULL){ SetButtonLit(pressed, TRUE); done = FALSE; #ifdef USE_TIMER HFlush(); Timer(BTN_WAIT); #endif do { hev = HGetEvent(TRUE, pressed->action); done = (hev.event==HMOUSEUP); } while (!done); released = CheckButtonList(btnlist, hev.x, hev.y); SetButtonLit(pressed, FALSE); if ( pressed == released) return pressed->id; } return 0; }
TASKTYPE TASKMOD CopyFe(void *p) { ATee *acp = (ATee *)p; APacket pkt; HEventRec e; try{ acp->in->RequestBufferEvents(INBUFID); acp->RequestMessageEvents(); while(!acp->IsTerminated()){ e = HGetEvent(0,0); switch(e.event){ case HTBUFFER: switch(e.c) { case MSGEVENTID: acp->ChkMessage(); while (acp->IsSuspended()) acp->ChkMessage(TRUE); break; case INBUFID: if (! acp->in->IsEmpty()) { while (! acp->in->IsEmpty()) { pkt=acp->in->GetPacket(); acp->out1->PutPacket(pkt); acp->out2->PutPacket(pkt); } } break; } } } HExitThread(0); return 0; } catch (ATK_Error e){ReportErrors("ATK",e.i); return 0;} catch (HTK_Error e){ReportErrors("HTK",e.i); return 0;} }
// ARec task TASKTYPE TASKMOD ARec_Task(void * p) { ARec *avp = (ARec *)p; char buf[100],cname[100]; HEventRec e; try{ strcpy(cname,avp->cname.c_str()); if (avp->showRD){ avp->win = MakeHWin(cname,avp->rdx0,avp->rdy0,avp->width,avp->height,1); avp->InitDrawRD(); } // Initialise Recogniser avp->InitRecogniser(); avp->in->RequestBufferEvents(INBUFID); avp->RequestMessageEvents(); while (!avp->IsTerminated()){ e = HGetEvent(0,0); if (avp->trace&T_RST) printf(" ARec event=%d ev.c=%d state=%d mode=%o\n", e.event,e.c,(int)avp->runstate,(int)avp->runmode); switch(e.event){ case HTBUFFER: switch(e.c){ case MSGEVENTID: avp->ChkMessage(); while (avp->IsSuspended()) avp->ChkMessage(TRUE); if (avp->runstate==ANS_STATE){ avp->ComputeAnswer(); avp->runstate = (avp->runmode&CONTINUOUS_MODE)?PRIME_STATE:WAIT_STATE; } break; case INBUFID: switch (avp->runstate) { case PRIME_STATE: avp->PrimeRecogniser(); avp->runstate = FLUSH_STATE; case FLUSH_STATE: if (avp->FlushObservation()) { if (avp->terminated) break; // only possible if file input avp->runstate = RUN_STATE; } else break; case RUN_STATE: if (avp->RecObservation()) avp->runstate = ANS_STATE; else break; case ANS_STATE: avp->ComputeAnswer(); avp->runstate = (avp->runmode&CONTINUOUS_MODE)?PRIME_STATE:WAIT_STATE; break; } // update display if (avp->showRD) avp->DrawStatus(); break; } break; case HWINCLOSE: sprintf(buf, "Terminating\n"); HPostMessage(HThreadSelf(),buf); avp->terminated = TRUE; break; } } // forward a terminated message to output buffer if (avp->trace&T_TOP) printf("%s recogniser exiting\n",avp->cname.c_str()); avp->SendMarkerPkt("TERMINATED"); HExitThread(0); return 0; } catch (ATK_Error e){ ReportErrors("ATK",e.i); return 0;} catch (HTK_Error e){ ReportErrors("HTK",e.i); return 0;} }