private void OpenFileButton_Click(object sender, System.EventArgs e) { Stream myStream = null; OpenFileDialog openFileDialog1 = new OpenFileDialog(); //openFileDialog1.InitialDirectory = "c:\\" ; openFileDialog1.Filter = "OSEK Implementation Language (*.oil)|*.OIL" ; openFileDialog1.FilterIndex = 2 ; openFileDialog1.RestoreDirectory = true ; if(openFileDialog1.ShowDialog() == DialogResult.OK) { try { if ((myStream = openFileDialog1.OpenFile()) != null) { using (myStream) { // Insert code to read the stream here. string file = openFileDialog1.FileName; int j=0; int counter; try { string text = File.ReadAllText(file); string[] uCconf = text.Split(new string[] { "uC " }, StringSplitOptions.RemoveEmptyEntries); string ucSelected = GetValueFromString(uCconf[0], "MICROCONTROLLER"); MicroSelection.SelectedIndex = Convert.ToInt32(ucSelected); //MICROCONTROLLER- > ToolBar BE COMPLETED // OS_CONF ----------------------------------------------\ string[] osconf = text.Split(new string[] { "OS " }, StringSplitOptions.RemoveEmptyEntries); string temp = GetValueFromString(osconf[1], "STACKCHECK"); if ("TRUE" == temp) { STACK_CHECK_ENABLED.Checked = true; } else { STACK_CHECK_ENABLED.Checked = false; } osconf[1] = osconf[1].Remove(0, (osconf[1].IndexOf('{') + 1)); osconf[1] = osconf[1].Remove(0, (osconf[1].IndexOf(';') + 1)); temp = GetValueFromString(osconf[1], "ERRORHOOK"); if ("TRUE" == temp) { ERROR_CHECKING_EXTENDEDK_ENABLED.Checked = true; } else { ERROR_CHECKING_EXTENDEDK_ENABLED.Checked = false; } osconf[1] = osconf[1].Remove(0, (osconf[1].IndexOf(';') + 1)); temp = GetValueFromString(osconf[1], "STARTUPHOOK"); if ("TRUE" == temp) { STARTUP_HOOK_ENABLED.Checked = true; } else { STARTUP_HOOK_ENABLED.Checked = false; } osconf[1] = osconf[1].Remove(0, (osconf[1].IndexOf(';') + 1)); temp = GetValueFromString(osconf[1], "SHUTDOWNHOOK"); if ("TRUE" == temp) { SHUTDOWN_HOOK_ENABLED.Checked = true; } else { SHUTDOWN_HOOK_ENABLED.Checked = false; } osconf[1] = osconf[1].Remove(0, (osconf[1].IndexOf(';') + 1)); temp = GetValueFromString(osconf[1], "PRETASKHOOK"); if ("TRUE" == temp) { PRETASK_HOOK_ENABLED.Checked = true; } else { PRETASK_HOOK_ENABLED.Checked = false; } osconf[1] = osconf[1].Remove(0, (osconf[1].IndexOf(';') + 1)); temp = GetValueFromString(osconf[1], "POSTTASKHOOK"); if ("TRUE" == temp) { POSTTASK_HOOK_ENABLED.Checked = true; } else { POSTTASK_HOOK_ENABLED.Checked = false; } osconf[1] = osconf[1].Remove(0, (osconf[1].IndexOf(';') + 1)); temp = GetValueFromString(osconf[1], "PREISRHOOK"); if ("TRUE" == temp) { PREISR_HOOK_ENABLED.Checked = true; } else { PREISR_HOOK_ENABLED.Checked = false; } osconf[1] = osconf[1].Remove(0, (osconf[1].IndexOf(';') + 1)); temp = GetValueFromString(osconf[1], "POSTISRHOOK"); if ("TRUE" == temp) { POSTISR_HOOK_ENABLED.Checked = true; } else { POSTISR_HOOK_ENABLED.Checked = false; } osconf[1] = osconf[1].Remove(0, (osconf[1].IndexOf(';') + 1)); temp = GetValueFromString(osconf[1], "INTERRUPTNESTING"); if ("TRUE" == temp) { Enabled_ISR_Nesting.Checked = true; } else { Enabled_ISR_Nesting.Checked = false; } osconf[1] = osconf[1].Remove(0, (osconf[1].IndexOf(';') + 1)); // COUNTERS ----------------------------------------------\ string[] cnt = text.Split(new string[] { "COUNTER " }, StringSplitOptions.RemoveEmptyEntries); CounterCount = cnt.Length; // remove the fake rows for (int i = 0; i < CounterCount; i++) { if (cnt[i].Contains("TIMER =")) { if (CounterList[j] == null) { CounterList[j] = new Counter(); } CounterList[j].SetCounterName(GetNameOfObject(cnt[i])); cnt[i] = cnt[i].Remove(0, (cnt[i].IndexOf('{') + 1)); CounterList[j].SetTimerName(GetValueFromString(cnt[i], "TIMER")); cnt[i] = cnt[i].Remove(0, (cnt[i].IndexOf(';') + 1)); CounterList[j].SetMinCycle(GetValueFromString(cnt[i], "MINCYCLE")); cnt[i] = cnt[i].Remove(0, (cnt[i].IndexOf(';') + 1)); CounterList[j].SetMaxAllowedValue(GetValueFromString(cnt[i], "MAXALLOWEDVALUE")); cnt[i] = cnt[i].Remove(0, (cnt[i].IndexOf(';') + 1)); CounterList[j].SetTickPerBase(GetValueFromString(cnt[i], "TICKPERBASE")); cnt[i] = cnt[i].Remove(0, (cnt[i].IndexOf(';') + 1)); CounterList[j].SetTimeInNS(GetValueFromString(cnt[i], "TIME_IN_NS")); cnt[i] = cnt[i].Remove(0, (cnt[i].IndexOf(';') + 1)); j++; } } CounterCount = j; this.OStree.SelectedNode = this.OStree.Nodes[0].Nodes[3]; if (this.OStree.SelectedNode.Nodes != null) { this.OStree.SelectedNode.Nodes.Clear(); } counter = 0; while (CounterList[counter] != null) { this.OStree.SelectedNode.Nodes.Add(CounterList[counter].GetCounterName()); counter++; } COUNTER_SELECTOR.Items.Clear(); for (int i = 0; i < CounterCount; i++) { COUNTER_SELECTOR.Items.Add(CounterList[i].GetCounterName()); } // ALARMS--------------------------------------------------- string[] res = text.Split(new string[] { "ALARM " }, StringSplitOptions.None); AlarmCounter = res.Length - 1; for (int i = 0; i < AlarmCounter; i++) { if (AlarmList[i] == null) { AlarmList[i] = new Alarm(); } AlarmList[i].SetAlarmName(GetNameOfObject(res[i + 1])); AlarmList[i].SetAlarmCounter(GetValueFromString(res[i + 1], "COUNTER")); res[i + 1] = res[i + 1].Remove(0, (res[i + 1].IndexOf(';') + 1)); string AlarmAction = GetValueFromString(res[i + 1], "ACTION"); AlarmList[i].SetACTION_TYPE(AlarmAction); res[i + 1] = res[i + 1].Remove(0, (res[i + 1].IndexOf('{') + 1)); if ("ACTIVATETASK" == AlarmAction) { AlarmList[i].SetTASK_NAME(GetValueFromString(res[i + 1], "TASK")); } else if ("SETEVENT" == AlarmAction) { AlarmList[i].SetEVENT_NAME(GetValueFromString(res[i + 1], "EVENT")); } else if ("ALARMCALLBACK" == AlarmAction) { AlarmList[i].SetALARMCALLBACK(GetValueFromString(res[i + 1], "CALLBACK")); } else { MessageBox.Show(NameOfSystem, "Not correct OIL File!"); } res[i + 1] = res[i + 1].Remove(0, (res[i + 1].IndexOf('}') + 1)); res[i + 1] = res[i + 1].Remove(0, (res[i + 1].IndexOf(';') + 1)); AlarmList[i].SetAlarmAutostartEn(GetValueFromString(res[i + 1], "AUTOSTART")); res[i + 1] = res[i + 1].Remove(0, (res[i + 1].IndexOf('{') + 1)); AlarmList[i].SetAutostart_Alarmtime(GetValueFromString(res[i + 1], "ALARMTIME")); res[i + 1] = res[i + 1].Remove(0, (res[i + 1].IndexOf(';') + 1)); AlarmList[i].SetAutostart_cycletime(GetValueFromString(res[i + 1], "CYCLETIME")); } this.OStree.SelectedNode = this.OStree.Nodes[0].Nodes[5]; if (this.OStree.SelectedNode.Nodes != null) { this.OStree.SelectedNode.Nodes.Clear(); } counter = 0; while (AlarmList[counter] != null) { this.OStree.SelectedNode.Nodes.Add(AlarmList[counter].GetAlarmName()); counter++; } // TASKS -------------------------------------------------------------------- j = 0; string[] tsk = text.Split(new string[] { "TASK " }, StringSplitOptions.None); TaskCounter = tsk.Length - 1; for (int i = 0; i < TaskCounter; i++) { if (tsk[i].Contains("PRIORITY =")) { if (TaskList[j] == null) { TaskList[j] = new Task(); } TaskList[j].SetTaskName(GetNameOfObject(tsk[i])); tsk[i] = tsk[i].Remove(0, (tsk[i].IndexOf('{') + 1)); TaskList[j].SetTaskType(GetValueFromString(tsk[i], "TYPE")); tsk[i] = tsk[i].Remove(0, (tsk[i].IndexOf(';') + 1)); TaskList[j].SetTaskPrio(GetValueFromString(tsk[i], "PRIORITY")); tsk[i] = tsk[i].Remove(0, (tsk[i].IndexOf(';') + 1)); TaskList[j].SetTaskActivation(GetValueFromString(tsk[i], "ACTIVATION")); tsk[i] = tsk[i].Remove(0, (tsk[i].IndexOf(';') + 1)); TaskList[j].SetTaskScheduler(GetValueFromString(tsk[i], "SCHEDULE")); tsk[i] = tsk[i].Remove(0, (tsk[i].IndexOf(';') + 1)); TaskList[j].SetTaskCallScheduler(GetValueFromString(tsk[i], "CALLSCHEDULER")); tsk[i] = tsk[i].Remove(0, (tsk[i].IndexOf(';') + 1)); TaskList[j].SetTaskStackSize(GetValueFromString(tsk[i], "STACKSIZE")); tsk[i] = tsk[i].Remove(0, (tsk[i].IndexOf(';') + 1)); TaskList[j].SetTaskEvent(GetValueFromString(tsk[i], "EVENT")); tsk[i] = tsk[i].Remove(0, (tsk[i].IndexOf(';') + 1)); TaskList[j].SetTaskResource(GetValueFromString(tsk[i], "RESOURCE")); tsk[i] = tsk[i].Remove(0, (tsk[i].IndexOf(';') + 1)); TaskList[j].SetAutoStartTask(GetValueFromString(tsk[i], "AUTOSTART").Contains("TRUE")); tsk[i] = tsk[i].Remove(0, (tsk[i].IndexOf(';') + 1)); j++; } } TaskCounter = j; this.OStree.SelectedNode = this.OStree.Nodes[0].Nodes[1]; if (this.OStree.SelectedNode.Nodes != null) { this.OStree.SelectedNode.Nodes.Clear(); } counter = 0; while (TaskList[counter] != null) { this.OStree.SelectedNode.Nodes.Add(TaskList[counter].GetTaskName()); counter++; } OStree.Enabled = true; OStree.Visible = true; SaveButton.Enabled = true; tabControl.Visible = true; tabControl.Enabled = true; ValidateIt.Enabled = true; GenerateButton.Enabled = true; } catch (IOException) { } } } } catch (Exception ex) { MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message); } } StatisticsButton.Enabled = true; }
//============================================================================== // DESCRIPTION : // // PARAMETERS (Type,Name,Min,Max) : // // RETURN VALUE : // // DESIGN INFORMATION : //============================================================================== private void OnMiceClick(object sender, EventArgs e) { DisableTaskEvents(); DisableAlarmEvents(); DisableCounterEvents(); MenuItem miClicked = (MenuItem)sender; string item = miClicked.Text; string t = MyContext.ToString(); if("OSEK_CONF" == OStree.SelectedNode.Text) { return; } else { if( (null != OStree.SelectedNode.Parent)&& ("OSEK_CONF" == OStree.SelectedNode.Parent.Text) ) { if("New" == item) { OStree.SelectedNode.Nodes.Add("OSEK Properties"); try { // OS should have only one set of property MyContext.MenuItems.Clear(); } catch { MessageBox.Show("Problem in the clear context menu"); } } else if("Add" == item) { if("TASK" == OStree.SelectedNode.Text) { string NameForm = OStree.SelectedNode.Text + "_Child" + TaskNameCounter.ToString(); TaskNameCounter++; OStree.SelectedNode.Nodes.Add(NameForm); // Allocate space for task's struct if (TaskCounter >= (int)15) { MessageBox.Show("Exceeeded max number of tasks"); } TaskList[TaskCounter] = new Task(); TaskList[TaskCounter++].SetTaskName(NameForm); } if ("ALARM" == OStree.SelectedNode.Text) { string NameForm = OStree.SelectedNode.Text + "_Child" + AlarmNameCounter.ToString(); OStree.SelectedNode.Nodes.Add(NameForm); AlarmNameCounter++; // Allocate space for task's struct if (AlarmCounter >= (int)15) { MessageBox.Show("Exceeeded max number of alarms"); } AlarmList[AlarmCounter] = new Alarm(); AlarmList[AlarmCounter++].SetAlarmName(NameForm); } if ("COUNTER" == OStree.SelectedNode.Text) { string NameForm = OStree.SelectedNode.Text + "_Child" + CounterNameCount.ToString(); OStree.SelectedNode.Nodes.Add(NameForm); CounterNameCount++; // Allocate space for task's struct if (CounterCount >= (int)15) { MessageBox.Show("Exceeded max number of counters"); } CounterList[CounterCount] = new Counter(); CounterList[CounterCount++].SetCounterName(NameForm); //COUNTER_SELECTOR.Items.Insert(CounterCombox++,NameForm); } } else { MessageBox.Show("Unkown context menu item for first deptch!"); } } else if( (null != OStree.SelectedNode.Parent)&& (null != OStree.SelectedNode.Parent.Parent)&& ("OSEK_CONF" == OStree.SelectedNode.Parent.Parent.Text) ) { if("Delete" == item) { int i; if("TASK" == OStree.SelectedNode.Parent.Text) { try { for(i = OStree.SelectedNode.Index; (i < 15 && (null != TaskList[i+1])); i++) { TaskList[i] = TaskList[i+1]; } TaskList[i] = null; OStree.SelectedNode.Nodes.Remove(OStree.SelectedNode); if(0 < TaskCounter) { TaskCounter--; } ManageTaskProperty(false); } catch { MessageBox.Show("Failed remove a child node"); } } if ("COUNTER" == OStree.SelectedNode.Parent.Text) { if (0 < CounterCount) { CounterCount--; } try { for (i = OStree.SelectedNode.Index; (i < 15 && (null != CounterList[i + 1])); i++) { CounterList[i] = CounterList[i + 1]; } CounterList[i] = null; OStree.SelectedNode.Nodes.Remove(OStree.SelectedNode); if (0 < AlarmCounter) { CounterCount--; } ManageCounterProperty(false); //COUNTER_SELECTOR.Items.Remove(OStree.SelectedNode.Index); //CounterCombox--; } catch { MessageBox.Show("Failed remove a child node"); } } if ("ALARM" == OStree.SelectedNode.Parent.Text) { if (0 < AlarmCounter) { AlarmCounter--; } try { for (i = OStree.SelectedNode.Index; (i < 15 && (null != AlarmList[i + 1])); i++) { AlarmList[i] = AlarmList[i + 1]; } AlarmList[i] = null; OStree.SelectedNode.Nodes.Remove(OStree.SelectedNode); if (0 < AlarmCounter) { AlarmCounter--; } ManageAlarmProperty(false); } catch { MessageBox.Show("Failed remove a child node"); } } FormContextMenu(); GC.Collect(); GC.WaitForPendingFinalizers(); } else if("Edit" == item) { if(!OStree.SelectedNode.IsEditing) { OStree.SelectedNode.BeginEdit(); } } else { MessageBox.Show("Unkown context menu item for second depth!"); } } } OStree.ExpandAll(); EnableTaskEvents(); EnableAlarmEvents(); EnableCounterEvents(); }