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));
}
}
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Висновки:у ході виконання виконання лабораторної роботи створено технічний опис реалізації програми на основі обраної раніше предметної області та передбачених функцій.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.