示例#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 static int create(ref pom x, string nazwa, char typ, string nazwfold)
    //funkcja służąca do utworzenia pliku o typie: "typ", o nazwie: "nazwa" w katalogu o nazwie: "nazwfold"
    {
        if (licz == 20)
        {
            Console.WriteLine("\nWięcej plików nie dodamy, ponieważ tablica i-węzłów może mieć maksymalnie 20 elementów ");
            return(-1);
        }

        if (licz > 1)
        {
            int w, k;
            w = iwezel.czyistnieje(ref x, nazwa);
            k = iwezel.czyistnieje(ref x, nazwfold);

            if (w != -1)
            {
                Console.WriteLine("Taka nazwa już istnieje");
                return(-1);
            }
            //sprawdzamy czy istnieje plik lub katalog o tej samej nazwie

            if (k == -1)
            {
                Console.WriteLine("Nie ma takiego katalogu plik lub katalog nie zostanie utworzony");
                return(-1);
            }
        }


        if (typ == 'k')
        {
            iwezel z = new iwezel(ref x, typ);
            WpisK  q = new WpisK(nazwa, (byte)licz);


            if (licz >= 2)
            {
                Console.WriteLine("Utworzono katalog: " + nazwa + " w katalogu: " + nazwfold);
            }

            for (int i = 0; i < x.LK.Count(); i++)
            {
                if (x.LK[i][0].nazwa == nazwfold)
                {
                    x.LK[i].Add(q);
                    break;
                }
            }
            x.LK.Add(new List <WpisK>());
            x.LK[x.LK.Count() - 1].Add(q);

            if (licz == 1)
            {
                Console.WriteLine("Utworzono katalog 'Root' oraz 'Home' \n");
            }
        }


        if (typ == 'p')
        {
            bool   ok = false;
            iwezel z  = new iwezel(ref x, typ);
            WpisK  q  = new WpisK(nazwa, (byte)licz);


            for (int i = 0; i < x.LK.Count(); i++)
            {
                for (int j = 0; j < x.LK[i].Count(); j++)
                {
                    if (x.LK[i][j].nazwa == nazwa)
                    {
                        ok = true;
                    }
                }     //spr czy nie ma pliku o tej samej nazwie
            }
            if (ok == true)
            {
                Console.WriteLine("istnieje plik o takiej nazwie w tym katalogu!");
                return(-1);
            }

            Console.WriteLine("Utworzono plik: " + nazwa + " w katalogu: " + nazwfold);

            for (int i = 0; i < x.LK.Count(); i++)
            {
                if (x.LK[i][0].nazwa == nazwfold && ok == false)
                {
                    x.LK[i].Add(q); break;
                }
            }
        }

        licz++;
        return(0);
    }
示例#3
0
    //funkcja służąca do utworzenia pliku o typie: "typ", o nazwie: "nazwa" w katalogu o nazwie: "nazwfold"
    public static int create(ref pom x, string nazwa, char typ, string nazwfold)
    {
        if (licz == 20)
            {
                Console.WriteLine("\nWięcej plików nie dodamy, ponieważ tablica i-węzłów może mieć maksymalnie 20 elementów ");
                return -1;
            }

            if (licz > 1)
            {
                int w,k;
                w = iwezel.czyistnieje(ref x, nazwa);
                k = iwezel.czyistnieje(ref x, nazwfold);

                if (w != -1)
                {
                    Console.WriteLine("Taka nazwa już istnieje");
                    return -1;
                }
                //sprawdzamy czy istnieje plik lub katalog o tej samej nazwie

                if (k == -1)
                {
                    Console.WriteLine("Nie ma takiego katalogu plik lub katalog nie zostanie utworzony");
                    return -1;

                }
            }

            if (typ == 'k')
            {
                iwezel z = new iwezel(ref x, typ);
                WpisK q = new WpisK(nazwa, (byte)licz);

                if(licz>=2)
                Console.WriteLine("Utworzono katalog: "+nazwa+" w katalogu: "+ nazwfold);

                for (int i = 0; i < x.LK.Count(); i++)
                {
                    if (x.LK[i][0].nazwa == nazwfold)
                    {
                        x.LK[i].Add(q);
                        break;
                    }

                }
                x.LK.Add(new List<WpisK>());
                x.LK[x.LK.Count() - 1].Add(q);

                if (licz == 1)
                    Console.WriteLine("Utworzono katalog 'Root' oraz 'Home' \n");

            }

            if (typ == 'p')
            {
                bool ok = false;
                iwezel z = new iwezel(ref x, typ);
                WpisK q = new WpisK(nazwa, (byte)licz);

                for (int i = 0; i < x.LK.Count(); i++)
                {
                    for (int j = 0; j < x.LK[i].Count(); j++)
                    {
                        if (x.LK[i][j].nazwa == nazwa)
                            ok = true;
                    } //spr czy nie ma pliku o tej samej nazwie
                }
                if (ok == true)
                {
                    Console.WriteLine("istnieje plik o takiej nazwie w tym katalogu!");
                    return -1;
                }

                Console.WriteLine("Utworzono plik: " + nazwa + " w katalogu: " + nazwfold);

                for (int i = 0; i < x.LK.Count(); i++)
                {
                    if (x.LK[i][0].nazwa == nazwfold && ok == false)
                    { x.LK[i].Add(q); break; }
                }

            }

            licz++;
            return 0;
    }
示例#4
0
    public static int open(ref pom x, string naz, flaga l, ref int o, ref string Out)      // o- ilość zajętych bloków na dysku
    //Out-zmienna potrzebna do zapisu odczytanego pliku    l-flaga decyduje czy chcemy coś odczytać czy coś zapisać
    //funkcja służąca do odczytu lub zapisu

    {
        bool   ok    = false;
        string odkod = null;

        Out = odkod;
        int        v = 0, b = 0;
        List <int> LBP = new List <int>();

        for (int i = 0; i < x.LK.Count(); i++)
        {
            for (int j = 0; j < x.LK[i].Count(); j++)
            {
                if (x.LK[i][j].nazwa == naz)                          // znajdowanie pliku o nazwie zapisanej w parametrze 'naz'
                {
                    v = x.LK[i][j].nriwezla; b = x.LK[i][0].nriwezla; ok = true; break;
                }
            }
        }
        if (ok == false)
        {
            Console.WriteLine("Nie ma takiego pliku");
            return(-1);
        }
        LBP = iwezel.listazblok(ref x, v);

        if (l == flaga.ronly && ok == true)                 //funkcja odczytuje plik
        {
            if (x.tabi[v].Typ == 'p' && ((x.tabi[v].prawa1 == 1) || (x.tabi[v].prawa1 == 3) || (x.tabi[v].prawa1 == 7) || (x.tabi[v].prawa1 == 5)))
            {
                if (x.tabi[v].pierwszyblok == -1)
                {                                                // domyślnie pierwszy blok ma -1 co oznacza ze plik jest pusty
                    Console.WriteLine("Plik jest pusty");

                    return(-1);
                }

                else
                {
                    byte[] q = new byte[LBP.Count * 32];

                    int   ileb = LBP.Count;
                    int   nowa = 0;
                    int   r    = 0;
                    int[] taby = new int[ileb];

                    for (int i = 0; i < ileb; i++)
                    {
                        taby[i] = LBP[i];
                    }

                    while (nowa != ileb)
                    {
                        if (nowa > 5)
                        {
                            Console.WriteLine("Plik może mieć maksymalnie 6 bloków!");
                            break;
                        }

                        for (int i = 0; i < 32; i++)
                        {
                            if (x.dysk[taby[nowa]].bl[i] == 0)
                            {
                                break;
                            }
                            q[r] = x.dysk[taby[nowa]].bl[i];
                            r++;
                        }


                        if (ileb - 1 == nowa)
                        {
                            odkod = Encoding.ASCII.GetString(q, 0, r);
                        }


                        nowa++;
                    }


                    Out = odkod;
                }
            }

            if (x.tabi[v].Typ == 'k')
            {
                WpisK.wyswk1(naz, ref x);           //open z flaga ronly dla katalogu wyswietla wpisy danego katalogu
            }
        }



        if (l == flaga.wonly && ok == true)
        {                                           //sprawdzamy czy jest to plik o odpowiednich prawach do ktorego mozemy cos zapisac
            if (x.tabi[v].Typ == 'p' && ((x.tabi[v].prawa1 == 2) || (x.tabi[v].prawa1 == 3) || (x.tabi[v].prawa1 == 7) || (x.tabi[v].prawa1 == 6)))
            {
                Console.WriteLine("Pisz do pliku o nazwie: " + naz);
                string dane;
                dane = Console.ReadLine();

                byte[] q;
                q = Encoding.ASCII.GetBytes(dane);
                int ileb = q.Length / 32;
                int u = x.tabi[v].blokindeksowy;
                int r = 0;
                int nowa = 0, koncz = 0;


                if (x.tabi[v].pierwszyblok == -1)                       //jeśli plik jest pusty to zapis przebiega tak
                {
                    if (q.Length % 32 == 0)
                    {
                        int[] taby = new int[ileb];
                        while (nowa != ileb)
                        {
                            if (koncz == 1 && r == 192)
                            {
                                Console.WriteLine("Plik może mieć maksymalnie 6 bloków!");
                                break;
                            }

                            if (koncz == 1)
                            {
                                break;
                            }

                            taby[nowa] = iwezel.wolnemiejsce(ref o, ref x);

                            for (int i = 0; i < 32; i++)
                            {
                                if (r == q.Length || r == 192)
                                {
                                    koncz = 1; break;
                                }

                                x.dysk[taby[nowa]].bl[i] = q[r];
                                r++;
                            }

                            if (nowa == 0)
                            {
                                x.tabi[v].pierwszyblok = taby[nowa];
                            }

                            if (nowa == 1)
                            {
                                x.tabi[v].drugiblok         = taby[nowa];
                                x.dysk[taby[nowa - 1]].nast = taby[nowa];
                            }
                            if (nowa == 2)
                            {
                                u = iwezel.wolnemiejsce(ref o, ref x);
                                x.dysk[taby[nowa - 1]].nast = u;
                                x.tabi[v].blokindeksowy     = u;

                                for (int i = 0; i < 32; i++)
                                {
                                    x.dysk[u].bl[i] = 65;           //wypelnienie bloku indeksowego liczbą(indeksem) nie nazlezącą do dysku
                                }
                                //potrzebne do odczytania z bloku indeksowego kolejnych zajmowanych bloków
                                x.dysk[u].bl[0] = (byte)taby[nowa];
                            }

                            if (nowa == 3)
                            {
                                // x.dysk[taby[nowa - 1]].nast = taby[nowa];
                                x.dysk[u].bl[1] = (byte)taby[nowa];
                            }

                            if (nowa == 4)
                            {
                                //x.dysk[taby[nowa - 1]].nast = taby[nowa];
                                x.dysk[u].bl[2] = (byte)taby[nowa];
                            }

                            if (nowa == 5)
                            {
                                // x.dysk[taby[nowa - 1]].nast = taby[nowa];
                                x.dysk[u].bl[3] = (byte)taby[nowa];
                            }

                            nowa++;
                            if (r == 192)
                            {
                                koncz = 1;
                            }
                        }
                    }
                    if (q.Length % 32 != 0)
                    {
                        int[] taby2 = new int[ileb + 1];

                        while (nowa != ileb + 1)
                        {
                            if (koncz == 1 && r == 192)
                            {
                                Console.WriteLine("Plik może mieć maksymalnie 6 bloków!");
                                break;
                            }

                            if (koncz == 1)
                            {
                                break;
                            }

                            taby2[nowa] = iwezel.wolnemiejsce(ref o, ref x);

                            for (int i = 0; i < 32; i++)
                            {
                                if (r == q.Length || r == 192)
                                {
                                    koncz = 1; break;
                                }

                                x.dysk[taby2[nowa]].bl[i] = q[r];
                                r++;
                            }

                            if (nowa == 0)
                            {
                                x.tabi[v].pierwszyblok = taby2[nowa];
                            }

                            if (nowa == 1)                                  //2 bloki danych
                            {
                                x.tabi[v].drugiblok          = taby2[nowa];
                                x.dysk[taby2[nowa - 1]].nast = taby2[nowa];
                            }
                            if (nowa == 2)
                            {
                                u = iwezel.wolnemiejsce(ref o, ref x);
                                x.dysk[taby2[nowa - 1]].nast = u;
                                x.tabi[v].blokindeksowy      = u;

                                for (int i = 0; i < 32; i++)
                                {
                                    x.dysk[u].bl[i] = 65;
                                }

                                x.dysk[u].bl[0] = (byte)taby2[nowa];
                            }

                            if (nowa == 3)
                            {
                                // x.dysk[taby[nowa - 1]].nast = taby[nowa];
                                x.dysk[u].bl[1] = (byte)taby2[nowa];
                            }

                            if (nowa == 4)
                            {
                                //x.dysk[taby[nowa - 1]].nast = taby[nowa];
                                x.dysk[u].bl[2] = (byte)taby2[nowa];
                            }

                            if (nowa == 5)
                            {
                                // x.dysk[taby[nowa - 1]].nast = taby[nowa];
                                x.dysk[u].bl[3] = (byte)taby2[nowa];
                            }
                            if (r == 192)
                            {
                                koncz = 1;
                            }
                            nowa++;
                        }
                    }

                    x.tabi[v].rozmiar = r;

                    x.tabi[b].rozmiar += x.tabi[v].rozmiar;
                }



                if (x.tabi[v].pierwszyblok != -1 && r == 0)          //jeśli chcemy coś dopisać do pliku
                {
                    byte[] q2 = null;

                    int ostbl = 0;
                    int poj   = (LBP.Count - 1) * 32;
                    ostbl = LBP.Last();
                    nowa  = LBP.Count;

                    q2 = x.dysk[ostbl].bl;

                    for (int i = 0; i < 32; i++)
                    {
                        if (q2[i] != 0)
                        {
                            poj++;
                        }

                        if (q2[i] == 0)
                        {
                            x.dysk[ostbl].bl[i] = q[r];
                            r++;
                            poj++;
                            if (r == q.Length || poj == 192)
                            {
                                break;
                            }
                        }
                    }

                    if (q.Length - r <= 0)
                    {
                        goto skok;
                    }

                    ileb = ((q.Length - r) / 32);


                    if (q.Length - r % 32 == 0)
                    {
                        int   m    = 0;
                        int[] taby = new int[ileb];
                        while (nowa != ileb + nowa)
                        {
                            if (poj == 192)
                            {
                                koncz = 1;
                            }

                            if (koncz == 1 && poj == 192)
                            {
                                Console.WriteLine("Plik może mieć maksymalnie 6 bloków!");
                                break;
                            }

                            if (koncz == 1)
                            {
                                break;
                            }

                            taby[m] = iwezel.wolnemiejsce(ref o, ref x);

                            for (int i = 0; i < 32; i++)
                            {
                                if (r == q.Length || poj == 192)
                                {
                                    koncz = 1; break;
                                }

                                x.dysk[taby[m]].bl[i] = q[r];
                                r++;
                                poj++;
                            }

                            if (nowa == 0)
                            {
                                x.tabi[v].pierwszyblok = taby[m];
                            }

                            if (nowa == 1)
                            {
                                x.tabi[v].drugiblok      = taby[m];
                                x.dysk[LBP.First()].nast = taby[m];
                            }
                            if (nowa == 2)
                            {
                                u = iwezel.wolnemiejsce(ref o, ref x);
                                x.dysk[taby[m - 1]].nast = u;
                                x.tabi[v].blokindeksowy  = u;

                                for (int i = 0; i < 32; i++)
                                {
                                    x.dysk[u].bl[i] = 65;               //wypelnienie bloku indeksowego liczbą(indeksem) nie nazlezącą do dysku
                                }
                                //potrzebne do odczytania z bloku indeksowego kolejnych zajmowanych bloków
                                x.dysk[u].bl[0] = (byte)taby[m];
                            }

                            if (nowa == 3)
                            {
                                // x.dysk[taby[nowa - 1]].nast = taby[nowa];
                                x.dysk[u].bl[1] = (byte)taby[m];
                            }

                            if (nowa == 4)
                            {
                                //x.dysk[taby[nowa - 1]].nast = taby[nowa];
                                x.dysk[u].bl[2] = (byte)taby[m];
                            }

                            if (nowa == 5)
                            {
                                // x.dysk[taby[nowa - 1]].nast = taby[nowa];
                                x.dysk[u].bl[3] = (byte)taby[m];
                            }

                            m++;
                            nowa++;
                        }
                    }
                    if (q.Length - r % 32 != 0)
                    {
                        int   m     = 0;
                        int[] taby2 = new int[ileb + 1];

                        while (nowa != ileb + 1 + nowa)
                        {
                            if (poj == 192)
                            {
                                koncz = 1;
                            }

                            if (koncz == 1 && poj == 192)
                            {
                                Console.WriteLine("Plik może mieć maksymalnie 6 bloków!");
                                break;
                            }
                            if (koncz == 1)
                            {
                                break;
                            }

                            taby2[m] = iwezel.wolnemiejsce(ref o, ref x);

                            for (int i = 0; i < 32; i++)
                            {
                                if (r == q.Length || poj == 192)
                                {
                                    koncz = 1; break;
                                }

                                x.dysk[taby2[m]].bl[i] = q[r];
                                r++;
                                poj++;
                            }

                            if (nowa == 0)
                            {
                                x.tabi[v].pierwszyblok = taby2[m];
                            }

                            if (nowa == 1)                                      //2 bloki danych
                            {
                                x.tabi[v].drugiblok      = taby2[m];
                                x.dysk[LBP.First()].nast = taby2[m];
                            }

                            if (nowa == 2)
                            {
                                u = iwezel.wolnemiejsce(ref o, ref x);
                                x.dysk[taby2[m - 1]].nast = u;
                                x.tabi[v].blokindeksowy   = u;

                                for (int i = 0; i < 32; i++)
                                {
                                    x.dysk[u].bl[i] = 65;
                                }

                                x.dysk[u].bl[0] = (byte)taby2[m];
                            }

                            if (nowa == 3)
                            {
                                // x.dysk[taby[nowa - 1]].nast = taby[nowa];
                                x.dysk[u].bl[1] = (byte)taby2[m];
                            }

                            if (nowa == 4)
                            {
                                //x.dysk[taby[nowa - 1]].nast = taby[nowa];
                                x.dysk[u].bl[2] = (byte)taby2[m];
                            }

                            if (nowa == 5)
                            {
                                // x.dysk[taby[nowa - 1]].nast = taby[nowa];
                                x.dysk[u].bl[3] = (byte)taby2[m];
                            }
                            m++;
                            nowa++;
                        }
                    }

skok:
                    x.tabi[b].rozmiar += r;
                    x.tabi[v].rozmiar  = x.tabi[v].rozmiar + r;
                }

                //kon dopis
            }
        }
        return(0);
    }
示例#5
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);
            }
        }
    }