mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2024-12-25 23:10:32 +00:00
Update GodDoodle.ZC
Run code through https://techiedelight.com/tools/clike
This commit is contained in:
parent
fcedd4b421
commit
f0df38f5c0
1 changed files with 213 additions and 165 deletions
|
@ -1,21 +1,25 @@
|
|||
#help_index "God;Graphics/Sprite;Sprites"
|
||||
|
||||
U0 GodDoodleDraw(CTask *task,CDC *dc)
|
||||
U0 GodDoodleDraw(CTask *task, CDC *dc)
|
||||
{
|
||||
GrBlot(dc,0,0,god.doodle_dc);
|
||||
if (Blink) {
|
||||
if (god.doodle_done) {
|
||||
dc->color=RED;
|
||||
GrPrint(dc,(task->pix_width-FONT_WIDTH*29)>>1,
|
||||
(task->pix_height-3*FONT_HEIGHT)>>1,
|
||||
GrBlot(dc, 0, 0, god.doodle_dc);
|
||||
if (Blink)
|
||||
{
|
||||
if (god.doodle_done)
|
||||
{
|
||||
dc->color = RED;
|
||||
GrPrint(dc, (task->pix_width - FONT_WIDTH * 29) >> 1,
|
||||
(task->pix_height - 3 * FONT_HEIGHT) >> 1,
|
||||
"Press <ESC> to insert sprite.");
|
||||
GrPrint(dc,(task->pix_width-FONT_WIDTH*39)>>1,
|
||||
(task->pix_height-3*FONT_HEIGHT)>>1+2*FONT_HEIGHT,
|
||||
GrPrint(dc, (task->pix_width - FONT_WIDTH * 39) >> 1,
|
||||
(task->pix_height - 3 * FONT_HEIGHT) >> 1 + 2 * FONT_HEIGHT,
|
||||
"Press <SHIFT-ESC> to throw-away sprite.");
|
||||
} else {
|
||||
dc->color=GREEN;
|
||||
GrPrint(dc,(task->pix_width-FONT_WIDTH*25)>>1,
|
||||
(task->pix_height-FONT_HEIGHT)>>1,
|
||||
}
|
||||
else
|
||||
{
|
||||
dc->color = GREEN;
|
||||
GrPrint(dc, (task->pix_width - FONT_WIDTH * 25) >> 1,
|
||||
(task->pix_height - FONT_HEIGHT) >> 1,
|
||||
"Press <SPACE> repeatedly.");
|
||||
}
|
||||
}
|
||||
|
@ -23,169 +27,213 @@ U0 GodDoodleDraw(CTask *task,CDC *dc)
|
|||
|
||||
U0 GodDoodleSmooth(I64 num)
|
||||
{
|
||||
CDC *dc=DCExt(god.doodle_dc,0,0,
|
||||
god.doodle_dc->width-1,god.doodle_dc->height-1);
|
||||
I64 i,x,y,x1,y1,c,histogram[16],best,best_cnt,c_old=god.doodle_dc->color;
|
||||
for (y=0;y<god.doodle_dc->height;y++)
|
||||
for (x=0;x<god.doodle_dc->width;x++) {
|
||||
MemSet(histogram,0,sizeof(histogram));
|
||||
for (y1=y-num;y1<=y+num;y1++)
|
||||
for (x1=x-num;x1<=x+num;x1++) {
|
||||
c=GrPeek(dc,x1,y1);
|
||||
if (0<=c<=15)
|
||||
CDC *dc = DCExt(god.doodle_dc, 0, 0,
|
||||
god.doodle_dc->width - 1, god.doodle_dc->height - 1);
|
||||
I64 i, x, y, x1, y1, c, histogram[16], best, best_cnt, c_old = god.doodle_dc->color;
|
||||
for (y = 0; y < god.doodle_dc->height; y++)
|
||||
for (x = 0; x < god.doodle_dc->width; x++)
|
||||
{
|
||||
MemSet(histogram, 0, sizeof(histogram));
|
||||
for (y1 = y - num; y1 <= y + num; y1++)
|
||||
for (x1 = x - num; x1 <= x + num; x1++)
|
||||
{
|
||||
c = GrPeek(dc, x1, y1);
|
||||
if (0 <= c <= 15)
|
||||
histogram[c]++;
|
||||
}
|
||||
best=BLACK;
|
||||
best_cnt=-1;
|
||||
for (i=0;i<16;i++)
|
||||
if (histogram[i]>best_cnt) {
|
||||
best=i;
|
||||
best_cnt=histogram[i];
|
||||
|
||||
best = BLACK;
|
||||
best_cnt = -1;
|
||||
for (i = 0; i < 16; i++)
|
||||
if (histogram[i] > best_cnt)
|
||||
{
|
||||
best = i;
|
||||
best_cnt = histogram[i];
|
||||
}
|
||||
god.doodle_dc->color=best;
|
||||
GrPlot(god.doodle_dc,x,y);
|
||||
|
||||
god.doodle_dc->color = best;
|
||||
GrPlot(god.doodle_dc, x, y);
|
||||
}
|
||||
god.doodle_dc->color=c_old;
|
||||
|
||||
god.doodle_dc->color = c_old;
|
||||
DCDel(dc);
|
||||
}
|
||||
|
||||
U0 GodDoodleBitsIns(I64 num_bits,I64 n)
|
||||
{//Insert bits into God doodle bit fifo.
|
||||
U0 GodDoodleBitsIns(I64 num_bits, I64 n)
|
||||
{
|
||||
//Insert bits into God doodle bit fifo.
|
||||
I64 i;
|
||||
for (i=0;i<num_bits;i++) {
|
||||
FifoU8Insert(god.doodle_fifo,n&1);
|
||||
n>>=1;
|
||||
for (i = 0; i < num_bits; i++)
|
||||
{
|
||||
FifoU8Insert(god.doodle_fifo, n & 1);
|
||||
n >>= 1;
|
||||
}
|
||||
}
|
||||
|
||||
U0 GodDoodleHexIns(U8 *st)
|
||||
{//Insert hex record into God doodle bit fifo.
|
||||
{
|
||||
//Insert hex record into God doodle bit fifo.
|
||||
U8 buf[2];
|
||||
if (st) {
|
||||
buf[1]=0;
|
||||
while (*buf=*st++)
|
||||
if (Bt(char_bmp_hex_numeric,*buf))
|
||||
GodDoodleBitsIns(4,rev_bits_table[Str2I64(buf,16)]>>4);
|
||||
if (st)
|
||||
{
|
||||
buf[1] = 0;
|
||||
while (*buf = *st++)
|
||||
if (Bt(char_bmp_hex_numeric, *buf))
|
||||
GodDoodleBitsIns(4, rev_bits_table[Str2I64(buf, 16)] >> 4);
|
||||
}
|
||||
}
|
||||
|
||||
I64 GodDoodleBits(I64 num_bits)
|
||||
{
|
||||
U8 b;
|
||||
I64 res=0;
|
||||
while (num_bits) {
|
||||
if (FifoU8Remove(god.doodle_fifo,&b)) {
|
||||
res=res<<1+b;
|
||||
I64 res = 0;
|
||||
while (num_bits)
|
||||
{
|
||||
if (FifoU8Remove(god.doodle_fifo, &b))
|
||||
{
|
||||
res = res << 1 + b;
|
||||
num_bits--;
|
||||
} else {
|
||||
god.doodle_ch=CharGet(,FALSE);
|
||||
if (god.doodle_ch==CH_ESC||god.doodle_ch==CH_SHIFT_ESC)
|
||||
throw;
|
||||
else if (god.doodle_ch=='\n') {
|
||||
DCFill(god.doodle_dc,WHITE);
|
||||
FifoU8Flush(god.doodle_fifo);
|
||||
} else if ('0'<=god.doodle_ch<='9')
|
||||
GodDoodleSmooth(god.doodle_ch-'0');
|
||||
}
|
||||
else
|
||||
GodDoodleBitsIns(GOD_GOOD_BITS,KbdMouseEventTime>>GOD_BAD_BITS);
|
||||
{
|
||||
god.doodle_ch = CharGet(, FALSE);
|
||||
if (god.doodle_ch == CH_ESC || god.doodle_ch == CH_SHIFT_ESC)
|
||||
throw;
|
||||
else if (god.doodle_ch == '\n')
|
||||
{
|
||||
DCFill(god.doodle_dc, WHITE);
|
||||
FifoU8Flush(god.doodle_fifo);
|
||||
}
|
||||
else if ('0' <= god.doodle_ch <= '9')
|
||||
GodDoodleSmooth(god.doodle_ch - '0');
|
||||
else
|
||||
GodDoodleBitsIns(GOD_GOOD_BITS, KbdMouseEventTime >> GOD_BAD_BITS);
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
public U8 *GodDoodleSprite(U8 *hex=NULL)
|
||||
{//Make God draw sprite. $LK+PU,"Holy Spirit Instructions",A="FI:::/Adam/God/HSNotes.DD"$
|
||||
I64 i,j,w,h,x,y,ch;
|
||||
public U8 *GodDoodleSprite(U8 *hex = NULL)
|
||||
{
|
||||
//Make God draw sprite. $LK+PU,"Holy Spirit Instructions",A="FI:::/Adam/God/HSNotes.DD"$
|
||||
I64 i, j, w, h, x, y, ch;
|
||||
U8 *elems;
|
||||
|
||||
if (god.doodle_dc) return NULL;
|
||||
god.doodle_done=FALSE;
|
||||
if (god.doodle_dc)
|
||||
return NULL;
|
||||
god.doodle_done = FALSE;
|
||||
SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$
|
||||
AutoComplete;
|
||||
WinBorder;
|
||||
WinMax;
|
||||
|
||||
if (!hex)
|
||||
PopUpOk("The $LK+PU,"Holy Spirit",A="FI:::/Adam/God/HSNotes.DD"$ can puppet you.\n\n"
|
||||
PopUpOk("The $LK+PU,"Holy Spirit ",A="FI::: /Adam/God / HSNotes.DD "$ can puppet you.\n\n"
|
||||
"Press $$GREEN$$<SPACE>$$FG$$ until it finishes.");
|
||||
|
||||
god.doodle_ch=0;
|
||||
god.doodle_dc=DCNew(Fs->pix_width,Fs->pix_height);
|
||||
DCFill(god.doodle_dc,WHITE);
|
||||
w=god.doodle_dc->width;
|
||||
h=god.doodle_dc->height;
|
||||
god.doodle_ch = 0;
|
||||
god.doodle_dc = DCNew(Fs->pix_width, Fs->pix_height);
|
||||
DCFill(god.doodle_dc, WHITE);
|
||||
w = god.doodle_dc->width;
|
||||
h = god.doodle_dc->height;
|
||||
|
||||
Fs->draw_it=&GodDoodleDraw;
|
||||
Fs->draw_it = &GodDoodleDraw;
|
||||
FifoU8Flush(god.doodle_fifo);
|
||||
GodDoodleHexIns(hex);
|
||||
try {
|
||||
for (i=0;i<3;i++) {
|
||||
god.doodle_dc->color=RED;
|
||||
for (j=0;j<29;j++)
|
||||
switch [GodDoodleBits(3)] {
|
||||
try
|
||||
{
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
god.doodle_dc->color = RED;
|
||||
for (j = 0; j < 29; j++)
|
||||
switch[GodDoodleBits(3)]
|
||||
{
|
||||
case 0:
|
||||
GrEllipse3(god.doodle_dc,
|
||||
(w-1)*GodDoodleBits(5)/15.5-w/2,
|
||||
(h-1)*GodDoodleBits(5)/15.5-h/2,0,
|
||||
(w-1)*GodDoodleBits(5)/15.5,(h-1)*GodDoodleBits(5)/15.5);
|
||||
(w - 1) * GodDoodleBits(5) / 15.5 - w / 2,
|
||||
(h - 1) * GodDoodleBits(5) / 15.5 - h / 2, 0,
|
||||
(w - 1) * GodDoodleBits(5) / 15.5, (h - 1) * GodDoodleBits(5) / 15.5);
|
||||
break;
|
||||
case 1:
|
||||
GrCircle3(god.doodle_dc,
|
||||
(w-1)*GodDoodleBits(5)/15.5-w/2,
|
||||
(h-1)*GodDoodleBits(5)/15.5-h/2,0,
|
||||
(w-1)*GodDoodleBits(5)/15.5);
|
||||
(w - 1) * GodDoodleBits(5) / 15.5 - w / 2,
|
||||
(h - 1) * GodDoodleBits(5) / 15.5 - h / 2, 0,
|
||||
(w - 1) * GodDoodleBits(5) / 15.5);
|
||||
break;
|
||||
case 2:
|
||||
GrBorder(god.doodle_dc,
|
||||
(w-1)*GodDoodleBits(5)/15.5-w/2,
|
||||
(h-1)*GodDoodleBits(5)/15.5-h/2,
|
||||
(w-1)*GodDoodleBits(5)/15.5,(h-1)*GodDoodleBits(5)/15.5);
|
||||
(w - 1) * GodDoodleBits(5) / 15.5 - w / 2,
|
||||
(h - 1) * GodDoodleBits(5) / 15.5 - h / 2,
|
||||
(w - 1) * GodDoodleBits(5) / 15.5, (h - 1) * GodDoodleBits(5) / 15.5);
|
||||
break;
|
||||
case 3...7:
|
||||
GrLine3(god.doodle_dc,
|
||||
(w-1)*GodDoodleBits(4)/15,(h-1)*GodDoodleBits(4)/15,0,
|
||||
(w-1)*GodDoodleBits(4)/15,(h-1)*GodDoodleBits(4)/15,0);
|
||||
(w - 1) * GodDoodleBits(4) / 15, (h - 1) * GodDoodleBits(4) / 15, 0,
|
||||
(w - 1) * GodDoodleBits(4) / 15, (h - 1) * GodDoodleBits(4) / 15, 0);
|
||||
break;
|
||||
}
|
||||
for (j=0;j<6;j++) {
|
||||
x=(w-1)*GodDoodleBits(5)/31+w/64;
|
||||
y=(h-1)*GodDoodleBits(5)/31+h/64;
|
||||
switch [GodDoodleBits(2)] {
|
||||
case 0: god.doodle_dc->color=BLACK; break;
|
||||
case 1: god.doodle_dc->color=DKGRAY; break;
|
||||
case 2: god.doodle_dc->color=LTGRAY; break;
|
||||
case 3: god.doodle_dc->color=WHITE; break;
|
||||
|
||||
for (j = 0; j < 6; j++)
|
||||
{
|
||||
x = (w - 1) * GodDoodleBits(5) / 31 + w / 64;
|
||||
y = (h - 1) * GodDoodleBits(5) / 31 + h / 64;
|
||||
switch[GodDoodleBits(2)]
|
||||
{
|
||||
case 0:
|
||||
god.doodle_dc->color = BLACK;
|
||||
break;
|
||||
case 1:
|
||||
god.doodle_dc->color = DKGRAY;
|
||||
break;
|
||||
case 2:
|
||||
god.doodle_dc->color = LTGRAY;
|
||||
break;
|
||||
case 3:
|
||||
god.doodle_dc->color = WHITE;
|
||||
break;
|
||||
}
|
||||
GrFloodFill3(god.doodle_dc,x,y,0);
|
||||
|
||||
GrFloodFill3(god.doodle_dc, x, y, 0);
|
||||
}
|
||||
|
||||
GodDoodleSmooth(3);
|
||||
}
|
||||
god.doodle_done=TRUE;
|
||||
if (!hex) {
|
||||
do ch=CharGet(,FALSE);
|
||||
while (ch!=CH_ESC && ch!=CH_SHIFT_ESC);
|
||||
} else
|
||||
ch=CH_ESC;
|
||||
} catch {
|
||||
Fs->catch_except=TRUE;
|
||||
ch=CH_SHIFT_ESC;
|
||||
|
||||
god.doodle_done = TRUE;
|
||||
if (!hex)
|
||||
{
|
||||
do ch = CharGet(, FALSE);
|
||||
while (ch != CH_ESC && ch != CH_SHIFT_ESC);
|
||||
}
|
||||
else
|
||||
ch = CH_ESC;
|
||||
}
|
||||
|
||||
catch
|
||||
{
|
||||
Fs->catch_except = TRUE;
|
||||
ch = CH_SHIFT_ESC;
|
||||
}
|
||||
|
||||
DCFill;
|
||||
SettingsPop;
|
||||
if (ch==CH_ESC)
|
||||
elems=DC2Sprite(god.doodle_dc);
|
||||
if (ch == CH_ESC)
|
||||
elems = DC2Sprite(god.doodle_dc);
|
||||
else
|
||||
elems=NULL;
|
||||
elems = NULL;
|
||||
DCDel(god.doodle_dc);
|
||||
god.doodle_dc=NULL;
|
||||
god.doodle_dc = NULL;
|
||||
return elems;
|
||||
}
|
||||
|
||||
#help_index "God"
|
||||
public U0 GodDoodle(U8 *hex=NULL)
|
||||
{//Make God draw sprite, insert in doc. $LK+PU,"Holy Spirit Instructions",A="FI:::/Adam/God/HSNotes.DD"$
|
||||
public U0 GodDoodle(U8 *hex = NULL)
|
||||
{
|
||||
//Make God draw sprite, insert in doc. $LK+PU,"Holy Spirit Instructions",A="FI:::/Adam/God/HSNotes.DD"$
|
||||
U8 *elems;
|
||||
if (elems=GodDoodleSprite(hex)) {
|
||||
if (elems = GodDoodleSprite(hex))
|
||||
{
|
||||
Sprite(elems);
|
||||
Free(elems);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue