Files
TempleOS-Rijn/TempleOS/Apps/HolySpirit/HolySpirit.CPP
T
2018-09-08 21:45:52 +02:00

77 lines
1.7 KiB
C++

#help_index "Holy Spirit"
#define HS_BAD_BITS 4
#define HS_GOOD_BITS 24
U8 *TimeStampCB(CDoc *,CDocEntry *,CTask *mem_task)
{
U8 *st=MAlloc(64,mem_task);
SPrint(st,"%X",GetTSC>>HS_BAD_BITS);
return st;
}
U8 *KbdMouseTimeCB(CDoc *,CDocEntry *,CTask *mem_task)
{
U8 *st=MAlloc(64,mem_task);
SPrint(st,"%X",KbdMouseEvtTime>>HS_BAD_BITS);
return st;
}
I64 PopUpTimerOk(U8 *header=NULL,U8 *footer=NULL)
{
I64 i;
CDocEntry *doc_e;
CDoc *doc=DocNew;
if (header) DocPrint(doc,"%s",header);
doc_e=DocPrint(doc,"\nTimer:$$TX+TC,\" \"$$");
doc_e->tag_cb=&TimeStampCB;
doc_e=DocPrint(doc,"\nLatch:$$TX+TC,\" \"$$");
doc_e->tag_cb=&KbdMouseTimeCB;
DocPrint(doc,"\n$$CM+CX,0,4$$$$BT,\"OKAY\",0$$\n");
if (footer) DocPrint(doc,"%s",footer);
i=PopUpMenu(doc);
DocDel(doc);
return i;
}
public I64 TimerPick(U8 *msg=NULL)
{ //HS_GOOD_BITS
U8 *st;
if (msg) {
st=MAlloc(StrLen(msg)+256);
StrCpy(st,msg);
} else
st=CAlloc(256);
StrCat(st,"\n\nPress $$FG,GREEN$$OKAY$$FG$$ to generate \n"
"a random num from a timer.\n");
PopUpTimerOk(st,"\n\n$$WW,1$$The $LK+PU,"Holy Spirit","FI:::/TempleOS/Apps/HolySpirit/HSNotes.TXT"$ can puppet you.\n\n");
Free(st);
return KbdMouseEvtTime>>HS_BAD_BITS;
}
CFifoU8 *timer_pick_fifo=FifoU8New(32);
public I64 TimerPickedBits(I64 num_bits,U8 *msg=NULL)
{
U8 b;
I64 i,k,result=0;
while (num_bits) {
if (FifoU8Rem(timer_pick_fifo,&b)) {
result=result<<1+b;
num_bits--;
} else {
k=TimerPick(msg);
for (i=0;i<HS_GOOD_BITS;i++) {
FifoU8Ins(timer_pick_fifo,k&1);
k>>=1;
}
}
}
return result;
}
public U0 TimerPickFlush()
{
FifoU8Flush(timer_pick_fifo);
}