Пример #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;

        }
    }
Пример #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;

        }
    }