Ejemplo n.º 1
0
    public int polecenia()
    {
        int stop = 0, bre = 0;

        while (true)
        {
            Console.Write("Komenda:");
            string com;
            com = Console.ReadLine();
            string[] comenda = com.Split(' ');

            switch (comenda[0])
            {
            case "Blokipam":
            {
                pam.ListaZajetychBlokow();
                break;
            }

            case "Stronypam":
            {
                pam.StronyPamieci();
                break;
            }

            case "Pamiecfiz":
            {
                pam.PamiecFizyczna();
                break;
            }

            case "Pamiec":
            {
                Console.WriteLine(pam);
                break;
            }


            case "adduse":

                try
                {
                    adduse(comenda[1], comenda[2], comenda[3]);
                }
                catch (System.IndexOutOfRangeException)
                {
                    Console.WriteLine("niepoprawne dane");
                }
                break;

            case "removeuse":

                int g = 1;
                try
                {
                    g = removeuse(comenda[1]);
                }
                catch (System.IndexOutOfRangeException)
                {
                    Console.WriteLine("niepoprawne dane");
                }
                if (g == 0)
                {
                    Console.WriteLine("nie istnieje taki uzytkownik");
                }


                break;

            case "addgru":
            {
                dodajgru(comenda[1]);

                break;
            }

            case "removegru":
                string[] t = File.ReadAllLines(sciezka);
                int      b = 0, c = t.Length;
                for (int i = 4; i < c; i = i + 3)
                {
                    if (t[i] == comenda[1])
                    {
                        b = 1;
                    }
                }


                if (b == 0)
                {
                    removegru(comenda[1]);
                }
                else
                {
                    Console.WriteLine("usuń najpierw uzytkownikow nalezących do grupy");
                }
                break;

            case "logout":
                stop = wylogowanie();
                break;



            case "exit":
                bre = exit();
                break;


            case "zmienkat":
                int a;

                a = iwezel.czyistnieje(ref p, comenda[1]);
                if (a == -1 || a == 0)
                {
                    Console.WriteLine("nie istnieje taka nazwa");
                }
                else
                {
                    if (p.tabi[a].Typ == 'p')
                    {
                        Console.WriteLine("to nie jest katalog");
                    }
                    else
                    {
                        aktualnykatalog = comenda[1];
                    }
                }
                break;

            case "creatk":

                iwezel.create(ref p, comenda[1], 'k', aktualnykatalog);


                break;

            case "creatp":

                iwezel.create(ref p, comenda[1], 'p', aktualnykatalog);
                iwezel.open(ref p, comenda[1], flaga.wonly, ref o, ref slowo);

                break;

            case "delete":

                iwezel.delete(ref p, comenda[1], ref o);

                break;

            case "open":
            {
                iwezel.open(ref p, comenda[1], flaga.ronly, ref o, ref slowo);
                if (slowo != null)
                {
                    Console.WriteLine("\nOdczytano z pliku następujące dane: \n" + slowo);
                }

                break;
            }

            case "pisz":
                iwezel.open(ref p, comenda[1], flaga.wonly, ref o, ref slowo);
                break;

            case "pliki?":
            {
                Console.WriteLine();
                Console.WriteLine("5. Tablica i-wezłów");
                Console.WriteLine("6. Jakie bloki zajmuje plik");
                Console.WriteLine("7. Który blok wyświetlić dla pliku");
                Console.WriteLine("8. Wyświetlenie zawartości wszystkich katalogów");
                Console.WriteLine("9. Jakie bloki na dysku są wolne, zajęte");
                Console.WriteLine("10. Wyświetlenie całego dysku lub wybranego bloku");
                Console.WriteLine();
                break;
            }

            case "5":
            {
                Console.WriteLine("\nTablica i-węzłów");
                iwezel.Wyswtabi(ref p);
                break;
            }

            case "6":
            {
                Console.WriteLine("6. Jakie bloki zajmuje plik");
                Console.WriteLine("\nPodaj nazwę plku");
                string nazwa;
                nazwa = Console.ReadLine();
                iwezel.wyswzajblok(ref p, nazwa);

                break;
            }

            case "7":
            {
                Console.WriteLine("7. Który blok wyświetlić dla pliku");
                int v = 0;
                Console.WriteLine("\nPodaj nazwę plku");
                string nazwa, nazwa2;
                nazwa = Console.ReadLine();
                int numer = -1;
                Console.WriteLine("\nPodaj nr bloku, który chcesz wyświetlić");
                do
                {
                    if (v > 0)
                    {
                        Console.WriteLine("\nPodaj nr bloku jeszcze raz");
                    }

                    try
                    {
                        nazwa2 = Console.ReadLine();
                        numer  = Int32.Parse(nazwa2);
                    }
                    catch (FormatException ex)
                    {
                        Console.WriteLine("Podaj liczbę!");
                    }

                    v++;
                } while (numer < 0 || numer > 6);
                blok.Wyswietblok(ref p, numer, nazwa);

                break;
            }

            case "8":
            {
                Console.WriteLine("8. Wyświetlenie zawartości wszystkich katalogów");
                WpisK.wyswk2(ref p);

                break;
            }

            case "9":
            {
                string nazwa;
                int    v = 0;
                Console.WriteLine("9. Jakie bloki na dysku są wolne, zajęte");
                Console.WriteLine("\nKtóre wyświetlić?  Wolne(w) czy Zajęte(z)?");
                do
                {
                    if (v > 0)
                    {
                        Console.WriteLine("nie ma takiej akcji proszę podać jeszcze raz 'w' lub 'z'");
                    }

                    nazwa = Console.ReadLine();

                    if (nazwa == "w" || nazwa == "W")
                    {
                        blok.wolnebloki(ref p, ref o);
                    }


                    if (nazwa == "z" || nazwa == "Z")
                    {
                        blok.zajetebloki(ref p, ref o);
                    }
                    v++;
                } while (nazwa != "w" && nazwa != "W" && nazwa != "z" && nazwa != "Z");

                break;
            }

            case "10":
            {
                string nazwa, nazwa2;
                int    v = 0, v1 = 0;
                int    numer = -1;
                Console.WriteLine("10. Wyświetlenie całego dysku lub wybranego bloku");
                Console.WriteLine("\nCo wyświetlić?  Blok(b) czy Dysk(d)?");
                do
                {
                    if (v > 0)
                    {
                        Console.WriteLine("nie ma takiej akcji proszę podać jeszcze raz 'b' lub 'd'");
                    }

                    nazwa = Console.ReadLine();

                    if (nazwa == "b" || nazwa == "B")
                    {
                        Console.WriteLine("Proszę podać nr bloku");
                        do
                        {
                            if (v1 > 0)
                            {
                                Console.WriteLine("Nie ma takiego bloku. Podaj jeszcze raz");
                            }

                            try
                            {
                                nazwa2 = Console.ReadLine();
                                numer  = Int32.Parse(nazwa2);
                            }
                            catch (FormatException ex)
                            {
                                Console.WriteLine("Podaj liczbę!");
                            }

                            if (numer >= 0 && numer < 64)
                            {
                                blok.Wyswietbloklubdysk(ref p, numer, nazwa);
                            }

                            v1++;
                        } while (numer < 0 || numer > 63);
                    }


                    if (nazwa == "d" || nazwa == "D")
                    {
                        blok.Wyswietbloklubdysk(ref p, 0, nazwa);
                    }


                    v++;
                } while (nazwa != "d" && nazwa != "D" && nazwa != "b" && nazwa != "B");

                break;
            }

            case "proces":
            {
                Console.WriteLine("podaj PPID, PID i priorytet");
                int ax1, bx1, cx1;
                ax1 = int.Parse(Console.ReadLine());
                bx1 = int.Parse(Console.ReadLine());
                cx1 = int.Parse(Console.ReadLine());
                proces ppp = zarzadcapr.utwProDziecko(ax1, bx1, cx1);
                Console.WriteLine("Proces dodano");



                zarzadcapr.exec(ppp);

                Console.WriteLine("Podaj ile bloków powinien posiadac proces");
                //wczytane = Console.ReadLine();     po 3 bloki na proces
                ppp.heapAddrStart = pam.Zaalokuj(3);           // statycznie ustawiony na 3

                iwezel.open(ref p, comenda[1], flaga.ronly, ref o, ref slowo);

                //byte[] tabrozk;

                string[] str = slowo.Split(' ');         // stringa zarzutowac na uinta a uinta na bajty   // integer

                byte[] ttmp = new byte[4];
                int    y    = 0;
                for (int l = 0; l < str.Length; l++)
                {
                    uint tmp = Convert.ToUInt32(str[l]);
                    ttmp = BitConverter.GetBytes(tmp);
                    uint tmppp = BitConverter.ToUInt32(ttmp, 0);
                    for (int x = 0; x < ttmp.Length; x++)
                    {
                        pam.Zapisz(ppp.heapAddrStart + y, ttmp[x]);
                        y++;
                    }
                }

                ile++;


                //////////////////////////////////////////////////////////////////////////////////////////
                Console.WriteLine(pam);
                break;
            }

            case "procesor":
            {
                ////////////////////////////////////////////////////////////////////////////////////////////////
                Symulacja_procesora proc = new Symulacja_procesora(1, 4, 15);
                Interpreter         it   = new Interpreter();

                proc.main.dodajnowy(zarzadcapr.kolejka.wyslijproces());         //-> dodaje 1 proces na starcie systemu [wklejam funkcje od Tadka]

                Console.WriteLine("\nStart Symulacji procesora!");

                proc.main.info();
                proces tmpp   = proc.main.znajdz_zwroc_usun();
                byte[] tabpam = new byte[4];
                int    z      = 0;
                while (true)
                {
                    for (int i = 0; i < 4; i++)
                    {
                        tabpam[i] = pam.Odczytaj(tmpp.heapAddrStart + i + (tmpp.l_rozk * 4));
                    }

                    uint tmpppp = BitConverter.ToUInt32(tabpam, 0);         // test -> jaki rozkaz

                    proc.blokada = it.wykonajInstrukcje(tmpp, tabpam);      // -> wynonanie 1 instrukcji z podanego procesu [wklejam funkcje od Iwony]
                    proc.main.wypiszStanRejestruProcesu(tmpp);


                    Console.In.Read();
                    Console.In.Read();
                    if (proc.blokada)               // zakonczenie procesu
                    {
                        pam.Zwolnij(tmpp.heapAddrStart);

                        tmpp = proc.main.znajdz_zwroc_usun();

                        pam.ListaZajetychBlokow();
                        proc.blokada = false;
                    }

                    if (tmpp == null)               // koniec wykonywania wszystkich procesow
                    {
                        Console.Out.WriteLine("Ilosc taktow procesora: " + proc.takt);
                        Console.Out.WriteLine("Wszystkie procesy zostaly wykonane!");
                        break;
                    }

                    if (proc.takt % proc.rekalk == 0 && tmpp != null)              // obliczenie priorytetu dla wszystkich procesow po 15 cyklach
                    {
                        proc.main.zmniejsziprzestaw();                             // oblicza prio dla pozostalych procesow
                        tmpp.priorytet[2] = tmpp.priorytet[2] / 2;                 // oblicza prio dla 1 przetrymywanego w tmpp procesu
                        tmpp.priorytet[0] = tmpp.priorytet[1] + tmpp.priorytet[2]; //
                    }

                    if (tmpp.l_rozk % proc.wywlaszcz == 0 && tmpp != null)         // wywlaszczenie pocesu po 4 cyklach proca    //EDIT
                    {
                        proc.main.przestaw(tmpp);

                        proc.main.info();
                        tmpp = proc.main.znajdz_zwroc_usun();
                    }
                    if (proc.takt % 1 == 0)         // przychodzi proces
                    {
                        proces pr = zarzadcapr.kolejka.wyslijproces();
                        proces np = null;
                        if (pr != null)
                        {
                            np = proc.main.dodajnowy(pr);         // -> dodaje kolejne procesy do wykonania  [funkcja od Tadka]
                            Console.WriteLine("Dodano nowy proces do kolejki priorytetowej!\n");
                        }

                        if (proc.main.coswpadlo == true)
                        {
                            if (np.priorytet[0] < tmpp.priorytet[0])
                            {
                                proc.main.przestaw(tmpp);
                                proc.main.info();
                                tmpp = proc.main.znajdz_zwroc_usun();
                            }
                            else
                            {
                            }
                            proc.main.coswpadlo = false;
                        }
                    }


                    proc.takt++;
                }
                ile = 0;

                break;
            }

            case "wy":
            {
                zarzadcapr.wypisz2();
                break;
            }

            case "wy2":
            {
                zarzadcapr.kolejka.wypiszkolejki();
                break;
            }

            case "kill":
            {
                Console.WriteLine("podaj PID");
                int    axc = int.Parse(Console.ReadLine());
                proces kkk = zarzadcapr.znajdz(axc);
                pam.Zwolnij(kkk.heapAddrStart);
                zarzadcapr.usun_z_k(axc);
                ile--;
                break;
            }
            //////////////////////////////////////////////////////////////////// KOMUNIKACJA ///////////////////////////////////////////////////////////

            case "com":

                Console.WriteLine("Wybierz rodzaj Łącza ");
                Console.WriteLine("N -> Utwórz Łącze Nazwane ");
                Console.WriteLine("R -> Usuń Łącze Nazwane ");
                Console.WriteLine("1 -> Komunikacja Nazwana ");
                Console.WriteLine("2 -> Komunikacja Nienazwana ");
                Console.WriteLine("3 -> Wypisz Dostepne Lacza ");

                string s1 = Console.ReadLine();

                if (s1 == "1")
                {
                    Console.WriteLine("PID procesu przekazującego wartość");
                    string s2 = Console.ReadLine();
                    try
                    {
                        if (zarzadcapr.kolejka.k_wszystkich.Exists(z => z.PID == Convert.ToInt32(s2)))
                        {
                            Console.WriteLine("PID procesu przyjmującego wartość");
                            string s3 = Console.ReadLine();
                            Console.WriteLine("Napisz komunikat");
                            string kom = Console.ReadLine();

                            if (zarzadcapr.kolejka.k_wszystkich.Exists(z => z.PID == Convert.ToInt32(s3)))
                            {
                                ServiceLocator.GetService <Lacza>().CommunicationNamed(zarzadcapr.kolejka.k_wszystkich.First(z => z.PID == Convert.ToInt32(s2)), zarzadcapr.kolejka.k_wszystkich.First(z => z.PID == Convert.ToInt32(s3)), kom);
                            }
                            else
                            {
                                Console.WriteLine("Nie ma procesu o takim PID ");
                            }
                        }
                        else
                        {
                            Console.WriteLine("Nie ma procesu o takim PID ");
                        }
                    }
                    catch { }
                }
                else if (s1 == "2")
                {
                    try
                    {
                        Console.WriteLine("Podaj PID procesu nadawcy");
                        string s2 = Console.ReadLine();

                        if (zarzadcapr.kolejka.k_wszystkich.Exists(z => z.PID == Convert.ToInt32(s2)))
                        {
                            Console.WriteLine("Podaj PID procesu odbiorcy");
                            string s3 = Console.ReadLine();
                            Console.WriteLine("Przysyłany komunikat");
                            string skom = Console.ReadLine();

                            if (zarzadcapr.kolejka.k_wszystkich.Exists(z => z.PID == Convert.ToInt32(s3)))
                            {
                                // Sprawdź pokrewieństwo
                                int wysylacz  = Convert.ToInt32(s2);
                                int odbieracz = Convert.ToInt32(s3);
                                var pro       = zarzadcapr.kolejka.k_wszystkich.Find(z => z.PID == wysylacz);
                                if (pro.potomkowie.Exists(z => z.PID == odbieracz) == true)
                                {
                                    var pro1 = zarzadcapr.kolejka.k_wszystkich.Find(z => z.PID == odbieracz);
                                    pro1.rozkazy.Add(skom);
                                    Console.WriteLine("Komunikat został przekazany");
                                }
                                else
                                {
                                    Console.WriteLine("Procesy nie są spokrewnione");
                                }
                            }
                            else
                            {
                                Console.WriteLine("Nie ma procesu o takim PID. Czy chcesz utworzyć dziecko procesu o PID: " + s2 + " i przesłać komunikat ? (Y/N)");
                                string dec = Console.ReadLine();
                                if (dec == "Y" || dec == "y")
                                {
                                    int rodzic  = Convert.ToInt32(s2);
                                    int dziecko = zarzadcapr.kolejka.k_wszystkich.Max(z => z.PID) + 1;
                                    zarzadcapr.utwProDziecko(rodzic, dziecko, 20);

                                    var pro = zarzadcapr.kolejka.k_wszystkich.Find(z => z.PID == dziecko);
                                    pro.rozkazy.Add(skom);

                                    Console.WriteLine("Komunikat został przekazany dla potomka.");
                                }
                                else if (dec == "N" || dec == "n")
                                {
                                }
                                else
                                {
                                    Console.WriteLine("Zły rozkaz");
                                }
                            }
                        }
                        else
                        {
                            Console.WriteLine("Nie ma procesu o takim PID ");
                        }
                    }
                    catch { }
                    break;
                }
                else if (s1 == "n" || s1 == "N")
                {
                    Console.WriteLine("Podaj PID procesu nadawcy");
                    string s2 = Console.ReadLine();
                    try
                    {
                        if (zarzadcapr.kolejka.k_wszystkich.Exists(z => z.PID == Convert.ToInt32(s2)))
                        {
                            Console.WriteLine("Podaj PID procesu odbiorcy");
                            string s3 = Console.ReadLine();

                            if (zarzadcapr.kolejka.k_wszystkich.Exists(z => z.PID == Convert.ToInt32(s3)))
                            {
                                ServiceLocator.GetService <Lacza>().UtworzLacze(zarzadcapr.kolejka.k_wszystkich.First(z => z.PID == Convert.ToInt32(s2)), zarzadcapr.kolejka.k_wszystkich.First(z => z.PID == Convert.ToInt32(s3)));
                                Console.WriteLine("Utworzono Lacze");
                            }
                            else
                            {
                                Console.WriteLine("Nie ma procesu o takim PID ");
                            }
                        }
                        else
                        {
                            Console.WriteLine("Nie ma procesu o takim PID ");
                        }
                    }
                    catch { }
                }

                else if (s1 == "r" || s1 == "R")
                {
                    Console.WriteLine("Podaj nazwe lacza postaci 1-2");
                    string nazwa = Console.ReadLine();
                    ServiceLocator.GetService <Lacza>().UsunLacze(nazwa);
                }
                else if (s1 == "3")
                {
                    Console.WriteLine("\n Utworzone Łącza: \n");
                    for (int i = 0; i < ServiceLocator.GetService <Lacza>().ListaLaczy.Count; i++)
                    {
                        Console.Write(ServiceLocator.GetService <Lacza>().ListaLaczy[i] + "  ");
                    }
                    Console.WriteLine("");
                }
                break;

            case "usunrozkaz":
                try
                {
                    Console.WriteLine("Podaj PID procesu");
                    string s = Console.ReadLine();
                    if (zarzadcapr.kolejka.k_wszystkich.Exists(z => z.PID == Convert.ToInt32(s)))
                    {
                        Console.WriteLine("Podaj rozkaz");
                        string s2   = Console.ReadLine();
                        var    proc = zarzadcapr.kolejka.k_wszystkich.Find(z => z.PID == Convert.ToInt32(s));
                        if (proc.rozkazy.Contains(s2))
                        {
                            ServiceLocator.GetService <Lacza>().ClearOrder(zarzadcapr.kolejka.k_wszystkich.Find(z => z.PID == Convert.ToInt32(s)), s2);
                            Console.WriteLine("Usunięto");
                        }
                        else
                        {
                            Console.WriteLine("Proces nie posiada takiego rozkazu");
                        }
                    }
                    else
                    {
                        Console.WriteLine("Nie ma procesu o takim PID ");
                    }
                }
                catch { }
                break;

            case "przekaz":
            {
                try
                {
                    Console.WriteLine("Podaj PID procesu, z którego pobrany ma zostać rozkaz.");
                    string s = Console.ReadLine();
                    if (zarzadcapr.kolejka.k_wszystkich.Exists(z => z.PID == Convert.ToInt32(s)))
                    {
                        Console.WriteLine("Podaj PID procesu, do którego przekazany ma zostać rozkaz.");
                        string s4 = Console.ReadLine();


                        if (zarzadcapr.kolejka.k_wszystkich.Exists(z => z.PID == Convert.ToInt32(s4)))
                        {
                            Console.WriteLine("Podaj numer rozkazu.");
                            string numer = Console.ReadLine();
                            ServiceLocator.GetService <Lacza>().przekazrozkaz(zarzadcapr.kolejka.k_wszystkich.Find(z => z.PID == Convert.ToInt32(s)), zarzadcapr.kolejka.k_wszystkich.Find(z => z.PID == Convert.ToInt32(s4)), Convert.ToInt32(numer));
                        }
                        else
                        {
                            Console.WriteLine("Nie ma procesu o takim PID");
                        }
                    }
                    else
                    {
                        Console.WriteLine("Nie ma procesu o takim PID lub nie istnieję łącze nazwane lub pokrewieństwo pomiędzy procesami");
                    }
                }
                catch { }
            }
            break;

            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            default:
            {
                Console.WriteLine("niepoprawna komenda");
                break;
            }
            }

            if (stop == 10)
            {
                return(0);
            }
            if (bre == 10)
            {
                return(1);
            }
        }
    }
Ejemplo n.º 2
0
    public int polecenia()
    {
        int stop = 0, bre = 0;

        while (true)
        {
            Console.Write("Komenda:");
            string com;
            com = Console.ReadLine();
            string[] comenda = com.Split(' ');
            switch (comenda[0])
            {
            case "logout":
                stop = wylogowanie();
                break;

            case "zmhaslo":

                string[] t = File.ReadAllLines(sciezka);
                int      c = t.Length;

                for (int i = 2; i < c - 2; i = i + 3)
                {
                    if (t[i] == login)
                    {
                        t[i + 1] = comenda[1];
                    }
                }
                System.IO.File.WriteAllLines(sciezka, t);

                break;

            case "zmienkat":
                int a;

                a = iwezel.czyistnieje(ref p, comenda[1]);
                if (a == -1 || a == 0)
                {
                    Console.WriteLine("nie istnieje taka nazwa");
                }
                else
                {
                    if (p.tabi[a].Typ == 'p')
                    {
                        Console.WriteLine("to nie jest katalog");
                    }
                    else
                    {
                        if (p.tabi[a].IDuzytkownika == login)
                        {
                            aktualnykatalog = comenda[1];
                        }
                        else
                        if (p.tabi[a].IDgrupy == gru)
                        {
                            if (p.tabi[a].prawa2 != 0)
                            {
                                aktualnykatalog = comenda[1];
                            }
                            else
                            if (p.tabi[a].prawa3 != 0)
                            {
                                aktualnykatalog = comenda[1];
                            }
                            else
                            {
                                Console.WriteLine("nie masz zadnych praw w tym katalogu");
                            }
                        }
                    }
                }
                break;

            case "open":
            {
                int ff = 1;
                a = iwezel.czyistnieje(ref p, comenda[1]);
                if (a == -1 || a == 0)
                {
                    Console.WriteLine("nie istnieje taka nazwa");
                }
                else
                if (p.tabi[a].IDuzytkownika == login)
                {
                    iwezel.open(ref p, comenda[1], flaga.ronly, ref o, ref slowo);
                    ff = 0;
                }
                if (a != -1 && a != 0)
                {
                    if (p.tabi[a].IDgrupy == gru && ff == 1)
                    {
                        if (p.tabi[a].prawa2 != 0)
                        {
                            iwezel.open(ref p, comenda[1], flaga.ronly, ref o, ref slowo);

                            ff = 0;
                        }
                    }
                }
                if (a != -1 && a != 0)
                {
                    if (p.tabi[a].prawa3 != 0 && ff == 1)
                    {
                        iwezel.open(ref p, comenda[1], flaga.ronly, ref o, ref slowo);

                        ff = 0;
                    }
                }
                if (ff == 1)
                {
                    Console.WriteLine("nie masz zadnych praw w tym pliku");
                }



                if (ff == 0 && slowo != null)
                {
                    Console.WriteLine(slowo);
                }
            }

            break;

            case "pisz":
            {
                int ff = 1;
                a = iwezel.czyistnieje(ref p, comenda[1]);
                if (a == -1 || a == 0)
                {
                    Console.WriteLine("nie istnieje taka nazwa");
                }
                else
                if (p.tabi[a].IDuzytkownika == login)
                {
                    iwezel.open(ref p, comenda[1], flaga.wonly, ref o, ref slowo);
                    ff = 0;
                }
                if (a != -1 && a != 0)
                {
                    if (p.tabi[a].IDgrupy == gru && ff == 1)
                    {
                        if (p.tabi[a].prawa2 == 2 || p.tabi[a].prawa2 == 3 || p.tabi[a].prawa2 == 6 || p.tabi[a].prawa2 == 7)
                        {
                            iwezel.open(ref p, comenda[1], flaga.wonly, ref o, ref slowo);

                            ff = 0;
                        }
                    }
                }
                if (a != -1 && a != 0)
                {
                    if (p.tabi[a].prawa3 == 2 || p.tabi[a].prawa3 == 3 || p.tabi[a].prawa3 == 6 || p.tabi[a].prawa3 == 7)
                    {
                        iwezel.open(ref p, comenda[1], flaga.wonly, ref o, ref slowo);

                        ff = 0;
                    }
                }
                if (ff == 1)
                {
                    Console.WriteLine("nie mozesz dopisywać");
                }


                break;
            }

            case "exit":
                bre = exit();
                break;

            case "creatk":

                iwezel.create(ref p, comenda[1], 'k', aktualnykatalog);
                a = iwezel.czyistnieje(ref p, comenda[1]);
                p.tabi[a].IDuzytkownika = login;
                p.tabi[a].IDgrupy       = gru;
                break;

            case "creatp":

                iwezel.create(ref p, comenda[1], 'p', aktualnykatalog);
                iwezel.open(ref p, comenda[1], flaga.wonly, ref o, ref slowo);
                a = iwezel.czyistnieje(ref p, comenda[1]);
                p.tabi[a].IDuzytkownika = login;
                p.tabi[a].IDgrupy       = gru;
                break;

            case "delete":

                a = iwezel.czyistnieje(ref p, comenda[1]);
                if (a == -1)
                {
                    Console.WriteLine("nie istnieje taki plik");
                }
                else
                if (p.tabi[a].IDuzytkownika == login)
                {
                    iwezel.delete(ref p, comenda[1], ref o);
                }
                else
                {
                    Console.WriteLine("Nie mozesz tego usunac");
                }
                break;

            case "zmprawa":
                try
                {
                    uint b = Convert.ToUInt32(comenda[2]);
                    uint d = Convert.ToUInt32(comenda[3]);
                    uint e = Convert.ToUInt32(comenda[3]);
                    byte f = Convert.ToByte(b);
                    byte g = Convert.ToByte(d);
                    byte h = Convert.ToByte(f);
                    if (f > 7 || g > 7 || h > 7)
                    {
                        Console.WriteLine("niepoprawna wartosc praw");
                    }

                    a = iwezel.czyistnieje(ref p, comenda[1]);
                    if (a == -1)
                    {
                        Console.WriteLine("nie istnieje taki plik");
                    }
                    else
                    if (p.tabi[a].IDuzytkownika == login)
                    {
                        iwezel.chacces(ref p, comenda[1], f, g, h);
                    }
                }
                catch (System.IndexOutOfRangeException)
                {
                    Console.WriteLine("niepoprawne dane");
                }
                break;

            case "Blokipam":
            {
                pam.ListaZajetychBlokow();
                break;
            }

            case "Stronypam":
            {
                pam.StronyPamieci();
                break;
            }

            case "Pamiecfiz":
            {
                pam.PamiecFizyczna();
                break;
            }

            case "Pamiec":
            {
                Console.WriteLine(pam);
                break;
            }

            case "pliki?":
            {
                Console.WriteLine();
                Console.WriteLine("5. Tablica i-wezłów");
                Console.WriteLine("6. Jakie bloki zajmuje plik");
                Console.WriteLine("7. Który blok wyświetlić dla pliku");
                Console.WriteLine("8. Wyświetlenie zawartości wszystkich katalogów");
                Console.WriteLine("9. Jakie bloki na dysku są wolne, zajęte");
                Console.WriteLine("10. Wyświetlenie całego dysku lub wybranego bloku");
                Console.WriteLine();
                break;
            }

            case "5":
            {
                Console.WriteLine("\nTablica i-węzłów");
                iwezel.Wyswtabi(ref p);
                break;
            }

            case "6":
            {
                Console.WriteLine("6. Jakie bloki zajmuje plik");
                Console.WriteLine("\nPodaj nazwę plku");
                string nazwa;
                nazwa = Console.ReadLine();
                iwezel.wyswzajblok(ref p, nazwa);

                break;
            }

            case "7":
            {
                Console.WriteLine("7. Który blok wyświetlić dla pliku");
                int v = 0;
                Console.WriteLine("\nPodaj nazwę plku");
                string nazwa, nazwa2;
                nazwa = Console.ReadLine();
                int numer = -1;
                Console.WriteLine("\nPodaj nr bloku, który chcesz wyświetlić");
                do
                {
                    if (v > 0)
                    {
                        Console.WriteLine("\nPodaj nr bloku jeszcze raz");
                    }

                    try
                    {
                        nazwa2 = Console.ReadLine();
                        numer  = Int32.Parse(nazwa2);
                    }
                    catch (FormatException ex)
                    {
                        Console.WriteLine("Podaj liczbę!");
                    }

                    v++;
                } while (numer < 0 || numer > 6);
                blok.Wyswietblok(ref p, numer, nazwa);

                break;
            }

            case "8":
            {
                Console.WriteLine("8. Wyświetlenie zawartości wszystkich katalogów");
                WpisK.wyswk2(ref p);

                break;
            }

            case "9":
            {
                string nazwa;
                int    v = 0;
                Console.WriteLine("9. Jakie bloki na dysku są wolne, zajęte");
                Console.WriteLine("\nKtóre wyświetlić?  Wolne(w) czy Zajęte(z)?");
                do
                {
                    if (v > 0)
                    {
                        Console.WriteLine("nie ma takiej akcji proszę podać jeszcze raz 'w' lub 'z'");
                    }

                    nazwa = Console.ReadLine();

                    if (nazwa == "w" || nazwa == "W")
                    {
                        blok.wolnebloki(ref p, ref o);
                    }


                    if (nazwa == "z" || nazwa == "Z")
                    {
                        blok.zajetebloki(ref p, ref o);
                    }
                    v++;
                } while (nazwa != "w" && nazwa != "W" && nazwa != "z" && nazwa != "Z");

                break;
            }

            case "10":
            {
                string nazwa, nazwa2;
                int    v = 0, v1 = 0;
                int    numer = -1;
                Console.WriteLine("10. Wyświetlenie całego dysku lub wybranego bloku");
                Console.WriteLine("\nCo wyświetlić?  Blok(b) czy Dysk(d)?");
                do
                {
                    if (v > 0)
                    {
                        Console.WriteLine("nie ma takiej akcji proszę podać jeszcze raz 'b' lub 'd'");
                    }

                    nazwa = Console.ReadLine();

                    if (nazwa == "b" || nazwa == "B")
                    {
                        Console.WriteLine("Proszę podać nr bloku");
                        do
                        {
                            if (v1 > 0)
                            {
                                Console.WriteLine("Nie ma takiego bloku. Podaj jeszcze raz");
                            }

                            try
                            {
                                nazwa2 = Console.ReadLine();
                                numer  = Int32.Parse(nazwa2);
                            }
                            catch (FormatException ex)
                            {
                                Console.WriteLine("Podaj liczbę!");
                            }

                            if (numer >= 0 && numer < 64)
                            {
                                blok.Wyswietbloklubdysk(ref p, numer, nazwa);
                            }

                            v1++;
                        } while (numer < 0 || numer > 63);
                    }


                    if (nazwa == "d" || nazwa == "D")
                    {
                        blok.Wyswietbloklubdysk(ref p, 0, nazwa);
                    }


                    v++;
                } while (nazwa != "d" && nazwa != "D" && nazwa != "b" && nazwa != "B");

                break;
            }

            case "procesor":
            {
                ////////////////////////////////////////////////////////////////////////////////////////////////
                Symulacja_procesora proc = new Symulacja_procesora(1, 4, 15);
                Interpreter         it   = new Interpreter();

                proc.main.dodajnowy(zarzadcapr.kolejka.wyslijproces());         //-> dodaje 1 proces na starcie systemu [wklejam funkcje od Tadka]

                Console.WriteLine("\nStart Symulacji procesora!");

                proc.main.info();
                proces tmpp   = proc.main.znajdz_zwroc_usun();
                byte[] tabpam = new byte[4];
                int    z      = 0;
                while (true)
                {
                    for (int i = 0; i < 4; i++)
                    {
                        tabpam[i] = pam.Odczytaj(tmpp.heapAddrStart + i + (tmpp.l_rozk * 4));
                    }

                    uint tmpppp = BitConverter.ToUInt32(tabpam, 0);         // test -> jaki rozkaz

                    proc.blokada = it.wykonajInstrukcje(tmpp, tabpam);      // -> wynonanie 1 instrukcji z podanego procesu [wklejam funkcje od Iwony]
                    proc.main.wypiszStanRejestruProcesu(tmpp);


                    Console.In.Read();
                    Console.In.Read();
                    if (proc.blokada)               // zakonczenie procesu
                    {
                        pam.Zwolnij(tmpp.heapAddrStart);

                        tmpp = proc.main.znajdz_zwroc_usun();

                        pam.ListaZajetychBlokow();
                        proc.blokada = false;
                    }

                    if (tmpp == null)               // koniec wykonywania wszystkich procesow
                    {
                        Console.Out.WriteLine("Ilosc taktow procesora: " + proc.takt);
                        Console.Out.WriteLine("Wszystkie procesy zostaly wykonane!");
                        break;
                    }

                    if (proc.takt % proc.rekalk == 0 && tmpp != null)              // obliczenie priorytetu dla wszystkich procesow po 15 cyklach
                    {
                        proc.main.zmniejsziprzestaw();                             // oblicza prio dla pozostalych procesow
                        tmpp.priorytet[2] = tmpp.priorytet[2] / 2;                 // oblicza prio dla 1 przetrymywanego w tmpp procesu
                        tmpp.priorytet[0] = tmpp.priorytet[1] + tmpp.priorytet[2]; //
                    }

                    if (tmpp.l_rozk % proc.wywlaszcz == 0 && tmpp != null)         // wywlaszczenie pocesu po 4 cyklach proca    //EDIT
                    {
                        proc.main.przestaw(tmpp);

                        proc.main.info();
                        tmpp = proc.main.znajdz_zwroc_usun();
                    }
                    if (proc.takt % 1 == 0)         // przychodzi proces
                    {
                        proces pr = zarzadcapr.kolejka.wyslijproces();
                        proces np = null;
                        if (pr != null)
                        {
                            np = proc.main.dodajnowy(pr);         // -> dodaje kolejne procesy do wykonania  [funkcja od Tadka]
                        }
                        if (proc.main.coswpadlo == true)
                        {
                            if (np.priorytet[0] < tmpp.priorytet[0])
                            {
                                proc.main.przestaw(tmpp);
                                proc.main.info();
                                tmpp = proc.main.znajdz_zwroc_usun();
                            }
                            else
                            {
                            }
                            proc.main.coswpadlo = false;
                        }
                    }


                    proc.takt++;
                }
                ile = 0;

                break;
            }



            case "proces":
            {
                int q = 0;
                a = iwezel.czyistnieje(ref p, comenda[1]);
                if (a == -1 || a == 0)
                {
                    Console.WriteLine("nie istnieje taka nazwa");
                }
                else
                if (p.tabi[a].IDuzytkownika == login)
                {
                    q = 1;
                }
                if (a != -1 && a != 0)
                {
                    if (p.tabi[a].IDgrupy == gru && q == 1)
                    {
                        if (p.tabi[a].prawa2 == 4 || p.tabi[a].prawa2 == 5 || p.tabi[a].prawa2 == 6 || p.tabi[a].prawa2 == 7)
                        {
                            q = 1;
                        }
                    }
                }
                if (a != -1 && a != 0)
                {
                    if (p.tabi[a].prawa3 == 4 || p.tabi[a].prawa3 == 5 || p.tabi[a].prawa3 == 6 || p.tabi[a].prawa3 == 7)
                    {
                        q = 1;
                    }
                }
                if (q == 0)
                {
                    Console.WriteLine("nie mozesz tego zrobic");
                }
                else
                {
                    Console.WriteLine("podaj PPID, PID i priorytet");
                    int ax1, bx1, cx1;
                    ax1 = int.Parse(Console.ReadLine());
                    bx1 = int.Parse(Console.ReadLine());
                    cx1 = int.Parse(Console.ReadLine());
                    proces ppp = zarzadcapr.utwProDziecko(ax1, bx1, cx1);
                    Console.WriteLine("Proces dodano");



                    zarzadcapr.exec(ppp);

                    Console.WriteLine("Podaj ile bloków powinien posiadac proces");
                    //wczytane = Console.ReadLine();     po 3 bloki na proces
                    ppp.heapAddrStart = pam.Zaalokuj(3);           // statycznie ustawiony na 3

                    iwezel.open(ref p, comenda[1], flaga.ronly, ref o, ref slowo);

                    //byte[] tabrozk;

                    string[] str = slowo.Split(' ');         // stringa zarzutowac na uinta a uinta na bajty   // integer

                    byte[] ttmp = new byte[4];
                    int    y    = 0;
                    for (int l = 0; l < str.Length; l++)
                    {
                        uint tmp = Convert.ToUInt32(str[l]);
                        ttmp = BitConverter.GetBytes(tmp);
                        uint tmppp = BitConverter.ToUInt32(ttmp, 0);
                        for (int x = 0; x < ttmp.Length; x++)
                        {
                            pam.Zapisz(ppp.heapAddrStart + y, ttmp[x]);
                            y++;
                        }
                    }

                    ile++;


                    //////////////////////////////////////////////////////////////////////////////////////////
                    Console.WriteLine(pam);
                }
                break;
            }

            case "wy":
            {
                zarzadcapr.wypisz2();
                break;
            }

            case "wy2":
            {
                zarzadcapr.kolejka.wypiszkolejki();
                break;
            }

            case "kill":
            {
                Console.WriteLine("podaj PID");
                int    axc = int.Parse(Console.ReadLine());
                proces kkk = zarzadcapr.znajdz(axc);
                pam.Zwolnij(kkk.heapAddrStart);
                zarzadcapr.usun_z_k(axc);
                ile--;
                break;
            }

            default:
            {
                Console.WriteLine("niepoprawna komenda");
                break;
            }
            }
            if (stop == 10)
            {
                return(0);
            }
            if (bre == 10)
            {
                return(1);
            }
        }
    }
Ejemplo n.º 3
0
    public int polecenia()
    {
        int stop = 0, bre = 0;
        while (true)
        {
            Console.Write("Komenda:");
            string com;
            com = Console.ReadLine();
            string[] comenda = com.Split(' ');

            switch (comenda[0])
            {
                case "Blokipam":
                    {
                        pam.ListaZajetychBlokow();
                        break;
                    }

                case "Stronypam":
                    {
                        pam.StronyPamieci();
                        break;
                    }

                case "Pamiecfiz":
                    {
                        pam.PamiecFizyczna();
                        break;
                    }

                case "Pamiec":
                    {
                        Console.WriteLine(pam);
                        break;
                    }

                case "adduse":

                    try
                    {
                        adduse(comenda[1], comenda[2], comenda[3]);
                    }
                    catch (System.IndexOutOfRangeException)
                    {
                        Console.WriteLine("niepoprawne dane");
                    }
                    break;

                case "removeuse":

                    int g = 1;
                    try
                    {
                        g = removeuse(comenda[1]);
                    }
                    catch (System.IndexOutOfRangeException)
                    {
                        Console.WriteLine("niepoprawne dane");
                    }
                    if (g == 0)
                        Console.WriteLine("nie istnieje taki uzytkownik");

                    break;

                case "addgru":
                    {

                        dodajgru(comenda[1]);

                        break;

                    }

                case "removegru":
                    string[] t = File.ReadAllLines(sciezka);
                    int b = 0, c = t.Length;
                    for (int i = 4; i < c; i = i + 3)
                        if (t[i] == comenda[1])
                            b = 1;

                    if (b == 0)
                        removegru(comenda[1]);
                    else
                        Console.WriteLine("usuń najpierw uzytkownikow nalezących do grupy");
                    break;

                case "logout":
                    stop = wylogowanie();
                    break;

                case "exit":
                    bre = exit();
                    break;

                case "zmienkat":
                    int a;

                    a = iwezel.czyistnieje(ref p, comenda[1]);
                    if (a == -1 || a == 0)
                        Console.WriteLine("nie istnieje taka nazwa");
                    else
                    {
                        if (p.tabi[a].Typ == 'p')
                            Console.WriteLine("to nie jest katalog");
                        else
                            aktualnykatalog = comenda[1];
                    }
                    break;

                case "creatk":

                    iwezel.create(ref p, comenda[1], 'k', aktualnykatalog);

                    break;
                case "creatp":

                    iwezel.create(ref p, comenda[1], 'p', aktualnykatalog);
                    iwezel.open(ref p, comenda[1], flaga.wonly, ref o, ref slowo);

                    break;
                case "delete":

                    iwezel.delete(ref p, comenda[1], ref o);

                    break;

                case "open":
                    {
                        iwezel.open(ref p, comenda[1], flaga.ronly, ref o, ref slowo);
                        if (slowo != null)
                            Console.WriteLine("\nOdczytano z pliku następujące dane: \n" + slowo);

                        break;
                    }
                case "pisz":
                    iwezel.open(ref p, comenda[1], flaga.wonly, ref o, ref slowo);
                    break;

                case "pliki?":
                    {
                        Console.WriteLine();
                        Console.WriteLine("5. Tablica i-wezłów");
                        Console.WriteLine("6. Jakie bloki zajmuje plik");
                        Console.WriteLine("7. Który blok wyświetlić dla pliku");
                        Console.WriteLine("8. Wyświetlenie zawartości wszystkich katalogów");
                        Console.WriteLine("9. Jakie bloki na dysku są wolne, zajęte");
                        Console.WriteLine("10. Wyświetlenie całego dysku lub wybranego bloku");
                        Console.WriteLine();
                        break;
                    }

                case "5":
                    {
                        Console.WriteLine("\nTablica i-węzłów");
                        iwezel.Wyswtabi(ref p);
                        break;
                    }

                case "6":
                    {
                        Console.WriteLine("6. Jakie bloki zajmuje plik");
                        Console.WriteLine("\nPodaj nazwę plku");
                        string nazwa;
                        nazwa = Console.ReadLine();
                        iwezel.wyswzajblok(ref p, nazwa);

                        break;
                    }

                case "7":
                    {
                        Console.WriteLine("7. Który blok wyświetlić dla pliku");
                        int v = 0;
                        Console.WriteLine("\nPodaj nazwę plku");
                        string nazwa, nazwa2;
                        nazwa = Console.ReadLine();
                        int numer = -1;
                        Console.WriteLine("\nPodaj nr bloku, który chcesz wyświetlić");
                        do
                        {
                            if (v > 0)
                                Console.WriteLine("\nPodaj nr bloku jeszcze raz");

                            try
                            {
                                nazwa2 = Console.ReadLine();
                                numer = Int32.Parse(nazwa2);
                            }
                            catch (FormatException ex)
                            {
                                Console.WriteLine("Podaj liczbę!");
                            }

                            v++;
                        } while (numer < 0 || numer > 6);
                        blok.Wyswietblok(ref p, numer, nazwa);

                        break;
                    }

                case "8":
                    {
                        Console.WriteLine("8. Wyświetlenie zawartości wszystkich katalogów");
                        WpisK.wyswk2(ref p);

                        break;
                    }

                case "9":
                    {
                        string nazwa;
                        int v = 0;
                        Console.WriteLine("9. Jakie bloki na dysku są wolne, zajęte");
                        Console.WriteLine("\nKtóre wyświetlić?  Wolne(w) czy Zajęte(z)?");
                        do
                        {
                            if (v > 0)
                                Console.WriteLine("nie ma takiej akcji proszę podać jeszcze raz 'w' lub 'z'");

                            nazwa = Console.ReadLine();

                            if (nazwa == "w" || nazwa == "W")
                                blok.wolnebloki(ref p, ref o);

                            if (nazwa == "z" || nazwa == "Z")
                                blok.zajetebloki(ref p, ref o);
                            v++;

                        } while (nazwa != "w" && nazwa != "W" && nazwa != "z" && nazwa != "Z");

                        break;
                    }

                case "10":
                    {
                        string nazwa, nazwa2;
                        int v = 0, v1 = 0;
                        int numer = -1;
                        Console.WriteLine("10. Wyświetlenie całego dysku lub wybranego bloku");
                        Console.WriteLine("\nCo wyświetlić?  Blok(b) czy Dysk(d)?");
                        do
                        {
                            if (v > 0)
                                Console.WriteLine("nie ma takiej akcji proszę podać jeszcze raz 'b' lub 'd'");

                            nazwa = Console.ReadLine();

                            if (nazwa == "b" || nazwa == "B")
                            {

                                Console.WriteLine("Proszę podać nr bloku");
                                do
                                {
                                    if (v1 > 0)
                                        Console.WriteLine("Nie ma takiego bloku. Podaj jeszcze raz");

                                    try
                                    {
                                        nazwa2 = Console.ReadLine();
                                        numer = Int32.Parse(nazwa2);
                                    }
                                    catch (FormatException ex)
                                    {
                                        Console.WriteLine("Podaj liczbę!");
                                    }

                                    if (numer >= 0 && numer < 64)
                                        blok.Wyswietbloklubdysk(ref p, numer, nazwa);

                                    v1++;
                                } while (numer < 0 || numer > 63);
                            }

                            if (nazwa == "d" || nazwa == "D")
                                blok.Wyswietbloklubdysk(ref p, 0, nazwa);

                            v++;

                        } while (nazwa != "d" && nazwa != "D" && nazwa != "b" && nazwa != "B");

                        break;
                    }

                case "proces":
                    {

                        Console.WriteLine("podaj PPID, PID i priorytet");
                        int ax1, bx1, cx1;
                        ax1 = int.Parse(Console.ReadLine());
                        bx1 = int.Parse(Console.ReadLine());
                        cx1 = int.Parse(Console.ReadLine());
                        proces ppp = zarzadcapr.utwProDziecko(ax1, bx1, cx1);
                        Console.WriteLine("Proces dodano");

                        zarzadcapr.exec(ppp);

                        Console.WriteLine("Podaj ile bloków powinien posiadac proces");
                        //wczytane = Console.ReadLine();     po 3 bloki na proces
                        ppp.heapAddrStart = pam.Zaalokuj(3);   // statycznie ustawiony na 3

                        iwezel.open(ref p, comenda[1], flaga.ronly, ref o, ref slowo);

                        //byte[] tabrozk;

                        string[] str = slowo.Split(' '); // stringa zarzutowac na uinta a uinta na bajty   // integer

                        byte[] ttmp = new byte[4];
                        int y = 0;
                        for (int l = 0; l < str.Length; l++)
                        {
                            uint tmp = Convert.ToUInt32(str[l]);
                            ttmp = BitConverter.GetBytes(tmp);
                            uint tmppp = BitConverter.ToUInt32(ttmp, 0);
                            for (int x = 0; x < ttmp.Length; x++)
                            {
                                pam.Zapisz(ppp.heapAddrStart + y, ttmp[x]);
                                y++;
                            }
                        }

                        ile++;

                        //////////////////////////////////////////////////////////////////////////////////////////
                        Console.WriteLine(pam);
                        break;
                    }

                case "procesor":
                    {
                        ////////////////////////////////////////////////////////////////////////////////////////////////
                        Symulacja_procesora proc = new Symulacja_procesora(1, 4, 15);
                        Interpreter it = new Interpreter();

                        proc.main.dodajnowy(zarzadcapr.kolejka.wyslijproces()); //-> dodaje 1 proces na starcie systemu [wklejam funkcje od Tadka]

                        Console.WriteLine("\nStart Symulacji procesora!");

                        proc.main.info();
                        proces tmpp = proc.main.znajdz_zwroc_usun();
                        byte[] tabpam = new byte[4];
                        int z = 0;
                        while (true)
                        {
                            for (int i = 0; i < 4; i++)
                                tabpam[i] = pam.Odczytaj(tmpp.heapAddrStart + i + (tmpp.l_rozk * 4));

                            uint tmpppp = BitConverter.ToUInt32(tabpam, 0); // test -> jaki rozkaz

                            proc.blokada = it.wykonajInstrukcje(tmpp, tabpam); // -> wynonanie 1 instrukcji z podanego procesu [wklejam funkcje od Iwony]
                            proc.main.wypiszStanRejestruProcesu(tmpp);

                            Console.In.Read();
                            Console.In.Read();
                            if (proc.blokada)       // zakonczenie procesu
                            {
                                pam.Zwolnij(tmpp.heapAddrStart);

                                tmpp = proc.main.znajdz_zwroc_usun();

                                pam.ListaZajetychBlokow();
                                proc.blokada = false;
                            }

                            if (tmpp == null)       // koniec wykonywania wszystkich procesow
                            {
                                Console.Out.WriteLine("Ilosc taktow procesora: " + proc.takt);
                                Console.Out.WriteLine("Wszystkie procesy zostaly wykonane!");
                                break;
                            }

                            if (proc.takt % proc.rekalk == 0 && tmpp != null) // obliczenie priorytetu dla wszystkich procesow po 15 cyklach
                            {
                                proc.main.zmniejsziprzestaw();                                         // oblicza prio dla pozostalych procesow
                                tmpp.priorytet[2] = tmpp.priorytet[2] / 2;                          // oblicza prio dla 1 przetrymywanego w tmpp procesu
                                tmpp.priorytet[0] = tmpp.priorytet[1] + tmpp.priorytet[2];          //
                            }

                            if (tmpp.l_rozk % proc.wywlaszcz == 0 && tmpp != null) // wywlaszczenie pocesu po 4 cyklach proca    //EDIT
                            {
                                proc.main.przestaw(tmpp);

                                proc.main.info();
                                tmpp = proc.main.znajdz_zwroc_usun();
                            }
                            if (proc.takt % 1 == 0) // przychodzi proces
                            {
                                proces pr = zarzadcapr.kolejka.wyslijproces();
                                proces np = null;
                                if (pr != null)
                                {
                                    np = proc.main.dodajnowy(pr); // -> dodaje kolejne procesy do wykonania  [funkcja od Tadka]
                                    Console.WriteLine("Dodano nowy proces do kolejki priorytetowej!\n");
                                }

                                if (proc.main.coswpadlo == true)
                                {
                                    if (np.priorytet[0] < tmpp.priorytet[0])
                                    {
                                        proc.main.przestaw(tmpp);
                                        proc.main.info();
                                        tmpp = proc.main.znajdz_zwroc_usun();
                                    }
                                    else { }
                                    proc.main.coswpadlo = false;
                                }
                            }

                            proc.takt++;
                        }
                        ile = 0;

                        break;
                    }
                case "wy":
                    {
                        zarzadcapr.wypisz2();
                        break;
                    }
                case "wy2":
                    {
                        zarzadcapr.kolejka.wypiszkolejki();
                        break;
                    }
                case "kill":
                    {
                        Console.WriteLine("podaj PID");
                        int axc = int.Parse(Console.ReadLine());
                        proces kkk = zarzadcapr.znajdz(axc);
                        pam.Zwolnij(kkk.heapAddrStart);
                        zarzadcapr.usun_z_k(axc);
                        ile--;
                        break;
                    }
                //////////////////////////////////////////////////////////////////// KOMUNIKACJA ///////////////////////////////////////////////////////////

                case "com":

                    Console.WriteLine("Wybierz rodzaj Łącza ");
                    Console.WriteLine("N -> Utwórz Łącze Nazwane ");
                    Console.WriteLine("R -> Usuń Łącze Nazwane ");
                    Console.WriteLine("1 -> Komunikacja Nazwana ");
                    Console.WriteLine("2 -> Komunikacja Nienazwana ");
                    Console.WriteLine("3 -> Wypisz Dostepne Lacza ");

                    string s1 = Console.ReadLine();

                    if (s1 == "1")
                    {
                        Console.WriteLine("PID procesu przekazującego wartość");
                        string s2 = Console.ReadLine();
                        try
                        {

                            if (zarzadcapr.kolejka.k_wszystkich.Exists(z => z.PID == Convert.ToInt32(s2)))
                            {
                                Console.WriteLine("PID procesu przyjmującego wartość");
                                string s3 = Console.ReadLine();
                                Console.WriteLine("Napisz komunikat");
                                string kom = Console.ReadLine();

                                if (zarzadcapr.kolejka.k_wszystkich.Exists(z => z.PID == Convert.ToInt32(s3)))
                                {

                                    ServiceLocator.GetService<Lacza>().CommunicationNamed(zarzadcapr.kolejka.k_wszystkich.First(z => z.PID == Convert.ToInt32(s2)), zarzadcapr.kolejka.k_wszystkich.First(z => z.PID == Convert.ToInt32(s3)), kom);

                                }
                                else
                                {
                                    Console.WriteLine("Nie ma procesu o takim PID ");
                                }
                            }
                            else
                            {
                                Console.WriteLine("Nie ma procesu o takim PID ");
                            }
                        }
                        catch { }
                    }
                    else if (s1 == "2")
                    {
                        try
                        {
                            Console.WriteLine("Podaj PID procesu nadawcy");
                            string s2 = Console.ReadLine();

                            if (zarzadcapr.kolejka.k_wszystkich.Exists(z => z.PID == Convert.ToInt32(s2)))
                            {

                                Console.WriteLine("Podaj PID procesu odbiorcy");
                                string s3 = Console.ReadLine();
                                Console.WriteLine("Przysyłany komunikat");
                                string skom = Console.ReadLine();

                                if (zarzadcapr.kolejka.k_wszystkich.Exists(z => z.PID == Convert.ToInt32(s3)))
                                {
                                    // Sprawdź pokrewieństwo
                                    int wysylacz = Convert.ToInt32(s2);
                                    int odbieracz = Convert.ToInt32(s3);
                                    var pro = zarzadcapr.kolejka.k_wszystkich.Find(z => z.PID == wysylacz);
                                    if (pro.potomkowie.Exists(z => z.PID == odbieracz) == true)
                                    {
                                        var pro1 = zarzadcapr.kolejka.k_wszystkich.Find(z => z.PID == odbieracz);
                                        pro1.rozkazy.Add(skom);
                                        Console.WriteLine("Komunikat został przekazany");
                                    }
                                    else
                                    {
                                        Console.WriteLine("Procesy nie są spokrewnione");
                                    }

                                }
                                else
                                {
                                    Console.WriteLine("Nie ma procesu o takim PID. Czy chcesz utworzyć dziecko procesu o PID: " + s2 + " i przesłać komunikat ? (Y/N)");
                                    string dec = Console.ReadLine();
                                    if (dec == "Y" || dec == "y")
                                    {
                                        int rodzic = Convert.ToInt32(s2);
                                        int dziecko = zarzadcapr.kolejka.k_wszystkich.Max(z => z.PID) + 1;
                                        zarzadcapr.utwProDziecko(rodzic, dziecko, 20);

                                        var pro = zarzadcapr.kolejka.k_wszystkich.Find(z => z.PID == dziecko);
                                        pro.rozkazy.Add(skom);

                                        Console.WriteLine("Komunikat został przekazany dla potomka.");
                                    }
                                    else if (dec == "N" || dec == "n")
                                    { }
                                    else
                                        Console.WriteLine("Zły rozkaz");
                                }

                            }
                            else
                                Console.WriteLine("Nie ma procesu o takim PID ");
                        }
                        catch { }
                        break;
                    }
                    else if (s1 == "n" || s1 == "N")
                    {
                        Console.WriteLine("Podaj PID procesu nadawcy");
                        string s2 = Console.ReadLine();
                        try
                        {

                            if (zarzadcapr.kolejka.k_wszystkich.Exists(z => z.PID == Convert.ToInt32(s2)))
                            {
                                Console.WriteLine("Podaj PID procesu odbiorcy");
                                string s3 = Console.ReadLine();

                                if (zarzadcapr.kolejka.k_wszystkich.Exists(z => z.PID == Convert.ToInt32(s3)))
                                {
                                    ServiceLocator.GetService<Lacza>().UtworzLacze(zarzadcapr.kolejka.k_wszystkich.First(z => z.PID == Convert.ToInt32(s2)), zarzadcapr.kolejka.k_wszystkich.First(z => z.PID == Convert.ToInt32(s3)));
                                    Console.WriteLine("Utworzono Lacze");
                                }
                                else
                                {
                                    Console.WriteLine("Nie ma procesu o takim PID ");
                                }
                            }
                            else
                            {
                                Console.WriteLine("Nie ma procesu o takim PID ");
                            }
                        }
                        catch { }
                    }

                    else if (s1 == "r" || s1 == "R")
                    {
                        Console.WriteLine("Podaj nazwe lacza postaci 1-2");
                        string nazwa = Console.ReadLine();
                        ServiceLocator.GetService<Lacza>().UsunLacze(nazwa);

                    }
                    else if (s1 == "3")
                    {
                        Console.WriteLine("\n Utworzone Łącza: \n");
                        for (int i = 0; i < ServiceLocator.GetService<Lacza>().ListaLaczy.Count; i++)
                            Console.Write(ServiceLocator.GetService<Lacza>().ListaLaczy[i] + "  ");
                        Console.WriteLine("");
                    }
                    break;

                case "usunrozkaz":
                    try
                    {
                        Console.WriteLine("Podaj PID procesu");
                        string s = Console.ReadLine();
                        if (zarzadcapr.kolejka.k_wszystkich.Exists(z => z.PID == Convert.ToInt32(s)))
                        {
                            Console.WriteLine("Podaj rozkaz");
                            string s2 = Console.ReadLine();
                            var proc = zarzadcapr.kolejka.k_wszystkich.Find(z => z.PID == Convert.ToInt32(s));
                            if (proc.rozkazy.Contains(s2))
                            {

                                ServiceLocator.GetService<Lacza>().ClearOrder(zarzadcapr.kolejka.k_wszystkich.Find(z => z.PID == Convert.ToInt32(s)), s2);
                                Console.WriteLine("Usunięto");
                            }
                            else
                            { Console.WriteLine("Proces nie posiada takiego rozkazu"); }
                        }
                        else
                        {
                            Console.WriteLine("Nie ma procesu o takim PID ");
                        }
                    }
                    catch { }
                    break;

                case "przekaz":
                    {
                        try
                        {
                            Console.WriteLine("Podaj PID procesu, z którego pobrany ma zostać rozkaz.");
                            string s = Console.ReadLine();
                            if (zarzadcapr.kolejka.k_wszystkich.Exists(z => z.PID == Convert.ToInt32(s)))
                            {
                                Console.WriteLine("Podaj PID procesu, do którego przekazany ma zostać rozkaz.");
                                string s4 = Console.ReadLine();

                                if (zarzadcapr.kolejka.k_wszystkich.Exists(z => z.PID == Convert.ToInt32(s4)))
                                {
                                    Console.WriteLine("Podaj numer rozkazu.");
                                    string numer = Console.ReadLine();
                                    ServiceLocator.GetService<Lacza>().przekazrozkaz(zarzadcapr.kolejka.k_wszystkich.Find(z => z.PID == Convert.ToInt32(s)), zarzadcapr.kolejka.k_wszystkich.Find(z => z.PID == Convert.ToInt32(s4)), Convert.ToInt32(numer));

                                }
                                else
                                { Console.WriteLine("Nie ma procesu o takim PID"); }
                            }
                            else
                            { Console.WriteLine("Nie ma procesu o takim PID lub nie istnieję łącze nazwane lub pokrewieństwo pomiędzy procesami"); }
                        }
                        catch { }
                    }
                    break;
                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                default:
                    {
                        Console.WriteLine("niepoprawna komenda");
                        break;
                    }
            }

            if (stop == 10)
                return 0;
            if (bre == 10)
                return 1;

        }
    }
Ejemplo n.º 4
0
    public int polecenia()
    {
        int stop = 0, bre = 0;
        while (true)
        {
            Console.Write("Komenda:");
            string com;
            com = Console.ReadLine();
            string[] comenda = com.Split(' ');
            switch (comenda[0])
            {
                case "logout":
                    stop = wylogowanie();
                    break;

                case "zmhaslo":

                    string[] t = File.ReadAllLines(sciezka);
                    int c = t.Length;

                    for (int i = 2; i < c - 2; i = i + 3)
                        if (t[i] == login)
                            t[i + 1] = comenda[1];
                    System.IO.File.WriteAllLines(sciezka, t);

                    break;

                case "zmienkat":
                    int a;

                    a = iwezel.czyistnieje(ref p, comenda[1]);
                    if (a == -1 || a == 0)
                        Console.WriteLine("nie istnieje taka nazwa");
                    else
                    {
                        if (p.tabi[a].Typ == 'p')
                            Console.WriteLine("to nie jest katalog");
                        else
                        {
                            if (p.tabi[a].IDuzytkownika == login)
                                aktualnykatalog = comenda[1];
                            else
                                if (p.tabi[a].IDgrupy == gru)
                                    if (p.tabi[a].prawa2 != 0)
                                        aktualnykatalog = comenda[1];
                                    else
                                        if (p.tabi[a].prawa3 != 0)
                                            aktualnykatalog = comenda[1];
                                        else
                                            Console.WriteLine("nie masz zadnych praw w tym katalogu");
                        }
                    }
                    break;
                case "open":
                    {
                        int ff = 1;
                        a = iwezel.czyistnieje(ref p, comenda[1]);
                        if (a == -1 || a == 0)
                            Console.WriteLine("nie istnieje taka nazwa");
                        else
                            if (p.tabi[a].IDuzytkownika == login)
                            {
                                iwezel.open(ref p, comenda[1], flaga.ronly, ref o, ref slowo);
                                ff = 0;
                            }
                        if (a != -1 && a != 0)
                            if (p.tabi[a].IDgrupy == gru && ff == 1)
                                if (p.tabi[a].prawa2 != 0)
                                {
                                    iwezel.open(ref p, comenda[1], flaga.ronly, ref o, ref slowo);

                                    ff = 0;
                                }
                        if (a != -1 && a != 0)
                            if (p.tabi[a].prawa3 != 0 && ff == 1)
                            {
                                iwezel.open(ref p, comenda[1], flaga.ronly, ref o, ref slowo);

                                ff = 0;
                            }
                        if (ff == 1)
                            Console.WriteLine("nie masz zadnych praw w tym pliku");

                        if (ff == 0 && slowo != null)
                            Console.WriteLine(slowo);
                    }

                    break;
                case "pisz":
                    {
                        int ff = 1;
                        a = iwezel.czyistnieje(ref p, comenda[1]);
                        if (a == -1 || a == 0)
                            Console.WriteLine("nie istnieje taka nazwa");
                        else
                            if (p.tabi[a].IDuzytkownika == login)
                            {
                                iwezel.open(ref p, comenda[1], flaga.wonly, ref o, ref slowo);
                                ff = 0;
                            }
                        if (a != -1 && a != 0)
                            if (p.tabi[a].IDgrupy == gru && ff == 1)
                                if (p.tabi[a].prawa2 == 2 || p.tabi[a].prawa2 == 3 || p.tabi[a].prawa2 == 6 || p.tabi[a].prawa2 == 7)
                                {
                                    iwezel.open(ref p, comenda[1], flaga.wonly, ref o, ref slowo);

                                    ff = 0;
                                }
                        if (a != -1 && a != 0)
                            if (p.tabi[a].prawa3 == 2 || p.tabi[a].prawa3 == 3 || p.tabi[a].prawa3 == 6 || p.tabi[a].prawa3 == 7)
                            {
                                iwezel.open(ref p, comenda[1], flaga.wonly, ref o, ref slowo);

                                ff = 0;
                            }
                        if (ff == 1)
                            Console.WriteLine("nie mozesz dopisywać");

                        break;
                    }
                case "exit":
                    bre = exit();
                    break;
                case "creatk":

                    iwezel.create(ref p, comenda[1], 'k', aktualnykatalog);
                    a = iwezel.czyistnieje(ref p, comenda[1]);
                    p.tabi[a].IDuzytkownika = login;
                    p.tabi[a].IDgrupy = gru;
                    break;
                case "creatp":

                    iwezel.create(ref p, comenda[1], 'p', aktualnykatalog);
                    iwezel.open(ref p, comenda[1], flaga.wonly, ref o, ref slowo);
                    a = iwezel.czyistnieje(ref p, comenda[1]);
                    p.tabi[a].IDuzytkownika = login;
                    p.tabi[a].IDgrupy = gru;
                    break;
                case "delete":

                    a = iwezel.czyistnieje(ref p, comenda[1]);
                    if (a == -1)
                        Console.WriteLine("nie istnieje taki plik");
                    else
                        if (p.tabi[a].IDuzytkownika == login)
                            iwezel.delete(ref p, comenda[1], ref o);
                        else
                            Console.WriteLine("Nie mozesz tego usunac");
                    break;
                case "zmprawa":
                    try
                    {
                        uint b = Convert.ToUInt32(comenda[2]);
                        uint d = Convert.ToUInt32(comenda[3]);
                        uint e = Convert.ToUInt32(comenda[3]);
                        byte f = Convert.ToByte(b);
                        byte g = Convert.ToByte(d);
                        byte h = Convert.ToByte(f);
                        if (f > 7 || g > 7 || h > 7)
                            Console.WriteLine("niepoprawna wartosc praw");

                        a = iwezel.czyistnieje(ref p, comenda[1]);
                        if (a == -1)
                            Console.WriteLine("nie istnieje taki plik");
                        else
                            if (p.tabi[a].IDuzytkownika == login)
                            {
                                iwezel.chacces(ref p, comenda[1], f, g, h);
                            }

                    }
                    catch (System.IndexOutOfRangeException)
                    {
                        Console.WriteLine("niepoprawne dane");
                    }
                    break;

                case "Blokipam":
                    {
                        pam.ListaZajetychBlokow();
                        break;
                    }

                case "Stronypam":
                    {
                        pam.StronyPamieci();
                        break;
                    }

                case "Pamiecfiz":
                    {
                        pam.PamiecFizyczna();
                        break;
                    }

                case "Pamiec":
                    {
                        Console.WriteLine(pam);
                        break;
                    }
                case "pliki?":
                    {
                        Console.WriteLine();
                        Console.WriteLine("5. Tablica i-wezłów");
                        Console.WriteLine("6. Jakie bloki zajmuje plik");
                        Console.WriteLine("7. Który blok wyświetlić dla pliku");
                        Console.WriteLine("8. Wyświetlenie zawartości wszystkich katalogów");
                        Console.WriteLine("9. Jakie bloki na dysku są wolne, zajęte");
                        Console.WriteLine("10. Wyświetlenie całego dysku lub wybranego bloku");
                        Console.WriteLine();
                        break;
                    }

                case "5":
                    {
                        Console.WriteLine("\nTablica i-węzłów");
                        iwezel.Wyswtabi(ref p);
                        break;
                    }

                case "6":
                    {
                        Console.WriteLine("6. Jakie bloki zajmuje plik");
                        Console.WriteLine("\nPodaj nazwę plku");
                        string nazwa;
                        nazwa = Console.ReadLine();
                        iwezel.wyswzajblok(ref p, nazwa);

                        break;
                    }

                case "7":
                    {
                        Console.WriteLine("7. Który blok wyświetlić dla pliku");
                        int v = 0;
                        Console.WriteLine("\nPodaj nazwę plku");
                        string nazwa, nazwa2;
                        nazwa = Console.ReadLine();
                        int numer = -1;
                        Console.WriteLine("\nPodaj nr bloku, który chcesz wyświetlić");
                        do
                        {
                            if (v > 0)
                                Console.WriteLine("\nPodaj nr bloku jeszcze raz");

                            try
                            {
                                nazwa2 = Console.ReadLine();
                                numer = Int32.Parse(nazwa2);
                            }
                            catch (FormatException ex)
                            {
                                Console.WriteLine("Podaj liczbę!");
                            }

                            v++;
                        } while (numer < 0 || numer > 6);
                        blok.Wyswietblok(ref p, numer, nazwa);

                        break;
                    }

                case "8":
                    {
                        Console.WriteLine("8. Wyświetlenie zawartości wszystkich katalogów");
                        WpisK.wyswk2(ref p);

                        break;
                    }

                case "9":
                    {
                        string nazwa;
                        int v = 0;
                        Console.WriteLine("9. Jakie bloki na dysku są wolne, zajęte");
                        Console.WriteLine("\nKtóre wyświetlić?  Wolne(w) czy Zajęte(z)?");
                        do
                        {
                            if (v > 0)
                                Console.WriteLine("nie ma takiej akcji proszę podać jeszcze raz 'w' lub 'z'");

                            nazwa = Console.ReadLine();

                            if (nazwa == "w" || nazwa == "W")
                                blok.wolnebloki(ref p, ref o);

                            if (nazwa == "z" || nazwa == "Z")
                                blok.zajetebloki(ref p, ref o);
                            v++;

                        } while (nazwa != "w" && nazwa != "W" && nazwa != "z" && nazwa != "Z");

                        break;
                    }

                case "10":
                    {
                        string nazwa, nazwa2;
                        int v = 0, v1 = 0;
                        int numer = -1;
                        Console.WriteLine("10. Wyświetlenie całego dysku lub wybranego bloku");
                        Console.WriteLine("\nCo wyświetlić?  Blok(b) czy Dysk(d)?");
                        do
                        {
                            if (v > 0)
                                Console.WriteLine("nie ma takiej akcji proszę podać jeszcze raz 'b' lub 'd'");

                            nazwa = Console.ReadLine();

                            if (nazwa == "b" || nazwa == "B")
                            {

                                Console.WriteLine("Proszę podać nr bloku");
                                do
                                {
                                    if (v1 > 0)
                                        Console.WriteLine("Nie ma takiego bloku. Podaj jeszcze raz");

                                    try
                                    {
                                        nazwa2 = Console.ReadLine();
                                        numer = Int32.Parse(nazwa2);
                                    }
                                    catch (FormatException ex)
                                    {
                                        Console.WriteLine("Podaj liczbę!");
                                    }

                                    if (numer >= 0 && numer < 64)
                                        blok.Wyswietbloklubdysk(ref p, numer, nazwa);

                                    v1++;
                                } while (numer < 0 || numer > 63);
                            }

                            if (nazwa == "d" || nazwa == "D")
                                blok.Wyswietbloklubdysk(ref p, 0, nazwa);

                            v++;

                        } while (nazwa != "d" && nazwa != "D" && nazwa != "b" && nazwa != "B");

                        break;
                    }
                case "procesor":
                    {
                        ////////////////////////////////////////////////////////////////////////////////////////////////
                        Symulacja_procesora proc = new Symulacja_procesora(1, 4, 15);
                        Interpreter it = new Interpreter();

                        proc.main.dodajnowy(zarzadcapr.kolejka.wyslijproces()); //-> dodaje 1 proces na starcie systemu [wklejam funkcje od Tadka]

                        Console.WriteLine("\nStart Symulacji procesora!");

                        proc.main.info();
                        proces tmpp = proc.main.znajdz_zwroc_usun();
                        byte[] tabpam = new byte[4];
                        int z = 0;
                        while (true)
                        {
                            for (int i = 0; i < 4; i++)
                                tabpam[i] = pam.Odczytaj(tmpp.heapAddrStart + i + (tmpp.l_rozk * 4));

                            uint tmpppp = BitConverter.ToUInt32(tabpam, 0); // test -> jaki rozkaz

                            proc.blokada = it.wykonajInstrukcje(tmpp, tabpam); // -> wynonanie 1 instrukcji z podanego procesu [wklejam funkcje od Iwony]
                            proc.main.wypiszStanRejestruProcesu(tmpp);

                            Console.In.Read();
                            Console.In.Read();
                            if (proc.blokada)       // zakonczenie procesu
                            {
                                pam.Zwolnij(tmpp.heapAddrStart);

                                tmpp = proc.main.znajdz_zwroc_usun();

                                pam.ListaZajetychBlokow();
                                proc.blokada = false;
                            }

                            if (tmpp == null)       // koniec wykonywania wszystkich procesow
                            {
                                Console.Out.WriteLine("Ilosc taktow procesora: " + proc.takt);
                                Console.Out.WriteLine("Wszystkie procesy zostaly wykonane!");
                                break;
                            }

                            if (proc.takt % proc.rekalk == 0 && tmpp != null) // obliczenie priorytetu dla wszystkich procesow po 15 cyklach
                            {
                                proc.main.zmniejsziprzestaw();                                         // oblicza prio dla pozostalych procesow
                                tmpp.priorytet[2] = tmpp.priorytet[2] / 2;                          // oblicza prio dla 1 przetrymywanego w tmpp procesu
                                tmpp.priorytet[0] = tmpp.priorytet[1] + tmpp.priorytet[2];          //
                            }

                            if (tmpp.l_rozk % proc.wywlaszcz == 0 && tmpp != null) // wywlaszczenie pocesu po 4 cyklach proca    //EDIT
                            {
                                proc.main.przestaw(tmpp);

                                proc.main.info();
                                tmpp = proc.main.znajdz_zwroc_usun();
                            }
                            if (proc.takt % 1 == 0) // przychodzi proces
                            {
                                proces pr = zarzadcapr.kolejka.wyslijproces();
                                proces np = null;
                                if (pr != null)
                                    np = proc.main.dodajnowy(pr); // -> dodaje kolejne procesy do wykonania  [funkcja od Tadka]

                                if (proc.main.coswpadlo == true)
                                {
                                    if (np.priorytet[0] < tmpp.priorytet[0])
                                    {
                                        proc.main.przestaw(tmpp);
                                        proc.main.info();
                                        tmpp = proc.main.znajdz_zwroc_usun();
                                    }
                                    else { }
                                    proc.main.coswpadlo = false;
                                }
                            }

                            proc.takt++;
                        }
                        ile = 0;

                        break;
                    }

                case "proces":
                    {
                        int q = 0;
                        a = iwezel.czyistnieje(ref p, comenda[1]);
                        if (a == -1 || a == 0)
                            Console.WriteLine("nie istnieje taka nazwa");
                        else
                            if (p.tabi[a].IDuzytkownika == login)
                            {

                                q = 1;
                            }
                        if (a != -1 && a != 0)
                            if (p.tabi[a].IDgrupy == gru && q == 1)
                                if (p.tabi[a].prawa2 == 4 || p.tabi[a].prawa2 == 5 || p.tabi[a].prawa2 == 6 || p.tabi[a].prawa2 == 7)
                                {

                                    q = 1;
                                }
                        if (a != -1 && a != 0)
                            if (p.tabi[a].prawa3 == 4 || p.tabi[a].prawa3 == 5 || p.tabi[a].prawa3 == 6 || p.tabi[a].prawa3 == 7)
                            {

                                q = 1;
                            }
                        if (q == 0)
                            Console.WriteLine("nie mozesz tego zrobic");
                        else
                        {
                            Console.WriteLine("podaj PPID, PID i priorytet");
                            int ax1, bx1, cx1;
                            ax1 = int.Parse(Console.ReadLine());
                            bx1 = int.Parse(Console.ReadLine());
                            cx1 = int.Parse(Console.ReadLine());
                            proces ppp = zarzadcapr.utwProDziecko(ax1, bx1, cx1);
                            Console.WriteLine("Proces dodano");

                            zarzadcapr.exec(ppp);

                            Console.WriteLine("Podaj ile bloków powinien posiadac proces");
                            //wczytane = Console.ReadLine();     po 3 bloki na proces
                            ppp.heapAddrStart = pam.Zaalokuj(3);   // statycznie ustawiony na 3

                            iwezel.open(ref p, comenda[1], flaga.ronly, ref o, ref slowo);

                            //byte[] tabrozk;

                            string[] str = slowo.Split(' '); // stringa zarzutowac na uinta a uinta na bajty   // integer

                            byte[] ttmp = new byte[4];
                            int y = 0;
                            for (int l = 0; l < str.Length; l++)
                            {
                                uint tmp = Convert.ToUInt32(str[l]);
                                ttmp = BitConverter.GetBytes(tmp);
                                uint tmppp = BitConverter.ToUInt32(ttmp, 0);
                                for (int x = 0; x < ttmp.Length; x++)
                                {
                                    pam.Zapisz(ppp.heapAddrStart + y, ttmp[x]);
                                    y++;
                                }
                            }

                            ile++;

                            //////////////////////////////////////////////////////////////////////////////////////////
                            Console.WriteLine(pam);
                        }
                        break;
                    }
                case "wy":
                    {
                        zarzadcapr.wypisz2();
                        break;
                    }
                case "wy2":
                    {
                        zarzadcapr.kolejka.wypiszkolejki();
                        break;
                    }
                case "kill":
                    {
                        Console.WriteLine("podaj PID");
                        int axc = int.Parse(Console.ReadLine());
                        proces kkk = zarzadcapr.znajdz(axc);
                        pam.Zwolnij(kkk.heapAddrStart);
                        zarzadcapr.usun_z_k(axc);
                        ile--;
                        break;
                    }
                default:
                    {
                        Console.WriteLine("niepoprawna komenda");
                        break;
                    }

            }
            if (stop == 10)
                return 0;
            if (bre == 10)
                return 1;

        }
    }