diff --git a/applications/lazstats/source_orig/FRIEDMANUNIT.PAS b/applications/lazstats/source_orig/FRIEDMANUNIT.PAS new file mode 100644 index 000000000..57eaa472d --- /dev/null +++ b/applications/lazstats/source_orig/FRIEDMANUNIT.PAS @@ -0,0 +1,348 @@ +unit FriedmanUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, MainUnit, Globals, OutPutUnit, DataProcs, Math, + FunctionsLib, MatrixLib, contexthelpunit; + +type + + { TFriedmanFrm } + + TFriedmanFrm = class(TForm) + HelpBtn: TButton; + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + GrpVar: TEdit; + GrpIn: TBitBtn; + GrpOut: TBitBtn; + Label2: TLabel; + Label3: TLabel; + TreatVars: TListBox; + TrtIn: TBitBtn; + TrtOut: TBitBtn; + Label1: TLabel; + VarList: TListBox; + procedure ComputeBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure GrpInClick(Sender: TObject); + procedure GrpOutClick(Sender: TObject); + procedure HelpBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + procedure TrtInClick(Sender: TObject); + procedure TrtOutClick(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + FriedmanFrm: TFriedmanFrm; + +implementation + +{ TFriedmanFrm } + +procedure TFriedmanFrm.ResetBtnClick(Sender: TObject); +VAR i : integer; +begin + VarList.Items.Clear; + TreatVars.Items.Clear; + GrpVar.Text := ''; + for i := 1 to NoVariables do + begin + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); + end; + GrpIn.Visible := true; + GrpOut.Visible := false; + TrtIn.Visible := true; + TrtOut.Visible := false; +end; + +procedure TFriedmanFrm.TrtInClick(Sender: TObject); +VAR i, index : integer; +begin + index := VarList.Items.Count; + i := 0; + while i < index do + begin + if (VarList.Selected[i]) then + begin + TreatVars.Items.Add(VarList.Items.Strings[i]); + VarList.Items.Delete(i); + index := index - 1; + i := 0; + end + else i := i + 1; + end; + TrtOut.Visible := true; +end; + +procedure TFriedmanFrm.TrtOutClick(Sender: TObject); +VAR index : integer; +begin + index := TreatVars.ItemIndex; + if index < 0 then + begin + TrtOut.Visible := false; + TrtIn.Visible := true; + exit; + end; + VarList.Items.Add(TreatVars.Items.Strings[index]); + TreatVars.Items.Delete(index); + TrtIn.Visible := true; +end; + +procedure TFriedmanFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TFriedmanFrm.ComputeBtnClick(Sender: TObject); +Var + i, j, k, L, col, itemp, GrpCol, CondVar, mingrp, maxgrp : integer; + tiestart, tieend, NoSelected, NCases, group, nogrps : integer; + s, t, TotRanks, chisqr, probchi, score : double; + X, ColRanks : DblDyneVec; + Ranks, means : DblDyneMat; + RowLabels, ColLabels : StrDyneVec; + index : IntDyneVec; + GrpNo : IntdyneMat; + cellstring, outline: string; + title : string; + ties : boolean; + ColNoSelected : IntDyneVec; +begin + k := TreatVars.Items.Count; + NoSelected := k + 1; + SetLength(ColNoSelected,NoVariables); + SetLength(ColLabels,NoVariables); + + // get group variable and treatment variables + GrpCol := 0; + for i := 1 to NoVariables do + begin + cellstring := OS3MainFrm.DataGrid.Cells[i,0]; + if cellstring = GrpVar.Text then + begin + ColNoSelected[0] := i; + GrpCol := i; + end; + for j := 1 to k do + begin + if cellstring = TreatVars.Items.Strings[j-1] then + begin + ColNoSelected[j] := i; + ColLabels[j-1] := cellstring; + end; + end; + end; + + // get minimum and maximum group codes + NCases := 0; + mingrp := 10000; + maxgrp := -10000; + for i := 1 to NoCases do + begin + if not GoodRecord(i,NoSelected,ColNoSelected) then continue; + NCases := NCases + 1; + group := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[GrpCol,i]))); + if group > maxgrp then maxgrp := group; + if group < mingrp then mingrp := group; + end; + nogrps := maxgrp - mingrp + 1; + + // Initialize arrays + SetLength(RowLabels,nogrps); + SetLength(index,k); + SetLength(GrpNo,nogrps,k); + SetLength(Ranks,nogrps,k); + SetLength(means,nogrps,k); + SetLength(X,k); + SetLength(ColRanks,k); + for j := 0 to k-1 do + begin + for i := 0 to nogrps-1 do + begin + means[i,j] := 0.0; + Ranks[i,j] := 0.0; + GrpNo[i,j] := 0; + end; + ColRanks[j] := 0.0; + X[j] := 0.0; + index[j] := j+1; + end; + + // Initialize labels + for i := 1 to nogrps do + begin + cellstring := format('Group %d',[mingrp + i - 1]); + RowLabels[i-1] := cellstring; + end; + + // Setup for printing results + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('FRIEDMAN TWO-WAY ANOVA ON RANKS'); + OutPutFrm.RichEdit.Lines.Add('See pages 166-173 in S. Siegel''s Nonparametric Statistics'); + OutPutFrm.RichEdit.Lines.Add('for the Behavioral Sciences, McGraw-Hill Book Co., New York, 1956'); + OutPutFrm.RichEdit.Lines.Add(''); + + // Obtain mean score for each cell + for i := 1 to NoCases do + begin + if ( not GoodRecord(i,NoSelected,ColNoSelected)) then continue; + group := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[GrpCol,i]))); + group := group - mingrp + 1; + for j := 1 to k do // treatment values + begin + col := ColNoSelected[j]; + score := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[col,i])); + means[group-1,j-1] := means[group-1,j-1] + score; + GrpNo[group-1,j-1] := GrpNo[group-1,j-1] + 1; + end; + end; + for i := 1 to nogrps do + for j := 1 to k do + means[i-1,j-1] := means[i-1,j-1] / GrpNo[i-1,j-1]; + + // Print means and group size arrays + title := 'Treatment means - values to be ranked.'; + MAT_PRINT(means,nogrps,k,title,RowLabels,ColLabels,NCases); + title := 'Number in each group''s treatment.'; + IntArrayPrint(GrpNo,nogrps,k,'GROUP',RowLabels,ColLabels,title); + + // Gather row data in X array and rank within rows + for i := 0 to nogrps-1 do + begin + for j := 0 to k-1 do + begin + X[j] := means[i,j]; + index[j] := j+1; + end; + + //rank scores in this row i + for j := 1 to k - 1 do + begin + for L := j + 1 to k do + begin + if (X[j-1] > X[L-1]) then + begin + t := X[j-1]; + X[j-1] := X[L-1]; + X[L-1] := t; + itemp := index[j-1]; + index[j-1] := index[L-1]; + index[L-1] := itemp; + end; + end; + end; + for j := 1 to k do + begin + Ranks[i,index[j-1]-1] := j; + end; + + //Check for tied ranks and use average if desired here + tiestart := 0; + tieend := 0; + ties := false; + j := 1; + while j < k do + begin + for L := j + 1 to k do + begin + if (means[i,j-1] = means[i,L-1]) then + begin + ties := true; + tiestart := j; + tieend := L; + end; + end; + if (ties = true) then + begin + s := 0.0; + for L := tiestart to tieend do s := s + Ranks[i,L-1]; + for L := tiestart to tieend do + Ranks[i,L-1] := s / (tieend - tiestart + 1); + j := tieend; + ties := false; + end; + j := j + 1; + end; // next j + end; // next group i + + //Get sum of ranks in columns + for i := 1 to nogrps do + for j := 1 to k do + ColRanks[j-1] := ColRanks[j-1] + Ranks[i-1,j-1]; + + //Calculate Statistics + TotRanks := 0; + for j := 1 to k do TotRanks := TotRanks + (ColRanks[j-1] * ColRanks[j-1]); + chisqr := TotRanks * 12.0 / (nogrps * k * (k + 1)); + chisqr := chisqr - (3 * nogrps * (k + 1)); + probchi := 1.0 - chisquaredprob(chisqr, k - 1); + + //Now, show results + title := 'Score Rankings Within Groups'; + MAT_PRINT(Ranks,nogrps,k,title,RowLabels,ColLabels,NCases); + title := 'TOTAL RANKS'; + DynVectorPrint(ColRanks,k,title,ColLabels,NCases); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Chi-square with %d D.F. := %8.3f with probability := %6.4f', + [k-1, chisqr, probchi]); + OutPutFrm.RichEdit.Lines.Add(outline); + if ((k < 5) and (nogrps < 10)) then + begin + OutPutFrm.RichEdit.Lines.Add('Chi-square too approximate-use exact table (TABLE N)'); + OutPutFrm.RichEdit.Lines.Add('page 280-281 in Siegel'); + end; + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + + // clean up the heap + ColRanks := nil; + X := nil; + means := nil; + Ranks := nil; + GrpNo := nil; + index := nil; + RowLabels := nil; + ColLabels := nil; + ColNoSelected := nil; +end; + +procedure TFriedmanFrm.GrpInClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + GrpVar.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + GrpIn.Visible := false; + GrpOut.Visible := true; +end; + +procedure TFriedmanFrm.GrpOutClick(Sender: TObject); +begin + VarList.Items.Add(GrpVar.Text); + GrpVar.Text := ''; + GrpIn.Visible := true; + GrpOut.Visible := false; +end; + +procedure TFriedmanFrm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +initialization + {$I friedmanunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/FRIEDMANUNIT.lfm b/applications/lazstats/source_orig/FRIEDMANUNIT.lfm new file mode 100644 index 000000000..ff131f4c7 --- /dev/null +++ b/applications/lazstats/source_orig/FRIEDMANUNIT.lfm @@ -0,0 +1,286 @@ +object FriedmanFrm: TFriedmanFrm + Left = 121 + Height = 299 + Top = 109 + Width = 498 + Caption = 'The Friedman Two Way ANOVA on Ranks' + ClientHeight = 299 + ClientWidth = 498 + OnShow = FormShow + LCLVersion = '0.9.28.2' + object Label1: TLabel + Left = 8 + Height = 14 + Top = 6 + Width = 90 + Caption = 'Available Variables' + ParentColor = False + end + object Label2: TLabel + Left = 217 + Height = 14 + Top = 15 + Width = 71 + Caption = 'Group Variable' + ParentColor = False + end + object Label3: TLabel + Left = 216 + Height = 14 + Top = 102 + Width = 97 + Caption = 'Treatment Variables' + ParentColor = False + end + object VarList: TListBox + Left = 8 + Height = 259 + Top = 22 + Width = 157 + ItemHeight = 0 + MultiSelect = True + TabOrder = 0 + end + object GrpIn: TBitBtn + Left = 176 + Height = 31 + Top = 23 + Width = 34 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = GrpInClick + TabOrder = 1 + end + object GrpOut: TBitBtn + Left = 176 + Height = 31 + Top = 56 + Width = 34 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = GrpOutClick + TabOrder = 2 + end + object TrtIn: TBitBtn + Left = 176 + Height = 31 + Top = 104 + Width = 34 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = TrtInClick + TabOrder = 3 + end + object TrtOut: TBitBtn + Left = 176 + Height = 31 + Top = 136 + Width = 34 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = TrtOutClick + TabOrder = 4 + end + object GrpVar: TEdit + Left = 216 + Height = 21 + Top = 33 + Width = 152 + TabOrder = 5 + Text = 'GrpVar' + end + object TreatVars: TListBox + Left = 217 + Height = 161 + Top = 120 + Width = 153 + ItemHeight = 0 + TabOrder = 6 + end + object ResetBtn: TButton + Left = 400 + Height = 34 + Top = 112 + Width = 80 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 7 + end + object CancelBtn: TButton + Left = 400 + Height = 33 + Top = 56 + Width = 82 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 8 + end + object ComputeBtn: TButton + Left = 400 + Height = 32 + Top = 168 + Width = 80 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 9 + end + object ReturnBtn: TButton + Left = 400 + Height = 34 + Top = 224 + Width = 80 + Caption = 'Return' + ModalResult = 1 + TabOrder = 10 + end + object HelpBtn: TButton + Tag = 124 + Left = 400 + Height = 32 + Top = 8 + Width = 82 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 11 + end +end diff --git a/applications/lazstats/source_orig/FRIEDMANUNIT.lrs b/applications/lazstats/source_orig/FRIEDMANUNIT.lrs new file mode 100644 index 000000000..8c7cfb529 --- /dev/null +++ b/applications/lazstats/source_orig/FRIEDMANUNIT.lrs @@ -0,0 +1,234 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TFriedmanFrm','FORMDATA',[ + 'TPF0'#12'TFriedmanFrm'#11'FriedmanFrm'#4'Left'#2'y'#6'Height'#3'+'#1#3'Top'#2 + +'m'#5'Width'#3#242#1#7'Caption'#6'#The Friedman Two Way ANOVA on Ranks'#12'C' + +'lientHeight'#3'+'#1#11'ClientWidth'#3#242#1#6'OnShow'#7#8'FormShow'#10'LCLV' + +'ersion'#6#8'0.9.28.2'#0#6'TLabel'#6'Label1'#4'Left'#2#8#6'Height'#2#14#3'To' + +'p'#2#6#5'Width'#2'Z'#7'Caption'#6#19'Available Variables'#11'ParentColor'#8 + +#0#0#6'TLabel'#6'Label2'#4'Left'#3#217#0#6'Height'#2#14#3'Top'#2#15#5'Width' + +#2'G'#7'Caption'#6#14'Group Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'Labe' + +'l3'#4'Left'#3#216#0#6'Height'#2#14#3'Top'#2'f'#5'Width'#2'a'#7'Caption'#6#19 + +'Treatment Variables'#11'ParentColor'#8#0#0#8'TListBox'#7'VarList'#4'Left'#2 + +#8#6'Height'#3#3#1#3'Top'#2#22#5'Width'#3#157#0#10'ItemHeight'#2#0#11'MultiS' + +'elect'#9#8'TabOrder'#2#0#0#0#7'TBitBtn'#5'GrpIn'#4'Left'#3#176#0#6'Height'#2 + +#31#3'Top'#2#23#5'Width'#2'"'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0 + +#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0 + +#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V' + +#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y' + +#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0 + +'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157 + +#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195 + +#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0 + +#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255 + +#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144 + +#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201 + +#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190 + +'m'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255 + +'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#9'NumGlyphs'#2#0#7'OnClick'#7#10'GrpInClick'#8'TabOrder'#2#1#0#0#7'TBitBtn' + +#6'GrpOut'#4'Left'#3#176#0#6'Height'#2#31#3'Top'#2'8'#5'Width'#2'"'#10'Glyph' + +'.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16 + ,#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255 + +'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$' + +#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156 + +#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255 + +#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255 + +'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138 + +#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207 + +#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}' + +#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0 + +'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S' + +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';' + +#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'GrpOutClick'#8 + +'TabOrder'#2#2#0#0#7'TBitBtn'#5'TrtIn'#4'Left'#3#176#0#6'Height'#2#31#3'Top' + +#2'h'#5'Width'#2'"'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6' + +#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0 + +#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%' + +'i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a' + +#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O' + +#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D' + +#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255 + +#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152 + +#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193 + +#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h' + +#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255 + +#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139 + +#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255 + +#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h' + +#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z' + +#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I' + +#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O' + +#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7 + +'OnClick'#7#10'TrtInClick'#8'TabOrder'#2#3#0#0#7'TBitBtn'#6'TrtOut'#4'Left'#3 + +#176#0#6'Height'#2#31#3'Top'#3#136#0#5'Width'#2'"'#10'Glyph.Data'#10':'#4#0#0 + +'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0 + +#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h' + +#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255 + +';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255 + +#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152 + +#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255 + +#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!' + +'c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138#255#162#216 + ,#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142 + +#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255 + +'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't' + +#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255 + +'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5' + +#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199 + +'t'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't' + +#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'TrtOutClick'#8'TabOrde' + +'r'#2#4#0#0#5'TEdit'#6'GrpVar'#4'Left'#3#216#0#6'Height'#2#21#3'Top'#2'!'#5 + +'Width'#3#152#0#8'TabOrder'#2#5#4'Text'#6#6'GrpVar'#0#0#8'TListBox'#9'TreatV' + +'ars'#4'Left'#3#217#0#6'Height'#3#161#0#3'Top'#2'x'#5'Width'#3#153#0#10'Item' + +'Height'#2#0#8'TabOrder'#2#6#0#0#7'TButton'#8'ResetBtn'#4'Left'#3#144#1#6'He' + +'ight'#2'"'#3'Top'#2'p'#5'Width'#2'P'#7'Caption'#6#5'Reset'#7'OnClick'#7#13 + +'ResetBtnClick'#8'TabOrder'#2#7#0#0#7'TButton'#9'CancelBtn'#4'Left'#3#144#1#6 + +'Height'#2'!'#3'Top'#2'8'#5'Width'#2'R'#7'Caption'#6#6'Cancel'#11'ModalResul' + +'t'#2#2#8'TabOrder'#2#8#0#0#7'TButton'#10'ComputeBtn'#4'Left'#3#144#1#6'Heig' + +'ht'#2' '#3'Top'#3#168#0#5'Width'#2'P'#7'Caption'#6#7'Compute'#7'OnClick'#7 + +#15'ComputeBtnClick'#8'TabOrder'#2#9#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3 + +#144#1#6'Height'#2'"'#3'Top'#3#224#0#5'Width'#2'P'#7'Caption'#6#6'Return'#11 + +'ModalResult'#2#1#8'TabOrder'#2#10#0#0#7'TButton'#7'HelpBtn'#3'Tag'#2'|'#4'L' + +'eft'#3#144#1#6'Height'#2' '#3'Top'#2#8#5'Width'#2'R'#7'Caption'#6#4'Help'#7 + +'OnClick'#7#12'HelpBtnClick'#8'TabOrder'#2#11#0#0#0 +]); diff --git a/applications/lazstats/source_orig/FunctionsUnit.pas b/applications/lazstats/source_orig/FunctionsUnit.pas new file mode 100644 index 000000000..2aebdc491 --- /dev/null +++ b/applications/lazstats/source_orig/FunctionsUnit.pas @@ -0,0 +1,217 @@ +unit FunctionsUnit; + +{$MODE Delphi} + +interface + +uses SysUtils, ItemBankGlobals; + +function ReadMCItem(item : integer; VAR R3 : MCItemRcd) : boolean; +function ReadTFItem(item : integer; VAR R5 : TFItemRcd) : boolean; +function ReadMAItem(item : integer; VAR R1 : MatchItemsRcd) : boolean; +function ReadCOItem(item : integer; VAR R2 : BlankItemRcd) : boolean; +function ReadESItem(item : integer; VAR R4 : EssayItemRcd) : boolean; +procedure WriteMCItem(item : integer; VAR R3 : MCItemRcd); +procedure WriteTFItem(item : integer; VAR R5 : TFItemRcd); +procedure WriteMAItem(item : integer; VAR R1 : MatchItemsRcd); +procedure WriteCOItem(item : integer; VAR R2 : BlankItemRcd); +procedure WriteESItem(item : integer; VAR R4 : EssayItemRcd); + +implementation + +function ReadMCItem(item : integer; VAR R3 : MCItemRcd) : boolean; +var + found : boolean; + F3 : File of MCItemRcd; + filename : string; + +begin + found := false; + if FileExists(MCFName) { *Converted from FileExists* } then // multiple choice items + begin + filename := MCFName; + AssignFile(F3,filename); + Reset(F3); + Seek(F3,item-1); + Read(F3,R3); + found := true; + end; + CloseFile(F3); + Result := found; +end; +//------------------------------------------------------------------- + +function ReadTFItem(item : integer; VAR R5 : TFItemRcd) : boolean; +var + found : boolean; + F5 : File of TFItemRcd; + filename : string; + +begin + found := false; + if FileExists(TFFName) { *Converted from FileExists* } then // true-false items + begin + filename := TFFName; + AssignFile(F5,filename); + Reset(F5); + Seek(F5,item-1); + Read(F5,R5); + found := true; + end; + CloseFile(F5); + Result := found; +end; +//------------------------------------------------------------------- + +function ReadMAItem(item : integer; VAR R1 : MatchItemsRcd) : boolean; +var + found : boolean; + F1 : File of MatchItemsRcd; + filename : string; + +begin + found := false; + if FileExists(MatchFName) { *Converted from FileExists* } then // matching items + begin + filename := MatchFName; + AssignFile(F1,filename); + Reset(F1); + Seek(F1,item-1); + Read(F1,R1); + found := true; + end; + CloseFile(F1); + Result := found; +end; +//------------------------------------------------------------------- + +function ReadCOItem(item : integer; VAR R2 : BlankItemRcd) : boolean; +var + found : boolean; + F2 : File of BlankItemRcd; + filename : string; + +begin + found := false; + if FileExists(BlankFName) { *Converted from FileExists* } then // completion items + begin + filename := BlankFName; + AssignFile(F2,filename); + Reset(F2); + Seek(F2,item-1); + Read(F2,R2); + found := true; + end; + CloseFile(F2); + Result := found; +end; +//------------------------------------------------------------------- + +function ReadESItem(item : integer; VAR R4 : EssayItemRcd) : boolean; +var + found : boolean; + F4 : File of EssayItemRcd; + filename : string; + +begin + found := false; + if FileExists(EssayFName) { *Converted from FileExists* } then // essay items + begin + filename := EssayFName; + AssignFile(F4,filename); + Reset(F4); + Seek(F4,item-1); + Read(F4,R4); + found := true; + end; + CloseFile(F4); + Result := found; +end; +//------------------------------------------------------------------- + +procedure WriteMCItem(item : integer; VAR R3 : MCItemRcd); +var + F3 : File of MCItemRcd; + filename : string; +begin + if FileExists(MCFName) { *Converted from FileExists* } then // multiple choice items + begin + filename := MCFName; + AssignFile(F3,filename); + Reset(F3); + Seek(F3,item-1); + write(F3,R3); + end; + CloseFile(F3); +end; +//------------------------------------------------------------------- + +procedure WriteTFItem(item : integer; VAR R5 : TFItemRcd); +var + F5 : File of TFItemRcd; + filename : string; +begin + if FileExists(TFFName) { *Converted from FileExists* } then // true-false items + begin + filename := TFFName; + AssignFile(F5,filename); + Reset(F5); + Seek(F5,item-1); + write(F5,R5); + end; + CloseFile(F5); +end; +//------------------------------------------------------------------- + +procedure WriteMAItem(item : integer; VAR R1 : MatchItemsRcd); +var + F1 : File of MatchItemsRcd; + filename : string; +begin + if FileExists(MatchFName) { *Converted from FileExists* } then // matching items + begin + filename := MatchFName; + AssignFile(F1,filename); + Reset(F1); + Seek(F1,item-1); + write(F1,R1); + end; + CloseFile(F1); +end; +//------------------------------------------------------------------- + +procedure WriteCOItem(item : integer; VAR R2 : BlankItemRcd); +var + F2 : File of BlankItemRcd; + filename : string; +begin + if FileExists(BlankFName) { *Converted from FileExists* } then // completion items + begin + filename := BlankFName; + AssignFile(F2,filename); + Reset(F2); + Seek(F2,item-1); + write(F2,R2); + end; + CloseFile(F2); +end; +//------------------------------------------------------------------- + +procedure WriteESItem(item : integer; VAR R4 : EssayItemRcd); +var + F4 : File of EssayItemRcd; + filename : string; +begin + if FileExists(EssayFName) { *Converted from FileExists* } then // essay items + begin + filename := EssayFName; + AssignFile(F4,filename); + Reset(F4); + Seek(F4,item-1); + write(F4,R4); + end; + CloseFile(F4); +end; +//------------------------------------------------------------------- + +end. diff --git a/applications/lazstats/source_orig/freqspecsunit.lrs b/applications/lazstats/source_orig/freqspecsunit.lrs new file mode 100644 index 000000000..e7147f3b7 --- /dev/null +++ b/applications/lazstats/source_orig/freqspecsunit.lrs @@ -0,0 +1,36 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TFreqSpecsFrm','FORMDATA',[ + 'TPF0'#13'TFreqSpecsFrm'#12'FreqSpecsFrm'#4'Left'#3#25#1#6'Height'#3'f'#1#3'T' + +'op'#2'k'#5'Width'#3','#1#7'Caption'#6#24'Frequency Specifications'#12'Clien' + +'tHeight'#3'f'#1#11'ClientWidth'#3','#1#10'LCLVersion'#6#6'0.9.30'#0#6'TLabe' + +'l'#6'Label1'#4'Left'#2#11#6'Height'#2#16#3'Top'#2'w'#5'Width'#2'8'#7'Captio' + +'n'#6#9'VARIABLE:'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2#11#6 + +'Height'#2#16#3'Top'#3#151#0#5'Width'#2'.'#7'Caption'#6#6'MINIUM'#11'ParentC' + +'olor'#8#0#0#6'TLabel'#6'Label3'#4'Left'#2#11#6'Height'#2#16#3'Top'#3#183#0#5 + +'Width'#2'<'#7'Caption'#6#7'MAXIMUM'#11'ParentColor'#8#0#0#6'TLabel'#6'Label' + +'4'#4'Left'#2#11#6'Height'#2#16#3'Top'#3#215#0#5'Width'#2''''#7'Caption'#6#5 + +'RANGE'#11'ParentColor'#8#0#0#6'TLabel'#6'Label5'#4'Left'#2#11#6'Height'#2#16 + +#3'Top'#3#247#0#5'Width'#2'O'#7'Caption'#6#13'INTERVAL SIZE'#11'ParentColor' + +#8#0#0#6'TLabel'#6'Label6'#4'Left'#2#11#6'Height'#2#16#3'Top'#3#23#1#5'Width' + +#2'T'#7'Caption'#6#13'NO. INTERVALS'#11'ParentColor'#8#0#0#5'TEdit'#7'VarNam' + +'e'#4'Left'#2'p'#6'Height'#2#23#3'Top'#2'p'#5'Width'#3#169#0#8'TabOrder'#2#0 + +#0#0#5'TEdit'#7'Minimum'#4'Left'#2'p'#6'Height'#2#23#3'Top'#3#144#0#5'Width' + +#3#169#0#8'TabOrder'#2#1#0#0#5'TEdit'#7'Maximum'#4'Left'#2'p'#6'Height'#2#23 + +#3'Top'#3#176#0#5'Width'#3#169#0#8'TabOrder'#2#2#0#0#5'TEdit'#5'Range'#4'Lef' + +'t'#2'p'#6'Height'#2#23#3'Top'#3#208#0#5'Width'#3#169#0#8'TabOrder'#2#3#0#0#5 + +'TEdit'#7'IntSize'#4'Left'#2'p'#6'Height'#2#23#3'Top'#3#240#0#5'Width'#3#169 + +#0#10'OnKeyPress'#7#15'IntSizeKeyPress'#8'TabOrder'#2#4#0#0#5'TEdit'#6'NoInt' + +'s'#4'Left'#2'p'#6'Height'#2#23#3'Top'#3#16#1#5'Width'#3#169#0#8'TabOrder'#2 + +#5#0#0#7'TButton'#9'CancelBtn'#4'Left'#2'h'#6'Height'#2' '#3'Top'#3'7'#1#5'W' + +'idth'#2'Q'#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#6#0#0#7 + +'TButton'#5'OKBtn'#4'Left'#3#200#0#6'Height'#2#31#3'Top'#3'7'#1#5'Width'#2'Q' + +#7'Caption'#6#2'OK'#11'ModalResult'#2#1#8'TabOrder'#2#7#0#0#7'TButton'#7'Hel' + +'pBtn'#3'Tag'#2'{'#4'Left'#2#11#6'Height'#2' '#3'Top'#3'7'#1#5'Width'#2'R'#7 + +'Caption'#6#4'Help'#7'OnClick'#7#12'HelpBtnClick'#8'TabOrder'#2#8#0#0#5'TMem' + +'o'#5'Memo1'#4'Left'#2#7#6'Height'#2'W'#3'Top'#2#1#5'Width'#3#21#1#13'Lines.' + +'Strings'#1#6'-The number of intervals must be less than or '#6',equal to th' + +'e number of cases. To change the'#6'-number of intervals, change the inter' + +'val size'#6'/to a larger value. Press the Enter key to make'#6' the number' + +' of intervals smaller.'#0#8'TabOrder'#2#9#0#0#0 +]); diff --git a/applications/lazstats/source_orig/freqspecsunit.pas b/applications/lazstats/source_orig/freqspecsunit.pas new file mode 100644 index 000000000..6a8652076 --- /dev/null +++ b/applications/lazstats/source_orig/freqspecsunit.pas @@ -0,0 +1,67 @@ +unit FreqSpecsUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, contexthelpunit; + +type + + { TFreqSpecsFrm } + + TFreqSpecsFrm = class(TForm) + CancelBtn: TButton; + HelpBtn: TButton; + Memo1: TMemo; + OKBtn: TButton; + VarName: TEdit; + Minimum: TEdit; + Maximum: TEdit; + Range: TEdit; + IntSize: TEdit; + NoInts: TEdit; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + Label5: TLabel; + Label6: TLabel; + procedure HelpBtnClick(Sender: TObject); + procedure IntSizeKeyPress(Sender: TObject; var Key: char); + private + { private declarations } + public + { public declarations } + end; + +var + FreqSpecsFrm: TFreqSpecsFrm; + +implementation + +{ TFreqSpecsFrm } + +procedure TFreqSpecsFrm.IntSizeKeyPress(Sender: TObject; var Key: char); +var + rangeval : double; + increment : double; +begin + if ord(Key) <> 13 then exit; + rangeval := StrToFloat(Range.Text); + increment := StrToFloat(IntSize.Text); + NoInts.Text := FloatToStr(rangeval / increment); +end; + +procedure TFreqSpecsFrm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +initialization + {$I freqspecsunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/frequnit.lfm b/applications/lazstats/source_orig/frequnit.lfm new file mode 100644 index 000000000..fba4137fc --- /dev/null +++ b/applications/lazstats/source_orig/frequnit.lfm @@ -0,0 +1,235 @@ +object FreqFrm: TFreqFrm + Left = 154 + Height = 337 + Top = 92 + Width = 615 + Caption = 'Frequency Distribution' + ClientHeight = 337 + ClientWidth = 615 + OnShow = FormShow + LCLVersion = '0.9.30' + object Label1: TLabel + Left = 9 + Height = 16 + Top = 9 + Width = 121 + Caption = 'AVAILABLE VARIABLES' + ParentColor = False + end + object Label2: TLabel + Left = 208 + Height = 16 + Top = 9 + Width = 132 + Caption = 'VARIABLES TO ANALYZE' + ParentColor = False + end + object VarList: TListBox + Left = 8 + Height = 235 + Top = 23 + Width = 147 + ItemHeight = 0 + MultiSelect = True + TabOrder = 0 + end + object ListBox1: TListBox + Left = 208 + Height = 234 + Top = 25 + Width = 153 + ItemHeight = 0 + TabOrder = 1 + end + object InBtn: TBitBtn + Left = 168 + Height = 30 + Top = 24 + Width = 31 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = InBtnClick + TabOrder = 2 + end + object OutBtn: TBitBtn + Left = 168 + Height = 30 + Top = 72 + Width = 31 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = OutBtnClick + TabOrder = 3 + end + object AllBtn: TBitBtn + Left = 168 + Height = 30 + Top = 120 + Width = 31 + Caption = 'ALL' + NumGlyphs = 0 + OnClick = AllBtnClick + TabOrder = 4 + end + object NormPltChk: TCheckBox + Left = 400 + Height = 19 + Top = 232 + Width = 149 + Caption = 'Plot Normal Distribution' + TabOrder = 5 + end + object RadioGroup1: TRadioGroup + Left = 390 + Height = 219 + Top = 8 + Width = 208 + AutoFill = True + Caption = 'Plot Options' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 201 + ClientWidth = 204 + Items.Strings = ( + '2D Vertical Bars' + '3D Vertical Bars' + '2D Pie Chart' + 'Exploded Pie Chart' + '2D Line Chart' + '3D Line Chart' + 'Plot 2D Points' + 'Plot 3D Points' + '2D Horizontal Bars' + '3D Horizontal Bars' + ) + TabOrder = 6 + end + object RadioGroup2: TRadioGroup + Left = 392 + Height = 62 + Top = 264 + Width = 206 + AutoFill = True + Caption = 'Plot Type' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 44 + ClientWidth = 202 + Items.Strings = ( + 'Bar Chart' + 'Histogram' + ) + TabOrder = 7 + end + object ResetBtn: TButton + Left = 153 + Height = 24 + Top = 279 + Width = 71 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 8 + end + object CancelBtn: TButton + Left = 232 + Height = 24 + Top = 280 + Width = 71 + Caption = 'Cancel' + ModalResult = 2 + OnClick = CancelBtnClick + TabOrder = 9 + end + object OKBtn: TButton + Left = 312 + Height = 24 + Top = 279 + Width = 71 + Caption = 'OK' + ModalResult = 1 + OnClick = OKBtnClick + TabOrder = 10 + end +end diff --git a/applications/lazstats/source_orig/frequnit.lrs b/applications/lazstats/source_orig/frequnit.lrs new file mode 100644 index 000000000..cbdaacbca --- /dev/null +++ b/applications/lazstats/source_orig/frequnit.lrs @@ -0,0 +1,148 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TFreqFrm','FORMDATA',[ + 'TPF0'#8'TFreqFrm'#7'FreqFrm'#4'Left'#3#154#0#6'Height'#3'Q'#1#3'Top'#2'\'#5 + +'Width'#3'g'#2#7'Caption'#6#22'Frequency Distribution'#12'ClientHeight'#3'Q' + +#1#11'ClientWidth'#3'g'#2#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6#6'0.9.30' + +#0#6'TLabel'#6'Label1'#4'Left'#2#9#6'Height'#2#16#3'Top'#2#9#5'Width'#2'y'#7 + +'Caption'#6#19'AVAILABLE VARIABLES'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2' + +#4'Left'#3#208#0#6'Height'#2#16#3'Top'#2#9#5'Width'#3#132#0#7'Caption'#6#20 + +'VARIABLES TO ANALYZE'#11'ParentColor'#8#0#0#8'TListBox'#7'VarList'#4'Left'#2 + +#8#6'Height'#3#235#0#3'Top'#2#23#5'Width'#3#147#0#10'ItemHeight'#2#0#11'Mult' + +'iSelect'#9#8'TabOrder'#2#0#0#0#8'TListBox'#8'ListBox1'#4'Left'#3#208#0#6'He' + +'ight'#3#234#0#3'Top'#2#25#5'Width'#3#153#0#10'ItemHeight'#2#0#8'TabOrder'#2 + +#1#0#0#7'TBitBtn'#5'InBtn'#4'Left'#3#168#0#6'Height'#2#30#3'Top'#2#24#5'Widt' + +'h'#2#31#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0 + +#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0 + +#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247 + +'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm' + +#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A' + +#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I' + +#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215 + +#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139 + +#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v' + +#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255 + +#165#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159 + +#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197 + +#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h' + +#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b' + +#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U' + +#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B' + +#219#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I' + +#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#10 + +'InBtnClick'#8'TabOrder'#2#2#0#0#7'TBitBtn'#6'OutBtn'#4'Left'#3#168#0#6'Heig' + +'ht'#2#30#3'Top'#2'H'#5'Width'#2#31#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6' + +#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0 + ,'d'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169 + +'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{' + +#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255 + +'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0 + +#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255 + +#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137 + +#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255 + +#255#255#0#255#255#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158 + +#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255 + +#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255 + +'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139 + +#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255 + +'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195 + +'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't' + +#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'OutBtnClick'#8'TabOrder'#2#3#0#0 + +#7'TBitBtn'#6'AllBtn'#4'Left'#3#168#0#6'Height'#2#30#3'Top'#2'x'#5'Width'#2 + +#31#7'Caption'#6#3'ALL'#9'NumGlyphs'#2#0#7'OnClick'#7#11'AllBtnClick'#8'TabO' + +'rder'#2#4#0#0#9'TCheckBox'#10'NormPltChk'#4'Left'#3#144#1#6'Height'#2#19#3 + +'Top'#3#232#0#5'Width'#3#149#0#7'Caption'#6#24'Plot Normal Distribution'#8'T' + +'abOrder'#2#5#0#0#11'TRadioGroup'#11'RadioGroup1'#4'Left'#3#134#1#6'Height'#3 + +#219#0#3'Top'#2#8#5'Width'#3#208#0#8'AutoFill'#9#7'Caption'#6#12'Plot Option' + +'s'#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizing.TopBottomSpacing'#2#6 + +#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomogenousChildResize'#27'ChildSi' + +'zing.EnlargeVertical'#7#24'crsHomogenousChildResize'#28'ChildSizing.ShrinkH' + +'orizontal'#7#14'crsScaleChilds'#26'ChildSizing.ShrinkVertical'#7#14'crsScal' + +'eChilds'#18'ChildSizing.Layout'#7#29'cclLeftToRightThenTopToBottom'#27'Chil' + +'dSizing.ControlsPerLine'#2#1#12'ClientHeight'#3#201#0#11'ClientWidth'#3#204 + +#0#13'Items.Strings'#1#6#16'2D Vertical Bars'#6#16'3D Vertical Bars'#6#12'2D' + +' Pie Chart'#6#18'Exploded Pie Chart'#6#13'2D Line Chart'#6#13'3D Line Chart' + +#6#14'Plot 2D Points'#6#14'Plot 3D Points'#6#18'2D Horizontal Bars'#6#18'3D ' + ,'Horizontal Bars'#0#8'TabOrder'#2#6#0#0#11'TRadioGroup'#11'RadioGroup2'#4'Le' + +'ft'#3#136#1#6'Height'#2'>'#3'Top'#3#8#1#5'Width'#3#206#0#8'AutoFill'#9#7'Ca' + +'ption'#6#9'Plot Type'#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizing.T' + +'opBottomSpacing'#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomogenousCh' + +'ildResize'#27'ChildSizing.EnlargeVertical'#7#24'crsHomogenousChildResize'#28 + +'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChilds'#26'ChildSizing.ShrinkVer' + +'tical'#7#14'crsScaleChilds'#18'ChildSizing.Layout'#7#29'cclLeftToRightThenT' + +'opToBottom'#27'ChildSizing.ControlsPerLine'#2#1#12'ClientHeight'#2','#11'Cl' + +'ientWidth'#3#202#0#13'Items.Strings'#1#6#9'Bar Chart'#6#9'Histogram'#0#8'Ta' + +'bOrder'#2#7#0#0#7'TButton'#8'ResetBtn'#4'Left'#3#153#0#6'Height'#2#24#3'Top' + +#3#23#1#5'Width'#2'G'#7'Caption'#6#5'Reset'#7'OnClick'#7#13'ResetBtnClick'#8 + +'TabOrder'#2#8#0#0#7'TButton'#9'CancelBtn'#4'Left'#3#232#0#6'Height'#2#24#3 + +'Top'#3#24#1#5'Width'#2'G'#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#7'OnCl' + +'ick'#7#14'CancelBtnClick'#8'TabOrder'#2#9#0#0#7'TButton'#5'OKBtn'#4'Left'#3 + +'8'#1#6'Height'#2#24#3'Top'#3#23#1#5'Width'#2'G'#7'Caption'#6#2'OK'#11'Modal' + +'Result'#2#1#7'OnClick'#7#10'OKBtnClick'#8'TabOrder'#2#10#0#0#0 +]); diff --git a/applications/lazstats/source_orig/frequnit.pas b/applications/lazstats/source_orig/frequnit.pas new file mode 100644 index 000000000..141841aed --- /dev/null +++ b/applications/lazstats/source_orig/frequnit.pas @@ -0,0 +1,455 @@ +unit FreqUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, ExtCtrls, Globals, MainUnit, OutPutUnit, FunctionsLib, + GraphLib, DataProcs; + +type + + { TFreqFrm } + + TFreqFrm = class(TForm) + ResetBtn: TButton; + CancelBtn: TButton; + OKBtn: TButton; + NormPltChk: TCheckBox; + InBtn: TBitBtn; + OutBtn: TBitBtn; + AllBtn: TBitBtn; + Label1: TLabel; + Label2: TLabel; + ListBox1: TListBox; + RadioGroup1: TRadioGroup; + RadioGroup2: TRadioGroup; + VarList: TListBox; + procedure AllBtnClick(Sender: TObject); + procedure CancelBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure InBtnClick(Sender: TObject); + procedure OKBtnClick(Sender: TObject); + procedure OutBtnClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + FreqFrm: TFreqFrm; + +implementation + +{ TFreqFrm } +uses FreqSpecsUnit; + +procedure TFreqFrm.ResetBtnClick(Sender: TObject); +var + i : integer; + +begin + VarList.Clear; + ListBox1.Clear; + for i := 1 to NoVariables do + begin + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); + end; + RadioGroup2.ItemIndex := -1; + InBtn.Enabled := true; + OutBtn.Enabled := false; + RadioGroup1.ItemIndex := -1; + NormPltChk.Checked := false; +end; + +procedure TFreqFrm.CancelBtnClick(Sender: TObject); +begin + FreqFrm.Hide; +end; + +procedure TFreqFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TFreqFrm.AllBtnClick(Sender: TObject); +var + count, index : integer; + +begin + count := VarList.Items.Count; + for index := 0 to count-1 do + begin + ListBox1.Items.Add(VarList.Items.Strings[index]); + end; + VarList.Clear; +end; + +procedure TFreqFrm.InBtnClick(Sender: TObject); +var + index, i : integer; + +begin + index := VarList.Items.Count; + i := 0; + while i < index do + begin + if (VarList.Selected[i]) then + begin + ListBox1.Items.Add(VarList.Items.Strings[i]); + VarList.Items.Delete(i); + index := index - 1; + i := 0; + end + else i := i + 1; + end; + OutBtn.Enabled := true; +end; + +procedure TFreqFrm.OKBtnClick(Sender: TObject); +label again, cleanup; + +var + i, j, k : integer; + freq : DblDyneVec; + pcnt : DblDyneVec; + cumpcnt : DblDyneVec; + pcntilerank : DblDyneVec; + cumfreq : DblDyneVec; + XValue : DblDyneVec; + value : double; + NoVars : integer; + plottype : integer; + cellval : string; + col : integer; + min, max : double; + range : double; + incrsize : double; + nointervals : double; + nints : integer; + outline : string; +// ColNoSelected : IntDyneVec; + NoSelected : integer; + NormDist : boolean; + Histogram : boolean; + Sumx, Sumx2, Mean, Variance, StdDev, zlow, zhi : double; + X, zproplow, zprophi, zfreq : double; + Ncases : integer; + +begin + if RadioGroup2.ItemIndex = 1 then Histogram := true else Histogram := false; + if NormPltChk.Checked = true then NormDist := true else NormDist := false; + SetLength(freq,NoCases); + SetLength(pcnt,NoCases); + SetLength(cumpcnt,NoCases); + SetLength(pcntilerank,NoCases); + SetLength(cumfreq,NoCases); + SetLength(XValue,NoCases); + + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('FREQUENCY ANALYSIS BY BILL MILLER'); + OutPutFrm.RichEdit.Lines.Add(''); +// OutPutFrm.RichEdit.ParaGraph.Alignment := taLeftJustify; + + { Analyze each variable } + NoVars := ListBox1.Items.Count; + for i := 1 to NoVars do + begin + { get column no. of variable } + col := 1; + cellval := ListBox1.Items.Strings[i-1]; + for j := 1 to NoVariables do + begin + if OS3MainFrm.DataGrid.Cells[j,0] = cellval then + begin + col := j; + outline := format('Frequency Analysis for %s',[cellval]); + OutPutFrm.RichEdit.Lines.Add(outline); + break; + end; + end; + NoSelected := 1; + + { get min and max values for variable in col } + min := 1.0e32; + max := -1.0e32; + for j := 1 to NoCases do + begin + if Not ValidValue(j,col) then continue; + value := StrToFloat(OS3MainFrm.DataGrid.Cells[col,j]); + if value > max then max := value; + if value < min then min := value; + end; + range := max - min + 1.0; + incrsize := 1.0; + { if too many increments, set increment size for 15 increments } + if range > 200.0 then incrsize := range / 15; + nointervals := range / incrsize; + nints := round(nointervals); + { Get user's approval and / or changes } + FreqSpecsFrm.VarName.Text := cellval; + FreqSpecsFrm.Minimum.Text := FloatToStr(min); + FreqSpecsFrm.Maximum.Text := FloatToStr(max); + FreqSpecsFrm.range.Text := FloatToStr(range); + FreqSpecsFrm.IntSize.Text := FloatToStr(incrsize); + FreqSpecsFrm.NoInts.Text := IntToStr(nints); +again: FreqSpecsFrm.ShowModal; + incrsize := StrToFloat(FreqSpecsFrm.IntSize.Text); + nointervals := StrToFloat(FreqSpecsFrm.NoInts.Text); + nints := round(nointervals); + if nints+1 > NoCases then + begin + ShowMessage('ERROR! No. of intervals cannot be greater than no. of cases!'); + goto again; + end; + if nints > 200 then + begin + nints := 200; + // Application.MessageBox('Max. increments set to 200','Exceeded Maximum!',MB_OK); + end; + {Now, get frequency of cases in each interval } + for j := 1 to nints+1 do freq[j-1] := 0; + Ncases := 0; + for j := 1 to NoCases do + begin + if Not ValidValue(j,col) then continue; + Ncases := Ncases + 1; + value := StrToFloat(OS3MainFrm.DataGrid.Cells[col,j]); + for k := 1 to nints do + begin + if (value >= min + ((k-1) * incrsize)) and + (value < min + (k * incrsize)) then freq[k-1] := freq[k-1] + 1; + end; + end; + for j := 1 to nints+1 do XValue[j-1] := min + (j-1) * incrsize; + + { get cumulative frequencies and percents to midpoints } + cumfreq[0] := freq[0]; + pcnt[0] := freq[0] / Ncases; + cumpcnt[0] := cumfreq[0] / Ncases; + pcntilerank[0] := (freq[0] / 2.0) / Ncases; + for k := 2 to nints do + begin + cumfreq[k-1] := cumfreq[k-2] + freq[k-1]; + pcnt[k-1] := freq[k-1] / Ncases; + cumpcnt[k-1] := cumfreq[k-1] / Ncases; + pcntilerank[k-1] := (cumfreq[k-2] + freq[k-1] / 2.0) / Ncases; + end; + { Now, print results } + OutPutFrm.RichEdit.Lines.Add(' FROM TO FREQ. PCNT CUM.FREQ. CUM.PCNT. %ILE RANK'); + OutPutFrm.RichEdit.Lines.Add(''); + for k := 1 to nints do + begin + outline := format('%8.2f%8.2f%8.0f%8.2f %8.2f %8.2f %8.2f', + [min+(k-1)*incrsize, // from + min+k*incrsize, // to + freq[k-1], // freq + pcnt[k-1], // pcnt + cumfreq[k-1], // cum.freq. + cumpcnt[k-1], // cum.pcnt. + pcntilerank[k-1]]); // %ile rank + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + { Now, plot values as indicated in options list } + plottype := RadioGroup1.ItemIndex + 1; + if Histogram = true then GraphFrm.barwideprop := 1.0 else + GraphFrm.barwideprop := 0.5; + if NormDist = true then GraphFrm.nosets := 2 else GraphFrm.nosets := 1; + GraphFrm.nbars := nints+1; + GraphFrm.Heading := cellval; + GraphFrm.XTitle := 'Lower Limit Values'; + GraphFrm.YTitle := 'Frequency'; + if NormDist = false then + SetLength(GraphFrm.Ypoints,1,nints+1) + else SetLength(GraphFrm.Ypoints,2,nints+1); + SetLength(GraphFrm.Xpoints,1,nints+1); + for k := 1 to nints+1 do + begin + GraphFrm.Ypoints[0,k-1] := freq[k-1]; + GraphFrm.Xpoints[0,k-1] := XValue[k-1]; + end; + // Create ND plot if checked + if NormDist = true then + begin + OutPutFrm.RichEdit.Lines.Add('Interval ND Freq.'); + // Only use 3Dvertical plots when normal curve desired + RadioGroup1.ItemIndex := 3; + // get mean and standard deviation of xvalues, then height of + // the normal curve for each Normally distributed corresponding + // z score + sumx := 0.0; + sumx2 := 0.0; + for k := 1 to nints do + begin + sumx := sumx + (XValue[k-1] * freq[k-1]); + sumx2 := sumx2 + ((XValue[k-1] * XValue[k-1]) * freq[k-1]); + end; + Mean := sumx / Ncases; + Variance := sumx2 - ((sumx * sumx) / Ncases); + Variance := Variance / (Ncases - 1); + StdDev := sqrt(Variance); + for k := 1 to nints+1 do + begin + X := XValue[k-1] - (incrsize / 2.0); + if StdDev > 0.0 then zlow := (X - Mean) / StdDev + else zlow := 0.0; + X := XValue[k-1] + (incrsize / 2.0); + if StdDev > 0.0 then zhi := (X - Mean) / StdDev + else zhi := 0.0; + // get cum. prop. for this z and translate to frequency + zproplow := probz(zlow); + zprophi := probz(zhi); + zfreq := NoCases * abs(zprophi - zproplow); + GraphFrm.Ypoints[1,k-1] := zfreq; + outline := format(' %2d %6.2f',[k,GraphFrm.Ypoints[1,k-1]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + if plottype = 1 then + begin + GraphFrm.AutoScale := true; + GraphFrm.GraphType := plottype; // 2d Vertical Bar Chart + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + end; + if plottype = 2 then // 3D vertical bars + begin + { enter parameters for 2 dimension bars in graph package } + GraphFrm.GraphType := plottype; // 3d vertical bars + GraphFrm.AutoScale := true; + GraphFrm.ShowLeftWall := true; + GraphFrm.ShowRightWall := true; + GraphFrm.ShowBottomWall := true; + GraphFrm.ShowBackWall := true; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.ShowModal; + end; + if plottype = 3 then + begin + GraphFrm.AutoScale := true; + GraphFrm.GraphType := plottype; // 2d pie chart + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + end; + if plottype = 4 then + begin + GraphFrm.AutoScale := true; + GraphFrm.GraphType := plottype; // 3d pie chart + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.ShowLeftWall := true; + GraphFrm.ShowRightWall := true; + GraphFrm.ShowBottomWall := true; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + end; + if plottype = 5 then // 2D Line Graph + begin + GraphFrm.AutoScale := true; + GraphFrm.GraphType := plottype; // 2d Lines + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + end; + if plottype = 6 then // 3D Line Chart + begin + GraphFrm.AutoScale := true; + GraphFrm.GraphType := plottype; // 3d Lines + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.ShowLeftWall := true; + GraphFrm.ShowRightWall := true; + GraphFrm.ShowBottomWall := true; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + end; + if plottype = 7 then + begin + GraphFrm.AutoScale := true; + GraphFrm.GraphType := plottype; // 2D Plot + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + end; + if plottype = 8 then + begin + GraphFrm.AutoScale := true; + GraphFrm.GraphType := plottype; // 3D Plot + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.ShowLeftWall := true; + GraphFrm.ShowRightWall := true; + GraphFrm.ShowBottomWall := true; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + end; + if plottype = 9 then + begin + GraphFrm.AutoScale := true; + GraphFrm.GraphType := plottype; // 2d Horizontal Bar Chart + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + end; + if plottype = 10 then + begin + GraphFrm.AutoScale := true; + GraphFrm.GraphType := plottype; // 3d Horizontal Bar Chart + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.ShowLeftWall := true; + GraphFrm.ShowRightWall := true; + GraphFrm.ShowBottomWall := true; + GraphFrm.FloorColor := clLtGray; + GraphFrm.ShowBackWall := true; + GraphFrm.ShowModal; + end; + GraphFrm.Xpoints := nil; + GraphFrm.Ypoints := nil; + end; // for novars list + +cleanup: + XValue := nil; + cumfreq := nil; + pcntilerank := nil; + cumpcnt := nil; + pcnt := nil; + freq := nil; + FreqFrm.Hide; +end; + +procedure TFreqFrm.OutBtnClick(Sender: TObject); +var + index: integer; + +begin + index := ListBox1.ItemIndex; + VarList.Items.Add(ListBox1.Items.Strings[index]); + ListBox1.Items.Delete(index); + InBtn.Enabled := true; + if ListBox1.Items.Count = 0 then OutBtn.Enabled := false; +end; + +initialization + {$I frequnit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/frmmain.lfm b/applications/lazstats/source_orig/frmmain.lfm new file mode 100644 index 000000000..207bc4c6b --- /dev/null +++ b/applications/lazstats/source_orig/frmmain.lfm @@ -0,0 +1,919 @@ +object PicViewFrm: TPicViewFrm + Left = 0 + Height = 0 + Top = 716 + Width = 0 + HorzScrollBar.Page = 871 + HorzScrollBar.Range = 165 + VertScrollBar.Page = 615 + VertScrollBar.Range = 23 + ActiveControl = LBFiles + Caption = 'Image viewer' + ClientHeight = 0 + ClientWidth = 0 + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Menu = MainMenu1 + OnKeyDown = FormKeyDown + OnShow = FormShow + LCLVersion = '0.9.28.2' + object SPImage: TSplitter + Left = 161 + Height = 0 + Top = 23 + Width = 4 + Beveled = True + end + object ToolBar1: TToolBar + Left = 0 + Height = 29 + Top = 0 + Width = 165 + ButtonHeight = 23 + Caption = 'ToolBar1' + Images = ILMain + ParentShowHint = False + ShowHint = True + TabOrder = 0 + object TBOPen: TToolButton + Left = 1 + Top = 2 + Action = AOpen + end + object TBOpenDir: TToolButton + Left = 24 + Top = 2 + Action = AOpenDir + end + object TBOpenDirRec: TToolButton + Left = 47 + Top = 2 + Action = OpenDirRecursively + end + object ToolButton4: TToolButton + Left = 70 + Top = 2 + Width = 8 + Caption = 'ToolButton4' + ImageIndex = 3 + Style = tbsSeparator + end + object TBPRev: TToolButton + Left = 78 + Top = 2 + Action = APreviousImage + end + object TBNext: TToolButton + Left = 101 + Top = 2 + Action = ANextImage + end + object TBPRevDir: TToolButton + Left = 124 + Top = 2 + Action = APrevImageDir + end + object TBNextDir: TToolButton + Left = 1 + Top = 25 + Action = ANextImageDir + end + object TBDoubleSize: TToolButton + Left = 24 + Top = 25 + Action = ADoubleSize + end + object TBHalfSize: TToolButton + Left = 47 + Top = 25 + Action = AHalfSize + end + object ToolButton3: TToolButton + Left = 70 + Top = 25 + Width = 8 + Caption = 'ToolButton3' + ImageIndex = 10 + Style = tbsSeparator + end + end + object LBFiles: TListBox + Left = 0 + Height = 0 + Top = 23 + Width = 161 + Align = alLeft + ClickOnSelChange = False + Font.Color = clBlack + Font.Height = 15 + Font.Name = 'Arial' + Font.Pitch = fpVariable + ItemHeight = 0 + OnClick = LBFilesClick + OnKeyDown = FormKeyDown + ParentFont = False + TabOrder = 1 + end + object PImage: TPanel + Left = 165 + Height = 0 + Top = 23 + Width = 0 + Align = alClient + ClientHeight = 0 + ClientWidth = 0 + FullRepaint = False + TabOrder = 2 + object ScrollBox1: TScrollBox + Left = 0 + Height = 0 + Top = 0 + Width = 0 + Align = alClient + BorderStyle = bsNone + ClientHeight = 0 + ClientWidth = 0 + TabOrder = 0 + object IMain: TImage + Left = 0 + Height = 0 + Top = 0 + Width = 0 + Align = alClient + Transparent = True + end + end + end + object MainMenu1: TMainMenu + Images = ILMain + left = 32 + top = 32 + object File1: TMenuItem + Caption = '&File' + object MIOpen: TMenuItem + Action = AOpen + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF292429FF4A48 + 4AFF524C52FF4A4C4AFF524C52FF4A4C4AFF524C52FF4A484AFF4A444AFF4140 + 41FF393439FF202020FF808080FF808080FF808080FF808080FF18304AFFC5BE + C5FFA4A5A4FFACAEACFFACAEACFFB4B2B4FFACAAACFFACAAACFF9C999CFF9495 + 9CFF8B8D8BFF4A484AFF808080FF808080FF808080FF808080FF203452FF5255 + 5AFFD5D2D5FFBDBEC5FFCDC6CDFFCDC6CDFFCDC6CDFFC5C2C5FFB4B2B4FFA4A5 + ACFFA4A1A4FF737173FF181418FF808080FF808080FF808080FF18304AFF1830 + 4AFFCDCECDFFCDCECDFFD5D6D5FFDED6DEFFD5D2D5FFD5CED5FFBDBABDFFB4B2 + B4FFA4A1A4FF9C959CFF4A484AFF808080FF808080FF808080FF203452FF417D + BDFF52555AFFDEDADEFFE6DEE6FFE6E2E6FFE6E2E6FFDED6DEFFC5C6C5FFB4B6 + BDFFACAEB4FFA4A1A4FF6A696AFF202020FF808080FF808080FF18304AFF83C6 + FFFF18304AFF808080FFDEDEE6FFEEEAEEFFE6E6E6FFE6E2E6FFC5C6CDFFBDBE + BDFFACAEACFFA4A1A4FF949594FF4A484AFF808080FF808080FF203452FF83C2 + FFFF5289CDFF4A5052FFFFFAFFFFFFF6FFFFF6EEF6FFE6E6E6FFDED6DEFFCDCE + CDFFCDC6CDFFBDBEBDFFBDBABDFFB4B6B4FF313031FF808080FF18304AFF9CD6 + FFFF8BC6FFFF83C6FFFF62AEFFFF62AEFFFF62AEFFFF62AEFFFF62AEFFFF62AE + FFFF62AEFFFF000000FF808080FF808080FF808080FF808080FF203452FF6AA5 + E6FFA4D6FFFF8BC6FFFF6AAAEEFF183452FF203452FF183452FF203452FF1834 + 52FF203452FF808080FF808080FF808080FF808080FF808080FF808080FF2034 + 52FF18304AFF183452FF18304AFF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF0000 + 00FF000000FF000000FF000000FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FF000000FF000000FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF000000FF808080FF808080FF808080FF808080FF0000 + 00FF000000FF000000FF000000FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF000000FF000000FF808080FF000000FF0000 + 00FF000000FF808080FF000000FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF000000FF000000FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF + } + OnClick = AOpenExecute + end + object MIOPenDir: TMenuItem + Action = AOpenDir + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF808080FF808080FF808080FF8080 + 80FF000000FF808080FF00FFFFFF808080FF00FFFFFF808080FF00FFFFFF8080 + 80FF00FFFFFF808080FF00FFFFFF000000FF808080FF808080FF808080FF8080 + 80FF000000FF00FFFFFF808080FF00FFFFFF830000FF00FFFFFF830000FF00FF + FFFF830000FF00FFFFFF808080FF000000FF808080FF808080FF808080FF8080 + 80FF000000FF808080FF00FFFFFF808080FF00FFFFFF830000FF830000FF8300 + 00FF00FFFFFF808080FF00FFFFFF000000FF808080FF808080FF808080FF8080 + 80FF000000FF00FFFFFF808080FF00FFFFFF830000FF830000FF00FFFFFF8300 + 00FF830000FF00FFFFFF808080FF000000FF808080FF808080FF808080FF8080 + 80FF000000FF808080FF00FFFFFF808080FF00FFFFFF830000FF830000FF8300 + 00FF00FFFFFF808080FF00FFFFFF000000FF808080FF808080FF808080FF8080 + 80FF000000FF00FFFFFF808080FF00FFFFFF830000FF00FFFFFF830000FF00FF + FFFF830000FF00FFFFFF808080FF000000FF808080FF808080FF808080FF8080 + 80FF000000FF808080FF00FFFFFF808080FF00FFFFFF808080FF00FFFFFF8080 + 80FF00FFFFFF808080FF00FFFFFF000000FF808080FF808080FF808080FF8080 + 80FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF00FFFFFF808080FF00FFFFFF808080FF000000FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF000000FF000000FF000000FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF + } + OnClick = AOpenDirExecute + end + object MIOpenDirRec: TMenuItem + Action = OpenDirRecursively + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000808080FF8385 + 83FF000808FF808080FF000000FF101010FF000000FF000408FF000000FF0004 + 08FF000000FF808080FF808080FF808080FF808080FF808080FF808080FF8B89 + 8BFF808080FFCDBEC5FFDECED5FFC5B2B4FFE6D2DEFFCDC6CDFFC5C2C5FFC5C6 + C5FF000000FF808080FF808080FF808080FF808080FF808080FF808080FF948D + 8BFFFFFAFFFFD5C6CDFFDECACDFFE6CED5FFD5BEBDFFD5C6CDFFCDC6C5FFDED2 + D5FF080000FF808080FF808080FF808080FF808080FF808080FF808080FF7B7D + 7BFF808080FFCDCECDFFD5CED5FFC5BABDFFDECED5FFDEC6CDFFE6CED5FFD5BE + C5FF100000FF080000FF201010FF808080FF808080FF808080FF808080FF838D + 8BFF808080FFC5C6C5FFC5CACDFFCDCACDFFCDCACDFFD5C2C5FFDECACDFFD5C2 + C5FF080000FFE6DADEFF000000FF808080FF808080FF808080FF808080FF7B85 + 83FF808080FFC5C6C5FFCDD2D5FFCDCECDFFCDC6CDFFCDCACDFFC5C2C5FFC5CA + C5FF000400FFB4BEBDFF000800FF808080FF808080FF808080FF808080FF8B89 + 8BFFFFFAFFFF808080FF808080FF808080FF808080FFFFFAFFFF808080FFFFFA + FFFF000000FFC5CECDFF000000FF000400FF000000FF808080FF808080FF9C81 + 83FF18008BFF10008BFF1800D5FF1000CDFF1800FFFF1000FFFF1800FFFF1000 + FFFF200808FFD5C6CDFF080000FFCDCACDFF000400FF808080FF808080FF9C81 + 83FF948983FF9C898BFF948983FF9C898BFF948983FF9C898BFF948983FF9C89 + 8BFF200000FFF6CED5FF100000FFD5CACDFF000000FF808080FF808080FF8080 + 80FF808080FFAC7D83FFFFFAFFFFFFF2FFFFFFFAFFFFFFF6FFFFFFFAFFFFFFFA + FFFF808080FFFFF2F6FF200000FFDEC2C5FF100008FF808080FF808080FF8080 + 80FF808080FFAC8D94FF10008BFF18008BFF1000CDFF1000D5FF1000FFFF1800 + FFFF1000FFFF1000FFFF180000FFD5C2C5FF080000FF808080FF808080FF8080 + 80FF808080FF83797BFF948183FF9C858BFF9C858BFF948983FF9C898BFF9485 + 83FF94898BFF837D7BFF080400FFDED6D5FF000400FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF94898BFFFFFAFFFF808080FF808080FFFFFA + F6FF808080FF808080FFFFFAF6FF808080FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF9C898BFF18008BFF10008BFF1800D5FF1000 + CDFF1800FFFF1000FFFF1800FFFF1000FFFF180000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF947D83FF9C8183FF9C898BFF948983FF9C89 + 8BFF948983FF9C898BFF948983FF9C898BFF100000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF + } + OnClick = OpenDirRecursivelyExecute + end + object MIClear: TMenuItem + Action = AClear + OnClick = AClearExecute + end + object N1: TMenuItem + Caption = '-' + end + object MIQuit: TMenuItem + Action = AExit + OnClick = AExitExecute + end + end + object MImage: TMenuItem + Caption = '&Image' + object D1: TMenuItem + Action = ADoubleSize + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF000000FF000000FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF000000FF000000FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF000000FF000000FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FF000000FF000000FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF838183FF000000FF000000FF000000FF838183FF808080FF00FF + FFFF838183FF000000FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FF838183FF837D83FF838183FF7B7D7BFF838183FF000000FF0000 + 00FF00FFFFFF808080FF808080FF808080FF808080FF808080FF808080FF0000 + 00FF838183FF808080FFC5C2C5FF808080FFC5C2C5FF808080FF838183FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF7B7D7BFF8381 + 83FF808080FFC5C2C5FF808080FF0000FFFF808080FFC5C2C5FF808080FF8381 + 83FF837D83FF808080FF808080FF808080FF808080FF808080FF000000FF8381 + 83FFC5C2C5FF808080FFC5C2C5FF0000FFFFC5C2C5FF808080FFC5C2C5FF8381 + 83FF000000FF808080FF808080FF808080FF808080FF808080FF000000FF8381 + 83FF808080FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF808080FF8381 + 83FF000000FF808080FF808080FF808080FF808080FF808080FF000000FF8381 + 83FFC5C2C5FF808080FFC5C2C5FF0000FFFFC5C2C5FF808080FFC5C2C5FF8381 + 83FF000000FF808080FF808080FF808080FF808080FF808080FF7B7D7BFF8381 + 83FF808080FFC5C2C5FF808080FF0000FFFF808080FFC5C2C5FF808080FF8381 + 83FF837D83FF808080FF808080FF808080FF808080FF808080FF808080FF0000 + 00FF838183FF808080FFC5C2C5FF808080FFC5C2C5FF808080FF838183FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FF838183FF837D83FF838183FF7B7D7BFF838183FF000000FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF838183FF000000FF000000FF000000FF838183FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF + } + OnClick = ADoubleSizeExecute + end + object MIHalfSize: TMenuItem + Action = AHalfSize + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF000000FF000000FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF000000FF000000FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF000000FF000000FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FF000000FF000000FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF838183FF000000FF000000FF000000FF838183FF808080FF00FF + FFFF838183FF000000FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FF838183FF837D83FF838183FF7B7D7BFF838183FF000000FF0000 + 00FF00FFFFFF808080FF808080FF808080FF808080FF808080FF808080FF0000 + 00FF838183FFC5C2C5FF808080FFC5C2C5FF808080FFC5C2C5FF838183FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF7B7D7BFF8381 + 83FFC5BEC5FF808080FFBDBEBDFF808080FFC5BEC5FF808080FFBDBEBDFF8381 + 83FF837D83FF808080FF808080FF808080FF808080FF808080FF000000FF8381 + 83FF808080FFC5C2C5FF808080FFC5C2C5FF808080FFC5C2C5FF808080FF8381 + 83FF000000FF808080FF808080FF808080FF808080FF808080FF000000FF8381 + 83FFBDBEBDFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFFC5BEC5FF8381 + 83FF000000FF808080FF808080FF808080FF808080FF808080FF000000FF8381 + 83FF808080FFC5C2C5FF808080FFC5C2C5FF808080FFC5C2C5FF808080FF8381 + 83FF000000FF808080FF808080FF808080FF808080FF808080FF7B7D7BFF8381 + 83FFC5BEC5FF808080FFBDBEBDFF808080FFC5BEC5FF808080FFBDBEBDFF8381 + 83FF837D83FF808080FF808080FF808080FF808080FF808080FF808080FF0000 + 00FF838183FFC5C2C5FF808080FFC5C2C5FF808080FFC5C2C5FF838183FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FF838183FF837D83FF838183FF7B7D7BFF838183FF000000FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF838183FF000000FF000000FF000000FF838183FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF + } + OnClick = AHalfSizeExecute + end + object N2: TMenuItem + Caption = '-' + end + object MINextImage: TMenuItem + Action = ANextImage + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF0000FFFF000000FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF0000FFFF0000FFFF0000 + FFFF000000FF000000FF808080FF808080FF808080FF808080FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF0000FFFF0000FFFF0000 + FFFF0000FFFF0000FFFF000000FF000000FF808080FF808080FF000000FF0000 + FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 + FFFF0000FFFF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF0000FFFF0000FFFF0000 + FFFF0000FFFF0000FFFF000000FF000000FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF0000FFFF0000FFFF0000 + FFFF000000FF000000FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF0000FFFF000000FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF + } + ShortCut = 36882 + OnClick = ANextImageExecute + end + object PreviousImage1: TMenuItem + Action = APreviousImage + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF000000FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF000000FF0000FFFF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF000000FF000000FF0000FFFF0000FFFF0000FFFF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FF000000FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 + FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF000000FF808080FF8080 + 80FF000000FF000000FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF808080FF8080 + 80FF808080FF808080FF000000FF000000FF0000FFFF0000FFFF0000FFFF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF000000FF0000FFFF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF000000FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF + } + ShortCut = 36884 + OnClick = APreviousImageExecute + end + object Nextimagedirectory1: TMenuItem + Action = ANextImageDir + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF808080FFFFFF00FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF838183FF838183FF838183FF838183FF838183FF838183FF8381 + 83FF838183FF838183FF838183FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF7B7D7BFF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF838183FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF000000FF000000FF808080FF000000FF8080 + 80FF808080FF808080FF837D83FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF000000FF000000FF808080FF000000FF0000 + 00FF808080FF808080FF838183FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF000000FF000000FF808080FF000000FF0000 + 00FF000000FF808080FF7B7D7BFF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF000000FF000000FF808080FF000000FF0000 + 00FF808080FF808080FF838183FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF000000FF000000FF808080FF000000FF8080 + 80FF808080FF808080FF837D83FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF838183FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF7B7D7BFF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FFFFFF00FF808080FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF808080FF + } + OnClick = ANextImageDirExecute + end + object Previousimagedirectory1: TMenuItem + Action = APrevImageDir + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF808080FFFFFF00FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF838183FF838183FF838183FF838183FF838183FF838183FF8381 + 83FF838183FF838183FF838183FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF7B7D7BFF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF838183FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF808080FF000000FF808080FF000000FF0000 + 00FF808080FF808080FF837D83FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF000000FF000000FF808080FF000000FF0000 + 00FF808080FF808080FF838183FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF000000FF000000FF000000FF808080FF000000FF0000 + 00FF808080FF808080FF7B7D7BFF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF000000FF000000FF808080FF000000FF0000 + 00FF808080FF808080FF838183FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF808080FF000000FF808080FF000000FF0000 + 00FF808080FF808080FF837D83FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF838183FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF7B7D7BFF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FFFFFF00FF808080FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF808080FF + } + OnClick = APrevImageDirExecute + end + end + end + object ActionList1: TActionList + Images = ILMain + left = 72 + top = 32 + object AOpen: TAction + Caption = '&Open' + HelpType = htKeyword + ImageIndex = 0 + OnExecute = AOpenExecute + ShortCut = 16463 + end + object AOpenDir: TAction + Caption = 'Open &Directory' + HelpType = htKeyword + ImageIndex = 1 + OnExecute = AOpenDirExecute + ShortCut = 16452 + end + object AExit: TAction + Caption = '&Quit' + HelpType = htKeyword + OnExecute = AExitExecute + ShortCut = 16465 + end + object AClear: TAction + Caption = '&Clear list' + HelpType = htKeyword + OnExecute = AClearExecute + ShortCut = 16460 + end + object OpenDirRecursively: TAction + Caption = 'Open Directory &Recursively' + HelpType = htKeyword + ImageIndex = 2 + OnExecute = OpenDirRecursivelyExecute + ShortCut = 16466 + end + object ADoubleSize: TAction + Caption = '&Double size' + HelpType = htKeyword + ImageIndex = 5 + OnExecute = ADoubleSizeExecute + ShortCut = 16427 + end + object AHalfSize: TAction + Caption = '&Half Size' + HelpType = htKeyword + ImageIndex = 6 + OnExecute = AHalfSizeExecute + ShortCut = 16429 + end + object ANextImage: TAction + Caption = '&Next image' + HelpType = htKeyword + ImageIndex = 4 + OnExecute = ANextImageExecute + end + object APreviousImage: TAction + Caption = '&Previous Image' + HelpType = htKeyword + ImageIndex = 3 + OnExecute = APreviousImageExecute + end + object ANextImageDir: TAction + Caption = 'N&ext image directory' + HelpType = htKeyword + ImageIndex = 8 + OnExecute = ANextImageDirExecute + ShortCut = 32846 + end + object APrevImageDir: TAction + Caption = 'Pre&vious image directory' + HelpType = htKeyword + Hint = 'Jump to last image of previous directory' + ImageIndex = 7 + OnExecute = APrevImageDirExecute + ShortCut = 32848 + end + end + object ILMain: TImageList + left = 32 + top = 64 + Bitmap = { + 4C69090000001000000010000000808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF000000FF000000FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FF000000FF808080FF000000FF000000FF000000FF808080FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF0000 + 00FF808080FF808080FF808080FF808080FF000000FF000000FF000000FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF000000FF000000FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF000000FF000000FF0000 + 00FF808080FF808080FF808080FF808080FF203452FF18304AFF183452FF1830 + 4AFF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF203452FF6AA5E6FFA4D6FFFF8BC6FFFF6AAA + EEFF183452FF203452FF183452FF203452FF183452FF203452FF808080FF8080 + 80FF808080FF808080FF808080FF18304AFF9CD6FFFF8BC6FFFF83C6FFFF62AE + FFFF62AEFFFF62AEFFFF62AEFFFF62AEFFFF62AEFFFF62AEFFFF000000FF8080 + 80FF808080FF808080FF808080FF203452FF83C2FFFF5289CDFF4A5052FFFFFA + FFFFFFF6FFFFF6EEF6FFE6E6E6FFDED6DEFFCDCECDFFCDC6CDFFBDBEBDFFBDBA + BDFFB4B6B4FF313031FF808080FF18304AFF83C6FFFF18304AFF808080FFDEDE + E6FFEEEAEEFFE6E6E6FFE6E2E6FFC5C6CDFFBDBEBDFFACAEACFFA4A1A4FF9495 + 94FF4A484AFF808080FF808080FF203452FF417DBDFF52555AFFDEDADEFFE6DE + E6FFE6E2E6FFE6E2E6FFDED6DEFFC5C6C5FFB4B6BDFFACAEB4FFA4A1A4FF6A69 + 6AFF202020FF808080FF808080FF18304AFF18304AFFCDCECDFFCDCECDFFD5D6 + D5FFDED6DEFFD5D2D5FFD5CED5FFBDBABDFFB4B2B4FFA4A1A4FF9C959CFF4A48 + 4AFF808080FF808080FF808080FF203452FF52555AFFD5D2D5FFBDBEC5FFCDC6 + CDFFCDC6CDFFCDC6CDFFC5C2C5FFB4B2B4FFA4A5ACFFA4A1A4FF737173FF1814 + 18FF808080FF808080FF808080FF18304AFFC5BEC5FFA4A5A4FFACAEACFFACAE + ACFFB4B2B4FFACAAACFFACAAACFF9C999CFF94959CFF8B8D8BFF4A484AFF8080 + 80FF808080FF808080FF808080FF292429FF4A484AFF524C52FF4A4C4AFF524C + 52FF4A4C4AFF524C52FF4A484AFF4A444AFF414041FF393439FF202020FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF0000 + 00FF000000FF000000FF000000FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF000000FF00FF + FFFF808080FF00FFFFFF808080FF000000FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF808080FF808080FF808080FF808080FF000000FF808080FF00FF + FFFF808080FF00FFFFFF808080FF00FFFFFF808080FF00FFFFFF808080FF00FF + FFFF000000FF808080FF808080FF808080FF808080FF000000FF00FFFFFF8080 + 80FF00FFFFFF830000FF00FFFFFF830000FF00FFFFFF830000FF00FFFFFF8080 + 80FF000000FF808080FF808080FF808080FF808080FF000000FF808080FF00FF + FFFF808080FF00FFFFFF830000FF830000FF830000FF00FFFFFF808080FF00FF + FFFF000000FF808080FF808080FF808080FF808080FF000000FF00FFFFFF8080 + 80FF00FFFFFF830000FF830000FF00FFFFFF830000FF830000FF00FFFFFF8080 + 80FF000000FF808080FF808080FF808080FF808080FF000000FF808080FF00FF + FFFF808080FF00FFFFFF830000FF830000FF830000FF00FFFFFF808080FF00FF + FFFF000000FF808080FF808080FF808080FF808080FF000000FF00FFFFFF8080 + 80FF00FFFFFF830000FF00FFFFFF830000FF00FFFFFF830000FF00FFFFFF8080 + 80FF000000FF808080FF808080FF808080FF808080FF000000FF808080FF00FF + FFFF808080FF00FFFFFF808080FF00FFFFFF808080FF00FFFFFF808080FF00FF + FFFF000000FF808080FF808080FF808080FF808080FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF947D83FF9C8183FF9C898BFF948983FF9C898BFF948983FF9C898BFF9489 + 83FF9C898BFF100000FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF9C898BFF18008BFF10008BFF1800D5FF1000CDFF1800FFFF1000FFFF1800 + FFFF1000FFFF180000FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF94898BFFFFFAFFFF808080FF808080FFFFFAF6FF808080FF808080FFFFFA + F6FF808080FF000000FF808080FF808080FF808080FF808080FF83797BFF9481 + 83FF9C858BFF9C858BFF948983FF9C898BFF948583FF94898BFF837D7BFF0804 + 00FFDED6D5FF000400FF808080FF808080FF808080FF808080FFAC8D94FF1000 + 8BFF18008BFF1000CDFF1000D5FF1000FFFF1800FFFF1000FFFF1000FFFF1800 + 00FFD5C2C5FF080000FF808080FF808080FF808080FF808080FFAC7D83FFFFFA + FFFFFFF2FFFFFFFAFFFFFFF6FFFFFFFAFFFFFFFAFFFF808080FFFFF2F6FF2000 + 00FFDEC2C5FF100008FF808080FF808080FF9C8183FF948983FF9C898BFF9489 + 83FF9C898BFF948983FF9C898BFF948983FF9C898BFF200000FFF6CED5FF1000 + 00FFD5CACDFF000000FF808080FF808080FF9C8183FF18008BFF10008BFF1800 + D5FF1000CDFF1800FFFF1000FFFF1800FFFF1000FFFF200808FFD5C6CDFF0800 + 00FFCDCACDFF000400FF808080FF808080FF8B898BFFFFFAFFFF808080FF8080 + 80FF808080FF808080FFFFFAFFFF808080FFFFFAFFFF000000FFC5CECDFF0000 + 00FF000400FF000000FF808080FF808080FF7B8583FF808080FFC5C6C5FFCDD2 + D5FFCDCECDFFCDC6CDFFCDCACDFFC5C2C5FFC5CAC5FF000400FFB4BEBDFF0008 + 00FF808080FF808080FF808080FF808080FF838D8BFF808080FFC5C6C5FFC5CA + CDFFCDCACDFFCDCACDFFD5C2C5FFDECACDFFD5C2C5FF080000FFE6DADEFF0000 + 00FF808080FF808080FF808080FF808080FF7B7D7BFF808080FFCDCECDFFD5CE + D5FFC5BABDFFDECED5FFDEC6CDFFE6CED5FFD5BEC5FF100000FF080000FF2010 + 10FF808080FF808080FF808080FF808080FF948D8BFFFFFAFFFFD5C6CDFFDECA + CDFFE6CED5FFD5BEBDFFD5C6CDFFCDC6C5FFDED2D5FF080000FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF8B898BFF808080FFCDBEC5FFDECE + D5FFC5B2B4FFE6D2DEFFCDC6CDFFC5C2C5FFC5C6C5FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF838583FF000808FF808080FF0000 + 00FF101010FF000000FF000408FF000000FF000408FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF000000FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF000000FF0000FFFF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF0000 + 00FF000000FF0000FFFF0000FFFF0000FFFF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF000000FF000000FF0000 + FFFF0000FFFF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF0000FFFF0000FFFF0000 + FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 + FFFF0000FFFF0000FFFF000000FF808080FF808080FF000000FF000000FF0000 + FFFF0000FFFF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF808080FF808080FF808080FF808080FF0000 + 00FF000000FF0000FFFF0000FFFF0000FFFF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF000000FF0000FFFF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF000000FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF000000FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF0000FFFF000000FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF0000FFFF0000FFFF0000FFFF000000FF000000FF8080 + 80FF808080FF808080FF808080FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 + 00FF000000FF808080FF808080FF000000FF0000FFFF0000FFFF0000FFFF0000 + FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 + FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 + 00FF000000FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF0000FFFF0000FFFF0000FFFF000000FF000000FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF0000FFFF000000FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF000000FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF838183FF0000 + 00FF000000FF000000FF838183FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF000000FF838183FF837D + 83FF838183FF7B7D7BFF838183FF000000FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF838183FF808080FFC5C2 + C5FF808080FFC5C2C5FF808080FF838183FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF7B7D7BFF838183FF808080FFC5C2C5FF8080 + 80FF0000FFFF808080FFC5C2C5FF808080FF838183FF837D83FF808080FF8080 + 80FF808080FF808080FF808080FF000000FF838183FFC5C2C5FF808080FFC5C2 + C5FF0000FFFFC5C2C5FF808080FFC5C2C5FF838183FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF000000FF838183FF808080FF0000FFFF0000 + FFFF0000FFFF0000FFFF0000FFFF808080FF838183FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF000000FF838183FFC5C2C5FF808080FFC5C2 + C5FF0000FFFFC5C2C5FF808080FFC5C2C5FF838183FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF7B7D7BFF838183FF808080FFC5C2C5FF8080 + 80FF0000FFFF808080FFC5C2C5FF808080FF838183FF837D83FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF838183FF808080FFC5C2 + C5FF808080FFC5C2C5FF808080FF838183FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF000000FF838183FF837D + 83FF838183FF7B7D7BFF838183FF000000FF000000FF00FFFFFF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF838183FF0000 + 00FF000000FF000000FF838183FF808080FF00FFFFFF838183FF000000FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF000000FF000000FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF000000FF0000 + 00FF000000FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF0000 + 00FF000000FF000000FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FF000000FF000000FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF808080FF808080FF808080FF808080FF838183FF0000 + 00FF000000FF000000FF838183FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF000000FF838183FF837D + 83FF838183FF7B7D7BFF838183FF000000FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF838183FFC5C2C5FF8080 + 80FFC5C2C5FF808080FFC5C2C5FF838183FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF7B7D7BFF838183FFC5BEC5FF808080FFBDBE + BDFF808080FFC5BEC5FF808080FFBDBEBDFF838183FF837D83FF808080FF8080 + 80FF808080FF808080FF808080FF000000FF838183FF808080FFC5C2C5FF8080 + 80FFC5C2C5FF808080FFC5C2C5FF808080FF838183FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF000000FF838183FFBDBEBDFF0000FFFF0000 + FFFF0000FFFF0000FFFF0000FFFFC5BEC5FF838183FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF000000FF838183FF808080FFC5C2C5FF8080 + 80FFC5C2C5FF808080FFC5C2C5FF808080FF838183FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF7B7D7BFF838183FFC5BEC5FF808080FFBDBE + BDFF808080FFC5BEC5FF808080FFBDBEBDFF838183FF837D83FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF838183FFC5C2C5FF8080 + 80FFC5C2C5FF808080FFC5C2C5FF838183FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF000000FF838183FF837D + 83FF838183FF7B7D7BFF838183FF000000FF000000FF00FFFFFF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF838183FF0000 + 00FF000000FF000000FF838183FF808080FF00FFFFFF838183FF000000FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF000000FF000000FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF000000FF0000 + 00FF000000FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF0000 + 00FF000000FF000000FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FF000000FF000000FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF808080FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FF808080FFFFFF00FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF7B7D + 7BFF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8381 + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF808080FF000000FF808080FF000000FF000000FF808080FF808080FF837D + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF000000FF000000FF808080FF000000FF000000FF808080FF808080FF8381 + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF0000 + 00FF000000FF000000FF808080FF000000FF000000FF808080FF808080FF7B7D + 7BFF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF000000FF000000FF808080FF000000FF000000FF808080FF808080FF8381 + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF808080FF000000FF808080FF000000FF000000FF808080FF808080FF837D + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8381 + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF7B7D + 7BFF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF838183FF8381 + 83FF838183FF838183FF838183FF838183FF838183FF838183FF838183FF8381 + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FFFFFF00FF808080FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FF808080FFFFFF00FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF7B7D + 7BFF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8381 + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF000000FF000000FF808080FF000000FF808080FF808080FF808080FF837D + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF000000FF000000FF808080FF000000FF000000FF808080FF808080FF8381 + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF000000FF000000FF808080FF000000FF000000FF000000FF808080FF7B7D + 7BFF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF000000FF000000FF808080FF000000FF000000FF808080FF808080FF8381 + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF000000FF000000FF808080FF000000FF808080FF808080FF808080FF837D + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8381 + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF7B7D + 7BFF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF838183FF8381 + 83FF838183FF838183FF838183FF838183FF838183FF838183FF838183FF8381 + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FFFFFF00FF808080FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF + } + end + object ODImage: TOpenDialog + FilterIndex = 0 + Options = [ofAllowMultiSelect, ofEnableSizing, ofViewDetail] + left = 72 + top = 64 + end + object OpenDialog1: TOpenDialog + FilterIndex = 0 + left = 72 + top = 104 + end +end diff --git a/applications/lazstats/source_orig/frmmain.lrs b/applications/lazstats/source_orig/frmmain.lrs new file mode 100644 index 000000000..3c683968f --- /dev/null +++ b/applications/lazstats/source_orig/frmmain.lrs @@ -0,0 +1,990 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TPicViewFrm','FORMDATA',[ + 'TPF0'#11'TPicViewFrm'#10'PicViewFrm'#4'Left'#2#0#6'Height'#2#0#3'Top'#3#204#2 + +#5'Width'#2#0#18'HorzScrollBar.Page'#3'g'#3#19'HorzScrollBar.Range'#3#165#0 + +#18'VertScrollBar.Page'#3'g'#2#19'VertScrollBar.Range'#2#23#13'ActiveControl' + +#7#7'LBFiles'#7'Caption'#6#12'Image viewer'#12'ClientHeight'#2#0#11'ClientWi' + +'dth'#2#0#11'Font.Height'#2#243#9'Font.Name'#6#13'MS Sans Serif'#4'Menu'#7#9 + +'MainMenu1'#9'OnKeyDown'#7#11'FormKeyDown'#6'OnShow'#7#8'FormShow'#10'LCLVer' + +'sion'#6#8'0.9.28.2'#0#9'TSplitter'#7'SPImage'#4'Left'#3#161#0#6'Height'#2#0 + +#3'Top'#2#23#5'Width'#2#4#7'Beveled'#9#0#0#8'TToolBar'#8'ToolBar1'#4'Left'#2 + +#0#6'Height'#2#29#3'Top'#2#0#5'Width'#3#165#0#12'ButtonHeight'#2#23#7'Captio' + +'n'#6#8'ToolBar1'#6'Images'#7#6'ILMain'#14'ParentShowHint'#8#8'ShowHint'#9#8 + +'TabOrder'#2#0#0#11'TToolButton'#6'TBOPen'#4'Left'#2#1#3'Top'#2#2#6'Action'#7 + +#5'AOpen'#0#0#11'TToolButton'#9'TBOpenDir'#4'Left'#2#24#3'Top'#2#2#6'Action' + +#7#8'AOpenDir'#0#0#11'TToolButton'#12'TBOpenDirRec'#4'Left'#2'/'#3'Top'#2#2#6 + +'Action'#7#18'OpenDirRecursively'#0#0#11'TToolButton'#11'ToolButton4'#4'Left' + +#2'F'#3'Top'#2#2#5'Width'#2#8#7'Caption'#6#11'ToolButton4'#10'ImageIndex'#2#3 + +#5'Style'#7#12'tbsSeparator'#0#0#11'TToolButton'#6'TBPRev'#4'Left'#2'N'#3'To' + +'p'#2#2#6'Action'#7#14'APreviousImage'#0#0#11'TToolButton'#6'TBNext'#4'Left' + +#2'e'#3'Top'#2#2#6'Action'#7#10'ANextImage'#0#0#11'TToolButton'#9'TBPRevDir' + +#4'Left'#2'|'#3'Top'#2#2#6'Action'#7#13'APrevImageDir'#0#0#11'TToolButton'#9 + +'TBNextDir'#4'Left'#2#1#3'Top'#2#25#6'Action'#7#13'ANextImageDir'#0#0#11'TTo' + +'olButton'#12'TBDoubleSize'#4'Left'#2#24#3'Top'#2#25#6'Action'#7#11'ADoubleS' + +'ize'#0#0#11'TToolButton'#10'TBHalfSize'#4'Left'#2'/'#3'Top'#2#25#6'Action'#7 + +#9'AHalfSize'#0#0#11'TToolButton'#11'ToolButton3'#4'Left'#2'F'#3'Top'#2#25#5 + +'Width'#2#8#7'Caption'#6#11'ToolButton3'#10'ImageIndex'#2#10#5'Style'#7#12't' + +'bsSeparator'#0#0#0#8'TListBox'#7'LBFiles'#4'Left'#2#0#6'Height'#2#0#3'Top'#2 + +#23#5'Width'#3#161#0#5'Align'#7#6'alLeft'#16'ClickOnSelChange'#8#10'Font.Col' + +'or'#7#7'clBlack'#11'Font.Height'#2#15#9'Font.Name'#6#5'Arial'#10'Font.Pitch' + +#7#10'fpVariable'#10'ItemHeight'#2#0#7'OnClick'#7#12'LBFilesClick'#9'OnKeyDo' + +'wn'#7#11'FormKeyDown'#10'ParentFont'#8#8'TabOrder'#2#1#0#0#6'TPanel'#6'PIma' + +'ge'#4'Left'#3#165#0#6'Height'#2#0#3'Top'#2#23#5'Width'#2#0#5'Align'#7#8'alC' + +'lient'#12'ClientHeight'#2#0#11'ClientWidth'#2#0#11'FullRepaint'#8#8'TabOrde' + +'r'#2#2#0#10'TScrollBox'#10'ScrollBox1'#4'Left'#2#0#6'Height'#2#0#3'Top'#2#0 + +#5'Width'#2#0#5'Align'#7#8'alClient'#11'BorderStyle'#7#6'bsNone'#12'ClientHe' + +'ight'#2#0#11'ClientWidth'#2#0#8'TabOrder'#2#0#0#6'TImage'#5'IMain'#4'Left'#2 + +#0#6'Height'#2#0#3'Top'#2#0#5'Width'#2#0#5'Align'#7#8'alClient'#11'Transpare' + +'nt'#9#0#0#0#0#9'TMainMenu'#9'MainMenu1'#6'Images'#7#6'ILMain'#4'left'#2' '#3 + +'top'#2' '#0#9'TMenuItem'#5'File1'#7'Caption'#6#5'&File'#0#9'TMenuItem'#6'MI' + +'Open'#6'Action'#7#5'AOpen'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0 + +#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0 + +'d'#0#0#0#0#0#0#0#0#0#0#0#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255')$)'#255'JHJ'#255'RLR' + +#255'JLJ'#255'RLR'#255'JLJ'#255'RLR'#255'JHJ'#255'JDJ'#255'A@A'#255'949'#255 + +' '#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#24 + +'0J'#255#197#190#197#255#164#165#164#255#172#174#172#255#172#174#172#255#180 + +#178#180#255#172#170#172#255#172#170#172#255#156#153#156#255#148#149#156#255 + +#139#141#139#255'JHJ'#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255' 4R'#255'RUZ'#255#213#210#213#255#189#190#197#255#205#198#205 + +#255#205#198#205#255#205#198#205#255#197#194#197#255#180#178#180#255#164#165 + +#172#255#164#161#164#255'sqs'#255#24#20#24#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#24'0J'#255#24'0J'#255#205#206#205#255#205#206#205#255 + +#213#214#213#255#222#214#222#255#213#210#213#255#213#206#213#255#189#186#189 + +#255#180#178#180#255#164#161#164#255#156#149#156#255'JHJ'#255#128#128#128#255 + +#128#128#128#255#128#128#128#255' 4R'#255'A}'#189#255'RUZ'#255#222#218#222 + +#255#230#222#230#255#230#226#230#255#230#226#230#255#222#214#222#255#197#198 + +#197#255#180#182#189#255#172#174#180#255#164#161#164#255'jij'#255' '#255 + +#128#128#128#255#128#128#128#255#24'0J'#255#131#198#255#255#24'0J'#255#128 + +#128#128#255#222#222#230#255#238#234#238#255#230#230#230#255#230#226#230#255 + +#197#198#205#255#189#190#189#255#172#174#172#255#164#161#164#255#148#149#148 + +#255'JHJ'#255#128#128#128#255#128#128#128#255' 4R'#255#131#194#255#255'R'#137 + +#205#255'JPR'#255#255#250#255#255#255#246#255#255#246#238#246#255#230#230#230 + +#255#222#214#222#255#205#206#205#255#205#198#205#255#189#190#189#255#189#186 + +#189#255#180#182#180#255'101'#255#128#128#128#255#24'0J'#255#156#214#255#255 + ,#139#198#255#255#131#198#255#255'b'#174#255#255'b'#174#255#255'b'#174#255#255 + +'b'#174#255#255'b'#174#255#255'b'#174#255#255'b'#174#255#255#0#0#0#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255' 4R'#255'j'#165 + +#230#255#164#214#255#255#139#198#255#255'j'#170#238#255#24'4R'#255' 4R'#255 + +#24'4R'#255' 4R'#255#24'4R'#255' 4R'#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255' 4R'#255#24'0J' + +#255#24'4R'#255#24'0J'#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0 + +#0#255#0#0#0#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128 + +#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#7'OnClick'#7#12'AOpenExecute'#0#0#9'TMenuItem'#9'MIOPenDir'#6'Action'#7#8'A' + +'OpenDir'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'(' + +#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0 + +#0#0#0#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#0#0#0#255#128#128#128#255#0#255#255#255#128#128#128#255#0#255#255 + +#255#128#128#128#255#0#255#255#255#128#128#128#255#0#255#255#255#128#128#128 + +#255#0#255#255#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#0#0#0#255#0#255#255#255#128#128#128#255#0#255#255#255#131#0 + +#0#255#0#255#255#255#131#0#0#255#0#255#255#255#131#0#0#255#0#255#255#255#128 + +#128#128#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#0#0#0#255#128#128#128#255#0#255#255#255#128#128#128#255#0#255 + +#255#255#131#0#0#255#131#0#0#255#131#0#0#255#0#255#255#255#128#128#128#255#0 + +#255#255#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#0#0#0#255#0#255#255#255#128#128#128#255#0#255#255#255#131#0#0 + +#255#131#0#0#255#0#255#255#255#131#0#0#255#131#0#0#255#0#255#255#255#128#128 + +#128#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#0#0#0#255#128#128#128#255#0#255#255#255#128#128#128#255#0#255#255 + +#255#131#0#0#255#131#0#0#255#131#0#0#255#0#255#255#255#128#128#128#255#0#255 + +#255#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#0#0#0#255#0#255#255#255#128#128#128#255#0#255#255#255#131#0#0#255#0 + +#255#255#255#131#0#0#255#0#255#255#255#131#0#0#255#0#255#255#255#128#128#128 + +#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#0#0#0#255#128#128#128#255#0#255#255#255#128#128#128#255#0#255#255#255 + +#128#128#128#255#0#255#255#255#128#128#128#255#0#255#255#255#128#128#128#255 + +#0#255#255#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#255 + ,#255#255#128#128#128#255#0#255#255#255#128#128#128#255#0#0#0#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#7'OnClick'#7#15'AOpenDirExecute'#0#0#9'TMenuItem'#12'MIOpenDirRec'#6 + +'Action'#7#18'OpenDirRecursively'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4 + +#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd' + +#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#128#128#128#255#131#133#131#255#0#8#8#255#128 + +#128#128#255#0#0#0#255#16#16#16#255#0#0#0#255#0#4#8#255#0#0#0#255#0#4#8#255#0 + +#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#139#137#139#255#128#128#128#255#205#190#197#255 + +#222#206#213#255#197#178#180#255#230#210#222#255#205#198#205#255#197#194#197 + +#255#197#198#197#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#148#141#139#255#255#250 + +#255#255#213#198#205#255#222#202#205#255#230#206#213#255#213#190#189#255#213 + +#198#205#255#205#198#197#255#222#210#213#255#8#0#0#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +'{}{'#255#128#128#128#255#205#206#205#255#213#206#213#255#197#186#189#255#222 + +#206#213#255#222#198#205#255#230#206#213#255#213#190#197#255#16#0#0#255#8#0#0 + +#255' '#16#16#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#131#141#139#255#128#128#128#255#197#198#197#255#197#202#205#255#205#202 + +#205#255#205#202#205#255#213#194#197#255#222#202#205#255#213#194#197#255#8#0 + +#0#255#230#218#222#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255'{'#133#131#255#128#128#128#255#197#198#197#255#205#210 + +#213#255#205#206#205#255#205#198#205#255#205#202#205#255#197#194#197#255#197 + +#202#197#255#0#4#0#255#180#190#189#255#0#8#0#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#139#137#139#255#255#250#255#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#255#250#255#255#128 + +#128#128#255#255#250#255#255#0#0#0#255#197#206#205#255#0#0#0#255#0#4#0#255#0 + +#0#0#255#128#128#128#255#128#128#128#255#156#129#131#255#24#0#139#255#16#0 + +#139#255#24#0#213#255#16#0#205#255#24#0#255#255#16#0#255#255#24#0#255#255#16 + +#0#255#255' '#8#8#255#213#198#205#255#8#0#0#255#205#202#205#255#0#4#0#255#128 + +#128#128#255#128#128#128#255#156#129#131#255#148#137#131#255#156#137#139#255 + +#148#137#131#255#156#137#139#255#148#137#131#255#156#137#139#255#148#137#131 + +#255#156#137#139#255' '#0#0#255#246#206#213#255#16#0#0#255#213#202#205#255#0 + +#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#172 + +'}'#131#255#255#250#255#255#255#242#255#255#255#250#255#255#255#246#255#255 + +#255#250#255#255#255#250#255#255#128#128#128#255#255#242#246#255' '#0#0#255 + +#222#194#197#255#16#0#8#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#172#141#148#255#16#0#139#255#24#0#139#255#16#0#205#255#16#0 + +#213#255#16#0#255#255#24#0#255#255#16#0#255#255#16#0#255#255#24#0#0#255#213 + +#194#197#255#8#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#131'y{'#255#148#129#131#255#156#133#139#255#156#133#139#255#148 + +#137#131#255#156#137#139#255#148#133#131#255#148#137#139#255#131'}{'#255#8#4 + +#0#255#222#214#213#255#0#4#0#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#148#137#139#255#255#250 + +#255#255#128#128#128#255#128#128#128#255#255#250#246#255#128#128#128#255#128 + +#128#128#255#255#250#246#255#128#128#128#255#0#0#0#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#156#137#139#255#24#0#139#255#16#0#139#255#24#0#213#255#16#0#205#255#24#0#255 + +#255#16#0#255#255#24#0#255#255#16#0#255#255#24#0#0#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#148'}'#131#255#156#129#131#255#156#137#139#255#148#137#131#255#156#137#139 + +#255#148#137#131#255#156#137#139#255#148#137#131#255#156#137#139#255#16#0#0 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + ,#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#7'OnClick'#7#25'OpenDirRecu' + +'rsivelyExecute'#0#0#9'TMenuItem'#7'MIClear'#6'Action'#7#6'AClear'#7'OnClick' + +#7#13'AClearExecute'#0#0#9'TMenuItem'#2'N1'#7'Caption'#6#1'-'#0#0#9'TMenuIte' + +'m'#6'MIQuit'#6'Action'#7#5'AExit'#7'OnClick'#7#12'AExitExecute'#0#0#0#9'TMe' + +'nuItem'#6'MImage'#7'Caption'#6#6'&Image'#0#9'TMenuItem'#2'D1'#6'Action'#7#11 + +'ADoubleSize'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0 + +#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0 + +#0#0#0#0#0#0#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#131#129#131#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#131#129#131#255#128#128#128#255#0#255#255#255#131 + +#129#131#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#131#129#131#255#131'}' + +#131#255#131#129#131#255'{}{'#255#131#129#131#255#0#0#0#255#0#0#0#255#0#255 + +#255#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#0#0#0#255#131#129#131#255#128#128#128#255#197 + +#194#197#255#128#128#128#255#197#194#197#255#128#128#128#255#131#129#131#255 + +#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255'{}{'#255#131#129#131#255#128#128#128#255#197 + +#194#197#255#128#128#128#255#0#0#255#255#128#128#128#255#197#194#197#255#128 + +#128#128#255#131#129#131#255#131'}'#131#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#131#129#131#255 + +#197#194#197#255#128#128#128#255#197#194#197#255#0#0#255#255#197#194#197#255 + +#128#128#128#255#197#194#197#255#131#129#131#255#0#0#0#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255 + +#131#129#131#255#128#128#128#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255 + +#255#0#0#255#255#128#128#128#255#131#129#131#255#0#0#0#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255 + +#131#129#131#255#197#194#197#255#128#128#128#255#197#194#197#255#0#0#255#255 + +#197#194#197#255#128#128#128#255#197#194#197#255#131#129#131#255#0#0#0#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255'{}{'#255#131#129#131#255#128#128#128#255#197#194#197#255#128#128#128#255 + +#0#0#255#255#128#128#128#255#197#194#197#255#128#128#128#255#131#129#131#255 + +#131'}'#131#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#0#0#0#255#131#129#131#255#128#128#128 + +#255#197#194#197#255#128#128#128#255#197#194#197#255#128#128#128#255#131#129 + +#131#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0 + +#0#255#131#129#131#255#131'}'#131#255#131#129#131#255'{}{'#255#131#129#131 + +#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#131#129#131#255#0#0#0#255#0#0#0#255#0#0#0#255#131 + +#129#131#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#7'OnClick'#7 + +#18'ADoubleSizeExecute'#0#0#9'TMenuItem'#10'MIHalfSize'#6'Action'#7#9'AHalfS' + +'ize'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0 + +#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0 + +#0#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + ,#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#131#129#131#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#131#129#131#255#128#128#128#255#0#255#255#255#131#129#131 + +#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#0#0#0#255#131#129#131#255#131'}'#131#255 + +#131#129#131#255'{}{'#255#131#129#131#255#0#0#0#255#0#0#0#255#0#255#255#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#0#0#0#255#131#129#131#255#197#194#197#255#128#128#128 + +#255#197#194#197#255#128#128#128#255#197#194#197#255#131#129#131#255#0#0#0 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255'{}{'#255#131#129#131#255#197#190#197#255#128#128#128 + +#255#189#190#189#255#128#128#128#255#197#190#197#255#128#128#128#255#189#190 + +#189#255#131#129#131#255#131'}'#131#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#131#129#131#255#128 + +#128#128#255#197#194#197#255#128#128#128#255#197#194#197#255#128#128#128#255 + +#197#194#197#255#128#128#128#255#131#129#131#255#0#0#0#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255 + +#131#129#131#255#189#190#189#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255 + +#255#0#0#255#255#197#190#197#255#131#129#131#255#0#0#0#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255 + +#131#129#131#255#128#128#128#255#197#194#197#255#128#128#128#255#197#194#197 + +#255#128#128#128#255#197#194#197#255#128#128#128#255#131#129#131#255#0#0#0 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255'{}{'#255#131#129#131#255#197#190#197#255#128#128#128#255#189#190#189 + +#255#128#128#128#255#197#190#197#255#128#128#128#255#189#190#189#255#131#129 + +#131#255#131'}'#131#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#131#129#131#255#197 + +#194#197#255#128#128#128#255#197#194#197#255#128#128#128#255#197#194#197#255 + +#131#129#131#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#0#0#0#255#131#129#131#255#131'}'#131#255#131#129#131#255'{}{'#255#131 + +#129#131#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#131#129#131#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#131#129#131#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#7'O' + +'nClick'#7#16'AHalfSizeExecute'#0#0#9'TMenuItem'#2'N2'#7'Caption'#6#1'-'#0#0 + +#9'TMenuItem'#11'MINextImage'#6'Action'#7#10'ANextImage'#11'Bitmap.Data'#10 + +':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0 + +' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + ,#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#255#255#0 + +#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0 + +#255#255#0#0#255#255#0#0#255#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0 + +#255#255#0#0#255#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#0#0 + +#0#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255 + +#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255 + +#0#0#255#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0 + +#0#255#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#0#0#0#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#0#255#0#0#0#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#0#0#0#255#0#0#255#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#8'ShortCut'#4#18#144#0#0#7'OnClick'#7#17'ANextImageExec' + +'ute'#0#0#9'TMenuItem'#14'PreviousImage1'#6'Action'#7#14'APreviousImage'#11 + +'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0 + +#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0#255#255#0#0 + +#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#0#0#0#255#0#0#0#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0 + +#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0 + +#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + ,#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255 + +#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0 + +#255#255#0#0#0#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0 + +#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0#255#255#0#0 + +#255#255#0#0#255#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0 + +#0#255#0#0#0#255#0#0#255#255#0#0#0#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#8'ShortCut'#4#20#144#0#0#7'OnClick'#7#21 + +'APreviousImageExecute'#0#0#9'TMenuItem'#19'Nextimagedirectory1'#6'Action'#7 + +#13'ANextImageDir'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6' + +#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0 + +#0#0#0#0#0#0#0#0#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#255#255#0#255#128#128#128#255#255#255 + +#0#255#0#0#0#255#128#128#128#255#131#129#131#255#131#129#131#255#131#129#131 + +#255#131#129#131#255#131#129#131#255#131#129#131#255#131#129#131#255#131#129 + +#131#255#131#129#131#255#131#129#131#255#0#0#0#255#255#255#0#255#128#128#128 + +#255#255#255#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255'{}{'#255#0#0#0#255#255#255#0#255#128#128 + +#128#255#255#255#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#131#129#131#255#0#0#0#255#255#255#0 + +#255#128#128#128#255#255#255#0#255#0#0#0#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#0#0#0#255#0#0#0#255#128#128#128#255#0#0#0#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#131'}'#131#255#0#0#0#255#255#255#0#255 + +#128#128#128#255#255#255#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#0#0#0#255#0#0#0#255#128#128#128#255#0#0#0#255#0#0#0#255#128#128 + +#128#255#128#128#128#255#131#129#131#255#0#0#0#255#255#255#0#255#128#128#128 + +#255#255#255#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#0#0#0#255#0#0#0#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0#0#255#128#128 + +#128#255'{}{'#255#0#0#0#255#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#128 + +#128#128#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#131#129#131 + +#255#0#0#0#255#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#128#128#128#255 + +#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#131'}'#131#255#0#0 + +#0#255#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255#128#128#128#255 + ,#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#131#129 + +#131#255#0#0#0#255#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255'{}{'#255#0#0#0#255#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#0#0#0#255#255#255#0#255#128#128#128#255#255#255#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#255#255#0#255#128 + +#128#128#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#128 + +#128#128#255#7'OnClick'#7#20'ANextImageDirExecute'#0#0#9'TMenuItem'#23'Previ' + +'ousimagedirectory1'#6'Action'#7#13'APrevImageDir'#11'Bitmap.Data'#10':'#4#0 + +#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0 + +#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#128#128#128#255 + +#255#255#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#255#255 + +#0#255#128#128#128#255#255#255#0#255#0#0#0#255#128#128#128#255#131#129#131 + +#255#131#129#131#255#131#129#131#255#131#129#131#255#131#129#131#255#131#129 + +#131#255#131#129#131#255#131#129#131#255#131#129#131#255#131#129#131#255#0#0 + +#0#255#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255'{}{'#255 + +#0#0#0#255#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#131 + +#129#131#255#0#0#0#255#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255 + +#128#128#128#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#131'}' + +#131#255#0#0#0#255#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#128#128#128 + +#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#131#129#131#255#0#0 + +#0#255#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255#128#128#128#255 + +#128#128#128#255#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128#255#0#0#0#255#0#0 + +#0#255#128#128#128#255#128#128#128#255'{}{'#255#0#0#0#255#255#255#0#255#128 + +#128#128#255#255#255#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#0#0#0#255#0#0#0#255#128#128#128#255#0#0#0#255#0#0#0#255#128#128#128 + +#255#128#128#128#255#131#129#131#255#0#0#0#255#255#255#0#255#128#128#128#255 + +#255#255#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#0#0#0#255#128#128#128#255#0#0#0#255#0#0#0#255#128#128#128#255 + +#128#128#128#255#131'}'#131#255#0#0#0#255#255#255#0#255#128#128#128#255#255 + +#255#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#131#129#131#255#0#0#0#255#255#255#0#255#128#128 + +#128#255#255#255#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255'{}{'#255#0#0#0#255#255#255#0#255#128 + +#128#128#255#255#255#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#255 + +#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#255#255#0#255#128#128#128#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#128#128#128#255#7'OnClick'#7#20'APrevImageD' + +'irExecute'#0#0#0#0#11'TActionList'#11'ActionList1'#6'Images'#7#6'ILMain'#4 + +'left'#2'H'#3'top'#2' '#0#7'TAction'#5'AOpen'#7'Caption'#6#5'&Open'#8'HelpTy' + +'pe'#7#9'htKeyword'#10'ImageIndex'#2#0#9'OnExecute'#7#12'AOpenExecute'#8'Sho' + +'rtCut'#3'O@'#0#0#7'TAction'#8'AOpenDir'#7'Caption'#6#15'Open &Directory'#8 + +'HelpType'#7#9'htKeyword'#10'ImageIndex'#2#1#9'OnExecute'#7#15'AOpenDirExecu' + +'te'#8'ShortCut'#3'D@'#0#0#7'TAction'#5'AExit'#7'Caption'#6#5'&Quit'#8'HelpT' + +'ype'#7#9'htKeyword'#9'OnExecute'#7#12'AExitExecute'#8'ShortCut'#3'Q@'#0#0#7 + +'TAction'#6'AClear'#7'Caption'#6#11'&Clear list'#8'HelpType'#7#9'htKeyword'#9 + +'OnExecute'#7#13'AClearExecute'#8'ShortCut'#3'L@'#0#0#7'TAction'#18'OpenDirR' + +'ecursively'#7'Caption'#6#27'Open Directory &Recursively'#8'HelpType'#7#9'ht' + +'Keyword'#10'ImageIndex'#2#2#9'OnExecute'#7#25'OpenDirRecursivelyExecute'#8 + +'ShortCut'#3'R@'#0#0#7'TAction'#11'ADoubleSize'#7'Caption'#6#12'&Double size' + +#8'HelpType'#7#9'htKeyword'#10'ImageIndex'#2#5#9'OnExecute'#7#18'ADoubleSize' + +'Execute'#8'ShortCut'#3'+@'#0#0#7'TAction'#9'AHalfSize'#7'Caption'#6#11'&Hal' + +'f Size'#8'HelpType'#7#9'htKeyword'#10'ImageIndex'#2#6#9'OnExecute'#7#16'AH' + +'alfSizeExecute'#8'ShortCut'#3'-@'#0#0#7'TAction'#10'ANextImage'#7'Caption'#6 + +#11'&Next image'#8'HelpType'#7#9'htKeyword'#10'ImageIndex'#2#4#9'OnExecute'#7 + +#17'ANextImageExecute'#0#0#7'TAction'#14'APreviousImage'#7'Caption'#6#15'&Pr' + +'evious Image'#8'HelpType'#7#9'htKeyword'#10'ImageIndex'#2#3#9'OnExecute'#7 + +#21'APreviousImageExecute'#0#0#7'TAction'#13'ANextImageDir'#7'Caption'#6#21 + +'N&ext image directory'#8'HelpType'#7#9'htKeyword'#10'ImageIndex'#2#8#9'OnEx' + +'ecute'#7#20'ANextImageDirExecute'#8'ShortCut'#4'N'#128#0#0#0#0#7'TAction'#13 + +'APrevImageDir'#7'Caption'#6#25'Pre&vious image directory'#8'HelpType'#7#9'h' + +'tKeyword'#4'Hint'#6'(Jump to last image of previous directory'#10'ImageInde' + +'x'#2#7#9'OnExecute'#7#20'APrevImageDirExecute'#8'ShortCut'#4'P'#128#0#0#0#0 + +#0#10'TImageList'#6'ILMain'#4'left'#2' '#3'top'#2'@'#6'Bitmap'#10#14'$'#0#0 + +'Li'#9#0#0#0#16#0#0#0#16#0#0#0#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#128#128 + +#128#255#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128#255#0#0#0#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255' 4R'#255 + +#24'0J'#255#24'4R'#255#24'0J'#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255' 4R'#255'j'#165#230 + +#255#164#214#255#255#139#198#255#255'j'#170#238#255#24'4R'#255' 4R'#255#24'4' + +'R'#255' 4R'#255#24'4R'#255' 4R'#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#24'0J'#255#156#214#255#255#139#198 + +#255#255#131#198#255#255'b'#174#255#255'b'#174#255#255'b'#174#255#255'b'#174 + +#255#255'b'#174#255#255'b'#174#255#255'b'#174#255#255#0#0#0#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255' 4R'#255#131#194#255#255 + +'R'#137#205#255'JPR'#255#255#250#255#255#255#246#255#255#246#238#246#255#230 + +#230#230#255#222#214#222#255#205#206#205#255#205#198#205#255#189#190#189#255 + +#189#186#189#255#180#182#180#255'101'#255#128#128#128#255#24'0J'#255#131#198 + +#255#255#24'0J'#255#128#128#128#255#222#222#230#255#238#234#238#255#230#230 + +#230#255#230#226#230#255#197#198#205#255#189#190#189#255#172#174#172#255#164 + +#161#164#255#148#149#148#255'JHJ'#255#128#128#128#255#128#128#128#255' 4R' + +#255'A}'#189#255'RUZ'#255#222#218#222#255#230#222#230#255#230#226#230#255#230 + +#226#230#255#222#214#222#255#197#198#197#255#180#182#189#255#172#174#180#255 + +#164#161#164#255'jij'#255' '#255#128#128#128#255#128#128#128#255#24'0J'#255 + +#24'0J'#255#205#206#205#255#205#206#205#255#213#214#213#255#222#214#222#255 + +#213#210#213#255#213#206#213#255#189#186#189#255#180#178#180#255#164#161#164 + +#255#156#149#156#255'JHJ'#255#128#128#128#255#128#128#128#255#128#128#128#255 + ,' 4R'#255'RUZ'#255#213#210#213#255#189#190#197#255#205#198#205#255#205#198 + +#205#255#205#198#205#255#197#194#197#255#180#178#180#255#164#165#172#255#164 + +#161#164#255'sqs'#255#24#20#24#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#24'0J'#255#197#190#197#255#164#165#164#255#172#174#172#255#172#174 + +#172#255#180#178#180#255#172#170#172#255#172#170#172#255#156#153#156#255#148 + +#149#156#255#139#141#139#255'JHJ'#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255')$)'#255'JHJ'#255'RLR'#255'JLJ'#255'RLR'#255'JLJ' + +#255'RLR'#255'JHJ'#255'JDJ'#255'A@A'#255'949'#255' '#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#0#0#0#255#0#255#255#255#128#128#128#255#0 + +#255#255#255#128#128#128#255#0#0#0#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255 + +#128#128#128#255#0#255#255#255#128#128#128#255#0#255#255#255#128#128#128#255 + +#0#255#255#255#128#128#128#255#0#255#255#255#128#128#128#255#0#255#255#255#0 + +#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0 + +#0#255#0#255#255#255#128#128#128#255#0#255#255#255#131#0#0#255#0#255#255#255 + +#131#0#0#255#0#255#255#255#131#0#0#255#0#255#255#255#128#128#128#255#0#0#0 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0 + +#255#128#128#128#255#0#255#255#255#128#128#128#255#0#255#255#255#131#0#0#255 + +#131#0#0#255#131#0#0#255#0#255#255#255#128#128#128#255#0#255#255#255#0#0#0 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0 + +#255#0#255#255#255#128#128#128#255#0#255#255#255#131#0#0#255#131#0#0#255#0 + +#255#255#255#131#0#0#255#131#0#0#255#0#255#255#255#128#128#128#255#0#0#0#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255 + +#128#128#128#255#0#255#255#255#128#128#128#255#0#255#255#255#131#0#0#255#131 + +#0#0#255#131#0#0#255#0#255#255#255#128#128#128#255#0#255#255#255#0#0#0#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0 + +#255#255#255#128#128#128#255#0#255#255#255#131#0#0#255#0#255#255#255#131#0#0 + +#255#0#255#255#255#131#0#0#255#0#255#255#255#128#128#128#255#0#0#0#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#128 + +#128#128#255#0#255#255#255#128#128#128#255#0#255#255#255#128#128#128#255#0 + +#255#255#255#128#128#128#255#0#255#255#255#128#128#128#255#0#255#255#255#0#0 + +#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + ,#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#148'}'#131#255#156#129#131#255#156#137 + +#139#255#148#137#131#255#156#137#139#255#148#137#131#255#156#137#139#255#148 + +#137#131#255#156#137#139#255#16#0#0#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#156#137#139#255 + +#24#0#139#255#16#0#139#255#24#0#213#255#16#0#205#255#24#0#255#255#16#0#255 + +#255#24#0#255#255#16#0#255#255#24#0#0#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#148#137#139#255 + +#255#250#255#255#128#128#128#255#128#128#128#255#255#250#246#255#128#128#128 + +#255#128#128#128#255#255#250#246#255#128#128#128#255#0#0#0#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#131'y{'#255#148#129#131 + +#255#156#133#139#255#156#133#139#255#148#137#131#255#156#137#139#255#148#133 + +#131#255#148#137#139#255#131'}{'#255#8#4#0#255#222#214#213#255#0#4#0#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#172#141#148#255 + +#16#0#139#255#24#0#139#255#16#0#205#255#16#0#213#255#16#0#255#255#24#0#255 + +#255#16#0#255#255#16#0#255#255#24#0#0#255#213#194#197#255#8#0#0#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#172'}'#131#255#255 + +#250#255#255#255#242#255#255#255#250#255#255#255#246#255#255#255#250#255#255 + +#255#250#255#255#128#128#128#255#255#242#246#255' '#0#0#255#222#194#197#255 + +#16#0#8#255#128#128#128#255#128#128#128#255#156#129#131#255#148#137#131#255 + +#156#137#139#255#148#137#131#255#156#137#139#255#148#137#131#255#156#137#139 + +#255#148#137#131#255#156#137#139#255' '#0#0#255#246#206#213#255#16#0#0#255 + +#213#202#205#255#0#0#0#255#128#128#128#255#128#128#128#255#156#129#131#255#24 + +#0#139#255#16#0#139#255#24#0#213#255#16#0#205#255#24#0#255#255#16#0#255#255 + +#24#0#255#255#16#0#255#255' '#8#8#255#213#198#205#255#8#0#0#255#205#202#205 + +#255#0#4#0#255#128#128#128#255#128#128#128#255#139#137#139#255#255#250#255 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#255#250 + +#255#255#128#128#128#255#255#250#255#255#0#0#0#255#197#206#205#255#0#0#0#255 + +#0#4#0#255#0#0#0#255#128#128#128#255#128#128#128#255'{'#133#131#255#128#128 + +#128#255#197#198#197#255#205#210#213#255#205#206#205#255#205#198#205#255#205 + +#202#205#255#197#194#197#255#197#202#197#255#0#4#0#255#180#190#189#255#0#8#0 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#131#141 + +#139#255#128#128#128#255#197#198#197#255#197#202#205#255#205#202#205#255#205 + +#202#205#255#213#194#197#255#222#202#205#255#213#194#197#255#8#0#0#255#230 + +#218#222#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255'{}{'#255#128#128#128#255#205#206#205#255#213#206#213#255#197#186 + +#189#255#222#206#213#255#222#198#205#255#230#206#213#255#213#190#197#255#16#0 + +#0#255#8#0#0#255' '#16#16#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#148#141#139#255#255#250#255#255#213#198#205#255#222#202#205 + +#255#230#206#213#255#213#190#189#255#213#198#205#255#205#198#197#255#222#210 + +#213#255#8#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#139#137#139#255#128#128#128#255#205 + +#190#197#255#222#206#213#255#197#178#180#255#230#210#222#255#205#198#205#255 + +#197#194#197#255#197#198#197#255#0#0#0#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#131#133#131 + +#255#0#8#8#255#128#128#128#255#0#0#0#255#16#16#16#255#0#0#0#255#0#4#8#255#0#0 + +#0#255#0#4#8#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + ,#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0#255#255#0#0#0#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#0#0#0#255#0#0#0#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#0#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0#255 + +#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#255 + +#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255 + +#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0 + +#0#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0#255#255#0#0 + +#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0#255#255#0#0#255#255#0#0 + +#255#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0 + +#255#0#0#255#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#255#255#0#0#0#255#0#0 + +#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#255#255#0#0 + +#255#255#0#0#255#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0 + +#255#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0 + +#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255 + +#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0 + +#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0 + +#0#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#0#255#0#0#0#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0 + ,#0#255#0#0#255#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#131#129#131#255#0#0#0#255#0#0#0#255#0#0#0#255#131#129#131#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#0#0#0#255#131#129#131#255#131'}'#131#255#131#129#131#255'{}{'#255#131 + +#129#131#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#0#0#0#255#131#129#131#255#128#128#128#255#197#194#197#255#128#128#128#255 + +#197#194#197#255#128#128#128#255#131#129#131#255#0#0#0#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255'{}{'#255#131#129#131#255#128#128#128#255#197#194#197#255#128#128#128#255 + +#0#0#255#255#128#128#128#255#197#194#197#255#128#128#128#255#131#129#131#255 + +#131'}'#131#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#0#0#0#255#131#129#131#255#197#194#197#255#128#128#128 + +#255#197#194#197#255#0#0#255#255#197#194#197#255#128#128#128#255#197#194#197 + +#255#131#129#131#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#0#0#0#255#131#129#131#255#128#128#128 + +#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#128#128#128 + +#255#131#129#131#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#0#0#0#255#131#129#131#255#197#194#197 + +#255#128#128#128#255#197#194#197#255#0#0#255#255#197#194#197#255#128#128#128 + +#255#197#194#197#255#131#129#131#255#0#0#0#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255'{}{'#255#131#129#131#255 + +#128#128#128#255#197#194#197#255#128#128#128#255#0#0#255#255#128#128#128#255 + +#197#194#197#255#128#128#128#255#131#129#131#255#131'}'#131#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#0#0#0#255#131#129#131#255#128#128#128#255#197#194#197#255#128#128 + +#128#255#197#194#197#255#128#128#128#255#131#129#131#255#0#0#0#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#131#129#131#255#131'}' + +#131#255#131#129#131#255'{}{'#255#131#129#131#255#0#0#0#255#0#0#0#255#0#255 + +#255#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#131#129#131#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#131#129#131#255#128#128#128#255#0#255#255#255 + +#131#129#131#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0 + +#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + ,#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#131#129#131#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#131#129#131#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#131#129 + +#131#255#131'}'#131#255#131#129#131#255'{}{'#255#131#129#131#255#0#0#0#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#131#129#131 + +#255#197#194#197#255#128#128#128#255#197#194#197#255#128#128#128#255#197#194 + +#197#255#131#129#131#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255'{}{'#255#131#129#131 + +#255#197#190#197#255#128#128#128#255#189#190#189#255#128#128#128#255#197#190 + +#197#255#128#128#128#255#189#190#189#255#131#129#131#255#131'}'#131#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#0#0#0#255#131#129#131#255#128#128#128#255#197#194#197#255#128#128#128#255 + +#197#194#197#255#128#128#128#255#197#194#197#255#128#128#128#255#131#129#131 + +#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#0#0#0#255#131#129#131#255#189#190#189#255#0#0#255#255#0 + +#0#255#255#0#0#255#255#0#0#255#255#0#0#255#255#197#190#197#255#131#129#131 + +#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#0#0#0#255#131#129#131#255#128#128#128#255#197#194#197 + +#255#128#128#128#255#197#194#197#255#128#128#128#255#197#194#197#255#128#128 + +#128#255#131#129#131#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255'{}{'#255#131#129#131#255#197#190#197 + +#255#128#128#128#255#189#190#189#255#128#128#128#255#197#190#197#255#128#128 + +#128#255#189#190#189#255#131#129#131#255#131'}'#131#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#0#0#0#255#131#129#131#255#197#194#197#255#128#128#128#255#197#194#197#255 + +#128#128#128#255#197#194#197#255#131#129#131#255#0#0#0#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#0#0#0#255#131#129#131#255#131'}'#131#255 + +#131#129#131#255'{}{'#255#131#129#131#255#0#0#0#255#0#0#0#255#0#255#255#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#131#129#131#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#131#129#131#255#128#128#128#255#0#255#255#255#131 + +#129#131#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#128#128 + +#128#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#128 + +#128#128#255#255#255#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + ,#128#255#0#0#0#255#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255'{}{'#255#0#0#0#255#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#131#129#131#255#0#0#0#255#255#255#0#255#128#128#128#255#255#255#0 + +#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#0#0#0#255#128#128#128#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128 + +#128#255#131'}'#131#255#0#0#0#255#255#255#0#255#128#128#128#255#255#255#0#255 + +#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0 + +#255#128#128#128#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255#131 + +#129#131#255#0#0#0#255#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255 + +#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128 + +#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128#128#255'{}{'#255#0#0#0#255 + +#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#128#128#128#255#0#0#0#255#0 + +#0#0#255#128#128#128#255#128#128#128#255#131#129#131#255#0#0#0#255#255#255#0 + +#255#128#128#128#255#255#255#0#255#0#0#0#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#0#0#0#255#128#128#128#255#0#0#0#255#0#0#0 + +#255#128#128#128#255#128#128#128#255#131'}'#131#255#0#0#0#255#255#255#0#255 + +#128#128#128#255#255#255#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#131#129#131#255#0#0#0#255 + +#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255'{}{'#255#0#0 + +#0#255#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255#128#128#128#255 + +#131#129#131#255#131#129#131#255#131#129#131#255#131#129#131#255#131#129#131 + +#255#131#129#131#255#131#129#131#255#131#129#131#255#131#129#131#255#131#129 + +#131#255#0#0#0#255#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255#0#0 + +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 + +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#255#255#0#255#128#128#128#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#0#0#0#255#255#255#0#255#128#128#128#255#255#255#0#255#0 + +#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255'{}{'#255#0#0#0#255#255#255#0#255#128#128#128#255#255#255#0 + +#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#131#129#131#255#0#0#0#255#255#255#0#255#128#128#128 + +#255#255#255#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#0#0#0#255#0#0#0#255#128#128#128#255#0#0#0#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#131'}'#131#255#0#0#0#255#255#255#0#255#128#128#128#255 + +#255#255#0#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0 + +#0#255#0#0#0#255#128#128#128#255#0#0#0#255#0#0#0#255#128#128#128#255#128#128 + +#128#255#131#129#131#255#0#0#0#255#255#255#0#255#128#128#128#255#255#255#0 + +#255#0#0#0#255#128#128#128#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0 + +#0#255#128#128#128#255#0#0#0#255#0#0#0#255#0#0#0#255#128#128#128#255'{}{'#255 + +#0#0#0#255#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#128#128#128#255#0#0 + ,#0#255#0#0#0#255#128#128#128#255#128#128#128#255#131#129#131#255#0#0#0#255 + +#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#0#0#0#255#0#0#0#255#128#128#128#255#0#0#0#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#131'}'#131#255#0#0#0#255#255 + +#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#131#129#131#255 + +#0#0#0#255#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255'{}{' + +#255#0#0#0#255#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0#255#128#128 + +#128#255#131#129#131#255#131#129#131#255#131#129#131#255#131#129#131#255#131 + +#129#131#255#131#129#131#255#131#129#131#255#131#129#131#255#131#129#131#255 + +#131#129#131#255#0#0#0#255#255#255#0#255#128#128#128#255#255#255#0#255#0#0#0 + +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 + +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#255#255#0#255#128#128#128 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#128#128 + +#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128 + +#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255 + +#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128#255#128#128#128 + +#255#128#128#128#255#128#128#128#255#0#0#11'TOpenDialog'#7'ODImage'#11'Filte' + +'rIndex'#2#0#7'Options'#11#18'ofAllowMultiSelect'#14'ofEnableSizing'#12'ofVi' + +'ewDetail'#0#4'left'#2'H'#3'top'#2'@'#0#0#11'TOpenDialog'#11'OpenDialog1'#11 + +'FilterIndex'#2#0#4'left'#2'H'#3'top'#2'h'#0#0#0 +]); diff --git a/applications/lazstats/source_orig/frmmain.pas b/applications/lazstats/source_orig/frmmain.pas new file mode 100644 index 000000000..656be0272 --- /dev/null +++ b/applications/lazstats/source_orig/frmmain.pas @@ -0,0 +1,500 @@ +{ + *************************************************************************** + * * + * This source is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This code is distributed in the hope that it will be useful, but * + * WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * + * General Public License for more details. * + * * + * A copy of the GNU General Public License is available on the World * + * Wide Web at . You can also * + * obtain it by writing to the Free Software Foundation, * + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * * + *************************************************************************** +} +unit frmmain; + +{$MODE Delphi} + +interface + +uses + LCLIntf,SysUtils, Classes, Graphics, Controls, Forms, FileUtil, + Dialogs, StdCtrls, ComCtrls, ExtCtrls, ActnList, Menus, + LResources, LCLType; + +type + TPicViewFrm = class(TForm) + MainMenu1: TMainMenu; + ToolBar1: TToolBar; + ActionList1: TActionList; + AOpen: TAction; + AOpenDir: TAction; + AExit: TAction; + LBFiles: TListBox; + SPImage: TSplitter; + File1: TMenuItem; + MIOpen: TMenuItem; + MIOPenDir: TMenuItem; + N1: TMenuItem; + MIQuit: TMenuItem; + TBOPen: TToolButton; + TBOpenDir: TToolButton; + ILMain: TImageList; + ODImage: TOpenDialog; + AClear: TAction; + MIOpenDirRec: TMenuItem; + MIClear: TMenuItem; + OpenDirRecursively: TAction; + TBOpenDirRec: TToolButton; + ADoubleSize: TAction; + MImage: TMenuItem; + D1: TMenuItem; + AHalfSize: TAction; + MIHalfSize: TMenuItem; + PImage: TPanel; + ScrollBox1: TScrollBox; + IMain: TImage; + ANextImage: TAction; + APreviousImage: TAction; + ANextImageDir: TAction; + APrevImageDir: TAction; + MINextImage: TMenuItem; + PreviousImage1: TMenuItem; + Nextimagedirectory1: TMenuItem; + Previousimagedirectory1: TMenuItem; + ToolButton4: TToolButton; + TBPRev: TToolButton; + TBNext: TToolButton; + TBPRevDir: TToolButton; + TBNextDir: TToolButton; + TBDoubleSize: TToolButton; + TBHalfSize: TToolButton; + ToolButton3: TToolButton; + N2: TMenuItem; + OpenDialog1: TOpenDialog; + procedure AOpenExecute(Sender: TObject); + procedure LBFilesClick(Sender: TObject); + procedure AOpenDirExecute(Sender: TObject); + procedure AExitExecute(Sender: TObject); + procedure OpenDirRecursivelyExecute(Sender: TObject); + procedure AClearExecute(Sender: TObject); + procedure ADoubleSizeExecute(Sender: TObject); + procedure AHalfSizeExecute(Sender: TObject); + procedure FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure FormShow(Sender: TObject); + procedure ANextImageExecute(Sender: TObject); + procedure APreviousImageExecute(Sender: TObject); + procedure ANextImageDirExecute(Sender: TObject); + procedure APrevImageDirExecute(Sender: TObject); + private + FImageScale : Double; + procedure AddFile(FileName: String; ShowFile: Boolean); + procedure ShowFile(Index: Integer); + procedure AddDir(Directory: String; Recurse: Boolean); + procedure RescaleImage(NewScale: Double); + procedure NextImage; + procedure PreviousImage; + procedure NextImageDir; + procedure PreviousImageDir; + Function NextDirIndex(Direction : Integer) : Integer; + procedure ShiftImageIndex(MoveBy: Integer); + procedure ProcessCommandLine; + procedure DoError(Msg: String; Args: array of const); + { Private declarations } + public + { Public declarations } + end; + +var + PicViewFrm: TPicViewFrm; + +implementation + +Const + ImageTypes = '.jpg.jpeg.bmp.xpm.png'; + +resourcestring + SSelectImageDir = 'Select directory to add images from'; + SSelectImageDirRec = 'Select directory to recursively add images from'; + SImageViewer = 'Image viewer'; + SErrNeedArgument = 'Option at position%d (%s) needs an argument'; + +{ [] } +procedure TPicViewFrm.AOpenExecute(Sender: TObject); + +Var + I : Integer; + +begin + With ODImage do + begin + If Execute then + for I:=0 to Files.Count-1 do + AddFile(Files[I],(I=0)) + end; +end; + +procedure TPicViewFrm.AddFile(FileName :String; ShowFile : Boolean); + +Var + Index : Integer; + +begin + ShowFile:=ShowFile or (LBFiles.Items.Count=0); + Index:=LBFiles.Items.Add(FileName); + If ShowFile then + self.ShowFile(Index); +end; + +procedure TPicViewFrm.ShowFile(Index : Integer); + +Var + LoadOK : Boolean; + +begin + If Index=-1 then + begin + IMain.Picture:=Nil; + Caption:=SImageViewer; + end + else + Repeat + Try + LoadOK:=False; + IMain.Align:=AlClient; + Imain.Stretch:=False; + FImageScale:=1.0; + IMain.Picture.LoadFromFile(LBFiles.Items[Index]); + Caption:=SImageViewer+'('+LBFiles.Items[Index]+')'; + LoadOK:=True; + Except + If IndexItemIndex then + LBFiles.Itemindex:=Index; +{ If Not ItemVisible(ItemIndex) then + MakeCurrentVisible;} + end; +end; + +procedure TPicViewFrm.LBFilesClick(Sender: TObject); +begin + ShowFile(LBFiles.ItemIndex); +end; + +procedure TPicViewFrm.AOpenDirExecute(Sender: TObject); + +Var + Dir : String; + +begin + if SelectDirectory(SSelectImageDir,'/',Dir) then + +// if SelectDirectory(SSelectImageDir,'/',Dir,True) then + AddDir(Dir,False); +end; + +procedure TPicViewFrm.AddDir(Directory :String; Recurse : Boolean); + +Var + Info : TSearchRec; + Ext : String; +begin + LBFiles.Items.BeginUpdate; + Try + Directory:=IncludeTrailingBackslash(Directory); + if FindFirstUTF8(Directory+'*.*',0,Info)=0 then + try + Repeat + Ext:=ExtractFileExt(Info.Name); + If Pos(Ext,ImageTypes)<>0 then + AddFile(Directory+Info.Name,False); + until (FindNextUTF8(Info)<>0) + Finally + FindCloseUTF8(Info); + end; + If Recurse then + if FindFirstUTF8(Directory+'*',faDirectory,Info)=0 then + try + Repeat + If (Info.Name<>'.') and (Info.Name<>'') and (info.name<>'..') and + ((Info.Attr and faDirectory)<>0) then + AddDir(Directory+Info.name,True); + until (FindNextUTF8(Info)<>0) + finally + FindCloseUTF8(Info); + end; + Finally + LBFiles.Items.EndUpdate; + end; +end; + +procedure TPicViewFrm.AExitExecute(Sender: TObject); +begin + Close; +end; + +procedure TPicViewFrm.OpenDirRecursivelyExecute(Sender: TObject); + +Var + Dir : String; + +begin + if SelectDirectory(SSelectImageDirRec,'/',Dir) then + AddDir(Dir,True); +end; + +procedure TPicViewFrm.AClearExecute(Sender: TObject); +begin + LBFiles.ItemIndex:=-1; + ShowFile(-1); + LBFiles.Items.Clear; +end; + +procedure TPicViewFrm.ADoubleSizeExecute(Sender: TObject); + +begin + RescaleImage(2.0); +end; + +procedure TPicViewFrm.RescaleImage(NewScale : Double); + +Var + OrgWidth,OrgHeight : Integer; + Rect : TRect; + +begin + OrgWidth:=IMain.Picture.Bitmap.Width; + OrgHeight:=IMain.Picture.Bitmap.Height; + FImageScale:=FImageScale*NewScale; + Rect:=IMain.BoundsRect; + Rect.Right:=Rect.Left+Round(OrgWidth*FImageScale); + Rect.Bottom:=Rect.Top+Round(OrgHeight*FImageScale); + Imain.Align:=AlNone; + IMain.BoundsRect:=Rect; + Imain.Stretch:=True; +end; + +procedure TPicViewFrm.AHalfSizeExecute(Sender: TObject); +begin + RescaleImage(0.5); +end; + +procedure TPicViewFrm.NextImage; + +begin + ShiftImageIndex(1); +end; + +procedure TPicViewFrm.PreviousImage; + +begin + ShiftImageIndex(-1); +end; + +procedure TPicViewFrm.ShiftImageIndex(MoveBy : Integer); + +Var + ImageIndex : Integer; + +begin + ImageIndex:=LBFiles.ItemIndex; + ImageIndex:=ImageIndex+MoveBy; + If ImageIndex<0 then + ImageIndex:=LBFiles.Items.Count-1; + If ImageIndex>=LBFiles.Items.Count then + begin + ImageIndex:=0; + If LBFiles.Items.Count=0 then + ImageIndex:=-1; + end; + ShowFile(ImageIndex); +end; + +procedure TPicViewFrm.FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if (shift=[ssShift]) or (shift=[ssAlt]) then + begin + if (key=VK_Prior) then + begin + RescaleImage(2.0); + Key:=0; + end + else if (key=VK_Next) then + begin + RescaleImage(0.5); + Key:=0; + end + else if (key=VK_Left) then + begin + PreviousImage; + Key:=0; + end + else if (key=VK_right) then + begin + NextImage; + Key:=0; + end + end + else if (shift=[]) then + begin + if Key=VK_UP then + Previousimage + else if Key=VK_DOWN then + NextImage; + end; +end; +procedure TPicViewFrm.DoError(Msg : String; Args : Array Of const); + +begin + ShowMessage(Format(Msg,Args)); +end; + +procedure TPicViewFrm.ProcessCommandLine; + + Function CheckOption(Index : Integer;Short,Long : String): Boolean; + + var + O : String; + + begin + O:=ParamStrUTF8(Index); + Result:=(O='-'+short) or (copy(O,1,Length(Long)+3)=('--'+long+'=')); + end; + + Function OptionArg(Var Index : Integer) : String; + + Var + P : Integer; + + begin + if (Length(ParamStrUTF8(Index))>1) and (ParamStrUTF8(Index)[2]<>'-') then + begin + If Index2 then + begin + P:=Pos('=',ParamStrUTF8(Index)); + If (P=0) then + DoError(SErrNeedArgument,[Index,ParamStrUTF8(Index)]) + else + begin + Result:=ParamStrUTF8(Index); + Delete(Result,1,P); + end; + end; + end; + +Var + I : Integer; + S : String; + FRecursive : Boolean; + +begin + FRecursive:=False; + I:=0; + While (I-1) then + ShowFile(Index); +end; + +Function TPicViewFrm.NextDirIndex(Direction: Integer) : integer; + +Var + Dir : String; + +begin + Result:=-1; + If LBFiles.Itemindex=-1 then + Exit; + Result:=LBFiles.Itemindex; + Dir:=ExtractFilePath(LBFiles.Items[Result]); + Repeat + Result:=Result+Direction; + Until ((Result=-1) or (Result>=LBFiles.Items.Count)) or (Dir<>ExtractFilePath(LBFiles.Items[Result])); + If Result>=LBFiles.Items.Count then + Result:=-1; +end; + +procedure TPicViewFrm.PreviousImageDir; +Var + Index : Integer; + +begin + Index:=NextDirIndex(-1); + If (Index<>-1) then + ShowFile(Index); +end; + +procedure TPicViewFrm.ANextImageExecute(Sender: TObject); +begin + NextImage; +end; + +procedure TPicViewFrm.APreviousImageExecute(Sender: TObject); +begin + PreviousImage +end; + +procedure TPicViewFrm.ANextImageDirExecute(Sender: TObject); +begin + NextImageDir; +end; + +procedure TPicViewFrm.APrevImageDirExecute(Sender: TObject); +begin + PreviousImageDir; +end; + +initialization + {$i frmmain.lrs} + +end. diff --git a/applications/lazstats/source_orig/functionslib.pas b/applications/lazstats/source_orig/functionslib.pas new file mode 100644 index 000000000..f81697a76 --- /dev/null +++ b/applications/lazstats/source_orig/functionslib.pas @@ -0,0 +1,2461 @@ +unit FunctionsLib; + +{$mode objfpc}{$H+} + +interface + +uses + Forms, Controls, LResources, ExtCtrls, StdCtrls, Classes, SysUtils, Globals, + Graphics, Dialogs, Math, MainUnit, OutPutUnit, dataprocs; + +function chisquaredprob(X : double; k : integer) : double; +function gammln(xx : double) : double; +PROCEDURE matinv(VAR a, vtimesw, v, w: DblDyneMat; n: integer); +FUNCTION sign(a,b: double): double; +FUNCTION isign(a,b : integer): integer; +FUNCTION max(a,b: double): double; +function inversez(prob : double) : double; +function zprob(p : double; VAR errorstate : boolean) : double; +function probz(z : double) : double; +function simpsonintegral(a,b : real) : real; +function zdensity(z : real) : real; +function probf(f,df1,df2 : extended) : extended; +FUNCTION alnorm(x : double; upper : boolean): double; +procedure ppnd7 (p : double; VAR normal_dev : double; VAR ifault : integer); +FUNCTION poly(c : Array of double; nord : integer; x : double): double; // RESULT(fn_val) +procedure swilk (var init : boolean; var x : DblDyneVec; n : integer; n1 : integer; + n2 : integer; var a : DblDyneVec; var w : double; var pw : double; var ifault : integer); +procedure SVDinverse(VAR a : DblDyneMat; N : integer); +function probt(t,df1 : double) : double; +function inverset(Probt, DF : double) : double; +function inversechi(p : double; k : integer) : double; +function STUDENT(q,v,r : real) : real; +function realraise(base,power : double ): double; +function fpercentpoint(p : real; k1,k2 : integer) : real; +function lngamma(w : real) : real; +function betaratio(x,a,b,lnbeta : real) : real; +function inversebetaratio(ratio,a,b,lnbeta : real) : real; +function ProdSums(N, A : double) : double; +function combos(X, N : double) : double; +function ordinate(z : double) : double; +procedure Rank(v1col : integer; VAR Values : DblDyneVec); +procedure PRank(v1col : integer; VAR Values : DblDyneVec); +function UniStats(N : integer; VAR X : DblDyneVec; VAR z : DblDyneVec; + VAR Mean : double; VAR variance : double; VAR SD : double; + VAR Skew : double; VAR Kurtosis : double; VAR SEmean : double; + VAR SESkew : double; VAR SEkurtosis : double; VAR min : double; + VAR max : double; VAR Range : double; VAR MissValue : string) : + integer; +function WholeValue(value : double) : double; +function FractionValue(value : double) : double; +function Quartiles(TypeQ : integer; pcntile : double; N : integer; + VAR values : DblDyneVec) : double; +function KolmogorovProb(z : double) : double; +function KolmogorovTest(na : integer; VAR a : DblDyneVec; nb : integer; + VAR b : DblDyneVec; option : String) : double; +procedure poisson_cdf ( x : integer; a : double; VAR cdf : double ); +procedure poisson_cdf_values (VAR n : integer; VAR a : double; VAR x : integer; + VAR fx : double ); +procedure poisson_cdf_inv (VAR cdf : double; VAR a : double; VAR x : integer ); +procedure poisson_check ( a : double ); +function factorial(x : integer) : integer; +procedure poisson_pdf ( x : integer; VAR a : double; VAR pdf : double ); + +implementation +function chisquaredprob(X : double; k : integer) : double; +var + factor : double; // factor which multiplies sum of series + g : double; // lngamma(k1+1) + k1 : double; // adjusted degrees of freedom + sum : double; // temporary storage for partial sums + term : double; // term of series + x1 : double; // adjusted argument of funtion + chi2prob : double; // chi-squared probability +begin + // the distribution function of the chi-squared distribution based on k d.f. + if (X < 0.01) or (X > 1000.0) then + begin + if X < 0.01 then chi2prob := 0.0001 + else chi2prob := 0.999; + end + else + begin + x1 := 0.5 * X; + k1 := 0.5 * k; + g := gammln(k1 + 1); + factor := exp(k1 * ln(x1) - g - x1); + sum := 0.0; + if factor > 0 then + begin + term := 1.0; + sum := 1.0; + while ((term / sum) > 0.000001) do + begin + k1 := k1 + 1; + term := term * (x1 / k1); + sum := sum + term; + end; + end; + chi2prob := sum * factor; + end; //end if .. else + Result := chi2prob; +end; +//--------------------------------------------------------------------- + +function gammln(xx : double) : double; +var + X, tmp, ser : double; + cof : array[0..5] of double; + j : integer; + +begin + cof[0] := 76.18009173; + cof[1] := -86.50532033; + cof[2] := 24.01409822; + cof[3] := -1.231739516; + cof[4] := 0.00120858003; + cof[5] := -0.00000536382; + + X := xx - 1.0; + tmp := X + 5.5; + tmp := tmp - ((X + 0.5) * ln(tmp)); + ser := 1.0; + for j := 0 to 5 do + begin + X := X + 1.0; + ser := ser + cof[j] / X; + end; + Result := ( -tmp + ln(2.50662827465 * ser) ); +end; +//------------------------------------------------------------------- + +PROCEDURE matinv(VAR a, vtimesw, v, w: DblDyneMat; n: integer); +(* adapted from the singular value decomposition of a matrix *) +(* a is a symetric matrix with the inverse returned in a *) + +LABEL 1,2,3; + +VAR +// vtimesw, v, ainverse : matrix; +// w : vector; + ainverse : array of array of double; + m, nm,l,k,j,its,i: integer; + z,y,x,scale,s,h,g,f,c,anorm: double; + rv1: array of double; + +BEGIN + setlength(rv1,n); + setlength(ainverse,n,n); + m := n; +// mp := n; +// np := n; + g := 0.0; + scale := 0.0; + anorm := 0.0; + FOR i := 0 to n-1 DO BEGIN + l := i+1; + rv1[i] := scale*g; + g := 0.0; + s := 0.0; + scale := 0.0; + IF (i <= m-1) THEN BEGIN + FOR k := i to m-1 DO BEGIN + scale := scale+abs(a[k,i]) + END; + IF (scale <> 0.0) THEN BEGIN + FOR k := i to m-1 DO BEGIN + a[k,i] := a[k,i]/scale; + s := s+a[k,i]*a[k,i] + END; + f := a[i,i]; + g := -sign(sqrt(s),f); + h := f*g-s; + a[i,i] := f-g; + IF (i <> n-1) THEN BEGIN + FOR j := l to n-1 DO BEGIN + s := 0.0; + FOR k := i to m-1 DO BEGIN + s := s+a[k,i]*a[k,j] + END; + f := s/h; + FOR k := i to m-1 DO BEGIN + a[k,j] := a[k,j]+ + f*a[k,i] + END + END + END; + FOR k := i to m-1 DO BEGIN + a[k,i] := scale*a[k,i] + END + END + END; + w[i,i] := scale*g; + g := 0.0; + s := 0.0; + scale := 0.0; + IF ((i <= m-1) AND (i <> n-1)) THEN BEGIN + FOR k := l to n-1 DO BEGIN + scale := scale+abs(a[i,k]) + END; + IF (scale <> 0.0) THEN BEGIN + FOR k := l to n-1 DO BEGIN + a[i,k] := a[i,k]/scale; + s := s+a[i,k]*a[i,k] + END; + f := a[i,l]; + g := -sign(sqrt(s),f); + h := f*g-s; + a[i,l] := f-g; + FOR k := l to n-1 DO BEGIN + rv1[k] := a[i,k]/h + END; + IF (i <> m-1) THEN BEGIN + FOR j := l to m-1 DO BEGIN + s := 0.0; + FOR k := l to n-1 DO BEGIN + s := s+a[j,k]*a[i,k] + END; + FOR k := l to n-1 DO BEGIN + a[j,k] := a[j,k] + +s*rv1[k] + END + END + END; + FOR k := l to n-1 DO BEGIN + a[i,k] := scale*a[i,k] + END + END + END; + anorm := max(anorm,(abs(w[i,i])+abs(rv1[i]))) + END; + FOR i := n-1 DOWNTO 0 DO BEGIN + IF (i < n-1) THEN BEGIN + IF (g <> 0.0) THEN BEGIN + FOR j := l to n-1 DO BEGIN + v[j,i] := (a[i,j]/a[i,l])/g + END; + FOR j := l to n-1 DO BEGIN + s := 0.0; + FOR k := l to n-1 DO BEGIN + s := s+a[i,k]*v[k,j] + END; + FOR k := l to n-1 DO BEGIN + v[k,j] := v[k,j]+s*v[k,i] + END + END + END; + FOR j := l to n-1 DO BEGIN + v[i,j] := 0.0; + v[j,i] := 0.0 + END + END; + v[i,i] := 1.0; + g := rv1[i]; + l := i + END; + FOR i := n-1 DOWNTO 0 DO BEGIN + l := i+1; + g := w[i,i]; + IF (i < n-1) THEN BEGIN + FOR j := l to n-1 DO BEGIN + a[i,j] := 0.0 + END + END; + IF (g <> 0.0) THEN BEGIN + g := 1.0/g; + IF (i <> n-1) THEN BEGIN + FOR j := l to n-1 DO BEGIN + s := 0.0; + FOR k := l to m-1 DO BEGIN + s := s+a[k,i]*a[k,j] + END; + f := (s/a[i,i])*g; + FOR k := i to m-1 DO BEGIN + a[k,j] := a[k,j]+f*a[k,i] + END + END + END; + FOR j := i to m-1 DO BEGIN + a[j,i] := a[j,i]*g + END + END ELSE BEGIN + FOR j := i to m-1 DO BEGIN + a[j,i] := 0.0 + END + END; + a[i,i] := a[i,i]+1.0 + END; + FOR k := n-1 DOWNTO 0 DO BEGIN + FOR its := 1 to 30 DO BEGIN + FOR l := k DOWNTO 0 DO BEGIN + nm := l-1; + IF ((abs(rv1[l])+anorm) = anorm) THEN GOTO 2; + IF ((abs(w[nm,nm])+anorm) = anorm) THEN GOTO 1 + END; +1: +// c := 0.0; + s := 1.0; + FOR i := l to k DO BEGIN + f := s*rv1[i]; + IF ((abs(f)+anorm) <> anorm) THEN BEGIN + g := w[i,i]; + h := sqrt(f*f+g*g); + w[i,i] := h; + h := 1.0/h; + c := (g*h); + s := -(f*h); + FOR j := 0 to m-1 DO BEGIN + y := a[j,nm]; + z := a[j,i]; + a[j,nm] := (y*c)+(z*s); + a[j,i] := -(y*s)+(z*c) + END + END + END; +2: z := w[k,k]; + IF (l = k) THEN BEGIN + IF (z < 0.0) THEN BEGIN + w[k,k] := -z; + FOR j := 0 to n-1 DO BEGIN + v[j,k] := -v[j,k] + END + END; + GOTO 3 + END; + IF (its = 30) THEN BEGIN + { showmessage('No convergence in 30 SVDCMP iterations');} + exit; + END; + x := w[l,l]; + nm := k-1; + y := w[nm,nm]; + g := rv1[nm]; + h := rv1[k]; + f := ((y-z)*(y+z)+(g-h)*(g+h))/(2.0*h*y); + g := sqrt(f*f+1.0); + f := ((x-z)*(x+z)+h*((y/(f+sign(g,f)))-h))/x; + c := 1.0; + s := 1.0; + FOR j := l to nm DO BEGIN + i := j+1; + g := rv1[i]; + y := w[i,i]; + h := s*g; + g := c*g; + z := sqrt(f*f+h*h); + rv1[j] := z; + c := f/z; + s := h/z; + f := (x*c)+(g*s); + g := -(x*s)+(g*c); + h := y*s; + y := y*c; + FOR nm := 0 to n-1 DO BEGIN + x := v[nm,j]; + z := v[nm,i]; + v[nm,j] := (x*c)+(z*s); + v[nm,i] := -(x*s)+(z*c) + END; + z := sqrt(f*f+h*h); + w[j,j] := z; + IF (z <> 0.0) THEN BEGIN + z := 1.0/z; + c := f*z; + s := h*z + END; + f := (c*g)+(s*y); + x := -(s*g)+(c*y); + FOR nm := 0 to m-1 DO BEGIN + y := a[nm,j]; + z := a[nm,i]; + a[nm,j] := (y*c)+(z*s); + a[nm,i] := -(y*s)+(z*c) + END + END; + rv1[l] := 0.0; + rv1[k] := f; + w[k,k] := x + END; +3: END; +{ mat_print(m,a,'U matrix'); + mat_print(n,v,'V matrix'); + writeln(lst,'Diagonal values of W inverse matrix'); + for i := 1 to n do + write(lst,1/w[i]:6:3); + writeln(lst); } + for i := 0 to n-1 do + for j := 0 to n-1 do + begin + if w[j,j] < 1.0e-6 then vtimesw[i,j] := 0 + else vtimesw[i,j] := v[i,j] * (1.0 / w[j,j] ); + end; +{ mat_print(n,vtimesw,'V matrix times w inverse '); } + for i := 0 to m-1 do + for j := 0 to n-1 do + begin + ainverse[i,j] := 0.0; + for k := 0 to m-1 do + begin + ainverse[i,j] := ainverse[i,j] + vtimesw[i,k] * a[j,k] + end; + end; +{ mat_print(n,ainverse,'Inverse Matrix'); } + for i := 0 to n-1 do + for j := 0 to n-1 do + a[i,j] := ainverse[i,j]; + ainverse := nil; + rv1 := nil; +END; +//------------------------------------------------------------------- + +FUNCTION sign(a,b: double): double; +BEGIN + IF (b >= 0.0) THEN sign := abs(a) ELSE sign := -abs(a) +END; +//------------------------------------------------------------------- + +FUNCTION isign(a,b : integer): integer; +BEGIN + IF (b >= 0) then isign := abs(a) ELSE isign := -abs(a) +END; +//------------------------------------------------------------------- + +FUNCTION max(a,b: double): double; +BEGIN + IF (a > b) THEN max := a ELSE max := b +END; +//------------------------------------------------------------------- + +function inversez(prob : double) : double; +var + z, p : double; + flag : boolean; +begin + // obtains the inverse of z, that is, the z for a probability associated + // with a normally distributed z score. + p := prob; + if (prob > 0.5) then p := 1.0 - prob; + z := zprob(p,flag); + if (prob > 0.5) then z := abs(z); + inversez := z; +end; //End of inversez Function +//------------------------------------------------------------------- + +function zprob(p : double; VAR errorstate : boolean) : double; +VAR + z, xp, lim, p0, p1, p2, p3, p4, q0, q1, q2, q3, q4, Y : double; +begin + // value of probability between approx. 0 and .5 entered in p and the + // z value is returned z + errorstate := true; + lim := 1E-19; + p0 := -0.322232431088; + p1 := -1.0; + p2 := -0.342242088547; + p3 := -0.0204231210245; + p4 := -4.53642210148E-05; + q0 := 0.099348462606; + q1 := 0.588581570495; + q2 := 0.531103462366; + q3 := 0.10353775285; + q4 := 0.0038560700634; + xp := 0.0; + if (p > 0.5) then p := 1 - p; + if (p < lim) then z := xp + else + begin + errorstate := false; + if (p = 0.5) then z := xp + else + begin + Y := sqrt(ln(1.0 / (p * p))); + xp := Y + ((((Y * p4 + p3) * Y + p2) * Y + p1) * Y + p0) / + ((((Y * q4 + q3) * Y + q2) * Y + q1) * Y + q0); + if (p < 0.5) then xp := -xp; + z := xp; + end; + end; + zprob := z; +end; // End function zprob +//------------------------------------------------------------------- + +function probz(z : double) : double; +(* the distribution function of the standard normal distribution derived *) +(* by integration using simpson's rule . *) + +begin + Result := 0.5 + simpsonintegral(0.0,z); +end; +//----------------------------------------------------------------------- + +function simpsonintegral(a,b : real) : real; +(* integrates the function f from lower a to upper limit b choosing an *) +(* interval length so that the error is less than a given amount - *) +(* the default value is 1.0e-06 *) +const error = 1.0e-4 ; + +var h : real; (* current length of interval *) + i : integer; (* counter *) + integral : real; (* current approximation to integral *) + lastint : real; (* previous approximation *) + n : integer; (* no. of intervals *) + sum1,sum2,sum4 : real; (* sums of function values *) + +begin + n := 2 ; h := 0.5 * (b - a); + sum1 := h * (zdensity(a) + zdensity(b) ); + sum2 := 0; + sum4 := zdensity( 0.5 * (a + b)); + integral := h * (sum1 + 4 * sum4); + repeat + lastint := integral; n := n + n; h := 0.5*h; + sum2 := sum2 + sum4; + sum4 := 0; i := 1; + repeat + sum4 := sum4 + zdensity(a + i*h); + i := i + 2 + until i > n; + integral := h * (sum1 + 2*sum2 + 4*sum4); + until abs(integral - lastint) < error; + simpsonintegral := integral/3 +end; (* of SimpsonIntegral *) +//--------------------------------------------------------------------- + +function zdensity(z : real) : real; +(* the density function of the standard normal distribution *) +const a = 0.39894228; (* 1 / sqrt(2*pi) *) + +begin + Result := a * exp(-0.5 * z*z ) +end; (* of normal *) +//---------------------------------------------------------------------- + + +function probf(f,df1,df2 : extended) : extended; +var + term1, term2, term3, term4, term5, term6 : extended; + +FUNCTION gammln(xx: extended): extended; + +CONST + stp = 2.50662827465; +// half = 0.5; + one = 1.0; + fpf = 5.5; + +VAR + x,tmp,ser: double; + j: integer; + cof: ARRAY [1..6] OF extended; + +BEGIN + cof[1] := 76.18009173; + cof[2] := -86.50532033; + cof[3] := 24.01409822; + cof[4] := -1.231739516; + cof[5] := 0.120858003e-2; + cof[6] := -0.536382e-5; + x := xx - 1.0; + tmp := x + fpf; + term1 := ln(tmp); + term2 := (x + 0.5) * term1; + tmp := term2 - tmp; + ser := one; + FOR j := 1 to 6 DO BEGIN + x := x + 1.0; + ser := ser + cof[j] / x + END; + gammln := tmp +ln(stp * ser) +END; +//----------------------------------------------------------------- + +FUNCTION betacf(a,b,x: double): extended; +LABEL 1; +CONST + itmax=100; + eps=3.0e-7; +VAR + tem,qap,qam,qab,em,d: extended; + bz,bpp,bp,bm,az,app: extended; + am,aold,ap: extended; + m: integer; + +BEGIN + am := 1.0; + bm := 1.0; + az := 1.0; + qab := a+b; + qap := a+1.0; + qam := a-1.0; + bz := 1.0 - qab * x / qap; + FOR m := 1 to itmax DO BEGIN + em := m; + tem := em+em; + d := em * (b - m) * x / ((qam + tem) * (a + tem)); + ap := az + d * am; + bp := bz + d * bm; + term1 := -(a + em); + term2 := qab + em; + term3 := term1 * term2 * x; + term4 := a + tem; + term5 := qap + tem; + term6 := term4 * term5; + d := term3 / term6; + app := ap + d * az; + bpp := bp + d * bz; + aold := az; + am := ap/bpp; + bm := bp/bpp; + az := app/bpp; + bz := 1.0; + IF ((abs(az-aold)) < (eps*abs(az))) THEN GOTO 1 + END; + { ShowMessage('WARNING! a or b too big, or itmax too small in betacf');} +1: betacf := az +END; + +FUNCTION betai(a,b,x: extended): extended; +VAR + bt: extended; +BEGIN + IF ((x <= 0.0) OR (x >= 1.0)) THEN BEGIN + { ShowMessage('ERROR! Problem in routine BETAI');} + betai := 0.5; + exit; + END; + IF ((x <= 0.0) OR (x >= 1.0)) THEN bt := 0.0 + ELSE + begin + term1 := gammln(a + b) - + gammln(a) - gammln(b); + term2 := a * ln(x); + term3 := b * ln(1.0 - x); + term4 := term1 + term2 + term3; + bt := exp(term4); + term5 := (a + 1.0) / (a + b + 2.0); + end; + IF x < term5 then betai := bt * betacf(a,b,x) / a + ELSE betai := 1.0 - bt * betacf(b,a,1.0-x) / b +END; + +begin { fprob function } + if f <= 0.0 then probf := 1.0 else + probf := (betai(0.5*df2,0.5*df1,df2/(df2+df1*f)) + + (1.0-betai(0.5*df1,0.5*df2,df1/(df1+df2/f))))/2.0; +end; // of fprob function +//-------------------------------------------------------------------- + +FUNCTION alnorm(x : double; upper : boolean): double; +// Algorithm AS66 Applied Statistics (1973) vol.22, no.3 +// Evaluates the tail area of the standardised normal curve +// from x to infinity if upper is .true. or +// from minus infinity to x if upper is .false. +// ELF90-compatible version by Alan Miller +// Latest revision - 29 November 1997 + +label L10, L20, L30, L40; +var + fn_val : double; +// sp : integer; + zero, one, half, con : double; + z, y : double; + up : boolean; + ltone, utzero : double; + p, q, r, a1, a2, a3, b1, b2, c1, c2, c3, c4, c5, c6 : double; + d1, d2, d3, d4, d5 : double; + +begin + zero := 0.0; + one := 1.0; + half := 0.5; + con := 1.28; + ltone := 7.0; + utzero := 18.66; + p := 0.398942280444; + q := 0.39990348504; + r := 0.398942280385; + a1 := 5.75885480458; + a2 := 2.62433121679; + a3 := 5.92885724438; + b1 := -29.8213557807; + b2 := 48.6959930692; + c1 := -3.8052E-8; + c2 := 3.98064794E-4; + c3 := -0.151679116635; + c4 := 4.8385912808; + c5 := 0.742380924027; + c6 := 3.99019417011; + d1 := 1.00000615302; + d2 := 1.98615381364; + d3 := 5.29330324926; + d4 := -15.1508972451; + d5 := 30.789933034; + up := upper; + z := x; + IF(z >= zero) then GOTO L10; + up := NOT up; + z := -z; +L10 : + IF ((z <= ltone) OR (up) AND (z <= utzero)) then GOTO L20; + fn_val := zero; + GOTO L40; +L20 : + y := half*z*z; + IF(z > con) then GOTO L30; + + fn_val := half - z*(p-q*y/(y+a1+b1/(y+a2+b2/(y+a3)))); + GOTO L40; +L30 : + fn_val := r*EXP(-y)/(z+c1+d1/(z+c2+d2/(z+c3+d3/(z+c4+d4/(z+c5+d5/(z+c6)))))); +L40 : + IF(NOT up) then fn_val := one - fn_val; + + result := fn_val; +END; // FUNCTION alnorm +//----------------------------------------------------------------------------------- + +procedure ppnd7 (p : double; VAR normal_dev : double; VAR ifault : integer); +// ALGORITHM AS241 APPL. STATIST. (1988) VOL. 37, NO. 3, 477- 484. +// Produces the normal deviate Z corresponding to a given lower tail area of P; +// Z is accurate to about 1 part in 10**7. + +// This ELF90-compatible version by Alan Miller - 20 August 1996 +// N.B. The original algorithm is as a function; this is a subroutine + +var + zero, one, half, split1, split2, const1, const2, q, r : double; + a0, a1, a2, a3, b1, b2, b3 : double; + c0, c1, c2, c3, d1, d2 : double; + e0, e1, e2, e3, f1, f2 : double; + +begin + zero := 0.0; + one := 1.0; + half := 0.5; + split1 := 0.425; + split2 := 5.0; + const1 := 0.180625; + const2 := 1.6; + a0 := 3.3871327179E+00; + a1 := 5.0434271938E+01; + a2 := 1.5929113202E+02; + a3 := 5.9109374720E+01; + b1 := 1.7895169469E+01; + b2 := 7.8757757664E+01; + b3 := 6.7187563600E+01; + c0 := 1.4234372777E+00; + c1 := 2.7568153900E+00; + c2 := 1.3067284816E+00; + c3 := 1.7023821103E-01; + d1 := 7.3700164250E-01; + d2 := 1.2021132975E-01; + e0 := 6.6579051150E+00; + e1 := 3.0812263860E+00; + e2 := 4.2868294337E-01; + e3 := 1.7337203997E-02; + f1 := 2.4197894225E-01; + f2 := 1.2258202635E-02; + ifault := 0; + q := p - half; + IF (ABS(q) <= split1) THEN + begin + r := const1 - q * q; + normal_dev := q * (((a3 * r + a2) * r + a1) * r + a0) / (((b3 * r + b2) * r + b1) * r + one); + exit; // RETURN + end + ELSE begin + IF (q < zero) THEN r := p ELSE r := one - p; + IF (r <= zero) THEN + begin + ifault := 1; + normal_dev := zero; + exit; //RETURN + END; // IF + r := SQRT(-ln(r)); + IF (r <= split2) THEN + begin + r := r - const2; + normal_dev := (((c3 * r + c2) * r + c1) * r + c0) / ((d2 * r + d1) * r + one); + end + ELSE begin + r := r - split2; + normal_dev := (((e3 * r + e2) * r + e1) * r + e0) / ((f2 * r + f1) * r + one); + END; // IF + IF (q < zero) then normal_dev := - normal_dev; + exit; + end; // if +end; // procedure ppnd7 +//--------------------------------------------------------------------- + +FUNCTION poly(c : Array of double; nord : integer; x : double): double; // RESULT(fn_val) +// Algorithm AS 181.2 Appl. Statist. (1982) Vol. 31, No. 2 +// Calculates the algebraic polynomial of order nored-1 with +// array of coefficients c. Zero order coefficient is c(1) +label 20; +var + fn_val, p : double; + i, j, n2 : integer; + c2 : array[1..6] of double; +begin + // copy into array for access starting at 1 instead of zero + for i := 1 to nord do c2[i] := c[i-1]; + + fn_val := c2[1]; + IF (nord = 1) then + begin + result := fn_val; + exit; // RETURN + end; + p := x * c2[nord]; + IF (nord = 2) then GOTO 20; + n2 := nord - 2; + j := n2 + 1; + for i := 1 to n2 do + begin + p := (p + c2[j])*x; + j := j - 1; + END; // DO +20: fn_val := fn_val + p; + + result := fn_val; +END; // FUNCTION poly +//----------------------------------------------------------------------- + +procedure swilk (var init : boolean; var x : DblDyneVec; n : integer; n1 : integer; + n2 : integer; var a : DblDyneVec; var w : double; var pw : double; var ifault : integer); + +label 70; +// ALGORITHM AS R94 APPL. STATIST. (1995) VOL.44, NO.4 +// Calculates the Shapiro-Wilk W test and its significance level + +// ARGUMENTS: +// INIT Set to .FALSE. on the first call so that weights A(N2) can be +// calculated. Set to .TRUE. on exit unless IFAULT = 1 or 3. +// X(N1) Sample values in ascending order. +// N The total sample size (including any right-censored values). +// N1 The number of uncensored cases (N1 <= N). +// N2 Integer part of N/2. +// A(N2) The calculated weights. +// W The Shapiro-Wilks W-statistic. +// PW The P-value for W. +// IFAULT Error indicator: +// = 0 for no error +// = 1 if N1 < 3 +// = 2 if N > 5000 (a non-fatal error) +// = 3 if N2 < N/2 +// = 4 if N1 > N or (N1 < N and N < 20). +// = 5 if the proportion censored (N - N1)/N > 0.8. +// = 6 if the data have zero range. +// = 7 if the X's are not sorted in increasing order + +// Fortran 90 version by Alan.Miller @ vic.cmis.csiro.au +// Latest revision - 4 December 1998 + +var + summ2, ssumm2, fac, rsn, an, an25, a1, a2, delta, range : double; + sa, sx, ssx, ssa, sax, asa, xsx, ssassx, w1, y, xx, xi : double; + gamma, m, s, ld, bf, z90f, z95f, z99f, zfm, zsd, zbar : double; + ncens, nn2, i, i1, j : integer; + upper : boolean; + c1 : array[1..6] of double; // = [0.0, 0.221157, -0.147981, -2.07119, 4.434685, -2.706056]; + c2 : array[1..6] of double; // = [0.0, 0.042981, -0.293762, -1.752461, 5.682633, -3.582633]; + c3 : array[1..4] of double; // = [0.5440, -0.39978, 0.025054, -0.6714E-3 ]; + c4 : array[1..4] of double; // = [1.3822, -0.77857, 0.062767, -0.0020322]; + c5 : array[1..4] of double; // = [-1.5861, -0.31082, -0.083751, 0.0038915]; + c6 : array[1..3] of double; // = [-0.4803, -0.082676, 0.0030302]; + c7 : array[1..2] of double; // = [0.164, 0.533]; + c8 : array[1..2] of double; // = [0.1736, 0.315]; + c9 : array[1..2] of double; // = [0.256, -0.00635]; + g : array[1..2] of double; // = [-2.273, 0.459]; + z90, z95, z99 : double; + zm, zss : double; + bf1, xx90, xx95 : double; + zero, one, two, three : double; + sqrth, qtr, th, small : double; + pi6, stqr : double; + +begin + upper := true; + z90 := 1.2816; + z95 := 1.6449; + z99 := 2.3263; + zm := 1.7509; + zss := 0.56268; + bf1 := 0.8378; + xx90 := 0.556; + xx95 := 0.622; + zero := 0.0; + one := 1.0; + two := 2.0; + three := 3.0; + sqrth := 0.70711; + qtr := 0.25; + th := 0.375; + small := 1E-19; + pi6 := 1.909859; + stqr := 1.047198; + c1[1] := 0.0; + c1[2] := 0.221157; + c1[3] := -0.147981; + c1[4] := -2.07119; + c1[5] := 4.434685; + c1[6] := -2.706056; + c2[1] := 0.0; + c2[2] := 0.042981; + c2[3] := -0.293762; + c2[4] := -1.752461; + c2[5] := 5.682633; + c2[6] := -3.582633; + c3[1] := 0.5440; + c3[2] := -0.39978; + c3[3] := 0.025054; + c3[4] := -0.6714E-3; + c4[1] := 1.3822; + c4[2] := -0.77857; + c4[3] := 0.062767; + c4[4] := -0.0020322; + c5[1] := -1.5861; + c5[2] := -0.31082; + c5[3] := -0.083751; + c5[4] := 0.0038915; + c6[1] := -0.4803; + c6[2] := -0.082676; + c6[3] := 0.0030302; + c7[1] := 0.164; + c7[2] := 0.533; + c8[1] := 0.1736; + c8[2] := 0.315; + c9[1] := 0.256; + c9[2] := -0.00635; + g[1] := -2.273; + g[2] := 0.459; + + pw := one; + IF (w >= zero) then w := one; + an := n; + ifault := 3; + nn2 := n div 2; + IF (n2 < nn2) then exit; + ifault := 1; + IF (n < 3) then exit; + +// If INIT is false, calculates coefficients for the test + + IF (NOT init) THEN + begin + IF (n = 3) THEN a[1] := sqrth + ELSE begin + an25 := an + qtr; + summ2 := zero; + for i := 1 to n2 do + begin + ppnd7((i - th)/an25, a[i], ifault); + summ2 := summ2 + (a[i] * a[i]); + end; + summ2 := summ2 * two; + ssumm2 := SQRT(summ2); + rsn := one / SQRT(an); + a1 := poly(c1, 6, rsn) - a[1] / ssumm2; + +// Normalize coefficients + + IF (n > 5) THEN + begin + i1 := 3; + a2 := -a[2]/ssumm2 + poly(c2,6,rsn); + fac := SQRT((summ2 - two * a[1] * a[1] - two * a[2] * a[2])/ + (one - two * power(a1,2) - two * power(a2,2))); + a[1] := a1; + a[2] := a2; + end + ELSE begin + i1 := 2; + fac := SQRT((summ2 - two * a[1] * a[1])/ (one - two * a1 * a1)); + a[1] := a1; + END; + for i := i1 to nn2 do a[i] := -a[i]/fac; + END; + init := true; + END; + IF (n1 < 3) then exit; + + ncens := n - n1; + ifault := 4; + IF (ncens < 0) OR ((ncens > 0) AND (n < 20)) then exit; + ifault := 5; + delta := ncens/an; + IF (delta > 0.8) then exit; + +// If W input as negative, calculate significance level of -W + + IF (w < zero) THEN + begin + w1 := one + w; + ifault := 0; + GOTO 70; + END; // IF + +// Check for zero range + + ifault := 6; + range := x[n1] - x[1]; + IF (range < small) then exit; //RETURN + +// Check for correct sort order on range - scaled X + + ifault := 7; + xx := x[1] / range; + sx := xx; + sa := -a[1]; + j := n - 1; + for i := 2 to n1 do + begin + xi := x[i]/range; + IF (xx-xi > small) THEN + begin + { ShowMessage('x[i]s out of order'); // WRITE(*, *) 'x(i)s out of order'} + exit;// RETURN + END; // IF + sx := sx + xi; + IF (i <> j) then sa := sa + SIGN(1, i - j) * a[MIN(i, j)]; + xx := xi; + j := j - 1; + END; // DO + ifault := 0; + IF (n > 5000) then ifault := 2; + +// Calculate W statistic as squared correlation +// between data and coefficients + + sa := sa/n1; + sx := sx/n1; + ssa := zero; + ssx := zero; + sax := zero; + j := n; + for i := 1 to n1 do + begin + IF (i <> j) THEN asa := SIGN(1, i - j) * a[MIN(i, j)] - sa + ELSE asa := -sa; + xsx := x[i]/range - sx; + ssa := ssa + asa * asa; + ssx := ssx + xsx * xsx; + sax := sax + asa * xsx; + j := j - 1; + END; // DO + +// W1 equals (1-W) claculated to avoid excessive rounding error +// for W very near 1 (a potential problem in very large samples) + + ssassx := SQRT(ssa * ssx); + w1 := (ssassx - sax) * (ssassx + sax)/(ssa * ssx); +70: w := one - w1; + +// Calculate significance level for W (exact for N=3) + + IF (n = 3) THEN + begin + pw := pi6 * (ARCSIN(SQRT(w)) - stqr); + exit; //RETURN + END; // IF + y := LN(w1); + xx := LN(an); +// m := zero; +// s := one; + IF (n <= 11) THEN + begin + gamma := poly(g, 2, an); + IF (y >= gamma) THEN + begin + pw := small; + exit; //RETURN + END; // IF + y := -LN(gamma - y); + m := poly(c3, 4, an); + s := EXP(poly(c4, 4, an)); + end + ELSE begin + m := poly(c5, 4, xx); + s := EXP(poly(c6, 3, xx)); + END; // IF + IF (ncens > 0) THEN + begin + +// Censoring by proportion NCENS/N. Calculate mean and sd +// of normal equivalent deviate of W. + + ld := -LN(delta); + bf := one + xx * bf1; + z90f := z90 + bf * power(poly(c7, 2, power(xx90,xx)),ld); + z95f := z95 + bf * power(poly(c8, 2, power(xx95,xx)),ld); + z99f := z99 + bf * power(poly(c9, 2, xx),ld); + +// Regress Z90F,...,Z99F on normal deviates Z90,...,Z99 to get +// pseudo-mean and pseudo-sd of z as the slope and intercept + + zfm := (z90f + z95f + z99f)/three; + zsd := (z90*(z90f-zfm)+z95*(z95f-zfm)+z99*(z99f-zfm))/zss; + zbar := zfm - zsd * zm; + m := m + zbar * s; + s := s * zsd; + END; // IF + pw := alnorm((y - m)/s, upper); +end; // procedure +//----------------------------------------------------------------------- + +procedure SVDinverse(VAR a : DblDyneMat; N : integer); +// a shorter version of the matinv routine that ignores v, w, and vtimes w +// matrices in the singular value decompensation inverse procedure +var + v, w, vtimesw : DblDyneMat; +begin + SetLength(v,N,N); + SetLength(w,N,N); + SetLength(vtimesw,N,N); + matinv(a,vtimesw,v,w,N); +end; +//------------------------------------------------------------------- + +function probt(t,df1 : double) : double; +var + F, prob : double; +begin + // Returns the probability corresponding to a two-tailed t test. + F := t * t; + prob := probf(F,1.0,df1); + Result := prob; +end; +//------------------------------------------------------------------------ + +function inverset(Probt, DF : double) : double; +var + z, W, tValue: double; +begin + // Returns the t value corresponding to a two-tailed t test probability. + z := inversez(Probt); + W := z * ((8.0 * DF + 3.0) / (1.0 + 8.0 * DF)); + tValue := sqrt(DF * (exp(W * W / DF) - 1.0)); + inverset := tValue; +end; +//--------------------------------------------------------------------- + +function inversechi(p : double; k : integer) : double; +var + a1, w, z : double; +begin + z := inversez(p); + a1 := 2.0 / ( 9.0 * k); + w := 1.0 - a1 + z * sqrt(a1); + Result := (k * w * w * w); +end; +//--------------------------------------------------------------------- + +function STUDENT(q,v,r : real) : real; + +{ Yields the probability of a sample value of Q or larger from a population + with r means and degrees of freedom for the mean square error of v.} +var + probq : real; +// done : boolean; + ifault : integer; +// ch : char; + +function alnorm(x: real; upper: boolean): real; +{ algorithm AS 66 from Applied Statistics, 1973, Vol. 22, No.3, pg.424-427 } + +var + ltone, utzero, zero, half, one, con, z, y : real; + up : boolean; + altemp: real; + +begin + // altemp := 0.0; + ltone := 7.0; + utzero := 18.66; + zero := 0.0; + half := 0.5; + one := 1.0; + con := 1.28; + up := upper; + z := x; + if z < zero then + begin + up := not up; + z := -z; + end; + if (z <= ltone) or (up) and (z <= utzero) then + begin + y := half * z * z; + if z > con then + begin + altemp := 0.398942280385 * exp(-y) / + (z - 3.8052e-8 + 1.00000615302 / + (z + 3.98064794e-4 + 1.98615381364 / + (z - 0.151679116635 + 5.29330324926 / + (z + 4.8385912808 - 15.1508972451 / + (z + 0.742380924027 + 30.789933034 / + (z + 3.99019417011)))))); + end + else altemp := half - z * (0.398942280444 - 0.399903438504 * y / + (y + 5.75885480458 - 29.8213557808 / + (y + 2.62433121679 + 48.6959930692 / + (y + 5.92885724438)))); + end + else altemp := zero; + if not up then altemp := one - altemp; + alnorm := altemp; +end; +//---------------------------------------------------------------------------- + +procedure prtrng(q, v, r : real; var ifault : integer; var sumprob : real); + +{ algorithm as 190 appl. Statistics, 1983, Vol.32, No.2 + evaluates the probability from 0 to q for a studentized range having + v degrees of freedom and r samples. } + +label 21, 22, 25; + +var + pcutj, pcutk, step, vmax, zero, fifth, half, one, two : real; + cv1, cv2, cvmax : real; + vw, qw : array[1..30] of real; + cv : array[1..4] of real; + jmin, jmax, kmin, kmax : integer; + g, gmid, r1, c, h, v2, gstep, gk, pk, pk1, pk2, w0, pz : real; + x, hj, ehj, pj : real; + j, jj, jump, k : integer; + +begin + sumprob := 0.0; + pcutj := 0.00003; pcutk := 0.0001; step := 0.45; vmax := 120.0; + zero := 0.0; fifth := 0.2; half := 0.5; one := 1.0; two := 2.0; + cv1 := 0.193064705; cv2 := 0.293525326; cvmax := 0.39894228; + cv[1] := 0.318309886; cv[2] := -0.268132716e-2; + cv[3] := 0.347222222e-2; cv[4] := 0.833333333e-1; + jmin := 3; jmax := 13; kmin := 7; kmax := 15; + { check initial values } +// prtrng := zero; + ifault := 0; + if (v < one) or (r < two) then ifault := 1; + if (q >= zero) and (ifault = 0) then + begin { main body of function } + g := step * realraise(r,-fifth); + gmid := half * ln(r); + r1 := r - one; + c := ln(r * g * cvmax); + if c <= vmax then + begin + h := step * realraise(v,-half); + v2 := v * half; + if v = one then c := cv1; + if v = two then c := cv2; + if NOT ((v = one) or (v = two)) then c := sqrt(v2) * cv[1] / + (one + ((cv[2] / v2 + cv[3]) / v2 + cv[4]) / v2); + c := ln(c * r * g * h); + end; + { compute integral. + Given a row k, the procedure starts at the midpoint and works outward + (index j) in calculating the probability at nodes symetric about the + midpoint. The rows (index k) are also processed outwards symmetrically + about the midpoint. The center row is unpaired. } + gstep := g; + qw[1] := -one; + qw[jmax + 1] := -one; + pk1 := one; + pk2 := one; + for k := 1 to kmax do + begin + gstep := gstep - g; +21: gstep := -gstep; + gk := gmid + gstep; + pk := zero; + if (pk2 > pcutk) or (k <= kmin) then + begin + w0 := c - gk * gk * half; + pz := alnorm(gk,TRUE); + x := alnorm(gk - q,TRUE) - pz; + if (x > zero) then pk := exp(w0 + r1 * ln(x)); + if v <= vmax then + begin + jump := -jmax; + 22: jump := jump + jmax; + for j := 1 to jmax do + begin + jj := j + jump; + if (qw[jj] <= zero) then + begin + hj := h * j; + if j < jmax then qw[jj + 1] := -one; + ehj := exp(hj); + qw[jj] := q * ehj; + vw[jj] := v * (hj + half - ehj * ehj * half); + end; + pj := zero; + x := alnorm(gk - qw[jj],TRUE) - pz; + if x > zero then pj := exp(w0 + vw[jj] + r1 * ln(x)); + pk := pk + pj; + if pj <= pcutj then + begin + if(jj > jmin) or (k > kmin) then goto 25; + end; + end; { for j := 1 to jmax } + 25: h := -h; + if h < zero then goto 22; + end; { if v less than or equal vmax } + end; { if pk2 > pcutk or k <= kmin } + sumprob := sumprob + pk; + if (k <= kmin) or (pk > pcutk) or (pk1 > pcutk) then + begin + pk2 := pk1; + pk1 := pk; + if gstep > zero then goto 21; + end; + end; { for k := 1 to kmax } + end; { main body of function } +// prtrng := sumprob; +end; { of function } + +begin { program main body } + ifault := 0; + probq := 0.0; + prtrng(q,v,r,ifault,probq); + probq := 1.0 - probq; + { if ifault = 1 then ShowMessage('ERROR! Fault in calculating Student Q.');} + student := probq; + end; { end of student function } +//------------------------------------------------------------------- + +function realraise(base,power : double ): double; +begin + if power = 0 then realraise := 1.0 + else if power < 0 then realraise := 1 / realraise(base,-power) + else realraise := exp(power * ln(base)) +end; (* End of realraise *) +//------------------------------------------------------------------- + +function fpercentpoint(p : real; k1,k2 : integer) : real; + +(* Calculates the inverse F distribution function based on k1 and k2 *) +(* degrees of freedom. Uses function lngamma, betaratio and the *) +(* inversebetaratio routines. *) + +var h1,h2 : real; (* half degrees of freedom k1, k2 *) + lnbeta : real; (* log of complete beta function with params h1 and h2 *) + ratio : real; (* beta ratio *) + x : real; (* inverse beta ratio *) + +begin + h1 := 0.5 * k2; + h2 := 0.5 * k1; + ratio := 1 - p; + lnbeta := lngamma(h1) + lngamma(h2) - lngamma(h1 + h2); + x := inversebetaratio(ratio,h1,h2,lnbeta); + fpercentpoint := k2 * (1 - x) / (k1 * x) +end; (* of fpercentpoint *) +//------------------------------------------------------------------- + +function lngamma(w : real) : real; + +(* Calculates the logarithm of the gamma function. w must be such that *) +(* 2*w is an integer > 0. *) + +const a = 0.57236494; (* ln(sqrt(pi)) *) + +var sum:real; (* a temporary store for summation of values *) + +begin + sum := 0; + w := w-1; + while w > 0.0 do + begin + sum := sum + ln(w); + w := w - 1 + end; (* of summation loop *) + if w < 0.0 + then lngamma := sum + a (* note!!! is something is missing here? *) + else lngamma := sum +end; (* of lngamma *) +//------------------------------------------------------------------- + +function betaratio(x,a,b,lnbeta : real) : real; + +(* calculates the incomplete beta function ratio with parameters a *) +(* and b. LnBeta is the logarithm of the complete beta function with *) +(* parameters a and b. *) + +const error = 1.0E-7; + +var c : real; (* c = a + b *) + factor1,factor2,factor3 : real; (* factors multiplying terms in series *) + i,j : integer; (* counters *) + sum : real; (* current sum of series *) + temp : real; (* temporary store for exchanges *) + term : real; (* term of series *) + xlow : boolean; (* status of x which determines the end from which the *) + (* series is evaluated *) + // ylow : real; (* adjusted argument *) + y : real; + +begin + if (x=0) or (x=1) + then + sum := x + else begin + c := a + b; + if a < c*x + then begin + xlow := true; + y := x; + x := 1 - x; + temp := a; + a := b; + b := temp + end + else begin + xlow := false; + y := 1 - x; + end; + term := 1; + j := 0; + sum := 1; + i := trunc(b + c * y) + 1; + factor1 := x/y; + repeat + j := j + 1; + i := i - 1; + if i >= 0 + then begin + factor2 := b - j; + if i = 0 then factor2 := x; + end; + if abs(a+j) < 1.0e-6 then + begin + betaratio := sum; + exit; + end; + term := term*factor2*factor1/(a+j); + sum := sum + term; + until (abs(term) <= sum) and (abs(term) <= error*sum); + factor3 := exp(a*ln(x) + (b-1)*ln(y) - lnbeta); + sum := sum*factor3/a; + if xlow + then sum := 1 - sum; + end; + betaratio := sum; +end; (* of betaratio *) +//------------------------------------------------------------------- + +function inversebetaratio(ratio,a,b,lnbeta : real) : real; + +(* Calculates the inverse of the incomplete beta function ratio with *) +(* parameters a and b. LnBeta is the logarithm of the complete beta *) +(* function with parameters a and b. Uses function betaratio. *) + +const error = 1.0E-7; + +var +// c: real; (* c = a + b *) + largeratio : boolean; + temp1,temp2,temp3,temp4 : real; (* temporary variables *) + x,x1 : real; (* successive estimates of inverse ratio *) + y : real; (* adjustment during newton iteration *) + +begin + if (ratio = 0) or (ratio = 1) + then + x := ratio + else begin + largeratio := false; + if ratio > 0.5 + then begin + largeratio := true; + ratio := 1 - ratio; + temp1 := a; + b := a; + a := temp1 + end; +// c := a + b; + (* calcuates initial estimate for x *) + temp1 := sqrt(-ln(ratio*ratio)); + temp2 := 1.0 + temp1*(0.99229 + 0.04481*temp1); + temp2 := temp1 - (2.30753 + 0.27061*temp1)/temp2; + if (a > 1) and (b > 1) + then begin + temp1 := (temp2*temp2 - 3.0)/6.0; + temp3 := 1.0/(a + a -1.0); + temp4 := 1.0/ (b + b - 1.0); + x1 := 2.0 /(temp3 + temp4); + x := temp1 + 5.0/6.0 - 2.0/(3.0*x1); + x := temp2*sqrt(x1 + temp1)/x1 - x*(temp4 - temp3); + x := a/(a + b*exp(x + x)) + end + else begin + temp1 := b + b; + temp3 := 1.0/(9.0*b); + temp3 := 1.0 - temp3 + temp2*sqrt(temp3); + temp3 := temp1*temp3*temp3*temp3; + if temp3 > 0 + then begin + temp3 := (4.0*a + temp1 - 2.0)/temp3; + if temp3 > 1 then x := 1.0-2.0/(1 + temp3) + else x := exp((ln(ratio*a) + lnbeta)/a) + end + else x := 1.0 - exp((ln((1-ratio)*b) + lnbeta)/b); + end; + + (* Newton iteration *) + repeat + y := betaratio(x,a,b,lnbeta); + y := (y-ratio)*exp((1-a)*ln(x)+(1-b)*ln(1-x)+lnbeta); + temp4 := y; + x1 := x - y; + while (x1 <= 0) or (x1 >= 1) do + begin + temp4 := temp4/2; + x1 := x - temp4 + end; + x := x1; + until abs(y) < error; + if largeratio then x := 1 - x; + end; + inversebetaratio := x +end; (* of inversebetaratio *) +//------------------------------------------------------------------- + +function ProdSums(N, A : double) : double; +var + Total, i : double; +begin + Total := 1.0; + i := A; + while i <= N do + begin + Total := Total * i; + i := i + 1.0; + end; + Result := Total; +end; +//------------------------------------------------------------------- + +function combos(X, N : double) : double; +var + Y, numerator, denominator : double; +begin + Y := N - X; + if Y > X then + begin + numerator := ProdSums(N, Y + 1); + denominator := ProdSums(X, 1); + end + else begin + numerator := ProdSums(N, X + 1); + denominator := ProdSums(Y, 1); + end; + Result := numerator / denominator; +end; +//------------------------------------------------------------------- + +function ordinate(z : double) : double; +var pi : double; +begin + pi := 3.14159; + Result := (1.0 / sqrt(2.0 * pi)) * (1.0 / exp(z * z / 2.0)); +end; // End ord function +//------------------------------------------------------------------- + +procedure Rank(v1col : integer; VAR Values : DblDyneVec); +// calculates the ranks for values stored in the data grid in column v1col +var + pcntiles, CatValues : DblDyneVec; + freq : IntDyneVec; + i, j, nocats : integer; + Temp, cumfreq, upper, lower : double; + +begin + SetLength(freq, NoCases); + SetLength(pcntiles, NoCases); + SetLength(CatValues, NoCases); + + // get values to be sorted into values vector + for i := 1 to NoCases do + Values[i-1] := StrToFloat(OS3MainFrm.DataGrid.Cells[v1col,i]); + + // sort the values + for i := 1 to NoCases - 1 do //order from high to low + begin + for j := i + 1 to NoCases do + begin + if (Values[i-1] < Values[j-1]) then // swap + begin + Temp := Values[i-1]; + Values[i-1] := Values[j-1]; + Values[j-1] := Temp; + end; + end; + end; + + // now get no. of unique values and frequency of each + nocats := 1; + for i := 1 to NoCases do freq[i-1] := 0; + Temp := Values[0]; + CatValues[0] := Temp; + for i := 1 to NoCases do + begin + if (Temp = Values[i-1]) then freq[nocats-1] := freq[nocats-1] + 1 + else // new value + begin + nocats := nocats + 1; + freq[nocats-1] := freq[nocats-1] + 1; + Temp := Values[i-1]; + CatValues[nocats-1] := Temp; + end; + end; + + // get ranks + cumfreq := 0.0; + for i := 1 to nocats do + begin + upper := NoCases-cumfreq; + cumfreq := cumfreq + freq[i-1]; + lower := NoCases - cumfreq + 1; + pcntiles[i-1] := (upper - lower) / 2.0 + lower; + end; + + // convert original values to their corresponding ranks + for i := 1 to NoCases do + begin + Temp := StrToFloat(OS3MainFrm.DataGrid.Cells[v1col,i]); + for j := 1 to nocats do + begin + if (Temp = CatValues[j-1]) then Values[i-1] := pcntiles[j-1]; + end; + end; + + // clean up the heap + CatValues := nil; + pcntiles := nil; + freq := nil; +end; +//-------------------------------------------------------------------- + +procedure PRank(v1col : integer; VAR Values : DblDyneVec); +// computes the percentile ranks of values stored in the data grid +// at column v1col +var + pcntiles, cumfm, CatValues : DblDyneVec; + freq, cumf : IntDyneVec; + Temp : double; + i, j, nocats, ncases : integer; + outline : string; + +begin + SetLength(freq, NoCases); + SetLength(pcntiles, NoCases); + SetLength(cumf, NoCases); + SetLength(cumfm, NoCases); + SetLength(CatValues, NoCases); + ncases := 0; + // get values to be sorted into values vector + for i := 1 to NoCases do + begin + if not ValidValue(i,v1col) then continue; + ncases := ncases + 1; + Values[ncases-1] := StrToFloat(OS3MainFrm.DataGrid.Cells[v1col,i]); + end; + + // sort the values + for i := 1 to ncases - 1 do //order from low to high + begin + for j := i + 1 to ncases do + begin + if (Values[i-1] > Values[j-1]) then // swap + begin + Temp := Values[i-1]; + Values[i-1] := Values[j-1]; + Values[j-1] := Temp; + end; + end; + end; + + // now get no. of unique values and frequency of each + nocats := 1; + for i := 1 to ncases do freq[i-1] := 0; + Temp := Values[0]; + CatValues[0] := Temp; + for i := 1 to ncases do + begin + if (Temp = Values[i-1])then freq[nocats-1] := freq[nocats-1] + 1 + else // new value + begin + nocats := nocats + 1; + freq[nocats-1] := freq[nocats-1] + 1; + Temp := Values[i-1]; + CatValues[nocats-1] := Temp; + end; + end; + + // now get cumulative frequencies + cumf[0] := freq[0]; + for i := 1 to nocats-1 do cumf[i] := freq[i] + cumf[i-1]; + + // get cumulative frequences to midpoints and percentile ranks + cumfm[0] := freq[0] / 2.0; + pcntiles[0] := (cumf[0] / 2.0) / ncases; + for i := 1 to nocats-1 do + begin + cumfm[i] := (freq[i] / 2.0) + cumf[i-1]; + pcntiles[i] := cumfm[i] / ncases; + end; + + OutPutFrm.RichEdit.Lines.Add('PERCENTILE RANKS'); + OutPutFrm.RichEdit.Lines.Add('Score Value Frequency Cum.Freq. Percentile Rank'); + OutPutFrm.RichEdit.Lines.Add('___________ __________ __________ ______________'); + for i := 1 to nocats do + begin + outline := format(' %8.3f %6d %6d %6.2f', + [CatValues[i-1], freq[i-1],cumf[i-1],pcntiles[i-1]*100.0]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + + // convert original values to their corresponding percentile ranks + for i := 1 to ncases do + begin + Temp := StrToFloat(OS3MainFrm.DataGrid.Cells[v1col,i]); + for j := 1 to nocats do + begin + if (Temp = CatValues[j-1]) then Values[i-1] := pcntiles[j-1]; + end; + end; + + // clean up the heap + CatValues := nil; + cumfm := nil; + cumf := nil; + pcntiles := nil; + freq := nil; +end; +//-------------------------------------------------------------------- + +function UniStats(N : integer; VAR X : DblDyneVec; VAR z : DblDyneVec; + VAR Mean : double; VAR variance : double; VAR SD : double; + VAR Skew : double; VAR Kurtosis : double; VAR SEmean : double; + VAR SESkew : double; VAR SEkurtosis : double; VAR min : double; + VAR max : double; VAR Range : double; VAR MissValue : string) : + integer; +VAR + NoGood : integer; // No. of good cases returned by the function + i : integer; // index for loops + num, den, sum, M2, M3, M4, deviation, devsqr : double; + valuestr : string; + +begin + Mean := 0.0; + variance := 0.0; + SD := 0.0; + Skew := 0.0; + Kurtosis := 0.0; + SEmean := 0.0; + SESkew := 0.0; + SEKurtosis := 0.0; + min := 1.0e20; + max := -1.0e20; + range := 0.0; + NoGood := 0; + sum := 0.0; + M2 := 0.0; + M3 := 0.0; + M4 := 0.0; + + for i := 0 to N-1 do + begin + ValueStr := FloatToStr(X[i]); + if Trim(MissValue) = ValueStr then continue; + NoGood := NoGood + 1; + sum := sum + X[i]; + variance := variance + (X[i] * X[i]); + if X[i] < min then min := X[i]; + if X[i] > max then max := X[i]; + end; + + if NoGood > 0 then + begin + Mean := sum / NoGood; + range := max - min; + end; + + if NoGood > 1 then + begin + variance := variance - (sum * sum) / NoGood; + variance := variance / (NoGood - 1); + SD := sqrt(variance); + SEmean := sqrt(variance / NoGood); + for i := 0 to N-1 do + begin + ValueStr := FloatToStr(X[i]); + if Trim(MissValue) = ValueStr then continue; + deviation := X[i] - Mean; + z[i] := deviation / SD; + devsqr := deviation * deviation; + M2 := M2 + devsqr; + M3 := M3 + (deviation * devsqr); + M4 := M4 + (devsqr * devsqr); + end; + end; + if NoGood > 3 then + begin + Skew := (NoGood * M3) / ((NoGood - 1) * (NoGood - 2) * SD * variance); + num := 6.0 * NoGood * (NoGood - 1); + den := (NoGood - 2) * (NoGood + 1) * (NoGood + 3); + SESkew := sqrt(num / den); + Kurtosis := (NoGood * (NoGood + 1) * M4) - (3.0 * M2 * M2 * (NoGood - 1)); + Kurtosis := Kurtosis / ((NoGood - 1) * (NoGood - 2) * (NoGood - 3) * + (variance * variance)); + SeKurtosis := sqrt((4.0 * (NoGood * NoGood - 1) * (SESkew * SESkew)) / + ((NoGood - 3) * (NoGood + 5))); + end; + Result := NoGood; +end; +//------------------------------------------------------------------- + +function WholeValue(value : double) : double; + { split a value into the whole and fractional parts} +VAR + whole : double; +begin + whole := Floor(value); + Result := whole; +end; +//--------------------------------------------------------------------------- +function FractionValue(value : double) : double; + { split a value into the whole and fractional parts } +VAR + fraction : double; +begin + fraction := value - Floor(value); + Result := fraction; +end; +//--------------------------------------------------------------------------- + +Function Quartiles(TypeQ : integer; pcntile : double; N : integer; + VAR values : DblDyneVec) : double; +VAR + whole, fraction, Myresult, np, avalue, avalue1 : double; + i, subscript : integer; + outline : string; +begin +{ for i := 0 to N - 1 do // this is for debugging + begin + outline := format('Value = %8.3f',[values[i]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; } + case TypeQ of + 1 : np := pcntile * N; + 2 : np := pcntile * (N + 1); + 3 : np := pcntile * N; + 4 : np := pcntile * N; + 5 : np := pcntile * (N - 1); + 6 : np := pcntile * N + 0.5; + 7 : np := pcntile * (N + 1); + 8 : np := pcntile * (N + 1); + end; + whole := WholeValue(np); + fraction := FractionValue(np); + subscript := Trunc(whole) - 1; + avalue := values[subscript]; + avalue1 := values[subscript + 1]; + case TypeQ of + 1 : Myresult := ((1.0 - fraction) * values[subscript]) + + fraction * values[subscript + 1]; + 2 : Myresult := ((1.0 - fraction) * avalue) + + fraction * avalue1; // values[subscript + 1]; + 3 : if (fraction = 0.0) then Myresult := values[subscript] + else Myresult := values[subscript + 1]; + 4 : if (fraction = 0.0) then Myresult := 0.5 * (values[subscript] + values[subscript + 1]) + else Myresult := values[subscript + 1]; + 5 : if (fraction = 0.0) then Myresult := values[subscript + 1] + else Myresult := values[subscript + 1] + fraction * (values[subscript + 2] - + values[subscript + 1]); + 6 : Myresult := values[subscript]; + 7 : if (fraction = 0.0) then Myresult := values[subscript] + else Myresult := fraction * values[subscript] + + (1.0 - fraction) * values[subscript + 1]; + 8 : begin + if (fraction = 0.0) then Myresult := values[subscript]; + if (fraction = 0.5) then Myresult := 0.5 * (values[subscript] + values[subscript + 1]); + if (fraction < 0.5) then Myresult := values[subscript]; + if (fraction > 0.5) then Myresult := values[subscript + 1]; + end; + end; + Result := Myresult; +end; + +function KolmogorovProb(z : double) : double; +VAR + fj : array[0..3] of double; // = {-2,-8,-18,-32}; + r : array[0..4] of double; + u : double; + p, V, t : double; + j, Maxj : integer; +const + w = 2.50662827; + // c1 - -pi**2/8, c2 = 9*c1, c3 = 25*c1 + c1 = -1.2337005501361697; + c2 = -11.103304951225528; + c3 = -30.842513753404244; + + + // Calculates the Kolmogorov distribution function, + // which gives the probability that Kolmogorov's test statistic will exceed + // the value z assuming the null hypothesis. This gives a very powerful + // test for comparing two one-dimensional distributions. + // see, for example, Eadie et al, "statistocal Methods in Experimental + // Physics', pp 269-270). + // + // This function returns the confidence level for the null hypothesis, where: + // z = dn*sqrt(n), and + // dn is the maximum deviation between a hypothetical distribution + // function and an experimental distribution with + // n events + // + // NOTE: To compare two experimental distributions with m and n events, + // use z = sqrt(m*n/(m+n))*dn + // + // Accuracy: The function is far too accurate for any imaginable application. + // Probabilities less than 10^-15 are returned as zero. + // However, remember that the formula is only valid for "large" n. + // Theta function inversion formula is used for z <= 1 + // + // This function was translated by Rene Brun from PROBKL in CERNLIB. + +begin + u := Abs(z); + fj[0] := -2; + fj[1] := -8; + fj[2] := -18; + fj[3] := -32; + if (u < 0.2) then p := 1 + else if (u < 0.755) then + begin + v := 1./(u*u); + p := 1 - w * (Exp(c1 * v) + Exp(c2 * v) + Exp(c3 * v)) / u; + end + else if (u < 6.8116) then + begin + r[1] := 0; + r[2] := 0; + r[3] := 0; + v := u * u; + maxj := round(max(1,(3. / u))); + for j := 0 to maxj -1 do r[j] := Exp(fj[j] * v); + p := 2 * (r[0] - r[1] + r[2] - r[3]); + end + else p := 0; + result := p; +end; + +function KolmogorovTest(na : integer; VAR a : DblDyneVec; nb : integer; + VAR b : DblDyneVec; option : String) : double; +VAR + prob : double; + opt : string; + rna : double; // = na; + rnb : double; // = nb; + sa : double; // = 1./rna; + sb : double; // = 1./rnb; + rdiff, rdmax, x, z : double; + i, ia, ib : integer; + ok : boolean; + bugstr : string; +begin +// Statistical test whether two one-dimensional sets of points are compatible +// with coming from the same parent distribution, using the Kolmogorov test. +// That is, it is used to compare two experimental distributions of unbinned data. +// +// Input: +// a,b: One-dimensional arrays of length na, nb, respectively. +// The elements of a and b must be given in ascending order. +// option is a character string to specify options +// "D" Put out a line of "Debug" printout +// "M" Return the Maximum Kolmogorov distance instead of prob +// +// Output: +// The returned value prob is a calculated confidence level which gives a +// statistical test for compatibility of a and b. +// Values of prob close to zero are taken as indicating a small probability +// of compatibility. For two point sets drawn randomly from the same parent +// distribution, the value of prob should be uniformly distributed between +// zero and one. +// in case of error the function return -1 +// If the 2 sets have a different number of points, the minimum of +// the two sets is used. +// +// Method: +// The Kolmogorov test is used. The test statistic is the maximum deviation +// between the two integrated distribution functions, multiplied by the +// normalizing factor (rdmax*sqrt(na*nb/(na+nb)). +// +// Code adapted by Rene Brun from CERNLIB routine TKOLMO (Fred James) +// (W.T. Eadie, D. Drijard, F.E. James, M. Roos and B. Sadoulet, +// Statistical Methods in Experimental Physics, (North-Holland, +// Amsterdam 1971) 269-271) +// +// Method Improvement by Jason A Detwiler (JADetwiler@lbl.gov) +// ----------------------------------------------------------- +// The nuts-and-bolts of the TMath::KolmogorovTest() algorithm is a for-loop +// over the two sorted arrays a and b representing empirical distribution +// functions. The for-loop handles 3 cases: when the next points to be +// evaluated satisfy a>b, a na) then + begin + ok := TRUE; + break; + end; + end + else if (a[ia-1] > b[ib-1]) then + begin + rdiff := rdiff + sb; + ib := ib + 1; + if (ib > nb) then + begin + ok := TRUE; + break; + end; + end + else + begin + x := a[ia-1]; + while((a[ia-1] = x) and (ia <= na)) do + begin + rdiff := rdiff - sa; + ia := ia + 1; + end; + while ((b[ib-1] = x) and (ib <= nb)) do + begin + rdiff := rdiff + sb; + ib := ib + 1; + end; + if (ia > na) then + begin + ok := TRUE; + break; + end; + if (ib > nb) then + begin + ok := TRUE; + break; + end; + end; + rdmax := Max(rdmax,Abs(rdiff)); + end; +// Should never terminate this loop with ok = kFALSE! + + if (ok) then + begin + rdmax := Max(rdmax,Abs(rdiff)); + z := rdmax * Sqrt(rna * rnb / (rna + rnb)); + prob := KolmogorovProb(z); + end; + // debug printout + if (opt = 'D') then + begin + bugstr := format(' Kolmogorov Probability = %g, Max Dist = %g',[prob,rdmax]); + OutPutFrm.RichEdit.Lines.Add(bugstr); + end; + if(opt = 'M') then result := rdmax + else result := prob; +end; + + +procedure poisson_cdf ( x : integer; a : double; VAR cdf : double ); +VAR + i : integer; + last, new1, sum2 : double; +begin +// +//******************************************************************************* +// +//// POISSON_CDF evaluates the Poisson CDF. +// +// +// Definition: +// +// CDF(X,A) is the probability that the number of events observed +// in a unit time period will be no greater than X, given that the +// expected number of events in a unit time period is A. +// +// Modified: +// +// 28 January 1999 +// +// Author: +// +// John Burkardt +// +// Parameters: +// +// Input, integer X, the argument of the CDF. +// X >= 0. +// +// Input, real A, the parameter of the PDF. +// 0.0E+00 < A. +// +// Output, real CDF, the value of the CDF. +// + if ( x < 0 ) then cdf := 0.0E+00 + else + begin + new1 := exp ( - a ); + sum2 := new1; + for i := 1 to x do + begin + last := new1; + new1 := last * a / i ; + sum2 := sum2 + new1; + end; + cdf := sum2; + end; +end; + +procedure poisson_cdf_values (VAR n : integer; VAR a : double; VAR x : integer; + VAR fx : double ); +VAR + avec : DblDyneVec; + fxvec : DblDyneVec; + xvec : IntDyneVec; +begin + SetLength(avec,21); + SetLength(fxvec,21); + SetLength(xvec,21); + avec[0] := 0.02e0; + avec[1] := 0.10e0; + avec[2] := 0.10e0; + avec[3] := 0.50e0; + avec[4] := 0.50e0; + avec[5] := 0.50e0; + avec[6] := 1.00e0; + avec[7] := 1.00e0; + avec[8] := 1.00e0; + avec[9] := 1.00e0; + avec[10] := 2.00e0; + avec[11] := 2.00e0; + avec[12] := 2.00e0; + avec[13] := 2.00e0; + avec[14] := 5.00E+00; + avec[15] := 5.00E+00; + avec[16] := 5.00E+00; + avec[17] := 5.00E+00; + avec[18] := 5.00E+00; + avec[19] := 5.00E+00; + avec[20] := 5.00E+00; + fxvec[0] := 0.980E+00; + fxvec[1] := 0.905E+00; + fxvec[2] := 0.995E+00; + fxvec[3] := 0.607E+00; + fxvec[4] := 0.910E+00; + fxvec[5] := 0.986E+00; + fxvec[6] := 0.368E+00; + fxvec[7] := 0.736E+00; + fxvec[8] := 0.920E+00; + fxvec[9] := 0.981E+00; + fxvec[10] := 0.135E+00; + fxvec[11] := 0.406E+00; + fxvec[12] := 0.677E+00; + fxvec[13] := 0.857E+00; + fxvec[14] := 0.007E+00; + fxvec[15] := 0.040E+00; + fxvec[16] := 0.125E+00; + fxvec[17] := 0.265E+00; + fxvec[18] := 0.441E+00; + fxvec[19] := 0.616E+00; + fxvec[20] := 0.762E+00; + xvec[0] := 0; + xvec[1] := 0; + xvec[2] := 1; + xvec[3] := 0; + xvec[4] := 1; + xvec[5] := 2; + xvec[6] := 0; + xvec[7] := 1; + xvec[8] := 2; + xvec[9] := 3; + xvec[10] := 0; + xvec[11] := 1; + xvec[12] := 2; + xvec[13] := 3; + xvec[14] := 0; + xvec[15] := 1; + xvec[16] := 2; + xvec[17] := 3; + xvec[18] := 4; + xvec[19] := 5; + xvec[20] := 6; + +// +//******************************************************************************* +// +//// POISSON_CDF_VALUES returns some values of the Poisson CDF. +// +// +// Discussion: +// +// CDF(X)(A) is the probability of at most X successes in unit time, +// given that the expected mean number of successes is A. +// +// Modified: +// +// 28 May 2001 +// +// Reference: +// +// Milton Abramowitz and Irene Stegun, +// Handbook of Mathematical Functions, +// US Department of Commerce, 1964. +// +// Daniel Zwillinger, +// CRC Standard Mathematical Tables and Formulae, +// 30th Edition, CRC Press, 1996, pages 653-658. +// +// Author: +// +// John Burkardt +// +// Parameters: +// +// Input/output, integer N. +// On input, if N is 0, the first test data is returned, and N is set +// to the index of the test data. On each subsequent call, N is +// incremented and that test data is returned. When there is no more +// test data, N is set to 0. +// +// Output, real A, integer X, the arguments of the function. +// +// Output, real FX, the value of the function. +// +// + if ( n < 0 ) then n := 0; + n := n + 1; + if ( n > 21 ) then + begin + n := 0; + a := 0.0; + x := 0; + fx := 0.0E+00; + exit; + end; + + a := avec[n]; + x := xvec[n]; + fx := fxvec[n]; + xvec := nil; + fxvec := nil; + avec := nil; +end; + +procedure poisson_cdf_inv (VAR cdf : double; VAR a : double; VAR x : integer ); +VAR + i, xmax : integer; + last, new1, sum2, sumold : double; +begin +// +//******************************************************************************* +// +//// POISSON_CDF_INV inverts the Poisson CDF. +// +// +// Modified: +// +// 08 December 1999 +// +// Author: +// +// John Burkardt +// +// Parameters: +// +// Input, real CDF, a value of the CDF. +// 0 <= CDF < 1. +// +// Input, real A, the parameter of the PDF. +// 0.0E+00 < A. +// +// Output, integer X, the corresponding argument. +// +// Now simply start at X = 0, and find the first value for which +// CDF(X-1) <= CDF <= CDF(X). +// + xmax := 100; + sum2 := 0.0E+00; + for i := 0 to xmax do + begin + sumold := sum2; + if ( i = 0 ) then + begin + new1 := exp ( - a ); + sum2 := new1; + end + else + begin + last := new1; + new1 := last * a / i; + sum2 := sum2 + new1; + end; + if (( sumold <= cdf) and (cdf <= sum2 )) then + begin + x := i; + exit; + end; + end; + ShowMessage('POISSON_SAMPLE - Warning. Exceeded XMAX = 100'); + x := xmax; +end; + + +procedure poisson_check ( a : double ); +begin +// +//******************************************************************************* +// +//// POISSON_CHECK checks the parameter of the Poisson PDF. +// +// +// Modified: +// +// 08 December 1999 +// +// Author: +// +// John Burkardt +// +// Parameters: +// +// Input, real A, the parameter of the PDF. +// 0.0E+00 < A. +// + if ( a <= 0.0E+00 ) then + ShowMessage('POISSON_CHECK - Fatal error. A <= 0.'); +end; + +function factorial(x : integer) : longint; //integer; +VAR + decx : longint; // integer; + product : longint; //integer; +begin + decx := x; + product := 1; + while (decx > 0) do + begin + product := decx * product; + decx := decx - 1; + end; + result := product; +end; + + +procedure poisson_pdf ( x : integer; VAR a : double; VAR pdf : double ); +begin +// +//******************************************************************************* +// +//// POISSON_PDF evaluates the Poisson PDF. +// +// +// Formula: +// +// PDF(X)(A) = EXP ( - A ) * A**X / X// +// +// Discussion: +// +// PDF(X)(A) is the probability that the number of events observed +// in a unit time period will be X, given the expected number +// of events in a unit time. +// +// The parameter A is the expected number of events per unit time. +// +// The Poisson PDF is a discrete version of the Exponential PDF. +// +// The time interval between two Poisson events is a random +// variable with the Exponential PDF. +// +// Modified: +// +// 01 February 1999 +// +// Author: +// +// John Burkardt +// +// Parameters: +// +// Input, integer X, the argument of the PDF. +// 0 <= X +// +// Input, real A, the parameter of the PDF. +// 0.0E+00 < A. +// +// Output, real PDF, the value of the PDF. +// + if ( x < 0 ) then pdf := 0.0E+00 + else + pdf := exp ( - a ) * power(a,x) / factorial ( x ); +// pdf := exp ( - a ) * power(a,x) / exp(logfactorial( x )); +end; + + +end. + diff --git a/applications/lazstats/source_orig/genkappaunit.lfm b/applications/lazstats/source_orig/genkappaunit.lfm new file mode 100644 index 000000000..b7ed8b0be --- /dev/null +++ b/applications/lazstats/source_orig/genkappaunit.lfm @@ -0,0 +1,385 @@ +object GenKappaFrm: TGenKappaFrm + Left = 179 + Height = 358 + Top = 126 + Width = 564 + Caption = 'Generalized Kappa Coefficient' + ClientHeight = 358 + ClientWidth = 564 + OnShow = FormShow + LCLVersion = '0.9.28.2' + object Label1: TLabel + Left = 249 + Height = 14 + Top = 24 + Width = 117 + Caption = 'Category Code (1,2,...)' + ParentColor = False + end + object Label2: TLabel + Left = 249 + Height = 14 + Top = 120 + Width = 133 + Caption = 'Object or Subject Classified' + ParentColor = False + end + object Label3: TLabel + Left = 249 + Height = 14 + Top = 216 + Width = 104 + Caption = 'Rater Codes (1,2,...)' + ParentColor = False + end + object Label4: TLabel + Left = 8 + Height = 14 + Top = 9 + Width = 48 + Caption = 'Variables:' + ParentColor = False + end + object VarList: TListBox + Left = 8 + Height = 319 + Top = 24 + Width = 176 + ItemHeight = 0 + TabOrder = 0 + end + object CatIn: TBitBtn + Left = 192 + Height = 33 + Top = 24 + Width = 41 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + OnClick = CatInClick + TabOrder = 1 + end + object CatOut: TBitBtn + Left = 192 + Height = 33 + Top = 64 + Width = 41 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + OnClick = CatOutClick + TabOrder = 2 + end + object ObjIn: TBitBtn + Left = 192 + Height = 33 + Top = 120 + Width = 41 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + OnClick = ObjInClick + TabOrder = 3 + end + object ObjOut: TBitBtn + Left = 192 + Height = 33 + Top = 160 + Width = 41 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + OnClick = ObjOutClick + TabOrder = 4 + end + object RaterIn: TBitBtn + Left = 192 + Height = 33 + Top = 216 + Width = 41 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + OnClick = RaterInClick + TabOrder = 5 + end + object RaterOut: TBitBtn + Left = 192 + Height = 33 + Top = 256 + Width = 41 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + OnClick = RaterOutClick + TabOrder = 6 + end + object CatEdit: TEdit + Left = 249 + Height = 21 + Top = 40 + Width = 170 + TabOrder = 7 + Text = 'CatEdit' + end + object ObjectEdit: TEdit + Left = 248 + Height = 21 + Top = 136 + Width = 170 + TabOrder = 8 + Text = 'Edit1' + end + object RaterEdit: TEdit + Left = 249 + Height = 21 + Top = 232 + Width = 170 + TabOrder = 9 + Text = 'Edit1' + end + object ResetBtn: TButton + Left = 455 + Height = 35 + Top = 120 + Width = 85 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 10 + end + object CancelBtn: TButton + Left = 456 + Height = 35 + Top = 180 + Width = 85 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 11 + end + object ComputeBtn: TButton + Left = 455 + Height = 35 + Top = 240 + Width = 85 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 12 + end + object ReturnBtn: TButton + Left = 456 + Height = 35 + Top = 302 + Width = 85 + Caption = 'Return' + ModalResult = 1 + TabOrder = 13 + end + object HelpBtn: TButton + Tag = 125 + Left = 455 + Height = 33 + Top = 56 + Width = 86 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 14 + end +end diff --git a/applications/lazstats/source_orig/genkappaunit.lrs b/applications/lazstats/source_orig/genkappaunit.lrs new file mode 100644 index 000000000..8eda460cf --- /dev/null +++ b/applications/lazstats/source_orig/genkappaunit.lrs @@ -0,0 +1,340 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TGenKappaFrm','FORMDATA',[ + 'TPF0'#12'TGenKappaFrm'#11'GenKappaFrm'#4'Left'#3#179#0#6'Height'#3'f'#1#3'To' + +'p'#2'~'#5'Width'#3'4'#2#7'Caption'#6#29'Generalized Kappa Coefficient'#12'C' + +'lientHeight'#3'f'#1#11'ClientWidth'#3'4'#2#6'OnShow'#7#8'FormShow'#10'LCLVe' + +'rsion'#6#8'0.9.28.2'#0#6'TLabel'#6'Label1'#4'Left'#3#249#0#6'Height'#2#14#3 + +'Top'#2#24#5'Width'#2'u'#7'Caption'#6#23'Category Code (1,2,...)'#11'ParentC' + +'olor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#3#249#0#6'Height'#2#14#3'Top'#2'x'#5 + +'Width'#3#133#0#7'Caption'#6#28'Object or Subject Classified'#11'ParentColor' + +#8#0#0#6'TLabel'#6'Label3'#4'Left'#3#249#0#6'Height'#2#14#3'Top'#3#216#0#5'W' + +'idth'#2'h'#7'Caption'#6#21'Rater Codes (1,2,...)'#11'ParentColor'#8#0#0#6'T' + +'Label'#6'Label4'#4'Left'#2#8#6'Height'#2#14#3'Top'#2#9#5'Width'#2'0'#7'Capt' + +'ion'#6#10'Variables:'#11'ParentColor'#8#0#0#8'TListBox'#7'VarList'#4'Left'#2 + +#8#6'Height'#3'?'#1#3'Top'#2#24#5'Width'#3#176#0#10'ItemHeight'#2#0#8'TabOrd' + +'er'#2#0#0#0#7'TBitBtn'#5'CatIn'#4'Left'#3#192#0#6'Height'#2'!'#3'Top'#2#24#5 + +'Width'#2')'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0 + +'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0 + +#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)' + +#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190 + +'m'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255 + +'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139 + +'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160 + +#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255 + +#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128 + +#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199 + +'t'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255#150 + +#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255 + +#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255 + +#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255 + +'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163 + +'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247 + +';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187 + +'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#7'OnClick'#7#10'CatInCl' + +'ick'#8'TabOrder'#2#1#0#0#7'TBitBtn'#6'CatOut'#4'Left'#3#192#0#6'Height'#2'!' + ,#3'Top'#2'@'#5'Width'#2')'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0 + +#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd' + +#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G' + +#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161 + +'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131 + +#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/' + +'x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e' + +#195'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255 + +#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132 + +#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255 + +#255#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154 + +#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255 + +#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201 + +#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O' + +#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#7'OnC' + +'lick'#7#11'CatOutClick'#8'TabOrder'#2#2#0#0#7'TBitBtn'#5'ObjIn'#4'Left'#3 + +#192#0#6'Height'#2'!'#3'Top'#2'x'#5'Width'#2')'#10'Glyph.Data'#10':'#4#0#0'6' + +#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0 + +#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + ,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169 + +'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255 + +'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255 + +#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161 + +#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198 + +#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196 + +#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255 + +#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149 + +#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P' + +#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195 + +'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255 + +'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#7'OnClick'#7#10'ObjInClick'#8'TabOrder'#2#3#0#0#7'TBitBtn'#6 + +'ObjOut'#4'Left'#3#192#0#6'Height'#2'!'#3'Top'#3#160#0#5'Width'#2')'#10'Glyp' + +'h.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0 + +#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G' + +#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)' + +#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134 + +#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203 + +#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190 + ,'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127 + +#204#138#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255 + +#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135 + +#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255 + +#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177 + +'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255 + +'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#7'OnClick'#7#11'ObjOutClick'#8'Ta' + +'bOrder'#2#4#0#0#7'TBitBtn'#7'RaterIn'#4'Left'#3#192#0#6'Height'#2'!'#3'Top' + +#3#216#0#5'Width'#2')'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0 + +'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0 + +#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G' + +#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^' + +#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195 + +'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255 + +#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255 + +#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255 + +']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145 + +'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + ,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#7'OnClick' + +#7#12'RaterInClick'#8'TabOrder'#2#5#0#0#7'TBitBtn'#8'RaterOut'#4'Left'#3#192 + +#0#6'Height'#2'!'#3'Top'#3#0#1#5'Width'#2')'#10'Glyph.Data'#10':'#4#0#0'6'#4 + +#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0 + +#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207 + +'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';' + +#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255 + +#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152#211 + +#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130 + +#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$' + +#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138#255#162#216#171 + +#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204 + +#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'x' + +#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209 + +#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M' + +#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255 + +'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't' + +#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't' + +#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#7'OnClick'#7#13'RaterOutClick'#8'TabOrder'#2#6#0#0#5'TE' + ,'dit'#7'CatEdit'#4'Left'#3#249#0#6'Height'#2#21#3'Top'#2'('#5'Width'#3#170#0 + +#8'TabOrder'#2#7#4'Text'#6#7'CatEdit'#0#0#5'TEdit'#10'ObjectEdit'#4'Left'#3 + +#248#0#6'Height'#2#21#3'Top'#3#136#0#5'Width'#3#170#0#8'TabOrder'#2#8#4'Text' + +#6#5'Edit1'#0#0#5'TEdit'#9'RaterEdit'#4'Left'#3#249#0#6'Height'#2#21#3'Top'#3 + +#232#0#5'Width'#3#170#0#8'TabOrder'#2#9#4'Text'#6#5'Edit1'#0#0#7'TButton'#8 + +'ResetBtn'#4'Left'#3#199#1#6'Height'#2'#'#3'Top'#2'x'#5'Width'#2'U'#7'Captio' + +'n'#6#5'Reset'#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#10#0#0#7'TButton' + +#9'CancelBtn'#4'Left'#3#200#1#6'Height'#2'#'#3'Top'#3#180#0#5'Width'#2'U'#7 + +'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#11#0#0#7'TButton'#10 + +'ComputeBtn'#4'Left'#3#199#1#6'Height'#2'#'#3'Top'#3#240#0#5'Width'#2'U'#7'C' + +'aption'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#12#0#0#7 + +'TButton'#9'ReturnBtn'#4'Left'#3#200#1#6'Height'#2'#'#3'Top'#3'.'#1#5'Width' + +#2'U'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2#13#0#0#7'TBut' + +'ton'#7'HelpBtn'#3'Tag'#2'}'#4'Left'#3#199#1#6'Height'#2'!'#3'Top'#2'8'#5'Wi' + +'dth'#2'V'#7'Caption'#6#4'Help'#7'OnClick'#7#12'HelpBtnClick'#8'TabOrder'#2 + +#14#0#0#0 +]); diff --git a/applications/lazstats/source_orig/genkappaunit.pas b/applications/lazstats/source_orig/genkappaunit.pas new file mode 100644 index 000000000..5ea5f8ed3 --- /dev/null +++ b/applications/lazstats/source_orig/genkappaunit.pas @@ -0,0 +1,483 @@ +unit GenKappaUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + StdCtrls, ExtCtrls, Buttons, MainUnit, Globals, OutPutUnit, FunctionsLib, + Math, DictionaryUnit, DataProcs, MatrixLib, contexthelpunit; +type + + { TGenKappaFrm } + + TGenKappaFrm = class(TForm) + HelpBtn: TButton; + Label4: TLabel; + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + CatIn: TBitBtn; + CatOut: TBitBtn; + CatEdit: TEdit; + ObjectEdit: TEdit; + RaterEdit: TEdit; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + ObjIn: TBitBtn; + ObjOut: TBitBtn; + RaterIn: TBitBtn; + RaterOut: TBitBtn; + VarList: TListBox; + procedure CatInClick(Sender: TObject); + procedure CatOutClick(Sender: TObject); + procedure ComputeBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure HelpBtnClick(Sender: TObject); + procedure ObjInClick(Sender: TObject); + procedure ObjOutClick(Sender: TObject); + procedure RaterInClick(Sender: TObject); + procedure RaterOutClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + private + { private declarations } + NoCats : integer; + NoObjects : integer; + NoRaters : integer; + function compute_term1(R : IntDyneCube; i, j, k : integer) : double; + function compute_term2(R : IntDyneCube; i, j, l : integer) : double; + function compute_denom(R : IntDyneCube) : double; + function compute_partial_pchance(R : IntDyneCube; i, j : integer; + denom : double) : double; + function compute_partial_pobs(R : IntDyneCube; k, l : integer) : double; + function KappaVariance(R : IntDyneCube; n, m, K1 : integer) : double; + + public + { public declarations } + end; + +var + GenKappaFrm: TGenKappaFrm; + +implementation + +{ TGenKappaFrm } + +procedure TGenKappaFrm.ResetBtnClick(Sender: TObject); +VAR i : integer; +begin + CatIn.Visible := true; + CatOut.Visible := false; + ObjIn.Visible := true; + ObjOut.Visible := false; + RaterIn.Visible := true; + RaterOut.Visible := false; + CatEdit.Text := ''; + ObjectEdit.Text := ''; + RaterEdit.Text := ''; + VarList.Clear; + for i := 0 to NoVariables - 1 do + VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i+1,0]); +end; + +procedure TGenKappaFrm.CatInClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + CatEdit.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + CatIn.Visible := false; + CatOut.Visible := true; +end; + +procedure TGenKappaFrm.CatOutClick(Sender: TObject); +begin + VarList.Items.Add(CatEdit.Text); + CatEdit.Text := ''; + CatIn.Visible := true; + CatOut.Visible := false; +end; + +procedure TGenKappaFrm.ComputeBtnClick(Sender: TObject); +VAR + CatCol, ObjCol, RaterCol, frequency, aresult, intvalue, i, j, k, l : integer; + value, rater, category, anobject, theresult : integer; +// int CatCol:=0, ObjCol:=0, RaterCol:=0; +// int value, rater, category, object; + R : IntDyneCube; +// int ***R; + pobs, pchance, kappa, num, denom, partial_pchance, a_priori : double; + average_frequency : DblDyneVec; + outline : array[0..131] of char; + astring : array[0..21] of char; +// char outline[131], astring[21]; + dblvalue, z : double; + strvalue : string; + +begin + CatCol:=0; + ObjCol:=0; + RaterCol:=0; + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('Generalized Kappa Coefficient Procedure'); + OutPutFrm.RichEdit.Lines.Add('adapted from the program written by Giovanni Flammia'); + OutPutFrm.RichEdit.Lines.Add('copywritten 1995, M.I.T. Lab. for Computer Science'); + OutPutFrm.RichEdit.Lines.Add(''); + + // get columns for the variables + for i := 0 to NoVariables - 1 do + begin + if (OS3MainFrm.DataGrid.Cells[i+1,0] = CatEdit.Text) then CatCol := i+1; + if (OS3MainFrm.DataGrid.Cells[i+1,0] = RaterEdit.Text) then RaterCol := i+1; + if (OS3MainFrm.DataGrid.Cells[i+1,0] = ObjectEdit.Text) then ObjCol := i+1; + end; + if ((CatCol = 0) or (RaterCol = 0) or (ObjCol = 0)) then + begin + ShowMessage('ERROR! One or more variables not defined.'); + exit; + end; + // get max no of codes for objects, raters, categories + NoCats := 0; + NoObjects := 0; + NoRaters := 0; + for i := 0 to NoCases - 1 do + begin + value := StrToInt(Trim(OS3MainFrm.DataGrid.Cells[CatCol,i+1])); +// result := GetValue(i+1,CatCol,intvalue,dblvalue,strvalue); +// if (result :=:= 1) value := 0; +// else value := intvalue; + if (value > NoCats) then NoCats := value; + value := StrToInt(Trim(OS3MainFrm.DataGrid.Cells[ObjCol,i+1])); +// result := GetValue(i+1,ObjCol,intvalue,dblvalue,strvalue); +// if (result :=:= 1) value := 0; +// else value := intvalue; + if (value > NoObjects) then NoObjects := value; + value := StrToInt(Trim(OS3MainFrm.DataGrid.Cells[RaterCol,i+1])); +// result := GetValue(i+1,RaterCol,intvalue,dblvalue,strvalue); +// if (result :=:= 1) value := 0; +// else value := intvalue; + if (value > NoRaters) then NoRaters := value; + end; + + outline := format('%d Raters using %d Categories to rate %d Objects', + [NoRaters, NoCats, NoObjects]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + + // get memory for R and set to zero + SetLength(R,NoRaters+1,NoCats+1,NoObjects+1); + for i := 0 to NoRaters - 1 do + begin + for k := 0 to NoCats - 1 do + begin + for l := 0 to NoObjects - 1 do + begin + R[i,k,l] := 0; + end; + end; + end; + + // get memory for average_frequency + SetLength(average_frequency,NoCats+1); + for k := 0 to NoCats - 1 do average_frequency[k] := 0.0; + + // read data and store in R + for i := 0 to NoCases - 1 do + begin + rater := StrToInt(Trim(OS3MainFrm.DataGrid.Cells[RaterCol,i+1])); + anobject := StrToInt(Trim(OS3MainFrm.DataGrid.Cells[ObjCol,i+1])); + category := StrToInt(Trim(OS3MainFrm.DataGrid.Cells[CatCol,i+1])); + R[rater-1,category-1,anobject-1] := 1; + end; + + //compute chance probability of agreement pchance for all raters + pchance := 0.0; + denom := compute_denom(R); + for i := 0 to NoRaters - 1 do + begin + for j := 0 to NoRaters - 1 do + begin + if (i <> j) then + begin + partial_pchance := compute_partial_pchance(R,i,j,denom); + pchance := pchance + partial_pchance; + end; + end; + for k := 0 to NoCats - 1 do + begin + frequency := 0; + for l := 0 to NoObjects - 1 do + begin + frequency := frequency + R[i,k,l]; + end; + a_priori := frequency / NoObjects; + outline := format('Frequency[%d,%d] := %f',[i+1,k+1,a_priori]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + end; + + for k := 0 to NoCats - 1 do + begin + for l := 0 to NoObjects - 1 do + begin + for i := 0 to NoRaters - 1 do + begin + average_frequency[k] := average_frequency[k] + R[i,k,l]; + end; + end; + end; + + for k := 0 to NoCats - 1 do + begin + average_frequency[k] := average_frequency[k] / (NoObjects * NoRaters); + outline := format('Average_Frequency[%d] := %f',[k+1,average_frequency[k]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + outline := format('PChance := %f',[pchance]); + OutPutFrm.RichEdit.Lines.Add(outline); + + // compute observed probability of agreement among all raters + num := 0.0; + for k := 0 to NoCats - 1 do + begin + for l := 0 to NoObjects - 1 do + begin + num := num + compute_partial_pobs(R,k,l); + end; + end; + if (denom > 0.0) then pobs := num / denom + else pobs := 0.0; + outline := format('PObs := %f',[pobs]); + OutPutFrm.RichEdit.Lines.Add(outline); + + kappa := (pobs - pchance) / (1.0 - pchance); + outline := format('Kappa := %f',[kappa]); + OutPutFrm.RichEdit.Lines.Add(outline); + z := KappaVariance(R,NoObjects,NoRaters,NoCats); + if (z > 0.0) then z := kappa / sqrt(z); + outline := format('z for Kappa := %8.3f with probability > %8.3f',[z,1.0-probz(z)]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.ShowModal; + + // clean up space allocated + average_frequency := nil; + R := nil; +end; + +procedure TGenKappaFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TGenKappaFrm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +function TGenKappaFrm.compute_term1(R : IntDyneCube; i, j, k : integer) : double; +VAR + ii,jj : integer; // range over 0 .. num_coders-1 */ + kk : integer; // range over 0 .. num_categories-1 */ + l,ll : integer; // range over 0 .. num_points-1 */ + denom_i : integer; //:=0; + denom_j : integer; //:=0; + num_i : integer; //:=0; + num_j : integer; //:=0; + +begin + denom_i := 0; + denom_j := 0; + num_i := 0; + num_j := 0; + for kk := 0 to NoCats - 1 do + begin + for ll := 0 to NoObjects - 1 do + begin + denom_i := denom_i + R[i,kk,ll]; + denom_j := denom_j + R[j,kk,ll]; + end; + end; + + for l := 0 to NoObjects - 1 do + begin + num_i := num_i + R[i,k,l]; + num_j := num_j + R[j,k,l]; + end; + + result := ((num_i / denom_i) * (num_j / denom_j)); +end; + +function TGenKappaFrm.compute_term2(R : IntDyneCube; i, j, l : integer) : double; +VAR + sum_i, sum_j, k : integer; +begin + sum_i:=0; + sum_j:=0; + + for k := 0 to NoCats - 1 do + begin + sum_i := sum_i + R[i,k,l]; + sum_j := sum_j + R[j,k,l]; + end; + + result := (sum_i * sum_j ); +end; +//--------------------------------------------------------------------------- + +function TGenKappaFrm.compute_denom(R : IntDyneCube) : double; +VAR + sum : IntDyneVec; + aresult : double; + i, j, k, l : integer; +begin + aresult := 0; + + SetLength(sum,NoObjects); // sum := (int *)calloc(num_points,sizeof(int)); + for l := 0 to NoObjects - 1 do + begin + sum[l] := 0; + for i := 0 to NoRaters - 1 do + begin + for k := 0 to NoCats - 1 do + begin + sum[l] := sum[l] + R[i,k,l]; + end; + end; + end; + for l := 0 to NoObjects - 1 do + begin + aresult := aresult + sum[l] * ( sum[l] - 1); + end; + sum := nil; + result := aresult; +end; + +function TGenKappaFrm.compute_partial_pchance(R : IntDyneCube; i, j : integer; + denom : double) : double; +VAR + term1, term2 : double; + k, l : integer; +begin + term1 := 0; + term2 := 0; + + for k := 0 to NoCats - 1 do + begin + term1 := term1 + compute_term1(R,i,j,k); + end; + + for l := 0 to NoObjects - 1 do + begin + term2 := term2 + compute_term2(R,i,j,l); + end; + if (denom > 0.0) then result := ( term1 * ( term2 / denom ) ) + else result := 0.0; +end; +//--------------------------------------------------------------------------- + +function TGenKappaFrm.compute_partial_pobs(R : IntDyneCube; k, l : integer) : double; +VAR + sum, i : integer; +begin + sum := 0; + + for i := 0 to NoRaters - 1 do + begin + sum := sum + R[i,k,l]; + end; + + result := (sum * (sum - 1)); +end; + +function TGenKappaFrm.KappaVariance(R : IntDyneCube; n, m, K1 : integer) : double; +VAR + xij, variance, term1, term2 : double; + i, j, k : integer; + pj : DblDyneVec; + +begin + // calculates the variance of Kappa + // R contains 1's or 0's for raters, categories and objects (row, col, slice) + // m is number of raters + // n is number of subjects + // K1 is the number of categories + + term1 := 0.0; + term2 := 0.0; + SetLength(pj,K1); + for j := 0 to K1 - 1 do pj[j] := 0.0; + + // get proportion of values in each category + for j := 0 to K1 - 1 do // accross categories + begin + xij := 0.0; + for i := 0 to m - 1 do // accross raters + begin + for k := 0 to n - 1 do // accross objects + begin + xij := xij + R[i,j,k]; + end; + end; + pj[j] := pj[j] + xij; + end; + for j := 0 to K1 - 1 do pj[j] := pj[j] / (n * m); + for j := 0 to K1 - 1 do + begin + term1 := term1 +(pj[j] * (1.0 - pj[j])); + term2 := term2 + (pj[j] * (1.0 - pj[j]) * (1.0 - 2.0 * pj[j])); + end; + term1 := term1 * term1; + if ((term1 > 0) and (term2 > 0)) then + variance := (2.0 / (n * m * (m-1) * term1)) * (term1 - term2) + else variance := 0.0; + pj := nil; + result := variance; +end; + +procedure TGenKappaFrm.ObjInClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + + ObjectEdit.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + ObjIn.Visible := false; + ObjOut.Visible := true; +end; + +procedure TGenKappaFrm.ObjOutClick(Sender: TObject); +begin + VarList.Items.Add(ObjectEdit.Text); + ObjectEdit.Text := ''; + ObjIn.Visible := true; + ObjOut.Visible := false; +end; + +procedure TGenKappaFrm.RaterInClick(Sender: TObject); +VAR index : integer; +begin + index := VarList.ItemIndex; + + RaterEdit.Text := VarList.Items.Strings[index]; + VarList.Items.Delete(index); + RaterIn.Visible := false; + RaterOut.Visible := true; + +end; + +procedure TGenKappaFrm.RaterOutClick(Sender: TObject); +begin + VarList.Items.Add(RaterEdit.Text); + RaterEdit.Text := ''; + RaterIn.Visible := true; + RaterOut.Visible := false; +end; + +initialization + {$I genkappaunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/genrndvalsunit.lfm b/applications/lazstats/source_orig/genrndvalsunit.lfm new file mode 100644 index 000000000..a3cafc317 --- /dev/null +++ b/applications/lazstats/source_orig/genrndvalsunit.lfm @@ -0,0 +1,272 @@ +object GenRndValsFrm: TGenRndValsFrm + Left = 194 + Height = 393 + Top = 111 + Width = 380 + Caption = 'Generate Random Values' + ClientHeight = 393 + ClientWidth = 380 + OnShow = FormShow + LCLVersion = '0.9.30' + object Label1: TLabel + Left = 8 + Height = 16 + Top = 112 + Width = 80 + Caption = 'Variable Label: ' + ParentColor = False + end + object Label2: TLabel + Left = 161 + Height = 16 + Top = 168 + Width = 49 + Caption = 'Between ' + ParentColor = False + end + object Label3: TLabel + Left = 263 + Height = 16 + Top = 168 + Width = 24 + Caption = 'and ' + ParentColor = False + end + object Label4: TLabel + Left = 162 + Height = 16 + Top = 200 + Width = 49 + Caption = 'Between ' + ParentColor = False + end + object Label5: TLabel + Left = 263 + Height = 16 + Top = 200 + Width = 21 + Caption = 'and' + ParentColor = False + end + object Label6: TLabel + Left = 161 + Height = 16 + Top = 233 + Width = 45 + Caption = 'Mean = ' + ParentColor = False + end + object Label7: TLabel + Left = 264 + Height = 16 + Top = 234 + Width = 35 + Caption = 'S.D. = ' + ParentColor = False + end + object Label8: TLabel + Left = 161 + Height = 16 + Top = 270 + Width = 41 + Caption = 'D.F. 1 =' + ParentColor = False + end + object Label9: TLabel + Left = 160 + Height = 16 + Top = 304 + Width = 41 + Caption = 'D.F. 1 =' + ParentColor = False + end + object Label10: TLabel + Left = 264 + Height = 16 + Top = 301 + Width = 41 + Caption = 'D.F. 2 =' + ParentColor = False + end + object RadioGroup1: TRadioGroup + Left = 7 + Height = 91 + Top = 2 + Width = 241 + AutoFill = True + Caption = 'Generate Cases For:' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 73 + ClientWidth = 237 + Items.Strings = ( + 'All Current Cases' + 'A Specific Number of Cases' + ) + OnClick = RadioGroup1Click + TabOrder = 0 + end + object NoCasesEdit: TEdit + Left = 184 + Height = 23 + Top = 56 + Width = 44 + OnExit = NoCasesEditExit + TabOrder = 1 + Text = 'NoCasesEdit' + end + object LabelEdit: TEdit + Left = 89 + Height = 23 + Top = 101 + Width = 159 + TabOrder = 2 + Text = 'LabelEdit' + end + object RadioGroup2: TRadioGroup + Left = 8 + Height = 200 + Top = 136 + Width = 143 + AutoFill = True + Caption = 'Distribution Shape:' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 182 + ClientWidth = 139 + Items.Strings = ( + 'Flat - Integer' + 'Flat - Floating Point' + 'Normal z Values' + 'Chi-Squared Values' + 'F Distribution Values' + ) + OnClick = RadioGroup2Click + TabOrder = 3 + end + object LowIntEdit: TEdit + Left = 210 + Height = 23 + Top = 160 + Width = 43 + OnKeyPress = LowIntEditKeyPress + TabOrder = 4 + Text = 'LowIntEdit' + end + object HiIntEdit: TEdit + Left = 307 + Height = 23 + Top = 161 + Width = 47 + TabOrder = 5 + Text = 'HiIntEdit' + end + object LowRealEdit: TEdit + Left = 210 + Height = 23 + Top = 193 + Width = 43 + OnKeyPress = LowRealEditKeyPress + TabOrder = 6 + Text = 'LowRealEdit' + end + object HiRealEdit: TEdit + Left = 306 + Height = 23 + Top = 194 + Width = 46 + TabOrder = 7 + Text = 'HiRealEdit' + end + object zMeanEdit: TEdit + Left = 210 + Height = 23 + Top = 227 + Width = 45 + OnKeyPress = zMeanEditKeyPress + TabOrder = 8 + Text = 'zMeanEdit' + end + object zSDEdit: TEdit + Left = 306 + Height = 23 + Top = 227 + Width = 48 + TabOrder = 9 + Text = 'zSDEdit' + end + object ChiDFEdit: TEdit + Left = 210 + Height = 23 + Top = 262 + Width = 43 + TabOrder = 10 + Text = 'ChiDFEdit' + end + object FDF1Edit: TEdit + Left = 208 + Height = 23 + Top = 294 + Width = 46 + OnKeyPress = FDF1EditKeyPress + TabOrder = 11 + Text = 'FDF1Edit' + end + object FDF2Edit: TEdit + Left = 312 + Height = 23 + Top = 289 + Width = 47 + TabOrder = 12 + Text = 'FDF2Edit' + end + object ResetBtn: TButton + Left = 8 + Height = 31 + Top = 344 + Width = 74 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 13 + end + object CancelBtn: TButton + Left = 104 + Height = 31 + Top = 344 + Width = 74 + Cancel = True + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 14 + end + object ComputeBtn: TButton + Left = 200 + Height = 31 + Top = 344 + Width = 74 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 15 + end + object Return: TButton + Left = 296 + Height = 31 + Top = 344 + Width = 74 + Caption = 'Return' + ModalResult = 1 + TabOrder = 16 + end +end diff --git a/applications/lazstats/source_orig/genrndvalsunit.lrs b/applications/lazstats/source_orig/genrndvalsunit.lrs new file mode 100644 index 000000000..434d789c4 --- /dev/null +++ b/applications/lazstats/source_orig/genrndvalsunit.lrs @@ -0,0 +1,73 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TGenRndValsFrm','FORMDATA',[ + 'TPF0'#14'TGenRndValsFrm'#13'GenRndValsFrm'#4'Left'#3#194#0#6'Height'#3#137#1 + +#3'Top'#2'o'#5'Width'#3'|'#1#7'Caption'#6#22'Generate Random Values'#12'Clie' + +'ntHeight'#3#137#1#11'ClientWidth'#3'|'#1#6'OnShow'#7#8'FormShow'#10'LCLVers' + +'ion'#6#6'0.9.30'#0#6'TLabel'#6'Label1'#4'Left'#2#8#6'Height'#2#16#3'Top'#2 + +'p'#5'Width'#2'P'#7'Caption'#6#16'Variable Label: '#11'ParentColor'#8#0#0#6 + +'TLabel'#6'Label2'#4'Left'#3#161#0#6'Height'#2#16#3'Top'#3#168#0#5'Width'#2 + +'1'#7'Caption'#6#8'Between '#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Lef' + +'t'#3#7#1#6'Height'#2#16#3'Top'#3#168#0#5'Width'#2#24#7'Caption'#6#4'and '#11 + +'ParentColor'#8#0#0#6'TLabel'#6'Label4'#4'Left'#3#162#0#6'Height'#2#16#3'Top' + +#3#200#0#5'Width'#2'1'#7'Caption'#6#8'Between '#11'ParentColor'#8#0#0#6'TLab' + +'el'#6'Label5'#4'Left'#3#7#1#6'Height'#2#16#3'Top'#3#200#0#5'Width'#2#21#7'C' + +'aption'#6#3'and'#11'ParentColor'#8#0#0#6'TLabel'#6'Label6'#4'Left'#3#161#0#6 + +'Height'#2#16#3'Top'#3#233#0#5'Width'#2'-'#7'Caption'#6#7'Mean = '#11'Parent' + +'Color'#8#0#0#6'TLabel'#6'Label7'#4'Left'#3#8#1#6'Height'#2#16#3'Top'#3#234#0 + +#5'Width'#2'#'#7'Caption'#6#7'S.D. = '#11'ParentColor'#8#0#0#6'TLabel'#6'Lab' + +'el8'#4'Left'#3#161#0#6'Height'#2#16#3'Top'#3#14#1#5'Width'#2')'#7'Caption'#6 + +#8'D.F. 1 ='#11'ParentColor'#8#0#0#6'TLabel'#6'Label9'#4'Left'#3#160#0#6'Hei' + +'ght'#2#16#3'Top'#3'0'#1#5'Width'#2')'#7'Caption'#6#8'D.F. 1 ='#11'ParentCol' + +'or'#8#0#0#6'TLabel'#7'Label10'#4'Left'#3#8#1#6'Height'#2#16#3'Top'#3'-'#1#5 + +'Width'#2')'#7'Caption'#6#8'D.F. 2 ='#11'ParentColor'#8#0#0#11'TRadioGroup' + +#11'RadioGroup1'#4'Left'#2#7#6'Height'#2'['#3'Top'#2#2#5'Width'#3#241#0#8'Au' + +'toFill'#9#7'Caption'#6#19'Generate Cases For:'#28'ChildSizing.LeftRightSpac' + +'ing'#2#6#28'ChildSizing.TopBottomSpacing'#2#6#29'ChildSizing.EnlargeHorizon' + +'tal'#7#24'crsHomogenousChildResize'#27'ChildSizing.EnlargeVertical'#7#24'cr' + +'sHomogenousChildResize'#28'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChild' + +'s'#26'ChildSizing.ShrinkVertical'#7#14'crsScaleChilds'#18'ChildSizing.Layou' + +'t'#7#29'cclLeftToRightThenTopToBottom'#27'ChildSizing.ControlsPerLine'#2#1 + +#12'ClientHeight'#2'I'#11'ClientWidth'#3#237#0#13'Items.Strings'#1#6#17'All ' + +'Current Cases'#6#26'A Specific Number of Cases'#0#7'OnClick'#7#16'RadioGrou' + +'p1Click'#8'TabOrder'#2#0#0#0#5'TEdit'#11'NoCasesEdit'#4'Left'#3#184#0#6'Hei' + +'ght'#2#23#3'Top'#2'8'#5'Width'#2','#6'OnExit'#7#15'NoCasesEditExit'#8'TabOr' + +'der'#2#1#4'Text'#6#11'NoCasesEdit'#0#0#5'TEdit'#9'LabelEdit'#4'Left'#2'Y'#6 + +'Height'#2#23#3'Top'#2'e'#5'Width'#3#159#0#8'TabOrder'#2#2#4'Text'#6#9'Label' + +'Edit'#0#0#11'TRadioGroup'#11'RadioGroup2'#4'Left'#2#8#6'Height'#3#200#0#3'T' + +'op'#3#136#0#5'Width'#3#143#0#8'AutoFill'#9#7'Caption'#6#19'Distribution Sha' + +'pe:'#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizing.TopBottomSpacing'#2 + +#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomogenousChildResize'#27'Child' + +'Sizing.EnlargeVertical'#7#24'crsHomogenousChildResize'#28'ChildSizing.Shrin' + +'kHorizontal'#7#14'crsScaleChilds'#26'ChildSizing.ShrinkVertical'#7#14'crsSc' + +'aleChilds'#18'ChildSizing.Layout'#7#29'cclLeftToRightThenTopToBottom'#27'Ch' + +'ildSizing.ControlsPerLine'#2#1#12'ClientHeight'#3#182#0#11'ClientWidth'#3 + +#139#0#13'Items.Strings'#1#6#14'Flat - Integer'#6#21'Flat - Floating Point'#6 + +#15'Normal z Values'#6#18'Chi-Squared Values'#6#21'F Distribution Values'#0#7 + +'OnClick'#7#16'RadioGroup2Click'#8'TabOrder'#2#3#0#0#5'TEdit'#10'LowIntEdit' + +#4'Left'#3#210#0#6'Height'#2#23#3'Top'#3#160#0#5'Width'#2'+'#10'OnKeyPress'#7 + +#18'LowIntEditKeyPress'#8'TabOrder'#2#4#4'Text'#6#10'LowIntEdit'#0#0#5'TEdit' + +#9'HiIntEdit'#4'Left'#3'3'#1#6'Height'#2#23#3'Top'#3#161#0#5'Width'#2'/'#8'T' + +'abOrder'#2#5#4'Text'#6#9'HiIntEdit'#0#0#5'TEdit'#11'LowRealEdit'#4'Left'#3 + +#210#0#6'Height'#2#23#3'Top'#3#193#0#5'Width'#2'+'#10'OnKeyPress'#7#19'LowRe' + +'alEditKeyPress'#8'TabOrder'#2#6#4'Text'#6#11'LowRealEdit'#0#0#5'TEdit'#10'H' + +'iRealEdit'#4'Left'#3'2'#1#6'Height'#2#23#3'Top'#3#194#0#5'Width'#2'.'#8'Tab' + +'Order'#2#7#4'Text'#6#10'HiRealEdit'#0#0#5'TEdit'#9'zMeanEdit'#4'Left'#3#210 + +#0#6'Height'#2#23#3'Top'#3#227#0#5'Width'#2'-'#10'OnKeyPress'#7#17'zMeanEdit' + +'KeyPress'#8'TabOrder'#2#8#4'Text'#6#9'zMeanEdit'#0#0#5'TEdit'#7'zSDEdit'#4 + +'Left'#3'2'#1#6'Height'#2#23#3'Top'#3#227#0#5'Width'#2'0'#8'TabOrder'#2#9#4 + +'Text'#6#7'zSDEdit'#0#0#5'TEdit'#9'ChiDFEdit'#4'Left'#3#210#0#6'Height'#2#23 + +#3'Top'#3#6#1#5'Width'#2'+'#8'TabOrder'#2#10#4'Text'#6#9'ChiDFEdit'#0#0#5'TE' + +'dit'#8'FDF1Edit'#4'Left'#3#208#0#6'Height'#2#23#3'Top'#3'&'#1#5'Width'#2'.' + +#10'OnKeyPress'#7#16'FDF1EditKeyPress'#8'TabOrder'#2#11#4'Text'#6#8'FDF1Edit' + +#0#0#5'TEdit'#8'FDF2Edit'#4'Left'#3'8'#1#6'Height'#2#23#3'Top'#3'!'#1#5'Widt' + +'h'#2'/'#8'TabOrder'#2#12#4'Text'#6#8'FDF2Edit'#0#0#7'TButton'#8'ResetBtn'#4 + +'Left'#2#8#6'Height'#2#31#3'Top'#3'X'#1#5'Width'#2'J'#7'Caption'#6#5'Reset'#7 + +'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#13#0#0#7'TButton'#9'CancelBtn'#4 + +'Left'#2'h'#6'Height'#2#31#3'Top'#3'X'#1#5'Width'#2'J'#6'Cancel'#9#7'Caption' + ,#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#14#0#0#7'TButton'#10'ComputeB' + +'tn'#4'Left'#3#200#0#6'Height'#2#31#3'Top'#3'X'#1#5'Width'#2'J'#7'Caption'#6 + +#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#15#0#0#7'TButton' + +#6'Return'#4'Left'#3'('#1#6'Height'#2#31#3'Top'#3'X'#1#5'Width'#2'J'#7'Capti' + +'on'#6#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2#16#0#0#0 +]); diff --git a/applications/lazstats/source_orig/genrndvalsunit.pas b/applications/lazstats/source_orig/genrndvalsunit.pas new file mode 100644 index 000000000..d858afa23 --- /dev/null +++ b/applications/lazstats/source_orig/genrndvalsunit.pas @@ -0,0 +1,282 @@ +unit GenRndValsUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + ExtCtrls, StdCtrls, Globals, MainUnit, OutPutUnit, FunctionsLib, + DataProcs, DictionaryUnit, Math; + +type + + { TGenRndValsFrm } + + TGenRndValsFrm = class(TForm) + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + Return: TButton; + ChiDFEdit: TEdit; + FDF2Edit: TEdit; + FDF1Edit: TEdit; + Label10: TLabel; + Label8: TLabel; + Label9: TLabel; + zSDEdit: TEdit; + zMeanEdit: TEdit; + HiRealEdit: TEdit; + Label5: TLabel; + Label6: TLabel; + Label7: TLabel; + LowRealEdit: TEdit; + Label4: TLabel; + LowIntEdit: TEdit; + HiIntEdit: TEdit; + Label2: TLabel; + Label3: TLabel; + LabelEdit: TEdit; + Label1: TLabel; + NoCasesEdit: TEdit; + RadioGroup1: TRadioGroup; + RadioGroup2: TRadioGroup; + procedure ComputeBtnClick(Sender: TObject); + procedure FDF1EditKeyPress(Sender: TObject; var Key: char); + procedure FormShow(Sender: TObject); + procedure LowIntEditKeyPress(Sender: TObject; var Key: char); + procedure LowRealEditKeyPress(Sender: TObject; var Key: char); + procedure NoCasesEditExit(Sender: TObject); + procedure RadioGroup1Click(Sender: TObject); + procedure RadioGroup2Click(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + procedure zMeanEditKeyPress(Sender: TObject; var Key: char); + private + { private declarations } + Ncases : integer; + DistType : integer; + public + { public declarations } + end; + +var + GenRndValsFrm: TGenRndValsFrm; + +implementation + +{ TGenRndValsFrm } + +procedure TGenRndValsFrm.RadioGroup1Click(Sender: TObject); +begin + if RadioGroup1.ItemIndex = 1 then + begin + if NoCases <= 0 then + begin + ShowMessage('Error! There are currently no cases!'); + exit; + end + else Ncases := NoCases + end + else NoCasesEdit.SetFocus; +end; + +procedure TGenRndValsFrm.LowIntEditKeyPress(Sender: TObject; var Key: char); +begin + if Ord(Key) = 13 then HiIntEdit.SetFocus; +end; + +procedure TGenRndValsFrm.FDF1EditKeyPress(Sender: TObject; var Key: char); +begin + if Ord(Key) = 13 then FDF2Edit.SetFocus; +end; + +procedure TGenRndValsFrm.ComputeBtnClick(Sender: TObject); +var + i, j : integer; + col : integer; + RndNo : integer; + RealRnd : double; + Range : integer; + MinReal, MaxReal : double; + Mean, StdDev : double; + SumX1, SumX2 : double; + df1, df2 : integer; +begin + if LabelEdit.Text = '' then + begin + ShowMessage('Error. Enter a label for the variable.'); + exit; + end; + if DistType <= 0 then + begin + ShowMessage('First, select a distribution type.'); + exit; + end; + if RadioGroup1.ItemIndex < 0 then + begin + ShowMessage('Select an option for the number of values to generate.'); + exit; + end; + if (RadioGroup1.ItemIndex = 1) and (NoCasesEdit.Text = '') then + begin + ShowMessage('Error! Number of cases not specified.'); + exit; + end + else Ncases := StrToInt(NoCasesEdit.Text); + if NoCases < Ncases then + begin + OS3MainFrm.DataGrid.RowCount := NCases + 1; + OS3MainFrm.NoCasesEdit.Text := IntToStr(NCases); + NoCases := Ncases; + end; + DictionaryFrm.DictGrid.ColCount := 8; + if NoVariables <= 0 then // a new data file + begin + OS3MainFrm.DataGrid.ColCount := 2; + for i := 1 to Ncases do + OS3MainFrm.DataGrid.Cells[0,i] := format('Case %d',[i]); + col := 1; + DictionaryFrm.DictGrid.RowCount := 1; + DictionaryFrm.NewVar(col); + DictionaryFrm.DictGrid.Cells[1,col] := LabelEdit.Text; + OS3MainFrm.DataGrid.Cells[col,0] := LabelEdit.Text; + end + else // existing data file + begin + col := NoVariables + 1; + DictionaryFrm.NewVar(col); + DictionaryFrm.DictGrid.Cells[1,col] := LabelEdit.Text; + OS3MainFrm.DataGrid.Cells[col,0] := LabelEdit.Text; + end; + randomize; + case DistType of + 1 : begin // range of integers + Range := StrToInt(HiIntEdit.Text) - StrToInt(LowIntEdit.Text); + for i := 1 to Ncases do + begin + RndNo := random(Range); + RndNo := RndNo + StrToInt(LowIntEdit.Text); + OS3MainFrm.DataGrid.Cells[col,i] := IntToStr(RndNo); + end; + end; + 2 : begin // range of real random numbers + MinReal := StrToFloat(LowRealEdit.Text); + MaxReal := StrToFloat(HiRealEdit.Text); + Range := round(MaxReal - MinReal); + for i := 1 to Ncases do + begin + RealRnd := random; + RndNo := random(Range); + RealRnd := RndNo + RealRnd + MinReal; + OS3MainFrm.DataGrid.Cells[col,i] := format('%8.3f',[RealRnd]); + end; + end; + 3 : begin // normally distributed z score + Mean := StrToFloat(zMeanEdit.Text); + StdDev := StrToFloat(zSDEdit.Text); + for i := 1 to Ncases do + begin + RealRnd := RandG(Mean,StdDev); + OS3MainFrm.DataGrid.Cells[col,i] := format('%8.3f',[RealRnd]); + end; + end; + 4 : begin // Chi square is a sum of df squared normally distributed z scores + df1 := StrToInt(ChiDFEdit.Text); + for i := 1 to Ncases do + begin + SumX1 := 0.0; + for j := 1 to df1 do + begin + RealRnd := RandG(0.0,1.0); + SumX1 := SumX1 + (RealRnd * RealRnd); + end; + OS3MainFrm.DataGrid.Cells[col,i] := format('%8.3f',[SumX1]); + end; + end; + 5 : begin // F ratio is a ratio of two independent chi-squares + df1 := StrToInt(FDF1Edit.Text); + df2 := StrToInt(FDF2Edit.Text); + for i := 1 to Ncases do + begin + SumX1 := 0.0; + SumX2 := 0.0; + for j := 1 to df1 do + begin + RealRnd := RandG(0.0,1.0); + SumX1 := SumX1 + (RealRnd * RealRnd); + end; + for j := 1 to df2 do + begin + RealRnd := RandG(0.0,1.0); + SumX2 := SumX2 + (RealRnd * RealRnd); + end; + RealRnd := SumX1 / SumX2; + OS3MainFrm.DataGrid.Cells[col,i] := format('%8.3f',[RealRnd]); + end; + end; + end; + NoVariables := col; + OS3MainFrm.NoVarsEdit.Text := IntToStr(NoVariables); + OS3MainFrm.NoCasesEdit.Text := IntToStr(NoCases); +end; + +procedure TGenRndValsFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TGenRndValsFrm.LowRealEditKeyPress(Sender: TObject; var Key: char); +begin + if Ord(Key) = 13 then HiRealEdit.SetFocus; +end; + +procedure TGenRndValsFrm.NoCasesEditExit(Sender: TObject); +begin + if RadioGroup1.ItemIndex = 1 then Ncases := StrToInt(NoCasesEdit.Text); +end; + +procedure TGenRndValsFrm.RadioGroup2Click(Sender: TObject); +begin + DistType := RadioGroup2.ItemIndex + 1; + case DistType of + 1 : LowIntEdit.SetFocus; + 2 : LowRealEdit.SetFocus; + 3 : zMeanEdit.SetFocus; + 4 : ChiDFEdit.SetFocus; + 5 : FDF1Edit.SetFocus; + else + begin + ShowMessage('Please select a distribution type before pressing Compute.'); + exit; + end; + end; +end; + +procedure TGenRndValsFrm.ResetBtnClick(Sender: TObject); +begin + NoCasesEdit.Text := ''; + RadioGroup1.ItemIndex := -1; + RadioGroup2.ItemIndex := -1; + LabelEdit.Text := ''; + LowIntEdit.Text := ''; + HiIntEdit.Text := ''; + LowRealEdit.Text := ''; + HiRealEdit.Text := ''; + zMeanEdit.Text := ''; + zSDEdit.Text := ''; + ChiDFEdit.Text := ''; + FDF1Edit.Text := ''; + FDF2Edit.Text := ''; + DistType := 0; +end; + +procedure TGenRndValsFrm.zMeanEditKeyPress(Sender: TObject; var Key: char); +begin + if Ord(Key) = 13 then zSDEdit.SetFocus; +end; + +initialization + {$I genrndvalsunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/gensequnit.lfm b/applications/lazstats/source_orig/gensequnit.lfm new file mode 100644 index 000000000..780ffcfdf --- /dev/null +++ b/applications/lazstats/source_orig/gensequnit.lfm @@ -0,0 +1,128 @@ +object GenSeqFrm: TGenSeqFrm + Left = 174 + Height = 192 + Top = 110 + Width = 301 + Caption = 'Generation of Sequential Values' + ClientHeight = 192 + ClientWidth = 301 + OnShow = FormShow + LCLVersion = '0.9.30' + object Label1: TLabel + Left = 9 + Height = 16 + Top = 96 + Width = 100 + Caption = 'Start Sequence At: ' + ParentColor = False + end + object Label2: TLabel + Left = 10 + Height = 16 + Top = 127 + Width = 114 + Caption = 'Increment Values By: ' + ParentColor = False + end + object Label3: TLabel + Left = 8 + Height = 16 + Top = 160 + Width = 107 + Caption = 'New Variable Label: ' + ParentColor = False + end + object RadioGroup1: TRadioGroup + Left = 10 + Height = 71 + Top = 6 + Width = 188 + AutoFill = True + Caption = 'Generate for:' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 53 + ClientWidth = 184 + Items.Strings = ( + 'All Current Cases' + 'Number of Cases = ' + ) + OnClick = RadioGroup1Click + TabOrder = 0 + end + object NoCasesEdit: TEdit + Left = 144 + Height = 23 + Top = 40 + Width = 42 + OnExit = NoCasesEditExit + TabOrder = 1 + Text = 'NoCasesEdit' + end + object StartAtEdit: TEdit + Left = 150 + Height = 23 + Top = 86 + Width = 41 + TabOrder = 2 + Text = 'StartAtEdit' + end + object IncrEdit: TEdit + Left = 149 + Height = 23 + Top = 120 + Width = 42 + TabOrder = 3 + Text = 'IncrEdit' + end + object LabelEdit: TEdit + Left = 113 + Height = 23 + Top = 153 + Width = 78 + TabOrder = 4 + Text = 'LabelEdit' + end + object ResetBtn: TButton + Left = 209 + Height = 30 + Top = 7 + Width = 80 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 5 + end + object CancelBtn: TButton + Left = 209 + Height = 30 + Top = 48 + Width = 80 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 6 + end + object ComputeBtn: TButton + Left = 209 + Height = 30 + Top = 104 + Width = 80 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 7 + end + object ReturnBtn: TButton + Left = 209 + Height = 30 + Top = 144 + Width = 80 + Caption = 'Return' + ModalResult = 1 + TabOrder = 8 + end +end diff --git a/applications/lazstats/source_orig/gensequnit.lrs b/applications/lazstats/source_orig/gensequnit.lrs new file mode 100644 index 000000000..44cfc6559 --- /dev/null +++ b/applications/lazstats/source_orig/gensequnit.lrs @@ -0,0 +1,37 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TGenSeqFrm','FORMDATA',[ + 'TPF0'#10'TGenSeqFrm'#9'GenSeqFrm'#4'Left'#3#174#0#6'Height'#3#192#0#3'Top'#2 + +'n'#5'Width'#3'-'#1#7'Caption'#6#31'Generation of Sequential Values'#12'Clie' + +'ntHeight'#3#192#0#11'ClientWidth'#3'-'#1#6'OnShow'#7#8'FormShow'#10'LCLVers' + +'ion'#6#6'0.9.30'#0#6'TLabel'#6'Label1'#4'Left'#2#9#6'Height'#2#16#3'Top'#2 + +'`'#5'Width'#2'd'#7'Caption'#6#19'Start Sequence At: '#11'ParentColor'#8#0#0 + +#6'TLabel'#6'Label2'#4'Left'#2#10#6'Height'#2#16#3'Top'#2#127#5'Width'#2'r'#7 + +'Caption'#6#21'Increment Values By: '#11'ParentColor'#8#0#0#6'TLabel'#6'Labe' + +'l3'#4'Left'#2#8#6'Height'#2#16#3'Top'#3#160#0#5'Width'#2'k'#7'Caption'#6#20 + +'New Variable Label: '#11'ParentColor'#8#0#0#11'TRadioGroup'#11'RadioGroup1' + +#4'Left'#2#10#6'Height'#2'G'#3'Top'#2#6#5'Width'#3#188#0#8'AutoFill'#9#7'Cap' + +'tion'#6#13'Generate for:'#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizi' + +'ng.TopBottomSpacing'#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomogeno' + +'usChildResize'#27'ChildSizing.EnlargeVertical'#7#24'crsHomogenousChildResiz' + +'e'#28'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChilds'#26'ChildSizing.Shr' + +'inkVertical'#7#14'crsScaleChilds'#18'ChildSizing.Layout'#7#29'cclLeftToRigh' + +'tThenTopToBottom'#27'ChildSizing.ControlsPerLine'#2#1#12'ClientHeight'#2'5' + +#11'ClientWidth'#3#184#0#13'Items.Strings'#1#6#17'All Current Cases'#6#18'Nu' + +'mber of Cases = '#0#7'OnClick'#7#16'RadioGroup1Click'#8'TabOrder'#2#0#0#0#5 + +'TEdit'#11'NoCasesEdit'#4'Left'#3#144#0#6'Height'#2#23#3'Top'#2'('#5'Width'#2 + +'*'#6'OnExit'#7#15'NoCasesEditExit'#8'TabOrder'#2#1#4'Text'#6#11'NoCasesEdit' + +#0#0#5'TEdit'#11'StartAtEdit'#4'Left'#3#150#0#6'Height'#2#23#3'Top'#2'V'#5'W' + +'idth'#2')'#8'TabOrder'#2#2#4'Text'#6#11'StartAtEdit'#0#0#5'TEdit'#8'IncrEdi' + +'t'#4'Left'#3#149#0#6'Height'#2#23#3'Top'#2'x'#5'Width'#2'*'#8'TabOrder'#2#3 + +#4'Text'#6#8'IncrEdit'#0#0#5'TEdit'#9'LabelEdit'#4'Left'#2'q'#6'Height'#2#23 + +#3'Top'#3#153#0#5'Width'#2'N'#8'TabOrder'#2#4#4'Text'#6#9'LabelEdit'#0#0#7'T' + +'Button'#8'ResetBtn'#4'Left'#3#209#0#6'Height'#2#30#3'Top'#2#7#5'Width'#2'P' + +#7'Caption'#6#5'Reset'#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#5#0#0#7 + +'TButton'#9'CancelBtn'#4'Left'#3#209#0#6'Height'#2#30#3'Top'#2'0'#5'Width'#2 + +'P'#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#6#0#0#7'TButton' + +#10'ComputeBtn'#4'Left'#3#209#0#6'Height'#2#30#3'Top'#2'h'#5'Width'#2'P'#7'C' + +'aption'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#7#0#0#7 + +'TButton'#9'ReturnBtn'#4'Left'#3#209#0#6'Height'#2#30#3'Top'#3#144#0#5'Width' + +#2'P'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2#8#0#0#0 +]); diff --git a/applications/lazstats/source_orig/gensequnit.pas b/applications/lazstats/source_orig/gensequnit.pas new file mode 100644 index 000000000..06e9ad896 --- /dev/null +++ b/applications/lazstats/source_orig/gensequnit.pas @@ -0,0 +1,150 @@ +unit GenSeqUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + ExtCtrls, StdCtrls, Globals, MainUnit, OutPutUnit, + DictionaryUnit; + + +type + + { TGenSeqFrm } + + TGenSeqFrm = class(TForm) + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + LabelEdit: TEdit; + Label3: TLabel; + StartAtEdit: TEdit; + IncrEdit: TEdit; + Label1: TLabel; + Label2: TLabel; + NoCasesEdit: TEdit; + RadioGroup1: TRadioGroup; + procedure ComputeBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure NoCasesEditExit(Sender: TObject); + procedure RadioGroup1Click(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + private + { private declarations } + Ncases : integer; + public + { public declarations } + end; + +var + GenSeqFrm: TGenSeqFrm; + +implementation + +{ TGenSeqFrm } + +procedure TGenSeqFrm.ResetBtnClick(Sender: TObject); +begin + RadioGroup1.ItemIndex := 1; + NoCasesEdit.Text := ''; + StartAtEdit.Text := ''; + IncrEdit.Text := ''; + LabelEdit.Text := ''; +end; + +procedure TGenSeqFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TGenSeqFrm.ComputeBtnClick(Sender: TObject); +var + i, col : integer; + First, Increment : double; +begin + if StartAtEdit.Text = '' then + begin + ShowMessage('Error! No starting value provided.'); + exit; + end; + if IncrEdit.Text = '' then + begin + ShowMessage('Error! No increment value provided.'); + exit; + end; + if LabelEdit.Text = '' then + begin + ShowMessage('Error! No variable label provided.'); + exit; + end; + if NoCases < Ncases then + begin + OS3MainFrm.DataGrid.RowCount := NCases + 1; + OS3MainFrm.NoCasesEdit.Text := IntToStr(NCases); + NoCases := Ncases; + end; + if NoVariables <= 0 then // a new data file + begin + OS3MainFrm.DataGrid.ColCount := 2; + OS3MainFrm.DataGrid.RowCount := Ncases + 1; + for i := 1 to Ncases do + OS3MainFrm.DataGrid.Cells[0,i] := format('Case %d',[i]); + col := 1; + DictionaryFrm.DictGrid.RowCount := 1; + DictionaryFrm.DictGrid.ColCount := 8; + DictionaryFrm.NewVar(col); + DictionaryFrm.DictGrid.Cells[1,col] := LabelEdit.Text; + OS3MainFrm.DataGrid.Cells[1,0] := LabelEdit.Text; + DictionaryFrm.DictGrid.RowCount := 2; + NoVariables := 1; + + end + else // existing data file + begin + col := NoVariables + 1; + DictionaryFrm.NewVar(col); + DictionaryFrm.DictGrid.Cells[1,col] := LabelEdit.Text; + end; + + First := StrToFloat(StartAtEdit.Text); + Increment := StrToFloat(IncrEdit.Text); + for i := 1 to Ncases do + begin + OS3MainFrm.DataGrid.Cells[col,i] := format('%8.3f',[First]); + First := First + Increment; + end; + OS3MainFrm.NoVarsEdit.Text := IntToStr(NoVariables); +end; + +procedure TGenSeqFrm.NoCasesEditExit(Sender: TObject); +begin + if RadioGroup1.ItemIndex = 1 then Ncases := StrToInt(NoCasesEdit.Text); + if (Ncases <= 0) and (RadioGroup1.ItemIndex = 1) then + begin + ShowMessage('Error! No. of cases to generate not specified.'); + exit; + end; +end; + +procedure TGenSeqFrm.RadioGroup1Click(Sender: TObject); +begin + if RadioGroup1.ItemIndex = 0 then + begin + if NoCases <= 0 then + begin + ShowMessage('Error! There are currently no cases!'); + exit; + end + else Ncases := NoCases; + end + else NoCasesEdit.SetFocus; +end; + +initialization + {$I gensequnit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/glmunit.lfm b/applications/lazstats/source_orig/glmunit.lfm new file mode 100644 index 000000000..0fc2b1f01 --- /dev/null +++ b/applications/lazstats/source_orig/glmunit.lfm @@ -0,0 +1,966 @@ +object GLMFrm: TGLMFrm + Left = 53 + Height = 589 + Top = 97 + Width = 857 + Caption = 'General Linear Model' + ClientHeight = 589 + ClientWidth = 857 + OnShow = FormShow + LCLVersion = '0.9.28.2' + object Label1: TLabel + Left = 6 + Height = 14 + Top = 66 + Width = 26 + Caption = 'Code' + ParentColor = False + end + object Label2: TLabel + Left = 54 + Height = 14 + Top = 66 + Width = 109 + Caption = 'Continuous Dep. Vars.' + ParentColor = False + end + object Label3: TLabel + Left = 230 + Height = 14 + Top = 68 + Width = 90 + Caption = 'Available Variables' + ParentColor = False + end + object Label4: TLabel + Left = 391 + Height = 14 + Top = 69 + Width = 122 + Caption = 'Fixed Effect Indep. Vars.' + ParentColor = False + end + object Label5: TLabel + Left = 535 + Height = 14 + Top = 67 + Width = 26 + Caption = 'Code' + ParentColor = False + end + object Label6: TLabel + Left = 57 + Height = 14 + Top = 186 + Width = 109 + Caption = 'Categorical Dep. Vars.' + ParentColor = False + end + object Label7: TLabel + Left = 56 + Height = 14 + Top = 288 + Width = 128 + Caption = 'Repeatd Meas. Dep. Vars.' + ParentColor = False + end + object Label8: TLabel + Left = 391 + Height = 14 + Top = 179 + Width = 135 + Caption = 'Random Effect Indep. Vars.' + ParentColor = False + end + object Label9: TLabel + Left = 392 + Height = 14 + Top = 290 + Width = 118 + Caption = 'Covariates (Continuous)' + ParentColor = False + end + object Label10: TLabel + Left = 393 + Height = 14 + Top = 392 + Width = 117 + Caption = 'Repeated Meas. Effects' + ParentColor = False + end + object Label11: TLabel + Left = 601 + Height = 14 + Top = 210 + Width = 131 + Caption = 'List of Defined Interactions' + ParentColor = False + end + object Label12: TLabel + Left = 312 + Height = 14 + Top = 499 + Width = 129 + Caption = 'Order of Indep. Var. Entry' + ParentColor = False + end + object StartInterBtn: TButton + Left = 598 + Height = 19 + Top = 66 + Width = 207 + Caption = 'Begin Definition of an Interaction' + OnClick = StartInterBtnClick + TabOrder = 0 + end + object VarList: TListBox + Left = 216 + Height = 297 + Top = 87 + Width = 128 + ItemHeight = 0 + MultiSelect = True + TabOrder = 1 + end + object DepContList: TListBox + Left = 58 + Height = 81 + Top = 88 + Width = 111 + ItemHeight = 0 + TabOrder = 2 + end + object FixedList: TListBox + Left = 389 + Height = 77 + Top = 86 + Width = 130 + ItemHeight = 0 + OnClick = FixedListClick + TabOrder = 3 + end + object ContDepInBtn: TBitBtn + Left = 175 + Height = 28 + Top = 90 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = ContDepInBtnClick + TabOrder = 4 + end + object ContDepOutBtn: TBitBtn + Left = 176 + Height = 28 + Top = 128 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = ContDepOutBtnClick + TabOrder = 5 + end + object CatDepInBtn: TBitBtn + Left = 175 + Height = 28 + Top = 192 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = CatDepInBtnClick + TabOrder = 6 + end + object CatDepOutBtn: TBitBtn + Left = 175 + Height = 28 + Top = 232 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = CatDepOutBtnClick + TabOrder = 7 + end + object RepDepInBtn: TBitBtn + Left = 175 + Height = 28 + Top = 304 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = RepDepInBtnClick + TabOrder = 8 + end + object ReptDepOutBtn: TBitBtn + Left = 176 + Height = 28 + Top = 344 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = ReptDepOutBtnClick + TabOrder = 9 + end + object FixedIndepInBtn: TBitBtn + Left = 352 + Height = 28 + Top = 90 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = FixedIndepInBtnClick + TabOrder = 10 + end + object FixedIndepOutBtn: TBitBtn + Left = 352 + Height = 28 + Top = 128 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = FixedIndepOutBtnClick + TabOrder = 11 + end + object RndIndepInBtn: TBitBtn + Left = 352 + Height = 28 + Top = 192 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = RndIndepInBtnClick + TabOrder = 12 + end + object RndIndepOutBtn: TBitBtn + Left = 352 + Height = 28 + Top = 232 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = RndIndepOutBtnClick + TabOrder = 13 + end + object CovInBtn: TBitBtn + Left = 352 + Height = 28 + Top = 304 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE + 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580 + 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3 + 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7 + 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7 + 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = CovInBtnClick + TabOrder = 14 + end + object CovOutBtn: TBitBtn + Left = 352 + Height = 28 + Top = 344 + Width = 32 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580 + 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3 + 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6 + 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7 + 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA + 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF + FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799 + 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + NumGlyphs = 0 + OnClick = CovOutBtnClick + TabOrder = 15 + end + object DepCatList: TListBox + Left = 58 + Height = 74 + Top = 201 + Width = 104 + ItemHeight = 0 + TabOrder = 16 + end + object RepeatList: TListBox + Left = 57 + Height = 80 + Top = 303 + Width = 104 + ItemHeight = 0 + TabOrder = 17 + end + object RandomList: TListBox + Left = 392 + Height = 80 + Top = 197 + Width = 127 + ItemHeight = 0 + OnClick = RandomListClick + TabOrder = 18 + end + object CovariateList: TListBox + Left = 393 + Height = 77 + Top = 304 + Width = 125 + ItemHeight = 0 + OnClick = CovariateListClick + TabOrder = 19 + end + object Memo2: TMemo + Left = 5 + Height = 55 + Top = 408 + Width = 338 + Lines.Strings = ( + 'NOTE! Be sure to enter the dependent variable(s) first, then the' + 'independent variables. When defining interactions, enter' + 'two-way interactions first, then three-way, etc.' + ) + TabOrder = 20 + end + object RepTrtList: TListBox + Left = 392 + Height = 54 + Top = 411 + Width = 129 + ItemHeight = 0 + OnClick = RepTrtListClick + TabOrder = 21 + end + object ShowModelBtn: TButton + Left = 6 + Height = 20 + Top = 472 + Width = 66 + Caption = 'Show Model' + OnClick = ShowModelBtnClick + TabOrder = 22 + end + object ModelEdit: TEdit + Left = 79 + Height = 21 + Top = 471 + Width = 764 + TabOrder = 23 + Text = 'ModelEdit' + end + object InterDefList: TListBox + Left = 598 + Height = 70 + Top = 93 + Width = 246 + ItemHeight = 0 + TabOrder = 24 + end + object EndDefBtn: TButton + Left = 598 + Height = 20 + Top = 175 + Width = 211 + Caption = 'End Definititon of an Interaction' + OnClick = EndDefBtnClick + TabOrder = 25 + end + object InteractList: TListBox + Left = 599 + Height = 228 + Top = 232 + Width = 245 + ItemHeight = 0 + TabOrder = 26 + end + object GroupBox1: TGroupBox + Left = 8 + Height = 83 + Top = 499 + Width = 144 + Caption = 'Statistics' + ClientHeight = 65 + ClientWidth = 140 + TabOrder = 27 + object DescChk: TCheckBox + Left = 3 + Height = 17 + Top = 0 + Width = 120 + Caption = 'Means, Var.''s, S.D.''s' + TabOrder = 0 + end + object CorsChk: TCheckBox + Left = 3 + Height = 17 + Top = 21 + Width = 78 + Caption = 'Correlations' + TabOrder = 1 + end + object ResidChk: TCheckBox + Left = 3 + Height = 17 + Top = 44 + Width = 65 + Caption = 'Residuals' + TabOrder = 2 + end + end + object TypeGroup: TRadioGroup + Left = 160 + Height = 81 + Top = 499 + Width = 131 + AutoFill = True + Caption = 'Type of Coding' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 63 + ClientWidth = 127 + ItemIndex = 1 + Items.Strings = ( + 'Dummy' + 'Effect' + 'Orthogonal' + ) + TabOrder = 28 + end + object IndOrderBox: TListBox + Left = 312 + Height = 67 + Top = 513 + Width = 149 + ItemHeight = 0 + TabOrder = 29 + end + object ResetBtn: TButton + Left = 224 + Height = 33 + Top = 16 + Width = 88 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 30 + end + object CancelBtn: TButton + Left = 112 + Height = 33 + Top = 16 + Width = 88 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 31 + end + object ComputeBtn: TButton + Left = 336 + Height = 33 + Top = 16 + Width = 84 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 32 + end + object ReturnBtn: TButton + Left = 444 + Height = 33 + Top = 16 + Width = 82 + Caption = 'Return' + ModalResult = 1 + TabOrder = 33 + end + object ContDepCode: TListBox + Left = 6 + Height = 76 + Top = 89 + Width = 43 + ItemHeight = 0 + TabOrder = 34 + end + object CatDepCode: TListBox + Left = 6 + Height = 72 + Top = 199 + Width = 44 + ItemHeight = 0 + TabOrder = 35 + end + object ReptDepCode: TListBox + Left = 6 + Height = 78 + Top = 302 + Width = 44 + ItemHeight = 0 + TabOrder = 36 + end + object FixedIndepCode: TListBox + Left = 529 + Height = 74 + Top = 87 + Width = 51 + ItemHeight = 0 + TabOrder = 37 + end + object RndIndepCode: TListBox + Left = 529 + Height = 76 + Top = 200 + Width = 53 + ItemHeight = 0 + TabOrder = 38 + end + object CovariateCode: TListBox + Left = 529 + Height = 75 + Top = 306 + Width = 54 + ItemHeight = 0 + TabOrder = 39 + end + object RepTrtCode: TListBox + Left = 528 + Height = 53 + Top = 409 + Width = 56 + ItemHeight = 0 + TabOrder = 40 + end + object GroupBox2: TGroupBox + Left = 512 + Height = 78 + Top = 499 + Width = 133 + Caption = 'Options' + ClientHeight = 60 + ClientWidth = 129 + TabOrder = 41 + object ShowDesignChk: TCheckBox + Left = 4 + Height = 17 + Top = 8 + Width = 114 + Caption = 'Show Design in Grid' + TabOrder = 0 + end + end + object HelpBtn: TButton + Tag = 126 + Left = 8 + Height = 33 + Top = 16 + Width = 86 + Caption = 'Help' + OnClick = HelpBtnClick + TabOrder = 42 + end +end diff --git a/applications/lazstats/source_orig/glmunit.lrs b/applications/lazstats/source_orig/glmunit.lrs new file mode 100644 index 000000000..65ac68ce1 --- /dev/null +++ b/applications/lazstats/source_orig/glmunit.lrs @@ -0,0 +1,726 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TGLMFrm','FORMDATA',[ + 'TPF0'#7'TGLMFrm'#6'GLMFrm'#4'Left'#2'5'#6'Height'#3'M'#2#3'Top'#2'a'#5'Width' + +#3'Y'#3#7'Caption'#6#20'General Linear Model'#12'ClientHeight'#3'M'#2#11'Cli' + +'entWidth'#3'Y'#3#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6#8'0.9.28.2'#0#6'T' + +'Label'#6'Label1'#4'Left'#2#6#6'Height'#2#14#3'Top'#2'B'#5'Width'#2#26#7'Cap' + +'tion'#6#4'Code'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2'6'#6'He' + +'ight'#2#14#3'Top'#2'B'#5'Width'#2'm'#7'Caption'#6#21'Continuous Dep. Vars.' + +#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left'#3#230#0#6'Height'#2#14#3 + +'Top'#2'D'#5'Width'#2'Z'#7'Caption'#6#19'Available Variables'#11'ParentColor' + +#8#0#0#6'TLabel'#6'Label4'#4'Left'#3#135#1#6'Height'#2#14#3'Top'#2'E'#5'Widt' + +'h'#2'z'#7'Caption'#6#25'Fixed Effect Indep. Vars.'#11'ParentColor'#8#0#0#6 + +'TLabel'#6'Label5'#4'Left'#3#23#2#6'Height'#2#14#3'Top'#2'C'#5'Width'#2#26#7 + +'Caption'#6#4'Code'#11'ParentColor'#8#0#0#6'TLabel'#6'Label6'#4'Left'#2'9'#6 + +'Height'#2#14#3'Top'#3#186#0#5'Width'#2'm'#7'Caption'#6#22'Categorical Dep. ' + +'Vars.'#11'ParentColor'#8#0#0#6'TLabel'#6'Label7'#4'Left'#2'8'#6'Height'#2#14 + +#3'Top'#3' '#1#5'Width'#3#128#0#7'Caption'#6#24'Repeatd Meas. Dep. Vars.'#11 + +'ParentColor'#8#0#0#6'TLabel'#6'Label8'#4'Left'#3#135#1#6'Height'#2#14#3'Top' + +#3#179#0#5'Width'#3#135#0#7'Caption'#6#26'Random Effect Indep. Vars.'#11'Par' + +'entColor'#8#0#0#6'TLabel'#6'Label9'#4'Left'#3#136#1#6'Height'#2#14#3'Top'#3 + +'"'#1#5'Width'#2'v'#7'Caption'#6#23'Covariates (Continuous)'#11'ParentColor' + +#8#0#0#6'TLabel'#7'Label10'#4'Left'#3#137#1#6'Height'#2#14#3'Top'#3#136#1#5 + +'Width'#2'u'#7'Caption'#6#22'Repeated Meas. Effects'#11'ParentColor'#8#0#0#6 + +'TLabel'#7'Label11'#4'Left'#3'Y'#2#6'Height'#2#14#3'Top'#3#210#0#5'Width'#3 + +#131#0#7'Caption'#6#28'List of Defined Interactions'#11'ParentColor'#8#0#0#6 + +'TLabel'#7'Label12'#4'Left'#3'8'#1#6'Height'#2#14#3'Top'#3#243#1#5'Width'#3 + +#129#0#7'Caption'#6#26'Order of Indep. Var. Entry'#11'ParentColor'#8#0#0#7'T' + +'Button'#13'StartInterBtn'#4'Left'#3'V'#2#6'Height'#2#19#3'Top'#2'B'#5'Width' + +#3#207#0#7'Caption'#6'"Begin Definition of an Interaction'#7'OnClick'#7#18'S' + +'tartInterBtnClick'#8'TabOrder'#2#0#0#0#8'TListBox'#7'VarList'#4'Left'#3#216 + +#0#6'Height'#3')'#1#3'Top'#2'W'#5'Width'#3#128#0#10'ItemHeight'#2#0#11'Multi' + +'Select'#9#8'TabOrder'#2#1#0#0#8'TListBox'#11'DepContList'#4'Left'#2':'#6'He' + +'ight'#2'Q'#3'Top'#2'X'#5'Width'#2'o'#10'ItemHeight'#2#0#8'TabOrder'#2#2#0#0 + +#8'TListBox'#9'FixedList'#4'Left'#3#133#1#6'Height'#2'M'#3'Top'#2'V'#5'Width' + +#3#130#0#10'ItemHeight'#2#0#7'OnClick'#7#14'FixedListClick'#8'TabOrder'#2#3#0 + +#0#7'TBitBtn'#12'ContDepInBtn'#4'Left'#3#175#0#6'Height'#2#28#3'Top'#2'Z'#5 + +'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0 + +'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0 + +#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O' + +#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V' + +#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255 + +'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5' + +#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195 + +'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255 + +#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255 + +#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135 + ,#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A' + +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp' + +'hs'#2#0#7'OnClick'#7#17'ContDepInBtnClick'#8'TabOrder'#2#4#0#0#7'TBitBtn'#13 + +'ContDepOutBtn'#4'Left'#3#176#0#6'Height'#2#28#3'Top'#3#128#0#5'Width'#2' ' + +#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16 + +#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$' + +#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']' + +#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I' + +#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!' + +'c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169 + +#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203 + +#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190 + +'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165 + +#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255 + +#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135 + +#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199 + +'t'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255 + +'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157 + +'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + ,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#18 + +'ContDepOutBtnClick'#8'TabOrder'#2#5#0#0#7'TBitBtn'#11'CatDepInBtn'#4'Left'#3 + +#175#0#6'Height'#2#28#3'Top'#3#192#0#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0 + +'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0 + +#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h' + +#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255 + +';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255 + +#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152 + +#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255 + +#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!' + +'c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138#255#162#216 + +#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142 + +#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255 + +'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't' + +#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255 + +'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5' + +#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199 + +'t'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't' + +#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#16'CatDepInBtnClick'#8'Ta' + +'bOrder'#2#6#0#0#7'TBitBtn'#12'CatDepOutBtn'#4'Left'#3#175#0#6'Height'#2#28#3 + +'Top'#3#232#0#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0 + +#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0 + +'d'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + ,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V' + +#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y' + +#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0 + +'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157 + +#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195 + +#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0 + +#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255 + +#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144 + +#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201 + +#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190 + +'m'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255 + +'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#9'NumGlyphs'#2#0#7'OnClick'#7#17'CatDepOutBtnClick'#8'TabOrder'#2#7#0#0#7'T' + +'BitBtn'#11'RepDepInBtn'#4'Left'#3#175#0#6'Height'#2#28#3'Top'#3'0'#1#5'Widt' + +'h'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0 + +#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0 + +#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247 + +'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'[' + +#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255 + +'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q' + +#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206 + +#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z' + +#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0 + +'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154#212#163 + +#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199 + +#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0 + +#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135#255']' + +#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I' + +#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7 + +'OnClick'#7#16'RepDepInBtnClick'#8'TabOrder'#2#8#0#0#7'TBitBtn'#13'ReptDepOu' + +'tBtn'#4'Left'#3#176#0#6'Height'#2#28#3'Top'#3'X'#1#5'Width'#2' '#10'Glyph.D' + +'ata'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0 + +#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184 + +#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177 + +'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255 + +'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255 + +#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255 + +#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142 + +#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J' + +#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162 + +#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255 + ,#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130 + +#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199 + +'t'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255 + +'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5' + +#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#18'ReptDepOutBtnC' + +'lick'#8'TabOrder'#2#9#0#0#7'TBitBtn'#15'FixedIndepInBtn'#4'Left'#3'`'#1#6'H' + +'eight'#2#28#3'Top'#2'Z'#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'B' + +'M6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0 + +#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M' + +#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E' + +#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255 + +#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208 + +#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~' + +#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255 + +#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167 + +#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202 + +#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)' + +#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a' + +#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O' + +#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + ,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#9'NumGlyphs'#2#0#7'OnClick'#7#20'FixedIndepInBtnClick'#8'TabOrder'#2#10#0#0 + +#7'TBitBtn'#16'FixedIndepOutBtn'#4'Left'#3'`'#1#6'Height'#2#28#3'Top'#3#128#0 + +#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0 + +#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0 + +#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O' + +#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V' + +#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255 + +'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5' + +#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195 + +'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144 + +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255 + +'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255 + +#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154#212 + +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133 + +#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255 + +#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135 + +#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A' + +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp' + +'hs'#2#0#7'OnClick'#7#21'FixedIndepOutBtnClick'#8'TabOrder'#2#11#0#0#7'TBitB' + +'tn'#13'RndIndepInBtn'#4'Left'#3'`'#1#6'Height'#2#28#3'Top'#3#192#0#5'Width' + ,#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0 + +#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$' + +#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']' + +#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I' + +#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!' + +'c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169 + +#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203 + +#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190 + +'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165 + +#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255 + +#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135 + +#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199 + +'t'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255 + +'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157 + +'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#18 + +'RndIndepInBtnClick'#8'TabOrder'#2#12#0#0#7'TBitBtn'#14'RndIndepOutBtn'#4'Le' + +'ft'#3'`'#1#6'Height'#2#28#3'Top'#3#232#0#5'Width'#2' '#10'Glyph.Data'#10':' + +#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' ' + +#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A' + +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255 + +#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213 + +#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135 + +#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r' + +#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138 + +#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207 + +#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}' + +#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0 + +'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S' + +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';' + +#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 + +#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#19'RndIndepOutBtn' + +'Click'#8'TabOrder'#2#13#0#0#7'TBitBtn'#8'CovInBtn'#4'Left'#3'`'#1#6'Height' + +#2#28#3'Top'#3'0'#1#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4 + +#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd' + +#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161 + +'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255 + +'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255 + +#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157 + +#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195 + ,#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0 + +#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255 + +#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144 + +#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201 + +#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190 + +'m'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255 + +'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255 + +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#9'NumGlyphs'#2#0#7'OnClick'#7#13'CovInBtnClick'#8'TabOrder'#2#14#0#0#7'TBit' + +'Btn'#9'CovOutBtn'#4'Left'#3'`'#1#6'Height'#2#28#3'Top'#3'X'#1#5'Width'#2' ' + +#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16 + +#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8' + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255 + +'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%' + +'i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200 + +#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139 + +#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v' + +#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201 + +#127#204#138#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159 + +#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197 + +#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0 + +#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X' + +#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B' + +#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255 + +#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 + +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 + +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 + +#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#14 + +'CovOutBtnClick'#8'TabOrder'#2#15#0#0#8'TListBox'#10'DepCatList'#4'Left'#2':' + +#6'Height'#2'J'#3'Top'#3#201#0#5'Width'#2'h'#10'ItemHeight'#2#0#8'TabOrder'#2 + +#16#0#0#8'TListBox'#10'RepeatList'#4'Left'#2'9'#6'Height'#2'P'#3'Top'#3'/'#1 + +#5'Width'#2'h'#10'ItemHeight'#2#0#8'TabOrder'#2#17#0#0#8'TListBox'#10'Random' + +'List'#4'Left'#3#136#1#6'Height'#2'P'#3'Top'#3#197#0#5'Width'#2#127#10'ItemH' + +'eight'#2#0#7'OnClick'#7#15'RandomListClick'#8'TabOrder'#2#18#0#0#8'TListBox' + +#13'CovariateList'#4'Left'#3#137#1#6'Height'#2'M'#3'Top'#3'0'#1#5'Width'#2'}' + +#10'ItemHeight'#2#0#7'OnClick'#7#18'CovariateListClick'#8'TabOrder'#2#19#0#0 + +#5'TMemo'#5'Memo2'#4'Left'#2#5#6'Height'#2'7'#3'Top'#3#152#1#5'Width'#3'R'#1 + +#13'Lines.Strings'#1#6'ANOTE! Be sure to enter the dependent variable(s) fi' + +'rst, then the'#6'9independent variables. When defining interactions, enter' + +#6'0two-way interactions first, then three-way, etc.'#0#8'TabOrder'#2#20#0#0 + +#8'TListBox'#10'RepTrtList'#4'Left'#3#136#1#6'Height'#2'6'#3'Top'#3#155#1#5 + +'Width'#3#129#0#10'ItemHeight'#2#0#7'OnClick'#7#15'RepTrtListClick'#8'TabOrd' + +'er'#2#21#0#0#7'TButton'#12'ShowModelBtn'#4'Left'#2#6#6'Height'#2#20#3'Top'#3 + +#216#1#5'Width'#2'B'#7'Caption'#6#10'Show Model'#7'OnClick'#7#17'ShowModelBt' + +'nClick'#8'TabOrder'#2#22#0#0#5'TEdit'#9'ModelEdit'#4'Left'#2'O'#6'Height'#2 + +#21#3'Top'#3#215#1#5'Width'#3#252#2#8'TabOrder'#2#23#4'Text'#6#9'ModelEdit'#0 + +#0#8'TListBox'#12'InterDefList'#4'Left'#3'V'#2#6'Height'#2'F'#3'Top'#2']'#5 + +'Width'#3#246#0#10'ItemHeight'#2#0#8'TabOrder'#2#24#0#0#7'TButton'#9'EndDefB' + +'tn'#4'Left'#3'V'#2#6'Height'#2#20#3'Top'#3#175#0#5'Width'#3#211#0#7'Caption' + +#6'!End Definititon of an Interaction'#7'OnClick'#7#14'EndDefBtnClick'#8'Tab' + +'Order'#2#25#0#0#8'TListBox'#12'InteractList'#4'Left'#3'W'#2#6'Height'#3#228 + +#0#3'Top'#3#232#0#5'Width'#3#245#0#10'ItemHeight'#2#0#8'TabOrder'#2#26#0#0#9 + +'TGroupBox'#9'GroupBox1'#4'Left'#2#8#6'Height'#2'S'#3'Top'#3#243#1#5'Width'#3 + +#144#0#7'Caption'#6#10'Statistics'#12'ClientHeight'#2'A'#11'ClientWidth'#3 + +#140#0#8'TabOrder'#2#27#0#9'TCheckBox'#7'DescChk'#4'Left'#2#3#6'Height'#2#17 + +#3'Top'#2#0#5'Width'#2'x'#7'Caption'#6#21'Means, Var.''s, S.D.''s'#8'TabOrde' + +'r'#2#0#0#0#9'TCheckBox'#7'CorsChk'#4'Left'#2#3#6'Height'#2#17#3'Top'#2#21#5 + +'Width'#2'N'#7'Caption'#6#12'Correlations'#8'TabOrder'#2#1#0#0#9'TCheckBox'#8 + +'ResidChk'#4'Left'#2#3#6'Height'#2#17#3'Top'#2','#5'Width'#2'A'#7'Caption'#6 + +#9'Residuals'#8'TabOrder'#2#2#0#0#0#11'TRadioGroup'#9'TypeGroup'#4'Left'#3 + +#160#0#6'Height'#2'Q'#3'Top'#3#243#1#5'Width'#3#131#0#8'AutoFill'#9#7'Captio' + +'n'#6#14'Type of Coding'#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizing' + +'.TopBottomSpacing'#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomogenous' + +'ChildResize'#27'ChildSizing.EnlargeVertical'#7#24'crsHomogenousChildResize' + +#28'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChilds'#26'ChildSizing.Shrink' + +'Vertical'#7#14'crsScaleChilds'#18'ChildSizing.Layout'#7#29'cclLeftToRightTh' + +'enTopToBottom'#27'ChildSizing.ControlsPerLine'#2#1#12'ClientHeight'#2'?'#11 + +'ClientWidth'#2#127#9'ItemIndex'#2#1#13'Items.Strings'#1#6#5'Dummy'#6#6'Effe' + +'ct'#6#10'Orthogonal'#0#8'TabOrder'#2#28#0#0#8'TListBox'#11'IndOrderBox'#4'L' + +'eft'#3'8'#1#6'Height'#2'C'#3'Top'#3#1#2#5'Width'#3#149#0#10'ItemHeight'#2#0 + +#8'TabOrder'#2#29#0#0#7'TButton'#8'ResetBtn'#4'Left'#3#224#0#6'Height'#2'!'#3 + +'Top'#2#16#5'Width'#2'X'#7'Caption'#6#5'Reset'#7'OnClick'#7#13'ResetBtnClick' + +#8'TabOrder'#2#30#0#0#7'TButton'#9'CancelBtn'#4'Left'#2'p'#6'Height'#2'!'#3 + +'Top'#2#16#5'Width'#2'X'#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrd' + +'er'#2#31#0#0#7'TButton'#10'ComputeBtn'#4'Left'#3'P'#1#6'Height'#2'!'#3'Top' + +#2#16#5'Width'#2'T'#7'Caption'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick' + +#8'TabOrder'#2' '#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3#188#1#6'Height'#2'!' + +#3'Top'#2#16#5'Width'#2'R'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#8'TabO' + +'rder'#2'!'#0#0#8'TListBox'#11'ContDepCode'#4'Left'#2#6#6'Height'#2'L'#3'Top' + ,#2'Y'#5'Width'#2'+'#10'ItemHeight'#2#0#8'TabOrder'#2'"'#0#0#8'TListBox'#10'C' + +'atDepCode'#4'Left'#2#6#6'Height'#2'H'#3'Top'#3#199#0#5'Width'#2','#10'ItemH' + +'eight'#2#0#8'TabOrder'#2'#'#0#0#8'TListBox'#11'ReptDepCode'#4'Left'#2#6#6'H' + +'eight'#2'N'#3'Top'#3'.'#1#5'Width'#2','#10'ItemHeight'#2#0#8'TabOrder'#2'$' + +#0#0#8'TListBox'#14'FixedIndepCode'#4'Left'#3#17#2#6'Height'#2'J'#3'Top'#2'W' + +#5'Width'#2'3'#10'ItemHeight'#2#0#8'TabOrder'#2'%'#0#0#8'TListBox'#12'RndInd' + +'epCode'#4'Left'#3#17#2#6'Height'#2'L'#3'Top'#3#200#0#5'Width'#2'5'#10'ItemH' + +'eight'#2#0#8'TabOrder'#2'&'#0#0#8'TListBox'#13'CovariateCode'#4'Left'#3#17#2 + +#6'Height'#2'K'#3'Top'#3'2'#1#5'Width'#2'6'#10'ItemHeight'#2#0#8'TabOrder'#2 + +''''#0#0#8'TListBox'#10'RepTrtCode'#4'Left'#3#16#2#6'Height'#2'5'#3'Top'#3 + +#153#1#5'Width'#2'8'#10'ItemHeight'#2#0#8'TabOrder'#2'('#0#0#9'TGroupBox'#9 + +'GroupBox2'#4'Left'#3#0#2#6'Height'#2'N'#3'Top'#3#243#1#5'Width'#3#133#0#7'C' + +'aption'#6#7'Options'#12'ClientHeight'#2'<'#11'ClientWidth'#3#129#0#8'TabOrd' + +'er'#2')'#0#9'TCheckBox'#13'ShowDesignChk'#4'Left'#2#4#6'Height'#2#17#3'Top' + +#2#8#5'Width'#2'r'#7'Caption'#6#19'Show Design in Grid'#8'TabOrder'#2#0#0#0#0 + +#7'TButton'#7'HelpBtn'#3'Tag'#2'~'#4'Left'#2#8#6'Height'#2'!'#3'Top'#2#16#5 + +'Width'#2'V'#7'Caption'#6#4'Help'#7'OnClick'#7#12'HelpBtnClick'#8'TabOrder'#2 + +'*'#0#0#0 +]); diff --git a/applications/lazstats/source_orig/glmunit.pas b/applications/lazstats/source_orig/glmunit.pas new file mode 100644 index 000000000..da89e8e14 --- /dev/null +++ b/applications/lazstats/source_orig/glmunit.pas @@ -0,0 +1,3297 @@ +unit GLMUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + MainUnit, MatrixLib, Globals, OutPutUnit, + Math, DataProcs, FunctionsLib, DictionaryUnit, StdCtrls, Buttons, ExtCtrls, + contexthelpunit; + +type + + { TGLMFrm } + + TGLMFrm = class(TForm) + HelpBtn: TButton; + ShowDesignChk: TCheckBox; + ContDepInBtn: TBitBtn; + GroupBox2: TGroupBox; + RndIndepOutBtn: TBitBtn; + CovInBtn: TBitBtn; + CovOutBtn: TBitBtn; + ContDepOutBtn: TBitBtn; + CatDepInBtn: TBitBtn; + CatDepOutBtn: TBitBtn; + RepDepInBtn: TBitBtn; + ReptDepOutBtn: TBitBtn; + FixedIndepInBtn: TBitBtn; + FixedIndepOutBtn: TBitBtn; + RndIndepInBtn: TBitBtn; + ContDepCode: TListBox; + CatDepCode: TListBox; + ReptDepCode: TListBox; + FixedIndepCode: TListBox; + RndIndepCode: TListBox; + CovariateCode: TListBox; + RepTrtCode: TListBox; + ResetBtn: TButton; + CancelBtn: TButton; + ComputeBtn: TButton; + ReturnBtn: TButton; + DescChk: TCheckBox; + CorsChk: TCheckBox; + Label12: TLabel; + IndOrderBox: TListBox; + TypeGroup: TRadioGroup; + ResidChk: TCheckBox; + EndDefBtn: TButton; + GroupBox1: TGroupBox; + InterDefList: TListBox; + Label11: TLabel; + InteractList: TListBox; + ShowModelBtn: TButton; + DepContList: TListBox; + ModelEdit: TEdit; + FixedList: TListBox; + Label10: TLabel; + Label6: TLabel; + DepCatList: TListBox; + Label7: TLabel; + Label8: TLabel; + Label9: TLabel; + CovariateList: TListBox; + RepTrtList: TListBox; + Memo2: TMemo; + RandomList: TListBox; + RepeatList: TListBox; + VarList: TListBox; + StartInterBtn: TButton; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + Label5: TLabel; + procedure CatDepInBtnClick(Sender: TObject); + procedure CatDepOutBtnClick(Sender: TObject); + procedure ComputeBtnClick(Sender: TObject); + procedure ContDepInBtnClick(Sender: TObject); + procedure ContDepOutBtnClick(Sender: TObject); + procedure CovariateListClick(Sender: TObject); + procedure CovInBtnClick(Sender: TObject); + procedure CovOutBtnClick(Sender: TObject); + procedure EndDefBtnClick(Sender: TObject); + procedure FixedIndepInBtnClick(Sender: TObject); + procedure FixedIndepOutBtnClick(Sender: TObject); + procedure FixedListClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure HelpBtnClick(Sender: TObject); + procedure RandomListClick(Sender: TObject); + procedure RepDepInBtnClick(Sender: TObject); + procedure ReptDepOutBtnClick(Sender: TObject); + procedure RepTrtListClick(Sender: TObject); + procedure ResetBtnClick(Sender: TObject); + procedure RndIndepInBtnClick(Sender: TObject); + procedure RndIndepOutBtnClick(Sender: TObject); + procedure ShowModelBtnClick(Sender: TObject); + procedure StartInterBtnClick(Sender: TObject); + private + { private declarations } + IntDef : boolean; + DefLine : integer; // number of interaction terms - 1 + NoInterDefs : integer; // number of interactions in the model + NContDep : integer; // no. of continuous dependent variables + NCatDep : integer; // no. of categorical dependent variables + NReptDep : integer; // no. of repeated dependent variables + NFixedIndep : integer; // no. of fixed effect independent variables + NRndIndep : integer; // no. of random effect independent variables + NCovIndep : integer; // no. of covariate independent variables + model : integer; // 1 if multreg, 2 if canonical + novars : integer; // total no. of vectors in analysis grid + totalobs : integer; // total no. of data grid observations + gencount, oldcount : integer; // no. columns generated in datagrid + ContDepID : IntDyneVec; // grid col. no.s of continuous dependent var.s + CatDepID : IntDyneVec; // grid col. no.s of categorical dependent var.s + ReptDepID : IntDyneVec; // grid col. no.s of repeated dep. variables + FixedIndepID : IntDyneVec; // grid col. no.s of fixed independent var.s + RndIndepID : IntDyneVec; // grid col. no.s of random independent var.s + CovIndepID : IntDyneVec; // grid col. no.s of covariates + DataGrid : DblDyneMat; // array for generated vectors and values + GenLabels : StrDyneVec; // array of labels for data matrix + ContDepPos : IntDyneVec; // datagrid position of continuous variables + CatDepPos : IntDyneVec; // beginning datagrid position of categorical var. vectors + ReptDepPos : IntDyneVec; // datagrid position of repeated variable + ReptIndepPos : IntDyneVec; // datagrid pos. of subject vectors + ReptTrtPos : IntDyneVec; // datagrid pos. of repeated treatment vectors + FixedIndepPos : IntDyneVec; // datagrid position of first vector for cat indep. var. + RndIndepPos : IntDyneVec; // datagrid position of first vector for rnd. indep. var. + CovIndepPos : IntDyneVec; // datagrid positions of covariates + InteractPos : IntDyneVec; // datagrid positions of interactions + Labels : StrDyneVec; // labels for the analyses + ColSelected : IntDyneVec; // datagrid columns of variables in the analysis + NFixVecIndep : IntDyneVec; // no. of vectors for fixed independent vars. + NRndVecIndep : IntDyneVec; // no. of vectors for random indep. vars. + NFixVecDep : IntDyneVec; // no. of vectors for fixed dependent vars. + NInteractVecs : IntDyneVec; // no. of vectors for each interaction + OldR2 : double; // Previously obtained R^2 for stepwise addition + R2 : double; // Squared mult. R obtained from RegAnal + rmatrix : DblDyneMat; // correlation matrix + indmatrix : DblDyneMat; // correlations among independent variable + rxy : DblDyneVec; // correlations between dependent and independent var.s + invmatrix : DblDyneMat; // inverse of independent correlations + means : DblDyneVec; // means of variables + Vars : DblDyneVec; // variances of variables + StdDevs : DblDyneVec; // standard deviations of variables + B : DblDyneVec; // raw regression coefficients + Beta : DblDyneVec; // standardized regression coefficients + workmat : DblDyneMat; // work matrix for inverse referenced at 1 (not zero) + TypeISS : DblDyneVec; // Incremental SS + TypeIISS : DblDyneVec; // Unique SS + TypeIMS : DblDyneVec; // Incremental SS + TypeIIMS : DblDyneVec; // Unique MS + TypeIDF1 : DblDyneVec; // numerator d.f. for incremental ms + TypeIIDF1 : DblDyneVec; // numerator d.f. for unique ms + TypeIDF2 : DblDyneVec; // denominator d.f. for incremental ms + TypeIIDF2 : DblDyneVec; // denominator d.f. for unique ms + TypeIF : DblDyneVec; // F for incremental ms + TypeIProb : DblDyneVec; // Probability of F for incremental ms + TypeIIF : DblDyneVec; // F for unique MS + TypeIIProb : DblDyneVec; // Probability for unique ms + + procedure AllocateIDMem; + procedure GetIDs; + function GetVarCount : integer; + procedure AllocateGridMem; + procedure DeallocateGridMem; + procedure DeallocateIDMem; + procedure DummyCodes(min : integer; max : integer; VAR CodePattern : IntDyneMat); + procedure EffectCodes(min : integer; max : integer; VAR CodePattern : IntDyneMat); + procedure OrthogCodes(min : integer; max : integer; VAR CodePattern : IntDyneMat); + procedure RegAnal(Nentered : integer); + procedure PartIEntry; + procedure PartIIEntry; + procedure ModelIAnalysis; + procedure ModelIIAnalysis; + procedure ModelIIIAnalysis; + function CntIntActVecs(linestr : string) : integer; + procedure GenInterVecs(linestr : string); + procedure CanCor(NLeft : integer; NRight : integer; + GridPlace : IntDyneVec); + + public + { public declarations } + end; + +var + GLMFrm: TGLMFrm; + +implementation + +{ TGLMFrm } + +procedure TGLMFrm.ResetBtnClick(Sender: TObject); +VAR i : integer; +begin + VarList.Items.Clear; + DepCatList.Items.Clear; + DepContList.Items.Clear; + RepeatList.Items.Clear; + RepTrtList.Items.Clear; + RepTrtCode.Items.Clear; + FixedList.Items.Clear; + RandomList.Items.Clear; + CovariateList.Items.Clear; + InterDefList.Items.Clear; + InteractList.Items.Clear; + ContDepCode.Items.Clear; + CatDepCode.Items.Clear; + ReptDepCode.Items.Clear; + FixedIndepCode.Items.Clear; + RndIndepCode.Items.Clear; + CovariateCode.Items.Clear; + IndOrderBox.Items.Clear; + ModelEdit.Text := ''; + NContDep := 0; + NCatDep := 0; + NReptDep := 0; + NFixedIndep := 0; + NRndIndep := 0; + NCovIndep := 0; + DescChk.Checked := false; + CorsChk.Checked := false; + ResidChk.Checked := false; + TypeGroup.ItemIndex := 0; + ContDepOutBtn.Visible := false; + CatDepOutBtn.Visible := false; + ReptDepOutBtn.Visible := false; + FixedIndepOutBtn.Visible := false; + RndIndepOutBtn.Visible := false; + CovOutBtn.Visible := false; + IntDef := false; + DefLine := 0; + NoInterDefs := 0; + for i := 1 to NoVariables do VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); +end; + +procedure TGLMFrm.RndIndepInBtnClick(Sender: TObject); +var + index : integer; + codestr : string; + +begin + index := VarList.ItemIndex; + if index >= 0 then + begin + RandomList.Items.Add(VarList.Items.Strings[index]); + VarList.Items.Delete(index); + NRndIndep := NRndIndep + 1; + codestr := format('IR%d',[NRndIndep]); + RndIndepCode.Items.Add(codestr); + IndOrderBox.Items.Add(codestr); + RndIndepOutBtn.Visible := true; + end; +end; + +procedure TGLMFrm.RndIndepOutBtnClick(Sender: TObject); +var + i, index : integer; + cellstring : string; + +begin + index := RandomList.ItemIndex; + if index >= 0 then + begin + VarList.Items.Add(RandomList.Items.Strings[index]); + RandomList.Items.Delete(index); + cellstring := RndIndepCode.Items.Strings[index]; + RndIndepCode.Items.Delete(index); + for i := 0 to IndOrderBox.Items.Count - 1 do + if cellstring = IndOrderBox.Items.Strings[i] then + IndOrderBox.Items.Delete(i); + NRndIndep := NRndIndep - 1; + if RandomList.ItemIndex < 0 then RndIndepOutBtn.Visible := false; + end; +end; + +procedure TGLMFrm.ShowModelBtnClick(Sender: TObject); +var + i : integer; + codestr : string; + +begin + // add all dependent variable codes + if NContDep > 0 then + begin + for i := 0 to NContDep - 1 do + begin + ModelEdit.Text := ModelEdit.Text + ContDepCode.Items.Strings[i]; + if i < NContDep - 1 then ModelEdit.Text := ModelEdit.Text + ' + '; + end; + end; + if NCatDep > 0 then + begin + if ModelEdit.Text <> '' then ModelEdit.Text := ModelEdit.Text + ' + '; + for i := 0 to NCatDep - 1 do + begin + ModelEdit.Text := ModelEdit.Text + CatDepCode.Items.Strings[i]; + if i < NCatDep - 1 then ModelEdit.Text := ModelEdit.Text + ' + '; + end; + end; + if NReptDep > 0 then + begin + if ModelEdit.Text <> '' then ModelEdit.Text := ModelEdit.Text + ' + '; + ModelEdit.Text := ModelEdit.Text + 'Rep'; + end; + + // now add the independent variable codes + ModelEdit.Text := ModelEdit.Text + ' = '; + if NFixedIndep > 0 then + begin + for i := 0 to NFixedIndep - 1 do + begin + ModelEdit.Text := ModelEdit.Text + FixedIndepCode.Items.Strings[i]; + if i < NFixedIndep - 1 then + ModelEdit.Text := ModelEdit.Text + ' + '; + end; + end; + if NRndIndep > 0 then + begin + if NFixedIndep > 0 then ModelEdit.Text := ModelEdit.Text + ' + '; + for i := 0 to NRndIndep - 1 do + begin + ModelEdit.Text := ModelEdit.Text + RndIndepCode.Items.Strings[i]; + if i < NRndIndep - 1 then + ModelEdit.Text := ModelEdit.Text + ' + '; + end; + end; + if NCovIndep > 0 then + begin + if (NFixedIndep > 0) or (NRndIndep > 0) then + ModelEdit.Text := ModelEdit.Text + ' + '; + for i := 0 to NCovIndep - 1 do + begin + ModelEdit.Text := ModelEdit.Text + CovariateCode.Items.Strings[i]; + if i < NCovIndep - 1 then + ModelEdit.Text := ModelEdit.Text + ' + '; + end; + end; + + // now add interactions + if NoInterDefs > 0 then + begin + ModelEdit.Text := ModelEdit.Text + ' + '; + for i := 0 to NoInterDefs - 1 do + begin + ModelEdit.Text := ModelEdit.Text + InterActList.Items.Strings[i]; + if i < NoInterDefs - 1 then + ModelEdit.Text := ModelEdit.Text + ' + '; + end; + end; + + // Now add person vectors + if NReptDep > 0 then + begin + ModelEdit.Text := ModelEdit.Text + ' + '; + for i := 0 to NReptDep - 1 do + begin + codestr := format('IP%d',[i+1]); + ModelEdit.Text := ModelEdit.Text + codestr; + if i < NReptDep - 1 then + ModelEdit.Text := ModelEdit.Text + ' + '; + end; + end; + // Now add repeated treatments + if NReptDep > 0 then + begin + ModelEdit.Text := ModelEdit.Text + ' + '; + for i := 0 to NReptDep - 1 do + begin + codestr := format('IR%d',[i+1]); + ModelEdit.Text := ModelEdit.Text + codestr; + if i < NReptDep - 1 then + ModelEdit.Text := ModelEdit.Text + ' + '; + end; + end; +end; + +procedure TGLMFrm.StartInterBtnClick(Sender: TObject); +begin + IntDef := true; +end; + +procedure TGLMFrm.FormShow(Sender: TObject); +begin + ResetBtnClick(self); +end; + +procedure TGLMFrm.HelpBtnClick(Sender: TObject); +begin + ContextHelpForm.HelpMessage((Sender as TButton).tag); +end; + +procedure TGLMFrm.RandomListClick(Sender: TObject); +VAR index : integer; +begin + if IntDef then + begin + index := RandomList.ItemIndex; + InterDefList.Items.Add(RndIndepCode.Items.Strings[index]); + DefLine := DefLine + 1; // counter for number of terms - 1 + end; +end; + +procedure TGLMFrm.RepDepInBtnClick(Sender: TObject); +var + index, i : integer; + codestr : string; + +begin + index := VarList.Items.Count; + i := 0; + while i < index do + begin + if (VarList.Selected[i]) then + begin + RepeatList.Items.Add(VarList.Items.Strings[i]); + VarList.Items.Delete(i); + NReptDep := NReptDep + 1; + codestr := format('DR%d',[NReptDep]); + if NReptDep = 1 then + begin + ReptDepCode.Items.Add(codestr); + codestr := format('IP%d',[NReptDep]); + IndOrderBox.Items.Add(codestr); + codestr := format('IR%d',[NReptDep]); + IndOrderBox.Items.Add(codestr); + RepTrtCode.Items.Add(codestr); + codestr := format('Rep.Trt.%d',[NReptDep]); + RepTrtList.Items.Add(codestr); + end; + index := index - 1; + i := 0; + end + else i := i + 1; + end; + ReptDepOutBtn.Visible := true; +end; + +procedure TGLMFrm.ReptDepOutBtnClick(Sender: TObject); +VAR index : integer; +begin + index := RepeatList.ItemIndex; + if index >= 0 then + begin + VarList.Items.Add(RepeatList.Items.Strings[index]); + RepeatList.Items.Delete(index); + ReptDepCode.Items.Delete(index); + NReptDep := NReptDep - 1; + if RepeatList.ItemIndex < 0 then ReptDepOutBtn.Visible := false; + end; +end; + +procedure TGLMFrm.RepTrtListClick(Sender: TObject); +VAR index : integer; +begin + if IntDef then + begin + index := RepTrtList.ItemIndex; + InterDefList.Items.Add(RepTrtCode.Items.Strings[index]); + DefLine := DefLine + 1; // counter for number of terms + end; +end; + +procedure TGLMFrm.ContDepInBtnClick(Sender: TObject); +var + index : integer; + codestr : string; + +begin + index := VarList.ItemIndex; + if index >= 0 then + begin + DepContList.Items.Add(VarList.Items.Strings[index]); + VarList.Items.Delete(index); + ContDepOutBtn.Visible := true; + NContDep := NContDep + 1; + codestr := format('DC%d',[NContDep]); + ContDepCode.Items.Add(codestr); + end; +end; + +procedure TGLMFrm.CatDepInBtnClick(Sender: TObject); +var + index : integer; + codestr : string; + +begin + index := VarList.ItemIndex; + if index >= 0 then + begin + DepCatList.Items.Add(VarList.Items.Strings[index]); + VarList.Items.Delete(index); + NCatDep := NCatDep + 1; + codestr := format('DF%d',[NCatDep]); + CatDepCode.Items.Add(codestr); + CatDepOutBtn.Visible := true; + end; +end; + +procedure TGLMFrm.CatDepOutBtnClick(Sender: TObject); +VAR index : integer; +begin + index := DepCatList.ItemIndex; + if index >= 0 then + begin + VarList.Items.Add(DepCatList.Items.Strings[index]); + DepCatList.Items.Delete(index); + CatDepCode.Items.Delete(index); + NCatDep := NCatDep - 1; + if DepCatList.ItemIndex < 0 then CatDepOutBtn.Visible := false; + end; +end; + +procedure TGLMFrm.ComputeBtnClick(Sender: TObject); +var + i, j : integer; // no. of variables in the analysis + cellstring : string; + +begin + if (NContDep > 0) and (NReptDep > 0) then + begin + ShowMessage('ERROR! One cannot have both continuous and repeated dependent variables!'); + exit; + end; + gencount := 0; // counter for generated variables + totalobs := 0; // initialize total no. of observations in data grid + AllocateIDMem; // get heap space for arrays + GetIDs; // get var. no.s of dependent and independent variables + novars := GetVarCount; // get total no. of variables to generate + AllocateGridMem; // create data array for values and codes + // Note, the Data Grid first subscript is row (subject) and second the var. + if (NCatDep > 0) or (NContDep > 1) then model := 2 + else model := 1; // use mult.reg for model 1, canonical reg. for model 2 + if NReptDep > 0 then model := 3; + + // This procedure first creates the vectors of dependent variables then the + // vectors for independent variables. A case no. is placed in the first + // column of a data grid followed by the dependent variables and then the + // independent variables. If multiple dependent variables are created, the + // type of analysis is a canonical correlation analysis, otherwise a + // multiple regression analysis. Analyses are performed to obtain both + // Type I SS's and Type II SS's (stepwise addition and unique contribution) + + // PART I. ENTRY OF DEPENDENT VARIABLES (AND OBSERVATION NO.) + // Place case labels in data grid and for repeated measures, spread out + // the repeated measures over NoCases * No. repeated measures + PartIEntry; + + // PART II. CREATION OF INDEPENDENT VARIABLE VECTORS + // First, if there are repeated measures, generate (n - 1) person vectors + PartIIEntry; + + // Now, do the analyses + if model = 1 then ModelIAnalysis; // models with 1 dependent variable + if model = 2 then ModelIIAnalysis; // models with 2 or more dependent var.s + if model = 3 then ModelIIIAnalysis; // Repeated measures designs + + // Place generated data into the main form's grid + if ShowDesignChk.Checked then + begin + if NoVariables < gencount then + begin + j := NoVariables; + for i := j+1 to gencount do + begin + DictionaryFrm.NewVar(j); + end; + end; + OS3MainFrm.DataGrid.RowCount := totalobs+1; + for i := 1 to totalobs do + for j := 1 to gencount do + OS3MainFrm.DataGrid.Cells[j,i] := FloatToStr(DataGrid[i-1,j-1]); + for i := 1 to gencount do + begin + OS3MainFrm.DataGrid.Cells[i,0] := GenLabels[i-1]; + DictionaryFrm.Defaults(Self,i); + DictionaryFrm.DictGrid.Cells[1,i] := GenLabels[i-1]; + end; + for i := 1 to totalobs do + begin + cellstring := format('CASE%d',[i]); + OS3MainFrm.DataGrid.Cells[0,i] := cellstring; + end; + OS3MainFrm.NoCasesEdit.Text := IntToStr(totalobs); + OS3MainFrm.NoVarsEdit.Text := IntToStr(gencount); + NoVariables := gencount; + NoCases := totalobs; + OS3MainFrm.FileNameEdit.Text := ''; + end; + + DeallocateGridMem; // free up heap allocated to data array + DeallocateIDMem; // free up heap space +end; + +procedure TGLMFrm.ContDepOutBtnClick(Sender: TObject); +VAR index : integer; +begin + index := DepContList.ItemIndex; + if index >= 0 then + begin + VarList.Items.Add(DepContList.Items.Strings[index]); + DepContList.Items.Delete(index); + ContDepCode.Items.Delete(index); + NContDep := NContDep - 1; + if DepContList.ItemIndex < 0 then ContDepOutBtn.Visible := false; + end; +end; + +procedure TGLMFrm.CovariateListClick(Sender: TObject); +VAR index : integer; +begin + if IntDef then + begin + index := CovariateList.ItemIndex; + InterDefList.Items.Add(CovariateCode.Items.Strings[index]); + DefLine := DefLine + 1; // counter for number of terms - 1 + end; +end; + +procedure TGLMFrm.CovInBtnClick(Sender: TObject); +var + index : integer; + codestr : string; + +begin + index := VarList.ItemIndex; + if index >= 0 then + begin + CovariateList.Items.Add(VarList.Items.Strings[index]); + VarList.Items.Delete(index); + NCovIndep := NCovIndep + 1; + codestr := format('IC%d',[NCovIndep]); + CovariateCode.Items.Add(codestr); + IndOrderBox.Items.Add(codestr); + CovOutBtn.Visible := true; + end; +end; + +procedure TGLMFrm.CovOutBtnClick(Sender: TObject); +var + i, index : integer; + cellstring : string; + +begin + index := CovariateList.ItemIndex; + if index >= 0 then + begin + VarList.Items.Add(CovariateList.Items.Strings[index]); + CovariateList.Items.Delete(index); + cellstring := CovariateCode.Items.Strings[index]; + CovariateCode.Items.Delete(index); + for i := 0 to IndOrderBox.Items.Count - 1 do + if cellstring = IndOrderBox.Items.Strings[i] then + IndOrderBox.Items.Delete(i); + NCovIndep := NCovIndep - 1; + if CovariateList.ItemIndex < 0 then CovOutBtn.Visible := false; + end; +end; + +procedure TGLMFrm.EndDefBtnClick(Sender: TObject); +var + index : integer; + nolines : integer; + LineStr : string; + +begin + LineStr := ''; + nolines := InterDefList.Items.Count; + if nolines > 0 then + begin + for index := 0 to nolines - 1 do + begin + LineStr := LineStr + InterDefList.Items.Strings[index]; + if index < nolines - 1 then LineStr := LineStr + ' * '; + end; + InteractList.Items.Add(LineStr); + IndOrderBox.Items.Add(LineStr); + NoInterDefs := NoInterDefs + 1; + end; + InterDefList.Clear; +end; + +procedure TGLMFrm.FixedIndepInBtnClick(Sender: TObject); +var + index, i : integer; + codestr : string; + +begin + index := VarList.Items.Count; + i := 0; + while i < index do + begin + if (VarList.Selected[i]) then + begin + FixedList.Items.Add(VarList.Items.Strings[i]); + VarList.Items.Delete(i); + NFixedIndep := NFixedIndep + 1; + codestr := format('IF%d',[NFixedIndep]); + FixedIndepCode.Items.Add(codestr); + IndOrderBox.Items.Add(codestr); + index := index - 1; + i := 0; + end + else i := i + 1; + end; + FixedIndepOutBtn.Visible := true; +end; + +procedure TGLMFrm.FixedIndepOutBtnClick(Sender: TObject); +var + i, index : integer; + cellstring : string; + +begin + index := FixedList.ItemIndex; + if index >= 0 then + begin + VarList.Items.Add(FixedList.Items.Strings[index]); + FixedList.Items.Delete(index); + cellstring := FixedIndepCode.Items.Strings[index]; + FixedIndepCode.Items.Delete(index); + NFixedIndep := NFixedIndep - 1; + for i := 0 to IndOrderBox.Items.Count - 1 do + if IndOrderBox.Items.Strings[i] = cellstring then + IndOrderBox.Items.Delete(i); + if FixedList.ItemIndex < 0 then FixedIndepOutBtn.Visible := false; + end; +end; + +procedure TGLMFrm.FixedListClick(Sender: TObject); +VAR index : integer; +begin + if IntDef then + begin + index := FixedList.ItemIndex; + InterDefList.Items.Add(FixedIndepCode.Items.Strings[index]); + DefLine := DefLine + 1; // counter for number of terms + end; +end; + +procedure TGLMFrm.AllocateIDMem; +begin + if NContDep > 0 then + begin + SetLength(ContDepID,NContDep); + SetLength(ContDepPos,NContDep); + end; + if NCatDep > 0 then + begin + SetLength(CatDepID,NCatDep); + SetLength(CatDepPos,NCatDep); + SetLength(NFixVecDep,NCatDep); + end; + if NReptDep > 0 then + begin + SetLength(ReptDepID,NReptDep); + SetLength(ReptDepPos,NReptDep); + SetLength(ReptIndepPos,NoCases); + SetLength(ReptTrtPos,NReptDep); + end; + if NFixedIndep > 0 then + begin + SetLength(FixedIndepID,NFixedIndep); + SetLength(FixedIndepPos,NFixedIndep); + SetLength(NFixVecIndep,NFixedIndep); + end; + if NRndIndep > 0 then + begin + SetLength(RndIndepID,NRndIndep); + SetLength(RndIndepPos,NRndIndep); + SetLength(NRndVecIndep,NRndIndep); + end; + if NCovIndep > 0 then + begin + SetLength(CovIndepID,NCovIndep); + SetLength(CovIndepPos,NCovIndep); + end; + if NoInterDefs > 0 then + begin + SetLength(NInteractVecs,NoInterDefs); + SetLength(InteractPos,NoInterDefs); + end; +end; + +procedure TGLMFrm.GetIDs; +var + cellstring : string; + i, j : integer; + +begin + if NContDep > 0 then + begin + for i := 0 to NContDep - 1 do + begin + cellstring := DepContList.Items.Strings[i]; + for j := 1 to NoVariables do + begin + if cellstring = OS3MainFrm.DataGrid.Cells[j,0] then + ContDepID[i] := j; + end; + end; + end; + if NCatDep > 0 then + begin + for i := 0 to NCatDep - 1 do + begin + cellstring := DepCatList.Items.Strings[i]; + for j := 1 to NoVariables do + begin + if cellstring = OS3MainFrm.DataGrid.Cells[j,0] then + CatDepID[i] := j; + end; + end; + end; + if NReptDep > 0 then + begin + for i := 0 to NReptDep - 1 do + begin + cellstring := RepeatList.Items.Strings[i]; + for j := 1 to NoVariables do + begin + if cellstring = OS3MainFrm.DataGrid.Cells[j,0] then + ReptDepID[i] := j; + end; + end; + end; + if NFixedIndep > 0 then + begin + for i := 0 to NFixedIndep - 1 do + begin + cellstring := FixedList.Items.Strings[i]; + for j := 1 to NoVariables do + begin + if cellstring = OS3MainFrm.DataGrid.Cells[j,0] then + FixedIndepID[i] := j; + end; + end; + end; + if NRndIndep > 0 then + begin + for i := 0 to NRndIndep - 1 do + begin + cellstring := RandomList.Items.Strings[i]; + for j := 1 to NoVariables do + begin + if cellstring = OS3MainFrm.DataGrid.Cells[j,0] then + RndIndepID[i] := j; + end; + end; + end; + if NCovIndep > 0 then + begin + for i := 0 to NCovIndep - 1 do + begin + cellstring := CovariateList.Items.Strings[i]; + for j := 1 to NoVariables do + begin + if cellstring = OS3MainFrm.DataGrid.Cells[j,0] then + CovIndepID[i] := j; + end; + end; + end; +end; + +function TGLMFrm.GetVarCount: integer; +var + count, i, j, col, nvectors : integer; + min, max : integer; // use to get no. of coding vectors for categorical var.s + group : integer; + linestr : string; + +begin + count := 1; // one column for case id's + count := count + NContDep + NCovIndep; // sum of continuous variables + if NReptDep > 0 then count := count + 1; // one col. for repeated dep. measure + // plus person vectors for repeated measures (independent predictors) + if NReptDep > 0 then count := count + (NoCases - 1); // person vectors + if NReptDep > 0 then count := count + (NreptDep - 1); // repeated treatment vectors + if NCatDep > 0 then // calculate min and max for each var. to get no. of vectors + begin + for i := 0 to NCatDep - 1 do + begin + col := CatDepID[i]; + min := round(StrToFloat(OS3MainFrm.DataGrid.Cells[col,1])); + max := min; + for j := 1 to NoCases do + begin + group := round(StrToFLoat(OS3MainFrm.DataGrid.Cells[col,j])); + if group < min then min := group; + if group > max then max := group; + end; + count := count + (max - min); // 1 less than the no. of groups + NFixVecDep[i] := count; + end; + end; + + if NFixedIndep > 0 then // add no. of vectors to count + begin + for i := 0 to NFixedIndep - 1 do + begin + col := FixedIndepID[i]; + min := round(StrToFloat(OS3MainFrm.DataGrid.Cells[col,1])); + max := min; + for j := 1 to NoCases do + begin + group := round(StrToFloat(OS3MainFrm.DataGrid.Cells[col,j])); + if group < min then min := group; + if group > max then max := group; + end; + count := count + (max - min); // 1 less than the no. of groups + NFixVecIndep[i] := max - min; + end; + end; + + if NRndIndep > 0 then // add no. of vectors to count + begin + for i := 0 to NRndIndep - 1 do + begin + col := RndIndepID[i]; + min := round(StrToFloat(OS3MainFrm.DataGrid.Cells[col,1])); + max := min; + for j := 1 to NoCases do + begin + group := round(StrToFloat(OS3MainFrm.DataGrid.Cells[col,j])); + if group < min then min := group; + if group > max then max := group; + end; + count := count + (max - min); // 1 less than the no. of groups + NRndVecIndep[i] := max - min; + end; + end; + + if NoInterDefs > 0 then // get no. of vectors for each interaction + begin + for i := 0 to NoInterDefs - 1 do + begin + linestr := InterActList.Items.Strings[i]; + // parse the line for variable definitions and get no. of columns + // and vectors for the products of these variables + nvectors := CntIntActVecs(linestr); + NInteractVecs[i] := nvectors; + count := count + nvectors; + end; + end; + Result := count; +end; + +procedure TGLMFrm.AllocateGridMem; +var + norows : integer; + +begin + if NReptDep > 0 then norows := NoCases * NReptDep + else norows := NoCases; + SetLength(DataGrid,norows+1,novars+4); // grid data for generated data + SetLength(GenLabels,novars+4); // column labels of new data grid + SetLength(Labels,novars+4); // labels of variables entered into analysis + SetLength(ColSelected,novars+4); // datagrid columns selected for analysis +end; + +procedure TGLMFrm.DeallocateGridMem; +begin + ColSelected := nil; + Labels := nil; + GenLabels := nil; + DataGrid := nil; +end; + +procedure TGLMFrm.DeallocateIDMem; +begin + InteractPos := nil; + NInteractVecs := nil; + CovIndepPos := nil; + CovIndepID := nil; + NRndVecIndep := nil; + RndIndepPos := nil; + RndIndepID := nil; + NFixVecIndep := nil; + FixedIndepPos := nil; + FixedIndepID := nil; + ReptTrtPos := nil; + ReptIndepPos := nil; + ReptDepPos := nil; + ReptDepID := nil; + NFixVecDep := nil; + CatDepPos := nil; + CatDepID := nil; + ContDepPos := nil; + ContDepID := nil; +end; + +procedure TGLMFrm.DummyCodes(min: integer; max: integer; + var CodePattern: IntDyneMat); +var + ngrps : integer; + vects : integer; + i, j : integer; + +begin + ngrps := max - min + 1; + vects := ngrps - 1; + for j := 1 to vects do + begin + for i := 1 to ngrps do + begin + if i = j then CodePattern[i,j] := 1 else CodePattern[i,j] := 0; + end; + end; +end; + +procedure TGLMFrm.EffectCodes(min: integer; max: integer; + var CodePattern: IntDyneMat); +var + ngrps : integer; + vects : integer; + i, j : integer; + +begin + ngrps := max - min + 1; + vects := ngrps - 1; + for i := 1 to ngrps do + begin + for j := 1 to vects do + begin + if i = j then CodePattern[i,j] := 1; + if i = ngrps then CodePattern[i,j] := -1; + if (i <> j) and (i <> ngrps) then CodePattern[i,j] := 0; + end; + end; +end; + +procedure TGLMFrm.OrthogCodes(min: integer; max: integer; + var CodePattern: IntDyneMat); +var + ngrps : integer; + vects : integer; + i, j : integer; + +begin + ngrps := max - min + 1; + vects := ngrps - 1; + for i := 1 to ngrps do + begin + for j := 1 to vects do + begin + if i <= j then CodePattern[i,j] := 1; + if i-1 = j then CodePattern[i,j] := -j; + if i > j+1 then CodePattern[i,j] := 0; + end; + end; +end; + +procedure TGLMFrm.RegAnal(Nentered: integer); +var + i, j, nvars, ncases : integer; + title : string; + +begin + nvars := Nentered; + ncases := totalobs; + SetLength(rmatrix,nvars+1,nvars+1); + SetLength(indmatrix,nvars-1,nvars-1); + SetLength(rxy,nvars); + SetLength(invmatrix,nvars,nvars); + SetLength(B,nvars); + SetLength(Beta,nvars); + SetLength(means,nvars); + SetLength(Vars,nvars); + SetLength(StdDevs,nvars); + SetLength(workmat,nvars,nvars); + + DynCorrelations(nvars,ColSelected,DataGrid,rmatrix,means,vars,StdDevs,ncases,3); + OutPutFrm.RichEdit.Clear; + title := 'Means'; + if DescChk.Checked then DynVectorPrint(means,Nentered,title,Labels,ncases); + title := 'Correlations'; + if CorsChk.Checked then + MAT_PRINT(rmatrix,Nentered,Nentered,title,Labels,Labels,ncases); + for i := 1 to nvars - 1 do + begin + rxy[i-1] := rmatrix[i,0]; // r's with dependent var + for j := 1 to nvars - 1 do + begin + indmatrix[i-1,j-1] := rmatrix[i,j]; // intercorr.s of indep. var.s + workmat[i-1,j-1] := rmatrix[i,j]; // used to get inverse + end; + end; + SVDinverse(workmat,nvars-1); + // Copy inverse to zero indexed matrix + for i := 1 to nvars-1 do + for j := 1 to nvars-1 do invmatrix[i-1,j-1] := workmat[i-1,j-1]; + title := 'inverse of indep. matrix'; + // get betas and squared multiple correlation + R2 := 0.0; + for i := 1 to nvars-1 do + begin + Beta[i-1] := 0.0; + for j := 1 to nvars-1 do Beta[i-1] := Beta[i-1] + invmatrix[i-1,j-1] * rxy[j-1]; + R2 := R2 + Beta[i-1] * rxy[i-1]; + end; +// outline := format('Squared Multiple Correlation = %6.4f',[R2]); +// OutPutFrm.RichEdit.Lines.Add(outline); +// title := 'Standardized regression coefficients'; +// DynVectorPrint(Beta,Nentered-1,title,Labels,ncases); + // get raw coefficients + for i := 1 to nvars - 1 do + begin + if StdDevs[i] > 0.0 then + B[i-1] := Beta[i-1] * (StdDevs[0] / StdDevs[i]) + else B[i-1] := 0.0; + end; +// title := 'Raw regression coefficients'; +// DynVectorPrint(B,Nentered-1,title,Labels,ncases); +// OutPutFrm.ShowModal; +end; + +procedure TGLMFrm.PartIEntry; +var + i, j, k, vect : integer; + min, max, group, ngrps : integer; + CodePattern : IntDyneMat; + cellstring: string; + +begin + if NReptDep > 0 then // create observations for each replication of the N cases + begin + for i := 1 to NreptDep do + begin + ReptDepPos[i-1] := i; // datagrid pos. of a repeated measure + for j := 1 to NoCases do + begin + DataGrid[totalobs,gencount] := j; // case no. in col. 0 + k := ReptDepID[i-1]; + DataGrid[totalobs,gencount+1] := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[k,j])); + totalobs := totalobs + 1; + end; + end; // next i repeated measure + gencount := gencount + 2; + end + else + begin // no repeated measures - just need case numbers in data grid pos 0 + for i := 1 to NoCases do DataGrid[i-1,gencount] := i; + totalobs := NoCases; + gencount := gencount + 1; + end; + GenLabels[0] := 'Obs.'; + if NReptDep > 0 then GenLabels[1] := 'Repeated'; + + // Enter the continuous dependent variables into the data grid + if NContDep > 0 then + begin + for j := 1 to NContDep do + begin + ContDepPos[j-1] := gencount; + for i := 1 to NoCases do + begin + k := ContDepID[j-1]; + DataGrid[i-1,gencount] := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[k,i])); + end; + GenLabels[gencount] := ContDepCode.Items.Strings[j-1]; + gencount := gencount + 1; + end; + end; // end if NContDep > 0 + + // Enter categorical dependent variables in the data grid + if NCatDep > 0 then + begin + // get no. of categories - 1 for no of vectors to generate for each + // categorical variable + for j := 1 to NCatDep do + begin + CatDepPos[j-1] := gencount; + k := CatDepID[j-1]; + min := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[k,1]))); + max := min; + for i := 1 to NoCases do + begin + group := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[k,i]))); + if group > max then max := group; + if group < min then min := group; + end; + ngrps := max-min+1; + SetLength(CodePattern,ngrps+1,ngrps+1); + if TypeGroup.ItemIndex = 0 then // dummy coding + DummyCodes(min,max,CodePattern); + if TypeGroup.ItemIndex = 1 then // effect coding + EffectCodes(min,max,CodePattern); + if TypeGroup.ItemIndex = 2 then // orthogonal coding + OrthogCodes(min,max,CodePattern); + // Now, generate vectors for the categorical variable j + for vect := 1 to (max - min) do // vector no. + begin + for i := 1 to NoCases do + begin + group := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[k,i]))); + DataGrid[i-1,gencount + vect - 1] := CodePattern[group,vect]; + end; + cellstring := format('%s_%d',[CatDepCode.Items.Strings[j-1],vect]); + GenLabels[gencount + vect - 1] := cellstring; + end; + gencount := gencount + (max - min); // new no. of variables + end; // next categorical variable j + end; // if no. of dependent categorical variables greater than zero + codepattern := nil; +end; + +procedure TGLMFrm.PartIIEntry; +var + i, j, k, vect, lastdep, row : integer; + min, max, group, ngrps : integer; + CodePattern : IntDyneMat; + cellstring : string; + value : double; + +begin + lastdep := gencount; // datagrid position of last dependent variable + // This section develops vectors for the independent variables. If there + // are repeated measures, generate person vectors first. + if NReptDep > 0 then + begin + min := 1; + max := NoCases; + ngrps := max-min+1; + SetLength(CodePattern,ngrps+1,ngrps+1); + if TypeGroup.ItemIndex = 0 then // dummy coding + DummyCodes(min,max,CodePattern); + if TypeGroup.ItemIndex = 1 then // effect coding + EffectCodes(min,max,CodePattern); + if TypeGroup.ItemIndex = 2 then // orthogonal coding + OrthogCodes(min,max,CodePattern); + for vect := 1 to (max - min) do // vector no. + begin + for i := 1 to totalobs do // NoCases + begin + group := round(DataGrid[i-1,0]); + DataGrid[i-1,gencount + vect - 1] := CodePattern[group,vect]; + end; + ReptIndepPos[vect-1] := gencount + vect - 1; + cellstring := format('p%d',[vect]); + GenLabels[gencount + vect - 1] := cellstring; + end; + gencount := gencount + (max - min); // new no. of variables + end; // end generation of person codes + + // generate vectors for the repeated treatments if replications used + if NReptDep > 0 then + begin + min := 1; + max := NReptDep; + ngrps := max-min+1; + SetLength(CodePattern,ngrps+1,ngrps+1); + if TypeGroup.ItemIndex = 0 then // dummy coding + DummyCodes(min,max,CodePattern); + if TypeGroup.ItemIndex = 1 then // effect coding + EffectCodes(min,max,CodePattern); + if TypeGroup.ItemIndex = 2 then // orthogonal coding + OrthogCodes(min,max,CodePattern); + for vect := 1 to (max - min) do // vector no. + begin + for i := 1 to totalobs do // NoCases + begin + group := ((i - 1) div NoCases) + 1; + DataGrid[i-1,gencount + vect - 1] := CodePattern[group,vect]; + end; + ReptTrtPos[vect-1] := gencount + vect - 1; + cellstring := format('IR_%d',[vect]); + GenLabels[gencount + vect - 1] := cellstring; + end; + gencount := gencount + (max - min); // new no. of variables + end; + + oldcount := gencount; + // Next, add vectors for independent fixed categorical variables + if NFixedIndep > 0 then + begin + // get no. of categories - 1 for no of vectors to generate for each + // categorical variable + for j := 1 to NFixedIndep do + begin + FixedIndepPos[j-1] := gencount; // first vector position in datagrid + k := FixedIndepID[j-1]; + min := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[k,1]))); + max := min; + for i := 1 to NoCases do + begin + group := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[k,i]))); + if group > max then max := group; + if group < min then min := group; + end; + ngrps := max-min+1; + SetLength(CodePattern,ngrps+1,ngrps+1); + if TypeGroup.ItemIndex = 0 then // dummy coding + DummyCodes(min,max,CodePattern); + if TypeGroup.ItemIndex = 1 then // effect coding + EffectCodes(min,max,CodePattern); + if TypeGroup.ItemIndex = 2 then // orthogonal coding + OrthogCodes(min,max,CodePattern); + // Now, generate vectors for the categorical variable j + for vect := 1 to (max - min) do // vector no. + begin + for i := 1 to NoCases do + begin + group := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[k,i]))); + DataGrid[i-1,gencount + vect - 1] := CodePattern[group,vect]; + end; + cellstring := format('%s_%d',[FixedIndepCode.Items.Strings[j-1],vect]); + GenLabels[gencount + vect - 1] := cellstring; + end; + gencount := gencount + (max - min); // new no. of variables + end; // next categorical variable j + end; // end generation of fixed effect codes + + // Next, add vectors for independent random categorical variables + oldcount := gencount; + if NRndIndep > 0 then + begin + // get no. of categories - 1 for no of vectors to generate for each + // categorical variable + for j := 1 to NRndIndep do + begin + RndIndepPos[j-1] := gencount; // pos. of first vector in datagrid + k := RndIndepID[j-1]; + min := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[k,1]))); + max := min; + for i := 1 to NoCases do + begin + group := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[k,i]))); + if group > max then max := group; + if group < min then min := group; + end; + ngrps := max-min+1; + SetLength(CodePattern,ngrps+1,ngrps+1); + if TypeGroup.ItemIndex = 0 then // dummy coding + DummyCodes(min,max,CodePattern); + if TypeGroup.ItemIndex = 1 then // effect coding + EffectCodes(min,max,CodePattern); + if TypeGroup.ItemIndex = 2 then // orthogonal coding + OrthogCodes(min,max,CodePattern); + // Now, generate vectors for the categorical variable j + for vect := 1 to (max - min) do // vector no. + begin + for i := 1 to NoCases do + begin + group := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[k,i]))); + DataGrid[i-1,gencount + vect - 1] := CodePattern[group,vect]; + end; + cellstring := format('%s_%d',[RndIndepCode.Items.Strings[j-1],vect]); + GenLabels[gencount + vect - 1] := cellstring; + end; + gencount := gencount + (max - min); // new no. of variables + end; // next categorical variable j + end; // end generation of random effect codes + + + // Next, add covariates + if NCovIndep > 0 then + begin + for j := 1 to NCovIndep do + begin + CovIndepPos[j-1] := gencount; + for i := 1 to NoCases do + begin + k := CovIndepID[j-1]; + DataGrid[i-1,gencount] := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[k,i])); + end; + GenLabels[gencount] := CovariateCode.Items.Strings[j-1]; + gencount := gencount + 1; + end; + end; // end generation of covariate codes + + // if repeated measures used, copy generated vectors for each replication + if NReptDep > 0 then + begin + for j := 1 to NReptDep - 1 do + begin + for i := 1 to NoCases do + begin + for k := lastdep + (NoCases-1) +(NReptDep-1) + 1 to gencount do + begin + value := DataGrid[i-1,k-1]; + row := (j * NoCases) + i - 1; + DataGrid[row,k-1] := value; + end; // next k column in data grid + end; // next case + end; // next repeated measure + end; // if repeated measures used + + // Now generate product vectors for the interactions + if NoInterDefs > 0 then + begin + for j := 0 to NoInterDefs - 1 do + begin + // parse an interaction line into components (abbreviations) and + // get product of vectors corresponding to each + InteractPos[j] := gencount; + cellstring := InteractList.Items.Strings[j]; + GenInterVecs(cellstring); + gencount := gencount + NInteractVecs[j]; + end; + end; // end generation of interaction codes + codepattern := nil; +end; + +procedure TGLMFrm.ModelIAnalysis; +var + block, i, j, k, NEntered, index, noblocks, priorentered : integer; + cellstring : string; + labelstr : string; + outline : string; + R, R2Increment, SSx, sum, constant, FullR2 : double; + df1, df2, F, FProbF, StdErrB,OldDF1, PredSS, PredMS : double; + SSt, VarEst, SSres, StdErrEst, AdjR2 : double; + +begin + NEntered := 0; + OldDF1 := 0.0; + priorentered := 0; + OldR2 := 0; + // enter the dependent variable first + if NContDep > 0 then + begin + ColSelected[0] := ContDepPos[0]; + Labels[0] := GenLabels[1]; + end + else begin + ColSelected[0] := ReptDepPos[0]; + Labels[0] := GenLabels[1]; + end; + NEntered := NEntered + 1; + + // Enter independent variables as indicated in indorderbox then interactions + // until the total model is analyzed. Then delete each term to get a + // restricted model and compare to the full model. + noblocks := IndOrderBox.Items.Count; + SetLength(TypeISS,noblocks); + SetLength(TypeIISS,noblocks); + SetLength(TypeIMS,noblocks); + SetLength(TypeIIMS,noblocks); + SetLength(TypeIDF1,noblocks); + SetLength(TypeIDF2,noblocks); + SetLength(TypeIIDF1,noblocks); + SetLength(TypeIIDF2,noblocks); + SetLength(TypeIF,noblocks); + SetLength(TypeIProb,noblocks); + SetLength(TypeIIF,noblocks); + SetLength(TypeIIProb,noblocks); + + for block := 0 to noblocks - 1 do + begin + // get index of the abbreviation of term to enter and find corresponding + // vector(s) to place in the equation + cellstring := IndOrderBox.Items.Strings[block]; + // check for covariates first + if NCovIndep > 0 then + begin + for i := 0 to NCovIndep-1 do + begin + if cellstring = CovariateCode.Items.Strings[i] then // matched! + begin + index := i; // index of covariate code + ColSelected[NEntered] := CovIndepPos[index]; + labelstr := format('%s',[CovariateCode.Items.Strings[index]]); + Labels[NEntered] := labelstr; + NEntered := NEntered + 1; + break; + end; + end; + end; + // check for fixed effect variables next + if NFixedIndep > 0 then + begin + for i := 0 to NFixedIndep-1 do + begin + if cellstring = FixedIndepCode.Items.Strings[i] then + begin + index := i; + for j := 0 to NFixVecIndep[index]-1 do + begin + ColSelected[NEntered] := FixedIndepPos[index] + j; + labelstr := format('%s_%d',[FixedIndepCode.Items.Strings[index],j+1]); + Labels[NEntered] := labelstr; + NEntered := NEntered + 1; + end; + break; + end; + end; + end; + // Check for random effects variables next + if NRndIndep > 0 then + begin + for i := 0 to NRndIndep-1 do + begin + if cellstring = RndIndepCode.Items.Strings[i] then + begin + index := i; + for j := 0 to NRndVecIndep[index]-1 do + begin + ColSelected[NEntered] := RndIndepPos[index] + j; + labelstr := format('%s_%d',[RndIndepCode.Items.Strings[index],j+1]); + Labels[NEntered] := labelstr; + NEntered := NEntered + 1; + end; + break; + end; + end; + end; + // check for interactions next + if NoInterDefs > 0 then + begin + for i := 0 to NoInterDefs-1 do + begin + if cellstring = InteractList.Items.Strings[i] then + begin + for j := 0 to NInteractVecs[i]-1 do + begin + ColSelected[NEntered] := InteractPos[i] + j; + labelstr := format('%s%d_%d',['IA',i+1,j+1]); + Labels[NEntered] := labelstr; + NEntered := NEntered + 1; + end; + break; + end; + end; + end; // check for interaction variables + + // check for repeated measures variables (person codes) + if NReptDep > 0 then + begin // look for 'IP' in cellstring + labelstr := copy(cellstring,0,2); + if labelstr = 'IP' then // person vectors were generated + begin + for i := 0 to NoCases - 2 do + begin + ColSelected[NEntered] := ReptIndepPos[i]; + Labels[NEntered] := GenLabels[ReptIndepPos[i]]; + NEntered := NEntered + 1; + end; + end; + end; + + // check for repeated treatments + if NReptDep > 0 then + begin // look for 'IR' in cellstring + labelstr := copy(cellstring,0,2); + if labelstr = 'IR' then // repeated treatment vectors were generated + begin + for i := 0 to NReptDep - 2 do + begin + ColSelected[NEntered] := ReptTrtPos[i]; + Labels[NEntered] := GenLabels[ReptTrtPos[i]]; + NEntered := NEntered + 1; + end; + end; + end; + + RegAnal(NEntered); + R := sqrt(R2); + df1 := Nentered - 1; // no. of independent variables + df2 := totalobs - df1 - 1; // N - no. independent - 1 + SSt := (totalobs-1) * Vars[0]; + SSres := SSt * (1.0 - R2); + VarEst := SSres / df2; + if (VarEst > 0.0) then StdErrEst := sqrt(VarEst) + else + begin + ShowMessage('ERROR! Error in computing variance estimate.'); + StdErrEst := 0.0; + end; + if (R2 < 1.0) and (df2 > 0.0) then F := (R2 / df1) / ((1.0-R2)/ df2) + else F := 0.0; + FProbF := probf(F,df1,df2); + AdjR2 := 1.0 - (1.0 - R2) * (totalobs - 1) / df2; +// OutPutFrm.RichEdit.ParaGraph.Alignment := taLeftJustify; + outline := format('%8s%10s%10s%12s%5s%5s',['R','R2','F','Prob.>F','DF1','DF2']); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('%8.3f%10.3f%10.3f%10.3f%5.0f%5.0f', + [R,R2,F,FProbF,df1,df2]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Adjusted R Squared = %5.3f',[AdjR2]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Std. Error of Estimate = %10.3f',[StdErrEst]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Variable Beta B Std.Error t Prob.>t'); + df1 := 1.0; + sum := 0.0; + for i := 0 to Nentered - 2 do + begin + SSx := (totalobs-1) * Vars[i+1]; + sum := sum + B[i] * means[i+1]; + if invmatrix[i,i] > 1.0e-15 then + begin + StdErrB := VarEst / (SSx * (1.0 / invmatrix[i,i])); + StdErrB := sqrt(StdErrB); + if StdErrB > 0.0 then F := B[i] / StdErrB else F := 0.0; + FProbF := probf(F*F,df1,df2); + end + else begin + StdErrB := 0.0; + F := 0.0; + FProbF := 0.0; + end; + cellstring := format('%10s',[Labels[i+1]]); + outline := format('%10s%10.3f%10.3f%10.3f%10.3f%10.3f', + [cellstring, Beta[i] ,B[i], StdErrB, F, FProbF]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + constant := means[0] - sum; + outline := format('Constant = %10.3f',[constant]); + OutPutFrm.RichEdit.Lines.Add(outline); + + // test increment in R2 for this block + R2Increment := R2 - OldR2; + if priorentered > 0 then + df1 := (NEntered-1) - (priorentered-1) + else df1 := NEntered - 1; + df2 := totalobs - NEntered; + TypeIDF1[block] := df1; + TypeIDF2[block] := df2; + TypeISS[block] := (R2 - OldR2) * SSt; + TypeIMS[block] := TypeISS[block] / df1; + F := ((R2 - OldR2)/ df1) / ((1.0 - R2) / df2); + TypeIF[block] := F; + FProbF := probf(F,df1,df2); + TypeIProb[block] := FProbF; + outline := format('Increment in Squared R = %10.3f',[R2Increment]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('F with degrees freedom %4.0f and %4.0f = %10.3f, Prob.>F = %10.3f', + [df1,df2,F,FProbF]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.ShowModal; + OldR2 := R2; + priorentered := NEntered; + // setup for next block analysis + WorkMat := nil; + StdDevs := nil; + Vars := nil; + means := nil; + Beta := nil; + B := nil; + invmatrix := nil; + rxy := nil; + indmatrix := nil; + rmatrix := nil; + end; // next variable block + + // Next, obtain the unique (Type II values) by elimination of each block + // from the full model and testing the decrement in R2 + FullR2 := R2; // save previously obtained full model R2 + for i := 0 to NoBlocks - 1 do + begin + NEntered := 0; + // enter the dependent variable first + if NContDep > 0 then + begin + ColSelected[0] := ContDepPos[0]; + Labels[0] := GenLabels[1]; + end + else begin + ColSelected[0] := ReptDepPos[0]; + Labels[0] := GenLabels[1]; + end; + NEntered := NEntered + 1; + for block := 0 to NoBlocks - 1 do + begin + if i = block then continue // delete this block + else + begin // enter the remaining blocks + cellstring := IndOrderBox.Items.Strings[block]; + // if a covariate, include it + if NCovIndep > 0 then + begin + for j := 0 to NCovIndep-1 do + begin + if cellstring = CovariateCode.Items.Strings[j] then // matched! + begin + index := j; // index of covariate code + ColSelected[NEntered] := CovIndepPos[index]; + labelstr := format('%s',[CovariateCode.Items.Strings[index]]); + Labels[NEntered] := labelstr; + NEntered := NEntered + 1; + break; + end; + end; + end; + // check for fixed effect variables next + if NFixedIndep > 0 then + begin + for j := 0 to NFixedIndep-1 do + begin + if cellstring = FixedIndepCode.Items.Strings[j] then + begin + index := j; + for k := 0 to NFixVecIndep[index]-1 do + begin + ColSelected[NEntered] := FixedIndepPos[index] + k; + labelstr := format('%s_%d',[FixedIndepCode.Items.Strings[index],k+1]); + Labels[NEntered] := labelstr; + NEntered := NEntered + 1; + end; + break; + end; + end; + end; + // Check for random effects variables next + if NRndIndep > 0 then + begin + for j := 0 to NRndIndep-1 do + begin + if cellstring = RndIndepCode.Items.Strings[j] then + begin + index := j; + for k := 0 to NRndVecIndep[index]-1 do + begin + ColSelected[NEntered] := RndIndepPos[index] + k; + labelstr := format('%s_%d',[RndIndepCode.Items.Strings[index],k+1]); + Labels[NEntered] := labelstr; + NEntered := NEntered + 1; + end; + end; + break; + end; + end; + // check for interactions next + if NoInterDefs > 0 then + begin + for j := 0 to NoInterDefs-1 do + begin + if cellstring = InteractList.Items.Strings[j] then + begin + for k := 0 to NInteractVecs[j]-1 do + begin + ColSelected[NEntered] := InteractPos[j] + k; + labelstr := format('%s%d_%d',['IA',j+1,k+1]); + Labels[NEntered] := labelstr; + NEntered := NEntered + 1; + end; + break; + end; // end if + end; // next j + end; // end if interdefs > 0 + end; // entry of remaining blocks + end; // enter next block not equal to block i + + RegAnal(NEntered); // compute restricted model + if R2 > 0.0 then R := sqrt(R2) else R := 0.0; + df1 := Nentered; // no. of independent variables + df2 := totalobs - df1 - 1; // N - no. independent - 1 + SSt := (totalobs-1) * Vars[0]; + SSres := SSt * (1.0 - R2); + VarEst := SSres / df2; + if (VarEst > 0.0) then StdErrEst := sqrt(VarEst) + else + begin + ShowMessage('ERROR! Error in computing variance estimate.'); + StdErrEst := 0.0; + end; + if (R2 < 1.0) and (df2 > 0.0) then F := (R2 / df1) / ((1.0-R2)/ df2) + else F := 0.0; + FProbF := probf(F,df1,df2); + AdjR2 := 1.0 - (1.0 - R2) * (totalobs - 1) / df2; +// OutPutFrm.RichEdit.ParaGraph.Alignment := taLeftJustify; + outline := format('%8s%10s%10s%12s%5s%5s',['R','R2','F','Prob.>F','DF1','DF2']); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('%8.3f%10.3f%10.3f%10.3f%5.0f%5.0f', + [R,R2,F,FProbF,df1,df2]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Adjusted R Squared = %5.3f',[AdjR2]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Std. Error of Estimate = %10.3f',[StdErrEst]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Variable Beta B Std.Error t Prob.>t'); + df1 := 1.0; + sum := 0.0; + for j := 0 to Nentered - 2 do + begin + SSx := (totalobs-1) * Vars[j+1]; + sum := sum + B[j] * means[j+1]; + if invmatrix[j,j] > 1.0e-18 then + StdErrB := VarEst / (SSx * (1.0 / invmatrix[j,j])) + else StdErrB := 0.0; + if StdErrB > 0.0 then StdErrB := sqrt(StdErrB); + if StdErrB > 0.0 then F := B[j] / StdErrB else F := 0.0; + FProbF := probf(F*F,df1,df2); + cellstring := format('%10s',[Labels[j+1]]); + outline := format('%10s%10.3f%10.3f%10.3f%10.3f%10.3f', + [cellstring, Beta[j] ,B[j], StdErrB, F, FProbF]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + constant := means[0] - sum; + outline := format('Constant = %10.3f',[constant]); + OutPutFrm.RichEdit.Lines.Add(outline); + + // Now compute unique contribution of block left out (Type II) + R2Increment := FullR2 - R2; + df1 := (novars - 2) - (NEntered - 1); // k1 - k2 + df2 := totalobs - (novars - 2) - 1; + TypeIIDF1[i] := df1; + TypeIIDF2[i] := df2; + TypeIISS[i] := (FullR2 - R2) * SSt; + TypeIIMS[i] := TypeIISS[i] / df1; + F := ((FullR2 - R2)/ df1) / ((1.0 - FullR2) / df2); + TypeIIF[i] := F; + FProbF := probf(F,df1,df2); + TypeIIProb[i] := FProbF; + outline := format('Decrement in Squared R = %10.3f',[R2Increment]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('F with degrees freedom %4.0f and %4.0f = %10.3f, Prob.>F = %10.3f', + [df1,df2,F,FProbF]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.ShowModal; + // setup for next block analysis + WorkMat := nil; + StdDevs := nil; + Vars := nil; + means := nil; + Beta := nil; + B := nil; + invmatrix := nil; + rxy := nil; + indmatrix := nil; + rmatrix := nil; + end; // next i block selected for elimination + + // Show summary table of Type I and Type II tests + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('Summary Table for GLM Effects'); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Incremental Effects.'); + OutPutFrm.RichEdit.Lines.Add('SOURCE DF1 DF2 SS MS F PROB>F'); + for i := 0 to NoBlocks - 1 do + begin + cellstring := IndOrderBox.Items.Strings[i]; + outline := format('%10s %3.0f %3.0f %10.3f %10.3f %10.3f %6.3f', + [cellstring,TypeIDF1[i],TypeIDF2[i],TypeISS[i],TypeIMS[i],TypeIF[i],TypeIProb[i]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Unique Effects.'); + OutPutFrm.RichEdit.Lines.Add('SOURCE DF1 DF2 SS MS F PROB>F'); + for i := 0 to NoBlocks - 1 do + begin + cellstring := IndOrderBox.Items.Strings[i]; + outline := format('%10s %3.0f %3.0f %10.3f %10.3f %10.3f %6.3f', + [cellstring,TypeIIDF1[i],TypeIIDF2[i],TypeIISS[i],TypeIIMS[i],TypeIIF[i],TypeIIProb[i]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.ShowModal; + + // Show Anova Results for fixed and/or covariates + OutPutFrm.RichEdit.Clear; + if (NRndIndep = 0) and (NReptDep = 0) then // must be fixed and/or covariate only design + begin + if (NFixedIndep > 0) or (NCovIndep > 0) then // fixed effects + begin + df1 := novars - 2; // k1 (note: novars contains ID variable, dep, independents) + PredSS := SSt * FullR2; + PredMS := PredSS / df1; + df2 := totalobs - df1 - 1; // residual df + SSres := SSt * (1.0 - FullR2); + VarEst := SSres / df2; // ms residual + F := PredMS / VarEst; + FProbF := probf(F,df1,df2); + OutPutFrm.RichEdit.Lines.Add('SOURCE DF SS MS F PROB>F'); + outline := format('%20s %3.0f %10.3f %10.3f %10.3f %6.3f', + ['Full Model',df1,PredSS,PredMS,F,FProbF]); + OutPutFrm.RichEdit.Lines.Add(outline); + for i := 0 to NoBlocks - 1 do + begin + F := TypeIMS[i] / VarEst; + FProbF := probf(F,TypeIDF1[i],df2); + cellstring := IndOrderBox.Items.Strings[i]; + outline := format('%20s %3.0f %10.3f %10.3f %10.3f %6.3f', + [cellstring,TypeIDF1[i],TypeISS[i],TypeIMS[i],F,FProbF]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + outline := format('%20s %3.0f %10.3f %10.3f', + ['Residual',df2,SSres,VarEst]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('%20s %3d %10.3f', + ['Total',totalobs-1,SSt]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.ShowModal; + end; + end; + + // Show Anova Results for random effects and/or covariates + OutPutFrm.RichEdit.Clear; + if (NFixedIndep = 0) and (NReptDep = 0) then // must be random only or covariate only design + begin + if (NRndIndep > 0) or (NCovIndep > 0) then // random and/or covariate effects + begin + df1 := novars - 2; // k1 (note: novars contains ID variable, dep, independents) + PredSS := SSt * FullR2; + PredMS := PredSS / df1; + df2 := totalobs - df1 - 1; // residual df + SSres := SSt * (1.0 - FullR2); + VarEst := SSres / df2; // ms residual + F := PredMS / VarEst; + FProbF := probf(F,df1,df2); + OutPutFrm.RichEdit.Lines.Add('SOURCE DF SS MS F PROB>F'); + outline := format('%20s %3.0f %10.3f %10.3f %10.3f %6.3f', + ['Full Model',df1,PredSS,PredMS,F,FProbF]); + OutPutFrm.RichEdit.Lines.Add(outline); + for i := 0 to NoBlocks - 1 do + begin + F := TypeIMS[i] / VarEst; + FProbF := probf(F,TypeIDF1[i],df2); + outline := format('%20s %3.0f %10.3f %10.3f %10.3f %6.3f', + [Labels[i+1],TypeIDF1[i],TypeISS[i],TypeIMS[i],F,FProbF]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + outline := format('%20s %3.0f %10.3f %10.3f', + ['Residual',df2,SSres,VarEst]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('%20s %3d %10.3f', + ['Total',totalobs-1,SSt]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.ShowModal; + end; + end; + + // show effects for repeated measures ANOVA (and covariates) + OutPutFrm.RichEdit.Clear; + if NReptDep > 0 then + begin + df1 := novars - 2; // k1 (note: novars contains ID variable, dep, independents) + PredSS := SSt * FullR2; + PredMS := PredSS / df1; + df2 := totalobs - df1 - 1; // residual df + SSres := SSt * (1.0 - FullR2); + VarEst := SSres / df2; // ms residual + F := PredMS / VarEst; + FProbF := probf(F,df1,df2); + OutPutFrm.RichEdit.Lines.Add('SOURCE DF SS MS F PROB>F'); + outline := format('%20s %3.0f %10.3f %10.3f %10.3f %6.3f', + ['Full Model',df1,PredSS,PredMS,F,FProbF]); + OutPutFrm.RichEdit.Lines.Add(outline); + for i := 0 to NoBlocks - 1 do + begin + F := TypeIMS[i] / VarEst; + FProbF := probf(F,TypeIDF1[i],df2); + outline := format('%20s %3.0f %10.3f %10.3f %10.3f %6.3f', + [Labels[i+1],TypeIDF1[i],TypeISS[i],TypeIMS[i],F,FProbF]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + outline := format('%20s %3.0f %10.3f %10.3f', + ['Residual',df2,SSres,VarEst]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('%20s %3d %10.3f', + ['Total',totalobs-1,SSt]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.ShowModal; + end; + + // clean up the heap + TypeIIProb := nil; + TypeIIF := nil; + TypeIProb := nil; + TypeIF := nil; + TypeIIDF2 := nil; + TypeIIDF1 := nil; + TypeIDF2 := nil; + TypeIDF1 := nil; + TypeIIMS := nil; + TypeIMS := nil; + TypeIISS := nil; + TypeISS := nil; +end; + +procedure TGLMFrm.ModelIIAnalysis; +var + block, i, j, NEntered, index, noblocks : integer; + NLeft, NRight : integer; + cellstring : string; + labelstr : string; + +begin + NEntered := 0; + OldR2 := 0; + // enter the dependent variables first + if NContDep > 0 then + begin + for i := 0 to NContDep - 1 do + begin + ColSelected[i] := ContDepPos[i]; + Labels[i] := GenLabels[i+1]; + NEntered := NEntered + 1; + end; + end; + if NReptDep > 0 then + begin + for i := 0 to NReptDep - 1 do + begin + ColSelected[NEntered+i] := ReptDepPos[i]; + Labels[NEntered+i] := GenLabels[NEntered+i+1]; + NEntered := NEntered + 1; + end; + end; + if NCatDep > 0 then + begin + for i := 0 to NCatDep - 1 do + begin + for j := 0 to NFixVecDep[i]-1 do + begin + ColSelected[NEntered+j] := CatDepPos[j]; + Labels[NEntered+j] := GenLabels[NEntered+j+1]; + NEntered := NEntered + 1; + end; + end; + end; + + // Enter the no. of dependent variables in the left list box of canonical + NLeft := NEntered; + + // Enter independent variables as indicated in indorderbox then interactions + // until the total model is analyzed. Then delete each term to get a + // restricted model and compare to the full model. + noblocks := IndOrderBox.Items.Count; + SetLength(TypeISS,noblocks); + SetLength(TypeIISS,noblocks); + SetLength(TypeIMS,noblocks); + SetLength(TypeIIMS,noblocks); + SetLength(TypeIDF1,noblocks); + SetLength(TypeIDF2,noblocks); + SetLength(TypeIIDF1,noblocks); + SetLength(TypeIIDF2,noblocks); + SetLength(TypeIF,noblocks); + SetLength(TypeIProb,noblocks); + SetLength(TypeIIF,noblocks); + SetLength(TypeIIProb,noblocks); + + for block := 0 to noblocks - 1 do + begin + // get index of the abbreviation of term to enter and find corresponding + // vector(s) to place in the equation + cellstring := IndOrderBox.Items.Strings[block]; + // check for covariates first + if NCovIndep > 0 then + begin + for i := 0 to NCovIndep-1 do + begin + if cellstring = CovariateCode.Items.Strings[i] then // matched! + begin + index := i; // index of covariate code + ColSelected[NEntered] := CovIndepPos[index]; + labelstr := format('%s',[CovariateCode.Items.Strings[index]]); + Labels[NEntered] := labelstr; + NEntered := NEntered + 1; + break; + end; + end; + end; + // check for fixed effect variables next + if NFixedIndep > 0 then + begin + for i := 0 to NFixedIndep-1 do + begin + if cellstring = FixedIndepCode.Items.Strings[i] then + begin + index := i; + for j := 0 to NFixVecIndep[index]-1 do + begin + ColSelected[NEntered] := FixedIndepPos[index] + j; + labelstr := format('%s_%d',[FixedIndepCode.Items.Strings[index],j+1]); + Labels[NEntered] := labelstr; + NEntered := NEntered + 1; + end; + break; + end; + end; + end; + // Check for random effects variables next + if NRndIndep > 0 then + begin + for i := 0 to NRndIndep-1 do + begin + if cellstring = RndIndepCode.Items.Strings[i] then + begin + index := i; + for j := 0 to NRndVecIndep[index]-1 do + begin + ColSelected[NEntered] := RndIndepPos[index] + j; + labelstr := format('%s_%d',[RndIndepCode.Items.Strings[index],j+1]); + Labels[NEntered] := labelstr; + NEntered := NEntered + 1; + end; + end; + break; + end; + end; + // check for interactions next + if NoInterDefs > 0 then + begin + for i := 0 to NoInterDefs-1 do + begin + if cellstring = InteractList.Items.Strings[i] then + begin + for j := 0 to NInteractVecs[i]-1 do + begin + ColSelected[NEntered] := InteractPos[i] + j; + labelstr := format('%s%d_%d',['IA',i+1,j+1]); + Labels[NEntered] := labelstr; + NEntered := NEntered + 1; + end; + end; + break; + end; + end; // check for interaction variables + + // check for repeated measures variables (person codes) + if NReptDep > 0 then + begin // look for 'IP' in cellstring + labelstr := copy(cellstring,0,2); + if labelstr = 'IP' then // person vectors were generated + begin + for i := 0 to NoCases - 2 do + begin + ColSelected[NEntered] := ReptIndepPos[i]; + Labels[NEntered] := GenLabels[ReptIndepPos[i]]; + NEntered := NEntered + 1; + end; + end; + end; + + // Enter the independent variables in the right list of canonical. + NRight := NEntered - NLeft; + + // call cancor routine for this block + cancor(NLeft,NRight,ColSelected); + end; // next block + + TypeIIProb := nil; + TypeIIF := nil; + TypeIProb := nil; + TypeIIDF2 := nil; + TypeIIDF1 := nil; + TypeIDF2 := nil; + TypeIDF1 := nil; + TypeIIMS := nil; + TYPEIMS := nil; + TypeIISS := nil; + TypeISS := nil; +end; + +procedure TGLMFrm.ModelIIIAnalysis; +var + block, i, j, k, NEntered, index, noblocks, priorentered : integer; + cellstring : string; + labelstr : string; + outline, effstr : string; + R, R2Increment, SSx, sum, constant, FullR2 : double; + df1, df2, F, FProbF, StdErrB,OldDF1, PredSS, PredMS : double; + SSt, VarEst, SSres, StdErrEst, AdjR2 : double; + dfbetween, dferrbetween, dfwithin, dferrwithin : double; + ssbetween, sserrbetween, mserrbetween, sswithin, sserrwithin, mserrwithin : double; + betweenblock : integer; + totalss, totaldf : double; + +begin + OldDF1 := 0.0; + priorentered := 0; + OldR2 := 0; + ColSelected[0] := ReptDepPos[0]; + Labels[0] := GenLabels[1]; + // Complete an individual regression analysis for each between subjects var. + // Enter each block containing between subjects variance including: + // (1) covariates + // (2) person vectors + // (3) fixed or random factors + // (4) the interactions among only fixed or random effects + noblocks := IndOrderBox.Items.Count; + SetLength(TypeISS,noblocks); // use for between subject effects + SetLength(TypeIISS,noblocks);// use for within subject effects + SetLength(TypeIMS,noblocks); + SetLength(TypeIIMS,noblocks); + SetLength(TypeIDF1,noblocks); + SetLength(TypeIDF2,noblocks); + SetLength(TypeIIDF1,noblocks); + SetLength(TypeIIDF2,noblocks); + SetLength(TypeIF,noblocks); + SetLength(TypeIProb,noblocks); + SetLength(TypeIIF,noblocks); + SetLength(TypeIIProb,noblocks); + + for i := 0 to noblocks - 1 do + begin + TypeISS[i] := -1.0; // store indicator for block (-1 indicates no use) + TypeIISS[i] := -1.0; + end; + + for block := 0 to noblocks - 1 do + begin + ColSelected[0] := ReptDepPos[0]; + Labels[0] := GenLabels[1]; + NEntered := 1; + cellstring := IndOrderBox.Items.Strings[block]; + effstr := cellstring; + j := Pos('IR',cellstring); + if j <> 0 then continue; + // check for repeated measures variables (person codes) + if NReptDep > 0 then + begin // look for 'IP' in cellstring + labelstr := copy(cellstring,0,2); + if labelstr = 'IP' then // person vectors were generated + begin + betweenblock := block; // save block no. of between subject vectors + for i := 0 to NoCases - 2 do + begin + ColSelected[NEntered] := ReptIndepPos[i]; + Labels[NEntered] := GenLabels[ReptIndepPos[i]]; + NEntered := NEntered + 1; + end; + end; + end; + // check for fixed effect variables next + if NFixedIndep > 0 then + begin + for i := 0 to NFixedIndep-1 do + begin + if cellstring = FixedIndepCode.Items.Strings[i] then + begin + index := i; + for j := 0 to NFixVecIndep[index]-1 do + begin + ColSelected[NEntered] := FixedIndepPos[index] + j; + labelstr := format('%s_%d',[FixedIndepCode.Items.Strings[index],j+1]); + Labels[NEntered] := labelstr; + NEntered := NEntered + 1; + end; + break; + end; + end; + end; + // Check for random effects variables next + if NRndIndep > 0 then + begin + for i := 0 to NRndIndep-1 do + begin + if cellstring = RndIndepCode.Items.Strings[i] then + begin + index := i; + for j := 0 to NRndVecIndep[index]-1 do + begin + ColSelected[NEntered] := RndIndepPos[index] + j; + labelstr := format('%s_%d',[RndIndepCode.Items.Strings[index],j+1]); + Labels[NEntered] := labelstr; + NEntered := NEntered + 1; + end; + break; + end; + end; + end; + // check for interactions next + if NoInterDefs > 0 then + begin + for i := 0 to NoInterDefs-1 do + begin + if cellstring = InteractList.Items.Strings[i] then + begin + // eliminate any interactions containing 'IR' + j := Pos('IR',cellstring); + if j <> 0 then continue; + for j := 0 to NInteractVecs[i]-1 do + begin + ColSelected[NEntered] := InteractPos[i] + j; + labelstr := format('%s%d_%d',['IA',i+1,j+1]); + Labels[NEntered] := labelstr; + NEntered := NEntered + 1; + end; + break; + end; + end; + end; // check for interaction variables + // check for covariates + if NCovIndep > 0 then + begin + for i := 0 to NCovIndep-1 do + begin + if cellstring = CovariateCode.Items.Strings[i] then // matched! + begin + index := i; // index of covariate code + ColSelected[NEntered] := CovIndepPos[index]; + labelstr := format('%s',[CovariateCode.Items.Strings[index]]); + Labels[NEntered] := labelstr; + NEntered := NEntered + 1; + break; + end; + end; + end; + + // do reg analysis and save sum of squares + RegAnal(NEntered); + R := sqrt(R2); + df1 := Nentered - 1; // no. of independent variables + TypeIDF1[block] := df1; + df2 := totalobs - df1 - 1; // N - no. independent - 1 + SSt := (totalobs-1) * Vars[0]; + SSres := SSt * (1.0 - R2); + VarEst := SSres / df2; + if (VarEst > 0.0) then StdErrEst := sqrt(VarEst) + else + begin + ShowMessage('ERROR! Error in computing variance estimate.'); + StdErrEst := 0.0; + end; + if (R2 < 1.0) and (df2 > 0.0) then F := (R2 / df1) / ((1.0-R2)/ df2) + else F := 0.0; + FProbF := probf(F,df1,df2); + AdjR2 := 1.0 - (1.0 - R2) * (totalobs - 1) / df2; +// OutPutFrm.RichEdit.ParaGraph.Alignment := taLeftJustify; + outline := format('%8s%10s%10s%12s%5s%5s',['R','R2','F','Prob.>F','DF1','DF2']); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('%8.3f%10.3f%10.3f%10.3f%5.0f%5.0f', + [R,R2,F,FProbF,df1,df2]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Adjusted R Squared = %5.3f',[AdjR2]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Std. Error of Estimate = %10.3f',[StdErrEst]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Variable Beta B Std.Error t Prob.>t'); + df1 := 1.0; + sum := 0.0; + for i := 0 to Nentered - 2 do + begin + SSx := (totalobs-1) * Vars[i+1]; + sum := sum + B[i] * means[i+1]; + if invmatrix[i,i] > 1.0e-15 then + begin + StdErrB := VarEst / (SSx * (1.0 / invmatrix[i,i])); + StdErrB := sqrt(StdErrB); + if StdErrB > 0.0 then F := B[i] / StdErrB else F := 0.0; + FProbF := probf(F*F,df1,df2); + end + else begin + StdErrB := 0.0; + F := 0.0; + FProbF := 0.0; + end; + cellstring := format('%10s',[Labels[i+1]]); + outline := format('%10s%10.3f%10.3f%10.3f%10.3f%10.3f', + [cellstring, Beta[i] ,B[i], StdErrB, F, FProbF]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + constant := means[0] - sum; + outline := format('Constant = %10.3f',[constant]); + OutPutFrm.RichEdit.Lines.Add(outline); + TypeISS[block] := R2 * SST; + OutPutFrm.RichEdit.Lines.Add('BETWEEN SUBJECT EFFECT:'); + outline := format('SS for %-10s = %10.3f',[effstr,TypeISS[block]]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('SS TOTAL = %10.3f',[SST]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.ShowModal; + end; + + // Summarize between subject effects + totalss := 0.0; + totaldf := 0.0; + for i := 0 to noblocks - 1 do + begin + if TypeISS[i] < 0.0 then continue; + if betweenblock = i then + begin + ssbetween := TypeISS[i]; + dfbetween := TypeIDF1[i]; + end + else + begin + totalss := totalss + TypeISS[i]; + totaldf := totaldf + TypeIDF1[i]; + end; + end; + sserrbetween := ssbetween - totalss; + dferrbetween := dfbetween - totaldf; + mserrbetween := sserrbetween / dferrbetween; + + OutPutFrm.RichEdit.Lines.Clear; + OutPutFrm.RichEdit.Lines.Add(' SUMMARY OF BETWEEN SUBJECT EFFECTS'); + outline := 'SOURCE DF SS MS F PROB.>F'; + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('%-19s %3.0f %9.3f',['Between Subjects',dfbetween, ssbetween]); + OutPutFrm.RichEdit.Lines.Add(outline); + for i := 0 to noblocks - 1 do + begin + if TypeISS[i] < 0.0 then continue; + if betweenblock = i then continue; // already done above + TypeIMS[i] := TypeISS[i] / TypeIDF1[i]; + TypeIF[i] := TypeIMS[i] / mserrbetween; + TypeIDF2[i] := dferrbetween; + TypeIProb[i] := probf(TypeIF[i],TypeIDF1[i],TypeIDF2[i]); + outline := format('%19s %3.0f %9.3f %9.3f %9.3f %9.3f', + [IndOrderBox.Items.Strings[i],TypeIDF1[i],TypeISS[i],TypeIMS[i], + TypeIF[i],TypeIProb[i]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + outline := format('%19s %3.0f %9.3f %9.3f',['Error Between', dferrbetween, + sserrbetween, mserrbetween]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.ShowModal; + + // Now, get within subject effects + sswithin := SST - SSbetween; + dfwithin := totalobs - dfbetween - 1; + for block := 0 to noblocks - 1 do + begin + ColSelected[0] := ReptDepPos[0]; + Labels[0] := GenLabels[1]; + NEntered := 1; + cellstring := IndOrderBox.Items.Strings[block]; + effstr := cellstring; + j := Pos('IR',cellstring); + if j = 0 then continue; // only select those for rep. treatments or interactions + + // check for treatments + if NReptDep > 0 then + begin // look for 'IR' in cellstring + labelstr := copy(cellstring,0,2); + if labelstr = 'IR' then // repeated treatment vectors were generated + begin + for i := 0 to NReptDep - 2 do + begin + ColSelected[NEntered] := ReptTrtPos[i]; + Labels[NEntered] := GenLabels[ReptTrtPos[i]]; + NEntered := NEntered + 1; + end; + end; + end; + // check for interactions next + if NoInterDefs > 0 then + begin + for i := 0 to NoInterDefs-1 do + begin + if cellstring = InteractList.Items.Strings[i] then + begin + for j := 0 to NInteractVecs[i]-1 do + begin + ColSelected[NEntered] := InteractPos[i] + j; + labelstr := format('%s%d_%d',['IA',i+1,j+1]); + Labels[NEntered] := labelstr; + NEntered := NEntered + 1; + end; + break; + end; + end; + end; // check for interaction variables + // do reg analysis and save sum of squares + if NEntered < 2 then continue; + RegAnal(NEntered); + R := sqrt(R2); + df1 := Nentered - 1; // no. of independent variables + TypeIIDF1[block] := df1; + df2 := totalobs - df1 - 1; // N - no. independent - 1 + SSt := (totalobs-1) * Vars[0]; + SSres := SSt * (1.0 - R2); + VarEst := SSres / df2; + if (VarEst > 0.0) then StdErrEst := sqrt(VarEst) + else + begin + ShowMessage('ERROR! Error in computing variance estimate.'); + StdErrEst := 0.0; + end; + if (R2 < 1.0) and (df2 > 0.0) then F := (R2 / df1) / ((1.0-R2)/ df2) + else F := 0.0; + FProbF := probf(F,df1,df2); + AdjR2 := 1.0 - (1.0 - R2) * (totalobs - 1) / df2; +// OutPutFrm.RichEdit.ParaGraph.Alignment := taLeftJustify; + outline := format('%8s%10s%10s%12s%5s%5s',['R','R2','F','Prob.>F','DF1','DF2']); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('%8.3f%10.3f%10.3f%10.3f%5.0f%5.0f', + [R,R2,F,FProbF,df1,df2]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Adjusted R Squared = %5.3f',[AdjR2]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('Std. Error of Estimate = %10.3f',[StdErrEst]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Variable Beta B Std.Error t Prob.>t'); + df1 := 1.0; + sum := 0.0; + for i := 0 to Nentered - 2 do + begin + SSx := (totalobs-1) * Vars[i+1]; + sum := sum + B[i] * means[i+1]; + if invmatrix[i,i] > 1.0e-15 then + begin + StdErrB := VarEst / (SSx * (1.0 / invmatrix[i,i])); + StdErrB := sqrt(StdErrB); + if StdErrB > 0.0 then F := B[i] / StdErrB else F := 0.0; + FProbF := probf(F*F,df1,df2); + end + else begin + StdErrB := 0.0; + F := 0.0; + FProbF := 0.0; + end; + cellstring := format('%10s',[Labels[i+1]]); + outline := format('%10s%10.3f%10.3f%10.3f%10.3f%10.3f', + [cellstring, Beta[i] ,B[i], StdErrB, F, FProbF]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + constant := means[0] - sum; + outline := format('Constant = %10.3f',[constant]); + OutPutFrm.RichEdit.Lines.Add(outline); + TypeIISS[block] := R2 * SST; + OutPutFrm.RichEdit.Lines.Add('WITHIN SUBJECT EFFECT:'); + outline := format('SS for %-10s = %10.3f',[effstr,TypeIISS[block]]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('SS TOTAL = %10.3f',[SST]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.ShowModal; + end; + totalss := 0.0; + totaldf := 0.0; + for i := 0 to noblocks - 1 do // add sums of squares for within effects + begin + if TypeIISS[i] < 0.0 then continue; + totalss := totalss + TypeIISS[i]; + totaldf := totaldf + TypeIIDF1[i]; + end; + sserrwithin := sswithin - totalss; + dferrwithin := dfwithin - totaldf; + mserrwithin := sserrwithin / dferrwithin; + + OutPutFrm.RichEdit.Lines.Clear; + OutPutFrm.RichEdit.Lines.Add(' SUMMARY OF WITHIN SUBJECT EFFECTS'); + outline := 'SOURCE DF SS MS F PROB.>F'; + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + outline := format('%-19s %3.0f %9.3f',['Within Subjects',dfwithin, sswithin]); + OutPutFrm.RichEdit.Lines.Add(outline); + for i := 0 to noblocks - 1 do + begin + if TypeIISS[i] < 0.0 then continue; + TypeIIMS[i] := TypeIISS[i] / TypeIIDF1[i]; + TypeIIF[i] := TypeIIMS[i] / mserrwithin; + TypeIIDF2[i] := dferrwithin; + TypeIIProb[i] := probf(TypeIIF[i],TypeIIDF1[i],TypeIIDF2[i]); + outline := format('%19s %3.0f %9.3f %9.3f %9.3f %9.3f', + [IndOrderBox.Items.Strings[i],TypeIIDF1[i],TypeIISS[i],TypeIIMS[i], + TypeIIF[i],TypeIIProb[i]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + outline := format('%19s %3.0f %9.3f %9.3f',['Error Within', dferrwithin, + sserrwithin, mserrwithin]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('%19s %3d %9.3f',['TOTAL',totalobs-1,SST]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.ShowModal; + + // clean up the heap + TypeIIProb := nil; + TypeIIF := nil; + TypeIProb := nil; + TypeIF := nil; + TypeIIDF2 := nil; + TypeIIDF1 := nil; + TypeIDF2 := nil; + TypeIDF1 := nil; + TypeIIMS := nil; + TypeIMS := nil; + TypeIISS := nil; + TypeISS := nil; +end; + +function TGLMFrm.CntIntActVecs(linestr: string): integer; +var + i, j, listcnt, varcount : integer; + cellstring : string; + asterisk : string; + blank : string; + abbrevList : array[1..5] of string; + vectcnt : array[1..5] of integer; + newline : string; + +begin + asterisk := '*'; + blank := ' '; + listcnt := 0; + cellstring := ''; + newline := ''; + for i := 1 to 5 do vectcnt[i] := 0; + // first, delete imbedded blanks that were there for readability + for i := 1 to length(linestr) do + begin + if linestr[i] <> blank then newline := newline + linestr[i]; + end; + // Now, strip out substrings to each asterisk or end of string + while length(newline) > 0 do + begin + i := pos(asterisk,newline); + if i > 0 then // an asterisk found + begin + cellstring := copy(newline,0,i-1); // get abbreviation + delete(newline,1,i); // delete abbreviation and asterisk + listcnt := listcnt + 1; + AbbrevList[listcnt] := cellstring; + end + else begin // must be last abbreviation + cellstring := newline; + listcnt := listcnt + 1; + AbbrevList[listcnt] := cellstring; + newline := ''; + end; + end; + // now get the associated number of columns for each abbreviation in the list + for i := 1 to listcnt do + begin + cellstring := AbbrevList[i]; + // check for covariates + if NCovIndep > 0 then + begin + for j := 0 to NCovIndep - 1 do + begin + if cellstring = CovariateCode.Items.Strings[j] then + vectcnt[i] := 1; + end; + end; + // check for fixed effect vectors + if NFixedIndep > 0 then + begin + for j := 0 to NFixedIndep - 1 do + begin + if cellstring = FixedIndepCode.Items.Strings[j] then + vectcnt[i] := NFixVecIndep[j]; + end; + end; + // check for random effect vectors + if NRndIndep > 0 then + begin + for j := 0 to NRndIndep - 1 do + begin + if cellstring = RndIndepCode.Items.Strings[j] then + vectcnt[i] := NRndVecIndep[j]; + end; + end; + // check for repeated measures effect vectors + if NReptDep > 0 then + begin + if cellstring = RepTrtCode.Items.Strings[0] then + vectcnt[i] := NReptDep - 1; + end; + end; // next i in listcnt + // get total interaction vector count + varcount := 1; + for i := 1 to listcnt do varcount := varcount * vectcnt[i]; + Result := varcount; +end; + +procedure TGLMFrm.GenInterVecs(linestr: string); +var + i, j, k, l, m, n, col, listcnt, pos1, pos2, pos3, pos4, pos5, novectors : integer; + cellstring : string; + asterisk : string; + blank : string; + abbrevList : array[1..5] of string; + vectcnt : array[1..5] of integer; + fromcol : array[1..5] of integer; + newline : string; + product : double; + +begin + asterisk := '*'; + blank := ' '; + listcnt := 0; + cellstring := ''; + newline := ''; + // first, delete imbedded blanks that were there for readability + for i := 1 to length(linestr) do + begin + if linestr[i] <> blank then newline := newline + linestr[i]; + end; + // Now, strip out substrings to each asterisk or end of string + while length(newline) > 0 do + begin + i := pos(asterisk,newline); + if i > 0 then // an asterisk found + begin + cellstring := copy(newline,0,i-1); // get abbreviation + delete(newline,1,i); // delete abbreviation and asterisk + listcnt := listcnt + 1; + AbbrevList[listcnt] := cellstring; + end + else begin // must be last abbreviation + cellstring := newline; + listcnt := listcnt + 1; + AbbrevList[listcnt] := cellstring; + newline := ''; + end; + end; + // now generate the associated number of columns for each abbreviation in the list + for i := 1 to listcnt do + begin + cellstring := AbbrevList[i]; + // check for covariates + if NCovIndep > 0 then + begin + for j := 0 to NCovIndep - 1 do + begin + if cellstring = CovariateCode.Items.Strings[j] then + begin + vectcnt[i] := 1; + fromcol[i] := CovIndepPos[j]; + break; + end; + end; + end; + // check for fixed effect vectors + if NFixedIndep > 0 then + begin + for j := 0 to NFixedIndep - 1 do + begin + if cellstring = FixedIndepCode.Items.Strings[j] then + begin + vectcnt[i] := NFixVecIndep[j]; + fromcol[i] := FixedIndepPos[j]; + break; + end; + end; + end; + // check for random effect vectors + if NRndIndep > 0 then + begin + for j := 0 to NRndIndep - 1 do + begin + if cellstring = RndIndepCode.Items.Strings[j] then + begin + vectcnt[i] := NRndVecIndep[j]; + fromcol[i] := RndIndepPos[j]; + break; + end; + end; + end; + // check for repeated measures + if NReptDep > 0 then + begin + if cellstring = RepTrtCode.Items.Strings[0] then + begin + vectcnt[i] := NReptDep - 1; + fromcol[i] := ReptTrtPos[0]; + end; + end; + end; // next i in listcnt + + // now generate the product vectors for 2-way interactions + col := gencount; + for i := 1 to vectcnt[1] do + begin + pos1 := fromcol[1] + i - 1; + for j := 1 to vectcnt[2] do + begin + pos2 := fromcol[2] + j - 1; + for m := 0 to totalobs - 1 do + datagrid[m,col] := datagrid[m,pos1] * datagrid[m,pos2]; + cellstring := format('%s_%d*%s_%d',[AbbrevList[1],i,AbbrevList[2],j]); + GenLabels[col] := cellstring; + col := col + 1; + end; + end; + + if listcnt = 3 then // Do 3-way interactions + begin + col := gencount; + for i := 1 to vectcnt[1] do + begin + pos1 := fromcol[1] + i - 1; + for j := 1 to vectcnt[2] do + begin + pos2 := fromcol[2] + j - 1; + for k := 1 to vectcnt[3] do + begin + pos3 := fromcol[3] + k - 1; + for m := 0 to totalobs - 1 do + datagrid[m,col] := datagrid[m,pos1] * datagrid[m,pos2] * datagrid[m,pos3]; + cellstring := format('%s*%s*%s',[GenLabels[pos1],GenLabels[pos2],GenLabels[pos3]]); + GenLabels[col] := cellstring; + col := col + 1; + end; // next k + end; // next j + end; // next i + end; // if listcnt = 3 + + if listcnt = 4 then // Do 4-way interactions + begin + col := gencount; + for i := 1 to vectcnt[1] do + begin + pos1 := fromcol[1] + i - 1; + for j := 1 to vectcnt[2] do + begin + pos2 := fromcol[2] + j - 1; + for k := 1 to vectcnt[3] do + begin + pos3 := fromcol[3] + k - 1; + for l := 1 to vectcnt[4] do + begin + pos4 := fromcol[4] + l - 1; + for m := 0 to totalobs - 1 do + datagrid[m,col] := datagrid[m,pos1] * + datagrid[m,pos2] * datagrid[m,pos3] * datagrid[m,pos4]; + cellstring := format('%s*%s*%s*%s',[GenLabels[pos1], + GenLabels[pos2],GenLabels[pos3],GenLabels[pos4]]); + GenLabels[col] := cellstring; + col := col + 1; + end; // next l + end; // next k + end; // next j + end; // next i + end; // if listcnt = 3 + + if listcnt = 5 then // Do 5-way interactions + begin + col := gencount; + for i := 1 to vectcnt[1] do + begin + pos1 := fromcol[1] + i - 1; + for j := 1 to vectcnt[2] do + begin + pos2 := fromcol[2] + j - 1; + for k := 1 to vectcnt[3] do + begin + pos3 := fromcol[3] + k - 1; + for l := 1 to vectcnt[4] do + begin + pos4 := fromcol[4] + l - 1; + for n := 1 to vectcnt[5] do + begin + pos5 := fromcol[5] + n - 1; + for m := 0 to totalobs - 1 do + datagrid[m,col] := datagrid[m,pos1] * + datagrid[m,pos2] * datagrid[m,pos3] * + datagrid[m,pos4] * datagrid[m,pos5]; + cellstring := format('%s*%s*%s*%s*%s',[GenLabels[pos1], + GenLabels[pos2],GenLabels[pos3],GenLabels[pos4], + GenLabels[pos5]]); + GenLabels[col] := cellstring; + col := col + 1; + end; // next n + end; // next l + end; // next k + end; // next j + end; // next i + end; // if listcnt = 3 +end; + +procedure TGLMFrm.CanCor(NLeft: integer; NRight: integer; GridPlace: IntDyneVec); +label cleanup; +var + i, j, k, count, a_size, b_size, no_factors, prtopts, IER: integer; + outline, cellstring, gridstring, SNo : string; + s, m, n, df1, df2, q, w, pcnt_extracted, trace : double; + minroot, critical_prob, Lambda, Pillia : double; + chisqr, HLTrace, chiprob, ftestprob, Roys, f, Hroot : double; + raa, rbb, rab, rba, bigmat, prod, first_prod, second_prod : DblDyneMat; + char_equation, raainv, rbbinv, eigenvectors, norm_a, norm_b : DblDyneMat; + raw_a, raw_b, a_cors, b_cors, eigentrans, theta, tempmat : DblDyneMat; + mean, variance, stddev, roots, root_chi, chi_prob, pv_a, pv_b : DblDyneVec; + rd_a, rd_b, pcnt_trace : DblDyneVec; + root_df : IntDyneVec; + a_vars, b_vars : StrDyneVec; + selected : IntDyneVec; + RowLabels, ColLabels : StrDyneVec; + CanLabels : StrDyneVec; + NCases : integer; + title : string; + errorcode : boolean; + +begin + count := 0; + k := 0; + no_factors := 0; + pcnt_extracted := 0.0; + trace := 0.0; + minroot := 0.0; + critical_prob := 0.0; + Pillia := 0.0; + chisqr := 0.0; + HLTrace := 0.0; + chiprob := 0.0; + + // Get size of the Left and Right matrices (predictors and dependents) + a_size := NLeft; + b_size:= NRight; + novars:= a_size + b_size; + + // allocate memory for matrices and vectors + SetLength(raa,NLeft+1,NLeft+1); + SetLength(rbb,NRight+1,NRight+1); + SetLength(rab,NLeft+1,NRight+1); + SetLength(rba,NRight+1,NLeft+1); + SetLength(bigmat,novars+1,novars+1); + SetLength(prod,novars+1,novars+1); + SetLength(first_prod,novars+1,novars+1); + SetLength(second_prod,novars+1,novars+1); + SetLength(char_equation,novars+1,novars+1); + SetLength(raainv,NLeft,NLeft); + SetLength(rbbinv,NRight,NRight); + SetLength(eigenvectors,novars,novars); + SetLength(norm_a,novars,novars); + SetLength(norm_b,novars,novars); + SetLength(raw_a,novars,novars); + SetLength(raw_b,novars,novars); + SetLength(a_cors,NLeft+1,NLeft+1); + SetLength(b_cors,NRight+1,NRight+1); + SetLength(eigentrans,novars,novars); + SetLength(theta,novars,novars); + SetLength(tempmat,novars,novars); + + SetLength(mean,novars); + SetLength(variance,novars); + SetLength(stddev,novars); + SetLength(roots,novars); + SetLength(root_chi,novars); + SetLength(chi_prob,novars); + SetLength(pv_a,novars); + SetLength(pv_b,novars); + SetLength(rd_a,novars); + SetLength(rd_b,novars); + SetLength(pcnt_trace,novars); + + SetLength(root_df,novars); + SetLength(a_vars,NLeft); + SetLength(b_vars,NRight); + SetLength(CanLabels,novars); + SetLength(RowLabels,novars); + SetLength(ColLabels,novars); + SetLength(selected,novars); + + //------------ WORK STARTS HERE! ------------------------------------- + + // Build labels for canonical functions 1 to novars + if b_size < a_size then + for i := 0 to b_size-1 do CanLabels[i] := 'CanVar' + IntToStr(i+1) + else for i := 0 to a_size-1 do CanLabels[i] := 'CanVar' + IntToStr(i+1); + + for i := 0 to a_size - 1 do // identify left variables + begin + a_vars[i] := Labels[i]; + selected[i] := GridPlace[i]; + end; + + for i := 0 to b_size - 1 do // identify right variables + begin + b_vars[i] := Labels[NLeft+i]; + selected[NLeft+i] := GridPlace[NLeft+i]; + end; + + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('CANONICAL CORRELATION ANALYSIS'); + OutPutFrm.RichEdit.Lines.Add(''); + count := NoCases; + // Get means, standard deviations, etc. for total matrix + IER := Dyncorrelations(novars,selected,datagrid,bigmat,mean,variance,stddev,totalobs,3); + if (IER = 1)then + begin + ShowMessage('ERROR! Zero variance found for a variable-terminating'); + goto cleanup; + end; + + //partition matrix into quadrants + for i := 0 to a_size - 1 do + for j := 0 to a_size - 1 do raa[i,j]:= bigmat[i,j]; + + for i := a_size to novars - 1 do + for j := a_size to novars - 1 do + rbb[i-a_size,j-a_size] := bigmat[i,j]; + + for i := 0 to a_size - 1 do + for j := a_size to novars - 1 do + rab[i,j-a_size] := bigmat[i,j]; + + for i := a_size to novars - 1 do + for j := 0 to a_size - 1 do + rba[i-a_size,j] := bigmat[i,j]; + + if CorsChk.Checked then + begin + title := 'Left Correlation Matrix'; + MAT_PRINT(raa,NLeft,NLeft,title,a_vars,a_vars,totalobs); + title := 'Right Correlation Matrix'; + MAT_PRINT(rbb,NRight,NRight,title,b_vars,b_vars,totalobs); + title := 'Left-Right Correlation Matrix'; + MAT_PRINT(rab,NLeft,NRight,title,a_vars,b_vars,totalobs); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + + // get inverses of left and right hand matrices raa and rbb + for i := 0 to a_size-1 do + for j := 0 to a_size-1 do + tempmat[i,j] := raa[i,j]; + SVDInverse(tempmat,a_size); + for i := 0 to a_size-1 do + for j := 0 to a_size-1 do raainv[i,j] := tempmat[i,j]; + if CorsChk.Checked then + begin + title := 'Inverse of Left Matrix'; + MAT_PRINT(raainv,a_size,a_size,title,a_vars,a_vars,totalobs); + end; + + for i := 0 to b_size-1 do + for j := 0 to b_size-1 do + tempmat[i,j] := rbb[i,j]; // inverse uses 1 offset + SVDInverse(tempmat,b_size); + for i := 0 to b_size-1 do // reset to 0 offset + for j := 0 to b_size - 1 do rbbinv[i,j] := tempmat[i,j]; + if CorsChk.Checked then + begin + title := 'Inverse of Right Matrix'; + MAT_PRINT(rbbinv,b_size,b_size,title,b_vars,b_vars,totalobs); + end; + + // get products of raainv x rab and the rbbinv x rba matrix + for i := 0 to b_size-1 do + for j := 0 to a_size-1 do first_prod[i,j] := 0.0; + MatAxB(first_prod,rbbinv,rba,b_size,b_size,b_size,a_size,errorcode); + for i := 0 to a_size-1 do + for j := 0 to b_size-1 do second_prod[i,j] := 0.0; + MatAxB(second_prod,raainv,rab,a_size,a_size,a_size,b_size,errorcode); + title := 'Right Inverse x Right-Left Matrix'; + MAT_PRINT(first_prod,b_size,a_size,title,b_vars,a_vars,totalobs); + title := 'Left Inverse x Left-Right Matrix'; + MAT_PRINT(second_prod,a_size,b_size,title,a_vars,b_vars,totalobs); + + //get characteristic equations matrix (product of last two product matrices + //The product should yeild rows and cols representing the smaller of the two sets + for i := 0 to b_size-1 do + for j := 0 to b_size - 1 do char_equation[i,j] := 0.0; + MatAxB(char_equation,first_prod,second_prod,b_size,a_size,a_size,b_size,errorcode); + title := 'Canonical Function'; + MAT_PRINT(char_equation,b_size,b_size,title,CanLabels,CanLabels,totalobs); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + + // now get roots and vectors of the characteristic equation using + // NonSymRoots routine + minroot := 0.0; + for i := 0 to b_size - 1 do + begin + roots[i] := 0.0; + pcnt_trace[i] := 0.0; + for j := 0 to b_size - 1 do eigenvectors[i,j] := 0.0; + end; + trace := 0.0; + no_factors := b_size; + Dynnonsymroots(char_equation, b_size, no_factors, minroot, eigenvectors, roots, + pcnt_trace, trace, pcnt_extracted); + + + outline := format('Trace of the matrix:=%10.4f',[trace]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := format('Percent of trace extracted: %10.4f',[pcnt_extracted]); + OutPutFrm.RichEdit.Lines.Add(outline); + + // Normalize smaller set weights and coumpute larger set weights + for i := 0 to b_size - 1 do // transpose eigenvectors + for j := 0 to b_size - 1 do eigentrans[j,i] := eigenvectors[i,j]; + for i := 0 to b_size - 1 do + for j := 0 to b_size-1 do tempmat[i,j] := 0.0; + MatAxB(tempmat,eigentrans,rbb,b_size,b_size,b_size,b_size,errorcode); + for i := 0 to b_size-1 do + for j := 0 to b_size-1 do theta[i,j] := 0.0; + MatAxB(theta,tempmat,eigenvectors,b_size,b_size,b_size,b_size,errorcode); + for j := 0 to b_size - 1 do + begin + q := 1.0 / sqrt(theta[j,j]); + for i := 0 to b_size - 1 do + begin + norm_b[i,j] := eigenvectors[i,j] * q; + raw_b[i,j] := norm_b[i,j] / stddev[a_size+i]; + end; + end; + for i := 0 to a_size - 1 do + for j := 0 to b_size - 1 do norm_a[i,j] := 0.0; + MatAxB(norm_a,second_prod,norm_b,a_size,b_size,b_size,b_size,errorcode); + for j := 0 to b_size-1 do + begin + for i := 0 to a_size-1 do + begin + norm_a[i,j] := norm_a[i,j] * (1.0 / sqrt(roots[j])); + raw_a[i,j] := norm_a[i,j] / stddev[i]; + end; + end; + + // Compute the correlations between variables and canonical variables + for i := 0 to a_size-1 do + for j := 0 to b_size-1 do a_cors[i,j] := 0.0; + MatAxB(a_cors,raa,norm_a,a_size,a_size,a_size,b_size,errorcode); + for j := 0 to b_size-1 do + begin + q := 0.0; + for i := 0 to a_size-1 do q := q + norm_a[i,j] * a_cors[i,j]; + q := 1.0 / sqrt(q); + for i := 0 to a_size-1 do a_cors[i,j] := a_cors[i,j] * q; + end; + for i := 0 to b_size-1 do + for j := 0 to b_size-1 do b_cors[i,j] := 0.0; + MatAxB(b_cors,rbb,norm_b,b_size,b_size,b_size,b_size,errorcode); + for j := 0 to b_size-1 do + begin + q := 0.0; + for i := 0 to b_size-1 do q := q + norm_b[i,j] * b_cors[i,j]; + q := 1.0 / sqrt(q); + for i := 0 to b_size-1 do b_cors[i,j] := b_cors[i,j] * q; + end; + + // Compute the Proportions of Variance (PVs) and Redundancy Coefficients + for j := 0 to b_size-1 do + begin + pv_a[j] := 0.0; + for i := 0 to a_size-1 do pv_a[j] := pv_a[j] + (a_cors[i,j] * a_cors[i,j]); + pv_a[j] := pv_a[j] / a_size; + rd_a[j] := pv_a[j] * roots[j]; + end; + for j := 0 to b_size-1 do + begin + pv_b[j] := 0.0; + for i := 0 to b_size-1 do pv_b[j] := pv_b[j] + (b_cors[i,j] * b_cors[i,j]); + pv_b[j] := pv_b[j] / b_size; + rd_b[j] := pv_b[j] * roots[j]; + end; + + // Compute tests of the roots + q := a_size + b_size + 1; + q := -(count - 1.0 - (q / 2.0)); + k := 0; + for i := 0 to b_size-1 do + begin + w := 1.0; + for j := i to b_size-1 do w := w * (1.0 - roots[j]); + root_chi[i] := q * ln(w); + root_df[i] := (a_size - i) * (b_size - i); + chi_prob[i] := 1.0 - chisquaredprob(root_chi[i],root_df[i]); + if (chi_prob[i] < critical_prob) then k := k + 1; + end; + Roys := roots[1] / (1.0 - roots[1]); + Lambda := 1.0; + for i := 0 to b_size-1 do + begin + Hroot := roots[i] / (1.0 - roots[i]); + Lambda := Lambda * (1.0 / (1.0 + Hroot)); + Pillia := Pillia + (Hroot / (1.0 + Hroot)); + HLTrace := HLTrace + Hroot; + end; + + // Print remaining results + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add(''); + outline := ' Canonical R Root % Trace Chi-Sqr D.F. Prob.'; + OutPutFrm.RichEdit.Lines.Add(outline); + for i := 0 to b_size-1 do + begin + outline := format('%2d %10.6f %8.3f %7.3f %8.3f %2d %8.3f', + [i+1, sqrt(roots[i]), roots[i], pcnt_trace[i], root_chi[i], root_df[i], chi_prob[i]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + chisqr := -ln(Lambda) * (count - 1.0 - 0.5 * (a_size + b_size - 1.0)); + chiprob := 1.0 - chisquaredprob(chisqr,a_size * b_size); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('Overall Tests of Significance:'); + OutPutFrm.RichEdit.Lines.Add(' Statistic Approx. Stat. Value D.F. Prob.>Value'); + outline := format('Wilk''s Lambda Chi-Squared %10.4f %3d %6.4f', + [chisqr,a_size * b_size,chiprob]); + OutPutFrm.RichEdit.Lines.Add(outline); + s := b_size; + m := 0.5 * (a_size - b_size - 1); + n := 0.5 * (count - b_size - a_size - 2); + f := (HLTrace * 2.0 * (s * n + 1)) / (s * s * (2.0 * m + s + 1.0)); + df1 := s * (2.0 * m + s + 1.0); + df2 := 2.0 * ( s * n + 1.0); + ftestprob := probf(f,df1,df2); + outline := format('Hotelling-Lawley Trace F-Test %10.4f %2.0f %2.0f %6.4f', + [f, df1,df2, ftestprob]); + OutPutFrm.RichEdit.Lines.Add(outline); + df2 := s * (2.0 * n + s + 1.0); + f := (Pillia / (s - Pillia)) * ( (2.0 * n + s +1.0) / (2.0 * m + s + 1.0) ); + ftestprob := probf(f,df1,df2); + outline := format('Pillai Trace F-Test %10.4f %2.0f %2.0f %6.4f', + [f, df1,df2, ftestprob]); + OutPutFrm.RichEdit.Lines.Add(outline); + Roys := Roys * (count - 1 - a_size + b_size)/ a_size ; + df1 := a_size; + df2 := count - 1 - a_size + b_size; + ftestprob := probf(Roys,df1,df2); + outline := format('Roys Largest Root F-Test %10.4f %2.0f %2.0f %6.4f', + [Roys, df1, df2, ftestprob]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + + if CorsChk.Checked then + begin + title := 'Eigenvectors'; + MAT_PRINT(eigenvectors,b_size,b_size,title,CanLabels,CanLabels,totalobs); + OutPutFrm.ShowModal(); + OutPutFrm.RichEdit.Clear; + end; + + title := 'Standardized Right Side Weights'; + MAT_PRINT(norm_a,a_size,b_size,title,RowLabels,CanLabels,totalobs); + title := 'Standardized Left Side Weights'; + MAT_PRINT(norm_b,b_size,b_size,title,ColLabels,CanLabels,totalobs); + OutPutFrm.ShowModal; + title := 'Raw Right Side Weights'; + MAT_PRINT(raw_a,a_size,b_size,title,RowLabels,CanLabels,totalobs); + title := 'Raw Left Side Weights'; + MAT_PRINT(raw_b,b_size,b_size,title,ColLabels,CanLabels,totalobs); + OutPutFrm.ShowModal; + title := 'Right Side Correlations with Function'; + MAT_PRINT(a_cors,a_size,b_size,title,RowLabels,CanLabels,totalobs); + title := 'Left Side Correlations with Function'; + MAT_PRINT(b_cors,b_size,b_size,title,ColLabels,CanLabels,totalobs); + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + + if CorsChk.Checked then + begin + outline := 'Redundancy Analysis for Right Side Variables'; + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + outline := ' Variance Prop. Redundancy'; + OutPutFrm.RichEdit.Lines.Add(outline); + for i := 0 to b_size-1 do + begin + outline := format('%10d %10.5f %10.5f',[i,pv_a[i],rd_a[i]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + outline := 'Redundancy Analysis for Left Side Variables'; + OutPutFrm.RichEdit.Lines.Add(outline); + outline := ' Variance Prop. Redundancy'; + OutPutFrm.RichEdit.Lines.Add(outline); + for i := 0 to b_size-1 do + begin + outline := format('%10d %10.5f %10.5f',[i,pv_b[i],rd_b[i]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; + + //------------- Now, clean up memory mess ---------------------------- +cleanup: + selected := nil; + ColLabels := nil; + RowLabels := nil; + CanLabels := nil; + b_vars := nil; + a_vars := nil; + root_df := nil; + pcnt_trace := nil; + rd_b := nil; + rd_a := nil; + pv_b := nil; + pv_a := nil; + chi_prob := nil; + root_chi := nil; + roots := nil; + stddev := nil; + variance := nil; + mean := nil; + tempmat := nil; + theta := nil; + eigentrans := nil; + b_cors := nil; + a_cors := nil; + raw_b := nil; + raw_a := nil; + norm_b := nil; + norm_a := nil; + eigenvectors := nil; + rbbinv := nil; + raainv := nil; + char_equation := nil; + second_prod := nil; + first_prod := nil; + prod := nil; + bigmat := nil; + rba := nil; + rab := nil; + rbb := nil; + raa := nil; +end; + +initialization + {$I glmunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/globals.pas b/applications/lazstats/source_orig/globals.pas new file mode 100644 index 000000000..0e3388d9d --- /dev/null +++ b/applications/lazstats/source_orig/globals.pas @@ -0,0 +1,60 @@ +unit Globals; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils; +const TOL = 0.0005; + +Type IntDyneVec = array of integer; + +Type DblDyneVec = array of double; + +Type BoolDyneVec = array of boolean; + +Type DblDyneMat = array of array of double; + +Type IntDyneMat = array of array of integer; + +Type DblDyneCube = array of array of array of double; + +Type IntDyneCube = array of array of array of integer; + +Type DblDyneQuad = array of array of array of array of double; + +Type IntDyneQuad = array of array of array of array of integer; + +Type StrDyneVec = array of string; + +Type StrDyneMat = array of array of string; + +Type CharDyneVec = array of char; + + type POINT3D = record + x, y, z : double; + end; + + type POINTint = record + x, y : integer; + end; + +var + NoCases : integer; + NoVariables : integer; + VarDefined : array[0..500] of boolean; + TempStream : TMemoryStream; + TempVarItm : TMemoryStream; + DictLoaded : boolean; + FilterOn : boolean; + FilterCol : integer; + OpenStatPath : string; + AItems : array[0..8] of string; + LoggedOn : boolean = false; + + +implementation + +end. + diff --git a/applications/lazstats/source_orig/gradebookunit.lfm b/applications/lazstats/source_orig/gradebookunit.lfm new file mode 100644 index 000000000..942347054 --- /dev/null +++ b/applications/lazstats/source_orig/gradebookunit.lfm @@ -0,0 +1,192 @@ +object GradebookFrm: TGradebookFrm + Left = 22 + Height = 541 + Top = 86 + Width = 956 + Caption = 'Gradebook' + ClientHeight = 522 + ClientWidth = 956 + Menu = MainMenu1 + OnCreate = FormCreate + OnShow = FormShow + LCLVersion = '0.9.28.2' + object Label1: TLabel + Left = 46 + Height = 25 + Top = 13 + Width = 247 + Caption = 'YOUR GRADEBOOK FOR:' + Font.CharSet = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -21 + Font.Name = 'Times New Roman' + Font.Pitch = fpVariable + Font.Quality = fqDraft + Font.Style = [fsBold, fsItalic] + ParentColor = False + ParentFont = False + end + object Label2: TLabel + Left = 8 + Height = 14 + Top = 48 + Width = 21 + Caption = 'File:' + ParentColor = False + end + object Label3: TLabel + Left = 56 + Height = 14 + Top = 80 + Width = 179 + Caption = 'Directory (click folder icon to change)' + ParentColor = False + end + object FileNameEdit: TEdit + Left = 40 + Height = 21 + Top = 46 + Width = 252 + TabOrder = 0 + Text = 'FileNameEdit' + end + object DirectoryEdit1: TDirectoryEdit + Left = 8 + Height = 21 + Top = 104 + Width = 284 + Directory = 'C:' + ShowHidden = False + ButtonWidth = 23 + NumGlyphs = 0 + TabOrder = 1 + OnChange = DirectoryEdit1Change + end + object FileListBox1: TFileListBox + Left = 7 + Height = 293 + Top = 145 + Width = 287 + Directory = 'C:\Windows\system32' + ItemHeight = 13 + TabOrder = 2 + end + object ResetBtn: TButton + Left = 8 + Height = 29 + Top = 447 + Width = 98 + Caption = 'Start New' + TabOrder = 3 + end + object ExitBtn: TButton + Left = 9 + Height = 29 + Top = 480 + Width = 97 + Caption = 'Exit' + ModalResult = 1 + OnClick = ExitBtnClick + TabOrder = 4 + end + object Grid: TStringGrid + Left = 320 + Height = 504 + Top = 0 + Width = 628 + ColCount = 58 + FixedCols = 0 + Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goEditing, goTabs, goSmoothScroll] + RowCount = 41 + TabOrder = 5 + OnExit = GridExit + end + object RadioGroup1: TRadioGroup + Left = 129 + Height = 61 + Top = 447 + Width = 163 + AutoFill = True + Caption = 'Name Protection:' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 43 + ClientWidth = 159 + ItemIndex = 1 + Items.Strings = ( + 'Turn ON' + 'Turn OFF' + ) + OnClick = RadioGroup1Click + TabOrder = 6 + end + object MainMenu1: TMainMenu + left = 304 + object FilesMenu: TMenuItem + Caption = 'Files' + object NewGBMnu: TMenuItem + Caption = 'New Grade Book' + OnClick = NewGBMnuClick + end + object OpenGBMnu: TMenuItem + Caption = 'Open Existing Grade Book' + OnClick = OpenGBMnuClick + end + object SaveGBMnu: TMenuItem + Caption = 'Save Grade Book' + OnClick = SaveGBMnuClick + end + object ExitMnu: TMenuItem + Caption = 'Exit' + OnClick = ExitMnuClick + end + end + object EditMnu: TMenuItem + Caption = 'Edit' + object DelRowMnu: TMenuItem + Caption = 'Delete Current Row' + OnClick = DelRowMnuClick + end + end + object ComputeMenu: TMenuItem + Caption = 'Compute' + object TestAnalMnu: TMenuItem + Caption = 'Analyze a Test' + OnClick = TestAnalMnuClick + end + object CompScrMnu: TMenuItem + Caption = 'Calc. Composite Score' + OnClick = CompScrMnuClick + end + end + object ReportsMenu: TMenuItem + Caption = 'Reports' + object StudRptsMnu: TMenuItem + Caption = 'Individual Student Reports' + OnClick = StudRptsMnuClick + end + object ClassRptMnu: TMenuItem + Caption = 'Class Report' + OnClick = ClassRptMnuClick + end + end + object HelpMenu: TMenuItem + Caption = 'Help' + Visible = False + end + end + object SaveDialog1: TSaveDialog + left = 189 + top = 1 + end + object OpenDialog1: TOpenDialog + left = 258 + top = 1 + end +end diff --git a/applications/lazstats/source_orig/gradebookunit.lrs b/applications/lazstats/source_orig/gradebookunit.lrs new file mode 100644 index 000000000..04a983210 --- /dev/null +++ b/applications/lazstats/source_orig/gradebookunit.lrs @@ -0,0 +1,59 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TGradebookFrm','FORMDATA',[ + 'TPF0'#13'TGradebookFrm'#12'GradebookFrm'#4'Left'#2#22#6'Height'#3#29#2#3'Top' + +#2'V'#5'Width'#3#188#3#7'Caption'#6#9'Gradebook'#12'ClientHeight'#3#10#2#11 + +'ClientWidth'#3#188#3#4'Menu'#7#9'MainMenu1'#8'OnCreate'#7#10'FormCreate'#6 + +'OnShow'#7#8'FormShow'#10'LCLVersion'#6#8'0.9.28.2'#0#6'TLabel'#6'Label1'#4 + +'Left'#2'.'#6'Height'#2#25#3'Top'#2#13#5'Width'#3#247#0#7'Caption'#6#19'YOUR' + +' GRADEBOOK FOR:'#12'Font.CharSet'#7#12'ANSI_CHARSET'#10'Font.Color'#7#7'clB' + +'lack'#11'Font.Height'#2#235#9'Font.Name'#6#15'Times New Roman'#10'Font.Pitc' + +'h'#7#10'fpVariable'#12'Font.Quality'#7#7'fqDraft'#10'Font.Style'#11#6'fsBol' + +'d'#8'fsItalic'#0#11'ParentColor'#8#10'ParentFont'#8#0#0#6'TLabel'#6'Label2' + +#4'Left'#2#8#6'Height'#2#14#3'Top'#2'0'#5'Width'#2#21#7'Caption'#6#5'File:' + +#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left'#2'8'#6'Height'#2#14#3'Top' + +#2'P'#5'Width'#3#179#0#7'Caption'#6'''Directory (click folder icon to change' + +')'#11'ParentColor'#8#0#0#5'TEdit'#12'FileNameEdit'#4'Left'#2'('#6'Height'#2 + +#21#3'Top'#2'.'#5'Width'#3#252#0#8'TabOrder'#2#0#4'Text'#6#12'FileNameEdit'#0 + +#0#14'TDirectoryEdit'#14'DirectoryEdit1'#4'Left'#2#8#6'Height'#2#21#3'Top'#2 + +'h'#5'Width'#3#28#1#9'Directory'#6#2'C:'#10'ShowHidden'#8#11'ButtonWidth'#2 + +#23#9'NumGlyphs'#2#0#8'TabOrder'#2#1#8'OnChange'#7#20'DirectoryEdit1Change'#0 + +#0#12'TFileListBox'#12'FileListBox1'#4'Left'#2#7#6'Height'#3'%'#1#3'Top'#3 + +#145#0#5'Width'#3#31#1#9'Directory'#6#19'C:\Windows\system32'#10'ItemHeight' + +#2#13#8'TabOrder'#2#2#0#0#7'TButton'#8'ResetBtn'#4'Left'#2#8#6'Height'#2#29#3 + +'Top'#3#191#1#5'Width'#2'b'#7'Caption'#6#9'Start New'#8'TabOrder'#2#3#0#0#7 + +'TButton'#7'ExitBtn'#4'Left'#2#9#6'Height'#2#29#3'Top'#3#224#1#5'Width'#2'a' + +#7'Caption'#6#4'Exit'#11'ModalResult'#2#1#7'OnClick'#7#12'ExitBtnClick'#8'Ta' + +'bOrder'#2#4#0#0#11'TStringGrid'#4'Grid'#4'Left'#3'@'#1#6'Height'#3#248#1#3 + +'Top'#2#0#5'Width'#3't'#2#8'ColCount'#2':'#9'FixedCols'#2#0#7'Options'#11#15 + +'goFixedVertLine'#15'goFixedHorzLine'#10'goVertLine'#10'goHorzLine'#13'goRan' + +'geSelect'#9'goEditing'#6'goTabs'#14'goSmoothScroll'#0#8'RowCount'#2')'#8'Ta' + +'bOrder'#2#5#6'OnExit'#7#8'GridExit'#0#0#11'TRadioGroup'#11'RadioGroup1'#4'L' + +'eft'#3#129#0#6'Height'#2'='#3'Top'#3#191#1#5'Width'#3#163#0#8'AutoFill'#9#7 + +'Caption'#6#16'Name Protection:'#28'ChildSizing.LeftRightSpacing'#2#6#28'Chi' + +'ldSizing.TopBottomSpacing'#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHo' + +'mogenousChildResize'#27'ChildSizing.EnlargeVertical'#7#24'crsHomogenousChil' + +'dResize'#28'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChilds'#26'ChildSizi' + +'ng.ShrinkVertical'#7#14'crsScaleChilds'#18'ChildSizing.Layout'#7#29'cclLeft' + +'ToRightThenTopToBottom'#27'ChildSizing.ControlsPerLine'#2#1#12'ClientHeight' + +#2'+'#11'ClientWidth'#3#159#0#9'ItemIndex'#2#1#13'Items.Strings'#1#6#7'Turn ' + +'ON'#6#8'Turn OFF'#0#7'OnClick'#7#16'RadioGroup1Click'#8'TabOrder'#2#6#0#0#9 + +'TMainMenu'#9'MainMenu1'#4'left'#3'0'#1#0#9'TMenuItem'#9'FilesMenu'#7'Captio' + +'n'#6#5'Files'#0#9'TMenuItem'#8'NewGBMnu'#7'Caption'#6#14'New Grade Book'#7 + +'OnClick'#7#13'NewGBMnuClick'#0#0#9'TMenuItem'#9'OpenGBMnu'#7'Caption'#6#24 + +'Open Existing Grade Book'#7'OnClick'#7#14'OpenGBMnuClick'#0#0#9'TMenuItem'#9 + +'SaveGBMnu'#7'Caption'#6#15'Save Grade Book'#7'OnClick'#7#14'SaveGBMnuClick' + +#0#0#9'TMenuItem'#7'ExitMnu'#7'Caption'#6#4'Exit'#7'OnClick'#7#12'ExitMnuCli' + +'ck'#0#0#0#9'TMenuItem'#7'EditMnu'#7'Caption'#6#4'Edit'#0#9'TMenuItem'#9'Del' + +'RowMnu'#7'Caption'#6#18'Delete Current Row'#7'OnClick'#7#14'DelRowMnuClick' + +#0#0#0#9'TMenuItem'#11'ComputeMenu'#7'Caption'#6#7'Compute'#0#9'TMenuItem'#11 + +'TestAnalMnu'#7'Caption'#6#14'Analyze a Test'#7'OnClick'#7#16'TestAnalMnuCli' + +'ck'#0#0#9'TMenuItem'#10'CompScrMnu'#7'Caption'#6#21'Calc. Composite Score'#7 + +'OnClick'#7#15'CompScrMnuClick'#0#0#0#9'TMenuItem'#11'ReportsMenu'#7'Caption' + +#6#7'Reports'#0#9'TMenuItem'#11'StudRptsMnu'#7'Caption'#6#26'Individual Stud' + +'ent Reports'#7'OnClick'#7#16'StudRptsMnuClick'#0#0#9'TMenuItem'#11'ClassRpt' + +'Mnu'#7'Caption'#6#12'Class Report'#7'OnClick'#7#16'ClassRptMnuClick'#0#0#0#9 + +'TMenuItem'#8'HelpMenu'#7'Caption'#6#4'Help'#7'Visible'#8#0#0#0#11'TSaveDial' + +'og'#11'SaveDialog1'#4'left'#3#189#0#3'top'#2#1#0#0#11'TOpenDialog'#11'OpenD' + +'ialog1'#4'left'#3#2#1#3'top'#2#1#0#0#0 +]); diff --git a/applications/lazstats/source_orig/gradebookunit.pas b/applications/lazstats/source_orig/gradebookunit.pas new file mode 100644 index 000000000..7e8e125c4 --- /dev/null +++ b/applications/lazstats/source_orig/gradebookunit.pas @@ -0,0 +1,902 @@ +unit gradebookunit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + Menus, StdCtrls, EditBtn, FileCtrl, ComCtrls, Grids, ExtCtrls, MainUnit, + Globals, DataProcs, FunctionsLib, DictionaryUnit, outputunit, graphlib, + gradingunit; + + Type + TestRcd = Record + TestNo : integer; + NoItems : integer; + Mean, Variance, StdDev : double; + KR21Rel : double; + Weight : double; + end; + + Type DblDyneMat = array of array of double; + Type DblDyneVec = array of double; + +type + + { TGradebookFrm } + + TGradebookFrm = class(TForm) + ExitBtn: TButton; + Label3: TLabel; + ExitMnu: TMenuItem; + CompScrMnu: TMenuItem; + ClassRptMnu: TMenuItem; + EditMnu: TMenuItem; + DelRowMnu: TMenuItem; + OpenDialog1: TOpenDialog; + SaveDialog1: TSaveDialog; + StudRptsMnu: TMenuItem; + TestAnalMnu: TMenuItem; + SaveGBMnu: TMenuItem; + OpenGBMnu: TMenuItem; + NewGBMnu: TMenuItem; + RadioGroup1: TRadioGroup; + ResetBtn: TButton; + DirectoryEdit1: TDirectoryEdit; + FileListBox1: TFileListBox; + FileNameEdit: TEdit; + Label1: TLabel; + Label2: TLabel; + MainMenu1: TMainMenu; + FilesMenu: TMenuItem; + ComputeMenu: TMenuItem; + HelpMenu: TMenuItem; + ReportsMenu: TMenuItem; + Grid: TStringGrid; + procedure ClassRptMnuClick(Sender: TObject); + procedure CompScrMnuClick(Sender: TObject); + procedure DelRowMnuClick(Sender: TObject); + procedure DirectoryEdit1Change(Sender: TObject); + procedure ExitBtnClick(Sender: TObject); + procedure ExitMnuClick(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure GridExit(Sender: TObject); + procedure NewGBMnuClick(Sender: TObject); + procedure OpenGBMnuClick(Sender: TObject); + procedure RadioGroup1Click(Sender: TObject); + procedure SaveGBMnuClick(Sender: TObject); + procedure StudRptsMnuClick(Sender: TObject); + procedure TestAnalMnuClick(Sender: TObject); + + private + { private declarations } + Test : TestRcd; + TestNo, GridCol, GridRow, NoTests : integer; + + public + { public declarations } + nints, tno, NoStudents, nitems : integer; + freq : array[0..50] of double; + scores : array[0..50] of double; + sortedraw : DblDyneVec; + pcntiles : DblDyneMat; + tscores : DblDyneVec; + zscores : DblDyneVec; + pcntilerank : array[0..50] of double; + + end; + +var + GradebookFrm: TGradebookFrm; + +implementation + +{ TGradebookFrm } + +procedure TGradebookFrm.ExitBtnClick(Sender: TObject); +var response : string ; +begin + response := InputBox('SAVE','Save gradebook (Y or N)?','N'); + if response = 'Y' then SaveGBMnuClick(Self); + Close; +end; + +procedure TGradebookFrm.ExitMnuClick(Sender: TObject); +var response : string ; +begin + response := InputBox('SAVE','Save gradebook (Y or N)?','N'); + if response = 'Y' then SaveGBMnuClick(Self); + Close; +end; + +procedure TGradebookFrm.DirectoryEdit1Change(Sender: TObject); +begin + DirectoryEdit1.Directory := GetCurrentDir; + FileListBox1.Directory := DirectoryEdit1.Directory; +end; + +procedure TGradebookFrm.DelRowMnuClick(Sender: TObject); +VAR + row, i, j : integer; +begin + row := Grid.Row; + for i := 0 to 57 do Grid.Cells[i,row] := ''; + if Grid.Cells[0,row+1] <> '' then + begin + for i := row + 1 to NoStudents do + begin + for j := 0 to 57 do Grid.Cells[j,i-1] := Grid.Cells[j,i]; + end; + for j := 0 to 57 do Grid.Cells[j,NoStudents] := ''; + NoStudents := NoStudents - 1; + end; +end; + +procedure TGradebookFrm.CompScrMnuClick(Sender: TObject); +var + ncats, i, j, k, NoVars, count, IER, col : integer; + DataMat : array[1..50,1..10] of double; + Rmat, RelMat : array[1..10,1..10] of double; + Weights, Reliabilities, VectProd, means, variances, stddevs : array[1..10] of double; + X, Y, CompRel, numerator, denominator, compscore : double; + outline, cellstring : string; + title : string; + RowLabels : array[1..10] of string; + response : string; + nomiss : integer; + found : boolean; + +begin + OutPutFrm.RichEdit.Clear; + NoVars := 0; + // get number of tests + for i := 1 to 10 do + begin + tno := i * 5 - 5; + col := tno + 3; // column of raw scores for test number + found := false; + for j := 1 to NoStudents do + begin + if Grid.Cells[col,j] <> '' then found := true; + end; + if found then + begin + NoVars := NoVars + 1; + RowLabels[NoVars] := 'Test ' + IntToStr(NoVars); + end; + end; + count := NoStudents; + + // get data + for i := 1 to NoVars do + begin + nomiss := 0; + tno := i * 5 - 5; + col := tno + 3; // column of raw scores for test number + for j := 1 to NoStudents do + begin + if Grid.Cells[col,j] <> '' then + DataMat[j,i] := StrToFloat(Grid.Cells[col,j]) + else nomiss := nomiss + 1; + end; + if nomiss >= NoStudents then NoVars := NoVars - 1; + end; + + OutPutFrm.RichEdit.Lines.Add('Composite Test Reliability'); + OutPutFrm.RichEdit.Lines.Add(''); + outline := 'File Analyzed: ' + FileNameEdit.Text; + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + + // get correlation matrix + for i := 1 to NoVars do + begin + means[i] := 0.0; + variances[i] := 0.0; + for j := 1 to NoVars do Rmat[i,j] := 0.0; + end; + + for i := 1 to NoStudents do // get cross-products matrix + begin + for j := 1 to NoVars do + begin + X := DataMat[i,j]; + means[j] := means[j] + X; + variances[j] := variances[j] + (X * X); + for k := 1 to NoVars do + begin + Y := DataMat[i,k]; + Rmat[j,k] := Rmat[j,k] + (X * Y); + end; + end; + end; + + for j := 1 to NoVars do // calculate variances and standard dev.s + begin + variances[j] := variances[j] - (means[j] * means[j] / NoStudents); + variances[j] := variances[j] / (NoStudents - 1.0); + if variances[j] <= 0.0 then + begin + ShowMessage('No variance found in test '+ IntToStr(j)); + exit; + end + else stddevs[j] := sqrt(variances[j]); + end; + + for j := 1 to NoVars do // get variance-covariance matrix + begin + for k := 1 to NoVars do + begin + Rmat[j,k] := Rmat[j,k] - (means[j] * means[k] / NoStudents); + Rmat[j,k] := Rmat[j,k] / (NoStudents - 1.0); + end; + end; + + for j := 1 to NoVars do // get correlation matrix + for k := 1 to NoVars do Rmat[j,k] := Rmat[j,k] / (stddevs[j] * stddevs[k]); + + for j := 1 to NoVars do means[j] := means[j] / NoStudents; + + OutPutFrm.RichEdit.Lines.Add(''); + title := 'Correlations Among Tests'; + OutPutFrm.RichEdit.Lines.Add(title); + outline := 'Test No.'; + for j := 1 to NoVars do + outline := outline + format('%7s',[rowlabels[j]]); + OutPutFrm.RichEdit.Lines.Add(outline); + for j := 1 to NoVars do + begin + outline := format('%8s',[rowlabels[j]]); + for k := 1 to NoVars do + begin + outline := outline + format('%7.3f',[Rmat[j,k]]); + end; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + outline := 'Means '; + for j := 1 to NoVars do outline := outline + format('%7.2f',[means[j]]); + OutPutFrm.RichEdit.Lines.Add(outline); + outline := 'Std.Devs'; + for j := 1 to NoVars do outline := outline + format('%7.2f',[stddevs[j]]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + + for i := 1 to NoVars do + for j := 1 to NoVars do + RelMat[i,j] := Rmat[i,j]; + for i := 1 to NoVars do + begin + response := InputBox('No. of items in Test ' + IntToStr(i),'Number:','0'); + nitems := StrToInt(response); + Reliabilities[i] := (nitems / (nitems-1) * + (1.0 - (means[i] * (nitems - means[i]))/(nitems * variances[i]))); + RelMat[i,i] := Reliabilities[i]; + cellstring := 'Weight for Test ' + IntToStr(i); + response := InputBox(cellstring,'Weight:','1'); + Weights[i] := StrToFloat(response); + end; + // get numerator and denominator of composite reliability + for i := 1 to NoVars do VectProd[i] := 0.0; + numerator := 0.0; + denominator := 0.0; + for i := 1 to NoVars do + for j := 1 to NoVars do + VectProd[i] := VectProd[i] + (Weights[i] * RelMat[j,i]); + for i := 1 to NoVars do numerator := numerator + (VectProd[i] * Weights[i]); + + for i := 1 to NoVars do VectProd[i] := 0.0; + for i := 1 to NoVars do + for j := 1 to NoVars do + VectProd[i] := VectProd[i] + (Weights[i] * Rmat[j,i]); + for i := 1 to NoVars do denominator := denominator + + (VectProd[i] * Weights[i]); + CompRel := numerator / denominator; + OutPutFrm.RichEdit.Lines.Add(''); + outline := 'Test No. Weight Reliability'; + OutPutFrm.RichEdit.Lines.Add(outline); + for i := 1 to NoVars do + begin + outline := format(' %3d %6.2f %6.2f',[i,Weights[i],Reliabilities[i]]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + outline := format('Composite reliability = %6.3f',[CompRel]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.ShowModal; + response := InputBox('COMPOSITE','Save the composit score?','Yes'); + if response = 'Yes' then + begin + col := 53; + for i := 1 to NoStudents do + begin + X := 0.0; + for j := 1 to NoVars do + X := X + (DataMat[i,j] * Weights[j]); + Grid.Cells[col,i] := FloatToStr(X); + end; + end; +end; + +procedure TGradebookFrm.ClassRptMnuClick(Sender: TObject); +VAR + i, j, pos : integer; + outline : string; + valstr : string; + raw, z, t, p : double; + +begin + // confirm no. of students + NoStudents := 0; + for i := 1 to 40 do + begin + if Grid.Cells[0,i] <> '' then NoStudents := NoStudents + 1; + end; + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('Class Report'); + for i := 1 to NoStudents do + begin + outline := Grid.Cells[1,i] + ' '; + if Grid.Cells[2,i] <> '' then outline := outline + Grid.Cells[2,i] + ' '; + outline := outline + Grid.Cells[0,i]; + outline := 'Report for: ' + outline; + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('TEST RAW Z T PERCENTILE GRADE'); + OutPutFrm.RichEdit.Lines.Add(' NO. SCORE SCORE SCORE RANK'); + for j := 0 to 10 do + begin + pos := j * 5 + 3; + valstr := format('%3d ',[j+1]); + outline := valstr; + if Grid.Cells[pos,i] <> '' then + begin + raw := StrToFloat(Grid.Cells[pos,i]); + z := StrToFloat(Grid.Cells[pos+1,i]); + t := strToFloat(Grid.Cells[pos+2,i]); + p := StrToFloat(Grid.Cells[pos+3,i]); + valstr := format('%10.0f',[raw]); + outline := outline + valstr; + valstr := format('%9.3f %9.3f %9.3f %3s',[z, t, p, Grid.Cells[pos+4,i]]); + outline := outline + valstr; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + end; + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add(''); + end; + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; +end; + +procedure TGradebookFrm.FormCreate(Sender: TObject); +begin + FileListBox1.Directory := DirectoryEdit1.Directory; +end; + +procedure TGradebookFrm.FormShow(Sender: TObject); +begin + Grid.ColWidths[0] := 100; + Grid.Cells[0,0] := 'Last Name'; + Grid.ColWidths[1] := 100; + Grid.Cells[1,0] := 'First Name'; + Grid.ColWidths[2] := 40; + Grid.Cells[2,0] := 'M.I.'; + Grid.ColWidths[3] := 60; + Grid.Cells[3,0] := 'Test 1 Raw'; + Grid.ColWidths[4] := 50; + Grid.Cells[4,0] := 'Test 1 z'; + Grid.ColWidths[5] := 50; + Grid.Cells[5,0] := 'Test 1 T'; + Grid.ColWidths[6] := 55; + Grid.Cells[6,0] := '%ile Rank'; + Grid.ColWidths[7] := 50; + Grid.Cells[7,0] := 'Grade 1'; + Grid.ColWidths[8] := 60; + Grid.Cells[8,0] := 'Test 2 Raw'; + Grid.ColWidths[9] := 50; + Grid.Cells[9,0] := 'Test 2 z'; + Grid.ColWidths[10] := 50; + Grid.Cells[10,0] := 'Test 2 T'; + Grid.ColWidths[11] := 55; + Grid.Cells[11,0] := '%ile Rank'; + Grid.ColWidths[12] := 50; + Grid.Cells[12,0] := 'Grade 2'; + Grid.ColWidths[13] := 60; + Grid.Cells[13,0] := 'Test 3 Raw'; + Grid.ColWidths[14] := 50; + Grid.Cells[14,0] := 'Test 3 z'; + Grid.ColWidths[15] := 50; + Grid.Cells[15,0] := 'Test 3 T'; + Grid.ColWidths[16] := 55; + Grid.Cells[16,0] := '%ile Rank'; + Grid.ColWidths[17] := 50; + Grid.Cells[17,0] := 'Grade 3'; + Grid.ColWidths[18] := 60; + Grid.Cells[18,0] := 'Test 4 Raw'; + Grid.ColWidths[19] := 50; + Grid.Cells[19,0] := 'Test 4 z'; + Grid.ColWidths[20] := 50; + Grid.Cells[20,0] := 'Test 4 T'; + Grid.ColWidths[21] := 55; + Grid.Cells[21,0] := '%ile Rank'; + Grid.ColWidths[22] := 50; + Grid.Cells[22,0] := 'Grade 4'; + Grid.ColWidths[23] := 60; + Grid.Cells[23,0] := 'Test 5 Raw'; + Grid.ColWidths[24] := 50; + Grid.Cells[24,0] := 'Test 5 z'; + Grid.ColWidths[25] := 50; + Grid.Cells[25,0] := 'Test 5 T'; + Grid.ColWidths[26] := 55; + Grid.Cells[26,0] := '%ile Rank'; + Grid.ColWidths[27] := 50; + Grid.Cells[27,0] := 'Grade 5'; + Grid.ColWidths[28] := 60; + Grid.Cells[28,0] := 'Test 6 Raw'; + Grid.ColWidths[29] := 50; + Grid.Cells[29,0] := 'Test 6 z'; + Grid.ColWidths[30] := 50; + Grid.Cells[30,0] := 'Test 6 T'; + Grid.ColWidths[31] := 55; + Grid.Cells[31,0] := '%ile Rank'; + Grid.ColWidths[32] := 50; + Grid.Cells[32,0] := 'Grade 6'; + Grid.ColWidths[33] := 60; + Grid.Cells[33,0] := 'Test 7 Raw'; + Grid.ColWidths[34] := 50; + Grid.Cells[34,0] := 'Test 7 z'; + Grid.ColWidths[35] := 50; + Grid.Cells[35,0] := 'Test 7 T'; + Grid.ColWidths[36] := 55; + Grid.Cells[36,0] := '%ile Rank'; + Grid.ColWidths[37] := 50; + Grid.Cells[37,0] := 'Grade 7'; + Grid.ColWidths[38] := 60; + Grid.Cells[38,0] := 'Test 8 Raw'; + Grid.ColWidths[39] := 50; + Grid.Cells[39,0] := 'Test 8 z'; + Grid.ColWidths[40] := 50; + Grid.Cells[40,0] := 'Test 8 T'; + Grid.ColWidths[41] := 55; + Grid.Cells[41,0] := '%ile Rank'; + Grid.ColWidths[42] := 50; + Grid.Cells[42,0] := 'Grade 8'; + Grid.ColWidths[43] := 60; + Grid.Cells[43,0] := 'Test 9 Raw'; + Grid.ColWidths[44] := 50; + Grid.Cells[44,0] := 'Test 9 z'; + Grid.ColWidths[45] := 50; + Grid.Cells[45,0] := 'Test 9 T'; + Grid.ColWidths[46] := 55; + Grid.Cells[46,0] := '%ile Rank'; + Grid.ColWidths[47] := 50; + Grid.Cells[47,0] := 'Grade 9'; + Grid.ColWidths[48] := 60; + Grid.Cells[48,0] := 'Test 10 Raw'; + Grid.ColWidths[49] := 50; + Grid.Cells[49,0] := 'Test 10 z'; + Grid.ColWidths[50] := 50; + Grid.Cells[50,0] := 'Test 10 T'; + Grid.ColWidths[51] := 55; + Grid.Cells[51,0] := '%ile Rank'; + Grid.ColWidths[52] := 50; + Grid.Cells[52,0] := 'Grade 10'; + Grid.ColWidths[53] := 60; + Grid.Cells[53,0] := 'Total Raw'; + Grid.ColWidths[54] := 50; + Grid.Cells[54,0] := 'Total z'; + Grid.ColWidths[55] := 50; + Grid.Cells[55,0] := 'Total T'; + Grid.ColWidths[56] := 55; + Grid.Cells[56,0] := '%ile Rank'; + Grid.ColWidths[57] := 60; + Grid.Cells[57,0] := 'Final Grade'; +end; + +procedure TGradebookFrm.GridExit(Sender: TObject); +begin + GridCol := Grid.Col; + GridRow := Grid.Row; + if (Grid.Cells[GridCol,GridRow] = ' ') then exit else + begin + NoStudents := GridRow; + if GridCol > 3 then + begin + GridCol := GridCol - 3; + if (GridCol >= 1) and (GridCol <= 5) then + begin + TestNo := 1; + exit; + end; + if (GridCol >= 6) and (GridCol <= 10) then + begin + TestNo := 2; + exit; + end; + if (GridCol >= 11) and (GridCol <= 15) then + begin + TestNo := 3; + exit; + end; + if (GridCol >= 16) and (GridCol <= 20) then + begin + TestNo := 4; + exit; + end; + if (GridCol >= 21) and (GridCol <= 25) then + begin + TestNo := 5; + exit; + end; + if (GridCol >= 26) and (GridCol <= 30) then + begin + TestNo := 6; + exit; + end; + if (GridCol >= 31) and (GridCol <= 35) then + begin + TestNo := 7; + exit; + end; + if (GridCol >= 36) and (GridCol <= 40) then + begin + TestNo := 8; + exit; + end; + if (GridCol >= 41) and (GridCol <= 45) then + begin + TestNo := 9; + exit; + end; + if (GridCol >= 46) and (GridCol <= 50) then + begin + TestNo := 10; + exit; + end; + if (GridCol >= 51) and (GridCol <= 55) then + begin + TestNo := 11; + exit; + end; + end; + end; + if TestNo > NoTests then NoTests := TestNo; +end; + +procedure TGradebookFrm.NewGBMnuClick(Sender: TObject); +VAR + i, j : integer; +begin + for i := 1 to 40 do + begin + for j := 0 to 57 do Grid.Cells[j,i] := ''; + end; + GradebookFrm.FileNameEdit.text := ''; +end; + +procedure TGradebookFrm.OpenGBMnuClick(Sender: TObject); +var + FName : string; + Book : textfile; + row : integer; + i, j, k : integer; + cellstr : string; +begin + OpenDialog1.DefaultExt := '.GBK'; + OpenDialog1.Filter := 'ALL (*.*)|*.*|Grade Book (*.GBK)|*.GBK'; + OpenDialog1.FilterIndex := 2; + if OpenDialog1.Execute then + begin + FName := OpenDialog1.FileName; + GradebookFrm.FileNameEdit.text := FName; + AssignFile(Book,FName); + Reset(Book); + readln(Book,NoStudents); + for i := 1 to 40 do + begin + for j := 0 to 57 do + begin + readln(Book,cellstr); + Grid.Cells[j,i] := cellstr; + end; + end; + CloseFile(Book); + end; +end; + +procedure TGradebookFrm.RadioGroup1Click(Sender: TObject); +begin + if RadioGroup1.ItemIndex = 1 then Grid.FixedCols := 0 else Grid.FixedCols := 3; +end; + +procedure TGradebookFrm.SaveGBMnuClick(Sender: TObject); +var + FName : string; + Book : textfile; + row : integer; + i, j, k : integer; + cellstr : string; +begin + // confirm no. of students + NoStudents := 0; + for i := 1 to 40 do + begin + if Grid.Cells[0,i] <> '' then NoStudents := NoStudents + 1; + end; + SaveDialog1.DefaultExt := '.GBK'; + SaveDialog1.Filter := 'ALL (*.*)|*.*|Grade Book (*.GBK)|*.GBK'; + SaveDialog1.FilterIndex := 2; + if SaveDialog1.Execute then + begin +// GetNoRecords; + FName := SaveDialog1.FileName; + AssignFile(Book,FName); + Rewrite(Book); + writeln(Book,NoStudents); + for i := 1 to 40 do + begin + for j := 0 to 57 do + begin + cellstr := Grid.Cells[j,i]; + writeln(Book,cellstr); + end; + end; + CloseFile(Book); + end; + GradebookFrm.FileNameEdit.text := ''; +end; + +procedure TGradebookFrm.StudRptsMnuClick(Sender: TObject); +VAR + i, j, pos : integer; + outline : string; + valstr : string; + raw, z, t, p : double; +begin + // confirm no. of students + NoStudents := 0; + for i := 1 to 40 do + begin + if Grid.Cells[0,i] <> '' then NoStudents := NoStudents + 1; + end; + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('Individual Student Report'); + for i := 1 to NoStudents do + begin + outline := Grid.Cells[1,i] + ' '; + if Grid.Cells[2,i] <> '' then outline := outline + Grid.Cells[2,i] + ' '; + outline := outline + Grid.Cells[0,i]; + outline := 'Report for: ' + outline; + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + OutPutFrm.RichEdit.Lines.Add('TEST RAW Z T PERCENTILE GRADE'); + OutPutFrm.RichEdit.Lines.Add(' NO. SCORE SCORE SCORE RANK'); + for j := 0 to 10 do + begin + pos := j * 5 + 3; + valstr := format('%3d ',[j+1]); + outline := valstr; + if Grid.Cells[pos,i] <> '' then + begin + raw := StrToFloat(Grid.Cells[pos,i]); + z := StrToFloat(Grid.Cells[pos+1,i]); + t := strToFloat(Grid.Cells[pos+2,i]); + p := StrToFloat(Grid.Cells[pos+3,i]); + valstr := format('%10.0f',[raw]); + outline := outline + valstr; + valstr := format('%9.3f %9.3f %9.3f %3s',[z, t, p, Grid.Cells[pos+4,i]]); + outline := outline + valstr; + OutPutFrm.RichEdit.Lines.Add(outline); + end; + end; + OutPutFrm.ShowModal; + OutPutFrm.RichEdit.Clear; + end; +end; + +procedure TGradebookFrm.TestAnalMnuClick(Sender: TObject); +label again; +VAR + i, j, k, col : integer; + X, mean, variance, stddev, Xtemp : double; + z, t, pcntile : double; + response : string; + grades : array [0..40] of string; + cumfreq : array[0..50] of double; + cumfreqmid : array[0..50] of double; + pcnt : array[0..50] of double; + cumpcnt : array[0..50] of double; + ncnt : integer; + outline : string; + KR21 : double; + minf, maxf : double; + +begin + response := InputBox('Which test (number)','TEST:','0'); + if StrToInt(response) = 0 then + begin + ShowMessage('You must select a test no. between 1 and 11'); + exit; + end; + tno := StrToInt(response); + tno := tno * 5 - 5; + col := tno + 3; // column of raw scores for test number tno + // get no. of students + NoStudents := 0; + for i := 1 to 40 do + begin + if Grid.Cells[col,i] = '' then continue else NoStudents := NoStudents + 1; + end; + SetLength(sortedraw,41); + SetLength(pcntiles,41,41); + SetLength(tscores,41); + SetLength(zscores,41); + OutPutFrm.RichEdit.Clear; + OutPutFrm.RichEdit.Lines.Add('Test Analysis Results'); + mean := 0.0; + variance := 0.0; + for i := 1 to NoStudents do + begin + X := StrToFloat(Grid.Cells[col,i]); + sortedraw[i-1] := X; + mean := mean + X; + variance := variance + (X * X); + end; + variance := variance - (mean * mean / NoStudents); + Variance := Variance / (NoStudents - 1.0); + stddev := sqrt(variance); + mean := mean / NoStudents; + outline := format('Mean = %8.2f, Variance = %8.3f, Std.Dev. = %8.3f', + [mean,variance,stddev]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + response := InputBox('No. of Test Items or maximum score possible','Number:','0'); + nitems := StrToInt(response); + if nitems = 0 then + begin + ShowMessage('Enter the maximum score or no. of items!'); + exit; + end; + KR21 := (nitems / (nitems-1) * + (1.0 - (mean * (nitems - mean))/(nitems * variance))); + outline := format('Kuder-Richardson Formula 21 Reliability Estimate = %6.4f',[KR21]); + OutPutFrm.RichEdit.Lines.Add(outline); + OutPutFrm.RichEdit.Lines.Add(''); + + // get z scores and T scores + for i := 1 to NoStudents do + begin + z := (sortedraw[i-1] - mean) / stddev; + outline := format('%5.3f',[z]); + Grid.Cells[col+1,i] := outline; + t := z * 10 + 50; + outline := format('%5.1f',[t]); + Grid.Cells[col+2,i] := outline; + end; + // sort raw scores in ascending order + for i := 1 to NoStudents-1 do + begin + for j := i + 1 to NoStudents do + begin + if sortedraw[i-1] > sortedraw[j-1] then // switch + begin + Xtemp := sortedraw[i-1]; + sortedraw[i-1] := sortedraw[j-1]; + sortedraw[j-1] := Xtemp; + end; + end; + end; + // get percentile rank + ncnt := NoStudents; + nints := 1; + for i := 1 to ncnt do freq[i-1] := 0; + X := sortedraw[0]; + Scores[0] := X; + for i := 1 to ncnt do + begin + if (X = sortedraw[i-1])then freq[nints-1] := freq[nints-1] + 1 + else // new value + begin + nints := nints + 1; + freq[nints-1] := freq[nints-1] + 1; + X := sortedraw[i-1]; + Scores[nints-1] := X; + end; + end; + // get min and max frequencies + minf := NoStudents; + maxf := 0; + for i := 0 to nints - 1 do + begin + if freq[i] > maxf then maxf := freq[i]; + if freq[i] < minf then minf := freq[i]; + end; + // now get cumulative frequencies + cumfreq[0] := freq[0]; + for i := 1 to nints-1 do cumfreq[i] := freq[i] + cumfreq[i-1]; + + // get cumulative frequences to midpoints and percentile ranks + cumfreqmid[0] := freq[0] / 2.0; + pcntilerank[0] := (cumfreq[0] / 2.0) / ncnt; + for i := 1 to nints-1 do + begin + cumfreqmid[i] := (freq[i] / 2.0) + cumfreq[i-1]; + pcntilerank[i] := cumfreqmid[i] / ncnt; + end; + + OutPutFrm.RichEdit.Lines.Add('PERCENTILE RANKS'); + OutPutFrm.RichEdit.Lines.Add('Score Value Frequency Cum.Freq. Percentile Rank'); + OutPutFrm.RichEdit.Lines.Add('___________ __________ __________ ______________'); + for i := 1 to nints do + begin + outline := format(' %8.3f %6.2f %6.2f %6.2f', + [Scores[i-1], freq[i-1],cumfreq[i-1],pcntilerank[i-1]*100.0]); + OutPutFrm.RichEdit.Lines.Add(outline); + end; + OutPutFrm.RichEdit.Lines.Add(''); + + // get grades + gradingfrm.ShowModal; + + // Now place results in testgrid + for i := 1 to ncnt do + begin + X := StrToFloat(Grid.Cells[col,i]); + for j := 0 to nints do + begin + if X = scores[j] then + Gradebookfrm.Grid.Cells[col+3,i] := format('%5.2f',[pcntilerank[j]*100.0]); + end; + end; + OutPutFrm.ShowModal; + + // graph raw scores + if maxf = minf then exit; + GraphFrm.Heading := 'Frequency of Raw Scores'; + GraphFrm.XTitle := 'Category'; + GraphFrm.YTitle := 'Frequency'; + SetLength(GraphFrm.Ypoints,1,nints); + SetLength(GraphFrm.Xpoints,1,nints); + for k := 1 to nints do + begin +// GraphFrm.PointLabels[k-1] := GradingSpecs[p].GridData[k,1]; + GraphFrm.Ypoints[0,k-1] := freq[k]; + GraphFrm.Xpoints[0,k-1] := Scores[k]; +// GraphFrm.Ypoints[0,k-1] := freq[k]; +// GraphFrm.Xpoints[0,k-1] := k; + end; + // enter parameters for 2 dimension bars in graph package + GraphFrm.barwideprop := 0.5; + GraphFrm.nosets := 1; + GraphFrm.miny := minf; + GraphFrm.maxy := maxf; + GraphFrm.nbars := nints-1; + GraphFrm.GraphType := 2; // 3d bars + GraphFrm.AutoScale := false; // use min and max + GraphFrm.ShowLeftWall := true; + GraphFrm.ShowRightWall := true; + GraphFrm.ShowBottomWall := true; + GraphFrm.ShowBackWall := true; + GraphFrm.BackColor := clYellow; + GraphFrm.WallColor := clBlack; + GraphFrm.PtLabels := true; + GraphFrm.ShowModal; + + GraphFrm.Ypoints := nil; + GraphFrm.Xpoints := nil; + +// cleanup + sortedraw := nil; +// grades := nil; + zscores := nil; + tscores := nil; + pcntiles := nil; +end; + + +initialization + {$I gradebookunit.lrs} + +end. + diff --git a/applications/lazstats/source_orig/gradingunit.lfm b/applications/lazstats/source_orig/gradingunit.lfm new file mode 100644 index 000000000..937fe7aef --- /dev/null +++ b/applications/lazstats/source_orig/gradingunit.lfm @@ -0,0 +1,241 @@ +object gradingfrm: Tgradingfrm + Left = 102 + Height = 494 + Top = 109 + Width = 706 + Caption = 'Specification for Grades' + ClientHeight = 494 + ClientWidth = 706 + OnShow = FormShow + LCLVersion = '0.9.28.2' + object Label1: TLabel + Left = 16 + Height = 14 + Top = 122 + Width = 28 + Caption = 'Score' + ParentColor = False + end + object Label2: TLabel + Left = 80 + Height = 14 + Top = 122 + Width = 52 + Caption = 'Frequency' + ParentColor = False + end + object Label3: TLabel + Left = 160 + Height = 14 + Top = 122 + Width = 60 + Caption = 'Grade Given' + ParentColor = False + end + object TopScoreLabel: TLabel + Left = 344 + Height = 14 + Top = 122 + Width = 49 + Caption = 'Top Score' + ParentColor = False + end + object DownThroughLabel: TLabel + Left = 432 + Height = 14 + Top = 122 + Width = 71 + Caption = 'Down Through' + ParentColor = False + end + object Label4: TLabel + Left = 520 + Height = 14 + Top = 122 + Width = 64 + Caption = 'No. Assigned' + ParentColor = False + end + object Label5: TLabel + Left = 256 + Height = 14 + Top = 122 + Width = 35 + Caption = 'Grades' + ParentColor = False + end + object DistUseGroup: TRadioGroup + Left = 8 + Height = 111 + Top = 3 + Width = 212 + AutoFill = True + Caption = 'To Assign Grades Use:' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 93 + ClientWidth = 208 + Items.Strings = ( + 'Raw Test Scores' + 'z Scores' + 'T Scores' + 'Percentile Rank Scores' + ) + OnClick = DistUseGroupClick + TabOrder = 0 + end + object CategoriesGroup: TRadioGroup + Left = 233 + Height = 112 + Top = 2 + Width = 279 + AutoFill = True + Caption = 'Use the following Grade Categories:' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 94 + ClientWidth = 275 + Items.Strings = ( + 'A, B, C, D, F' + 'A, A-, B+, B, B-, C+, C, C-, D+, D, D-, F' + ) + OnClick = CategoriesGroupClick + TabOrder = 1 + end + object ScoresGrid: TStringGrid + Left = 8 + Height = 294 + Top = 137 + Width = 136 + ColCount = 2 + FixedCols = 0 + FixedRows = 0 + TabOrder = 2 + end + object GradesGrid: TStringGrid + Left = 159 + Height = 294 + Top = 137 + Width = 74 + ColCount = 1 + FixedCols = 0 + FixedRows = 0 + TabOrder = 3 + end + object TopScoreGrid: TStringGrid + Left = 344 + Height = 298 + Top = 138 + Width = 71 + ColCount = 1 + FixedCols = 0 + FixedRows = 0 + TabOrder = 4 + end + object LowScoreGrid: TStringGrid + Left = 432 + Height = 298 + Top = 138 + Width = 67 + ColCount = 1 + FixedCols = 0 + FixedRows = 0 + Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goEditing, goSmoothScroll] + TabOrder = 5 + OnKeyDown = LowScoreGridKeyDown + end + object SaveBtn: TButton + Left = 608 + Height = 32 + Top = 122 + Width = 77 + Caption = 'Save Specs.' + OnClick = SaveBtnClick + TabOrder = 6 + end + object LoadBtn: TButton + Left = 608 + Height = 32 + Top = 176 + Width = 77 + Caption = 'Load Specs.' + OnClick = LoadBtnClick + TabOrder = 7 + end + object ResetBtn: TButton + Left = 608 + Height = 32 + Top = 232 + Width = 77 + Caption = 'Reset' + OnClick = ResetBtnClick + TabOrder = 8 + end + object Cancelbtn: TButton + Left = 608 + Height = 32 + Top = 288 + Width = 77 + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 9 + end + object ReturnBtn: TButton + Left = 608 + Height = 32 + Top = 399 + Width = 77 + Caption = 'Return' + ModalResult = 1 + TabOrder = 10 + end + object AssignedGrid: TStringGrid + Left = 520 + Height = 299 + Top = 138 + Width = 68 + ColCount = 1 + FixedCols = 0 + FixedRows = 0 + TabOrder = 11 + end + object Grades: TStringGrid + Left = 256 + Height = 296 + Top = 138 + Width = 72 + ColCount = 1 + FixedCols = 0 + FixedRows = 0 + TabOrder = 12 + end + object ComputeBtn: TButton + Left = 608 + Height = 29 + Top = 344 + Width = 77 + Caption = 'Compute' + OnClick = ComputeBtnClick + TabOrder = 13 + end + object OpenDialog1: TOpenDialog + left = 552 + top = 448 + end + object SaveDialog1: TSaveDialog + left = 640 + top = 448 + end +end