//This is a drawing program void DrawIt() { ClearWindowText; } I4 dx,dy,dd,scale=10; void DoodlePlot(GrBitMap *base,I4 x,I4 y,I4 z) { z; GrLine3(base,x/scale+dy,y/scale-dx,0, x/scale-dy,y/scale+dx,0); } public void DoodleLine(GrBitMap *base,I4 x1,I4 y1,I4 x2,I4 y2) { Line(base,x1,y1,0,x2,y2,0,&DoodlePlot); } //This is good for drawing palm trees public void Doodle2() { I8 cmd,x1,y1,x2,y2,p1,p2,color=GR_BLACK; U4 old_update_window=Fs->update_window; U4 old_ip_double=Bts(&Fs->crt_flags,CRTf_NO_DOUBLE_CLICK); U4 old_inhibit=ip_inhibit_win_operations; GrBitMap *base=GrNew(grbase); base->color=ROP_EQU+(color ^ GR_WHITE); ip_inhibit_win_operations=TRUE; MaximizeWindow; Fs->update_window=&DrawIt; GrClear; PutS("$$CL$$"); while (TRUE) { cmd=GetMsg(&p1,&p2, (1<update_window=old_update_window; GrClear; AssignBit(&Fs->crt_flags,CRTf_NO_DOUBLE_CLICK,old_ip_double); ip_inhibit_win_operations=old_inhibit; GrDel(base); return; } else if (cmd==MSG_IP_R_UP) { ip_inhibit_win_operations=FALSE; color=PopUpColor; base->color=ROP_EQU+(color ^ GR_WHITE); ip_inhibit_win_operations=TRUE; } else { x1=p1; y1=p2; x2=p1; y2=p2; while (cmd!=MSG_IP_L_UP) { dx=x2-x1; dy=y2-y1; dd=Sqrt(dx*dx+dy*dy); if (dd) { dx=dx*ip_speed/dd/0x5000000; dy=dy*ip_speed/dd/0x5000000; DoodleLine(base,x1*scale,y1*scale,x2*scale,y2*scale); } cmd=GetMsg(&p1,&p2, (1<