grafika2

169
PENGANTAR GRAFIKA KOMPUTER A. Latar Belakang Perkembangan grafika komputer menuntut para pengembang sistem aplikasi grafika komputer untuk dapat mengembangkan suatu informasi yang dilengkapi dengan visualisasi dan animasi, agar dapat lebih mudah dipahami oleh pihak yang menggunakan sistem tersebut. Grafika komputer telah menunjukkan kemajuan yang pesat dalam pengembangan berbagai aplikasi untuk menghasilkan gambar. Grafika komputer digunakan untuk menunjang berbagai bidang dengan teknologi grafika berbasis komputer. Penggunaan grafika komputer telah lama digunakan dalam beberapa macam aplikasi, diantaranya pendidikan, kedokteran, fisika, matematika, multimedia, dan lain- lain. Pada saat ini grafika komputer sudah digunakan pada bidang sains, engineering, kedokteran, bisnis, industri, pemerintahan, seni, hiburan, iklan, pendidikan, dan lain-lain. Oleh karena itu, sudah semakin banyak pula bahasa pemrograman yang dilengkapi dengan tools/library pembuatan grafik Salah satu tools/library pembuatan aplikasi grafik adalah OpenGL(Open Graphics Library). OpenGL(Open Graphics Library) adalah suatu spefikasi grafik yang low-level yang menyediakan fungsi untuk pembuatan grafik primitif termasuk titik, garis, dan lingkaran. OpenGL digunakan untuk mendefinisikan suatu objek, baik objek 2 dimensi maupun objek 3 dimensi. OpenGL juga merupakan suatu antarmuka pemrograman aplikasi (application programming interface (API) yang tidak tergantung pada piranti dan platform yang digunakan, sehingga OpenGL dapat berjalan pada sistem operasi Windows, UNIX dan

Upload: damar507

Post on 23-Oct-2014

132 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: grafika2

PENGANTAR GRAFIKA KOMPUTER

A. Latar Belakang

Perkembangan grafika komputer menuntut para pengembang sistem aplikasi grafika komputer

untuk dapat mengembangkan suatu informasi yang dilengkapi dengan visualisasi dan animasi,

agar dapat lebih mudah dipahami oleh pihak yang menggunakan sistem tersebut. Grafika

komputer telah menunjukkan kemajuan yang pesat dalam pengembangan berbagai aplikasi untuk

menghasilkan gambar.

Grafika komputer digunakan untuk menunjang berbagai bidang dengan teknologi grafika

berbasis komputer. Penggunaan grafika komputer telah lama digunakan dalam beberapa macam

aplikasi, diantaranya pendidikan, kedokteran, fisika, matematika, multimedia, dan lain-lain. Pada

saat ini grafika komputer sudah digunakan pada bidang sains, engineering, kedokteran, bisnis,

industri, pemerintahan, seni, hiburan, iklan, pendidikan, dan lain-lain. Oleh karena itu, sudah

semakin banyak pula bahasa pemrograman yang dilengkapi dengan tools/library pembuatan

grafik Salah satu tools/library pembuatan aplikasi grafik adalah OpenGL(Open Graphics

Library).

OpenGL(Open Graphics Library) adalah suatu spefikasi grafik yang low-level yang

menyediakan fungsi untuk pembuatan grafik primitif termasuk titik, garis, dan lingkaran.

OpenGL digunakan untuk mendefinisikan suatu objek, baik objek 2 dimensi maupun objek 3

dimensi. OpenGL juga merupakan suatu antarmuka pemrograman aplikasi (application

programming interface (API) yang tidak tergantung pada piranti dan platform yang digunakan,

sehingga OpenGL dapat berjalan pada sistem operasi Windows, UNIX dan sistem operasi

lainnya. OpenGL pada awalnya didesain untuk digunakan pada bahasa pemrograman C/C++,

namun dalam perkembangannya OpenGL dapat juga digunakan dalam bahasa pemrograman

yang lain seperti Java, Tcl, Ada, Visual Basic, Delphi, maupun Fortran. Namun OpenGL di-

package secara berbeda-beda sesuai dengan bahasa pemrograman yang digunakan.

B. Definisi Grafika Komputer

Menurut Suyoto (2003), grafika komputer (Computer Graphics) dapat diartikan sebagai

perangkat alat yang terdiri dari hardware dan software untuk membuat gambar, grafik atau citra

realistik untuk seni, game komputer, foto dan film animasi. Sistem grafika komputer dapat

dijalankan dengan komputer pribadi (Personal Computer) atau pada workstation. Grafika

Page 2: grafika2

komputer semakin lama semakin pesat perkembangannya, sehingga definisi dari Grafika

komputer dapat diartikan sebagai suatu studi tentang bagaimana menggambar (membuat grafik)

dengan menggunakan komputer dan manipulasinya (merubahsedikit/transformasi/animasi).

Pengertian Grafik berbeda dengan image/citra, image adalah gambar yang diperoleh dengan alat

pengambil gambar, seperti kamera, scanner, dll. Sedangkan Grafik adalah gambar yang dibuat

dengan cara tertentu, yaitu cara yang ada di grafika komputer. Grafik dan image keduanya

termasuk picture / gambar.

C. Aplikasi-Aplikasi Grafika Komputer

a. Computer-Aided Design (CAD)

CAD adalah alat bantu berbasis komputer yang digunakan dalam proses analisis dam desain,

khusunya untuk sistem arsitektural dan engineering. CAD banyak digunakan dalam mendesain

bagunan, mobil, pesawat, komputer, alat-alat elektronik, peralatan rumah tangga, dan berbagai

produk lainnya. Contoh aplikasinya: AutoCAD.

Computer-Aided Sofware Engineering (CASE)

CASE mirip dengan CAD tetapi digunakan dalam bidang sofware engineering. CASE digunakan

dalam memodelkan user requirement, pemodelan basisdata, workflow dalam proses bisnis,

struktur program, dan sebagainya. Contoh aplikasi: Rational Rose, SyBase Power Designer.

Page 3: grafika2

Virtual Reality

Virtual Reality adalah lingkungan virtual yang seakan-akan begitu nyata di mana user dapat

berinteraksi dengan objek-objek dalam suasana atau lingkungan 3 dimensi. Perangkat keras

khusus digunakan untuk memberikan efek pemadangan 3 dimensi dan memampukan user

beriteraksi dengan objek-objek yang ada dalam lingkungan. Contoh: aplikasi VR parachute

trainer yang digunakan oleh U.S. Navy untuk latihan terjun payung. Aplikasi ini dapat

memberikan keutungan berupa mengurangi resiko cedera selama latihan, mengurangi biaya

penerbangan, melatih perwira sebelum melakukan terjun payung sesungguhnya.

Page 4: grafika2

Visualisasi Data

Visualisasi Data adalah teknik-teknik membuat image, diagram, atau animasi untuk

mengkomunikasikan pesan. Visualisasi telah menjadi cara yang efektif dalam

mengkomunikasikan baik data atau ide abstrak maupun nyata sejak permulaan manusia. Contoh:

visualisasi dari struktur protein, strutur suatu website, visualisasi hasil data mining.

e. Pendidikan dan Pelatihan

Model-model yang dihasilkan melalui komputer yang tentunya menggunakan grafis biasa

digunakan sebagai alat bantu pendidikan. Model-model seperti proses-proses fisika dan kimia,

fungsi-fungsi psikologi, simulasi, dan sebagainya dapat membantu sesorang memahami

bagaimana operasi atau proses yang terjadi dalam suatu sistem. Contoh: simulasi rangkaian

elektronik untuk pembelajaran, salah satu aplikasinya Electroni workbench.

Page 5: grafika2

f. Computer Art

Computer art adalah penggunaan komputer grafis untuk menghasilkan karya-karya seni. Hasil

dapat berupa kartun, potret, foto, layout media cetak, logo, lukisan abstrak, desain interior atau

eksterior, dan lain sebagainya. Contoh: Adobe Photoshop, Corel Painter, GIMP.

g. Hiburan

Komputer grafis juga digunakan secara luas pada bidang entertainment khususnya pertelevisian,

motion pictures, animasi, video clips, dan sebagainya. Film-film animasi yagn berdar di pasaran

seperti Shrek, Monster Inc., anime-anime Jepang, menggunakan komputer grafis.

h. Video Game

Video game adalah permainan yang melibatkan interaksi dengan user interface untuk

menghasilkan umpan balik berupa visualisasi pada perangkat video. Aplikasi banyak beredar di

pasaran mulai yang sederhana 2 dimensi, seperti tetris, hingga yang rumit, 3 dimensi, dan

Page 6: grafika2

memerlukan resource banyak, seperti game sepakbola Winning Eleven. Dari yang yang

standalone hingga online network, seperti Ragnarok. Dari PC, console, hingga mobile devices.

i. Pengolahan Citra

Pengolahan citra berkaitan dengan teknik-teknik untuk modifikasi dna intepretasi citra,

meningkatkan kualitas citra, analisis citra, dan mengenali pola-pola visual yang ada dalam suatu

citra. Contoh: perbaikan citra sehingga menjadi lebih jelas.

Compute Vision adalah ilmu pengetahuan dan teknologi dari mesin-mesin yang dapat melihat.

Sebagai disiplin ilmu, computer vision berkaitan dengan teori untuk membangun sistem buatan

yang dapat menarik informasi dari citra-citra. Informasi tersebut kemudian dapat digunakan

sebagai input dalam mengambil keputusan atau tindakan. Data citra yang diambil dapat berupa

video, citra dari berbagai kamera, dan sebagainya.

k. Graphical User Interface

Page 7: grafika2

Graphical User Inteface adalah antarmuka grafis yang mempermudah interaksi manusia dengan

komputer dan alat-alat yang dikendalikan oleh komputer. GUI sudah sering kita lihat berupa

window-window yang digunakan pada sistem operasi Windows, Mac, maupun Linux.

Page 8: grafika2

#include<stdio.h>

#include<stdlib.h>

#include<windows.h>

#include<GL/gl.h>

#include <math.h>

#include <stdio.h>

#include <GL/glut.h>

#define dx 15

#define dy 25

void *currentfont;

int window;

GLfloat x[25];

GLfloat y[20];

GLint i,j,k;

int w,h;

void setFont(void *font)

{

currentfont=font;

}

Page 9: grafika2

void drawstring(float x,float y,float z,char *string)

{

char *c;

glRasterPos3f(x,y,z);

for(c=string;*c!='\0';c++)

{ glColor3f(0.0,0.0,0.0);

glutBitmapCharacter(currentfont,*c);

}

}

void text(void) // to draw the text in menu screen

{

setFont(GLUT_BITMAP_HELVETICA_18);

glColor3f(1.0,1.0,1.0);

drawstring(95.0,455.0,1.0,"* * * * * * * * * S E L E C T I V E R E P E A T A R Q * * * * * * * * *");

glColor3f(1.0,1.0,1.0);

drawstring(210.0,405.0,1.0,"SEND WINDOW");

glColor3f(1.0,1.0,1.0);

drawstring(200.0,350.0,1.0," RECEIVE WINDOW");

glColor3f(1.0,1.0,1.0);

drawstring(210.0,295.0,1.0,"SAFE SENDING");

Page 10: grafika2

glColor3f(1.0,1.0,1.0);

drawstring(200.0,240.0,1.0,"PACKET CRASHING");

glColor3f(1.0,1.0,1.0);

drawstring(215.0,185.0,1.0," TIME OUT");

glColor3f(1.0,1.0,1.0);

drawstring(225.0,130.0,1.0," EXIT");

glFlush();

}

void draw() // TO DRAW POLYGON FOR DISPLAY MENUS

{

glClear(GL_COLOR_BUFFER_BIT);

glBegin(GL_POLYGON); // send window

glColor3f(0.7f,0.2f,0.2f);

glVertex2i(305,425);

glVertex2i(180,425);

glVertex2i(180,395);

glVertex2i(305,395);

glEnd();

glFlush();

glBegin(GL_POLYGON); // recieve window

glColor3f(0.7f,0.2f,0.2f);

glVertex2i(305,370);

glVertex2i(180,370);

Page 11: grafika2

glVertex2i(180,340);

glVertex2i(305,340);

glEnd();

glFlush();

glBegin(GL_POLYGON); // safe sending

glColor3f(0.7f,0.2f,0.2f);

glVertex2i(305,315);

glVertex2i(180,315);

glVertex2i(180,285);

glVertex2i(305,285);

glEnd();

glFlush();

glBegin(GL_POLYGON); // packet crashing

glColor3f(0.7f,0.2f,0.2f);

glVertex2i(305,260);

glVertex2i(180,260);

glVertex2i(180,230);

glVertex2i(305,230);

glEnd();

glFlush();

glBegin(GL_POLYGON); // time out

glColor3f(0.7f,0.2f,0.2f);

glVertex2i(305,205);

glVertex2i(180,205);

Page 12: grafika2

glVertex2i(180,175);

glVertex2i(305,175);

glEnd();

glFlush();

glBegin(GL_POLYGON); // exit

glColor3f(0.7f,0.2f,0.2f);

glVertex2i(305,150);

glVertex2i(180,150);

glVertex2i(180,120);

glVertex2i(305,120);

glEnd();

glFlush();

}

void myInit()

{

glClearColor(0.0,0.0,0.0,0.0);

glColor3f(0.0f,0.0f,0.0f);

glPointSize(5.0);

gluOrtho2D(0.0,500.0,0.0,500.0);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

setFont(GLUT_BITMAP_HELVETICA_18);

}

void computer() // to draw the sender and receiver computers

{

Page 13: grafika2

glColor3f(1.0f,1.0f,1.0f);

setFont(GLUT_BITMAP_HELVETICA_12);

drawstring(95.0,420.0,1.0,"SENDER");

glColor3f(1.0f,1.0f,1.0f);

drawstring(345.0,420.0,1.0,"RECEIVER");

glColor3f(0.7,0.2,0.0);//monitor

glBegin(GL_LINE_LOOP);

glVertex2f(85,380);

glVertex2f(85,440);

glVertex2f(150,440);

glVertex2f(150,380);

glEnd();

glFlush();

glColor3f(0.7,0.2,0.0);//monitor

glBegin(GL_LINE_LOOP);

glVertex2f(87,382);

glVertex2f(87,438);

glVertex2f(148,438);

glVertex2f(148,382);

glEnd();

glFlush();

glColor3f(0.7,0.0,0.2);//vertical stand

glBegin(GL_LINES);

glVertex2f(105,380);

Page 14: grafika2

glVertex2f(105,375);

glVertex2f(129,380);

glVertex2f(129,375);

glEnd();

glFlush();

glColor3f(0.7,0.3,0.2); //horizontal stand

glBegin(GL_QUADS);

glVertex2f(98,370);

glVertex2f(98,375);

glVertex2f(138,375);

glVertex2f(138,370);

glEnd();

glFlush();

glColor3f(0.7,0.2,0.2); //CPU

glBegin(GL_LINE_LOOP);

glVertex2f(80,350);

glVertex2f(80,370);

glVertex2f(155,370);

glVertex2f(155,350);

glEnd();

glFlush();

glColor3f(0.7,0.8,0.2); //CPU

glBegin(GL_QUADS);

glVertex2f(95,360);

Page 15: grafika2

glVertex2f(95,365);

glVertex2f(115,365);

glVertex2f(115,360);

glEnd();

glFlush();

glColor3f(0.7,0.2,0.8); //CPU

glBegin(GL_QUADS);

glVertex2f(132,358);

glVertex2f(132,361);

glVertex2f(140,361);

glVertex2f(140,358);

glEnd();

glFlush();

glColor3f(0.7,0.2,0.2);//keyboard outline

glBegin(GL_LINE_LOOP);

glVertex2f(77,325);

glVertex2f(87,350);

glVertex2f(148,350);

glVertex2f(158,325);

glEnd();

glFlush();

glColor3f(0.7,0.2,0.2);//keyboard outline

glBegin(GL_POLYGON);

glVertex2f(77,325);

Page 16: grafika2

glVertex2f(158,325);

glVertex2f(158,322);

glVertex2f(77,322);

glEnd();

glFlush();

glColor3f(0.7,0.0,0.2); //horizontal lines of keyboard

glBegin(GL_LINES);

glVertex2f(85,345);

glVertex2f(150,345);

glVertex2f(83,340);

glVertex2f(152,340);

glVertex2f(81,335);

glVertex2f(154,335);

glVertex2f(79,330);

glVertex2f(156,330);

glVertex2f(77,325);

glVertex2f(158,325);

glEnd();

glFlush();

glColor3f(0.7,0.0,0.2); //vertical lines of keyboard

glBegin(GL_LINES);

glVertex2f(89,322);

glVertex2f(97,350);

glVertex2f(103,322);

glVertex2f(107,350);

Page 17: grafika2

glVertex2f(117,322);

glVertex2f(117,350);

glVertex2f(131,322);

glVertex2f(127,350);

glVertex2f(145,322);

glVertex2f(137,350);

glEnd();

glFlush();

// COMPUTER AT RECEIVER

glColor3f(0.7,0.2,0.0);//monitior

glBegin(GL_LINE_LOOP);

glVertex2f(335,380);

glVertex2f(335,440);

glVertex2f(400,440);

glVertex2f(400,380);

glEnd();

glFlush();

glColor3f(0.7,0.2,0.0);//monitior

glBegin(GL_LINE_LOOP);

glVertex2f(337,382);

glVertex2f(337,438);

glVertex2f(398,438);

glVertex2f(398,382);

glEnd();

glFlush();

Page 18: grafika2

glColor3f(0.7,0.0,0.2);//ver

glBegin(GL_LINES);

glVertex2f(355,380);

glVertex2f(355,375);

glVertex2f(379,380);

glVertex2f(379,375);

glEnd();

glFlush();

glColor3f(0.7,0.3,0.2);//hor

glBegin(GL_QUADS);

glVertex2f(348,370);

glVertex2f(348,375);

glVertex2f(388,375);

glVertex2f(388,370);

glEnd();

glFlush();

glColor3f(0.7,0.2,0.2);//CPU

glBegin(GL_LINE_LOOP);

glVertex2f(330,350);

glVertex2f(330,370);

glVertex2f(405,370);

glVertex2f(405,350);

glEnd();

glFlush();

Page 19: grafika2

glColor3f(0.7,0.8,0.2); //CPU

glBegin(GL_QUADS);

glVertex2f(345,360);

glVertex2f(345,365);

glVertex2f(365,365);

glVertex2f(365,360);

glEnd();

glFlush();

glColor3f(0.7,0.2,0.8); //CPU

glBegin(GL_QUADS);

glVertex2f(382,358);

glVertex2f(382,361);

glVertex2f(390,361);

glVertex2f(390,358);

glEnd();

glFlush();

glColor3f(0.7,0.2,0.2);//keyboard

glBegin(GL_LINE_LOOP);

glVertex2f(327,322);

glVertex2f(337,350);

glVertex2f(398,350);

glVertex2f(408,322);

glEnd();

glFlush();

Page 20: grafika2

glColor3f(0.7,0.2,0.2);//keyboard

glBegin(GL_POLYGON);

glVertex2f(327,325);

glVertex2f(408,325);

glVertex2f(408,322);

glVertex2f(327,322);

glEnd();

glFlush();

glColor3f(0.7,0.0,0.2); //horizontal lines of keyboard

glBegin(GL_LINES);

glVertex2f(335,345);

glVertex2f(400,345);

glVertex2f(333,340);

glVertex2f(402,340);

glVertex2f(331,335);

glVertex2f(404,335);

glVertex2f(329,330);

glVertex2f(406,330);

glVertex2f(327,325);

glVertex2f(408,325);

glEnd();

glFlush();

glColor3f(0.7,0.0,0.2); //vertical lines of keyboard

glBegin(GL_LINES);

glVertex2f(339,322);

Page 21: grafika2

glVertex2f(347,350);

glVertex2f(353,322);

glVertex2f(357,350);

glVertex2f(367,322);

glVertex2f(367,350);

glVertex2f(381,322);

glVertex2f(377,350);

glVertex2f(395,322);

glVertex2f(387,350);

glEnd();

glFlush();

glColor3f(0.3,0.6,0.8);//connectin wire

glBegin(GL_LINES);

glVertex2f(155,360);

glVertex2f(330,360);

glEnd();

glFlush();

glColor3f(1.0,0.0,0.0);

glBegin(GL_POLYGON);

glVertex2f(410,425);

glVertex2f(410,430);

glVertex2f(425,430);

glVertex2f(425,425);

glEnd();

glFlush();

Page 22: grafika2

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0,1.0,1.0);

drawstring(432.0,425.5,1.0,"DATA FRAMES");

glFlush();

glColor3f(0.0,1.0,1.0);

glBegin(GL_POLYGON);

glVertex2f(410,410);

glVertex2f(410,415);

glVertex2f(420,415);

glVertex2f(420,410);

glEnd();

glFlush();

glColor3f(1.0,1.0,1.0);

drawstring(432.0,410.5,1.0,"ACK ");

glFlush();

glColor3f(1.0,1.0,0.0);

glBegin(GL_POLYGON);

glVertex2f(410,395);

glVertex2f(410,400);

glVertex2f(420,400);

glVertex2f(420,395);

glEnd();

glFlush();

Page 23: grafika2

glColor3f(1.0,1.0,1.0);

drawstring(432.0,395.5,1.0,"NAK");

glFlush();

}

void slide(GLint maxx,GLint maxy,GLfloat x0,GLfloat y0) // TO DRAW WINDOWS (Rectangular Mesh)

{

for(i=0;i<maxx;i++)

x[i]=x0+i*dx;

for(j=0;j<maxy;j++)

y[j]=y0+j*dy;

for(i=0;i<maxx-1;i++)

for(j=0;j<maxy-1;j++)

{

glBegin(GL_LINE_LOOP);

glVertex2f(x[i],y[j]);

glVertex2f(x[i],y[j+1]);

glVertex2f(x[i+1],y[j+1]);

glVertex2f(x[i+1],y[j]);

glEnd();

glFlush();

}

}

Page 24: grafika2

void delay()

{

j=28000;

while(j!=0)

{

j--;

i=28000;

while(i!=0)

{

i--;

}

}

}

void timer0()

{

glColor3f(1.4,1.9,0.78);

glBegin(GL_LINE_LOOP); // timer for frame 0

glVertex2f(100,120);

glVertex2f(100,130);

glVertex2f(225,130);

glVertex2f(225,120);

glEnd();

glFlush();

}

Page 25: grafika2

void timer1()

{

glColor3f(1.4,1.9,0.78);

glBegin(GL_LINE_LOOP); // timer for frame 1

glVertex2f(100,100);

glVertex2f(100,110);

glVertex2f(225,110);

glVertex2f(225,100);

glEnd();

glFlush();

}

void timer2()

{

glColor3f(1.4,1.9,0.78);

glBegin(GL_LINE_LOOP); // timer for frame 2

glVertex2f(100,80);

glVertex2f(100,90);

glVertex2f(225,90);

glVertex2f(225,80);

glEnd();

glFlush();

}

void timer3()

{

glColor3f(1.4,1.9,0.78);

Page 26: grafika2

glBegin(GL_LINE_LOOP); // timer for frame 3

glVertex2f(360,120);

glVertex2f(360,130);

glVertex2f(485,130);

glVertex2f(485,120);

glEnd();

glFlush();

}

void timer4()

{

glColor3f(1.4,1.9,0.78);

glBegin(GL_LINE_LOOP); // timer for frame 4

glVertex2f(360,100);

glVertex2f(360,110);

glVertex2f(485,110);

glVertex2f(485,100);

glEnd();

glFlush();

}

void timer(float k,float l,float m,float n)

{

glColor3f(1.4,1.9,0.78);

glBegin(GL_POLYGON); // to call timer functions

glVertex2f(l,m);

glVertex2f(l,n);

glVertex2f(l+k,n);

Page 27: grafika2

glVertex2f(l+k,m);

glEnd();

glFlush();

}

void title()// to draw the starting screen

{

setFont(GLUT_BITMAP_HELVETICA_18);

glColor3f(1.0,1.0,1.0);

drawstring(20.0,435.0,1.0,"* * G R A P H I C A L I L L U S T R A T I O N OF S E L E C T I V E R E P E A T A R Q P R O T O C O L * *");

glColor3f(1.0,1.0,1.0);

drawstring(210.0,365.0,1.0,"SUBMITTED BY");

glColor3f(0.0,1.0,1.0);

drawstring(180.0,340.0,1.0," Name USN");

glColor3f(0.0,1.0,1.0);

drawstring(180.0,320.0,1.0," Name USN");

glColor3f(1.0,1.0,1.0);

drawstring(190.0,260.0,1.0,"UNDER THE GUIDANCE OF");

glColor3f(0.0,1.0,1.0);

drawstring(70.0,230.0,1.0," Guide ");

Page 28: grafika2

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(0.0,1.0,1.0);

drawstring(190.0,230.0,1.0," Guide Degrees .");

glColor3f(0.0,1.0,1.0);

drawstring(70.0,215.0,1.0," Lecturer, Dept of CS&E");

glColor3f(0.0,1.0,1.0);

drawstring(70.0,200.0,1.0," College");

setFont(GLUT_BITMAP_HELVETICA_18);

glColor3f(0.0,1.0,1.0);

drawstring(280.0,230.0,1.0," same");

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(0.0,1.0,1.0);

drawstring(360.0,230.0,1.0," same,");

glColor3f(0.0,1.0,1.0);

drawstring(285.0,215.0,1.0," same");

glColor3f(0.0,1.0,1.0);

drawstring(285.0,200.0,1.0," same above");

glFlush();

}

void move1() //MOVEMENT OF FRAME 0 (in safe sending)

{

Page 29: grafika2

GLint i,j, temp=3;

glColor3f(1.0,0.8,0.4);

setFont(GLUT_BITMAP_HELVETICA_18);

drawstring(30.0,125.0,1.0," Timer 0");

timer0();

float k=0;

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0f,1.0f,0.0f);

drawstring(160.0,370.0,1.0,"FRAME 0 sending ...........");

for(j=0;j<4;j=j+temp) //movement of data packet within the frame

{ glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(55,265-j);glVertex2i(55,280-j);glVertex2i(60,280-j);glVertex2i(60,265-j);

glEnd();

glFlush();

glColor3f(0,0,0); // to remove traces create movement of frame in black

glBegin(GL_QUADS);

glVertex2i(55,265-j);glVertex2i(55,280-j);glVertex2i(60,280-j);glVertex2i(60,265-j);

glEnd();

glFlush();

}

Page 30: grafika2

for(j=0;j<60;j=j+temp) //movement of data packet from top to down

{ glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(55,238-j);glVertex2i(55,253-j);glVertex2i(60,253-j);glVertex2i(60,238-j);

glEnd();

glFlush();

k+=0.05;

timer(k,102.5,122,128);

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(55,238-j);glVertex2i(55,253-j);glVertex2i(60,253-j);glVertex2i(60,238-j);

glEnd();

glFlush();

}

for(i=0;i<231;i=i+temp) //movement of data packet sidewise

{ glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(60+i,178);glVertex2i(60+i,183);glVertex2i(75+i,183);glVertex2i(75+i,178);

glEnd();

glFlush();

Page 31: grafika2

k+=0.05;

timer(k,102.5,122,128);

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(60+i,178);glVertex2i(60+i,183);glVertex2i(75+i,183);glVertex2i(75+i,178);

glEnd();

glFlush();

}

for(j=0;j<60;j=j+temp) //to move the packet from bottom to top

{

glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(305,178+j);glVertex2i(305,193+j);glVertex2i(310,193+j);glVertex2i(310,178+j);

glEnd();

glFlush();

k+=0.05;

timer(k,102.5,122,128);

glColor3f(0,0,0);

glBegin(GL_QUADS);

Page 32: grafika2

glVertex2i(305,178+j);glVertex2i(305,193+j);glVertex2i(310,193+j);glVertex2i(310,178+j);

glEnd();

glFlush();

}

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(0.0f,0.0f,0.0f);

drawstring(160.0,370.0,1.0,"FRAME 0 sending ...........");

glColor3f(1.0,1.0,0.0);

drawstring(160.0,370.0,1.0,"FRAME 0 sent");

// delay();

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(0.0,0.0,0.0);

drawstring(160.0,370.0,1.0,"FRAME 0 sent");

}

void move2() // SIMULTANEOUS MOVEMENT OF ACK 1 AND FRAME 1(in safe sending)

{

GLint i,j, temp=3;

setFont(GLUT_BITMAP_HELVETICA_18);

glColor3f(1.0,0.8,0.4);

Page 33: grafika2

drawstring(30.0,105.0,1.0," Timer 1");

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0f,1.0f,0.0f);

drawstring(160.0,370.0,1.0,"FRAME 1 sending ...........");

glColor3f(1.0f,1.0f,0.0f);

drawstring(230.0,345.0,1.0,"........... sending ACK1 ");

timer1();

float k=0,l=0;

for(j=0;j<4;j=j+temp) //movement of data packet within the frame

{ glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(320,265-j);glVertex2i(320,275-j);glVertex2i(325,275-j);glVertex2i(325,265-j);

glEnd();

glFlush();

glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(70,265-j);glVertex2i(70,280-j);glVertex2i(75,280-j);glVertex2i(75,265-j);

glEnd();

glFlush();

glColor3f(0,0,0);

Page 34: grafika2

glBegin(GL_QUADS);

glVertex2i(70,265-j);glVertex2i(70,280-j);glVertex2i(75,280-j);glVertex2i(75,265-j);

glEnd();

glFlush();

glColor3f(0,0,0); // to remove traces create movement of frame in black

glBegin(GL_QUADS);

glVertex2i(320,265-j);glVertex2i(320,275-j);glVertex2i(325,275-j);glVertex2i(325,265-j);

glEnd();

glFlush();

}

for(j=0;j<60;j=j+temp) //movement of data packet from top to down

{ glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(320,228-j);glVertex2i(320,238-j);glVertex2i(325,238-j);glVertex2i(325,228-j);

glEnd();

glFlush();

glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(70,238-j);glVertex2i(70,253-j);glVertex2i(75,253-j);glVertex2i(75,238-j);

glEnd();

glFlush();

k+=0.05;

timer(k,156.5,122,128);

Page 35: grafika2

timer(k,102.5,102,108);

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(320,228-j);glVertex2i(320,238-j);glVertex2i(325,238-j);glVertex2i(325,228-j);

glEnd();

glFlush();

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(70,238-j);glVertex2i(70,253-j);glVertex2i(75,253-j);glVertex2i(75,238-j);

glEnd();

glFlush();

}

for(i=0;i<235;i=i+temp) //movement of data packet sidewise

{ glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(310-i,168);glVertex2i(310-i,173);glVertex2i(320-i,173);glVertex2i(320-i,168);

glEnd();

glFlush();

glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(70+i,178);glVertex2i(70+i,183);glVertex2i(85+i,183);glVertex2i(85+i,178);

glEnd();

Page 36: grafika2

glFlush();

k+=0.05;

timer(k,156.5,122,128);

timer(k,102.5,102,108);

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(310-i,168);glVertex2i(310-i,173);glVertex2i(320-i,173);glVertex2i(320-i,168);

glEnd();

glFlush();

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(70+i,178);glVertex2i(70+i,183);glVertex2i(85+i,183);glVertex2i(85+i,178);

glEnd();

glFlush();

}

for(j=0;j<63;j=j+temp) //to move the packet from bottom to top

{

glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(70,168+j);glVertex2i(70,178+j);glVertex2i(75,178+j);glVertex2i(75,168+j);

glEnd();

glFlush();

glColor3f(1,0,0);

glBegin(GL_QUADS);

Page 37: grafika2

glVertex2i(320,178+j);glVertex2i(320,193+j);glVertex2i(325,193+j);glVertex2i(325,178+j);

glEnd();

glFlush();

k+=0.05;

timer(k,156.5,122,128);

timer(k,102.5,102,108);

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(70,168+j);glVertex2i(70,178+j);glVertex2i(75,178+j);glVertex2i(75,168+j);

glEnd();

glFlush();

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(320,178+j);glVertex2i(320,193+j);glVertex2i(325,193+j);glVertex2i(325,178+j);

glEnd();

glFlush();

}

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(0.0f,0.0f,0.0f);

drawstring(160.0,370.0,1.0,"FRAME 1 sending ...........");

glColor3f(0.0f,0.0f,0.0f);

Page 38: grafika2

drawstring(230.0,345.0,1.0,"........... sending ACK1 ");

glColor3f(1.0,1.0,0.0);

drawstring(160.0,370.0,1.0,"FRAME 1 sent ");

glColor3f(1.0f,1.0f,0.0f);

drawstring(230.0,345.0,1.0,"ACK1 Recieved ");

glColor3f(0.0,0.0,0.0);

glBegin(GL_POLYGON);

glVertex2f(10,115);

glVertex2f(10,135);

glVertex2f(230,135);

glVertex2f(230,115);

glEnd();

glFlush();

setFont(GLUT_BITMAP_HELVETICA_18);

glColor3f(1.0,0.8,0.4);

drawstring(80.0,125.0,1.0," Frame 0 sent successfully");

// delay();

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(0.0,0.0,0.0);

Page 39: grafika2

drawstring(160.0,370.0,1.0,"FRAME 1 sent ");

glColor3f(0.0f,0.0f,0.0f);

drawstring(230.0,345.0,1.0,"ACK1 Recieved ");

}

void move3() // MOVEMENT OF FRAME 2 ( FRAME 2 lost in packet crashing)

{

GLint i,j, temp=3;

float k=0;

timer2();

glColor3f(1.0,0.8,0.4);

setFont(GLUT_BITMAP_HELVETICA_18);

drawstring(30.0,85.0,1.0,"Timer 2");

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0f,1.0f,0.0f);

drawstring(160.0,370.0,1.0,"FRAME 2 sending ...........");

for(j=0;j<4;j=j+temp) //movement of data packet within the frame

{

glColor3f(1,0,0);

glBegin(GL_QUADS);

Page 40: grafika2

glVertex2i(85,265-j);glVertex2i(85,280-j);glVertex2i(90,280-j);glVertex2i(90,265-j);

glEnd();

glFlush();

k+=0.05;

timer(k,102.5,82,88);

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(85,265-j);glVertex2i(85,280-j);glVertex2i(90,280-j);glVertex2i(90,265-j);

glEnd();

glFlush();

}

for(j=0;j<60;j=j+temp) //movement of data packet from top to down

{ glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(85,238-j);glVertex2i(85,253-j);glVertex2i(90,253-j);glVertex2i(90,238-j);

glEnd();

glFlush();

k+=0.05;

timer(k,102.5,82,88);

glColor3f(0,0,0);

Page 41: grafika2

glBegin(GL_QUADS);

glVertex2i(85,238-j);glVertex2i(85,253-j);glVertex2i(90,253-j);glVertex2i(90,238-j);

glEnd();

glFlush();

}

for(i=0;i<167;i=i+temp) //movement of data packet sidewise

{ glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(85+i,178);glVertex2i(85+i,183);glVertex2i(100+i,183);glVertex2i(100+i,178);

glEnd();

glFlush();

k+=0.05;

timer(k,102.5,82,88);

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(85+i,178);glVertex2i(85+i,183);glVertex2i(100+i,183);glVertex2i(100+i,178);

glEnd();

glFlush();

}

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(0.0f,0.0f,0.0f);

drawstring(160.0,370.0,1.0,"FRAME 2 sending ...........");

Page 42: grafika2

glColor3f(1.0f,1.0f,0.0f);

drawstring(160.0,365.0,1.0,"FRAME 2 lost");

glColor3f(1.0f,1.0f,0.0f);

drawstring(280.0,163.0,1.0,"FRAME 2 lost");

// delay();

glColor3f(0.0f,0.0f,0.0f);

drawstring(160.0,365.0,1.0,"FRAME 2 lost")

}

void move4() // RESENDING OF FRAME 2 (in packet crashing)

{

GLint i,j, temp=3;

timer2();

timer4();

timer3();

float k=0;

float p=0;

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0f,1.0f,1.0f);

drawstring(160.0,370.0,1.0,"FRAME 2 Resending ...........");

Page 43: grafika2

for(j=0;j<4;j=j+temp) //movement of data packet within the frame

{ glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(85,265-j);glVertex2i(85,280-j);glVertex2i(90,280-j);glVertex2i(90,265-j);

glEnd();

glFlush();

k+=0.03;

timer(k,102.5,82,88);

glColor3f(0,0,0); // to remove traces create movement of frame in black

glBegin(GL_QUADS);

glVertex2i(85,265-j);glVertex2i(85,280-j);glVertex2i(90,280-j);glVertex2i(90,265-j);

glEnd();

glFlush();

}

for(j=0;j<60;j=j+temp) //movement of data packet from top to down

{ glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(85,238-j);glVertex2i(85,253-j);glVertex2i(90,253-j);glVertex2i(90,238-j);

glEnd();

glFlush();

k+=0.03;

timer(k,102.5,82,88);

timer(k,396.5,102,108);

Page 44: grafika2

p+=0.01;

timer(p,430.5,122,128);

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(85,238-j);glVertex2i(85,253-j);glVertex2i(90,253-j);glVertex2i(90,238-j);

glEnd();

glFlush();

}

for(i=0;i<231;i=i+temp) //movement of data packet sidewise

{ glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(85+i,178);glVertex2i(85+i,183);glVertex2i(100+i,183);glVertex2i(100+i,178);

glEnd();

glFlush();

k+=0.03;

timer(k,102.5,82,88);

timer(k,396.5,102,108);

p+=0.01;

timer(p,430.5,122,128);

glColor3f(0,0,0);

glBegin(GL_QUADS);

Page 45: grafika2

glVertex2i(85+i,178);glVertex2i(85+i,183);glVertex2i(100+i,183);glVertex2i(100+i,178);

glEnd();

glFlush();

}

for(j=0;j<60;j=j+temp) //to move the packet from bottom to top

{

glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(335,178+j);glVertex2i(335,193+j);glVertex2i(340,193+j);glVertex2i(340,178+j);

glEnd();

glFlush();

k+=0.03;

timer(k,102.5,82,88);

timer(k,396.5,102,108);

p+=0.01;

timer(p,430.5,122,128);

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(335,178+j);glVertex2i(335,193+j);glVertex2i(340,193+j);glVertex2i(340,178+j);

glEnd();

Page 46: grafika2

glFlush();

}

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(0.0f,0.0f,0.0f);

drawstring(160.0,370.0,1.0,"FRAME 2 Resending ...........");

glColor3f(1.0f,1.0f,1.0f);

drawstring(160.0,370.0,1.0,"FRAME 2 sent");

// delay();

glColor3f(0.0f,0.0f,0.0f);

drawstring(160.0,370.0,1.0,"FRAME 2 sent");

}

void move5() // sending of frame 3

{

GLint i,j, temp=3;

timer2();

timer3();

float k=0,l=0;

glColor3f(1.0,0.8,0.4);

setFont(GLUT_BITMAP_HELVETICA_18);

Page 47: grafika2

drawstring(320.0,125.0,1.0,"Timer 3");

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0f,1.0f,0.0f);

drawstring(160.0,370.0,1.0,"FRAME 3 sending ...........");

for(j=0;j<4;j=j+temp) //movement of data packet within the frame

{

glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(100,265-j);glVertex2i(100,280-j);glVertex2i(105,280-j);glVertex2i(105,265-j);

glEnd();

glFlush();

k+=0.03;

timer(k,136.5,82,88);

glColor3f(0,0,0); // to remove traces create movement of frame in black

glBegin(GL_QUADS);

glVertex2i(100,265-j);glVertex2i(100,280-j);glVertex2i(105,280-j);glVertex2i(105,265-j);

glEnd();

glFlush();

}

Page 48: grafika2

for(j=0;j<50;j=j+temp) //movement of data packet from top to down

{

glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(100,238-j);glVertex2i(100,253-j);glVertex2i(105,253-j);glVertex2i(105,238-j);

glEnd();

glFlush();

k+=0.03;

timer(k,136.5,82,88);

timer(k,362.5,122,128);

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(100,238-j);glVertex2i(100,253-j);glVertex2i(105,253-j);glVertex2i(105,238-j);

glEnd();

glFlush();

}

for(i=0;i<235;i=i+temp) //movement of data packet sidewise

{

glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(100+i,183);glVertex2i(100+i,188);glVertex2i(115+i,188);glVertex2i(115+i,183);

glEnd();

glFlush();

Page 49: grafika2

k+=0.03;

timer(k,136.5,82,88);

timer(k,362.5,122,128);

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(100+i,183);glVertex2i(100+i,188);glVertex2i(115+i,188);glVertex2i(115+i,183);

glEnd();

glFlush();

}

for(j=0;j<55;j=j+temp) //to move the packet from bottom to top

{

glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(350,183+j);glVertex2i(350,198+j);glVertex2i(355,198+j);glVertex2i(355,183+j);

glEnd();

glFlush();

k+=0.03;

timer(k,136.5,82,88);

timer(k,362.5,122,128);

glColor3f(0,0,0);

Page 50: grafika2

glBegin(GL_QUADS);

glVertex2i(350,183+j);glVertex2i(350,198+j);glVertex2i(355,198+j);glVertex2i(355,183+j);

glEnd();

glFlush();

}

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(0.0f,0.0f,0.0f);

drawstring(160.0,370.0,1.0,"FRAME 3 sending ...........");

glColor3f(0.0f,0.0f,0.0f);

drawstring(230.0,345.0,1.0,"........... sending NAK2 ");

glColor3f(1.0,1.0,0.0);

drawstring(160.0,370.0,1.0,"FRAME 3 sent ");

// delay();

glColor3f(0.0,0.0,0.0);

drawstring(160.0,370.0,1.0,"FRAME 3 sent ");

}

void move6() // RESENDING OF FRAME 1(in packet crashing)

{

GLint i,j, temp=3;

glBegin(GL_LINE_LOOP);

glColor3f(0,0,0);

Page 51: grafika2

glVertex2f(100,120);

glVertex2f(225,120);

glVertex2f(225,130);

glVertex2f(100,130);

glEnd();

glFlush();

glBegin(GL_POLYGON);

glColor3f(0,0,0);

glVertex2f(100,120);

glVertex2f(225,120);

glVertex2f(225,130);

glVertex2f(100,130);

glEnd();

glFlush();

for(j=0;j<4;j=j+temp) //movement of data packet within the frame

{ glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(70,265-j);glVertex2i(70,280-j);glVertex2i(75,280-j);glVertex2i(75,265-j);

glEnd();

glFlush();

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(70,265-j);glVertex2i(70,280-j);glVertex2i(75,280-j);glVertex2i(75,265-j);

glEnd();

Page 52: grafika2

glFlush();

}

for(j=0;j<60;j=j+temp) //movement of data packet from top to down

{ glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(70,238-j);glVertex2i(70,253-j);glVertex2i(75,253-j);glVertex2i(75,238-j);

glEnd();

glFlush();

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0f,1.0f,0.0f);

drawstring(160.0,365.0,1.0,"FRAME 1 sending .....");

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(70,238-j);glVertex2i(70,253-j);glVertex2i(75,253-j);glVertex2i(75,238-j);

glEnd();

glFlush();

}

for(i=0;i<231;i=i+temp) //movement of data packet sidewise

{ glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(70+i,178);glVertex2i(70+i,183);glVertex2i(85+i,183);glVertex2i(85+i,178);

glEnd();

glFlush();

Page 53: grafika2

glColor3f(1.0f,1.0f,0.0f);

drawstring(160.0,365.0,1.0,"FRAME 1 resending ...................");

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(70+i,178);glVertex2i(70+i,183);glVertex2i(85+i,183);glVertex2i(85+i,178);

glEnd();

glFlush();

}

for(j=0;j<60;j=j+temp) //to move the packet from bottom to top

{

glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(320,178+j);glVertex2i(320,193+j);glVertex2i(325,193+j);glVertex2i(325,178+j);

glEnd();

glFlush();

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0f,1.0f,0.0f);

drawstring(160.0,365.0,1.0,"FRAME 0 sending ...............................");

glColor3f(0,0,0);

glBegin(GL_QUADS);

Page 54: grafika2

glVertex2i(320,178+j);glVertex2i(320,193+j);glVertex2i(325,193+j);glVertex2i(325,178+j);

glEnd();

glFlush();

}

glColor3f(1.0,1.0,1.0);

drawstring(70,268.0,0.0,"1");

glColor3f(1.0,1.0,1.0);

drawstring(85,268.0,0.0,"2");

glColor3f(1.0,1.0,1.0);

drawstring(100,268.0,0.0,"3");

glColor3f(1.0,1.0,1.0);

drawstring(320,268.0,0.0,"1");

glColor3f(1.0,1.0,1.0);

drawstring(365,268.0,0.0,"4");

}

void move7() // MOVEMENT OF ACK 4 (in packet crashing)

{

GLint i,j, temp=3;

for(j=0;j<4;j=j+temp) //movement of data packet within the frame

{ glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(365,265-j);glVertex2i(365,275-j);glVertex2i(370,275-j);glVertex2i(370,265-j);

Page 55: grafika2

glEnd();

glFlush();

glColor3f(0,0,0); // to remove traces create movement of frame in black

glBegin(GL_QUADS);

glVertex2i(365,265-j);glVertex2i(365,275-j);glVertex2i(370,275-j);glVertex2i(370,265-j);

glEnd();

glFlush();

}

for(j=0;j<50;j=j+temp) //movement of data packet from top to down

{ glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(365,228-j);glVertex2i(365,238-j);glVertex2i(370,238-j);glVertex2i(370,228-j);

glEnd();

glFlush();

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(365,228-j);glVertex2i(365,238-j);glVertex2i(370,238-j);glVertex2i(370,228-j);

glEnd();

glFlush();

}

for(i=0;i<235;i=i+temp) //movement of data packet sidewise

{

glColor3f(0,1,1);

Page 56: grafika2

glBegin(GL_QUADS);

glVertex2i(355-i,178);glVertex2i(355-i,183);glVertex2i(365-i,183);glVertex2i(365-i,178);

glEnd();

glFlush();

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0f,1.0f,0.0f);

drawstring(160.0,365.0,1.0,"FRAME 1 resending ...................");

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(355-i,178);glVertex2i(355-i,183);glVertex2i(365-i,183);glVertex2i(365-i,178);

glEnd();

glFlush();

}

for(j=0;j<55;j=j+temp) //to move the packet from bottom to top

{

glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(115,178+j);glVertex2i(115,188+j);glVertex2i(120,188+j);glVertex2i(120,178+j);

glEnd();

glFlush();

glColor3f(1.0f,1.0f,0.0f);

drawstring(160.0,365.0,1.0,"FRAME 0 sending ...............................");

Page 57: grafika2

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(115,178+j);glVertex2i(115,188+j);glVertex2i(120,188+j);glVertex2i(120,178+j);

glEnd();

glFlush();

}

glColor3f(1.0,1.0,1.0);

drawstring(365,268.0,0.0,"4");

}

void move8() // MOVEMENT OF ACK 4 (in packet crashing)

{

GLint i,j, temp=3;

float k=0;

timer1();

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0f,1.0f,0.0f);

drawstring(230.0,345.0,1.0,"........... sending ACK2 ");

for(j=0;j<4;j=j+temp) //movement of data packet within the frame

{ glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(335,265-j);glVertex2i(335,275-j);glVertex2i(340,275-j);glVertex2i(340,265-j);

glEnd();

glFlush();

Page 58: grafika2

glColor3f(0,0,0); // to remove traces create movement of frame in black

glBegin(GL_QUADS);

glVertex2i(335,265-j);glVertex2i(335,275-j);glVertex2i(340,275-j);glVertex2i(340,265-j);

glEnd();

glFlush();

}

for(j=0;j<50;j=j+temp) //movement of data packet from top to down

{ glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(335,228-j);glVertex2i(335,238-j);glVertex2i(340,238-j);glVertex2i(340,228-j);

glEnd();

glFlush();

k+=0.05;

timer(k,136.5,102,108);

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(335,228-j);glVertex2i(335,238-j);glVertex2i(340,238-j);glVertex2i(340,228-j);

glEnd();

glFlush();

}

for(i=0;i<235;i=i+temp) //movement of data packet sidewise

Page 59: grafika2

{

glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(325-i,178);glVertex2i(325-i,183);glVertex2i(335-i,183);glVertex2i(335-i,178);

glEnd();

glFlush();

k+=0.05;

timer(k,136.5,102,108);

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(325-i,178);glVertex2i(325-i,183);glVertex2i(335-i,183);glVertex2i(335-i,178);

glEnd();

glFlush();

}

for(j=0;j<55;j=j+temp) //to move the packet from bottom to top

{

glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(85,178+j);glVertex2i(85,188+j);glVertex2i(90,188+j);glVertex2i(90,178+j);

glEnd();

glFlush();

k+=0.05;

timer(k,136.5,102,108);

Page 60: grafika2

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(85,178+j);glVertex2i(85,188+j);glVertex2i(90,188+j);glVertex2i(90,178+j);

glEnd();

glFlush();

}

glColor3f(0.0f,0.0f,0.0f);

drawstring(230.0,345.0,1.0,"........... sending ACK2 ");

glColor3f(0.0,0.0,0.0);

glBegin(GL_POLYGON);

glVertex2f(10,95);

glVertex2f(10,115);

glVertex2f(230,115);

glVertex2f(230,95);

glEnd();

glFlush();

setFont(GLUT_BITMAP_HELVETICA_18);

glColor3f(1.0,0.8,0.4);

drawstring(80.0,105.0,1.0," Frame 1 sent successfully");

// delay();

}

void move9() // MOVEMENT OF ACK 1 (in safe sending)

{

GLint i,j, temp=3;

Page 61: grafika2

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(0.0f,0.0f,0.0f);

drawstring(160.0,365.0,1.0," FRAME 0 sent");

glColor3f(0.0f,1.0f,0.0f);

drawstring(250.0,365.0,1.0," .... sending ACK1 ");

for(j=0;j<4;j=j+temp) //movement of data packet within the frame

{

glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(320,265-j);glVertex2i(320,275-j);glVertex2i(325,275-j);glVertex2i(325,265-j);

glEnd();

glFlush();

glColor3f(0,0,0); // to remove traces create movement of frame in black

glBegin(GL_QUADS);

glVertex2i(320,265-j);glVertex2i(320,275-j);glVertex2i(325,275-j);glVertex2i(325,265-j);

glEnd();

glFlush();

}

for(j=0;j<60;j=j+temp) //movement of data packet from top to down

{ glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(320,228-j);glVertex2i(320,238-j);glVertex2i(325,238-j);glVertex2i(325,228-j);

glEnd();

glFlush();

Page 62: grafika2

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(0.0f,0.0f,0.0f);

drawstring(250.0,365.0,1.0," .... sending ACK1 ");

glColor3f(0.0f,1.0f,0.0f);

drawstring(230.0,365.0,1.0,".............. sending ACK1 ");

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(320,228-j);glVertex2i(320,238-j);glVertex2i(325,238-j);glVertex2i(325,228-j);

glEnd();

glFlush();

}

for(i=0;i<235;i=i+temp) //movement of data packet sidewise

{ glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(310-i,168);glVertex2i(310-i,173);glVertex2i(320-i,173);glVertex2i(320-i,168);

glEnd();

glFlush();

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(0.0f,0.0f,0.0f);

drawstring(230.0,365.0,1.0,".............. sending ACK1 ");

glColor3f(0.0f,1.0f,0.0f);

drawstring(200.0,365.0,1.0,"........................... sending ACK1 ");

Page 63: grafika2

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(310-i,168);glVertex2i(310-i,173);glVertex2i(320-i,173);glVertex2i(320-i,168);

glEnd();

glFlush();

}

for(j=0;j<63;j=j+temp) //to move the packet from bottom to top

{

glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(70,168+j);glVertex2i(70,178+j);glVertex2i(75,178+j);glVertex2i(75,168+j);

glEnd();

glFlush();

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(0.0f,0.0f,0.0f);

drawstring(200.0,365.0,1.0,"........................... sending ACK1 ");

glColor3f(0.0f,1.0f,0.0f);

drawstring(160.0,365.0,1.0,"..................................... sending ACK1 ");

Page 64: grafika2

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(70,168+j);glVertex2i(70,178+j);glVertex2i(75,178+j);glVertex2i(75,168+j);

glEnd();

glFlush();

}

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(0.0f,0.0f,0.0f);

drawstring(160.0,365.0,1.0,"..................................... sending ACK1 ");

glColor3f(0.0f,1.0f,0.0f);

drawstring(160.0,365.0,1.0," ACK1 received");

setFont(GLUT_BITMAP_HELVETICA_12);

Page 65: grafika2

glColor3f(1.0,1.0,1.0);

drawstring(55,268.0,0.0,"0");

glColor3f(1.0,1.0,1.0);

drawstring(320,268.0,0.0,"1");

// delay();

glColor3f(0.0f,0.0f,0.0f);

drawstring(160.0,365.0,1.0," ACK1 received");

}

void move10() // SIMULTANEOUS MOVEMENT OF NAK 2 AS FRAME 2 IS LOST AND FRAME 4 (in packet crashing)

{

GLint i,j, temp=3;

timer2();

timer3();

timer4();

float k=0;

Page 66: grafika2

glColor3f(1.0,0.8,0.4);

setFont(GLUT_BITMAP_HELVETICA_18);

drawstring(320.0,105.0,1.0,"Timer 4");

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0f,1.0f,0.0f);

drawstring(160.0,370.0,1.0,"FRAME 4 sending ...........");

glColor3f(1.0f,1.0f,0.0f);

drawstring(230.0,345.0,1.0,"........... sending NAK2 ");

for(j=0;j<4;j=j+temp) //movement of data packet within the frame

{ glColor3f(1,1,0);

glBegin(GL_QUADS);

glVertex2i(335,265-j);glVertex2i(335,275-j);glVertex2i(340,275-j);glVertex2i(340,265-j);

glEnd();

glFlush();

glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(115,265-j);glVertex2i(115,280-j);glVertex2i(120,280-j);glVertex2i(120,265-j);

glEnd();

glFlush();

Page 67: grafika2

glColor3f(0,0,0); // to remove traces create movement of frame in black

glBegin(GL_QUADS);

glVertex2i(335,265-j);glVertex2i(335,275-j);glVertex2i(340,275-j);glVertex2i(340,265-j);

glEnd();

glFlush();

glColor3f(0,0,0); // to remove traces create movement of frame in black

glBegin(GL_QUADS);

glVertex2i(115,265-j);glVertex2i(115,280-j);glVertex2i(120,280-j);glVertex2i(120,265-j);

glEnd();

glFlush();

}

for(j=0;j<50;j=j+temp) //movement of data packet from top to down

{ glColor3f(1,1,0);

glBegin(GL_QUADS);

glVertex2i(335,228-j);glVertex2i(335,238-j);glVertex2i(340,238-j);glVertex2i(340,228-j);

glEnd();

glFlush();

Page 68: grafika2

k+=0.03;

timer(k,170.5,82,88);

timer(k,396.5,122,128);

timer(k,362.5,102,108);

glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(115,238-j);glVertex2i(115,253-j);glVertex2i(120,253-j);glVertex2i(120,238-j);

glEnd();

glFlush();

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(335,228-j);glVertex2i(335,238-j);glVertex2i(340,238-j);glVertex2i(340,228-j);

glEnd();

glFlush();

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(115,238-j);glVertex2i(115,253-j);glVertex2i(120,253-j);glVertex2i(120,238-j);

glEnd();

glFlush();

Page 69: grafika2

}

for(i=0;i<235;i=i+temp) //movement of data packet sidewise

{ glColor3f(1,1,0);

glBegin(GL_QUADS);

glVertex2i(325-i,178);glVertex2i(325-i,183);glVertex2i(335-i,183);glVertex2i(335-i,178);

glEnd();

glFlush();

k+=0.03;

timer(k,170.5,82,88);

timer(k,396.5,122,128);

timer(k,362.5,102,108);

glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(115+i,183);glVertex2i(115+i,188);glVertex2i(130+i,188);glVertex2i(130+i,183);

glEnd();

glFlush();

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(325-i,178);glVertex2i(325-i,183);glVertex2i(335-i,183);glVertex2i(335-i,178);

Page 70: grafika2

glEnd();

glFlush();

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(115+i,183);glVertex2i(115+i,188);glVertex2i(130+i,188);glVertex2i(130+i,183);

glEnd();

glFlush();

}

for(j=0;j<55;j=j+temp) //to move the packet from bottom to top

{

glColor3f(1,1,0);

glBegin(GL_QUADS);

glVertex2i(85,178+j);glVertex2i(85,188+j);glVertex2i(90,188+j);glVertex2i(90,178+j);

glEnd();

glFlush();

glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(365,183+j);glVertex2i(365,198+j);glVertex2i(370,198+j);glVertex2i(370,183+j);

glEnd();

Page 71: grafika2

glFlush();

k+=0.03;

timer(k,170.5,82,88);

timer(k,396.5,122,128);

timer(k,362.5,102,108);

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(85,178+j);glVertex2i(85,188+j);glVertex2i(90,188+j);glVertex2i(90,178+j);

glEnd();

glFlush();

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(365,183+j);glVertex2i(365,198+j);glVertex2i(370,198+j);glVertex2i(370,183+j);

glEnd();

glFlush();

}

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(0.0f,0.0f,0.0f);

drawstring(160.0,370.0,1.0,"FRAME 4 sending ...........");

Page 72: grafika2

glColor3f(0.0f,0.0f,0.0f);

drawstring(230.0,345.0,1.0,"........... sending NAK2 ");

glColor3f(1.0,1.0,0.0);

drawstring(160.0,370.0,1.0,"FRAME 4 sent ");

glColor3f(1.0f,1.0f,0.0f);

drawstring(230.0,345.0,1.0,"NAK2 Recieved ");

// delay();

glColor3f(0.0,0.0,0.0);

drawstring(160.0,370.0,1.0,"FRAME 4 sent ");

glColor3f(0.0f,0.0f,0.0f);

drawstring(230.0,345.0,1.0,"NAK2 Recieved ");

}

void move11() // MOVEMENT OF ACK 4 (in packet crashing)

{

Page 73: grafika2

GLint i,j, temp=3;

timer2();

timer3();

timer4();

float k=0;

float p=0;

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0f,1.0f,0.0f);

drawstring(230.0,345.0,1.0,"........... sending ACK4 ");

for(j=0;j<4;j=j+temp) //movement of data packet within the frame

{ glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(380,265-j);glVertex2i(380,275-j);glVertex2i(385,275-j);glVertex2i(385,265-j);

glEnd();

glFlush();

k+=0.03;

timer(k,136.5,82,88);

glColor3f(0,0,0); // to remove traces create movement of frame in black

glBegin(GL_QUADS);

Page 74: grafika2

glVertex2i(380,265-j);glVertex2i(380,275-j);glVertex2i(385,275-j);glVertex2i(385,265-j);

glEnd();

glFlush();

}

for(j=0;j<50;j=j+temp) //movement of data packet from top to down

{ glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(380,228-j);glVertex2i(380,238-j);glVertex2i(385,238-j);glVertex2i(385,228-j);

glEnd();

glFlush();

k+=0.03;

timer(k,136.5,82,88);

timer(k,431.5,102,108);

p+=0.01;

timer(p,442,122,128);

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(380,228-j);glVertex2i(380,238-j);glVertex2i(385,238-j);glVertex2i(385,228-j);

glEnd();

Page 75: grafika2

glFlush();

}

for(i=0;i<235;i=i+temp) //movement of data packet sidewise

{

glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(370-i,178);glVertex2i(370-i,183);glVertex2i(380-i,183);glVertex2i(380-i,178);

glEnd();

glFlush();

k+=0.03;

timer(k,136.5,82,88);

timer(k,431.5,102,108);

p+=0.01;

timer(p,442,122,128);

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(370-i,178);glVertex2i(370-i,183);glVertex2i(380-i,183);glVertex2i(380-i,178);

glEnd();

glFlush();

Page 76: grafika2

}

for(j=0;j<55;j=j+temp) //to move the packet from bottom to top

{

glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(130,178+j);glVertex2i(130,188+j);glVertex2i(135,188+j);glVertex2i(135,178+j);

glEnd();

glFlush();

k+=0.03;

timer(k,136.5,82,88);

timer(k,431.5,102,108);

p+=0.01;

timer(p,442,122,128);

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(130,178+j);glVertex2i(130,188+j);glVertex2i(135,188+j);glVertex2i(135,178+j);

glEnd();

Page 77: grafika2

glFlush();

}

glColor3f(1.0,1.0,1.0);

drawstring(365,268.0,0.0,"4");

glColor3f(0.0f,0.0f,0.0f);

drawstring(230.0,345.0,1.0,"........... sending ACK4 ");

glColor3f(1.0f,1.0f,0.0f);

drawstring(230.0,345.0,1.0,"NAK4 Recieved ");

// delay();

glColor3f(0.0f,0.0f,0.0f);

drawstring(230.0,345.0,1.0,"NAK4 Recieved ");

}

Page 78: grafika2

void move12()

{

GLint i,j, temp=3;

float k=0;

timer1();

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0f,1.0f,0.0f);

drawstring(230.0,345.0,1.0,"........... sending ACK2 ");

for(j=0;j<4;j=j+temp) //movement of data packet within the frame

{ glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(335,265-j);glVertex2i(335,275-j);glVertex2i(340,275-j);glVertex2i(340,265-j);

glEnd();

glFlush();

glColor3f(0,0,0); // to remove traces create movement of frame in black

glBegin(GL_QUADS);

glVertex2i(335,265-j);glVertex2i(335,275-j);glVertex2i(340,275-j);glVertex2i(340,265-j);

Page 79: grafika2

glEnd();

glFlush();

}

for(j=0;j<50;j=j+temp) //movement of data packet from top to down

{ glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(335,228-j);glVertex2i(335,238-j);glVertex2i(340,238-j);glVertex2i(340,228-j);

glEnd();

glFlush();

k+=0.03;

timer(k,136.5,102,108);

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(335,228-j);glVertex2i(335,238-j);glVertex2i(340,238-j);glVertex2i(340,228-j);

glEnd();

glFlush();

}

for(i=0;i<65;i=i+temp) //movement of data packet sidewise

{

Page 80: grafika2

glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(325-i,178);glVertex2i(325-i,183);glVertex2i(335-i,183);glVertex2i(335-i,178);

glEnd();

glFlush();

k+=0.03;

timer(k,136.5,102,108);

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(325-i,178);glVertex2i(325-i,183);glVertex2i(335-i,183);glVertex2i(335-i,178);

glEnd();

glFlush();

}

glColor3f(0.0f,0.0f,0.0f);

drawstring(230.0,345.0,1.0,"........... sending ACK2 ");

}

Page 81: grafika2

void move13() // SIMULTANEOUS MOVEMENT OF ACK 1 AND FRAME 1(in safe sending)

{

GLint i,j, temp=3;

float k=0;

timer1();

timer2();

setFont(GLUT_BITMAP_HELVETICA_18);

glColor3f(1.0,0.8,0.4);

drawstring(30.0,105.0,1.0," Timer 1");

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0f,1.0f,0.0f);

drawstring(160.0,370.0,1.0,"FRAME 1 Resending ...........");

glColor3f(1.0f,1.0f,0.0f);

drawstring(230.0,345.0,1.0,"........... sending ACK3 ");

for(j=0;j<4;j=j+temp) //movement of data packet within the frame

{ glColor3f(0,1,1);

glBegin(GL_QUADS);

Page 82: grafika2

glVertex2i(350,265-j);glVertex2i(350,275-j);glVertex2i(355,275-j);glVertex2i(355,265-j);

glEnd();

glFlush();

glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(70,265-j);glVertex2i(70,280-j);glVertex2i(75,280-j);glVertex2i(75,265-j);

glEnd();

glFlush();

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(70,265-j);glVertex2i(70,280-j);glVertex2i(75,280-j);glVertex2i(75,265-j);

glEnd();

glFlush();

glColor3f(0,0,0); // to remove traces create movement of frame in black

glBegin(GL_QUADS);

glVertex2i(350,265-j);glVertex2i(350,275-j);glVertex2i(355,275-j);glVertex2i(355,265-j);

glEnd();

glFlush();

}

for(j=0;j<60;j=j+temp) //movement of data packet from top to down

Page 83: grafika2

{ glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(350,228-j);glVertex2i(350,238-j);glVertex2i(355,238-j);glVertex2i(355,228-j);

glEnd();

glFlush();

glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(70,238-j);glVertex2i(70,253-j);glVertex2i(75,253-j);glVertex2i(75,238-j);

glEnd();

glFlush();

k+=0.03;

timer(k,102.5,102,108);

timer(k,148.5,82,88);

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(350,228-j);glVertex2i(350,238-j);glVertex2i(355,238-j);glVertex2i(355,228-j);

glEnd();

glFlush();

glColor3f(0,0,0);

glBegin(GL_QUADS);

Page 84: grafika2

glVertex2i(70,238-j);glVertex2i(70,253-j);glVertex2i(75,253-j);glVertex2i(75,238-j);

glEnd();

glFlush();

}

for(i=0;i<235;i=i+temp) //movement of data packet sidewise

{ glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(340-i,168);glVertex2i(340-i,173);glVertex2i(350-i,173);glVertex2i(350-i,168);

glEnd();

glFlush();

k+=0.03;

timer(k,102.5,102,108);

timer(k,148.5,82,88);

glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(70+i,178);glVertex2i(70+i,183);glVertex2i(85+i,183);glVertex2i(85+i,178);

glEnd();

glFlush();

glColor3f(0,0,0);

Page 85: grafika2

glBegin(GL_QUADS);

glVertex2i(340-i,168);glVertex2i(340-i,173);glVertex2i(350-i,173);glVertex2i(350-i,168);

glEnd();

glFlush();

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(70+i,178);glVertex2i(70+i,183);glVertex2i(85+i,183);glVertex2i(85+i,178);

glEnd();

glFlush();

}

for(j=0;j<63;j=j+temp) //to move the packet from bottom to top

{

glColor3f(0,1,1);

glBegin(GL_QUADS);

glVertex2i(100,168+j);glVertex2i(100,178+j);glVertex2i(105,178+j);glVertex2i(105,168+j);

glEnd();

glFlush();

glColor3f(1,0,0);

glBegin(GL_QUADS);

Page 86: grafika2

glVertex2i(320,178+j);glVertex2i(320,193+j);glVertex2i(325,193+j);glVertex2i(325,178+j);

glEnd();

glFlush();

k+=0.03;

timer(k,102.5,102,108);

timer(k,148.5,82,88);

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(100,168+j);glVertex2i(100,178+j);glVertex2i(105,178+j);glVertex2i(105,168+j);

glEnd();

glFlush();

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(320,178+j);glVertex2i(320,193+j);glVertex2i(325,193+j);glVertex2i(325,178+j);

glEnd();

glFlush();

}

Page 87: grafika2

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(0.0f,0.0f,0.0f);

drawstring(160.0,370.0,1.0,"FRAME 1 Resending ...........");

glColor3f(0.0f,0.0f,0.0f);

drawstring(230.0,345.0,1.0,"........... sending ACK3 ");

glColor3f(1.2,0.6,1.6);

drawstring(315.0,248.0,1.0,"DUPLICATE " );//Frame 1");

glColor3f(1.2,0.6,1.6);

drawstring(310.0,238.0,1.0,"FRAME 1 Discarded ");

glFlush();

}

void move14() // RESENDING OF FRAME 2 (in packet crashing)

{

GLint i,j, temp=3;

timer2();

float k=0;

Page 88: grafika2

float q=0;

glColor3f(1.0,0.8,0.4);

setFont(GLUT_BITMAP_HELVETICA_18);

drawstring(30.0,85.0,1.0,"Timer 2");

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0f,1.0f,1.0f);

drawstring(160.0,370.0,1.0,"FRAME 2 Sending ...........");

for(j=0;j<4;j=j+temp) //movement of data packet within the frame

{ glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(85,265-j);glVertex2i(85,280-j);glVertex2i(90,280-j);glVertex2i(90,265-j);

glEnd();

glFlush();

k+=0.07;

timer(k,145.5,102,108);

q+=0.04;

timer(q,102.5,82,88);

glColor3f(0,0,0); // to remove traces create movement of frame in black

glBegin(GL_QUADS);

glVertex2i(85,265-j);glVertex2i(85,280-j);glVertex2i(90,280-j);glVertex2i(90,265-j);

glEnd();

Page 89: grafika2

glFlush();

}

for(j=0;j<60;j=j+temp) //movement of data packet from top to down

{ glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(85,238-j);glVertex2i(85,253-j);glVertex2i(90,253-j);glVertex2i(90,238-j);

glEnd();

glFlush();

k+=0.07;

timer(k,145.5,102,108);

q+=0.04;

timer(q,102.5,82,88);

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(85,238-j);glVertex2i(85,253-j);glVertex2i(90,253-j);glVertex2i(90,238-j);

glEnd();

glFlush();

}

for(i=0;i<231;i=i+temp) //movement of data packet sidewise

{ glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(85+i,178);glVertex2i(85+i,183);glVertex2i(100+i,183);glVertex2i(100+i,178);

Page 90: grafika2

glEnd();

glFlush();

k+=0.07;

timer(k,145.5,102,108);

q+=0.04;

timer(q,102.5,82,88);

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0f,1.0f,1.0f);

drawstring(160.0,370.0,1.0,"FRAME 2 Sending ...........");

// drawstring(160.0,370.0,1.0,"FRAME 2 sending...................");

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(85+i,178);glVertex2i(85+i,183);glVertex2i(100+i,183);glVertex2i(100+i,178);

glEnd();

glFlush();

}

for(j=0;j<60;j=j+temp) //to move the packet from bottom to top

Page 91: grafika2

{

glColor3f(1,0,0);

glBegin(GL_QUADS);

glVertex2i(335,178+j);glVertex2i(335,193+j);glVertex2i(340,193+j);glVertex2i(340,178+j);

glEnd();

glFlush();

k+=0.05;

timer(k,145.5,102,108);

q+=0.04;

timer(q,102.5,82,88);

setFont(GLUT_BITMAP_HELVETICA_12);

/////glColor3f(1.0f,1.0f,0.0f);

/////drawstring(160.0,365.0,1.0,"FRAME 0 sending ...............................");

glColor3f(0,0,0);

glBegin(GL_QUADS);

glVertex2i(335,178+j);glVertex2i(335,193+j);glVertex2i(340,193+j);glVertex2i(340,178+j);

glEnd();

glFlush();

}

Page 92: grafika2

glColor3f(0.0f,0.0f,0.0f);

drawstring(160.0,370.0,1.0,"FRAME 2 Sending ...........");

// delay();

glColor3f(0,0,0);

glBegin(GL_POLYGON);

glVertex2f(0,98);

glVertex2f(0,115);

glVertex2f(228,115);

glVertex2f(228,98);

glEnd();

glFlush();

//delay();

setFont(GLUT_BITMAP_HELVETICA_18);

glColor3f(1.0,0.8,0.4);

drawstring(80.0,105.0,1.0," TIME OUT !!");

glFlush();

delay();

delay();

setFont(GLUT_BITMAP_HELVETICA_18);

Page 93: grafika2

glColor3f(0,0,0);

drawstring(80.0,105.0,1.0," TIME OUT !!");

glFlush();

glColor3f(1.0,0.8,0.4);

drawstring(228.0,105.0,1.0," TIMER 1 restarted");

glFlush();

}

void draw1(void) // DRAWING OF SEND WINDOW WITH ITS LABELS

{

// SENDER WINDOW

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(0.0,0.0,1.0);

slide(25,2,50,250); // Initial set of frames in BLUE color

glColor3f(1.0,1.0,1.0);

setFont(GLUT_BITMAP_HELVETICA_18);

drawstring(210.0,405.0,1.0,"S E N D W I N D O W");

Page 94: grafika2

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0,1.0,1.0);

drawstring(50,220.0,0.0,"FRAMES ALREADY");

glColor3f(1.0,1.0,1.0);

drawstring(50,210.0,0.0,"ACKNOWLEDGED");

glColor3f(1.0,1.0,1.0);

drawstring(125,220.0,0.0,"FRAMES SENT");

glColor3f(1.0,1.0,1.0);

drawstring(125,210.0,0.0,"BUT NOT");

glColor3f(1.0,1.0,1.0);

drawstring(125,200.0,0.0,"ACKNOWLEDGED");

glColor3f(1.0,1.0,1.0);

drawstring(195,220.0,0.0,"FRAMES THAT");

glColor3f(1.0,1.0,1.0);

drawstring(195,210.0,0.0,"CAN BE SENT");

glColor3f(1.0,1.0,1.0);

drawstring(290,220.0,0.0,"FRAMES THAT CAN NOT BE SENT");

glColor3f(0.0,1.0,1.0);

drawstring(127,278.0,0.0,"Sf");

glColor3f(0.0,1.0,1.0);

drawstring(70,300.0,0.0,"( Sf: FIRST OUTSTANDING FRAME )");

Page 95: grafika2

glColor3f(0.0,1.0,1.0);

drawstring(187,278.0,0.0,"Sn");

glColor3f(0.0,1.0,1.0);

drawstring(195,300.0,0.0,"( Sn: NEXT FRAME TO SEND )");

glColor3f(1.0,1.0,1.0);

drawstring(55,260.0,0.0,"11");

glColor3f(1.0,1.0,1.0);

drawstring(69,260.0,0.0,"12");

glColor3f(1.0,1.0,1.0);

drawstring(84,260.0,0.0,"13");

glColor3f(1.0,1.0,1.0);

drawstring(99,260.0,0.0,"14");

glColor3f(1.0,1.0,1.0);

drawstring(114,260.0,0.0,"15");

glColor3f(1.0,1.0,1.0);

drawstring(130,260.0,0.0,"0");

glColor3f(1.0,1.0,1.0);

drawstring(147,260.0,0.0,"1");

glColor3f(1.0,1.0,1.0);

drawstring(163,260.0,0.0,"2");

glColor3f(1.0,1.0,1.0);

drawstring(177,260.0,0.0,"3");

glColor3f(1.0,1.0,1.0);

drawstring(191,260.0,0.0,"4");

glColor3f(1.0,1.0,1.0);

Page 96: grafika2

drawstring(206,260.0,0.0,"5");

glColor3f(1.0,1.0,1.0);

drawstring(221,260.0,0.0,"6");

glColor3f(1.0,1.0,1.0);

drawstring(236,260.0,0.0,"7");

glColor3f(1.0,1.0,1.0);

drawstring(251,260.0,0.0,"8");

glColor3f(1.0,1.0,1.0);

drawstring(266,260.0,0.0,"9");

glColor3f(1.0,1.0,1.0);

drawstring(280,260.0,0.0,"10");

glColor3f(1.0,1.0,1.0);

drawstring(295,260.0,0.0,"11");

glColor3f(1.0,1.0,1.0);

drawstring(310,260.0,0.0,"12");

glColor3f(1.0,1.0,1.0);

drawstring(324,260.0,0.0,"13");

glColor3f(1.0,1.0,1.0);

drawstring(339,260.0,0.0,"14");

glColor3f(1.0,1.0,1.0);

drawstring(354,260.0,0.0,"15");

glColor3f(1.0,1.0,1.0);

drawstring(370,260.0,0.0,"0");

glColor3f(1.0,1.0,1.0);

drawstring(385,260.0,0.0,"1");

glColor3f(1.0,1.0,1.0);

drawstring(400,260.0,0.0,"2");

Page 97: grafika2

glEnd();

glFlush();

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINE_LOOP); // Send window in WHITE color

glVertex2f(125,240);

glVertex2f(245,240);

glVertex2f(245,285);

glVertex2f(125,285);

glEnd();

glFlush();

glColor3f(0.0,1.0,0.0);

slide(5,2,125,250); // Frames already sent and yet to be acknowledged in GREEN

glEnd();

glFlush();

glColor3f(1.0,0.0,0.0);

slide(5,2,185,250); // Frames that are yet to be sent in RED color

glFlush();

glEnd();

//delay();

}

Page 98: grafika2

void draw2(void) // // DRAWING OF RECEIVE WINDOW WITH ITS LABELS

{

// RECIVER WINDOW

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1.0,1.0,1.0);

glFlush();

glColor3f(0.0,0.0,1.0);

slide(25,2,50,250); // Initial set of frames in BLUE color

glEnd();

glFlush();

glColor3f(1.0,1.0,1.0);

setFont(GLUT_BITMAP_HELVETICA_18);

drawstring(210.0,405.0,1.0,"R E C I E V E W I N D O W");

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0,1.0,1.0);

drawstring(60,220.0,0.0,"FRAMES ALREADY RECIEVED");

glColor3f(1.0,1.0,1.0);

drawstring(172,220.0,0.0,"FRAMES THAT CAN BE RECIEVED");

glColor3f(1.0,1.0,1.0);

drawstring(172,210.0,0.0,"AND STORED FOR LATER DELIVERY");

glColor3f(1.0,1.0,1.0);

Page 99: grafika2

drawstring(172,200.0,0.0,"( GREEN BOXES ALREADY RECIEVED )");

glColor3f(1.0,1.0,1.0);

drawstring(300,220.0,0.0,"FRAMES THAT CAN NOT BE RECIEVED");

glColor3f(1.0,1.0,1.0);

drawstring(175,278.0,0.0,"Rn");

glColor3f(1.0,1.0,1.0);

drawstring(120,300.0,0.0,"( Rn: NEXT FRAME EXPECTED )");

glColor3f(1.0,1.0,1.0);

drawstring(55,260.0,0.0,"11");

glColor3f(1.0,1.0,1.0);

drawstring(69,260.0,0.0,"12");

glColor3f(1.0,1.0,1.0);

drawstring(84,260.0,0.0,"13");

glColor3f(1.0,1.0,1.0);

drawstring(99,260.0,0.0,"14");

glColor3f(1.0,1.0,1.0);

drawstring(114,260.0,0.0,"15");

glColor3f(1.0,1.0,1.0);

drawstring(130,260.0,0.0,"0");

glColor3f(1.0,1.0,1.0);

drawstring(147,260.0,0.0,"1");

glColor3f(1.0,1.0,1.0);

drawstring(163,260.0,0.0,"2");

Page 100: grafika2

glColor3f(1.0,1.0,1.0);

drawstring(177,260.0,0.0,"3");

glColor3f(1.0,1.0,1.0);

drawstring(191,260.0,0.0,"4");

glColor3f(1.0,1.0,1.0);

drawstring(206,260.0,0.0,"5");

glColor3f(1.0,1.0,1.0);

drawstring(221,260.0,0.0,"6");

glColor3f(1.0,1.0,1.0);

drawstring(236,260.0,0.0,"7");

glColor3f(1.0,1.0,1.0);

drawstring(251,260.0,0.0,"8");

glColor3f(1.0,1.0,1.0);

drawstring(266,260.0,0.0,"9");

glColor3f(1.0,1.0,1.0);

drawstring(280,260.0,0.0,"10");

glColor3f(1.0,1.0,1.0);

drawstring(295,260.0,0.0,"11");

glColor3f(1.0,1.0,1.0);

drawstring(310,260.0,0.0,"12");

glColor3f(1.0,1.0,1.0);

drawstring(324,260.0,0.0,"13");

glColor3f(1.0,1.0,1.0);

drawstring(339,260.0,0.0,"14");

glColor3f(1.0,1.0,1.0);

drawstring(354,260.0,0.0,"15");

glColor3f(1.0,1.0,1.0);

Page 101: grafika2

drawstring(370,260.0,0.0,"0");

glColor3f(1.0,1.0,1.0);

drawstring(385,260.0,0.0,"1");

glColor3f(1.0,1.0,1.0);

drawstring(400,260.0,0.0,"2");

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINE_LOOP); // Send window in WHITE color

glVertex2f(170,240);

glVertex2f(290,240);

glVertex2f(290,285);

glVertex2f(170,285);

glEnd();

glFlush();

glColor3f(1.0,0.0,0.0);

slide(2,2,170,250); // Frames already sent and yet to be acknowledged in GREEN

glEnd();

glFlush();

glColor3f(0.0,1.0,0.0);

slide(2,2,185,250);

glEnd();

glFlush();

Page 102: grafika2

glColor3f(1.0,0.0,0.0);

slide(3,2,200,250);

glEnd();

glFlush();

glColor3f(0.0,1.0,0.0);

slide(2,2,230,250);

glEnd();

glFlush();

glColor3f(1.0,0.0,0.0);

slide(2,2,245,250);

glEnd();

glFlush();

glColor3f(0.0,1.0,0.0);

slide(2,2,260,250);

glEnd();

glFlush();

glColor3f(1.0,0.0,0.0);

slide(2,2,275,250);

glEnd();

glFlush();

Page 103: grafika2

// delay();

}

void draw3(void) // DRAWING OF SAFE SENDING

{

//Sender site initial window

glClear(GL_COLOR_BUFFER_BIT);

computer();

glColor3f(1.6,1.9,1.2);

setFont(GLUT_BITMAP_HELVETICA_18);

drawstring(200.0,465.0,1.0,"S A F E S E N D I N G");

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0,1.0,1.0);

drawstring(55,268.0,0.0,"0");

glColor3f(1.0,1.0,1.0);

drawstring(69,268.0,0.0," 1");

glColor3f(1.0,1.0,1.0);

drawstring(84,268.0,0.0,"2");

glColor3f(1.0,1.0,1.0);

drawstring(99,268.0,0.0,"3");

Page 104: grafika2

glColor3f(1.0,1.0,1.0);

drawstring(114,268.0,0.0,"4");

glColor3f(1.0,1.0,1.0);

drawstring(130,268.0,0.0,"5");

glColor3f(1.0,1.0,1.0);

drawstring(147,268.0,0.0,"6");

glColor3f(1.0,1.0,1.0);

drawstring(163,268.0,0.0,"7");

glColor3f(1.0,1.0,1.0);

drawstring(177,268.0,0.0,"0");

glColor3f(1.0,1.0,1.0);

drawstring(305,268.0,0.0,"0");

glColor3f(1.0,1.0,1.0);

drawstring(320,268.0,0.0,"1");

glColor3f(1.0,1.0,1.0);

drawstring(334,268.0,0.0," 2");

glColor3f(1.0,1.0,1.0);

drawstring(349,268.0,0.0,"3");

glColor3f(1.0,1.0,1.0);

drawstring(364,268.0,0.0,"4");

glColor3f(1.0,1.0,1.0);

drawstring(379,268.0,0.0,"5");

glColor3f(1.0,1.0,1.0);

drawstring(394,268.0,0.0,"6");

glColor3f(1.0,1.0,1.0);

drawstring(409,268.0,0.0,"7");

Page 105: grafika2

glColor3f(1.0,1.0,1.0);

drawstring(424,268.0,0.0,"0");

//SENDER SIDE

glColor3f(0.0,0.0,1.0); // Initial set of frames in BLUE color

slide(10,2,50,260);

glFlush();

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINE_LOOP); // Send window in WHITE color

glVertex2f(50,255);

glVertex2f(110,255);

glVertex2f(110,290);

glVertex2f(50,290);

glEnd();

glFlush();

glColor3f(0.0,0.0,1.0);

slide(10,2,300,260); // Initial set of frames in BLUE color

glEnd();

glFlush();

glColor3f(1.0,0.0,0.0); // initial sending frames in red

slide(5,2,50,260);

glEnd();

Page 106: grafika2

glFlush();

glColor3f(1.0,0.0,0.0); // receiver window in red

slide(5,2,300,260);

glEnd();

glFlush();

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINE_LOOP); // receiver window in WHITE color

glVertex2f(300,255);

glVertex2f(360,255);

glVertex2f(360,290);

glVertex2f(300,290);

glEnd();

glFlush();

// delay();

glColor3f(0.0,1.0,0.0); //Frame 0 sent and becoming green

slide(2,2,50,260);

glEnd();

glFlush();

glColor3f(1.0,0.0,0.0); // sliding the window and becoming green

slide(4,2,65,260);

glEnd();

glFlush();

Page 107: grafika2

move1(); // movement of data packet

glColor3f(0.0,0.0,1.0); // sliding the window and becoming green

slide(2,2,300,260);

glEnd();

glFlush();

glColor3f(1.0,0.0,0.0); // 4th frame red

slide(2,2,360,260);

glEnd();

glFlush();

glColor3f(0.0,0.0,0.0);

glBegin(GL_LINE_LOOP); // To remove initial WHITE window trace

glVertex2f(300,255);

glVertex2f(360,255);

glVertex2f(360,290);

glVertex2f(300,290);

glEnd();

glFlush();

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINE_LOOP); // moving the reciever window in WHITE color

glVertex2f(315,255);

glVertex2f(375,255);

glVertex2f(375,290);

Page 108: grafika2

glVertex2f(315,290);

glEnd();

glFlush();

glColor3f(0.0,0.0,1.0); // To remove traces

glBegin(GL_LINES);

glVertex2f(300,260);

glVertex2f(300,285);

glEnd();

glFlush();

glColor3f(1.0,0.0,0.0); // To remove traces

glBegin(GL_LINES);

glVertex2f(360,260);

glVertex2f(360,285);

glEnd();

glFlush();

glColor3f(0.0,1.0,0.0); // sliding the window and becoming green

slide(2,2,65,260);

glEnd();

glFlush();

glColor3f(0.0,0.0,1.0); // sliding the window and becoming green

slide(1,2,300,260);

glEnd();

glFlush();

Page 109: grafika2

move2();

glColor3f(1.0,1.0,1.0);

drawstring(69,268.0,0.0," 1");

glColor3f(1.0,1.0,1.0);

drawstring(55,268.0,0.0,"0");

glColor3f(1.0,1.0,1.0);

drawstring(320,268.0,0.0,"1");

glColor3f(0.0,0.0,1.0); // sliding the window and becoming blue

slide(2,2,50,260);

glEnd();

glFlush();

glColor3f(0.0,0.0,0.0);

glBegin(GL_LINE_LOOP); // To remove initial WHITE window trace

glVertex2f(50,255);

glVertex2f(50,290);

glVertex2f(110,290);

glVertex2f(110,255);

glEnd();

glFlush();

glColor3f(1.0,0.0,0.0); // sliding the window and becoming blue

slide(2,2,110,260);

glBegin(GL_LINES);

glVertex2f(110,260);

glVertex2f(110,285);

Page 110: grafika2

glEnd();

glFlush();

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINE_LOOP); // moving the reciever window in WHITE color

glVertex2f(65,255);

glVertex2f(65,290);

glVertex2f(125,290);

glVertex2f(125,255);

glEnd();

glFlush();

glColor3f(0.0,0.0,1.0); //to remove traces

glBegin(GL_LINES);

glVertex2f(50,260);

glVertex2f(50,285);

glEnd();

glFlush();

glColor3f(0.0,0.0,0.0);

glBegin(GL_LINE_LOOP); // moving the reciever window in WHITE color

glVertex2f(315,255);

glVertex2f(375,255);

glVertex2f(375,290);

glVertex2f(315,290);

glEnd();

glFlush();

Page 111: grafika2

glColor3f(1.0,0.0,0.0);

glBegin(GL_LINES);

glVertex2f(315,260);

glVertex2f(315,285);

glVertex2f(375,260);

glVertex2f(375,285);

glEnd();

glFlush();

glColor3f(0.0,0.0,1.0); // sliding the window and becoming green

slide(3,2,300,260);

glEnd();

glFlush();

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINE_LOOP); // moving the reciever window in WHITE color

glVertex2f(330,255);

glVertex2f(330,290);

glVertex2f(390,290);

glVertex2f(390,255);

glEnd();

glFlush();

glColor3f(1.0,0.0,0.0); // sliding the window and becoming green

slide(2,2,375,260);

glEnd();

glFlush();

Page 112: grafika2

//delay();

move8();

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0,1.0,1.0);

drawstring(334,268.0,0.0," 2");

glColor3f(0.0,0.0,0.0);

glBegin(GL_LINE_LOOP); // remove window trace

glVertex2f(65,255);

glVertex2f(65,290);

glVertex2f(125,290);

glVertex2f(125,255);

glEnd();

glFlush();

glColor3f(1.0,0.0,0.0); // sliding the window and becoming green

slide(5,2,80,260);

glEnd();

glFlush();

glColor3f(0.0,0.0,1.0); // sliding the window and becoming green

slide(3,2,50,260);

glEnd();

glFlush();

Page 113: grafika2

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINE_LOOP); // moving the reciever window in WHITE color

glVertex2f(80,255);

glVertex2f(80,290);

glVertex2f(140,290);

glVertex2f(140,255);

glEnd();

glFlush();

// delay();

}

void draw4(void) // DRAWING OF PACKET CRASHNG

{

//second screen for lost packet

//delay();

glClear(GL_COLOR_BUFFER_BIT);

computer();

glColor3f(1.6,1.9,1.2);

setFont(GLUT_BITMAP_HELVETICA_18);

drawstring(200.0,465.0,1.0,"P A C K E T C R A S H I N G");

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0,1.0,1.0);

drawstring(56,268.0,0.0,"0");

glColor3f(1.0,1.0,1.0);

drawstring(70,268.0,0.0,"1");

glColor3f(1.0,1.0,1.0);

Page 114: grafika2

drawstring(85,268.0,0.0,"2");

glColor3f(1.0,1.0,1.0);

drawstring(100,268.0,0.0,"3");

glColor3f(1.0,1.0,1.0);

drawstring(114,268.0,0.0," 4");

glColor3f(1.0,1.0,1.0);

drawstring(130,268.0,0.0,"5");

glColor3f(1.0,1.0,1.0);

drawstring(147,268.0,0.0,"6");

glColor3f(1.0,1.0,1.0);

drawstring(163,268.0,0.0,"7");

glColor3f(1.0,1.0,1.0);

drawstring(177,268.0,0.0,"0");

glColor3f(1.0,1.0,1.0);

drawstring(305,268.0,0.0,"0");

glColor3f(1.0,1.0,1.0);

drawstring(320,268.0,0.0,"1");

glColor3f(1.0,1.0,1.0);

drawstring(334,268.0,0.0," 2");

glColor3f(1.0,1.0,1.0);

drawstring(349,268.0,0.0,"3");

glColor3f(1.0,1.0,1.0);

drawstring(365,268.0,0.0,"4");

glColor3f(1.0,1.0,1.0);

drawstring(379,268.0,0.0," 5");

glColor3f(1.0,1.0,1.0);

drawstring(394,268.0,0.0,"6");

Page 115: grafika2

glColor3f(1.0,1.0,1.0);

drawstring(409,268.0,0.0,"7");

glColor3f(1.0,1.0,1.0);

drawstring(424,268.0,0.0,"0");

glColor3f(0.0,0.0,1.0);

slide(10,2,50,260); // Initial set of frames in BLUE color

glColor3f(1.0,0.0,0.0);

slide(5,2,50,260); // red frames in window

glEnd();

glFlush();

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINE_LOOP); // send window in WHITE color

glVertex2f(50,255);

glVertex2f(50,290);

glVertex2f(110,290);

glVertex2f(110,255);

glEnd();

glFlush();

//Reciver Window

glColor3f(0.0,0.0,1.0);

slide(10,2,300,260); // Initial set of frames in BLUE color

glEnd();

glFlush();

Page 116: grafika2

glColor3f(1.0,0.0,0.0);

slide(5,2,300,260); // red frames in window

glEnd();

glFlush();

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINE_LOOP); // moving the reciever window in WHITE color

glVertex2f(300,255);

glVertex2f(360,255);

glVertex2f(360,290);

glVertex2f(300,290);

glEnd();

glFlush();

// delay();

glColor3f(0.0,1.0,0.0);

slide(2,2,50,260); // red frames in window

glEnd();

glFlush();

move1();

glColor3f(0.0,0.0,1.0); // sliding the window and becoming green

slide(2,2,300,260);

glEnd();

glFlush();

glColor3f(1.0,0.0,0.0); // 4th frame red

Page 117: grafika2

slide(2,2,360,260);

glEnd();

glFlush();

glColor3f(0.0,0.0,0.0);

glBegin(GL_LINE_LOOP); // To remove initial WHITE window trace

glVertex2f(300,255);

glVertex2f(360,255);

glVertex2f(360,290);

glVertex2f(300,290);

glEnd();

glFlush();

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINE_LOOP); // moving the reciever window in WHITE color

glVertex2f(315,255);

glVertex2f(375,255);

glVertex2f(375,290);

glVertex2f(315,290);

glEnd();

glFlush();

glColor3f(0.0,0.0,1.0); // To remove traces

glBegin(GL_LINES);

glVertex2f(300,260);

glVertex2f(300,285);

glEnd();

Page 118: grafika2

glFlush();

glColor3f(1.0,0.0,0.0); // To remove traces

glBegin(GL_LINES);

glVertex2f(360,260);

glVertex2f(360,285);

glEnd();

glFlush();

glColor3f(0.0,1.0,0.0); // sliding the window and becoming green

slide(2,2,65,260);

glEnd();

glFlush();

move2();

glColor3f(0.0,0.0,1.0); // sliding the window and becoming blue

slide(2,2,50,260);

glEnd();

glFlush();

glColor3f(0.0,0.0,0.0);

glBegin(GL_LINE_LOOP); // To remove initial WHITE window trace

glVertex2f(50,255);

glVertex2f(50,290);

glVertex2f(110,290);

glVertex2f(110,255);

glEnd();

glFlush();

Page 119: grafika2

glColor3f(1.0,0.0,0.0); // sliding the window and becoming blue

slide(2,2,110,260);

glBegin(GL_LINES);

glVertex2f(110,260);

glVertex2f(110,285);

glEnd();

glFlush();

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINE_LOOP); // moving the reciever window in WHITE color

glVertex2f(65,255);

glVertex2f(65,290);

glVertex2f(125,290);

glVertex2f(125,255);

glEnd();

glFlush();

glColor3f(0.0,0.0,1.0); //to remove traces

glBegin(GL_LINES);

glVertex2f(50,260);

glVertex2f(50,285);

glEnd();

glFlush();

glColor3f(0.0,0.0,0.0);

glBegin(GL_LINE_LOOP); // moving the reciever window in WHITE color

glVertex2f(315,255);

Page 120: grafika2

glVertex2f(375,255);

glVertex2f(375,290);

glVertex2f(315,290);

glEnd();

glFlush();

glColor3f(1.0,0.0,0.0);

glBegin(GL_LINES);

glVertex2f(315,260);

glVertex2f(315,285);

glVertex2f(375,260);

glVertex2f(375,285);

glEnd();

glFlush();

glColor3f(0.0,0.0,1.0); // sliding the window and becoming green

slide(3,2,300,260);

glEnd();

glFlush();

glColor3f(1.0,0.0,0.0); // sliding the window and becoming green

slide(2,2,375,260);

glEnd();

glFlush();

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINE_LOOP); // moving the reciever window in WHITE color

glVertex2f(330,255);

Page 121: grafika2

glVertex2f(330,290);

glVertex2f(390,290);

glVertex2f(390,255);

glEnd();

glFlush();

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0,1.0,1.0);

drawstring(56,268.0,0.0,"0");

glColor3f(1.0,1.0,1.0);

drawstring(320,268.0,0.0,"1");

move8();

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0,1.0,1.0);

drawstring(70,268.0,0.0,"1");

glColor3f(0.0,0.0,0.0);

glBegin(GL_LINE_LOOP); // remove window trace

glVertex2f(65,255);

glVertex2f(65,290);

glVertex2f(125,290);

glVertex2f(125,255);

glEnd();

glFlush();

Page 122: grafika2

glColor3f(1.0,0.0,0.0); // sliding the window and becoming green

slide(5,2,80,260);

glEnd();

glFlush();

glColor3f(0.0,0.0,1.0); // sliding the window and becoming green

slide(3,2,50,260);

glEnd();

glFlush();

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINE_LOOP); // moving the reciever window in WHITE color

glVertex2f(80,255);

glVertex2f(80,290);

glVertex2f(140,290);

glVertex2f(140,255);

glEnd();

glFlush();

glColor3f(0.0,1.0,0.0);

slide(2,2,80,260);

glFlush();

move3();

glColor3f(1.0,0.0,0.0); //packet crashing

glBegin(GL_POLYGON);

glVertex2f(240,168);

glVertex2f(255,168);

glVertex2f(260,178);

glVertex2f(265,168);

Page 123: grafika2

glVertex2f(280,168);

glVertex2f(267.5,163);

glVertex2f(280,153);

glVertex2f(260,163);

glVertex2f(240,153);

glVertex2f(252.5,163);

glEnd();

glFlush();

glColor3f(0.0,0.0,0.0); //to remove traces

glBegin(GL_TRIANGLES);

glVertex2f(240,168);

glVertex2f(260,178);

glVertex2f(255,168);

glEnd();

glFlush();

glBegin(GL_TRIANGLES);

glVertex2f(240,168);

glVertex2f(252.5,163);

glVertex2f(240,153);

glEnd();

glFlush();

glColor3f(0.0,0.0,1.0);

slide(2,2,65,260);

glFlush();

Page 124: grafika2

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINES);

glVertex2f(80,260);

glVertex2f(80,285);

glEnd();

glColor3f(0.0,1.0,0.0);

slide(2,2,95,260);

glFlush();

move5();

glColor3f(1.0,1.0,1.0);

drawstring(334,268.0,0.0," 2");

glColor3f(0.0,1.0,0.0);

slide(2,2,345,260);

glFlush();

glColor3f(0.0,1.0,0.0);

slide(2,2,110,260);

glFlush();

move10();

glColor3f(0.0,1.0,0.0);

slide(2,2,360,260);

glFlush();

glColor3f(0,0,0);

glBegin(GL_POLYGON); //to remove timer trace

glVertex2f(100,80);

glVertex2f(100,90);

Page 125: grafika2

glVertex2f(225,90);

glVertex2f(225,80);

glEnd();

glFlush();

glColor3f(0.0,0.0,0.0); //packet crashing

glBegin(GL_POLYGON);

glVertex2f(240,168);

glVertex2f(255,168);

glVertex2f(260,178);

glVertex2f(265,168);

glVertex2f(280,168);

glVertex2f(267.5,163);

glVertex2f(280,153);

glVertex2f(260,163);

glVertex2f(240,153);

glVertex2f(252.5,163);

glEnd();

glFlush();

glColor3f(0.0,0.0,0.0); //to remove traces

glBegin(GL_TRIANGLES);

glVertex2f(240,168);

glVertex2f(260,178);

glVertex2f(255,168);

glEnd();

glFlush();

glBegin(GL_TRIANGLES);

Page 126: grafika2

glVertex2f(240,168);

glVertex2f(252.5,163);

glVertex2f(240,153);

glEnd();

glFlush();

glColor3f(0.0f,0.0f,0.0f);

drawstring(280.0,163.0,1.0,"FRAME 2 lost");

move4();

glColor3f(1.0,1.0,1.0);

drawstring(334,268.0,0.0," 2");

glColor3f(0.0,1.0,0.0);

slide(2,2,330,260);

glFlush();

//delay();

glColor3f(0.0,0.0,0.0);

glBegin(GL_LINE_LOOP); // moving the reciever window in WHITE color

glVertex2f(330,255);

glVertex2f(330,290);

glVertex2f(390,290);

glVertex2f(390,255);

glEnd();

glFlush();

glColor3f(0.0,0.0,1.0);

slide(6,2,300,260);

glFlush();

glColor3f(1.0,0.0,0.0);

Page 127: grafika2

slide(5,2,375,260);

glFlush();

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINE_LOOP); // moving the reciever window in WHITE color

glVertex2f(375,255);

glVertex2f(375,290);

glVertex2f(435,290);

glVertex2f(435,255);

glEnd();

glFlush();

move11();

glColor3f(1.0,1.0,1.0);

drawstring(85,268.0,0.0,"2");

glColor3f(1.0,1.0,1.0);

drawstring(100,268.0,0.0,"3");

glColor3f(1.0,1.0,1.0);

drawstring(114,268.0,0.0," 4");

glColor3f(1.0,1.0,1.0);

drawstring(379,268.0,0.0," 5");

glColor3f(0.0,0.0,0.0);

glBegin(GL_LINE_LOOP); // moving the reciever window in WHITE color

glVertex2f(80,255);

glVertex2f(80,290);

glVertex2f(140,290);

glVertex2f(140,255);

Page 128: grafika2

glEnd();

glFlush();

glColor3f(0.0,0.0,1.0);

slide(6,2,50,260);

glFlush();

glColor3f(1.0,0.0,0.0);

slide(5,2,125,260);

glFlush();

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINE_LOOP); // moving the reciever window in WHITE color

glVertex2f(125,255);

glVertex2f(125,290);

glVertex2f(185,290);

glVertex2f(185,255);

glEnd();

glFlush();

}

void draw5(void) // to show time out

{

//Sender site initial window

glClear(GL_COLOR_BUFFER_BIT);

computer();

glColor3f(0.0,0.0,1.0);

slide(10,2,50,260); // Initial set of frames in BLUE color

glFlush();

Page 129: grafika2

glColor3f(1.6,1.9,1.2);

setFont(GLUT_BITMAP_HELVETICA_18);

drawstring(200.0,465.0,1.0,"T I M E O U T");

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0,1.0,1.0);

drawstring(55,268.0,0.0,"0");

glColor3f(1.0,1.0,1.0);

drawstring(69,268.0,0.0," 1");

glColor3f(1.0,1.0,1.0);

drawstring(84,268.0,0.0," 2");

glColor3f(1.0,1.0,1.0);

drawstring(99,268.0,0.0,"3");

glColor3f(1.0,1.0,1.0);

drawstring(114,268.0,0.0,"4");

glColor3f(1.0,1.0,1.0);

drawstring(130,268.0,0.0,"5");

glColor3f(1.0,1.0,1.0);

drawstring(147,268.0,0.0,"6");

glColor3f(1.0,1.0,1.0);

drawstring(163,268.0,0.0,"7");

glColor3f(1.0,1.0,1.0);

drawstring(177,268.0,0.0,"0");

glColor3f(1.0,1.0,1.0);

drawstring(305,268.0,0.0,"0");

glColor3f(1.0,1.0,1.0);

drawstring(320,268.0,0.0,"1");

Page 130: grafika2

glColor3f(1.0,1.0,1.0);

drawstring(334,268.0,0.0," 2");

glColor3f(1.0,1.0,1.0);

drawstring(349,268.0,0.0," 3");

glColor3f(1.0,1.0,1.0);

drawstring(364,268.0,0.0,"4");

glColor3f(1.0,1.0,1.0);

drawstring(379,268.0,0.0,"5");

glColor3f(1.0,1.0,1.0);

drawstring(394,268.0,0.0,"6");

glColor3f(1.0,1.0,1.0);

drawstring(409,268.0,0.0,"7");

glColor3f(1.0,1.0,1.0);

drawstring(424,268.0,0.0,"0");

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINE_LOOP); // Send window in WHITE color

glVertex2f(50,255);

glVertex2f(110,255);

glVertex2f(110,290);

glVertex2f(50,290);

glEnd();

glFlush();

glColor3f(0.0,0.0,1.0);

slide(10,2,300,260); // Initial set of frames in BLUE color

glEnd();

glFlush();

Page 131: grafika2

glColor3f(1.0,0.0,0.0); // initial sending frames in red

slide(5,2,50,260);

glEnd();

glFlush();

glColor3f(1.0,0.0,0.0); // receiver window in red

slide(5,2,300,260);

glEnd();

glFlush();

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINE_LOOP); // receiver window in WHITE color

glVertex2f(300,255);

glVertex2f(360,255);

glVertex2f(360,290);

glVertex2f(300,290);

glEnd();

glFlush();

// delay();

glColor3f(0.0,1.0,0.0); //Frame 0 sent and becoming green

slide(2,2,50,260);

glEnd();

glFlush();

//timer1();

glColor3f(1.0,0.0,0.0); // sliding the window and becoming green

slide(4,2,65,260);

glEnd();

Page 132: grafika2

glFlush();

move1(); // movement of data packet

glColor3f(0.0,0.0,1.0); // sliding the window and becoming green

slide(2,2,300,260);

glEnd();

glFlush();

glColor3f(1.0,0.0,0.0); // 4th frame red

slide(2,2,360,260);

glEnd();

glFlush();

glColor3f(0.0,0.0,0.0);

glBegin(GL_LINE_LOOP); // To remove initial WHITE window trace

glVertex2f(300,255);

glVertex2f(360,255);

glVertex2f(360,290);

glVertex2f(300,290);

glEnd();

glFlush();

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINE_LOOP); // moving the reciever window in WHITE color

glVertex2f(315,255);

glVertex2f(375,255);

glVertex2f(375,290);

glVertex2f(315,290);

Page 133: grafika2

glEnd();

glFlush();

glColor3f(0.0,0.0,1.0); // To remove traces

glBegin(GL_LINES);

glVertex2f(300,260);

glVertex2f(300,285);

glEnd();

glFlush();

glColor3f(1.0,0.0,0.0); // To remove traces

glBegin(GL_LINES);

glVertex2f(360,260);

glVertex2f(360,285);

glEnd();

glFlush();

glColor3f(0.0,1.0,0.0); // sliding the window and becoming green

slide(2,2,65,260);

glEnd();

glFlush();

glColor3f(0.0,0.0,1.0); // sliding the window and becoming green

slide(1,2,300,260);

glEnd();

Page 134: grafika2

glFlush();

move2();

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0,1.0,1.0);

drawstring(69,268.0,0.0," 1");

glColor3f(1.0,1.0,1.0);

drawstring(320,268.0,0.0,"1");

glColor3f(0.0,0.0,1.0); // sliding the window and becoming blue

slide(2,2,50,260);

glEnd();

glFlush();

glColor3f(0.0,0.0,0.0);

glBegin(GL_LINE_LOOP); // To remove initial WHITE window trace

glVertex2f(50,255);

glVertex2f(50,290);

glVertex2f(110,290);

glVertex2f(110,255);

glEnd();

glFlush();

glColor3f(1.0,0.0,0.0); // sliding the window and becoming blue

slide(2,2,110,260);

glBegin(GL_LINES);

glVertex2f(110,260);

Page 135: grafika2

glVertex2f(110,285);

glEnd();

glFlush();

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINE_LOOP); // moving the reciever window in WHITE color

glVertex2f(65,255);

glVertex2f(65,290);

glVertex2f(125,290);

glVertex2f(125,255);

glEnd();

glFlush();

glColor3f(0.0,0.0,1.0); //to remove traces

glBegin(GL_LINES);

glVertex2f(50,260);

glVertex2f(50,285);

glEnd();

glFlush();

glColor3f(0.0,0.0,0.0);

glBegin(GL_LINE_LOOP); // moving the reciever window in WHITE color

glVertex2f(315,255);

glVertex2f(375,255);

glVertex2f(375,290);

glVertex2f(315,290);

glEnd();

Page 136: grafika2

glFlush();

glColor3f(1.0,0.0,0.0);

glBegin(GL_LINES);

glVertex2f(315,260);

glVertex2f(315,285);

glVertex2f(375,260);

glVertex2f(375,285);

glEnd();

glFlush();

glColor3f(0.0,0.0,1.0); // sliding the window and becoming green

slide(3,2,300,260);

glEnd();

glFlush();

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINE_LOOP); // moving the reciever window in WHITE color

glVertex2f(330,255);

glVertex2f(330,290);

glVertex2f(390,290);

glVertex2f(390,255);

glEnd();

glFlush();

glColor3f(1.0,0.0,0.0); // sliding the window and becoming green

slide(2,2,375,260);

glEnd();

glFlush();

Page 137: grafika2

move12();

setFont(GLUT_BITMAP_HELVETICA_18);

glColor3f(1.0f,1.0f,1.0f);

drawstring(280.0,163.0,1.0,"ACK 2 lost");

glColor3f(0.0,1.0,1.0); //packet crashing

glBegin(GL_POLYGON);

glVertex2f(240,168);

glVertex2f(255,168);

glVertex2f(260,178);

glVertex2f(265,168);

glVertex2f(280,168);

glVertex2f(267.5,163);

glVertex2f(280,153);

glVertex2f(260,163);

glVertex2f(240,153);

glVertex2f(252.5,163);

glEnd();

glFlush();

glColor3f(0.0,0.0,0.0); //to remove traces

glBegin(GL_TRIANGLES);

glVertex2f(240,168);

glVertex2f(260,178);

glVertex2f(255,168);

glEnd();

glFlush();

Page 138: grafika2

glBegin(GL_TRIANGLES);

glVertex2f(240,168);

glVertex2f(252.5,163);

glVertex2f(240,153);

glEnd();

glFlush();

glColor3f(0.0,1.0,0.0); // sliding the window and becoming green

slide(2,2,80,260);

glEnd();

glFlush();

glColor3f(0.0,0.0,0.0);

glBegin(GL_POLYGON); // moving the reciever window in WHITE color

glVertex2f(358,120);

glVertex2f(358,130);

glVertex2f(485,130);

glVertex2f(485,120);

glEnd();

glFlush();

move14();

setFont(GLUT_BITMAP_HELVETICA_12);

glColor3f(1.0,1.0,1.0);

drawstring(334,268.0,0.0,"2");

setFont(GLUT_BITMAP_HELVETICA_18);

glColor3f(0.0f,0.0f,0.0f);

drawstring(280.0,163.0,1.0,"ACK 2 lost");

Page 139: grafika2

glColor3f(0.0,0.0,0.0);

glBegin(GL_POLYGON); // moving the reciever window in WHITE color

glVertex2f(98,100);

glVertex2f(98,112);

glVertex2f(225,112);

glVertex2f(225,100);

glEnd();

glFlush();

glColor3f(0.0,0.0,0.0);

glBegin(GL_LINE_LOOP); // moving the reciever window in WHITE color

glVertex2f(330,255);

glVertex2f(330,290);

glVertex2f(390,290);

glVertex2f(390,255);

glEnd();

glFlush();

glColor3f(0.0,0.0,1.0); // sliding the window and becoming green

slide(4,2,300,260);

glEnd();

glFlush();

glColor3f(1.0,0.0,0.0); // sliding the window and becoming green

slide(2,2,390,260);

glEnd();

glFlush();

Page 140: grafika2

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINE_LOOP); // moving the reciever window in WHITE color

glVertex2f(345,255);

glVertex2f(345,290);

glVertex2f(405,290);

glVertex2f(405,255);

glEnd();

glFlush();

glColor3f(0.0,0.0,0.0); //packet crashing

glBegin(GL_POLYGON);

glVertex2f(240,168);

glVertex2f(255,168);

glVertex2f(260,178);

glVertex2f(265,168);

glVertex2f(280,168);

glVertex2f(267.5,163);

glVertex2f(280,153);

glVertex2f(260,163);

glVertex2f(240,153);

glVertex2f(252.5,163);

glEnd();

glFlush();

move13();

setFont(GLUT_BITMAP_HELVETICA_12);

Page 141: grafika2

glColor3f(1.0,1.0,1.0);

drawstring(55,268.0,0.0,"0");

glColor3f(1.0,1.0,1.0);

drawstring(69,268.0,0.0," 1");

glColor3f(1.0,1.0,1.0);

drawstring(84,268.0,0.0," 2");

glColor3f(1.0,1.0,1.0);

drawstring(349,268.0,0.0,"3");

glColor3f(0.0,0.0,0.0);

glBegin(GL_LINE_LOOP); // moving the reciever window in WHITE color

glVertex2f(65,255);

glVertex2f(65,290);

glVertex2f(125,290);

glVertex2f(125,255);

glEnd();

glFlush();

glColor3f(0.0,0.0,1.0); // sliding the window and becoming green

slide(4,2,50,260);

glEnd();

glFlush();

glColor3f(1.0,0.0,0.0); // sliding the window and becoming green

slide(5,2,95,260);

glEnd();

glFlush();

glColor3f(1.0,1.0,1.0);

glBegin(GL_LINE_LOOP); // moving the reciever window in WHITE color

glVertex2f(95,255);

Page 142: grafika2

glVertex2f(95,290);

glVertex2f(155,290);

glVertex2f(155,255);

glEnd();

glFlush();

}

void draw6(void) // text for keyboard interaction

{

glColor3f(0.0,0.0,0.0);

glBegin(GL_POLYGON);

glVertex2f(0,0);

glVertex2f(0,135);

glVertex2f(500,135);

glVertex2f(500,0);

glEnd();

glFlush();

glColor3f(1.0f,1.0f,1.0f);

setFont(GLUT_BITMAP_HELVETICA_18);

drawstring(360.0,130.0,1.0,"DO U WISH TO CONTINUE?");

glColor3f(1.0f,1.0f,1.0f);

drawstring(360.0,110.0,1.0,"PRESS Y/N");

glFlush();

}

void display(void){

glClear(GL_COLOR_BUFFER_BIT);

title();

delay();

Page 143: grafika2

draw();

text();

}

void mykeyboard(unsigned char key,int x,int y){

if(key=='y' || key=='Y'){

draw();

text();

}

else if(key=='N' || key=='n'){

exit(0);

}

}

void myMouse(int btn, int state, int x, int y){

if(btn==GLUT_LEFT_BUTTON && state == GLUT_DOWN ){

x=x/2;

y=(1000-y)/2;

if ((x>=180 && x<=305) && (y>=395 && y<=425 ))// Menu ke-1

{

draw1();

draw6();

}

if((x>=180 && x<=305) && (y>=354 && y<=375 ))// Menu ke-2

{

draw2();

draw6();

}

if((x>=180 && x<=305) && (y>=311 && y<=333 )) // Menu ke-3

Page 144: grafika2

{

draw3();

delay();

draw6();

}

if((x>=180 && x<=305) && (y>=269 && y<=293 )) // Menu ke-4

{

draw4();

delay();

draw6();

}

if((x>=180 && x<=305) && (y>=226 && y<=249 )) // Menu ke-5

{

draw5();

delay();

draw6();

}

if((x>=180 && x<=305) && (y>=183 && y<=206 )) // Menu ke-6

{

exit(0);}

}

}

int main(int argc,char **argv)

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA);

glutInitWindowPosition(0,0);

Page 145: grafika2

glutInitWindowSize(1000,1000);

glutCreateWindow("Selective Repeat ARQ");

glutDisplayFunc(display);

glutMouseFunc(myMouse);

glutKeyboardFunc(mykeyboard);

myInit();

glutMainLoop();

return 0;

}