예제 #1
0
        protected override bool Process(IInteraction parameters)
        {
            bool success = true;
            // FileSystemInfo[] infos = rootDirectory.GetFileSystemInfos ("*", SearchOption.AllDirectories);

            IEnumerable <FileSystemInfo> infos = rootDirectory.EnumerateFileSystemInfos("*", SearchOption.AllDirectories);

            IEnumerator <FileSystemInfo> infoEnumerator = infos.GetEnumerator();

            while (infoEnumerator.MoveNext())
            {
                try {
                    FileSystemInfo info = infoEnumerator.Current;
                    if (info is FileInfo)
                    {
                        success &= FileFound.TryProcess(new FileInteraction(info, this.RootPath, parameters));
                    }
                    else if (info is DirectoryInfo)
                    {
                        success &= DirectoryFound.TryProcess(new DirectoryInteraction(info, this.RootPath, parameters));
                    }
                } catch (Exception ex) {
                    Secretary.Report(5, "Inclusion of new file failed; ", ex.Message);
                }
            }

            return(success);
        }
예제 #2
0
        public void OpenDoctor(int crm)
        {
            _secretaryArealyExistsInDataBase = true;
            _secretary          = _secretaryDapperRepository.GetById(crm);
            _secretary.Address  = _viaCepServices.GetAddress(_addressDapperRepository.GetById(_secretary.AddressId));
            _secretary.Login    = _loginDapperRepository.GetById(_secretary.LoginId);
            _secretary.Contacts = _contactDapperRepository.GetSecretaryContacts(_secretary.Cpf).ToList();

            NameTxt.Text        = _secretary.Name;
            CpfTxt.Text         = _secretary.Cpf.ToString();
            UserTxt.Text        = _secretary.Login.User;
            SenhaTxt.Text       = _secretary.Login.Password;
            CepTxt.Text         = _secretary.Address.Cep.ToString();
            AddressCompTxt.Text = _secretary.Address.Complemento;
            NumberTxt.Text      = _secretary.Address.Number.ToString();
            AddressTxt.Text     = _secretary.Address.AddressValue;
            foreach (var contact in _secretary.Contacts)
            {
                if (contact.Type == PhoneTypeEnum.mobile)
                {
                    CelTxt.Text = contact.ContactValue;
                }
                if (contact.Type == PhoneTypeEnum.residential)
                {
                    TelTxt.Text = contact.ContactValue;
                }
            }
        }
예제 #3
0
        // PUT: api/Secretary/5
        public HttpResponseMessage Update(Secretary obj)
        {
            obj.Id = _getSecretaryList.Find(s => s.SecretaryId == obj.SecretaryId).FirstOrDefault().Id;
            var result = _secretaryRepo.Update(obj);

            return(Request.CreateResponse(HttpStatusCode.Accepted, result));
        }
예제 #4
0
 public string ConvertEntityToCSVFormat(User entity)
 {
     if (entity.GetType() == typeof(Doctor))
     {
         Doctor doctor = (Doctor)entity;
         return(string.Join(delimiter, doctor.GetId(), doctor.GetType(), doctor.Username, doctor.Password, doctor.Name, doctor.Surname,
                            doctor.Jmbg, doctor.DateOfBirth.ToString(DATETIME_FORMAT), doctor.ContactNumber, doctor.EMail, doctor.City.Name,
                            doctor.City.Address, doctor.City.Country.Name, doctor.Specialitation.Id));
     }
     else if (entity.GetType() == typeof(Patient))
     {
         Patient patient = (Patient)entity;
         return(string.Join(delimiter, patient.GetId(), patient.GetType(), patient.Username, patient.Password, patient.Name, patient.Surname, patient.Jmbg, patient.DateOfBirth.ToString(DATETIME_FORMAT),
                            patient.ContactNumber, patient.EMail, patient.City.Name, patient.City.Address, patient.City.Country.Name, patient.GuestAccount));
     }
     else if (entity.GetType() == typeof(Secretary))
     {
         Secretary secretary = (Secretary)entity;
         return(string.Join(delimiter, secretary.GetId(), secretary.GetType(), secretary.Username, secretary.Password, secretary.Name, secretary.Surname, secretary.Jmbg, secretary.DateOfBirth.ToString(DATETIME_FORMAT),
                            secretary.ContactNumber, secretary.EMail, secretary.City.Name, secretary.City.Address, secretary.City.Country.Name));
     }
     else if (entity.GetType() == typeof(Manager))
     {
         Manager manager = (Manager)entity;
         return(string.Join(delimiter, manager.GetId(), manager.GetType(), manager.Username, manager.Password, manager.Name, manager.Surname, manager.Jmbg, manager.DateOfBirth.ToString(DATETIME_FORMAT),
                            manager.ContactNumber, manager.EMail, manager.City.Name, manager.City.Address, manager.City.Country.Name));
     }
     return(null);
 }
예제 #5
0
        private bool InvokeProcess(IInteraction parameters)
        {
            bool successful;

            successful = Process(parameters);
            if (!successful)
            {
                Secretary.Report(4,
                                 "Service", this.Description,
                                 "reported in as unsuccesful on line",
                                 this.ConfigLine);
            }

            if (HasSuccessor)
            {
                if (!Successor.TryProcess(parameters))
                {
                    successful = false;
                    Secretary.Report(4,
                                     "Service's successor", this.Description,
                                     "reported in as unsuccesful on line",
                                     Successor.ConfigLine);
                }
            }

            return(successful);
        }
예제 #6
0
        public void LoadPlugins()
        {
            IEnumerable <object> pluginPathObjects = (Configuration ["plugins"] as IEnumerable <object>);

            if (pluginPathObjects == null)
            {
                Secretary.Report(5, "No plugins specified in configuration");
                return;
            }

            foreach (object pluginPathObject in pluginPathObjects)
            {
                string pluginPath = (string)pluginPathObject;

                if (Directory.Exists(pluginPath))
                {
                    ScanDirectoryForPlugins(pluginPath);
                }
                else if (File.Exists(pluginPath))
                {
                    AddPluginFile(pluginPath);
                }
                else
                {
                    Secretary.Report(4, "Path", pluginPath, "was not a file or a folder");
                }
            }
        }
예제 #7
0
        /// <summary>
        /// Gets the instances defined in the file
        /// </summary>
        /// <returns>The instances.</returns>
        public Map <Service> GetInstances()
        {
            Map <Service> instances;

            if (Configuration.Has("base"))
            {
                instances = GetInheritedInstances();
            }
            else
            {
                instances = new Map <Service> ();
            }

            Settings configurations = Configuration.GetSubsettings("instances");

            foreach (KeyValuePair <string, object> kvp in configurations.Dictionary)
            {
                if (kvp.Value is Settings)
                {
                    instances [kvp.Key] = GetServiceForSettings((Settings)kvp.Value);
                }
            }

            Secretary.Report(5, "Loaded Instances from ", Configuration.SourceFile.Name);

            return(instances);
        }
예제 #8
0
 public AddCase(ClientControllers.Client client, Secretary secretary)
 {
     this.secretary = secretary;
     this.client    = client;
     InitializeComponent();
     cmbCaseKind.ItemsSource = Enum.GetValues(typeof(CaseKind));
 }
예제 #9
0
        /// <summary>
        /// Tries to process and leaves a ProcessErrorMessage set if applicable.
        /// When no error is produced, the errormessage will remain blank.
        /// </summary>
        /// <returns><c>true</c>, if process was tryed, <c>false</c> otherwise.</returns>
        /// <param name="context">Context.</param>
        /// <param name="parameters">Parameters.</param>
        public bool TryProcess(IInteraction parameters)
        {
            bool   succesful = false;
            string ProcessErrorMessage;

            if (FailHard)
            {
                return(InvokeProcess(parameters));
            }

            hog.Measure(delegate() {
                try
                {
                    succesful           = InvokeProcess(parameters);
                    ProcessErrorMessage = "";
                }
                catch (Exception ex) {
                    if (parameters.ExceptionHandler == null)
                    {
                        Secretary.Report(5, ex.Message, "unhandled by business logic");
                    }
                    else
                    {
                        parameters.ExceptionHandler(this, parameters, ex);
                    }
                }
            });

            return(succesful);
        }
예제 #10
0
        public void AddUser()
        {
            if (Role == "Doctor")
            {
                var user = new Doctor(Firstname, Lastname, CIN, SelectedDate, Password, SuperUser, PhoneNumber, Role,
                                      City);
                DataContext.Context.Users.Add(user);
                user.Speciality = Speciality;
            }
            else if (Role == "Secretary")
            {
                var user = new Secretary(Firstname, Lastname, CIN, SelectedDate, Password, SuperUser, PhoneNumber, Role,
                                         City);
                DataContext.Context.Users.Add(user);
                user.ExperienceYears = YearsOfExp;
            }
            else if (Role == "Patient")
            {
                var user = new Patient(Firstname, Lastname, CIN, SelectedDate, Password, SuperUser, PhoneNumber, Role,
                                       City);
                DataContext.Context.Users.Add(user);
                user.Profession = Profession;
                user.LastVisit  = DateTime.Today.ToShortDateString();
            }
            else
            {
                var user = new SuperUser(Firstname, Lastname, CIN, SelectedDate, Password, SuperUser, PhoneNumber, Role,
                                         City);
                DataContext.Context.Users.Add(user);
                user.SuperPassword = SuperPassword;
            }
            DataContext.Context.SaveChanges();

            MessageBox.Show("User Added!");
        }
예제 #11
0
        internal Employee Update(User user)
        {
            if (_secretaryRepository.Get(user.Id) != null)
            {
                Secretary secretary = _secretaryRepository.Get();
                secretary.Email       = user.Email;
                secretary.DateOfBirth = user.DateOfBirth;
                secretary.Name        = user.Name;
                secretary.Password    = user.Password;
                secretary.TextContent = user.TextContent;

                return(_secretaryRepository.Update((Secretary)secretary));
            }

            if (_managerRepository.Get(user.Id) != null)
            {
                Manager manager = _managerRepository.Get();
                manager.Email       = user.Email;
                manager.DateOfBirth = user.DateOfBirth;
                manager.Name        = user.Name;
                manager.Password    = user.Password;
                manager.TextContent = user.TextContent;

                return(_managerRepository.Update(manager));
            }

            return(_doctorService.Update(user));
        }
예제 #12
0
        /// <summary>
        /// Indexs a directory; recursive
        /// </summary>
        /// <param name="path">Path.</param>
        private void IndexDirectory(string path)
        {
            string[] files       = Directory.GetFiles(path, "*", SearchOption.TopDirectoryOnly);
            string[] directories = Directory.GetDirectories(path, "*", SearchOption.TopDirectoryOnly);

            foreach (string childPath in files)
            {
                try
                {
                    NewItem(new FileInfo(childPath));
                }
                catch (Exception exception)
                {
                    Secretary.Report(5, exception.Message);
                }
            }

            foreach (string childPath in directories)
            {
                try
                {
                    NewItem(new DirectoryInfo(childPath));
                    IndexDirectory(childPath);
                }
                catch (Exception exception)
                {
                    Secretary.Report(5, exception.Message);
                }
            }
        }
 public void Edit(Secretary entity)
 {
     if (AuthorizedUsers["Edit"].SingleOrDefault(any => any.Equals(Role)) != null)
     {
         SecretaryController.Edit(entity);
     }
 }
 public void Delete(Secretary entity)
 {
     if (AuthorizedUsers["Delete"].SingleOrDefault(any => any.Equals(Role)) != null)
     {
         SecretaryController.Delete(entity);
     }
 }
        private List <Secretary> getSecretary(string HospitalId)
        {
            Secretary        _secretarys = new Secretary();
            List <Secretary> secretary   = new List <Secretary>();
            List <Secretary> secretaries = _secretaryRepo.Find(x => x.HospitalId == HospitalId);

            foreach (var s in secretaries ?? new List <Secretary>())
            {
                _secretarys = new Secretary
                {
                    FirstName            = s.FirstName,
                    LastName             = s.LastName,
                    Email                = s.Email,
                    CountryCode          = s.CountryCode,
                    PhoneNumber          = s.PhoneNumber,
                    AlternatePhoneNumber = s.AlternatePhoneNumber,
                    Gender               = s.Gender,
                    YearOfExperience     = s.YearOfExperience,
                    SecretaryId          = s.SecretaryId,
                    HospitalId           = s.HospitalId,
                    jobType              = s.jobType,
                    AboutUs              = s.AboutUs,
                    IsDeleted            = s.IsDeleted,
                    CreatedBy            = s.CreatedBy,
                    ModifiedBy           = s.ModifiedBy,
                    DateEntered          = s.DateEntered,
                    DateModified         = s.DateModified
                                           //ImgUrl = $"{constant.imgUrl}/Secretary/{d.DoctorId}.Jpeg"
                };

                secretary.Add(_secretarys);
            }
            return(secretary);
        }
예제 #16
0
        public async Task <IActionResult> Edit(string id, [Bind("SecretaryId,CNP,FirstName,LastName,MailAddress,Password,Address,Birthday")] Secretary secretary)
        {
            if (id != secretary.SecretaryId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    secretaryService.UpdateSecretary(secretary);
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!secretaryService.SecretaryExists(secretary.SecretaryId))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(secretary));
        }
예제 #17
0
        static void Main(string[] args)
        {
            BlackAndWhitePrinter bawPrinter = new BlackAndWhitePrinter();
            Secretary            eva        = new Secretary(bawPrinter);

            eva.Print("Secretary's bill");

            Console.WriteLine();

            ColourPrinter cPrinter    = new ColourPrinter();
            Director      herrSchulte = new Director(cPrinter);

            herrSchulte.Print("Director's order");

            Console.WriteLine();

            MatrixPrinter mPrinter = new MatrixPrinter();
            Trainee       kevin    = new Trainee(mPrinter);

            kevin.Print("Trainee's project");

            Console.WriteLine();

            PDFPrinter pdfPrinter = new PDFPrinter();
            Developer  heiko      = new Developer(pdfPrinter);

            heiko.Print("Developer's source code");

            Console.ReadKey();
        }
예제 #18
0
        private void signInBtn_Click(object sender, RoutedEventArgs e)
        {
            secretary = (Secretary)userController.SignIn(NameTextBox.Text,PasswordBox.Password);

            if(NameTextBox.Text.Equals("") || PasswordBox.Password.Equals(""))
            {
                var okMbx = new OKMessageBox(this, 1);
                okMbx.titleMsgBox.Text = "Greška";
                okMbx.textMsgBox.Text = "Unos korisničkog imena i lozinke je obavezan!";
                okMbx.ShowDialog();
            }
            else if (secretary == null)
            {
                var okMbx = new OKMessageBox(this, 1);
                okMbx.titleMsgBox.Text = "Greška";
                okMbx.textMsgBox.Text = "Unijeli ste pogrešno korisničko ime ili lozinku!";
                okMbx.ShowDialog();
            }
            else
            {
                var s = new MainWindow();
                s.Main.Content = new Home();
                s.Show();
                this.Close();
            }        
        }
예제 #19
0
        // POST: api/Secretary
        public HttpResponseMessage Register(Secretary obj)
        {
            ICountryCodeRepository _countryCodeRepository = RepositoryFactory.Create <ICountryCodeRepository>(ContextTypes.EntityFramework);
            CountryCode            countryCode            = _countryCodeRepository.Find(x => x.Id == obj.CountryCode).FirstOrDefault();
            int country_Code = 0;

            if (countryCode != null)
            {
                country_Code = Convert.ToInt16(countryCode.CountryCodes);
            }
            EmailSender     _emailSender = new EmailSender();
            var             userStore    = new UserStore <ApplicationUser>(new ApplicationDbContext());
            var             manager      = new UserManager <ApplicationUser>(userStore);
            string          password     = _registration.RandomPassword(6);
            ApplicationUser user         = _registration.UserAcoount(obj, Convert.ToInt16(country_Code));
            IdentityResult  result       = manager.Create(user, password);

            user.PasswordHash = password;
            _registration.sendRegistrationEmail(user);
            _registration.sendRegistrationMessage(user);
            obj.SecretaryId    = user.Id;
            obj.EmailConfirmed = true;
            var _sectiryCreated = _secretaryRepo.Insert(obj);

            return(Request.CreateResponse(HttpStatusCode.Accepted, obj.SecretaryId));
        }
예제 #20
0
        protected override void HandleBranchChanged(object sender, ItemChangedEventArgs <Service> e)
        {
            switch (e.Name)
            {
            case SingleBranchNames.Begin:
            case SingleBranchNames.Content:
            case SingleBranchNames.Continue:
            case SingleBranchNames.Data:
            case SingleBranchNames.Http:
            case SingleBranchNames.Init:
            case SingleBranchNames.Next:
            case SingleBranchNames.Offload:
            case SingleBranchNames.Proceed:
            case SingleBranchNames.Request:
            case SingleBranchNames.Source:
            case SingleBranchNames.Subject:
                Secretary.Report(5, "using deprecated single branch at", ConfigLine);
                this.withBranch = e.NewValue;
                break;

            case SingleBranchNames.With:
                this.withBranch = e.NewValue;
                break;

            default:
                break;
            }
        }
예제 #21
0
        protected override bool Process(IInteraction parameters)
        {
            bool handled  = false;
            bool handling = false;

            ExceptionHandler handler = delegate(
                Service cause, IInteraction context, Exception problem
                ) {
                if (handling)
                {
                    Secretary.Report(
                        5,
                        "Another error occurred",
                        "in the process of handling",
                        "an error:", problem.Message);
                }
                else
                {
                    handling = true;
                    ErrorHandledInteraction errorInfo;
                    errorInfo = new ErrorHandledInteraction(
                        cause, context, problem);

                    handled = this.CatchBranch.TryProcess(errorInfo);
                }
            };

            ErrorHandlingInteraction wrapper;

            wrapper = new ErrorHandlingInteraction(
                parameters, handler);

            return(this.TryBranch.TryProcess(wrapper) || handled);
        }
예제 #22
0
        public IList <Secretary> RetrieveSecretary()
        {
            IList <Secretary> secretaryList = new List <Secretary>();

            using (MySqlConnection conn = new MySqlConnection(connString))
            {
                conn.Open();
                string statement = "SELECT * FROM secretary";

                MySqlCommand    cmd    = new MySqlCommand(statement, conn);
                MySqlDataReader reader = cmd.ExecuteReader();
                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        Secretary secretary = new Secretary();
                        secretary.id       = reader.GetInt32("id");
                        secretary.name     = reader.GetString("name");
                        secretary.password = reader.GetString("password");

                        secretaryList.Add(secretary);
                    }
                }
            }

            return(secretaryList);
        }
예제 #23
0
        public static void Handle(Service cause, IInteraction context, Exception problem)
        {
            string message = "";

            if (cause.InitErrorMessage.Length > 0)
            {
                message = string.Format(
                    "Already initialized badly with the message on line {3}:\n" +
                    "{1}.\n" +
                    "The message for this failure was:\n{2}",
                    cause.Description, cause.InitErrorMessage,
                    problem.Message, cause.ConfigLine);
            }
            else
            {
                message = problem.Message;
            }

            Secretary.Report(0, string.Format(
                                 "Processing for Service {0} " +
                                 "failed with the following message: \n{1}\n" +
                                 "on line {2}", cause.Description, message,
                                 cause.ConfigLine));

            for (Exception inner = problem; inner != null; inner = inner.InnerException)
            {
                Secretary.Report(0, "Inner: ", inner.Message);
            }
        }
 public Secretary RegisterSecretary(Secretary secretary)
 {
     if (!IsUsernameValid(secretary.Username) || !IsPasswordValid(secretary.Password))
     {
         return(null);
     }
     return(secretaryRepository.NewSecretary(secretary));
 }
 public Secretary Save(Secretary entity)
 {
     if (AuthorizedUsers["Save"].SingleOrDefault(any => any.Equals(Role)) != null)
     {
         return(SecretaryController.Save(entity));
     }
     return(null);
 }
 public Secretary EditProfile(Secretary secretary)
 {
     if (!IsUsernameValid(secretary.Username) || !IsPasswordValid(secretary.Password))
     {
         return(null);
     }
     return(secretaryRepository.SetSecretary(secretary));
 }
예제 #27
0
        public void Delete(Secretary secretary)
        {
            var secretaryDelete = Get(secretary.Id);
            var user            = secretaryDelete.User;

            _context.Remove(user);
            _context.Remove(secretaryDelete);
        }
예제 #28
0
        public void SecretaryNew_ValidParameters_ValuesMatch()
        {
            // Act
            var secretary = Secretary.New(Instances.Name, Instances.Username, Instances.Password);

            // Assert
            Assert.AreEqual(Instances.Name, secretary.Name);
        }
예제 #29
0
        public Secretary Get()
        {
            string secretarySerialized = System.IO.File.ReadAllText(SECRETARY_FILE);

            Secretary secretary = Newtonsoft.Json.JsonConvert.DeserializeObject <Secretary>(secretarySerialized);

            return(secretary);
        }
예제 #30
0
 void DestroyCommand(IDbCommand obj)
 {
     try {
         obj.Dispose();
     } catch (Exception ex) {
         Secretary.Report(5, "Couldn't dispose of command due to:", ex.Message);
     }
 }
예제 #31
0
 private static Boolean KawigiEdit_RunTest(int testNum, string[] p0, Boolean hasAnswer, string p1)
 {
     Console.Write("Test " + testNum + ": [" + "{");
     for (int i = 0; p0.Length > i; ++i) {
         if (i > 0) {
             Console.Write(",");
         }
         Console.Write("\"" + p0[i] + "\"");
     }
     Console.Write("}");
     Console.WriteLine("]");
     Secretary obj;
     string answer;
     obj = new Secretary();
     DateTime startTime = DateTime.Now;
     answer = obj.wrongOrdering(p0);
     DateTime endTime = DateTime.Now;
     Boolean res;
     res = true;
     Console.WriteLine("Time: " + (endTime - startTime).TotalSeconds + " seconds");
     if (hasAnswer) {
         Console.WriteLine("Desired answer:");
         Console.WriteLine("\t" + "\"" + p1 + "\"");
     }
     Console.WriteLine("Your answer:");
     Console.WriteLine("\t" + "\"" + answer + "\"");
     if (hasAnswer) {
         res = answer == p1;
     }
     if (!res) {
         Console.WriteLine("DOESN'T MATCH!!!!");
     } else if ((endTime - startTime).TotalSeconds >= 2) {
         Console.WriteLine("FAIL the timeout");
         res = false;
     } else if (hasAnswer) {
         Console.WriteLine("Match :-)");
     } else {
         Console.WriteLine("OK, but is it right?");
     }
     Console.WriteLine("");
     return res;
 }
예제 #32
0
        public static void Main(string[] args)
        {
            // cannibalized
            // https://github.com/strandtentje/apollogeese/blob/master/Bootloader/Head.cs
            string time = DateTime.Now.ToString ("yyyy-MM-dd--THHmmsszz");
            Secretary logger = new Secretary (string.Format ("{0}.log", time));
            logger.globVerbosity = 6;
            logger.ReportHere (0, "Logfile Opened");

            Stream stdin = Console.OpenStandardInput ();
            // Stream stdin = File.OpenRead ("TEST.CR2");

            RecoveryState state = RecoveryState.Nothing;

            byte[] header = new byte[12];
            byte[] closer = new byte[] {
                0xff, 0xd9
            };

            int headercursor = 0;
            int closercursor = 0;

            using (FileStream data = File.OpenRead("SIGNATURE.CR2")) {
                data.Read (header, 0, 12);
            }

            Secretary.Report (5, "Header bytes:", header.Length.ToString());
            Secretary.Report (5, "Footer bytes:", closer.Length.ToString());

            FileStream outfile = null;
            int filecounter = 0;
            int filesize = 0;
            long totalbytes = 0;

            int readSig = stdin.ReadByte();

            while (-1 < readSig) {
                byte inByte = (byte)readSig;

                if (header[headercursor] == inByte) {
                    headercursor++;
                    if (state == RecoveryState.Nothing) {
                        Secretary.Report (8, "Nothing->Header");
                        state = RecoveryState.Header;
                    }
                } else {
                    headercursor = 0;
                    if (state == RecoveryState.Header) {
                        Secretary.Report (8, "Header->Nothing");
                        state = RecoveryState.Nothing;
                    }
                }

                if (headercursor == header.Length) {
                    headercursor = 0;
                    state = RecoveryState.Body1;
                    Secretary.Report (5, "Header->Body1");
                    filecounter++;
                    string filename = string.Format ("REC_{0}.CR2", filecounter.ToString ("D8"));
                    outfile = File.OpenWrite (filename);
                    Secretary.Report(5, "Start writing to", filename);
                    // -1 here because we writebyte later.
                    outfile.Write (header, 0, header.Length - 1);
                    filesize = header.Length;
                }

                switch (state) {
                case RecoveryState.Body1:
                case RecoveryState.Body2:
                case RecoveryState.Body3:
                    outfile.WriteByte (inByte);
                    filesize++;
                    if (filesize % MB == 0)
                        Secretary.Report (5, "write", state.ToString (), "@", (filesize / MB).ToString(), "MB");
                    if (closer [closercursor] == inByte) {
                        closercursor++;
                        if (closercursor == closer.Length) {
                            closercursor = 0;
                            state++;
                        }
                    } else {
                        closercursor = 0;
                    }
                    break;
                case RecoveryState.Body4:
                    outfile.WriteByte (inByte);
                    filesize++;
                    if (filesize % MB == 0)
                        Secretary.Report (5, "write", state.ToString (), "@", (filesize / MB).ToString(), "MB");
                    if (closer [closercursor] == inByte) {
                        closercursor++;
                        if (closercursor == closer.Length) {
                            closercursor = 0;
                            state = RecoveryState.Nothing;
                            filesize = 0;
                            outfile.Close ();
                        }
                    } else {
                        closercursor = 0;
                    }
                    break;
                default:
                    break;
                }

                totalbytes++;

                if (totalbytes % (MB * 100) == 0) {
                    Secretary.Report (5, "read", (totalbytes / MB).ToString(), "MB from disk");
                }

                readSig = stdin.ReadByte();
            }
        }