VERSION 5.00 Begin VB.MDIForm MDIForm1 BackColor = &H8000000C& Caption = "Sesim" ClientHeight = 7650 ClientLeft = 60 ClientTop = 630 ClientWidth = 9615 Icon = "MDIForm1.frx":0000 StartUpPosition = 2 'CenterScreen Begin VB.Menu menu_Edit Caption = "&Edit" Begin VB.Menu menu_loadwindowsstate Caption = "&Load Window State" Enabled = 0 'False End Begin VB.Menu menu_savewindowsstate Caption = "&Save window state" Enabled = 0 'False End Begin VB.Menu menu_print Caption = "&Print windows" End Begin VB.Menu menu_exit Caption = "&Exit" End End Begin VB.Menu menu_data Caption = "&Data" Begin VB.Menu menu_skrivtxt Caption = "Write SAS file" End Begin VB.Menu menu_writeaccess Caption = "Write Access file" End Begin VB.Menu menu_writebin Caption = "Write binary file" End End Begin VB.Menu menu_hjälp Caption = "&Help" Begin VB.Menu menu_about Caption = "&About" End Begin VB.Menu menu_variables Caption = "Variable Definitions" End Begin VB.Menu menu_runtime Caption = "Runtime switches" End End End Attribute VB_Name = "MDIForm1" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Option Explicit '! ************************************* '! This is the main starting form '! ************************************* Private Sub MDIForm_Load() '! First Sub running when starting Sesim ' Out program path Call setpath If Left$(sesimpath, 1) <> "\" Then ChDrive sesimpath ' Change directory to make available the FORTRAN DLL-library ChDir sesimpath & "\source" ' Documentation file for tracing Open sesimpath & "\tempdata\trace_doc.txt" For Output As #101 Printdok "MDIForm_Load" ' Only one instance in each directory If App.PrevInstance = True Then MsgBox "Sesim is already running. This instance will terminate." End End If ' Load standard forms Load controlcenter Load statusform Load frmEditor ' Form handling DDE-requests Load zsesimDDE zsesimDDE.Visible = False Load frmSESIMDDE frmSESIMDDE.Visible = False '-- Command line arguments: ' Syntax SESIM {years} {sample} ' Example: SESIM 51 20 Executes the model 51 years with a 20% subsample If command <> "" And command <> "Command" Then Dim strCmd As String Dim i As Long Dim x() As String strCmd = CStr(command) x = Split(strCmd, " ") If UBound(x) >= 1 Then controlcenter.txtPercentofsample.text = x(1) '-- Sample size End If ' Handle output data object and output file If UBound(x) >= 2 Then Dim filenr As Integer filenr = FreeFile Open sesimpath & "\parameterdata\" & x(2) For Binary As filenr Get #filenr, , OutputData Close filenr OutputData.OutputActive = True If UBound(x) >= 3 Then OutputData.filename = x(3) End If End If Call step_to_year(x(0)) '-- Execute the model End '-- Terminates the model End If controlcenter.SetFocus End Sub
Private Sub menu_about_Click() '! Menu choice - about If Dir(sesimpath & "\sesim.exe") = "" Then MsgBox "You are running SESIM in debug mode!" Else MsgBox "This version of Sesim was compiled" & vbCrLf & FileDateTime(sesimpath & "\sesim.exe") End If End Sub
Private Sub menu_exit_Click() '! Menu choice - exit End End Sub
Private Sub menu_savewindowsstate_Click() '! Menu choice - Save window state Dim v_s Dim C Open sesimpath & "\parameterdata\wstate.txt" For Output As #3 Print #3, Me.Top Print #3, Me.Left Print #3, Me.Width Print #3, Me.Height For Each v_s In coll_view 'MsgBox v_s.Caption & " " & v_s.Tag Print #3, v_s.name Print #3, v_s.Top Print #3, v_s.Left Print #3, v_s.Width Print #3, v_s.Height For Each C In v_s.Controls If LCase(Mid$(C.name, 1, 4)) = "comb" Then Print #3, C.name & ".text:" & C.text End If If LCase(Mid$(C.name, 1, 3)) = "chk" Then Print #3, C.name & ".value:" & C.value End If If LCase(Mid$(C.name, 1, 3)) = "txt" Then Print #3, C.name & ".text:" & C.text End If Next Next If exclude_tag <> "" Then Print #3, "exclude_tag:" & exclude_tag Print #3, "exclude_txt:" & exclude_txt End If Close 3 End Sub
Private Sub menu_loadwindowsstate_Click() '! Menu choice - Load window state Dim v_s Dim C Dim rad As String Dim radnr As Integer Dim contr As String Dim ord1 As String Dim oldh As Integer If Dir(sesimpath & "\parameterdata\wstate.txt") = "" Then Exit Sub If init_done = 0 Then Call Initsesim contr = "" Open sesimpath & "\parameterdata\wstate.txt" For Input As #3 Do While Not EOF(3) Line Input #3, rad ord1 = getword(rad, 1, ":") radnr = radnr + 1 If rad = "monitor_univariate" Or _ rad = "monitor_freq" Or _ rad = "monitor_demographics" Or _ rad = "monitor_kernel" Or _ rad = "monitor_microdata" Or _ rad = "monitor_demohist" _ Then contr = rad radnr = 0 End If If contr = "" And MDIForm1.WindowState = vbNormal Then If radnr = 1 Then MDIForm1.Top = CInt(rad) If radnr = 2 Then MDIForm1.Left = CInt(rad) If radnr = 3 Then MDIForm1.Width = CInt(rad) If radnr = 4 Then MDIForm1.Height = CInt(rad) End If If contr <> "" Then If radnr = 1 Then coll_view.Item(coll_view.count).Top = CInt(rad) If radnr = 2 Then coll_view.Item(coll_view.count).Left = CInt(rad) If radnr = 3 Then coll_view.Item(coll_view.count).Width = CInt(rad) If radnr = 4 Then coll_view.Item(coll_view.count).Height = CInt(rad) End If If contr = "monitor_univariate" Then If radnr = 0 Then Call controlcenter.cmdUnivar_Click If ord1 = "Combo1.text" Then coll_view.Item(coll_view.count).Combo1.text = getword(rad, 2, ":") If ord1 = "chkNotzero.value" Then coll_view.Item(coll_view.count).chkNotzero.value = CInt(getword(rad, 2, ":")) If ord1 = "chkPlot.value" Then coll_view.Item(coll_view.count).Height = coll_view.Item(coll_view.count).Height / 1.7 coll_view.Item(coll_view.count).chkPlot.value = getword(rad, 2, ":") End If End If If contr = "monitor_kernel" Then If radnr = 0 Then Call controlcenter.cmdKernel_Click If ord1 = "Combo1.text" Then coll_view.Item(coll_view.count).Combo1.text = getword(rad, 2, ":") End If If contr = "monitor_microdata" Then If radnr = 0 Then Call controlcenter.cmdMicrodata_Click End If If contr = "monitor_freq" Then If radnr = 0 Then Call controlcenter.cmdFreq_Click If ord1 = "Combo1.text" Then coll_view.Item(coll_view.count).Combo1.text = getword(rad, 2, ":") If ord1 = "Combo2.text" Then coll_view.Item(coll_view.count).Combo2.text = getword(rad, 2, ":") If ord1 = "chkPlot.value" Then coll_view.Item(coll_view.count).Height = coll_view.Item(coll_view.count).Height / 1.7 coll_view.Item(coll_view.count).chkPlot.value = getword(rad, 2, ":") End If 'If ord1 = "chkPlot.value" Then ' oldh = coll_view.Item(coll_view.count).Height ' coll_view.Item(coll_view.count).chkPlot.Value = CInt(getword(rad, 2, ":")) ' coll_view.Item(coll_view.count).Height = oldh ' coll_view.Item(coll_view.count).chkPlot.Value = 0 'End If 'If ord1 = "chkSelect.value" Then coll_view.Item(coll_view.count).chkSelect.value = CInt(getword(rad, 2, ":")) If ord1 = "chkPercent.value" Then coll_view.Item(coll_view.count).chkPercent.value = CInt(getword(rad, 2, ":")) End If 'If contr = "monitor_microdata" Then ' If radnr = 0 Then Call controlcenter.cmdMicrodata_Click ' If ord1 = "txtInr.text" Then coll_view.Item(coll_view.count).txtInr.text = getword(rad, 2, ":") ' If ord1 = "txtHHnr.text" Then coll_view.Item(coll_view.count).txtHHnr.text = getword(rad, 2, ":") 'End If If contr = "monitor_demohist" Then If radnr = 0 Then Call controlcenter.cmdDemohist_Click End If If contr = "monitor_demographics" Then If radnr = 0 Then Call controlcenter.cmdDemo_Click If ord1 = "chkPlot.value" Then coll_view.Item(coll_view.count).chkPlot.value = CInt(getword(rad, 2, ":")) End If If ord1 = "exclude_tag" Then exclude_tag = getword(rad, 2, ":") If ord1 = "exclude_txt" Then exclude_txt = getword(rad, 2, ":") DoEvents Loop Close #3 If exclude_tag = "" Then For Each v_s In coll_view If v_s.Tag <> "mdem" Then v_s.Text1.text = model_time Next Else For Each v_s In coll_view If v_s.Tag = exclude_tag Then v_s.Text1.text = model_time Next End If End Sub
Private Sub menu_print_Click() '! Menu choice - Print all windows ' print all monitors Dim v_s For Each v_s In coll_view v_s.PrintForm Next End Sub
Private Sub menu_skrivtxt_Click() '! Menu choice - Write data to be imported to SAS 'Call write_data_txt status "Writing SAS-file..." Call write_sas_program status "SAS-file written" End Sub
'********************************************************************** ' Shows a list of the variables that are available in SESIM along with ' their types and definitions. '********************************************************************** Private Sub menu_variables_Click() FrmVarList.Show End Sub
Public Sub menu_writeaccess_Click() '! Menu choice - Write data to be imported to MS Access Dim dbfil As String Dim ws As Workspace Dim db As Database Dim rs As Recordset Dim tb As TableDef Dim findnr0 As Field Dim findnr1 As Field Dim newf As Field dbfil = sesimpath & "\microdata\microdata.mdb" If Dir(dbfil) = "" Then status "Create MS-Access file" Set ws = DBEngine.Workspaces(0) Set db = ws.CreateDatabase(dbfil, dbLangGeneral, dbVersion30) Set tb = db.CreateTableDef("Individuals") Set findnr0 = tb.CreateField("dbnr", dbLong) findnr0.Attributes = dbAutoIncrField tb.Fields.Append findnr0 Set findnr1 = tb.CreateField("year", dbLong) findnr1.DefaultValue = base_year + model_time tb.Fields.Append findnr1 Set findnr1 = tb.CreateField("i_indnr", dbLong) findnr1.DefaultValue = 0 tb.Fields.Append findnr1 Set findnr1 = tb.CreateField("i_hhnr", dbLong) findnr1.DefaultValue = 0 tb.Fields.Append findnr1 Set findnr1 = tb.CreateField("i_next_indnr", dbLong) findnr1.DefaultValue = 0 tb.Fields.Append findnr1 Dim cv Dim txt_str As String For Each cv In vartype_coll If Left$(cv, 1) = "i" Then txt_str = LCase(getword(cv, 1, " ")) ' Variable name If txt_str <> "i_indnr" And _ txt_str <> "i_hhnr" And _ txt_str <> "i_next_indnr" Then txt_str = LCase(getword(cv, 2, " ")) ' Variable type Select Case txt_str Case "integer" Set findnr1 = tb.CreateField(getword(cv, 1, " "), dbInteger) Case "long" Set findnr1 = tb.CreateField(getword(cv, 1, " "), dbLong) Case "double" Set findnr1 = tb.CreateField(getword(cv, 1, " "), dbDouble) Case "single" Set findnr1 = tb.CreateField(getword(cv, 1, " "), dbSingle) Case "byte" Set findnr1 = tb.CreateField(getword(cv, 1, " "), dbByte) End Select findnr1.DefaultValue = 0 tb.Fields.Append findnr1 End If End If Next db.TableDefs.Append tb Dim indnr_idx As index Set indnr_idx = tb.CreateIndex("i_indnr") indnr_idx.Primary = True indnr_idx.Unique = False Set newf = indnr_idx.CreateField("i_indnr") indnr_idx.Fields.Append newf tb.Indexes.Append indnr_idx db.Close status "Access init done" End If status "Access writing data..." Dim write_method As Integer write_method = 1 ' write one record a time 'write_method = 2 ' write one vector a time Dim i As Long Dim rest Set db = OpenDatabase(dbfil, dbForwardOnly & dbAppendOnly) If write_method = 1 Then Set rs = db.OpenRecordset("Individuals", dbOpenTable, dbAppendOnly) For i = 1 To m_icount ' ' Write only marked individuals, used when saving dead peoples last record ' If mark_i(i) = 1 Then ' rs.AddNew ' rs("year") = base_year + model_time ' Call write_accessdb(rs, i) ' rs.Update ' End If ' Write 1 individual of 30 to save time '***OS 010531 rest = i_indnr(i) Mod 30 '***OS 010531 If i = 1 Or rest = 0 Then rs.AddNew rs("year") = base_year + model_time Call write_accessdb(rs, i) rs.Update '***OS 010531 End If Next End If If write_method = 2 Then Set rs = db.OpenRecordset("Individuals", dbOpenTable) Dim lastrow As Long Call prepare_temp("i_indnr") For i = 1 To m_icount rest = i Mod 1000 If rest = 0 Then status CStr(i) rs.AddNew rs("i_indnr") = temp(i) rs.Update Next For Each cv In vartype_coll DoEvents txt_str = getword(cv, 1, " ") ' variable name If Left$(cv, 1) = "i" And txt_str <> "i_indnr" Then status txt_str Call prepare_temp(txt_str) rs.MoveFirst lastrow = 1 For i = 1 To m_icount If temp(i) <> 0 Then rs.Move i - lastrow lastrow = i rs.Edit rs(txt_str) = temp(i) rs.Update End If Next End If Next End If rs.Close db.Close status "Access write done" End Sub
Private Sub menu_writebin_Click() '! Menu choice - Write binary file Call Write_Data End Sub
Private Sub MDIForm_Unload(Cancel As Integer) '! Unloading End MsgBox "unload" End Sub
'********************************************************************** ' Shows a list of runtime parameters or switches that are available in SESIM along with ' their definitions. '********************************************************************** Private Sub menu_runtime_Click() frmRuntimeparameters.Show End Sub