/*****************************************************************
  *
  * Constructor takes in a page entry and copies the process id, segment
  * and page number over. It sets frame number to 0 by default.
  *
  ****************************************************************/
 public MFrame(ProcessPage p)
 {
     this.frameNumber = 0;
     this.processID   = p.ProcessID;
     this.segment     = p.Segment;
     this.pageNumber  = p.PageNumber;
 }
        /*********************************************************************
        *
        * This method loops through the text and data sizes, subtracting one
        * page size each time until it reaches 0 bytes left and creates a table
        * with each one, making sure to keep track of the page number properly
        * by seperating the text segments from the data segments.
        *
        *********************************************************************/

        public void SetPages()
        {
            int         tempText = text;
            int         tempData = data;
            ProcessPage page;

            // loop through text segment
            while (tempText > 0)
            {
                // creates a new page
                page      = new ProcessPage();
                tempText -= PAGE_SIZE;

                // if its not the first page, add one to the previous page number
                if (pages.Count > 0)
                {
                    int last = pages[pages.Count - 1].PageNumber;
                    page.PageNumber = last + 1;
                }

                page.ProcessID = processID;
                page.Segment   = "Text";

                // add to list of pages
                pages.Add(page);
            }

            // loop through data segment
            while (tempData > 0)
            {
                // create new page
                page      = new ProcessPage();
                tempData -= PAGE_SIZE;

                // if it is not the first data page then add one to the previous page number
                if (pages.Count > 0 && !pages.Last().Segment.Equals("Text"))
                {
                    int last = pages[pages.Count - 1].PageNumber;
                    page.PageNumber = last + 1;
                }

                page.ProcessID = processID;
                page.Segment   = "Data";

                // add to list of pages
                pages.Add(page);
            }
        }