static const VSFrameRef *VS_CC mvrecalculateGetFrame(int n, int activationReason, void **instanceData, void **frameData, VSFrameContext *frameCtx, VSCore *core, const VSAPI *vsapi) {
    MVRecalculateData *d = (MVRecalculateData *) * instanceData;

    if (activationReason == arInitial) {
        vsapi->requestFrameFilter(n, d->vectors, frameCtx);

        int offset = ( d->analysisData.isBackward ) ? d->analysisData.nDeltaFrame : -d->analysisData.nDeltaFrame;
        int nref = n + offset;

        if (nref >= 0 && (nref < d->vi->numFrames || !d->vi->numFrames)) {
            if (n < nref) {
                vsapi->requestFrameFilter(n, d->node, frameCtx);
                vsapi->requestFrameFilter(nref, d->node, frameCtx);
            } else {
                vsapi->requestFrameFilter(nref, d->node, frameCtx);
                vsapi->requestFrameFilter(n, d->node, frameCtx);
            }
        } else { // too close to beginning/end of clip
            vsapi->requestFrameFilter(n, d->node, frameCtx);
        }
    } else if (activationReason == arAllFramesReady) {

        GroupOfPlanes *vectorFields = new GroupOfPlanes(d->analysisData.nBlkSizeX, d->analysisData.nBlkSizeY, d->analysisData.nLvCount, d->analysisData.nPel, d->analysisData.nMotionFlags, d->analysisData.nCPUFlags, d->analysisData.nOverlapX, d->analysisData.nOverlapY, d->analysisData.nBlkX, d->analysisData.nBlkY, d->analysisData.xRatioUV, d->analysisData.yRatioUV, d->divideExtra, d->supervi->format->bitsPerSample);


        const uint8_t *pSrc[3];
        const uint8_t *pRef[3];
        uint8_t *pDst;
        int nSrcPitch[3];
        int nRefPitch[3];

        int offset = ( d->analysisData.isBackward ) ? d->analysisData.nDeltaFrame : -d->analysisData.nDeltaFrame;
        int nref = n + offset;

        const VSFrameRef *src = vsapi->getFrameFilter(n, d->node, frameCtx);
        const VSMap *srcprops = vsapi->getFramePropsRO(src);
        int err;

        bool srctff = !!vsapi->propGetInt(srcprops, "_Field", 0, &err);
        if (err && d->fields && !d->tffexists) {
            vsapi->setFilterError("Recalculate: _Field property not found in input frame. Therefore, you must pass tff argument.", frameCtx);
            delete vectorFields;
            vsapi->freeFrame(src);
            return NULL;
        }

        // if tff was passed, it overrides _Field.
        if (d->tffexists)
            srctff = d->tff && (n % 2 == 0); //child->GetParity(n); // bool tff;

        for (int plane = 0; plane < d->supervi->format->numPlanes; plane++) {
            pSrc[plane] = vsapi->getReadPtr(src, plane);
            nSrcPitch[plane] = vsapi->getStride(src, plane);
        }

        int dst_height = 1;
        int dst_width = d->headerSize / sizeof(int) + vectorFields->GetArraySize(); //v1.8.1
        // In Avisynth the frame was packed BGR32, which has 4 bytes per pixel.
        // It's GRAY8 here.
        dst_width *= 4;
        VSFrameRef *dst = vsapi->newVideoFrame(d->vi->format, dst_width, dst_height, src, core);

        pDst = vsapi->getWritePtr(dst, 0);

        // write analysis parameters as a header to frame
        memcpy(pDst, &d->headerSize, sizeof(int));

        if (d->divideExtra)
            memcpy(pDst+sizeof(int), &d->analysisDataDivided, sizeof(d->analysisData));
        else
            memcpy(pDst+sizeof(int), &d->analysisData, sizeof(d->analysisData));

        pDst += d->headerSize;

        const VSFrameRef *mvn = vsapi->getFrameFilter(n, d->vectors, frameCtx);
        MVClipBalls balls(d->mvClip, vsapi);
        balls.Update(mvn);
        vsapi->freeFrame(mvn);

        if (balls.IsUsable() && nref >= 0 && (nref < d->vi->numFrames || !d->vi->numFrames))
        {
            const VSFrameRef *ref = vsapi->getFrameFilter(nref, d->node, frameCtx);
            const VSMap *refprops = vsapi->getFramePropsRO(ref);

            bool reftff = !!vsapi->propGetInt(refprops, "_Field", 0, &err);
            if (err && d->fields && !d->tffexists) {
                vsapi->setFilterError("Recalculate: _Field property not found in input frame. Therefore, you must pass tff argument.", frameCtx);
                delete vectorFields;
                vsapi->freeFrame(src);
                vsapi->freeFrame(ref);
                vsapi->freeFrame(dst);
                return NULL;
            }

            // if tff was passed, it overrides _Field.
            if (d->tffexists)
                reftff = d->tff && (nref % 2 == 0); //child->GetParity(n); // bool tff;

            int fieldShift = 0;
            if (d->fields && d->analysisData.nPel > 1 && (d->analysisData.nDeltaFrame % 2))
            {
                fieldShift = (srctff && !reftff) ? d->analysisData.nPel/2 : ( (reftff && !srctff) ? -(d->analysisData.nPel/2) : 0);
                // vertical shift of fields for fieldbased video at finest level pel2
            }


            for (int plane = 0; plane < d->supervi->format->numPlanes; plane++) {
                pRef[plane] = vsapi->getReadPtr(ref, plane);
                nRefPitch[plane] = vsapi->getStride(ref, plane);
            }


            MVGroupOfFrames *pSrcGOF = new MVGroupOfFrames(d->nSuperLevels, d->analysisData.nWidth, d->analysisData.nHeight, d->nSuperPel, d->nSuperHPad, d->nSuperVPad, d->nSuperModeYUV, d->isse, d->analysisData.xRatioUV, d->analysisData.yRatioUV, d->supervi->format->bitsPerSample);
            MVGroupOfFrames *pRefGOF = new MVGroupOfFrames(d->nSuperLevels, d->analysisData.nWidth, d->analysisData.nHeight, d->nSuperPel, d->nSuperHPad, d->nSuperVPad, d->nSuperModeYUV, d->isse, d->analysisData.xRatioUV, d->analysisData.yRatioUV, d->supervi->format->bitsPerSample);

            // cast away the const, because why not.
            pSrcGOF->Update(d->nModeYUV, (uint8_t *)pSrc[0], nSrcPitch[0], (uint8_t *)pSrc[1], nSrcPitch[1], (uint8_t *)pSrc[2], nSrcPitch[2]); // v2.0
            pRefGOF->Update(d->nModeYUV, (uint8_t *)pRef[0], nRefPitch[0], (uint8_t *)pRef[1], nRefPitch[1], (uint8_t *)pRef[2], nRefPitch[2]); // v2.0


            DCTClass *DCTc = NULL;
            if (d->dctmode != 0) {
                /*
                // FIXME: deal with this inline asm shit
                if (d->isse && (d->blksize == 8) && d->blksizev == 8)
                DCTc = new DCTINT(d->blksize, d->blksizev, d->dctmode);
                else
                */
                DCTc = new DCTFFTW(d->blksize, d->blksizev, d->dctmode, d->vi->format->bitsPerSample);
            }


            vectorFields->RecalculateMVs(balls, pSrcGOF, pRefGOF, d->searchType, d->nSearchParam, d->nLambda, d->pnew, reinterpret_cast<int*>(pDst), NULL, fieldShift, d->thSAD, DCTc, d->smooth, d->meander);

            if (d->divideExtra) {
                // make extra level with divided sublocks with median (not estimated) motion
                vectorFields->ExtraDivide(reinterpret_cast<int*>(pDst));
            }

            delete vectorFields;
            if (DCTc)
                delete DCTc;
            delete pSrcGOF;
            delete pRefGOF;
            vsapi->freeFrame(ref);
        }
        else // too close to the beginning or end to do anything
        {
            vectorFields->WriteDefaultToArray(reinterpret_cast<int*>(pDst));
            delete vectorFields;
        }

        // FIXME: Get rid of all mmx shit.
        mvtools_cpu_emms();

        vsapi->freeFrame(src);

        return dst;
    }

    return 0;
}
Ejemplo n.º 2
0
void main()
{
 void done();
 int loopy;

  initscr();
  noecho();
  nonl();
  refresh();
  signal(SIGINT,done);
  signal(SIGTERM,done);
#if !defined	DOS && !defined OS2
  signal(SIGHUP,done);
  signal(SIGQUIT,done);
#endif



  treescrn = newwin(16,27,3,53);
  treescrn2 = newwin(16,27,3,53);
  treescrn3 = newwin(16,27,3,53);
  treescrn4 = newwin(16,27,3,53);
  treescrn5 = newwin(16,27,3,53);
  treescrn6 = newwin(16,27,3,53);
  treescrn7 = newwin(16,27,3,53);
  treescrn8 = newwin(16,27,3,53);

  dotdeer0 = newwin(3,71,0,8);

  stardeer0 = newwin(4,56,0,8);

  lildeer0 = newwin(7,53,0,8);
  lildeer1 = newwin(2,4,0,0);
  lildeer2 = newwin(2,4,0,0);
  lildeer3 = newwin(2,4,0,0);

  middeer0 = newwin(15,42,0,8);
  middeer1 = newwin(3,7,0,0);
  middeer2 = newwin(3,7,0,0);
  middeer3 = newwin(3,7,0,0);

  bigdeer0 = newwin(10,23,0,0);
  bigdeer1 = newwin(10,23,0,0);
  bigdeer2 = newwin(10,23,0,0);
  bigdeer3 = newwin(10,23,0,0);
  bigdeer4 = newwin(10,23,0,0);

  lookdeer0 = newwin(10,25,0,0);
  lookdeer1 = newwin(10,25,0,0);
  lookdeer2 = newwin(10,25,0,0);
  lookdeer3 = newwin(10,25,0,0);
  lookdeer4 = newwin(10,25,0,0);

  w_holiday = newwin(1,26,3,27);

  w_del_msg = newwin(1,12,23,60);

  mvwaddstr(w_del_msg,0,0,"Hit any key to quit");

  mvwaddstr(w_holiday,0,0,"H A P P Y  H O L I D A Y S");

  /* set up the windows for our various reindeer */

  /* lildeer1 */
  mvwaddch(lildeer1,0,0,(chtype)'V');
  mvwaddch(lildeer1,1,0,(chtype)'@');
  mvwaddch(lildeer1,1,1,(chtype)'<');
  mvwaddch(lildeer1,1,2,(chtype)'>');
  mvwaddch(lildeer1,1,3,(chtype)'~');

  /* lildeer2 */
  mvwaddch(lildeer2,0,0,(chtype)'V');
  mvwaddch(lildeer2,1,0,(chtype)'@');
  mvwaddch(lildeer2,1,1,(chtype)'|');
  mvwaddch(lildeer2,1,2,(chtype)'|');
  mvwaddch(lildeer2,1,3,(chtype)'~');

  /* lildeer3 */
  mvwaddch(lildeer3,0,0,(chtype)'V');
  mvwaddch(lildeer3,1,0,(chtype)'@');
  mvwaddch(lildeer3,1,1,(chtype)'>');
  mvwaddch(lildeer3,1,2,(chtype)'<');
  mvwaddch(lildeer2,1,3,(chtype)'~');


  /* middeer1 */
  mvwaddch(middeer1,0,2,(chtype)'y');
  mvwaddch(middeer1,0,3,(chtype)'y');
  mvwaddch(middeer1,1,2,(chtype)'0');
  mvwaddch(middeer1,1,3,(chtype)'(');
  mvwaddch(middeer1,1,4,(chtype)'=');
  mvwaddch(middeer1,1,5,(chtype)')');
  mvwaddch(middeer1,1,6,(chtype)'~');
  mvwaddch(middeer1,2,3,(chtype)'\\');
  mvwaddch(middeer1,2,4,(chtype)'/');

  /* middeer2 */
  mvwaddch(middeer2,0,2,(chtype)'y');
  mvwaddch(middeer2,0,3,(chtype)'y');
  mvwaddch(middeer2,1,2,(chtype)'0');
  mvwaddch(middeer2,1,3,(chtype)'(');
  mvwaddch(middeer2,1,4,(chtype)'=');
  mvwaddch(middeer2,1,5,(chtype)')');
  mvwaddch(middeer2,1,6,(chtype)'~');
  mvwaddch(middeer2,2,3,(chtype)'|');
  mvwaddch(middeer2,2,5,(chtype)'|');

  /* middeer3 */
  mvwaddch(middeer3,0,2,(chtype)'y');
  mvwaddch(middeer3,0,3,(chtype)'y');
  mvwaddch(middeer3,1,2,(chtype)'0');
  mvwaddch(middeer3,1,3,(chtype)'(');
  mvwaddch(middeer3,1,4,(chtype)'=');
  mvwaddch(middeer3,1,5,(chtype)')');
  mvwaddch(middeer3,1,6,(chtype)'~');
  mvwaddch(middeer3,2,2,(chtype)'/');
  mvwaddch(middeer3,2,6,(chtype)'\\');


  /* bigdeer1 */
  mvwaddch(bigdeer1,0,17,(chtype)'\\');
  mvwaddch(bigdeer1,0,18,(chtype)'/');
  mvwaddch(bigdeer1,0,20,(chtype)'\\');
  mvwaddch(bigdeer1,0,21,(chtype)'/');
  mvwaddch(bigdeer1,1,18,(chtype)'\\');
  mvwaddch(bigdeer1,1,20,(chtype)'/');
  mvwaddch(bigdeer1,2,19,(chtype)'|');
  mvwaddch(bigdeer1,2,20,(chtype)'_');
  mvwaddch(bigdeer1,3,18,(chtype)'/');
  mvwaddch(bigdeer1,3,19,(chtype)'^');
  mvwaddch(bigdeer1,3,20,(chtype)'0');
  mvwaddch(bigdeer1,3,21,(chtype)'\\');
  mvwaddch(bigdeer1,4,17,(chtype)'/');
  mvwaddch(bigdeer1,4,18,(chtype)'/');
  mvwaddch(bigdeer1,4,19,(chtype)'\\');
  mvwaddch(bigdeer1,4,22,(chtype)'\\');
  mvwaddstr(bigdeer1,5,7,"^~~~~~~~~//  ~~U");
  mvwaddstr(bigdeer1,6,7,"( \\_____( /");
  mvwaddstr(bigdeer1,7,8,"( )    /");
  mvwaddstr(bigdeer1,8,9,"\\\\   /");
  mvwaddstr(bigdeer1,9,11,"\\>/>");

  /* bigdeer2 */
  mvwaddch(bigdeer2,0,17,(chtype)'\\');
  mvwaddch(bigdeer2,0,18,(chtype)'/');
  mvwaddch(bigdeer2,0,20,(chtype)'\\');
  mvwaddch(bigdeer2,0,21,(chtype)'/');
  mvwaddch(bigdeer2,1,18,(chtype)'\\');
  mvwaddch(bigdeer2,1,20,(chtype)'/');
  mvwaddch(bigdeer2,2,19,(chtype)'|');
  mvwaddch(bigdeer2,2,20,(chtype)'_');
  mvwaddch(bigdeer2,3,18,(chtype)'/');
  mvwaddch(bigdeer2,3,19,(chtype)'^');
  mvwaddch(bigdeer2,3,20,(chtype)'0');
  mvwaddch(bigdeer2,3,21,(chtype)'\\');
  mvwaddch(bigdeer2,4,17,(chtype)'/');
  mvwaddch(bigdeer2,4,18,(chtype)'/');
  mvwaddch(bigdeer2,4,19,(chtype)'\\');
  mvwaddch(bigdeer2,4,22,(chtype)'\\');
  mvwaddstr(bigdeer2,5,7,"^~~~~~~~~//  ~~U");
  mvwaddstr(bigdeer2,6,7,"(( )____( /");
  mvwaddstr(bigdeer2,7,7,"( /      |");
  mvwaddstr(bigdeer2,8,8,"\\/      |");
  mvwaddstr(bigdeer2,9,9,"|>     |>");

  /* bigdeer3 */
  mvwaddch(bigdeer3,0,17,(chtype)'\\');
  mvwaddch(bigdeer3,0,18,(chtype)'/');
  mvwaddch(bigdeer3,0,20,(chtype)'\\');
  mvwaddch(bigdeer3,0,21,(chtype)'/');
  mvwaddch(bigdeer3,1,18,(chtype)'\\');
  mvwaddch(bigdeer3,1,20,(chtype)'/');
  mvwaddch(bigdeer3,2,19,(chtype)'|');
  mvwaddch(bigdeer3,2,20,(chtype)'_');
  mvwaddch(bigdeer3,3,18,(chtype)'/');
  mvwaddch(bigdeer3,3,19,(chtype)'^');
  mvwaddch(bigdeer3,3,20,(chtype)'0');
  mvwaddch(bigdeer3,3,21,(chtype)'\\');
  mvwaddch(bigdeer3,4,17,(chtype)'/');
  mvwaddch(bigdeer3,4,18,(chtype)'/');
  mvwaddch(bigdeer3,4,19,(chtype)'\\');
  mvwaddch(bigdeer3,4,22,(chtype)'\\');
  mvwaddstr(bigdeer3,5,7,"^~~~~~~~~//  ~~U");
  mvwaddstr(bigdeer3,6,6,"( ()_____( /");
  mvwaddstr(bigdeer3,7,6,"/ /       /");
  mvwaddstr(bigdeer3,8,5,"|/          \\");
  mvwaddstr(bigdeer3,9,5,"/>           \\>");

  /* bigdeer4 */
  mvwaddch(bigdeer4,0,17,(chtype)'\\');
  mvwaddch(bigdeer4,0,18,(chtype)'/');
  mvwaddch(bigdeer4,0,20,(chtype)'\\');
  mvwaddch(bigdeer4,0,21,(chtype)'/');
  mvwaddch(bigdeer4,1,18,(chtype)'\\');
  mvwaddch(bigdeer4,1,20,(chtype)'/');
  mvwaddch(bigdeer4,2,19,(chtype)'|');
  mvwaddch(bigdeer4,2,20,(chtype)'_');
  mvwaddch(bigdeer4,3,18,(chtype)'/');
  mvwaddch(bigdeer4,3,19,(chtype)'^');
  mvwaddch(bigdeer4,3,20,(chtype)'0');
  mvwaddch(bigdeer4,3,21,(chtype)'\\');
  mvwaddch(bigdeer4,4,17,(chtype)'/');
  mvwaddch(bigdeer4,4,18,(chtype)'/');
  mvwaddch(bigdeer4,4,19,(chtype)'\\');
  mvwaddch(bigdeer4,4,22,(chtype)'\\');
  mvwaddstr(bigdeer4,5,7,"^~~~~~~~~//  ~~U");
  mvwaddstr(bigdeer4,6,6,"( )______( /");
  mvwaddstr(bigdeer4,7,5,"(/          \\");
  mvwaddstr(bigdeer4,8,0,"v___=             ----^");


  /* lookdeer1 */
  mvwaddstr(lookdeer1,0,16,"\\/     \\/");
  mvwaddstr(lookdeer1,1,17,"\\Y/ \\Y/");
  mvwaddstr(lookdeer1,2,19,"\\=/");
  mvwaddstr(lookdeer1,3,17,"^\\o o/^");
  mvwaddstr(lookdeer1,4,17,"//( )");
  mvwaddstr(lookdeer1,5,7,"^~~~~~~~~// \\O/");
  mvwaddstr(lookdeer1,6,7,"( \\_____( /");
  mvwaddstr(lookdeer1,7,8,"( )    /");
  mvwaddstr(lookdeer1,8,9,"\\\\   /");
  mvwaddstr(lookdeer1,9,11,"\\>/>");

  /* lookdeer2 */
  mvwaddstr(lookdeer2,0,16,"\\/     \\/");
  mvwaddstr(lookdeer2,1,17,"\\Y/ \\Y/");
  mvwaddstr(lookdeer2,2,19,"\\=/");
  mvwaddstr(lookdeer2,3,17,"^\\o o/^");
  mvwaddstr(lookdeer2,4,17,"//( )");
  mvwaddstr(lookdeer2,5,7,"^~~~~~~~~// \\O/");
  mvwaddstr(lookdeer2,6,7,"(( )____( /");
  mvwaddstr(lookdeer2,7,7,"( /      |");
  mvwaddstr(lookdeer2,8,8,"\\/      |");
  mvwaddstr(lookdeer2,9,9,"|>     |>");

  /* lookdeer3 */
  mvwaddstr(lookdeer3,0,16,"\\/     \\/");
  mvwaddstr(lookdeer3,1,17,"\\Y/ \\Y/");
  mvwaddstr(lookdeer3,2,19,"\\=/");
  mvwaddstr(lookdeer3,3,17,"^\\o o/^");
  mvwaddstr(lookdeer3,4,17,"//( )");
  mvwaddstr(lookdeer3,5,7,"^~~~~~~~~// \\O/");
  mvwaddstr(lookdeer3,6,6,"( ()_____( /");
  mvwaddstr(lookdeer3,7,6,"/ /       /");
  mvwaddstr(lookdeer3,8,5,"|/          \\");
  mvwaddstr(lookdeer3,9,5,"/>           \\>");

  /* lookdeer4 */
  mvwaddstr(lookdeer4,0,16,"\\/     \\/");
  mvwaddstr(lookdeer4,1,17,"\\Y/ \\Y/");
  mvwaddstr(lookdeer4,2,19,"\\=/");
  mvwaddstr(lookdeer4,3,17,"^\\o o/^");
  mvwaddstr(lookdeer4,4,17,"//( )");
  mvwaddstr(lookdeer4,5,7,"^~~~~~~~~// \\O/");
  mvwaddstr(lookdeer4,6,6,"( )______( /");
  mvwaddstr(lookdeer4,7,5,"(/          \\");
  mvwaddstr(lookdeer4,8,0,"v___=             ----^");



  /***********************************************/
  cbreak();
  nodelay(stdscr,TRUE);
  do
  {
    clear();
    werase(treescrn);
    touchwin(treescrn);
    werase(treescrn2);
    touchwin(treescrn2);
    werase(treescrn8);
    touchwin(treescrn8);
    refresh();
    usleep(1000);
    boxit();
    refresh();
    usleep(1000);
    seas();
    refresh();
    usleep(1000);
    greet();
    refresh();
    usleep(1000);
    fromwho();
    refresh();
    usleep(1000);
    tree();
    usleep(1000);
    balls();
    usleep(1000);
    star();
    usleep(1000);
    strng1();
    strng2();
    strng3();
    strng4();
    strng5();


  /* set up the windows for our blinking trees */
  /* **************************************** */
  /* treescrn3 */

               overlay(treescrn, treescrn3);

             /*balls*/
               mvwaddch(treescrn3, 4, 18, ' ');
               mvwaddch(treescrn3, 7, 6, ' ');
               mvwaddch(treescrn3, 8, 19, ' ');
               mvwaddch(treescrn3, 11, 22, ' ');

             /*star*/
               mvwaddch(treescrn3, 0, 12, '*');

             /*strng1*/
               mvwaddch(treescrn3, 3, 11, ' ');

             /*strng2*/
               mvwaddch(treescrn3, 5, 13, ' ');
               mvwaddch(treescrn3, 6, 10, ' ');

             /*strng3*/
               mvwaddch(treescrn3, 7, 16, ' ');
               mvwaddch(treescrn3, 7, 14, ' ');

             /*strng4*/
               mvwaddch(treescrn3, 10, 13, ' ');
               mvwaddch(treescrn3, 10, 10, ' ');
               mvwaddch(treescrn3, 11, 8, ' ');

             /*strng5*/
               mvwaddch(treescrn3, 11, 18, ' ');
               mvwaddch(treescrn3, 12, 13, ' ');


  /* treescrn4 */

               overlay(treescrn, treescrn4);

             /*balls*/
               mvwaddch(treescrn4, 3, 9, ' ');
               mvwaddch(treescrn4, 4, 16, ' ');
               mvwaddch(treescrn4, 7, 6, ' ');
               mvwaddch(treescrn4, 8, 19, ' ');
               mvwaddch(treescrn4, 11, 2, ' ');
               mvwaddch(treescrn4, 12, 23, ' ');

             /*star*/
               wstandout(treescrn4);
               mvwaddch(treescrn4, 0, 12, '*');
               wstandend(treescrn4);

             /*strng1*/
               mvwaddch(treescrn4, 3, 13, ' ');

             /*strng2*/

	     /*strng3*/
               mvwaddch(treescrn4, 7, 15, ' ');
               mvwaddch(treescrn4, 8, 11, ' ');

             /*strng4*/
               mvwaddch(treescrn4, 9, 16, ' ');
               mvwaddch(treescrn4, 10, 12, ' ');
               mvwaddch(treescrn4, 11, 8, ' ');

             /*strng5*/
               mvwaddch(treescrn4, 11, 18, ' ');
	       mvwaddch(treescrn4, 12, 14, ' ');


  /* treescrn5 */

               overlay(treescrn, treescrn5);

             /*balls*/
               mvwaddch(treescrn5, 3, 15, ' ');
               mvwaddch(treescrn5, 10, 20, ' ');
               mvwaddch(treescrn5, 12, 1, ' ');

             /*star*/
               mvwaddch(treescrn5, 0, 12, '*');

             /*strng1*/
               mvwaddch(treescrn5, 3, 11, ' ');

             /*strng2*/
               mvwaddch(treescrn5, 5, 12, ' ');

             /*strng3*/
	       mvwaddch(treescrn5, 7, 14, ' ');
               mvwaddch(treescrn5, 8, 10, ' ');

             /*strng4*/
               mvwaddch(treescrn5, 9, 15, ' ');
               mvwaddch(treescrn5, 10, 11, ' ');
               mvwaddch(treescrn5, 11, 7, ' ');

             /*strng5*/
               mvwaddch(treescrn5, 11, 17, ' ');
               mvwaddch(treescrn5, 12, 13, ' ');

  /* treescrn6 */

               overlay(treescrn, treescrn6);

             /*balls*/
               mvwaddch(treescrn6, 6, 7, ' ');
               mvwaddch(treescrn6, 7, 18, ' ');
               mvwaddch(treescrn6, 10, 4, ' ');
               mvwaddch(treescrn6, 11, 23, ' ');

	     /*star*/
               wstandout(treescrn6);
               mvwaddch(treescrn6, 0, 12, '*');
               wstandend(treescrn6);

             /*strng1*/

             /*strng2*/
               mvwaddch(treescrn6, 5, 11, ' ');

             /*strng3*/
	       mvwaddch(treescrn6, 7, 13, ' ');
               mvwaddch(treescrn6, 8, 9, ' ');

             /*strng4*/
               mvwaddch(treescrn6, 9, 14, ' ');
               mvwaddch(treescrn6, 10, 10, ' ');
               mvwaddch(treescrn6, 11, 6, ' ');

             /*strng5*/
               mvwaddch(treescrn6, 11, 16, ' ');
               mvwaddch(treescrn6, 12, 12, ' ');

  /* treescrn7 */

               overlay(treescrn, treescrn7);

             /*balls*/
               mvwaddch(treescrn7, 3, 15, ' ');
               mvwaddch(treescrn7, 6, 7, ' ');
               mvwaddch(treescrn7, 7, 18, ' ');
               mvwaddch(treescrn7, 10, 4, ' ');
               mvwaddch(treescrn7, 11, 22, ' ');

             /*star*/
               mvwaddch(treescrn7, 0, 12, '*');

             /*strng1*/
               mvwaddch(treescrn7, 3, 12, ' ');

             /*strng2*/
               mvwaddch(treescrn7, 5, 13, ' ');
               mvwaddch(treescrn7, 6, 9, ' ');

	     /*strng3*/
               mvwaddch(treescrn7, 7, 15, ' ');
               mvwaddch(treescrn7, 8, 11, ' ');

             /*strng4*/
               mvwaddch(treescrn7, 9, 16, ' ');
               mvwaddch(treescrn7, 10, 12, ' ');
               mvwaddch(treescrn7, 11, 8, ' ');

             /*strng5*/
               mvwaddch(treescrn7, 11, 18, ' ');
	       mvwaddch(treescrn7, 12, 14, ' ');


    usleep(1000);
    reindeer();

    touchwin(w_holiday);
    wrefresh(w_holiday);
    wrefresh(w_del_msg);

    usleep(1000);
    for(loopy = 0;loopy < 100;loopy++)
    {
      blinkit();
    }

#ifdef NOLOOP
    done();
#endif

  }
  while(getch() == (ERR));
/*  while(!typeahead(stdin));*/
  done();
}