Кодування, тестування та відладка. Технічний опис реалізації програми на основі обраної раніше предметної області та передбачених функцій, страница 3

   p1 = new TProcess;

   p2->next = p1;

   if (Head == NULL)

   {

      Head = p1;

      curptr = p1;

   }

   p1->next = NULL; p1->ptr = ptr; p1->status = 0;

   p1->regs[DS] = _DS; p1->regs[ES] = _ES;

   p1->regs[CS] = FP_SEG(ptr);

   p1->regs[IP] = FP_OFF(ptr); p1->regs[FR] = _FLAGS;

   p1->regs[SS] = FP_SEG(p1->stk);

   p1->regs[SP] = FP_OFF(p1->stk) + STACK_SIZE * 2 - 4;

   p1->stk[STACK_SIZE-1] = FP_SEG(fststop);

   p1->stk[STACK_SIZE-2] = FP_OFF(fststop);

}

// ----------------------------------------------------------------------------

UINT* changeprocess(UINT *curr)

{

   TProcess* p1;

   TProcess* p2;

   UINT r[CREGS*2];

   if (fstrun != 1)

   {

      memcpy(curptr->regs, curr, sizeof(r));

      if (curptr->status == 2)

      {

         if (curptr != Head)

            {

                p1 = Head;

                while (p1->next != curptr)

                   p1 = p1->next;

                p2 = p1->next->next;

             free(p1->next);

             p1->next = p2;

             curptr = Head;

         }

            else

         {

             if (curptr->next == NULL)

                {

                   free(curptr);

                          return NULL;

                }

             p1 = Head; curptr = curptr->next;

             free(p1);

                Head = curptr;

         }

      }

      else if (curptr->next != NULL)

         curptr = curptr->next;

      else

         curptr = Head;

   }

   fstrun = 0;

   memcpy(&r, curptr->regs, sizeof(r));

   return (UINT*)&r;

}

// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

MAIN.CPP

// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

// Main.cpp

#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include <math.h>

#include <dos.h>

#include "tos.h"

// ----------------------------------------------------------------------------

#define  C   1000

#define  R   70

#define  NX  485

#define  NY  225

// ----------------------------------------------------------------------------

void proc1();

void proc2();

// ----------------------------------------------------------------------------

void main(void)

{

   TOS tos;

   int gd = 3;

   int gm = VGAHI;

   int err;

   randomize();

   initgraph(&gd, &gm, "");

   err = graphresult();

   if (err != grOk)

   {

      printf("ЋиЁЎЄ  Ё­ЁжЁ «Ё§ жЁЁ.\n");

      exit(1);

   }

unsigned int xMax= getmaxx();

   unsigned int yMax = getmaxy();

  line(xMax/2,0,xMax/2,yMax);

   tos.AddProcess(proc1);

   tos.AddProcess(proc2);

   tos.start();

   setcolor(0);

   for (int i = 0; i < getmaxy(); i+= 2)

   {

      line(0, i, getmaxx(), i);

      delay(1);

   }

   for (int j = 1; j < getmaxy(); j+= 2)

   {

      line(0, j, getmaxx(), j);

      delay(1);

   }

   closegraph();

}

// ----------------------------------------------------------------------------

void proc1()

{

   unsigned int MaxX = getmaxx();

   unsigned int MaxY = getmaxy();

   float CurX = MaxX / 4;

   float CurY = MaxY / 4;

   float Angle = 0.0f;

   float AngleDelta = 0.04f;//⥪гйЁ© гЈ®«

   for (int i = 0; i < 2048; i++)

   {

      CurX += sin(Angle);

      CurY += cos(Angle);

      setcolor(15);

      circle(int(CurX),int(CurY),10);

      Angle += AngleDelta;

      delay(10);

      setcolor(0);

      circle(int(CurX),int(CurY),10);

   }

}

// ----------------------------------------------------------------------------

void proc2()

{

   unsigned int MaxX = getmaxx();

   unsigned int MaxY = getmaxy();

   float CenterX = MaxX- MaxX/4 ;

   float CenterY = MaxY-MaxY/4  ;

   float Angle = 0.0f;

   float Size = 0.0f;

   float AngleDelta = -0.123f;

   float SizeDelta = 0.8f;

   char F = 0;

   for (int i = 0; i < 256; i++)

   {

      F = !F;

      float X1 = CenterX;

      float Y1 = CenterY-i;

      float X2 = CenterX+20;

      float Y2 = CenterY-i;

      float X3 = CenterX;

      float Y3 = (CenterY+20)-i;

      float X4 = CenterX +20;

      float Y4 = (CenterY+20)-i;

      setcolor(10);

      line(int(X1), int(Y1), int(X2), int(Y2));

      line(int(X3), int(Y3), int(X4), int(Y4));

      line(int(X1), int(Y1), int(X3), int(Y3));

      line(int(X2), int(Y2), int(X4), int(Y4));

      delay(80);

      setcolor(0);

      line(int(X1), int(Y1), int(X2), int(Y2));

      line(int(X3), int(Y3), int(X4), int(Y4));

      line(int(X1), int(Y1), int(X3), int(Y3));

      line(int(X2), int(Y2), int(X4), int(Y4));

   }

}

// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


Висновки:у ході виконання виконання лабораторної роботи створено технічний опис реалізації програми на основі обраної раніше предметної області та передбачених функцій.