#include "STALNI.C"
int nema_brata(struct proces *pocetak, struct proces *proc);
int proc_PPID(struct proces *pocetak, int proc_PID);
void DodajUNovuListu(struct proces **novaLista, struct proces *adresa);//deklaracija funkcije DodajUNovuListu
struct proces *NovaLista(struct proces *pocetak)
{
struct proces *p, *novaLista=NULL;
p = pocetak;
while(p)
{
if (nema_brata(pocetak, p))
{
DodajUNovuListu(&novaLista, p);
}
p = p->sljedeci;
}
return novaLista;
}
void DodajUNovuListu(struct proces **novaLista, struct proces *adresa)
{
struct proces *t, *prethodni, *novi_proces; //deklaracija varijabli
novi_proces = (struct proces *) malloc(sizeof(struct proces)); //alokacija memorije za novi_proces
novi_proces->PID = adresa->PID; //izjednacavanje vrijednosti kazaljki
novi_proces->UID = adresa->UID; // -||-
novi_proces->GID = adresa->GID; // -||-
novi_proces->PPID = adresa->PPID; // -||-
novi_proces->prioritet = adresa->prioritet; // -||-
novi_proces->status = adresa->status; // -||-
novi_proces->sljedeci = NULL; //slijednik novog procesa se postavlja na nulu
if(*novaLista==NULL) //ako je nova lista prazna
{
*novaLista=novi_proces; //novaLista poprima adresu varijable novi_proces
}
else //ako nova lista nije prazna
{
t=prethodni= *novaLista; //t i prethodni poprimaju vrijednost nove liste
while(t) //petlja trazi posljednji element
{
prethodni=t;
t=t->sljedeci;
}
prethodni->sljedeci=novi_proces; //novi proces postaje slijednik zadnjeg
}
}
void Lista(struct proces **pocetak) //deklaracija funkcije potrebna za izvodenje programa "stalni.c"
{
}
int nema_brata(struct proces *pocetak, struct proces *proc)
{
struct proces *p = pocetak;
while(p)
{
// ako trenutni element nije zadan element (argumentom), i provjerava li je isti roditelj
if(p != proc && proc_PPID(pocetak, p->PID) == proc->PPID)
return 0;
p = p->sljedeci;
}
return 1;
}
// pronadji PPID od proc_PID elementa (vrati roditelja)
int proc_PPID(struct proces *pocetak, int proc_PID)
{
struct proces *p = pocetak;
while(p)
{
if(p->PID == proc_PID)
return p->PPID;
p = p->sljedeci;
}
return 0;
}