Mini Kabibi Habibi

Current Path : C:/Users/ITO/Desktop/VF9/program files/microsoft visual foxpro 9/
Upload File :
Current File : C:/Users/ITO/Desktop/VF9/program files/microsoft visual foxpro 9/coverage.app

�� #t����w�%%�E:Ur�1�������+��������	�
���%�C�TALKv�ON��e�G2�T��a���T��C�
��:T��C�cov_standard�COVERAGE.VCX�������$T��C�oTemp.BaseClassb�C��
%������
%������T�
�����T������T������T��C�
�
��
%������>T�	��"Your coverage analysis is saved asC�
 �
�.��%�C��
����T�	��	C�
 C�
 �'Some source files could not be located;C�
 �'their names are saved in a second tableC�
 �(��).���%�C��
��}�TT�	��	C�
 C�
 �(Your coverage stack analysis is saved asC�
 ��.��� ��C�	�Coverage Profiler�x���
��C�������
��C��������O�cov_standard��
%������G2 ��%�C��
��^�+|�
ShellExecuteA�SHELL32������!��C��open��������%�C��
����F��
Q����	���:�z,�C��(��������%�C�
�
����F��
Q��
��	���:�z,�C��(��������	B����UTCFILETLUNATTENDEDTCADDINOTEMPCALIASLSUCCESSLSETTALKBACKONCAPPFILECLIBSCUNATTENDEDMESSAGECSAVEDTARGETCSAVEDSKIPPEDFILESCSAVEDSTACKXMLFINDAPPFILECSAVEDTARGETDBFCSAVEDSKIPFILESRELEASESHOW
SHELLEXECUTEASHELL32������
T����������(�����������T��CC��]f��,%�CC��R�APP�EXE�VFD�DLL�����
T�����!����%��	PROCEDURE�����T��C��\��T��C�C� ��\���	B����U	CFILENAMECSYS16ILEVELFindAppFile�����a�A���A��	���ADAA���A�AA�aA�A���aA���aA�3���A��AAA�!�A�16 y0
�mPLATFORMCUNIQUEIDC	
TIMESTAMPN
CLASSMCLASSLOCM!BASECLASSM%OBJNAMEM)PARENTM-PROPERTIESM1PROTECTEDM5METHODSM9OBJCODEM=OLEMAOLE2MERESERVED1MIRESERVED2MMRESERVED3MQRESERVED4MURESERVED5MYRESERVED6M]RESERVED7MaRESERVED8MeUSERMi
 COMMENT Class                WINDOWS _RKB0NOW1Y 582513910�����	 COMMENT RESERVED            
 WINDOWS _RKC0TLT43 5842767651/(q COMMENT RESERVED             WINDOWS _RKC0TK86D 584276775i� COMMENT RESERVED            �� WINDOWS _RKA168O8P 584276786�����`����� COMMENT RESERVED            �� WINDOWS _RKA15Q5XG 584276815�����V�������� COMMENT RESERVED            �� WINDOWS _RKC0TP7PY 584276856	N
 COMMENT RESERVED             WINDOWS _RKA169PDA 584276868���F����� COMMENT RESERVED            �� WINDOWS _RKD0PKSSY 584276882�����?����� WINDOWS _RKD0PMCPR 584276882������� COMMENT RESERVED            �� WINDOWS _RKA16FYVN 584276913�����7����� COMMENT RESERVED            � WINDOWS _RKA1679VC 584276922�����/����� COMMENT RESERVED            �� WINDOWS _RKA16ESVS 584276949>O?NI'<=@:; COMMENT RESERVED            9 WINDOWS _RKA16ED68 584276960&8'61$%("# COMMENT RESERVED            !  WINDOWS _RKC0T0X5H 584276968

 COMMENT RESERVED            	 WINDOWS _RKG0YPXRA 611480161[
\r�YZTXS WINDOWS _RKA169PDA 611480161���� WINDOWS RESERVED   611480161������ WINDOWS _RKT0WW9CV 611480161���ih�f� WINDOWS _RKA169PDA 611480161a`_^>[5� WINDOWS _RKG0YZK30 584276737#�TQ� WINDOWS _RKG0YZK42 609112424��

H�� WINDOWS _RKA16D662 584276737	����� WINDOWS _RKI0JF4K7 611480161yxwsr@ WINDOWS _RKI0JF4LM 611480161qp_^]' COMMENT RESERVED            @?P WINDOWS _RKI0IS45F 611482027�nm������:ab WINDOWS _RKI0J3OT4 5831410389832'$ WINDOWS _RKI0J3OTN 583141038#
 WINDOWS _RKI0J3OU6 583141038����� WINDOWS _RKI0J3OV7 583141038������ WINDOWS _RKI0J3OVQ 583141038���~{ WINDOWS _RKI0J3OW9 583141038zytsro WINDOWS _RKI0J3OWS 583141038ihgfeb WINDOWS _RKI0J3OXC 583141038a*)('$ WINDOWS _RKI0J3OYE 583141038#"��� WINDOWS _RKI0J3OXU 611480044������ COMMENT RESERVED            ` WINDOWS _RKA141JIM 612110498]�b`nd�[\aYZW COMMENT RESERVED            ('T WINDOWS _RKC0TULUO 612115882�vu�w��4������ COMMENT RESERVED            �� WINDOWS _RKV02Q18N 626492744�"!4��� DEC COMMENT RESERVED            BA> WINDOWS _RTI1D0DF0 626494092}��~��{|z[ COMMENT RESERVED            X WINDOWS _RKV01GTSG 630738370W��v��C WINDOWS _RKV01O98J 582487188����r COMMENT RESERVED            KAH WINDOWS _RKI05X4G2 643481202&�
k)b$%?��� WINDOWS _RKI062JGR 612080728>��K�^ COMMENT RESERVED            ��� WINDOWS _RZ7124Y6S 643498817R�S�
,12�
/ WINDOWS _RZ7124Y73 6434988172�yG#L WINDOWS _RZ7124Y78 626350642��� !"}# WINDOWS _RZ7124Y7N 643498817OPv�� WINDOWS _RZ7124Y7T 643498817<�O�x� WINDOWS _RZ7124Y7W 643498817w�1  WINDOWS _RZ7124Y7Z 643498817��o���� WINDOWS _RZ7124Y85 643498817m������ WINDOWS _RZ7124Y8A 643498817��N��� WINDOWS _RZ7124Y8F 643498817���j��5
 WINDOWS _RZ7124Y8K 643498817���Aq� WINDOWS _RZ7124Y8P 643498817���7 WINDOWS _RZ7145E8Y 626301747��yc_^ COMMENT RESERVED            ��� WINDOWS _RKD0WHP62 681201370�����p	������v WINDOWS _RKA16D662 681201370���K;@� WINDOWS _RKB0NOW1Y 681201370P=������ WINDOWS _RKV0HM211 681201370N:Rz� WINDOWS _RKV0HM23P 681201370ml���N} WINDOWS _RKV0HM24V 681201370n�LM��w WINDOWS _RKV0HM26T 681201370��|a�/#o WINDOWS _RKV0HM298 681201370F�����i WINDOWS _RKV0HM2B6 681201370UVW����e WINDOWS _RKV0HM2CB 626350760���z�\ WINDOWS _RKB0NOW1Y 681201370����X WINDOWS _RKV0HM2GR 626350760��xQ��O WINDOWS _RZ714HPSK 6812013700���� WINDOWS _RZ714HPT0 681201370�����$�I WINDOWS _RKD12GENE 626359885���ut�6 WINDOWS _RKD12GEO5 681201370lkjZ�o0 WINDOWS _RKD12GEOK 588096153�b�b� COMMENT RESERVED            Dtb WINDOWS _RKA16D662 687686437gh/!HfFG COMMENT RESERVED            0 WINDOWS _RKC10MKO8 688416241�������s�CXY COMMENT RESERVED            �L WINDOWS _RKB0N1P9K 689141446G 8c�xyFvw COMMENT RESERVED            ut WINDOWS _RKI06PTSJ 690717938kXl�Q�ij�WXV WINDOWS _RKA16ESVS 689593651	�j�$ WINDOWS _RKU0OQYO9 689593651��) WINDOWS _RKA16ESVS 690717938 WINDOWS _06M13ENKL 690717938
����� WINDOWS _RKB0NOW1Y 690717938����u� WINDOWS _RKA169PDA 690717938tsKBAp WINDOWS _RKA169PDA 689593651.��H� WINDOWS _RKB0NOW1Y 690717938������ WINDOWS _RKB0NOW1Y 690717938������ WINDOWS _RKI1BJPDQ 690717938������ WINDOWS _RKA169PDA 690717938���{?v WINDOWS _06M14LQMY 689594055=43."+�� WINDOWS _RKB0NOW1Y 689593651!� WINDOWS _RKI1BJPF8 689593651������3� WINDOWS _RKI1BJPFP 690717938������ WINDOWS _RKA169PDA 690717938����wt WINDOWS _06M14LQNI 690717938sr`_W\ WINDOWS _RKA169PDA 689593651VUQPJM WINDOWS _RKI1BJPHM 689593651IH"!C WINDOWS _RKB0NOW1Y 690717938������ WINDOWS _RKA169PDA 690717938������ WINDOWS _RKI1CJHHU 690717938������ WINDOWS _RKT0VSUM8 690717938������ WINDOWS _RKT0VSUN2 690717938������ WINDOWS _06M13ENKM 690717938na`KJ� WINDOWS _RKB0NOW1Y 690717938IHGFE� WINDOWS _RKT0VSUNY 690717938���X<9 WINDOWS _RKU0OQYPQ 690717938876541 WINDOWS RESERVED   690717938!srqpm COMMENT RESERVED            USP WINDOWS _RKD0XE6V6 714966892B�/^��� ]�l WINDOWS _RKD0YU5E1 714966892@�z0 COMMENT RESERVED            k2 WINDOWS _RKI0UFURT 754537998e�����bcd�^_] WINDOWS _RKI0VVV94 754537998������ WINDOWS _RKI0VVV9L 754537998����i��z WINDOWS _RKI0VVVAF 754537998hgfe0^UY WINDOWS _RKI0VVVBK 754537998/.�+L WINDOWS _RKI0VVVCD 754537998�������� WINDOWS _RKT0V2HLQ 754537998������ COMMENT RESERVED            \DY WINDOWS _RKA16ADRP 820422867/A*�) COMMENT RESERVED             WINDOWS _RKV021YA2 825130754�~i�]
�}� COMMENT RESERVED            zo@VERSION =   3.00����OI������A��U(8~f��	\��8S���7scov_toolbar���ѱmO�^r�����la*k�Ba^	�����+6|2�PixelsqL���8_�oN�W��;z~�!��>�`)���qt%6M����W��;�3��u��coverage superclass7O���tP��la�ͱK�5O>��kz�{���Z�z��kClass1toolbarscov_toolbarlerror
)MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
	scov_formPixelscoverage superclassClass1form	scov_form$PROCEDURE Init
   RETURN NOT THIS.lError
   
ENDPROC
PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   THIS.lError = .T.
   IF TYPE("THISFORMSET.BaseClass") = "C"
      THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine)
   ELSE
      Error nError
   ENDIF
   
ENDPROC
-Caption = "Toolbar1"
Name = "scov_toolbar"
toolbar)MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
scov_textboxPixelscoverage superclassClass1textboxscov_textboxlerror
lerror
$PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   THIS.lError = .T.
   IF TYPE("THISFORMSET.BaseClass") = "C"
      THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine)
   ELSE
      Error nError
   ENDIF
   
ENDPROC
PROCEDURE Init
   RETURN NOT THIS.lError
   
ENDPROC
formscov_container)PROCEDURE Init
   RETURN NOT THIS.lError
   
   
ENDPROC
PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   THIS.lError = .T.
   IF TYPE("THISFORMSET.BaseClass") = "C"
      THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine)
   ELSE
      Error nError
   ENDIF
   
ENDPROC
�5�ҟ����0�z([FontName = "MS Sans Serif"
FontSize = 8
Height = 23
Width = 100
Name = "scov_textbox"
���hm�ԱV͌\��3�E��sڛJ�8textbox�?<:�m�*Ĩ4
H9QA	n�tt�(
 mƐ��H��$�
&�
scov_shapeW�昫zQ[K"��$�-g�L�m��B�,��Z��1�4���CwgBPixels�l/����Rԏ�ĮZ��gl�����b'�#�����Y�XÓ��\��Ucoverage superclassFR=�:��M	w�Tٵz�1	c!Sy���i�h�g���Class.ǽ��9A;��r�6>�V���7|��TV��G��>},���ѣ
��1��A�1MqD�w[杗��6�Z%=����Kbe+�����7������f+��M�G��P���5�shapeG 6�αi��0�s�D�/bx���hַn�wgg8�m�).��˝�U�j
scov_shapelerror
�DoCreate = .T.
Caption = "Coverage Base Form"
FontName = "MS Sans Serif"
FontSize = 8
AllowOutput = .F.
Name = "scov_form"
JMS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
Arial, 1, 9, 6, 15, 12, 32, 3, 0
Pixelscoverage superclassClass#PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   THIS.lError = .T.
   IF TYPE("THISFORMSET.BaseClass") = "C"
      THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine)
   ELSE
      Error nError
   ENDIF


ENDPROC
PROCEDURE Init
   RETURN NOT THIS.lError
   
ENDPROC
.Height = 68
Width = 68
Name = "scov_shape"
shape�iW���c�-	�f��,�i6�����b0�^��zqEZ���ϱ�EXa!��
coverage.h�Ur�1
cov_char.h�Ur�1
cov_locs.h�Ur�1
cov_dlgs.h�Ur�1
cov_spec.h�Ur�1
cov_regs.h�Ur�1
cov_tune.h�Ur�1OMS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
Courier New, 0, 8, 7, 14, 11, 7, 3, 0
cov_optionsdialog
coverage.hPixels'options dialog for coverage standard UI�
coverage.h�Ur�1
cov_char.h�Ur�1
cov_locs.h�Ur�1
cov_dlgs.h�Ur�1
cov_spec.h�Ur�1
cov_regs.h�Ur�1
cov_tune.h�Ur�1cov_addindialog
coverage.hPixels5modal dialog to run add ins from coverage standard UIcov_statisticsPixels0container holding statistics on a file or objectClass7cov_modaldialog1	containerscov_containerClass30cov_modaldialogcov_optionsdialog�AutoSize = .T.
FontBold = .F.
BackStyle = 1
Caption = "Start mode"
Height = 15
Left = 200
Top = 101
Width = 53
TabIndex = 11
ZOrderSet = 23
Name = "lblStartMode"
cov_optionsdialog.lblStartModelabelcoverage.vcx)MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
scov_optiongroupPixelscoverage superclassClass1lLeft = 142
Top = 0
TabIndex = 6
Name = "opgCoverageProfileMode"
Option1.Picture = ("coverage.bmp")
Option1.Caption = ("")
Option1.Left = 0
Option1.SpecialEffect = 2
Option1.Top = 0
Option1.Name = "Option1"
Option2.Picture = ("profile.bmp")
Option2.Caption = ("")
Option2.Left = 23
Option2.SpecialEffect = 2
Option2.Top = 0
Option2.Name = "Option2"
)MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
ذ�i���f�(v�scov_listbox#*sI��l��Ds�7���%هy��ː�v�7��a�R�Sq�Pixels�H�镃bN��7o�����2'%��W��mK���>����OvȾ�|���coverage superclassClass1listboxscov_listboxlerror
cov_addindialog�AutoSize = .T.
BackStyle = 1
Caption = "Add-Ins"
Height = 15
Left = 16
Top = 10
Width = 38
TabIndex = 3
Name = "lblTitle"
cov_addindialog.lblTitleClasslabel$PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   THIS.lError = .T.
   IF TYPE("THISFORMSET.BaseClass") = "C"
      THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine)
   ELSE
      Error nError
   ENDIF
   
ENDPROC
PROCEDURE Init
   RETURN NOT THIS.lError
   
ENDPROC
\FontName = "MS Sans Serif"
FontSize = 8
Height = 170
Width = 100
Name = "scov_listbox"
listbox
scov_labelPixelscoverage superclassClass1label
scov_labellerror
coverage.vcx
scov_labelcov_addindialog.cmdPicKFile11scov_container
commandbuttoncoverage.vcx$PROCEDURE Init
   RETURN NOT THIS.lError
   
ENDPROC
PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   THIS.lError = .T.
   IF TYPE("THISFORMSET.BaseClass") = "C"
      THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine)
   ELSE
      Error nError
   ENDIF
   
ENDPROC
{FontName = "MS Sans Serif"
FontSize = 8
BackStyle = 0
Caption = "Label1"
Height = 17
Width = 40
Name = "scov_label"
label�
coverage.h��Ur�1
cov_char.h��Ur�1
cov_locs.h��Ur�1
cov_dlgs.h�Ur�1
cov_spec.h�Ur�1
cov_regs.h�Ur�1
cov_tune.h�Ur�1scov_formset
coverage.hcoverage superclassClass2formsetscov_formsetBHeight = 22
Left = 0
Top = 0
Width = 33
Name = "cov_toolbar"
scov_formset.cov_toolbarPixelstoolbarcoverage.vcxscov_toolbarlerror
PROCEDURE Init
   THIS.Caption = "..."
   
ENDPROC
PROCEDURE Click
   THISFORM.GetAddIn()
   
ENDPROC
PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   THIS.lError = .T.
   THISFORM.Error(nError, THIS.Name+":"+cMethod, nLine)
   
ENDPROC
scov_commandbutton�PROCEDURE Init
   RETURN NOT THIS.lError
   
ENDPROC
PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   COV_DEBUG_MESSAGE
   COV_DEBUG_ACTION
   THIS.lError = .T.


ENDPROC
Name = "scov_formset"
eyValues[m.nKeyEntry,2] = REG_UNKformsetou will need to use ASC() to check values here.
��� ��xF%G1�U������T���a��)%�C�THISFORMSET.BaseClassb�C��j�$��C����:�������{�	������UNERRORCMETHODNLINETHISLERRORTHISFORMSETERRORNAME
B���
��UTHISLERRORError,��Init���1���A��A3�2�	�)�cov_addindialog.cov_statistics�FontBold = .T.
BackStyle = 1
Caption = "File or Class Name"
Height = 15
Left = 5
Top = 0
Width = 233
ZOrderSet = 9
Name = "lblName"
cov_statistics.lblNamelabelcoverage.vcx�� ��W�%@	.�UT����...��UTHISCAPTION
��C����UTHISFORMGETADDIND�����T���a��$��C����:������UNERRORCMETHODNLINETHISLERRORTHISFORMERRORNAMEInit,��ClickU��Error}��113�3��A2,Hc�	)�)MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
  CASE m.nErrCoscov_editboxnCurrentKey,m.nKeyEntry,@cNewKey,@nKeySize,0Pixelsf)
      cRetTime=SPACE(100)

      m.nErrCode coverage superclassey)
      cbuf=SPACE(100)
      nbuClass
      nKeySize = 0
      cNewKey = SPACE(100)
 1etTime
   nKeyEntry = 0
   DIMENSION aKeyNames[1]
  editboxmes

   LOCAL nKeyEntry,cNewKey,cNewSize,cbuf,nscov_editbox  &&close key
   RETURN m.nErrNum

   LPAlerror

scov_labelMHeight = 0
Left = 27
Top = 53
Width = 52
ZOrderSet = 10
Name = "Line2"
cov_statistics.Line2�AutoSize = .F.
Top = 31
Left = 322
Height = 21
Width = 21
Caption = "..."
TabIndex = 5
ZOrderSet = 5
Name = "cmdPicKFile"
$PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   THIS.lError = .T.
   IF TYPE("THISFORMSET.BaseClass") = "C"
      THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine)
   ELSE
      Error nError
   ENDIF
   
ENDPROC
PROCEDURE Init
   RETURN NOT THIS.lError
   
ENDPROC
[FontName = "MS Sans Serif"
FontSize = 8
Height = 53
Width = 100
Name = "scov_editbox"
editbox cOptName,cOptVal,cKeyPath,nUserKey
   LOCAL iPoscov_custom"ResWidth",@cValue,;
   *      "Software\MicPixels * This routine gets a registry key setting
   * coverage superclassKey()      &&close key
   RETURN m.nClassIS.SetKeyValue(m.cOptName,m.cOptVal)

   * Close 1   RETURN m.nErrNum
   ENDIF

   * Set Key value
  customscov_customlerror
iPROCEDURE Valid
   THISFORM.CheckOKToRun()
   
ENDPROC
PROCEDURE ProgrammaticChange
   THISFORM.CheckOKToRun()
   
   
ENDPROC
PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   THIS.lError = .T.
   THISFORM.Error(nError, THIS.Name+":"+cMethod, nLine)
   
ENDPROC
PROCEDURE InteractiveChange
   THISFORM.CheckOKToRun()
   
   
ENDPROC
cboFileToRuncombobox!PROCEDURE Init
   RETURN NOT THIS.lError
   
ENDPROC
PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   THIS.lError = .T.
   IF TYPE("THISFORMSET.BaseClass") = "C"
      THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine)
   ELSE
      Error nError
   ENDIF

ENDPROC
Name = "scov_custom"
  RETURN m.nErrNum
   ENDIF

  custom"L"
      lEnumKeys = .F.
   ENDIF

   * Open �lerror
*synchsizes Designed to allow tools added into the Coverage standard UI to maintain size and position consistency with original member set.
4Width = 200
Height = 200
Name = "scov_container"
	containeroptiongroupscov_optiongroup
scov_labellineline�AutoSize = .T.
Alignment = 0
Caption = "% Coverage"
Left = 87
Top = 73
Width = 59
ZOrderSet = 8
Name = "lblPercentCaption"
cov_statistics.lblPercentCaptionlabelcoverage.vcx�FontBold = .T.
Value = ("")
Height = 22
Left = 16
TabIndex = 4
Top = 31
Width = 302
ZOrderSet = 4
Name = "cboFileToRun"
coverage.vcx
scov_comboboxcov_addindialog.�AutoSize = .T.
FontBold = .F.
BackStyle = 1
Caption = "Environment"
Height = 15
Left = 200
Top = 168
Width = 61
TabIndex = 13
ZOrderSet = 23
Name = "lblEnvironment"
cov_optionsdialog.lblEnvironmentlabelcoverage.vcx
scov_label�AutoSize = .T.
FontBold = .F.
BackStyle = 1
Caption = "Options"
Height = 15
Left = 16
Top = 10
Width = 38
TabIndex = 1
ZOrderSet = 22
Name = "lblOptions"
cov_optionsdialog.coverage.vcx�
coverage.h��Ur�1
cov_char.h��Ur�1
cov_locs.h��Ur�1
cov_dlgs.h�Ur�1
cov_spec.h�Ur�1
cov_regs.h�Ur�1
cov_tune.h�Ur�1)MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
	cov_frame
coverage.hPixels8top form for coverage standard UI in coverage frame modelerror
optiongroup�
coverage.hVUr�1
cov_char.h^Ur�1
cov_locs.hfUr�1
cov_dlgs.hnUr�1
cov_spec.hvUr�1
cov_regs.h~Ur�1
cov_tune.h�Ur�1lls����SMTP Email Addressl_slater_nicholls@msn.ccov_zoomdialogConnection Type����Connect2�� �x%5���U
��C����UTHISFORMCHECKOKTORUN
��C����UTHISFORMCHECKOKTORUND�����T���a��$��C����:������UNERRORCMETHODNLINETHISLERRORTHISFORMERRORNAME
��C����UTHISFORMCHECKOKTORUNValid,��ProgrammaticChangeX��Error���InteractiveChange	��1�3�4��A3�30Y}�
	:^)�PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   THIS.lError = .T.
   THISFORM.Error(nError, THIS.Name+":"+cMethod, nLine)
   
ENDPROC

lblOptions,�� �S%����UD�����T���a��$��C����:������UNERRORCMETHODNLINETHISLERRORTHISFORMERRORNAMEError,��1��A2�)�Top = 61
Left = 16
Height = 15
Width = 172
AutoSize = .T.
BackStyle = 0
Caption = "Register this Add-In after running"
TabIndex = 6
ZOrderSet = 3
Name = "chkRegisterAddIns"

scov_label�AutoSize = .T.
Alignment = 0
Caption = "Missed"
Height = 15
Left = 87
Top = 38
Width = 35
BackColor = 0,0,0
ZOrderSet = 7
Name = "lblNotCoveredCaption"
cov_statistics.lblNotCoveredCaptionlabelcoverage.vcx
scov_labelopgStartMode
cov_engine
coverage.h
scov_checkbox3ƒ���t�A���t2��t$��t��tu͍A��scov_commandbutton�AutoSize = .F.
Alignment = 1
Caption = "0"
Height = 17
Left = 31
Top = 73
Width = 48
ZOrderSet = 6
Name = "lblPercent"
cov_statistics.
lblPercentlabel
olecontrol����
B���
��UTHISCAPTIONcoverage.vcx�UN'%�C������C���
	:Height = 43
Width = 151
Name = "scov_commonfiledialog"
����{�	������UNERRORCMETHODNLINETHIScoverage.vcx
scov_label|AutoSize = .T.
Alignment = 0
Caption = "Total"
Left = 87
Top = 58
Width = 26
ZOrderSet = 5
Name = "lblTotalCaption"
cov_statistics.lblTotalCaptionlabelcoverage.vcx
scov_labelcov_statistics.vAutoSize = .F.
BackStyle = 0
BorderStyle = 0
Value = 1
Height = 22
SpecialEffect = 1
WIDTH = 46
Name = "cov_picturetoggle"
Option1.FontName = "MS Sans Serif"
Option1.FontSize = 8
Option1.Caption = ("")
Option1.Value = 1
Option1.Height = 22
Option1.Left = 0
Option1.SpecialEffect = 1
Option1.Style = 1
Option1.Top = 0
Option1.WIDTH = 23
Option1.Name = "Option1"
Option2.FontName = "MS Sans Serif"
Option2.FontSize = 8
Option2.Caption = ("")
Option2.Value = 0
Option2.Height = 22
Option2.Left = 23
Option2.SpecialEffect = 1
Option2.Style = 1
Option2.Top = 0
Option2.WIDTH = 23
Option2.Name = "Option2"
��AutoSize = .T.
Alignment = 0
Caption = "Hit"
Height = 15
Left = 87
Top = 23
Width = 15
ZOrderSet = 4
Name = "lblCoveredCaption"
lblCoveredCaptionlabel,OLEObject = C:\WINDOWS\SYSTEM\COMDLG32.OCX
�lforcesearch Forces .InitDir to "" when the dialog shows up rather than allowing the calling method to guess at it based on current surroundings.

cov_dlgs.h&Ur�1scov_commondialog
cov_dlgs.hPixels�#T��&���� CC��Z���U'
OBASELAMS CommDlg (<-OLEControl)��!����#T��&����Class������C�FontName���%��&��C�FontNam1����T�� ��!��T��"����T��#��
olecontrol�����T������T������scov_commondialog�T������T������T�lerror
���T������T������T��(OLEObject = C:\WIN\SYSTEM\COMDLG32.OCX
T��
���
��ࡱ�>��	������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Root Entry���������|-
?|�@OleObjectData����\AccessObjSiteData&������������\ChangedProps�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<����+/I�!C4OO�<� \$828C4C820-401A-101B-A3C9-08002B2F49FB�Alabelcoverage.vcx
scov_label�AutoSize = .T.
FontBold = .F.
BackStyle = 1
Caption = "Fonts"
Height = 15
Left = 16
Top = 235
Width = 28
TabIndex = 15
ZOrderSet = 21
Name = "lblFonts"
coverage.vcx
scov_labelcov_statistics.lblTotal�PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   THIS.lError = .T.
   IF TYPE("THISFORMSET.BaseClass") = "C"
      THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine)
   ELSE
      Error nError
   ENDIF

ENDPROC
PROCEDURE Init
   RETURN (NOT THIS.lError)

ENDPROC
PROCEDURE SHOWOPEN
   *** OLE Control Method ***

ENDPROC
PROCEDURE SHOWSAVE
   *** OLE Control Method ***

ENDPROC
PROCEDURE ShowHelp
   *** OLE Control Method ***

ENDPROC
7Height = 100
Width = 100
Name = "scov_commondialog"

olecontrol)MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
scov_commandbuttonPixelscoverage superclassClass1
commandbuttonscov_commandbuttonlerror
 cov_maindialog_standard.cntTools.Class1	scov_form�AutoSize = .F.
Alignment = 1
Caption = "0"
Height = 17
Left = 31
Top = 58
Width = 48
BackColor = 0,0,0
ZOrderSet = 3
Name = "lblTotal"
labelcoverage.vcx�PROCEDURE Init
   IF EMPTY(THIS.Picture) AND ;
         (NOT EMPTY(THIS.ToolTipText) )
      THIS.Caption = THIS.ToolTipText
   ELSE
      THIS.Caption = ""
   ENDIF
   RETURN NOT THIS.lError
   
ENDPROC
PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   THIS.lError = .T.
   IF TYPE("THISFORMSET.BaseClass") = "C"
      THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine)
   ELSE
      Error nError
   ENDIF
   
ENDPROC
�AutoSize = .T.
Height = 23
Width = 148
FontName = "MS Sans Serif"
FontSize = 8
WordWrap = .F.
Caption = "Coverage Command Button"
Style = 0
Name = "scov_commandbutton"

commandbutton!Arial, 0, 9, 5, 15, 12, 13, 3, 0

scov_comboboxPixelscoverage superclassClass*MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
}��<.�N�<�0c�1combobox
scov_comboboxlerror

scov_label�AutoSize = .F.
Alignment = 1
Caption = "0"
Height = 17
Left = 31
Top = 23
Width = 48
ZOrderSet = 2
Name = "lblCovered"
cov_statistics.
lblCoveredlabelcoverage.vcx!PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   THIS.lError = .T.
   IF TYPE("THISFORMSET.BaseClass") = "C"
      THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine)
   ELSE
      Error nError
   ENDIF

ENDPROC
PROCEDURE Init
   RETURN NOT THIS.lError
   
ENDPROC
ocs.Width

THIS.Adjus2Height = 24
Width = 100
Name = "scov_combobox"
nLine)comboboxMinWidth)
THIS.MinHeight = MAX(nHeight,THIS.Min)MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
".Top") + ;
  
scov_checkboxme+".Width") + ;
            EVAL("THIS."+Pixelsidth, nHeight
IF DODEFAULT(cName,cClass)
   nWidcoverage superclassDURE AddObject
LPARAMETERS cName, cCClassLLTR(STR(.Width - THIS.iLeftListColWidth))
ENDWITH1umnWidths =  ;
    ALLTR(STR(THIS.iLeftListColWidth))+checkboxumnwidths
WITH THIS.lstAvailableObjectsAndProcs
scov_checkboxlerror
	cov_frameocoverageengine
formcoverage.vcx
scov_label�AutoSize = .F.
Alignment = 1
Caption = "0"
Height = 17
Left = 31
Top = 38
Width = 48
ZOrderSet = 1
Name = "lblNotCovered"
cov_statistics.�PROCEDURE Init
   IF EMPTY(THIS.Caption+THIS.Picture) AND ;
         (NOT EMPTY(THIS.ToolTipText) )
      THIS.Caption = THIS.ToolTipText
   ENDIF
   RETURN NOT THIS.lError
   
ENDPROC
PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   THIS.lError = .T.
   IF TYPE("THISFORMSET.BaseClass") = "C"
      THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine)
   ELSE
      Error nError
   ENDIF

ENDPROC
oHeight = 17
Width = 60
FontName = "MS Sans Serif"
FontSize = 8
Caption = "Check1"
Name = "scov_checkbox"
ght 
ENDcheckboxHIS.cntTools.Height TO ;
      THIS.lstAvailabl
lblNotCoveredlabel�Height = 454
Width = 633
ShowWindow = 2
DoCreate = .T.
AutoCenter = .T.
Caption = "Coverage Frame"
Icon = ("coverage.ico")
KeyPreview = .T.
ColorSource = 5
ocoverageengine = .NULL.
Name = "cov_frame"
coverage.vcx
scov_label*setfileorclassnamecaption Sets lblName caption from a passed string, evaluating width.  If string is too long for lblName's width, truncates value on left side with ".." before assigning the value to the label caption.  Shows as much as possible of the original value.
)MS Sans Serif, 0, 8, 7, 16, 13, 14, 3, 0
stry}���scov_statisticsdialogrߒ��markonetargetrecordĖOMS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
Courier New, 0, 9, 7, 15, 12, 8, 3, 0
����	POP3 Portn����Outloo
coverage.h00001�)�00000002����Acov_maindialog_standardcov_optionsdialog.lblFontslabelcoverage.vcx
scov_labelcov_optionsdialog.lblStack
cmdStatistics cov_maindialog_standard.cntTools.<PROCEDURE Init

   THIS.Visible = .F.
   
   
ENDPROC
�
coverage.h��Ur�1
cov_char.h��Ur�1
cov_locs.h��Ur�1
cov_dlgs.h�Ur�1
cov_spec.h�Ur�1
cov_regs.h�Ur�1
cov_tune.h�Ur�1��Unloadm���Init���Load����Errorɫ
coverage.h��clearstatus���markalltargetrecoPixels��lockscreens���getregisteredaddins�
scov_shapecoverage.vcxshape*statistics dialog for coverage standard UIsa���
setClass10cov_modaldialogcov_statisticsdialogcov_statisticsdialog.ursor���setupworkfiles�cntClassesCoveredileislog���fillfiletypearray	containerogfile��suspendcoverage�
��resumelabelcoverage.vcx�
coverage.h�Ur�1
cov_char.h�Ur�1
cov_locs.h�Ur�1
cov_dlgs.h�Ur�1
cov_spec.h�Ur�1
cov_regs.h�Ur�1
cov_tune.h	Ur�1chkRegisterAddInscheckboxcoverage.vcx
scov_checkboxcov_addindialog.chkMatchCaseCDDE3804-2064-11CF-867F-00AA005FF34A}���cov_modaldialog424-0000-0000-C000-000000000046}ci*ccoverage.vcx
scov_shape
scov_labelcheckbox{0002E176-0000-0000-C000-000000000046}�coverage.vcx��setuioptions���passedproperparcov_statisticscov_statisticsdialog.cntLinesCoveredOMS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
Courier New, 0, 8, 7, 14, 11, 7, 3, 0

coverage.h	containercoverage.vcxcov_statistics��� ���%A	/�U.��C�����T����
��C����UTHISFORMSETADDINOCOVERAGEENGINERELEASED�����T���a��$��C����:������UNERRORCMETHODNLINETHISLERRORTHISFORMERRORNAMEClick,��Error���1��3��A2h��)�PROCEDURE Click
   THISFORM.SetAddIn("")
   THISFORM.oCoverageEngine = .NULL.
   THISFORM.Release()

ENDPROC
PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   THIS.lError = .T.
   THISFORM.Error(nError, THIS.Name+":"+cMethod, nLine)
   
ENDPROC
�AutoSize = .F.
Top = 46
Left = 361
Height = 23
Width = 75
Cancel = .T.
Caption = "Cancel"
TabIndex = 2
ZOrderSet = 2
Name = "cmdCancel"
	cmdCancel
commandbuttoncoverage.vcxscov_commandbuttonfTop = 17
Left = 7
Height = 71
Width = 346
SpecialEffect = 0
ZOrderSet = 0
Name = "SCOV_SHAPE1"
cov_addindialog.SCOV_SHAPE1shapecoverage.vcx
scov_shape/*setaddin Sets engine settings for current addin and whether to register addin based on choices in this dialog.
*getaddin Calls engine GetResourceLocation() method to get the name of a file to run as an addin.
*checkoktorun Disables run button if no addin filename has been indicated in the textbox.
formcoverage.vcx
shpSpacer2 cov_maindialog_standard.cntTools.
commandbuttoncoverage.vcxPixels$main dialog for coverage standard UIClassDWidth = 243
Height = 89
BorderWidth = 0
Name = "cov_statistics"
FORM.FontName OR ;
   THIS.lblName.FontSize # THISF17coverage.vcxClass1superclass for coverage standard UI modal dialogs6}VlPixelsProxyStubClsid32����&{00020424-0000-0000-Ccov_maindialog�PROCEDURE Click
   THISFORM.oCoverageEngine.ShowSkippedFiles()

ENDPROC
PROCEDURE Init
   THIS.Caption = COV_STATS_VIEW_FILES_SKIPPED_LOC

ENDPROC
cov_statisticsdialog.
coverage.hm*cTypeLib����&{34F681Dcov_modaldialogB8A733}����Version1.0Nn*N)MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
cov_finddialog.entsTDTProxyStubClsidcov_optionsdialog.�AutoSize = .F.
Top = 159
Left = 307
Height = 23
Width = 138
Caption = "Source Files Skipped"
TabIndex = 8
ZOrderSet = 5
Name = "cmdSkipped"
�
coverage.h��Ur�1
cov_char.h��Ur�1
cov_locs.h��Ur�1
cov_dlgs.h�Ur�1
cov_spec.h�Ur�1
cov_regs.h�Ur�1
cov_tune.h�Ur�1
scov_checkboxlblNotExecutedcov_finddialog.�M����y��E����y��=�����D$_�f��D$�G_scov_commandbuttonUTop = 0
Left = 135
Height = 17
Width = 6
BackColor = 0,0,0
Name = "shpSpacer2"
6PROCEDURE Init

   THIS.Visible = .F.


ENDPROC
cov_picturetogglelabelcov_finddialog.coverage.vcx
cmdSkippedPixelsD����Account Name����Defau�AutoSize = .T.
FontBold = .F.
BackStyle = 1
Caption = "StackLevel XML Analysis"
Height = 15
Left = 16
Top = 322
Width = 122
TabIndex = 20
ZOrderSet = 21
Name = "lblStack"
�AutoSize = .T.
Alignment = 0
Caption = "Not executed:"
Height = 15
Left = 16
Top = 157
Width = 69
TabIndex = 8
ZOrderSet = 20
Name = "lblNotExecuted"

scov_label�AutoSize = .T.
Alignment = 0
Caption = "Executed:"
Height = 15
Left = 16
Top = 127
Width = 50
TabIndex = 6
ZOrderSet = 19
Name = "lblExecuted"
cov_optionsdialog.lblExecutedlabelcoverage.vcx
scov_label�AutoSize = .F.
FontName = "Courier New"
Caption = "Courier New 8"
Height = 23
Left = 113
Top = 287
Width = 423
TabIndex = 19
ZOrderSet = 18
Name = "lblShowFixedFont"
cov_optionsdialog.lblShowFixedFont�AutoSize = .F.
Top = 0
Left = 63
Height = 22
Width = 23
Picture = ("stats.bmp")
Caption = ("")
TabIndex = 3
SpecialEffect = 2
Name = "cmdStatistics"
cov_maindialog_standardjFontName = "Courier New"
Height = 228
Left = 0
TabIndex = 3
Top = 167
Width = 392
Name = "edtCode"
labelcoverage.vcx
scov_label�AutoSize = .F.
Caption = "MS Sans Serif 8"
Height = 26
Left = 113
Top = 259
Width = 423
TabIndex = 17
ZOrderSet = 17
Name = "lblShowBaseFont"
cov_optionsdialog.lblShowBaseFontlabelcoverage.vcx
scov_labelcov_optionsdialog.lblMarksMatchedlabelClasscoverage.vcxTTop = 0
Left = 56
Height = 17
Width = 6
BackColor = 0,0,0
Name = "shpSpacer1"
coverage.vcxsoft Photo Editor 3.0 PhotooDo
checkbox����BC:\Program Files\Common Files\MicrosYPROCEDURE Click
   THISFORM.oCoverageEngine = .NULL.
   THISFORM.Release()

ENDPROC
cov_modaldialog.Rcoverage base engine (<- scov_formset, containing toolbar but no visible elements)�AutoSize = .T.
FontItalic = .F.
BackStyle = 1
Caption = "Mark lengths will be matched"
Height = 15
Left = 16
Top = 188
Width = 139
TabIndex = 10
ZOrderSet = 16
Name = "lblMarksMatched"
coverage.vcx0000-C000-000000000046}����Version5.
chkClasses�CTProxyStubClsid����&{0
scov_label
shpSpacer1cov_saveposition�����������������������������cov_maindialog_standard.edtCodeeditbox:separate code window for coverage standard UI in Zoom modeAccounts�&�OMI Account ManagerI
commandbuttoncoverage.vcxscov_commandbuttoncov_statisticsdialog.��7��J���(��
_oCoveragecmdLogHISLTURNEDOFFTRACELERRORt%�C�	TRBETWEENv�2
commandbutton��$�Ge �T���-���t&�
B��cmdOKcov_standard
coverage.h cov_maindialog_standard.cntTools.cov_optionsdialog.	scov_formcov_zoomdialog�PROCEDURE Click
   LOCAL oLabel

   oLabel = THISFORM.lblShowBaseFont

   WITH THISFORM.oCoverageEngine

      DO CASE
      CASE .GetFontsFromUser(.F.)
         oLabel.FontName   = .cBaseFontName
         oLabel.FontSize   = .nBaseFontSize
         oLabel.FontItalic = .lBaseFontItalic
         oLabel.FontBold   = .lBaseFontBold
         oLabel.Caption    =  oLabel.FontName+" "+ ;
            ALLTR(STR(oLabel.FontSize))
      CASE .lError 
         * did something happen on this call?
         THISFORM.DisableFontSettingButtons()

      OTHERWISE
         *nothing to do
      ENDCASE

   ENDWITH


ENDPROC
2txtNotExecutedtextboxcov_finddialog.4-0000-0000-C000-000000000046}V�CVClass000000}����IDAPairTk*TProxy2���Version1.0Mj*M&{C46C1BF3-3C52-11D	scov_formb����&{34F681D0-3640-11CF-9294-00AA00B8A�Top = 34
Left = 231
Width = 217
Height = 89
TabIndex = 4
Name = "cntClassesCovered"
lblNotCovered.Name = "lblNotCovered"
lblCovered.Name = "lblCovered"
lblTotal.Name = "lblTotal"
lblCoveredCaption.Name = "lblCoveredCaption"
lblTotalCaption.Name = "lblTotalCaption"
lblPercent.Name = "lblPercent"
lblNotCoveredCaption.Name = "lblNotCoveredCaption"
lblPercentCaption.Name = "lblPercentCaption"
Line2.Name = "Line2"
lblName.Name = "lblName"
SPROCEDURE synchsizes
   LOCAL nContainerWidth, nContainerWidth, ;
      nContainerSpacer, nContainerHeight, oControl

   #DEFINE nContainerTopMargin SYSMETRIC(3)


   nContainerWidth =  THIS.BorderWidth
   nContainerHeight = THIS.BorderWidth * 2
   nContainerSpacer = (THIS.BorderWidth*2) + nContainerTopMargin

   FOR EACH oControl IN THIS.Controls
      nContainerHeight = MAX(nContainerHeight, ;
         (oControl.Height  + ;
         nContainerSpacer) )
      oControl.Left    = nContainerWidth
      oControl.Top     = nContainerTopMargin
      nContainerWidth  = nContainerWidth + oControl.WIDTH
   ENDFOR

   WITH THIS
      .WIDTH = nContainerWidth
      .Height = nContainerHeight
   ENDWITH

   THISFORM.nToolCount = THIS.ControlCount

   RETURN NOT THIS.lError
   
ENDPROC
PROCEDURE Init
   RETURN NOT THIS.lError
   
ENDPROC
PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   THIS.lError = .T.
   IF TYPE("THISFORMSET.BaseClass") = "C"
      THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine)
   ELSE
      Error nError
   ENDIF
   
ENDPROC

chkWrapAroundotoEd.exe5D5
InProcHandlerscov_formset�FontName = "Courier New"
Height = 22
Left = 112
TabIndex = 9
Top = 154
Width = 59
ZOrderSet = 15
Name = "txtNotExecuted"
coverage.vcx
shpOptions_VBProjectsT�CTProxyStubClcoverage.vcxscov_textboxcov_optionsdialog.cntTools
cov_regs.h6xUr�1~FontName = "Courier New"
Height = 22
Left = 112
TabIndex = 7
Top = 124
Width = 59
ZOrderSet = 14
Name = "txtExecuted"
txtExecutedtextbox�AutoSize = .F.
Top = 0
Left = 0
Height = 22
Width = 23
Picture = ("save.bmp")
Caption = ""
TabIndex = 2
SpecialEffect = 2
Name = "cmdSave"
coverage.vcxscov_textboxcov_optionsdialog.�
coverage.h��Ur�1
cov_char.h��Ur�1
cov_locs.h��Ur�1
cov_dlgs.h�Ur�1
cov_spec.h�Ur�1
cov_regs.h�Ur�1
cov_tune.h�Ur�1��������������������������������������������������������
coverage.h�FontItalic = .F.
BackStyle = 1
Caption = (repl("w",36))
Height = 15
Left = 113
Top = 375
Width = 218
TabIndex = 23
ZOrderSet = 16
Name = "lblStackXSLT"
lblStackXSLTlabel	cmdAddInscoverage.vcx9PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   THIS.lError = .T.
   IF TYPE("THISFORMSET.BaseClass") = "C"
      THISFORMSET.Error(nError,THIS.Name+":"+cMethod,nLine)
   ELSE
      Error nError
   ENDIF
   
ENDPROC
PROCEDURE Option1.Error
   LPARAMETERS nError, cMethod, nLine
   THIS.Parent.Error(nError, cMethod, nLine)
   
ENDPROC
PROCEDURE Option1.Init
   IF EMPTY(THIS.Caption+THIS.Picture) AND ;
         (NOT EMPTY(THIS.ToolTipText) )
      THIS.Caption = THIS.ToolTipText
   ENDIF

ENDPROC
PROCEDURE Option2.Init
   IF EMPTY(THIS.Caption+THIS.Picture) AND ;
         (NOT EMPTY(THIS.ToolTipText) )
      THIS.Caption = THIS.ToolTipText
   ENDIF

ENDPROC
PROCEDURE Option2.Error
   LPARAMETERS nError, cMethod, nLine
   THIS.Parent.Error(nError, cMethod, nLine)
   
ENDPROC
cov_finddialog.D8InProcHandler32����coverage.vcx
scov_label�AutoSize = .T.
FontBold = .F.
BackStyle = 1
Caption = "Coverage marks"
Height = 15
Left = 16
Top = 101
Width = 79
TabIndex = 5
ZOrderSet = 13
Name = "lblCoverageMarks"
cov_optionsdialog.cov_finddialog.ProxyStubClsid32����&{00shape5.0Q�CQ&{0002E165-0000-0000-C000-000PixelsClass1scov_customcov_saveposition4Height = 19
Width = 40
Name = "cov_saveposition"
����custom��������������������������������������������������coverage.vcx��������������������������������������������JPROCEDURE RightClick

   THISFORMSET.StandardRightClick()


ENDPROC
;ExchangeServer����	Inscov_editboxHHeight = 431
Width = 432
DoCreate = .T.
Caption = "Coverage Options"
HelpContextID = 1895825779
cxsltfilename = ("")
Name = "cov_optionsdialog"
cmdOK.AutoSize = .F.
cmdOK.Top = 16
cmdOK.Left = 350
cmdOK.Height = 23
cmdOK.Width = 75
cmdOK.Cancel = .F.
cmdOK.TabIndex = 25
cmdOK.ZOrderSet = 5
cmdOK.Name = "cmdOK"
lblCoverageMarkslabelcoverage.vcx�PROCEDURE ProgrammaticChange
THISFORM.FieldToSearch("ObjClass", THIS.Value)


ENDPROC
PROCEDURE InteractiveChange
THISFORM.FieldToSearch("ObjClass", THIS.Value)

ENDPROC
coverage.vcx
scov_labelcov_optionsdialog.cov_maindialog_standard.�� ����%����U+
��C����T����
��C����UTHISFORMRESTOREENGINEFONTSOCOVERAGEENGINERELEASEClick,��1���2s)�5subclass of cov_engine to invoke coverage standard UIchkRegisterDefaults
scov_checkbox
cmdOptionscoverage.vcx{0002E157-0000-0000-C000-000000000046}��shpScope�CN&{0002E18C-0000-0000-C000-000000checkbox�Ѓ�3‹����t �����������tw��checkboxscov_textbox046}����Version5.0X�CX&dLeft = 196
Top = 0
TabIndex = 7
Name = "opgPreviewZoomMode"
Option1.Picture = ("preview.bmp")
Option1.Caption = ("")
Option1.Left = 0
Option1.SpecialEffect = 2
Option1.Top = 0
Option1.Name = "Option1"
Option2.Picture = ("zoom.bmp")
Option2.Caption = ("")
Option2.Left = 23
Option2.SpecialEffect = 2
Option2.Top = 0
Option2.Name = "Option2"
�Top = 410
Left = 7
Height = 15
Width = 83
AutoSize = .T.
BackStyle = 0
Caption = "Set as default"
Value = .F.
TabIndex = 24
ZOrderSet = 12
Name = "chkRegisterDefaults"
coverage.vcxcoverage.vcx�Top = 101
Left = 200
Height = 15
Width = 79
FontName = "MS Sans Serif"
FontSize = 8
AutoSize = .T.
BackStyle = 0
Caption = "\<Source code"
Value = .T.
SpecialEffect = 0
Style = 0
TabIndex = 9
Name = "chkSourcecode"
coverage.vcxoptiongroup
scov_checkbox�AutoSize = .F.
Top = 283
Left = 16
Height = 23
Width = 90
WordWrap = .F.
Caption = "Code Font..."
TabIndex = 18
ZOrderSet = 11
Name = "cmdFixedFont"
cov_optionsdialog.cov_zoomdialog.net Mail����	Installed4wPROCEDURE InteractiveChange
   IF THISFORM.TogglePreviewZoomMode()

      THISFORMSET.NotifyTargetRecordChanged()

   ENDIF

   RETURN NOT THIS.lError

ENDPROC
PROCEDURE Option1.Init
   THIS.ToolTipText = COV_PREVIEW_MODE_LOC

   RETURN DODEFAULT()

ENDPROC
PROCEDURE Option2.Init
   THIS.ToolTipText = COV_ZOOM_MODE_LOC

   RETURN DODEFAULT()

ENDPROC
cmdFixedFont
commandbuttoncoverage.vcxedtCodeOutlookExpress����	Installed:coverage.vcxIPOSCSUFFIXCDBFSTEM
CTABLENAMETHISC
cov_dlgs.h&Ur�1scov_commandbuttonkPROCEDURE Init
   LOCAL lReturn
   lReturn = DODEFAULT()
   IF lReturn
      
      THIS.CancelError = .T.
      * force an error if Cancel or Esc is chosen

      THIS.lForceSearch = .F.
      * this custom property can be altered on a
      * type-of-dialog basis -- will force
      * .InitDir to "" when the dialog shows up
      * rather than allowing the calling method
      * to guess at it based on current surroundings.
      THIS.Flags = cdlOFNPathMustExist + ;
         cdlOFNNoChangeDir   + ;
         cdlOFNHideReadOnly  + ;
         cdlOFNExplorer
   ENDIF

   RETURN lReturn AND NOT THIS.lError


ENDPROC
PROCEDURE SHOWOPEN
   *** OLE Control Method ***
   IF THIS.lForceSearch
      THIS.InitDir = ""
   ENDIF
   THIS.Object.ShowOpen
   NODEFAULT

ENDPROC
PROCEDURE SHOWSAVE
   *** OLE Control Method ***
   IF THIS.lForceSearch
      THIS.InitDir = ""
   ENDIF
   THIS.Object.ShowSave
   NODEFAULT

ENDPROC
PROCEDURE ShowHelp
   *** OLE Control Method ***
   IF THIS.lForceSearch
      THIS.InitDir = ""
   ENDIF
   THIS.Object.ShowHelp
   NODEFAULT

ENDPROC
PROCEDURE Error
LPARAMETERS nError, cMethod, nLine
IF ATC("SHOW",cMethod) > 0 AND THIS.CancelError
   * we've forced an error on Esc or Cancel press
   THIS.FileName = ""
   NODEFAULT
ELSE
   DODEFAULT(nError,cMethod,nLine)   
ENDIF   
   
ENDPROC
scov_commonfiledialogscov_commondialog�PROCEDURE setfileorclassnamecaption
LPARAMETERS tcCaption

IF TYPE("tcCaption") # "C" OR TYPE("THISFORM") # "O"
   * toolbar doesn't support TextWidth() although _SCREEN does
   RETURN .F.
ENDIF   

LOCAL lcDisplayText, ;
      liStartChar, liLabelWidth, liMargin, ;
      lvFontName, lvFontSize

IF THIS.lblName.FontName # THISFORM.FontName OR ;
   THIS.lblName.FontSize # THISFORM.FontSize
   * not a problem for the cov_statisticsdialog
   * but I am not sure how else this container 
   * might be used
   lvFontName = THISFORM.FontName
   lvFontSize = THISFORM.FontSize
   THISFORM.FontName = THIS.lblName.FontName
   THISFORM.FontSize = THIS.lblName.FontSize
ENDIF      


lcDisplayText = tcCaption
liMargin = THISFORM.TextWidth("WWW")*2
liStartChar = 1
liLabelWidth = THIS.lblName.Width

DO WHILE liLabelWidth < ;
         THISFORM.TextWidth(lcDisplayText)+ liMargin 
   liStartChar = liStartChar + 1   
   lcDisplayText = ".. "+SUBSTR(tcCaption,liStartChar)

ENDDO

THIS.lblName.Caption = lcDisplayText

IF NOT EMPTY(lvFontName)
   THISFORM.FontName = lvFontName
   THISFORM.FontSize = lvFontSize
ENDIF   

ENDPROC
cov_registryscov_commonfiledialog
cov_dlgs.hiFontName = "Courier New"
Alignment = 0
Height = 172
Left = 0
Top = 0
Width = 280
Name = "edtCode"
Schedule+scov_commandbuttonC�Z��.DBF����B�C�@��scov_optiongroupcoverage.vcxoptiongroupcov_picturetoggle�PROCEDURE Click
   THISFORM.oCoverageEngine.ShowTextLog(.T.)
   
ENDPROC
PROCEDURE Init
   THIS.Caption = COV_STATS_VIEW_SOURCE_LOG_LOC

ENDPROC
cov_statisticsdialog.����������(�C�����editbox9Communicator����	Installededitboxformntral Europeanwhw1251����IE
cmdProjectNBASEMONOFONTSIZELBASEMONOFONTBOLDLBASEMcov_optionsdialog.cmdBaseFontClass1Pixels"graphical option button group of 2cov_picturetoggle�ColumnCount = 2
ColumnWidths = (STR(THISFORM.WIDTH/2)+","+STR(THISFORM.WIDTH*2))
RowSourceType = 6
Value = 1
Height = 132
Left = 0
TabIndex = 2
Top = 37
Width = 392
IntegralHeight = .T.
Name = "lstAvailableObjectsAndProcs"
-PROCEDURE ProgrammaticChange



ENDPROC

scov_label
commandbuttonSEFONTSIZE
LBASEFONTBOLDLBASEFONTITALICcoverage.vcxopgCoverageProfileMode cov_maindialog_standard.cntTools.
scov_shapeClasscmdSave
scov_checkbox
commandbuttoncoverage.vcxcov_finddialog.ertyT�CTProxyStubClsidcoverage.vcxARKEXECUTEDCMARKNOTEXECUTEDLREGISTERADDI
cov_regs.h�AutoSize = .F.
Top = 254
Left = 16
Height = 23
Width = 90
WordWrap = .F.
Caption = "Display Font..."
TabIndex = 16
ZOrderSet = 10
Name = "cmdBaseFont"
scov_commandbuttoncov_optionsdialog.scov_commandbutton�BackStyle = 0
Height = 55
Left = 192
Top = 107
Width = 150
TabIndex = 12
ZOrderSet = 1
Name = "opgStartMode"
Option1.Caption = "Coverage"
Option1.Height = 15
Option1.Left = 8
Option1.Top = 12
Option1.Width = 64
Option1.AutoSize = .T.
Option1.Name = "Option1"
Option2.Caption = "Profile"
Option2.Height = 15
Option2.Left = 8
Option2.Top = 32
Option2.AutoSize = .T.
Option2.Name = "Option2"
�AutoSize = .F.
Top = 370
Left = 16
Height = 23
Width = 90
WordWrap = .F.
Caption = "XSL Transform..."
TabIndex = 22
ZOrderSet = 10
Name = "cmdStackXSLT"
cmdStackXSLT
cov_enginecov_engine.COV_TOOLBAR.label32����&{00020424-0000-0000-C000-000000000046
scov_shape
commandbuttoncoverage.vcxcPROCEDURE Init
   THIS.Caption = COV_STATS_VIEW_DETAILS_LOC
   RETURN DODEFAULT()
   
ENDPROC
�AutoSize = .T.
FontName = "MS Sans Serif"
FontSize = 8
BackStyle = 1
Caption = "Options"
Height = 15
Left = 15
Top = 41
Width = 38
TabIndex = 3
Name = "lblOptions"

commandbuttoncov_maindialog_standard.
scov_labelTypeLib����&{0002E157-0000-0000-scov_commandbuttoncov_statisticsdialog.cov_optionsdialog.�Top = 34
Left = 10
Width = 217
Height = 89
TabIndex = 3
Name = "cntLinesCovered"
lblNotCovered.Name = "lblNotCovered"
lblCovered.Name = "lblCovered"
lblTotal.Name = "lblTotal"
lblCoveredCaption.Name = "lblCoveredCaption"
lblTotalCaption.Name = "lblTotalCaption"
lblPercent.Name = "lblPercent"
lblNotCoveredCaption.Name = "lblNotCoveredCaption"
lblPercentCaption.Name = "lblPercentCaption"
Line2.Name = "Line2"
lblName.Name = "lblName"
�AutoSize = .F.
Top = 159
Left = 162
Height = 23
Width = 138
Caption = "Source Text Log"
TabIndex = 7
ZOrderSet = 4
Name = "cmdLog"
���<��UTHISRESUMECOVERAGELT�AutoSize = .F.
Top = 12
Left = 348
Height = 23
Width = 75
Cancel = .T.
Caption = "OK"
Default = .T.
ToolTipText = "OK"
Name = "cmdOK"

chkSourcecodelabel00-C000-000000000046}����_PropertiesT�Cscov_commandbutton�PROCEDURE Click
   THISFORM.oCoverageEngine.ShowProjectStatistics()
   

ENDPROC
PROCEDURE Init
   THIS.Caption = COV_STATS_VIEW_PROJECT_LOC

ENDPROC
�AutoSize = .F.
Top = 159
Left = 17
Height = 23
Width = 138
Caption = "Statistics By Project..."
TabIndex = 6
ZOrderSet = 3
Name = "cmdProject"
LUSINGREGISTRYAADDINSSETREGIcoverage.vcxr New����IEPropFontNameArial����Pixels.from Randy Brown's REGISTRY.PRG, <-scov_customshpSplitter�AutoSize = .T.
BackStyle = 1
Caption = "View Details"
Height = 18
Left = 19
Top = 140
Width = 76
TabIndex = 5
ZOrderSet = 2
Name = "lblView"
lblViewlabelcoverage.vcx
scov_label�PROCEDURE RightClick
   THISFORMSET.StandardRightClick()

ENDPROC
PROCEDURE DragDrop
   LPARAMETERS oSource, nXCoord, nYCoord
   THISFORM.RespondToSplitter(nYCoord - THISFORM.shpSplitter.Height)
   RETURN NOT THIS.lError
   
   
ENDPROC
cPROCEDURE Init
   THIS.Caption = COV_STATS_VIEW_DETAILS_LOC
   RETURN DODEFAULT()
   
ENDPROC
cov_statisticsdialog.
lblStatisticsshapecoverage.vcx
scov_shape	containers in _SCREEN or something
   RETURN .F.
ENDIFcoverage.vcxtion") # "C" OR TYPE("THISFORM") # "O"
   *�PROCEDURE RightClick
   THISFORMSET.StandardRightClick()

ENDPROC
PROCEDURE Init
   STORE THISFORM.BackColor TO THIS.BackColor, ;
      THIS.BorderColor, ;
      THIS.FillColor
      
      
ENDPROC
Classcov_maindialog_standard.lstAvailableObjectsAndProcs�Top = 71
Left = 16
Height = 15
Width = 154
AutoSize = .T.
Alignment = 0
BackStyle = 0
Caption = "Mark all code while log loads"
TabIndex = 4
ZOrderSet = 9
Name = "chkMarkAllOnLoad"
cusRegistrychkMarkAllOnLoad
commandbutton4PROCEDURE ProgrammaticChange
DODEFAULT()
THISFORM.CheckFindButton(.T.)

ENDPROC
PROCEDURE InteractiveChange
DODEFAULT()
THISFORM.CheckFindButton(.T.)

ENDPROC
PROCEDURE KeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl
IF DODEFAULT(nKeyCode,nShiftAltCtrl)
   IF nKeyCode = 13
      * somehow if I don't swallow
      * the keypress in this modaless
      * dialog it ends up pressing a 
      * button in the main button interface
      NODEFAULT
      THISFORM.cmdOK.Click()
      RETURN .F.
   ENDIF
ELSE
   RETURN .F.
ENDIF   
   
ENDPROC
�PROCEDURE Init

   THIS.ToolTipText = COV_OPTIONS_LOC

   RETURN DODEFAULT()

ENDPROC
PROCEDURE Click

   THISFORMSET.GetOptionsFromUser()

   RETURN NOT THIS.lError

ENDPROC
customoptiongroupcheckboxcTop = 93
Left = 8
Height = 31
Width = 283
BackStyle = 0
SpecialEffect = 0
Name = "shpScope"
00-0000-C000-00000000coverage.vcx�PROCEDURE ProgrammaticChange
THISFORM.FieldToSearch("Hostfile", THIS.Value)

ENDPROC
PROCEDURE InteractiveChange
THISFORM.FieldToSearch("Hostfile", THIS.Value)

ENDPROC
coverage.vcx
scov_checkboxcov_optionsdialog.�AutoSize = .T.
BackStyle = 1
Caption = "Statistics"
Height = 18
Left = 16
Top = 10
Width = 55
TabIndex = 2
ZOrderSet = 2
Name = "lblStatistics"
�PROCEDURE Click
LOCAL lcFile

WITH THISFORM
   lcFile = .oCoverageEngine.GetResourceLocation("", ;
         COV_GETXSLTFILE_TITLE_LOC, ;
         COV_XSLFILES_LOC + " (*.xsl;*.xslt)|*.xsl;*.xslt|" + ;
         COV_ALLFILES_LOC+" (*.*)|*.*" ,;
         .cXSLTFileName, ;
         "GETFILE" )
   IF NOT EMPTY(SYS(2000,lcFile))
      .SetStackXSLTDisplayName(lcFile)
      .cXSLTFileName = lcFile
   ENDIF   
ENDWITH   
   
      


ENDPROC
chkRegisterAddIns�Top = 56
Left = 127
Height = 15
Width = 80
FontName = "MS Sans Serif"
FontSize = 8
AutoSize = .T.
BackStyle = 0
Caption = "\<Wrap around"
Value = .F.
SpecialEffect = 0
Style = 0
TabIndex = 5
Name = "chkWrapAround"

MiscStatuschkFileNames�u�����~Ѓ�3ƒ���t�A���t*��t��Top = 50
Left = 16
Height = 15
Width = 143
AutoSize = .T.
Alignment = 0
BackStyle = 0
Caption = "Register Add-Ins when run"
TabIndex = 3
ZOrderSet = 8
Name = "chkRegisterAddIns"
	containercoverage.vcx0-887F-00A0C90F2744}����SelectedComplistboxcoverage.vcx1scov_customcov_registryscov_listboxlabelcheckboxcoverage.vcx
scov_checkbox�Top = 29
Left = 16
Height = 15
Width = 106
AutoSize = .T.
Alignment = 0
BackStyle = 0
Caption = "Use Smart Pathing"
TabIndex = 2
ZOrderSet = 7
Name = "chkSmartPath"
 cov_maindialog_standard.cntTools.cmdFindcoverage.vcxvHeight = 15
Width = 65
nuserkey = 0
ncurrentos = 0
ncurrentkey = 0
lcreatekeyonset = .T.
Name = "cov_registry"
custom�Top = 0
Left = 0
Height = 191
Width = 305
ShowWindow = 1
DoCreate = .T.
Caption = "Zoom Marked Code"
Visible = .F.
Icon = ("coverage.ico")
KeyPreview = .T.
HelpContextID = 22990011
Name = "cov_zoomdialog"

scov_labelcov_optionsdialog.chkSmartPathcheckboxcoverage.vcx
scov_checkboxcov_optionsdialog.textboxProxyStubClsid����&{00020424-00coverage.vcxjTop = 147
Left = 7
Height = 46
Width = 447
SpecialEffect = 0
ZOrderSet = 1
Name = "shpDetailFrame"
cov_statisticsdialog.Pixels0common FileOpen/FileSave dialog for coverage useClass�PROCEDURE Click
   THISFORMSET.ShowFindDialog()

   RETURN NOT THIS.lError
   
ENDPROC
PROCEDURE Init
   THIS.ToolTipText = COV_FIND_LOC

   RETURN DODEFAULT()
   
ENDPROC
shpDetailFrame�
F����
��C������C-����B�
commandbuttoncoverage.vcxshape�����H���
�C'
��T���� ��coverage.vcxct�.frt�.lbt�����
T�����>��
scov_shape�
F����G-(�����
�-�+�C+
����scov_commandbutton4PROCEDURE Init

   THIS.Visible = .F.

ENDPROC
cov_statisticsdialog.�T��C���G((�Hostfile�-��Top = 346
Left = 16
Height = 15
Width = 212
AutoSize = .T.
Alignment = 0
BackStyle = 0
Caption = "Generate extended StackLevel XML tree"
TabIndex = 21
ZOrderSet = 7
Name = "chkExtendedStackXML"
chkExtendedStackXMLcheckbox)MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
nvertTo����cov_finddialogt Imager 2.0 Picture-D-
Nocoverage.vcxe��E+\�qY��e��E;\�qYt�e��E.�L\Y�,�qY�shpFrameT��C��Target��
���>�
T���UTop = 1
Left = 244
Height = 17
Width = 6
BackColor = 0,0,0
Name = "shpSpacer4"
sTop = 17
Left = 7
Height = 117
Width = 447
BackStyle = 0
SpecialEffect = 0
ZOrderSet = 0
Name = "shpFrame"
Temp�shape�PROCEDURE InteractiveChange
   * this formset is assuming one set of
   * files, one main dialog, no real need to pass aliases...

   THISFORMSET.ToggleCoverageProfileMode()
   THISFORM.lstAvailableObjectsAndProcs.Valid()     

   RETURN NOT THIS.lError
   
ENDPROC
PROCEDURE Option1.Init
   THIS.ToolTipText = COV_COVERAGE_MODE_LOC

   RETURN DODEFAULT()
   
ENDPROC
PROCEDURE Option2.Init
   THIS.ToolTipText = COV_PROFILE_MODE_LOC

   RETURN DODEFAULT()
   
ENDPROC

commandbuttoncoverage.vcx
scov_checkboxcov_optionsdialog.	cmdCancelcmdOpen1 cov_maindialog_standard.cntTools.�
coverage.h��Ur�1
cov_char.h��Ur�1
cov_locs.h��Ur�1
cov_dlgs.h�Ur�1
cov_spec.h�Ur�1
cov_regs.h�Ur�1
cov_tune.h�Ur�1osoft Imager 2.0 Picture->D-
NotInsertabl1coverage.vcx
shpSpacer4
coverage.h
scov_shape�DragMode = 1
DragIcon = ("ho_split.cur")
DefLeft = 
Top = 161
Left = (-THISFORM.nmargin)
Height = 2
Width = 404
BorderWidth = 0
FillStyle = 0
MousePointer = 7
Name = "shpSplitter"
Pixelsshapeformed does not exist.��Coverage Profiler� �Procoverage.vcx��%�CC���
]�����
T�
����U��C�~PROCEDURE Click
   THISFORM.RestoreEngineFonts()
   THISFORM.oCoverageEngine = .NULL.
   THISFORM.Release()
   
ENDPROC

commandbutton
cov_enginecov_standardcoverage.vcxHeight = 231
Width = 461
DoCreate = .T.
Caption = "Coverage Statistics"
HelpContextID = 1895825781
Name = "cov_statisticsdialog"
cmdOK.AutoSize = .F.
cmdOK.Top = 201
cmdOK.Left = 379
cmdOK.Height = 23
cmdOK.Width = 75
cmdOK.TabIndex = 1
cmdOK.Name = "cmdOK"
�AutoSize = .F.
Top = 41
Left = 225
Width = 66
Cancel = .T.
Caption = "Cancel"
ToolTipText = "Cancel"
Name = "cmdCancel"
coverage.vcxcoverage.vcxcoverage.vcx	txtSearch00000046}V�CVProxyStubClsid32cov_finddialog.0-0000-C000-000000000046}c�CcpFontSize = 8
Height = 23
Left = 60
MaxLength = 255
TabIndex = 2
Top = 12
Width = 156
Name = "txtSearch"
00-C000-�AutoSize = .F.
Top = 0
Left = 253
Height = 22
Width = 23
Picture = ("find.bmp")
Caption = ("")
TabIndex = 8
SpecialEffect = 2
Name = "cmdFind"
)MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
,utility.fxp,5
cov_maindialog5,utility.fxp,5
      0.000,,toolbarenable�Height = 250
Width = 450
ShowWindow = 1
DoCreate = .T.
AutoCenter = .T.
BorderStyle = 2
Caption = "Dialog for Modal Calls from within Coverage Engine Formset"
MaxButton = .F.
MinButton = .F.
Icon = ("coverage.ico")
Name = "cov_modaldialog"
scov_commandbutton8Modaless "Find" dialog for Coverage Profiler standard UI
scov_shapeClass13�PROCEDURE Click
   LOCAL oLabel

   oLabel = THISFORM.lblShowFixedFont


   WITH THISFORM.oCoverageEngine
      .lError = .F.
      DO CASE
      CASE .GetFontsFromUser(.T.)
         oLabel.FontName   = .cBaseMonoFontName
         oLabel.FontSize   = .nBaseMonoFontSize
         oLabel.FontItalic = .lBaseMonoFontItalic
         oLabel.FontBold   = .lBaseMonoFontBold
         oLabel.Caption    = oLabel.FontName+" "+ ;
            ALLTR(STR(oLabel.FontSize))

      CASE .lError 
         * did something happen on this call?
         THISFORM.DisableFontSettingButtons()
      OTHERWISE
         *nothing to do
      ENDCASE

   ENDWITH




ENDPROC
scov_commandbuttonocoverageengine
cov_registrycov_optionsdialog.shpOptionsFrame�nuserkey
cregdllfile
ncurrentos
ncurrentkey
lloadeddlls
lcreatekey
lcreatekeyonset
*loadregfuncs 
*openkey 
*closekey 
*setregkey 
*getregkey 
*getkeyvalue 
*setkeyvalue 
*deletekey 
*enumoptions 
*iskey 
*enumkeys 
*enumkeyvalues 
�AutoSize = .F.
Top = 45
Left = 350
Height = 23
Width = 75
Cancel = .T.
Caption = "Cancel"
TabIndex = 26
ZOrderSet = 6
Name = "cmdCancel"
shapeeTop = 48
Left = 8
Height = 31
Width = 208
BackStyle = 0
SpecialEffect = 0
Name = "shpOptions"
�&{0002E157-0000scov_commandbutton
scov_shapecoverage.vcx000-C000-000000000046}c�CcTy cov_maindialog_standard.cntTools.cov_modaldialogcov_finddialog�
coverage.h��Ur�1
cov_char.h��Ur�1
cov_locs.h��Ur�1
cov_dlgs.h�Ur�1
cov_spec.h�Ur�1
cov_regs.h�Ur�1
cov_tune.h�Ur�1   0.013,,toolbarenabled,71,utility.fxp,5
      0.000,,t
coverage.h  0.000,,toolbarenabled,74,utility.fxp,5
     coverage.vcxPixelsd,72,utility.fxp,5
      0.000,,toolbarenabled,73,0suggested base-level main dialog for coverage UIClass1	scov_form,PROCEDURE Click
RELEASE THISFORM
ENDPROC
cov_finddialog.cov_maindialog*synchsizes 
form.fxp,5
      0.000,,toolbarenabled,71,utility.fxp,5
	cmdCancel9PROCEDURE Init
   LOCAL lReturn
   lReturn = DODEFAULT()
   IF lReturn
      THIS.Caption = COV_DIALOG_CAPTION_LOC
   ENDIF
   RETURN lReturn AND NOT THIS.lError
   
ENDPROC
PROCEDURE Unload
   LOCAL oForm, lOtherMainDialogs
   IF TYPE("THISFORMSET.cSourceFile") # "C" OR EMPTY(THISFORMSET.cSourceFile)
      RETURN
   ENDIF

   FOR EACH oForm IN THISFORMSET.Forms
      IF oForm.CLASS == THIS.CLASS
         lOtherMainDialogs = .T.
         EXIT
      ENDIF
   ENDFOR

   IF NOT lOtherMainDialogs
      RELEASE THISFORMSET
   ENDIF

ENDPROC
wHeight = 93
Width = 269
DoCreate = .T.
AutoCenter = .T.
Caption = "Coverage Main Dialog"
Name = "cov_maindialog"
tyTop = 16
Left = 7
Height = 79
Width = 335
BackStyle = 0
SpecialEffect = 0
ZOrderSet = 4
Name = "shpOptionsFrame"
coverage.vcx
scov_shapecov_optionsdialog.shape&{0002E157-0000-0000-C000-000000000046}����
scov_labeloduleT�CTProxyStubClsid���opgPreviewZoomMode
commandbutton�PROCEDURE Init
   THIS.ToolTipText = COV_SAVE_LOC

   RETURN DODEFAULT()
   
   
ENDPROC
PROCEDURE Click
   THISFORMSET.SaveTargetToDisk()

   RETURN NOT THIS.lError
   
   
ENDPROC
formsetoptiongroupcoverage.vcxcoverage.vcxcov_picturetoggle4PROCEDURE Init

   THIS.Visible = .F.

ENDPROC
coverage.vcxed,74,utility.fxp,5
      0.000,,formisobjecUTop = 0
Left = 189
Height = 17
Width = 6
BackColor = 0,0,0
Name = "shpSpacer3"
scov_commandbuttoncov_finddialog.wTop = 241
Left = 7
Height = 75
Width = 335
BackStyle = 0
SpecialEffect = 0
ZOrderSet = 3
Name = "shpFontFrame"
shpFontFrameshapecheckboxshapescov_containerform cov_maindialog_standard.cntTools.coverage.vcx
lblOptions cov_maindialog_standard.cntTools.label
shpSpacer3cov_finddialog.000000000046}V�CVProxyStu
lblLookForStubClsid����&{00020424-0000-0000-C000-coverage.vcxcov_optionsdialog.scov_optiongroupcoverage.vcxformsetcoverage.vcxcoverage.vcx����Version5.0Q�CQ&{000
commandbutton�Top = 101
Left = 118
Height = 15
Width = 39
FontName = "MS Sans Serif"
FontSize = 8
AutoSize = .T.
BackStyle = 0
Caption = "F\<iles"
Value = .T.
SpecialEffect = 0
Style = 0
TabIndex = 8
Name = "chkFileNames"
coverage.vcx0000-C000-000000000046}V�CVPQcfieldstosearch
*fieldtosearch 
*checkfindbutton 
*find 
*infindagainstate 
coverage.vcx46}c^CcTypeLib����&{C�Height = 398
Width = 399
ShowWindow = 1
DoCreate = .T.
ShowTips = .T.
AutoCenter = .T.
Caption = "Coverage Main Dialog Standard UI"
Icon = ("coverage.ico")
KeyPreview = .T.
HelpContextID = 1895825777
nmargin = (SYSMETRIC(3))
nlastsplitterposition = 0
ntoolcount = 0
ileftlistcolwidth = (THIS.WIDTH/2)
ilistmousestart = 0
nlistrowheight = 0
Name = "cov_maindialog_standard"
�Height = 136
Width = 302
ShowWindow = 1
DoCreate = .T.
AutoCenter = .T.
Caption = "Find"
MaxButton = .F.
HelpContextID = 22990012
cfieldstosearch = ("")
Name = "cov_finddialog"
cmdOK.Top = 12
cmdOK.Left = 225
cmdOK.Height = 23
cmdOK.Width = 66
cmdOK.FontSize = 8
cmdOK.Cancel = .F.
cmdOK.Caption = "\<Find Next"
cmdOK.Default = .T.
cmdOK.TabIndex = 10
cmdOK.Name = "cmdOK"

scov_shape�PROCEDURE Init

   THIS.ToolTipText = COV_STATISTICS_LOC

   RETURN DODEFAULT()

ENDPROC
PROCEDURE Click

   THISFORMSET.ShowStatistics()

   RETURN NOT THIS.lError

ENDPROC
�PROCEDURE Init
   THIS.ToolTipText = COV_OPEN_LOC

   RETURN DODEFAULT()
   
ENDPROC
PROCEDURE Click
   THISFORMSET.SetUpWorkFiles()

   RETURN NOT THIS.lError
   
ENDPROC
coverage.vcxL$+�ÍA��L$+��W�|$�L$��t�A���� cov_maindialog_standard.cntTools. cov_maindialog_standard.cntTools.�Top = 56
Left = 20
Height = 15
Width = 74
FontName = "MS Sans Serif"
FontSize = 8
AutoSize = .T.
BackStyle = 0
Caption = "\<Match case"
Value = .F.
SpecialEffect = 0
Style = 0
TabIndex = 4
Name = "chkMatchCase"
	Dmvbeecheckbox
scov_checkbox00000046}c�CcTypeLib����PROCEDURE ProgrammaticChange
THISFORM.FieldToSearch("Sourcecode", THIS.Value)

ENDPROC
PROCEDURE InteractiveChange
THISFORM.FieldToSearch("SourceCode", THIS.Value)

ENDPROC
�PROCEDURE Init
LOCAL llReturn, lcFormName

llReturn =  DODEFAULT()

IF llReturn

   WITH THISFORMSET
 
      lcFormName = PROPER(THISFORM.Name)
      THISFORM.Height = .GetRegistryKeyValue(lcFormName+"Height",THISFORM.Height)
      THISFORM.Top = .GetRegistryKeyValue(lcFormName+"Top",THISFORM.Top)         
      THISFORM.Left = .GetRegistryKeyValue(lcFormName+"Left",THISFORM.Left)         
      THISFORM.Width =.GetRegistryKeyValue(lcFormName+"Width",THISFORM.Width)

   ENDWITH

ENDIF  

RETURN llReturn AND (NOT THIS.lError)
      
ENDPROC
PROCEDURE Destroy
LOCAL lcFormName

lcFormName = PROPER(THISFORM.Name)

WITH THISFORMSET

   .SetRegistryKeyValue(lcFormName+"Height", THISFORM.Height) 
   .SetRegistryKeyValue(lcFormName+"Top", THISFORM.Top) 
   .SetRegistryKeyValue(lcFormName+"Width", THISFORM.Width) 
   .SetRegistryKeyValue(lcFormName+"Left", THISFORM.Left)

ENDWITH   

DODEFAULT()
      
ENDPROC
xTop = 328
Left = 7
Height = 75
Width = 335
BackStyle = 0
SpecialEffect = 0
ZOrderSet = 3
Name = "shpStackFrame"
cov_optionsdialog.�AutoSize = .T.
FontName = "MS Sans Serif"
FontSize = 8
BackStyle = 0
Caption = "\<Look for:"
Height = 15
Left = 8
Top = 16
Width = 44
TabIndex = 1
Name = "lblLookFor"
00046}�AutoSize = .F.
Top = 0
Left = 111
Height = 22
Width = 23
Picture = ("options.bmp")
Caption = ("")
TabIndex = 5
SpecialEffect = 2
Name = "cmdOptions"
�Top = 101
Left = 20
Height = 15
Width = 54
FontName = "MS Sans Serif"
FontSize = 8
AutoSize = .T.
BackStyle = 0
Caption = "\<Classes"
Value = .T.
SpecialEffect = 0
Style = 0
TabIndex = 7
Name = "chkClasses"
eferencesT�CT�nmargin Stores standard margin for use when sizing and positioning various dialog elements.
nlastsplitterposition
linzoommode Stores current zoom versus preview mode status.
ntoolcount Stores number of items in tool container.
ileftlistcolwidth Stores leftmost listbox column width for custom sizing.
ilistmousestart Stores initial mouse position when mouse is dragged to size list columns.
nlistrowheight Stores current listbox rowheight.
*setinitialcontrolproperties Initializes relative sizes and positions of listbox, editbox, and splitter object.
*setinitialformproperties Initializes appropriate form attributes given current SYSMETRIC()s.
*respondtosplitter Evaluates appropriate action when the splitter object is dragged, so listbox and editbox sizes and positions can be synchronized.
*togglepreviewzoommode Changes disposition of dialog when Preview/Zoom mode is toggled.
*adjustlistcolumnwidths Adjusts list columns in response to dialog resize or mouse-dragging of the list columns.
*addtool Adds a member object to the tool-holding container in this dialog.
*setlistrowheight Sets list rowheight to correspond to current font attributes.

shpStackFrameshapecoverage.vcx�AutoSize = .F.
Top = 0
Left = 27
Height = 22
Width = 23
Picture = ("open.bmp")
Caption = ("")
TabIndex = 1
SpecialEffect = 2
Name = "cmdOpen"
coverage.vcx
scov_shapecov_finddialog.Version5.0P�CP&{0002E17lblScopeTypeLib����&{0002E157-0000-0000-C000optiongroupopgFramecov_optionsdialog.coverage.vcxscov_optiongroupform.�B\E�,�qY\�eq��\WqY\�eq��
\7qY��eq��\wqY�coverage.vcxshape
scov_shape��� ���%3SO�UUProgrammaticChange,��14")�coverage.vcxform-11D2-800F-0080C886279C}����Version2.0Y_
commandbuttonscov_commandbuttoneLeft = 0
Width = 392
Height = 34
BackStyle = 0
BorderWidth = 0
TabIndex = 1
Name = "cntTools"
formBTop = 3
Left = 5
Height = 15
Width = 22
Name = "cusRegistry"
xTop = 107
Left = 7
Height = 122
Width = 175
BackStyle = 0
SpecialEffect = 0
ZOrderSet = 2
Name = "shpMarkFrame"
cov_optionsdialog.shpMarkFrameshapecoverage.vcx�AutoSize = .T.
FontName = "MS Sans Serif"
FontSize = 8
BackStyle = 1
Caption = "Search"
Height = 15
Left = 15
Top = 87
Width = 36
TabIndex = 6
Name = "lblScope"
&{0002042GPROCEDURE Init

   THIS.ToolTipText = COV_ADDINS_LOC

   RETURN DODEFAULT()

ENDPROC
PROCEDURE Click
   LOCAL lReturn

   lReturn = THISFORMSET.ShowModalDialog(COV_ADDINDIALOG, COV_ADDIN_CLASSLIB)

   IF lReturn
      lReturn = THISFORMSET.RunAddIn()
   ENDIF

   RETURN lReturn AND NOT THIS.lError

ENDPROC
cBackStyle = 0
Height = 55
Left = 192
Top = 174
Width = 150
TabIndex = 14
ZOrderSet = 1
Name = "opgFrame"
Option1.Caption = "Coverage frame"
Option1.Left = 8
Option1.Top = 12
Option1.AutoSize = .T.
Option1.Name = "Option1"
Option2.Caption = "FoxPro frame"
Option2.Left = 8
Option2.Top = 32
Option2.AutoSize = .T.
Option2.Name = "Option2"
�AutoSize = .F.
Top = 0
Left = 87
Height = 22
Width = 23
Picture = ("addins.bmp")
Caption = ("")
TabIndex = 4
SpecialEffect = 2
Name = "cmdAddIns"
�
coverage.h�Ur�1
cov_char.h�Ur�1
cov_locs.h�Ur�1
cov_dlgs.h�Ur�1
cov_spec.h�Ur�1
cov_regs.h�Ur�1
cov_tune.h�Ur�1�PROCEDURE InteractiveChange
THISFORM.CheckFindButton(.T.)
ENDPROC
PROCEDURE ProgrammaticChange
THIS.InteractiveChange()
ENDPROC
�ButtonCount = 2
Value = 1
Height = 46
Width = 71
Name = "scov_optiongroup"
Option1.FontName = "MS Sans Serif"
Option1.FontSize = 8
Option1.Caption = "Option1"
Option1.Value = 1
Option1.Height = 17
Option1.Left = 5
Option1.Top = 5
Option1.Width = 61
Option1.Name = "Option1"
Option2.FontName = "MS Sans Serif"
Option2.FontSize = 8
Option2.Caption = "Option2"
Option2.Height = 17
Option2.Left = 5
Option2.Top = 24
Option2.Width = 61
Option2.Name = "Option2"
GPROCEDURE RightClick
   THISFORMSET.StandardRightClick()

ENDPROC
PROCEDURE Init
   THIS.SynchSizes()
   RETURN NOT THIS.lError
   
ENDPROC
PROCEDURE synchsizes

   LOCAL loButton, lnWidth, loModelControl 
   
   loModelControl = THIS.Controls(1)
   
  
   IF TYPE("THIS.opgCoverageProfileMode.Class") = "C"
      WITH THIS.opgCoverageProfileMode
         lnWidth = 0      
         FOR EACH loButton IN .Buttons
             IF NOT EMPTY(loButton.Picture)
                loButton.Caption = ""
                loButton.Autosize = .F.
                loButton.Height = loModelControl.Height
                loButton.Width = loModelControl.Width
                loButton.Top = 0
             ENDIF
             loButton.Left = lnWidth                          
             lnWidth = lnWidth + loButton.Width             
         ENDFOR
         .Width = lnWidth      
      ENDWITH
   ENDIF
   
   IF TYPE("THIS.opgPreviewZoomMode.Class") = "C"
      WITH THIS.opgPreviewZoomMode
         lnWidth = 0      
         FOR EACH loButton IN .Buttons
             IF NOT EMPTY(loButton.Picture)
                loButton.Caption = ""
                loButton.Autosize = .F.
                loButton.Height = loModelControl.Height
                loButton.Width = loModelControl.Width
                loButton.Top = 0
             ENDIF
             loButton.Left = lnWidth                          
             lnWidth = lnWidth + loButton.Width             
         ENDFOR
         .Width = lnWidth      
      ENDWITH
   ENDIF

   DODEFAULT()

   THISFORM.MinWidth   = MAX(THIS.WIDTH + (THIS.Left*2), ;
         THISFORM.MinWidth )
   THISFORM.MinHeight  = THIS.Height *  2
      
   
   
ENDPROC
PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   DODEFAULT(nError,cMethod,nLine)
   
ENDPROC
�DataSession = 2
AutoRelease = .T.
lignorecoveragefilenames = .T.
lusingocxs = .T.
lvfp5 = ((ATC("FoxPro 05",VERSION()) > 0))
csourcefile = ("")
cdefaultwritepath = ("")
csuspendedlog = ("")
csavedtargetdbf = ("")
csourcealias = ("FromLog")
ctargetalias = ("MarkedCode")
cskippedalias = ("SkippedFiles")
ccovfilesalias = ("IgnoredFiles")
cmarknotexecuted = ("|"+SPACE(3))
cmarkexecuted = ("")
lsmartpath = .T.
nbasefontsize = 8
cbasefontname = ("MS Sans Serif")
cbasemonofontname = ("Courier New")
nbasemonofontsize = 8
lusingregistry = .T.
capphome = ("")
cprojectalias = ("PJXFiles")
caddin = ("")
oframe = .NULL.
csavedskipfiles = ("")
itargetreccount = 0
ilenhostfile = 115
ilenobjclass = 115
ilenexecuting = 115
ilenduration = (IIF("05." $ VERS() OR  ("06.00" $ VERS() AND VAL(SUBS(VERS(4),7)) < 8365),8,11))
csavedstackxml = ("")
cstackxslt = ("")
Name = "cov_engine"
COV_TOOLBAR.Caption = "Invisible Custom Obj Holder"
COV_TOOLBAR.Height = 21
COV_TOOLBAR.Left = 0
COV_TOOLBAR.Movable = .F.
COV_TOOLBAR.ShowTips = .F.
COV_TOOLBAR.Sizable = .F.
COV_TOOLBAR.Top = 0
COV_TOOLBAR.Visible = .F.
COV_TOOLBAR.Width = 33
COV_TOOLBAR.ControlBox = .F.
COV_TOOLBAR.Name = "COV_TOOLBAR"
�PROCEDURE Init
   LPARAMETERS toEngineRef

   LOCAL lReturn, cTarget, iSelect, cHost, iPos

   lReturn = DODEFAULT(toEngineRef)

   IF lReturn

      THIS.Caption = COV_DIALOG_CAPTION_LOC+" "+ ;
         COV_STATISTICS_LOC+ ": "+ ;
         SUBSTR(THIS.oCoverageEngine.cSourceFile, ;
         RAT("\",THIS.oCoverageEngine.cSourceFile) + 1)

      THIS.lblStatistics.Caption = COV_STATISTICS_LOC
      THIS.lblView.Caption = COV_STATS_VIEW_DETAILS_LOC

      cTarget = THIS.oCoverageEngine.GetAlias(,"Target")
      iSelect = SELECT()
      SELECT (cTarget)
      cHost = UPPER(ALLTR(Hostfile))

      WITH THIS.cntLinesCovered
         .SetAll("FontName", THIS.FontName)
         .SetAll("FontSize", THIS.FontSize)
         .lblCovered.Caption = STR(Covered)
         .lblNotCovered.Caption = STR(Coverable-Covered)
         .lblTotal.Caption = STR(Coverable)
         .lblPercent.Caption = STR((Covered/Coverable)*100,10,2)
         .lblCoveredCaption.Caption = ;
            COV_STATS_LINES_HIT_LOC
         .lblNotCoveredCaption.Caption =  ;
            COV_STATS_LINES_MISSED_LOC
         .lblTotalCaption.Caption = ;
            COV_STATS_LINES_COVERABLE_LOC
         .lblPercentCaption.Caption = ;
            COV_STATS_PCT_LINES_LOC
      ENDWITH

      IF (NOT COV_TOPSPEED) AND INLIST(FileType,".vct", ".sct", ".frt", ".lbt")

         WITH THIS.cntClassesCovered
            .SetAll("FontName", THIS.FontName)
            .SetAll("FontSize", THIS.FontSize)
            .SetFileOrClassNameCaption(cHost)
            .lblCovered.Caption = STR(ObjHits)
            .lblNotCovered.Caption = STR(ObjTotal-ObjHits)
            .lblTotal.Caption = STR(ObjTotal)
            .lblPercent.Caption = STR((ObjHits/ObjTotal)*100,10,2)
            .lblCoveredCaption.Caption = ;
               COV_STATS_OBJS_HIT_LOC
            .lblNotCoveredCaption.Caption = ;
               COV_STATS_OBJS_MISSED_LOC
            .lblTotalCaption.Caption = ;
               COV_STATS_OBJS_COVERABLE_LOC
            .lblPercentCaption.Caption = ;
               COV_STATS_PCT_OBJS_LOC
         ENDWITH
         
         cHost =UPPER(ALLTR(ObjClass))         

         iPos = AT("!",cHost)
         DO CASE
         CASE iPos = 0
            * okay
         CASE iPos = 1
            * shouldn't happen but JIC
            cHost = SUBSTR(cHost,2)
         CASE iPos = LEN(cHost)
            * ditto
            cHost = LEFT(cHost,iPos-1)
         OTHERWISE
            cHost = SUBSTR(cHost,iPos + 1)
         ENDCASE
         
         THIS.cntLinesCovered.SetFileOrClassNameCaption(cHost)

      ELSE

         WITH THIS.cntLinesCovered
            .Width = THIS.shpFrame.Width -((.Left-THIS.shpFrame.Left)*2)
            .lblName.Width = .Width - (.lblName.Left*2)
            .SetFileOrClassNameCaption(cHost)
         ENDWITH

         THIS.cntClassesCovered.Visible = .F.

      ENDIF

      SELECT (iSelect)

   ENDIF

   RETURN lReturn AND NOT THIS.lError

ENDPROC
PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   DODEFAULT(nError,cMethod,nLine)
   
ENDPROC
PROCEDURE cmdOK.Init
   LOCAL lReturn
   lReturn = DODEFAULT()
   THIS.Caption = COV_OKCLOSE_LOC
   RETURN lReturn
   
ENDPROC
Rsavedbasefontname Saved engine font attribute for later restoration if dialog is cancelled
savedbasefontsize Saved engine font attribute for later restoration if dialog is cancelled
savedbasefontitalic Saved engine font attribute for later restoration if dialog is cancelled
savedbasefontbold Saved engine font attribute for later restoration if dialog is cancelled
savedfixedfontname Saved engine font attribute for later restoration if dialog is cancelled
savedfixedfontsize Saved engine font attribute for later restoration if dialog is cancelled
savedfixedfontitalic Saved engine font attribute for later restoration if dialog is cancelled
savedfixedfontbold Saved engine font attribute for later restoration if dialog is cancelled
cxsltfilename Holds full name of XSLT filename for transferring to the engine's cStackXSLT property if the change is confirmed by the user pressing "OK" in this dialog.  (Fully qualified  name probably won't fit in the label display.)
*setoptions Send all appropriate engine properties to appropriate values from the dialog -  NB fonts are already done automatically,  and have to be un-done if we cancel.
*getoptions Get dialog values from current engine values
*restoreenginefonts Restore engine font values that may have been re-set by users' choices if the option dialog is cancelled.
*disablefontsettingbuttons Not currenty used, can disable font setting capabilities if OCXs are not available and you do not wish to allow GetFont() use.
*setstackxsltdisplayname Shorten the engine.cStackXSLT property name to fit the display space for THIS.lblStackXSLT.Caption.
��� ||��%3�U����T��������������T��-��
H�@����Ca�����T������T����	��T��
����T����
��#T������ CC��Z���������
��C����2������UOLABELTHISFORMLBLSHOWFIXEDFONTOCOVERAGEENGINELERRORGETFONTSFROMUSERFONTNAMECBASEMONOFONTNAMEFONTSIZENBASEMONOFONTSIZE
FONTITALICLBASEMONOFONTITALICFONTBOLDLBASEMONOFONTBOLDCAPTIONDISABLEFONTSETTINGBUTTONSClick,��1q��2���BB5�)|v�� ]]��%���U����T��������������
H�4����C-�����T������T������T��	��
��T������#T��
���� CC��Z���������
��C����2������UOLABELTHISFORMLBLSHOWBASEFONTOCOVERAGEENGINEGETFONTSFROMUSERFONTNAME
CBASEFONTNAMEFONTSIZE
NBASEFONTSIZE
FONTITALICLBASEFONTITALICFONTBOLD
LBASEFONTBOLDCAPTIONLERRORDISABLEFONTSETTINGBUTTONSClick,��1q�2���BB3u)]�� ���X%~�
��U����
��������T��C��)Please specify an XSL Transformation file�XSL Transforms� (*.xsl;*.xslt)|*.xsl;*.xslt|�	All Files�
 (*.*)|*.*��GETFILE�����%�CC���]�
������C����T��������ULCFILETHISFORMOCOVERAGEENGINEGETRESOURCELOCATION
CXSLTFILENAMESETSTACKXSLTDISPLAYNAMEClick,��1q��	a��AA5�)��PROCEDURE RightClick
   THISFORMSET.StandardRightClick()

ENDPROC
PROCEDURE Valid
   THISFORMSET.MarkOneTargetRecord()
   THISFORMSET.NotifyTargetRecordChanged()

   



   
ENDPROC
PROCEDURE InteractiveChange
THISFORMSET.NotifyTargetRecordChanged()      
    


ENDPROC
PROCEDURE MouseDown
   LPARAMETERS nButton, nShift, nXCoord, nYCoord
   
   THISFORM.iListMouseStart = nXCoord      

   RETURN
   
ENDPROC
PROCEDURE MouseMove
   LPARAMETERS nButton, nShift, nXCoord, nYCoord


   WITH THISFORM
   
      IF BETWEEN(nXCoord,;
            .ileftlistcolwidth - (.nMargin*2), ;
            .ileftlistcolwidth + (.nMargin*2))

         THIS.MousePointer = MOUSEPOINTER_ARROW_EW

      ELSE

         THIS.MousePointer = MOUSEPOINTER_DEFAULT

      ENDIF
      
      IF nButton = 1 AND (nXCoord < (THIS.WIDTH-SYSM(5)))
         .ileftlistcolwidth = ;
            .ileftlistcolwidth - ;
            (.ilistmousestart - nXCoord)
         .ilistmousestart = nXCoord
         .AdjustListColumnWidths()
      ENDIF         

   ENDWITH
   
ENDPROC
PROCEDURE DragDrop
   LPARAMETERS oSource, nXCoord, nYCoord
   THISFORM.RespondToSplitter(nYCoord)
   RETURN NOT THIS.lError

ENDPROC
`PROCEDURE Init
   LOCAL ARRAY aTemp[1]

   ASSERT TYPE("THISFORMSET") = "O" AND ;
      AMEMBERS(aTemp,THISFORMSET,1) > 0 ;
      AND ASCAN(aTemp,"LIGNORECOVERAGEFILENAMES") > 0

   LOCAL lReturn

   lReturn = DODEFAULT()

   IF lReturn


      WITH THIS

         IF THIS.Parent.lInCoverageFrame
            .WIDTH   = THIS.Parent.oFrame.WIDTH - (SYSMETRIC(3)*2)
            .Height  = THIS.Parent.oFrame.Height * .25
            .Left    = SYSMETRIC(3)
            .Top     = THIS.Parent.frmMainDialog.Top + ;
               THIS.Parent.frmMainDialog.Height + ;
               (SYSMETRIC(9) * 2)

         ELSE
            THIS.Left = THIS.Parent.frmMainDialog.Left - SYSMETRIC(9)
            THIS.Top =  THIS.Parent.frmMainDialog.Top - SYSMETRIC(9)
         ENDIF

      ENDWITH
      THIS.Resize()

   ENDIF

   RETURN lReturn

ENDPROC
PROCEDURE QueryUnload

   IF THIS.ReleaseType = 1

      THIS.Hide()
      THISFORMSET.NotifyZoomWindowClosed()
      NODEFAULT

   ENDIF

ENDPROC
PROCEDURE RightClick

   THISFORMSET.StandardRightClick()

ENDPROC
PROCEDURE Resize

   THIS.edtCode.WIDTH = THIS.WIDTH

   THIS.edtCode.Height = THIS.Height

ENDPROC
PROCEDURE KeyPress
   LPARAMETERS nKeyCode, nShiftAltCtrl
   IF nKeyCode = 93
      THISFORMSET.StandardRightClick()
      NODEFAULT
   ENDIF
   
ENDPROC
&PROCEDURE RightClick
THIS.oCoverageEngine.StandardRightClick()
NODEFAULT     

ENDPROC
PROCEDURE Deactivate
   IF TYPE("THIS.oCoverageEngine.Class") = "C"
      THIS.oCoverageEngine.Deactivate()
   ENDIF
   
ENDPROC
PROCEDURE Destroy
THIS.oCoverageEngine = .NULL.
   
   
ENDPROC
PROCEDURE Init
   LPARAMETERS toEngineRef

   LOCAL ARRAY aTemp[1]

   ASSERT TYPE("toEngineRef.Baseclass") = "C" AND ;
      AMEMBERS(aTemp,toEngineRef) > 0 ;
      AND ASCAN(aTemp,"LIGNORECOVERAGEFILENAMES") > 0

   THIS.oCoverageEngine = toEngineRef

   THIS.Caption = _VFP.Name + " " + COV_APPLICATION_NAME_LOC
   
   DECLARE INTEGER GetSysColor IN Win32API INTEGER nColorAspect
   THIS.BackColor = GetSysColor(12) && MDI Workspace
   
ENDPROC
PROCEDURE QueryUnload
   IF THIS.ReleaseType = 1
      IF TYPE("THIS.oCoverageEngine.BaseClass") = "C"
         THIS.oCoverageEngine = .NULL.
         COV_PUBLIC_VARIABLE.Release()
      ENDIF
   ENDIF

ENDPROC
PROCEDURE Activate
   IF TYPE("THIS.oCoverageEngine.Forms(2).Class") = "C"
      THIS.oCoverageEngine.Forms(2).Activate()
      NODEFAULT
   ENDIF
   
ENDPROC
PROCEDURE KeyPress
   LPARAMETERS nKeyCode, nShiftAltCtrl
   IF nKeyCode = 93
      THIS.oCoverageEngine.StandardRightClick()
      NODEFAULT
   ENDIF
   
ENDPROC
�PROCEDURE Destroy
   THIS.oCoverageEngine = .NULL.
   
ENDPROC
PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   THIS.lError = .T.
   THIS.oCoverageEngine.Error(nError,THIS.Name+":"+cMethod,nLine)

ENDPROC
PROCEDURE Init
LPARAMETERS toEngineRef

LOCAL ARRAY aTemp[1]

ASSERT TYPE("toEngineRef.Baseclass") = "C" AND ;
   AMEMBERS(aTemp,toEngineRef) > 0 ;
   AND ASCAN(aTemp,"LIGNORECOVERAGEFILENAMES") > 0

THIS.oCoverageEngine = toEngineRef

   *&* THIS.SetAll("FontName",THIS.oCoverageEngine.cBaseFontName)
   *&* removed so that Coverage font properties do not
   *&* presently affect modal dialog base fonts.
   *&* Note that, even if this is put back in,
   *&* it's not advisable for the modal dialog font sizes and
   *&* styles to obey Coverage font information, just the font.
   
   *&* Instead, according to MS code and specs, the following
   *&* should handle standard dialog attributes:
   
*&* add here for recursion into containers?   
*&* toEngineRef.SetStandardDialogAttributes() 
IF FONTMETRIC(1, 'MS Sans Serif', 8, '') # 13 OR ;
   FONTMETRIC(4, 'MS Sans Serif', 8, '') # 2 OR ;
   FONTMETRIC(6, 'MS Sans Serif', 8, '') # 5 OR ;
   FONTMETRIC(7, 'MS Sans Serif', 8, '') # 11
   
  THIS.SetAll('fontname', 'Arial')
  THIS.FontName = 'Arial'
   
ELSE
  THIS.SetAll('fontname','MS Sans Serif')
  THIS.FontName = 'MS Sans Serif'
ENDIF
THIS.SetAll('fontsize',8)
THIS.FontSize = 8


ENDPROC

��ࡱ�>��	������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Root Entry��������`�պ�Y�@OleObjectData����\AccessObjSiteData&������������\ChangedProps�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<����+/I�!C4OO�<� \$828C4C820-401A-101B-A3C9-08002B2F49FB�A<�lignorecoveragefilenames Indicates whether files in the cCovFilesAlias table should be eliminated from processing.
linprofilemode Toggles Profiling (versus Coverage) parsing mode.
lusingocxs Specifies whether common dialog OCX subclasses should be used.  Turned off automatically if any OCX errors occur.
lvfp5 Indicates running in VFP5 rather than later versions.
csourcefile Specifies the name of the file to be analyzed. 
cdefaultwritepath Set to the path of cSourceFile by default, supplies a default path for any file output of the Coverage Profiler.
csuspendedlog Specifies the name of the current coverage log (SET("COVERAGE")) if the Coverage Profiler suspended VFP's writing the coverage log during its operation. 
csavedtargetdbf Holds the name of the saved Coverage results DBF (Target) after this table has been saved to disk.
csourcealias Specifies the Source cursor which holds the appended and processed records stored by the coverage text log.
ctargetalias Specifies the target cursor which holds the names of classes, source filenames, Coverage-marked procedure source code, and Coverage statistics. 
cskippedalias Specifies the cursor which holds names of source files the Coverage Profiler could not locate and did not analyze. 
ccovfilesalias Specifies the cursor which holds names of source files the Coverage Profiler should not try to locate and analyze.  
cmarknotexecuted Specifies the character(s) that mark executable lines of code that did not execute according to the current coverage log. 
cmarkexecuted Specifies the character(s) that mark executable lines of code that executed according to the current coverage log. 
lsmartpath Switch to toggle Smart Pathing, in which the engine "remembers" directories, when the Coverage Profiler attempts to locate source files.
nbasefontsize Stores a base font size for any UI elements. 
cbasefontname Stores a base font name for any UI elements. 
cbasemonofontname Stores a base font name for any UI elements requiring monospace font. 
nbasemonofontsize Stores a base font size for any UI elements requiring monospace font. 
lusingregistry Switch to toggle use of Windows registry to hold Coverage preferences.
lbasefontbold Stores a base font "bold" attribute for any UI elements. 
lbasefontitalic Stores a base font "italic" attribute for any UI elements. 
lbasemonofontbold Stores a base font "bold" attribute for any UI elements requiring monospace font. 
lbasemonofontitalic Stores a base font "italic" attribute for any UI elements requiring monospace font. 
lunattended Switch to signal automated run of Coverage engine.
capphome Holds directory from which the app was started.
cprojectalias Holds the default alias of the cursor holding project analysis results.
caddin Specifies the addin last run successfully.  At startup, this property may be set by an addIn passed to the Coverage application as a parameter and run in the Init or by the first addin in the aAddins array.
lregisteraddin Indicates whether an addin should be registered when it is run successfully.
lmarkallonload Specifies that all source code will be marked when a target file is loaded, rather than that the individual source code records will be marked one at a time as required by the user.
lusingstatusbar Indicates whether feedback messages during processing are displayed in the status bar or as a WAIT WINDOW NOWAIT message.  The status bar is used when the engine runs in main VFP application window or in "unattended"  mode.
lturnedofftrace Indicates whether the Coverage Profiler turned off TRBETWEEN during its processing.
lstartinprofilemode Specifies how the lInProfileMode should be set when each coverage log loads. Significant when the property lMarkAllOnLoad is set to .T.
lincoverageframe Specifies whether any visual elements of the Coverage Profiler should appear in the main VFP application window or in a separate Coverage frame window.
oframe Holds a reference to the Coverage Frame window, when the Coverage Profiler interface exists in a separate from from the main VFP application window. 
csavedskipfiles Holds the name of the DBF containing a list of source files skipped during coverage analysis, after this table has been saved to disk. 
itargetreccount Holds number of viable records in target file for dynamic use by interface elements.
ilenhostfile Length of character-type field in both source and target cursors.  See COV_TUNE.H.
ilenobjclass Length of character-type field in both source and target cursors.  See COV_TUNE.H.
ilenexecuting Length of character-type field in both source and target cursors.  See COV_TUNE.H.
cappname Holds the name of the APP or EXE hosting the Coverage class library or libraries.
ilenduration Full length of numeric-type field in source cursor, including decimal places .  See COV_TUNE.H.
lsaveformpositions During startup, determines if all forms in formset after CreateForms() receive an instance of cov_SavePosition to handle the form's position and size. Forms added later can install this object at designtime or using AddFormPositionSaver() at runtime.
csavedstackxml Holds the name of the saved Coverage stacklevel analysis in XML form, after this file has been saved to disk. Set back to default ("") when you load a new log.
lstackxmlextendedtree If .T.,  generates more extensive StackXML, so Profiling of each branch can assess effects of args and other factors for different  invocations of a module. Defaults to .F. but if COV_LOAD_STACK_FROM_DBF is .T., this more extensive XML is always gen'd.
cstackxslt Holds filename providing default XSL Transformation stylesheet to be applied by default to the generated Stack XML analysis document, when TransformStackXML is called.
*domessage Displays a message. If the Coverage Profiler is running in Unattended mode, the message is displayed in a WAIT WINDOW TIMEOUT window so it doesn't prevent further processing.  Specify the timeout value using COV_TIMEOUT_SECS in COV_TUNE.H.
*setuitoshowfilestates Abstract in the engine, called at the end of SetupWorkFiles() to allow UI to indicate success or failure or current attempt to load a log.
*setmarks Synchronizes the lengths of cMarkExecuted and cMarkNotExecuted and returns the values of either or both properties to a default if they are not appropriate.
*setuitoshowcode Abstract in the engine, called at the end of SetupWorkFiles() to allow UI to show current Target record in the newly-loaded log.
*setuifonts Abstract in the engine, called by SetUiOptions, designed to allow the user font preferences saved in the various Base and BaseMont font properties to be applied to appropriate UI elements.
*setuioptions Sets up initial UI options according to user preferences or defaults after initial setup of workfiles.  Required for UI display with the workfiles, but  not applied to anything by the engine itself.
*passedproperparams Validates parameters passed to the engine.
*setlogfile Attempts to set up a file for analysis, using supplied value, SET("COVERAGE"), or prompt to user.
*suspendcoverage Turns off coverage for the duration of an analysis run.
*resumecoverage Turns coverage on if it was turned off for analysis earlier.
*sourcefileislog Validates a text file as being of proper log format.
*fillfiletypearray Fills aFileTypes array with file extensions of file types known to the engine.
*createcoveragefilenamecursor Creates cursor holding names of files that should be ignored.
*setupworkfiles Sets and validates a coverage log, and then creates and fills the source and target work files for this text log. 
*createskippedcursor Creates a cursor of deleted records in the Source table, indicating filenames that either cannot be Located or that are in the "Ignored files" coverage file list.
*saveskippedcursor Saves skipped files cursor to disk.
*createsourcecursor Creates cursor representing individual entries from Coverage log.
*adjustsourcecursor Abstract method called by CreateSourceCursor, allowing you to subtract records, or add index tags and custom fields to the source cursor after the cursor is created.
*createtargetcursor Creates cursor representing unique file and objects represented in the Coverage log.
*adjusttargetcursor Abstract method called by CreateTargetCursor, allowing you to subtract records, or add index tags and custom fields to the target cursor after the cursor is created.
*adjustcoveragefilenamecursor Abstract method called by CreateCoverageFilenameCursor, allowing you to add files you don't want analysed to the cursor's filelist.
*savetargettodisk Saves target file to disk.
*fillonetargetrecord Gets source code for a given object/class or source code file.
*fillsourcecursor Fills source cursor with records representing lines from the Coverage log, deleting records whose source files cannot be found.
*addpath Adds path of a source file to the current search path for additional source files, when Smart Pathing is on.
*sourceavailable Locates source files for individual lines in the Coverage log.
*marktargetcoverage Parses the source code for an object or source file record in the target file.
*markcodeline Applies information gathered by MarkTargetCoverage to a source code line, to provide the Profiled or Covered version of that source code line.
*getalias Returns either a currently-used alias or the default alias of one of the Coverage Profiler's workfile types.  Allows the engine to work with many sets of workfiles at once.
*runaddin Runs a file (SCX, FXP, APP, PRG, QPX, QPR, MPX, or MPR) that adds functionality to the Coverage object. 
*filterlistbylocation Abstract, placeholder for enhancements.
*orderlistbytime Abstract, placeholder for enhancements.
*setclasslibtoalias Sets classlib using unique alias, returning alias, if library is not already loaded.  Handles libraries IN apps and exes as required.
*setworkoptions Sets up initial options according to user preferences or defaults before initial setup of workfiles.  
*getfontsfromuser Gets font values from user, with either OCX or GetFont() as appropriate.
*setregistrykeyvalue Uses the registry-handling member of the toolbar in the engine formset to set a registry key value from a user option. Converts all values to string type before applying them to the registry.
*getregistrykeyvalue Uses the registry-handling member of the toolbar in the engine formset to get a registry key value for a user option. Converts and validates types as necessary.
*getresourcelocation Gets a filename using common file dialog subclass or GETFILE/PUTFILE() as directed.
*fillcoveragefilenamecursor Fills appropriate cursor with filenames to be ignored during processing.
^afiletypes[1,2] Holds a list of the file types (extensions) the Coverage Profiler handles.  Column 1 is compiled extension and column 2 is matching source code extension. Filled in FillFileTypeArray() method.
*togglecoverageprofilemode If lMarkAllOnLoad is .T., marks all target records in the new mode. Otherwise, designed to be augmented in subclasses to reflect this switch in the UI.
*showstatistics Abstract, placeholder for enhancements.
*showprojectstatistics Calls GetProjectStatistics() and DisplayProjectStatistics() to run coverage analysis figures against a specific VFP project set of files.
*getprojectstatistics Develops project statistics from a project name and current coverage log.  If necessary, pre-marks all source code from target objects referenced in this project.
*displayprojectstatistics Abstract in the engine, designed to display statistics after GetProjectStatistics has gathered them.
*setfontvalues Sets up initial font attribute values using registry key values and other defaults.  
*lockscreens "Freezes" or "Unfreezes" LockScreen properties and MousePointer properties for all members of _Screen during various long procedures.
*getregisteredaddins Fills aAddIns array and cAddIn property at startup (cAddIn property may be filled by passing a param instead)
^aaddins[1,0] Holds filenames of Coverage add-ins
*showstatus Puts message in status bar or WAIT WINDOW NOWAIT/TIMEOUT, depending on setting of lUsingStatusBar.
*clearstatus Removes message from the status bar or CLEARs WAIT WINDOW, depending on setting of lUsingStatusBar.
*markalltargetrecords Calls MarkOneTargetRecord() for all target records in a loop. Can be called because lMarkAllOnLoad is .T. or because the coverage engine is in Unattended mode.
*filltargetcursor Calls FillOneTargetRecord() for all target records in a loop. Replicates the ObjHits statistics for additional target records referring to the same source files.
*markonetargetrecord Evaluates whether the current target record is already marked in the current coverage mode and, if not, passes the relevant information to MarkTargetCoverage() for processing.  
*addregisteredaddin Adds a filename to the aAddIns array. Called by the RunAddIn method after an AddIn runs successfully.
*saveoptionstoregistry Saves most user options to the registry on demand.  A few options are not set at this time (frame and addins) since these must be set at specific moments during the life of the engine to be useful.
*setregisteredaddins Saves the filenames currently in the aAddIns array to registry values.
*deleteregisteredaddin Removes a registered addin from aAddIns array when an addin fails to run successfully.
*createforms Called during startup to begin display of UI after workfiles have been set up, if the coverage engine is not in Unattended mode.  In engine, responsible only for coverage frame window.
*gettablename Generate filenames so Coverage saves its work to disk w/o overwriting files. tcWhichSuffix is opt suffix, one default per filetype saved, added to the current log name, along w/ tiebreak digits. tcWhichExt is ext for generated fname, default is DBF.
*setapphome Sets the cAppHome and cAppName properties at startup.
*standardrightclick Abstract at engine level, allows your subclasses to share rightclick behavior among all forms & objects within the formset
*setformsetattributes Called when Profiler starts, to read and restore general frame and formset characteristics from registry.
*saveformsetattributes Called when Profiler is finished, to save general frame and formset characteristics to registry.
*addformpositionsaver Adds an instance of cov_SavePosition to a form, to save and restore form size and position. Pass a form reference.
*showstackxml Calls GetStackXML(tcLog) and DisplayStackXML(tcXMLFile) to run coverage analysis figures against a specific VFP project set of files. tcLog argument ignored if DEFINEd COV_LOAD_STACK_FROM_DBF is .T.  Returns  .T. if successful.
*getstackxml Generates Stack Analysis XML from tcLog, defaulting to current Coverage source log. tcLog argument ignored if DEFINEd COV_LOAD_STACK_FROM_DBF is .T.  Returns  .T. if successful.
*displaystackxml Displays XML file, defaulting to the current Stack Analysis filename indicated by the cSavedStackXML property.  Returns .T. if no error occurs.
*togglestackxmlextendedtree Toggles .lStackXMLExtendedTree. Designed to be augmented in subclasses to reflect this switch in the UI, change default XSLT on this basis, etc. Returns .T. if no error occurs.
*transformstackxml Applies tcXSLT (default to cStackXSLT) to tcXMLIn (default cSavedStackXML, GetStackXML called if empty). Saves result to tcXMLOut (defaults to tcXMLIn-based  generated name w/ HTM ext). If ! tlNoShow, calls DisplayStackXML. Returns  .T. if successful.
�PROCEDURE setoptions
   * send all appropriate engine properties to
   * appropriate values from the dialog -
   * NB fonts are already done automatically,
   * have to be un-done if we cancel.

   WITH THIS.oCoverageEngine
      .lStackXMLExtendedTree = THIS.chkExtendedStackXML.Value
      .cStackXSLT            = THIS.cXSLTFileName
      .lSmartPath            = THIS.chkSmartPath.Value
      .lRegisterAddIn        = THIS.chkRegisterAddIns.Value
      .lMarkAllOnLoad        = THIS.chkMarkAllOnLoad.Value
      .lStartInProfileMode   = (THIS.opgStartMode.Value = 2)
      * the following takes care of the rare care where
      * they store numbers as a mark -- this will screw up
      * in the registry handling stuff which will think
      * it's a numeric value and pull it out of the saved 
      * string that way :
      .cMarkExecuted       = IIF(NOT EMPTY(THIS.txtExecuted.Value) AND ;
                                 VAL(THIS.txtExecuted.Value) > 0, ;
                                 "_"+THIS.txtExecuted.Value, ;
                                 THIS.txtExecuted.Value)
      .cMarkNotExecuted    = IIF(NOT EMPTY(THIS.txtNotExecuted.Value) AND ;
                                 VAL(THIS.txtNotExecuted.Value) > 0, ;
                                 "_"+THIS.txtNotExecuted.Value, ;
                                 THIS.txtNotExecuted.Value)
   ENDWITH

   RETURN NOT THIS.lError
   
ENDPROC
PROCEDURE getoptions
   * get dialog values from current engine values

   LOCAL oBaseLabel, oFixedLabel
   oBaseLabel  = THIS.lblShowBaseFont
   oFixedLabel = THIS.lblShowFixedFont

   WITH THIS.oCoverageEngine
      THIS.SetStackXSLTDisplayName(.cStackXSLT)
      THIS.chkExtendedStackXML.Value   = .lStackXMLExtendedTree
      THIS.chkSmartPath.Value          = .lSmartPath
      THIS.chkRegisterAddIns.Value     = .lRegisterAddIn
      THIS.chkMarkAllOnLoad.Value      = .lMarkAllOnLoad
      THIS.opgStartMode.Value          =  IIF(.lStartInProfileMode,2,1)
      THIS.opgFrame.Value              =  IIF(.lInCoverageFrame,1,2)
      THIS.txtExecuted.Value           = .cMarkExecuted
      THIS.txtNotExecuted.Value        = .cMarkNotExecuted
      oBaseLabel.FontName              = .cBaseFontName
      oBaseLabel.FontSize              = .nBaseFontSize
      oBaseLabel.FontItalic            = .lBaseFontItalic
      oBaseLabel.FontBold              = .lBaseFontBold
      oFixedLabel.FontSize             = .nBaseMonoFontSize
      oFixedLabel.FontItalic           = .lBaseMonoFontItalic
      oFixedLabel.FontBold             = .lBaseMonoFontBold
      THIS.SavedBaseFontName           = .cBaseFontName
      THIS.SavedBaseFontSize           = .nBaseFontSize
      THIS.SavedBaseFontItalic         = .lBaseFontItalic
      THIS.SavedBaseFontBold           = .lBaseFontBold
      THIS.SavedFixedFontName          = .cBaseMonoFontName
      THIS.SavedFixedFontSize          = .nBaseMonoFontSize
      THIS.SavedFixedFontItalic        = .lBaseMonoFontItalic
      THIS.SavedFixedFontBold          = .lBaseMonoFontBold

      THIS.SetAll("FontName",.cBaseMonoFontName,"textbox")
      oFixedLabel.FontName             = .cBaseMonoFontName

   ENDWITH

   oBaseLabel.Caption = oBaseLabel.FontName+" "+ ;
      ALLTR(STR(oBaseLabel.FontSize))
   oFixedLabel.Caption = oFixedLabel.FontName+" "+ ;
      ALLTR(STR(oFixedLabel.FontSize))




ENDPROC
PROCEDURE restoreenginefonts
   WITH THIS.oCoverageEngine
      .cBaseFontName       = THIS.SavedBaseFontName
      .nBaseFontSize       = THIS.SavedBaseFontSize
      .lBaseFontItalic     = THIS.SavedBaseFontItalic
      .lBaseFontBold       = THIS.SavedBaseFontBold
      .cBaseMonoFontName   = THIS.SavedFixedFontName
      .nBaseMonoFontSize   = THIS.SavedFixedFontSize
      .lBaseMonoFontItalic = THIS.SavedFixedFontItalic
      .lBaseMonoFontBold   = THIS.SavedFixedFontBold
   ENDWITH

   RETURN NOT THIS.lError
   
ENDPROC
PROCEDURE disablefontsettingbuttons
   STORE .F. TO ;
      THIS.cmdBaseFont.Enabled, ;
      THIS.cmdFixedFont.Enabled

ENDPROC
PROCEDURE setstackxsltdisplayname
LPARAMETERS tcFileName
LOCAL lcFile, liChars
lcFile = ""
IF VARTYPE(tcFileName) = "C" AND NOT EMPTY(tcFileName)
*!*	   IF OCCURS("\",tcFileName) > 1
*!*	      lcFile = ".."+SUBSTR(tcFileName,RAT("\",tcFileName,2))
*!*	   ELSE      
*!*	      lcFile = tcFileName
*!*	   ENDIF
  WITH THISFORM.lblStackXSLT
      liChars = CEILING(.Width/;
                        FONTMETRIC(6,;
                                   .FontName, .FontSize, ;
                                   IIF(.FontBold,"B","")+ ;
                                   IIF(.FontItalic,"I","")))
      lcFile = DISPLAYPATH(tcFileName,liChars)
   ENDWITH
ENDIF
THIS.lblStackXSLT.Caption = lcFile
RETURN .T.

ENDPROC
PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   THIS.oCoverageEngine.Error(nError,cMethod,nLine)
   
ENDPROC
PROCEDURE Init
   LPARAMETERS toEngineRef
   LOCAL lReturn
   lReturn = DODEFAULT(toEngineRef)
   IF lReturn

      THIS.Caption = COV_DIALOG_CAPTION_LOC +" "+COV_OPTIONS_LOC

      THIS.cmdOK.Caption = COV_OKCLOSE_LOC
      THIS.cmdCancel.Caption = COV_CANCEL_LOC


      THIS.lblOptions.Caption = COV_OPTIONS_LOC
      THIS.chkSmartPath.Caption = COV_OPT_SMARTPATH_LOC
      THIS.chkRegisterAddIns.Caption = COV_OPT_REGISTER_ADDINS_LOC
      THIS.chkMarkAllOnLoad.Caption = COV_OPT_MARKALL_LOC

      THIS.lblStartMode.Caption = COV_OPT_START_IN_LOC
      THIS.opgStartMode.Buttons(1).Caption = COV_OPT_START_COVERAGE_LOC
      THIS.opgStartMode.Buttons(2).Caption = COV_OPT_START_PROFILE_LOC

      THIS.lblEnvironment.Caption = COV_OPT_ENVIRONMENT_LOC
      THIS.opgFrame.Buttons(1).Caption = COV_OPT_COVFRAME_LOC
      THIS.opgFrame.Buttons(2).Caption = COV_OPT_VFPFRAME_LOC


      THIS.lblCoverageMarks.Caption = COV_OPT_COVERAGE_MARKS_LOC
      THIS.lblExecuted.Caption = COV_OPT_MARK_EXECUTED_LOC
      THIS.lblNotExecuted.Caption = COV_OPT_MARK_NOT_EXECUTED_LOC
      THIS.lblMarksMatched.Caption = COV_OPT_MARKS_WILL_BE_MATCHED_LOC

      THIS.lblFonts.Caption = COV_OPT_FONTS_LOC
      THIS.cmdBaseFont.Caption = COV_OPT_GETFONT_LOC
      THIS.cmdFixedFont.Caption = COV_OPT_GETFIXEDFONT_LOC
      
      THIS.lblStack.Caption = COV_OPT_STACK_LOC
      THIS.chkExtendedStackXML.Caption = COV_OPT_STACK_EXTENDED_LOC
      THIS.cmdStackXSLT.Caption = COV_OPT_STACK_XSLT_LOC

      THIS.chkRegisterDefaults.Caption = COV_OPT_SET_DEFAULTS_LOC

      IF NOT THIS.oCoverageEngine.lUsingRegistry
         THIS.chkRegisterDefaults.Enabled = .F.
         THIS.chkRegisterAddIns.Enabled = .F.
      ENDIF
      *&*	   IF NOT THIS.oCoverageEngine.lUsingOCXs
      *&*	      THIS.DisableFontSettingButtons()
      *&*	   ENDIF

      lReturn = THIS.GetOptions()

   ENDIF

   RETURN lReturn AND NOT THIS.lError
   
ENDPROC
PROCEDURE cmdOK.Click
   WITH THISFORM

      .SetOptions()

      IF .oCoverageEngine.lUsingRegistry 

         * this happens whether we're Setting As Default
         * or not, because it doesn't make any sense outside
         * of Startup, it can't be changed during the
         * life of the Coverage object
         .oCoverageEngine.SetRegistryKeyValue("CoverageFrame", (.opgFrame.Value = 1))
      
         IF .chkRegisterDefaults.Enabled AND ;
            .chkRegisterDefaults.Value

            .oCoverageEngine.SaveOptionsToRegistry()
         ENDIF

      ENDIF

   ENDWITH

   THISFORM.oCoverageEngine = .NULL.

   THISFORM.Release()
   
ENDPROC
)�PROCEDURE loadregfuncs
   * Loads funtions needed for Registry
   LOCAL nHKey,cSubKey,nResult
   LOCAL hKey,iValue,lpszValue,lpcchValue,lpdwType,lpbData,lpcbData
   LOCAL lpcStr,lpszVal,nLen,lpdwReserved
   LOCAL lpszValueName,dwReserved,fdwType
   LOCAL iSubKey,lpszName,cchName

   IF THIS.lLoadedDLLs
      RETURN ERROR_SUCCESS
   ENDIF

   DECLARE Integer RegOpenKey IN Win32API ;
      Integer nHKey, String @cSubKey, Integer @nResult

   IF THIS.lError && error loading library
      RETURN -1
   ENDIF

   DECLARE Integer RegCreateKey IN Win32API ;
      Integer nHKey, String @cSubKey, Integer @nResult

   DECLARE Integer RegDeleteKey IN Win32API ;
      Integer nHKey, String @cSubKey

   DECLARE Integer RegDeleteValue IN Win32API ;
      Integer nHKey, String cSubKey

   DECLARE Integer RegCloseKey IN Win32API ;
      Integer nHKey

   DECLARE Integer RegSetValueEx IN Win32API ;
      Integer hKey, String lpszValueName, Integer dwReserved,;
      Integer fdwType, String lpbData, Integer cbData

   DECLARE Integer RegQueryValueEx IN Win32API ;
      Integer nHKey, String lpszValueName, Integer dwReserved,;
      Integer @lpdwType, String @lpbData, Integer @lpcbData

   DECLARE Integer RegEnumKey IN Win32API ;
      Integer nHKey,Integer iSubKey, String @lpszName, Integer @cchName

   DECLARE Integer RegEnumKeyEx IN Win32API ;
      Integer nHKey,Integer iSubKey, String @lpszName, Integer @cchName,;
      Integer dwReserved,String @lpszName, Integer @cchName,String @cchName

   DECLARE Integer RegEnumValue IN Win32API ;
      Integer hKey, Integer iValue, String @lpszValue, ;
      Integer @lpcchValue, Integer lpdwReserved, Integer @lpdwType, ;
      String @lpbData, Integer @lpcbData

   THIS.lLoadedDLLs = .T.

   * Need error check here
   RETURN ERROR_SUCCESS



ENDPROC
PROCEDURE openkey
   * Opens a registry key
   LPARAMETER cLookUpKey,nRegKey,lCreateKey

   LOCAL nSubKey,nErrCode,nPCount,lSaveCreateKey
   nSubKey = 0
   nPCount = PARAMETERS()

   IF TYPE("m.nRegKey") # "N" OR EMPTY(m.nRegKey)
      *&* m.nRegKey = HKEY_CLASSES_ROOT
      m.nRegKey = THIS.nUserKey
   ENDIF

   * Load API functions
   nErrCode = THIS.loadregfuncs()
   IF m.nErrCode # ERROR_SUCCESS
      RETURN m.nErrCode
   ENDIF

   lSaveCreateKey = THIS.lCreateKey
   IF m.nPCount>2 AND TYPE("m.lCreateKey") = "L"
      THIS.lCreateKey = m.lCreateKey
   ENDIF

   IF THIS.lCreateKey
      * Try to open or create registry key
      nErrCode = RegCreateKey(m.nRegKey,m.cLookUpKey,@nSubKey)
   ELSE
      * Try to open registry key
      nErrCode = RegOpenKey(m.nRegKey,m.cLookUpKey,@nSubKey)
   ENDIF

   THIS.lCreateKey = m.lSaveCreateKey

   IF nErrCode # ERROR_SUCCESS
      RETURN m.nErrCode
   ENDIF

   THIS.nCurrentKey = m.nSubKey
   RETURN ERROR_SUCCESS



ENDPROC
PROCEDURE closekey
   * Closes a registry key
   =RegCloseKey(THIS.nCurrentKey)
   THIS.nCurrentKey =0
   RETURN NOT THIS.lError


ENDPROC
PROCEDURE setregkey
   * This routine sets a registry key setting
   * ex. THIS.SetRegKey("ResWidth","640",;
   *      "Software\Microsoft\VisualFoxPro\4.0\Options",;
   *      HKEY_CURRENT_USER)
   LPARAMETER cOptName,cOptVal,cKeyPath,nUserKey
   LOCAL iPos,cOptKey,cOption,nErrNum
   iPos = 0
   cOption = ""
   nErrNum = ERROR_SUCCESS

   * Open registry key 
   m.nErrNum = THIS.OpenKey(m.cKeyPath,m.nUserKey,THIS.lCreateKeyOnSet)
   IF m.nErrNum # ERROR_SUCCESS
      RETURN m.nErrNum
   ENDIF

   * Set Key value
   nErrNum = THIS.SetKeyValue(m.cOptName,m.cOptVal)

   * Close registry key
   THIS.CloseKey()      &&close key
   RETURN m.nErrNum



ENDPROC
PROCEDURE getregkey
   * This routine gets a registry key setting
   * ex. THIS.GetRegKey("ResWidth",@cValue,;
   *      "Software\Microsoft\VisualFoxPro\4.0\Options",;
   *      HKEY_CURRENT_USER)
   LPARAMETER cOptName,cOptVal,cKeyPath,nUserKey
   LOCAL iPos,cOptKey,cOption,nErrNum
   iPos = 0
   cOption = ""
   nErrNum = ERROR_SUCCESS

   * Open registry key
   m.nErrNum = THIS.OpenKey(m.cKeyPath,m.nUserKey)
   IF m.nErrNum # ERROR_SUCCESS
      RETURN m.nErrNum
   ENDIF

   * Get the key value
   nErrNum = THIS.GetKeyValue(cOptName,@cOptVal)

   * Close registry key
   THIS.CloseKey()      &&close key
   RETURN m.nErrNum


ENDPROC
PROCEDURE getkeyvalue
   * Obtains a value from a registry key
   * Note: this routine only handles Data strings (REG_SZ)
   LPARAMETER cValueName,cKeyValue

   LOCAL lpdwReserved,lpdwType,lpbData,lpcbData,nErrCode
   STORE 0 TO lpdwReserved,lpdwType
   STORE SPACE(256) TO lpbData
   STORE LEN(m.lpbData) TO m.lpcbData

   DO CASE
   CASE TYPE("THIS.nCurrentKey")#'N' OR THIS.nCurrentKey = 0
      RETURN ERROR_BADKEY
   CASE TYPE("m.cValueName") #"C"
      RETURN ERROR_BADPARM
   ENDCASE

   m.nErrCode=RegQueryValueEx(THIS.nCurrentKey,m.cValueName,;
      m.lpdwReserved,@lpdwType,@lpbData,@lpcbData)

   * Check for error
   IF m.nErrCode # ERROR_SUCCESS
      RETURN m.nErrCode
   ENDIF

   * Make sure we have a data string data type
   IF lpdwType # REG_SZ
      RETURN ERROR_NONSTR_DATA
   ENDIF

   m.cKeyValue = Left(m.lpbData,m.lpcbData-1)
   RETURN ERROR_SUCCESS


ENDPROC
PROCEDURE setkeyvalue
   * This routine sets a key value
   * Note: this routine only handles data strings (REG_SZ)
   LPARAMETER cValueName,cValue
   LOCAL nValueSize,nErrCode

   DO CASE
   CASE TYPE("THIS.nCurrentKey")#'N' OR THIS.nCurrentKey = 0
      RETURN ERROR_BADKEY
   CASE TYPE("m.cValueName") #"C" OR TYPE("m.cValue")#"C"
      RETURN ERROR_BADPARM
   CASE EMPTY(m.cValueName) OR (LEN(m.cValue) = 0)  && used to be EMPTY(cValue)
      RETURN ERROR_BADPARM
   ENDCASE

   * Make sure we null terminate this guy
   cValue = m.cValue+CHR(0)
   nValueSize = LEN(m.cValue)

   * Set the key value here
   m.nErrCode = RegSetValueEx(THIS.nCurrentKey,m.cValueName,0,;
      REG_SZ,m.cValue,m.nValueSize)

   * Check for error
   IF m.nErrCode # ERROR_SUCCESS
      RETURN m.nErrCode
   ENDIF

   RETURN ERROR_SUCCESS


ENDPROC
PROCEDURE deletekey
   * This routine deletes a Registry Key
   LPARAMETER nUserKey,cKeyPath
   LOCAL nErrNum
   nErrNum = ERROR_SUCCESS

   * Delete key
   m.nErrNum = RegDeleteKey(m.nUserKey,m.cKeyPath)
   RETURN m.nErrNum


ENDPROC
PROCEDURE enumoptions
   * Enumerates through all entries for a key and populates array
   LPARAMETER aRegOpts,cOptPath,nUserKey,lEnumKeys
   LOCAL iPos,cOptKey,cOption,nErrNum
   iPos = 0
   cOption = ""
   nErrNum = ERROR_SUCCESS

   IF PARAMETERS()<4 OR TYPE("m.lEnumKeys") # "L"
      lEnumKeys = .F.
   ENDIF

   * Open key
   m.nErrNum = THIS.OpenKey(m.cOptPath,m.nUserKey)
   IF m.nErrNum # ERROR_SUCCESS
      RETURN m.nErrNum
   ENDIF

   * Enumerate through keys
   IF m.lEnumKeys
      * Enumerate and get key names
      nErrNum = THIS.EnumKeys(@aRegOpts)
   ELSE
      * Enumerate and get all key values
      nErrNum = THIS.EnumKeyValues(@aRegOpts)
   ENDIF

   * Close key
   THIS.CloseKey()      &&close key
   RETURN m.nErrNum


ENDPROC
PROCEDURE iskey
   * Checks to see if a key exists
   LPARAMETER cKeyName,nRegKey

   * Open extension key
   nErrNum = THIS.OpenKey(m.cKeyName,m.nRegKey)
   IF m.nErrNum  = ERROR_SUCCESS
      * Close extension key
      THIS.CloseKey()
   ENDIF

   RETURN m.nErrNum = ERROR_SUCCESS


ENDPROC
PROCEDURE enumkeys
   LPARAMETERS aKeyNames

   LOCAL nKeyEntry,cNewKey,cNewSize,cbuf,nbuflen,cRetTime
   nKeyEntry = 0
   DIMENSION aKeyNames[1]
   DO WHILE .T.
      nKeySize = 0
      cNewKey = SPACE(100)
      nKeySize = LEN(m.cNewKey)
      cbuf=SPACE(100)
      nbuflen=LEN(m.cbuf)
      cRetTime=SPACE(100)

      m.nErrCode = RegEnumKeyEx(THIS.nCurrentKey,m.nKeyEntry,@cNewKey,@nKeySize,0,@cbuf,@nbuflen,@cRetTime)

      DO CASE
      CASE m.nErrCode = ERROR_EOF
         EXIT
      CASE m.nErrCode # ERROR_SUCCESS
         EXIT
      ENDCASE

      cNewKey = ALLTRIM(m.cNewKey)
      cNewKey = Left(m.cNewKey,LEN(m.cNewKey)-1)
      IF !EMPTY(aKeyNames[1])
         DIMENSION aKeyNames[ALEN(aKeyNames)+1]
      ENDIF
      aKeyNames[ALEN(aKeyNames)] = m.cNewKey
      nKeyEntry = m.nKeyEntry + 1
   ENDDO

   IF m.nErrCode = ERROR_EOF AND m.nKeyEntry # 0
      m.nErrCode = ERROR_SUCCESS
   ENDIF
   RETURN m.nErrCode




ENDPROC
PROCEDURE enumkeyvalues
   * enumerates through values of a registry key

   LPARAMETER aKeyValues

   LOCAL lpszValue,lpcchValue,lpdwReserved
   LOCAL lpdwType,lpbData,lpcbData
   LOCAL nErrCode,nKeyEntry,lArrayPassed

   STORE 0 TO nKeyEntry

   IF TYPE("THIS.nCurrentKey")#'N' OR THIS.nCurrentKey = 0
      RETURN ERROR_BADKEY
   ENDIF

   * Sorry, Win32s does not support this one!
   IF THIS.nCurrentOS = OS_W32S
      RETURN ERROR_BADPLAT
   ENDIF

   DO WHILE .T.

      STORE 0 TO lpdwReserved,lpdwType,nErrCode
      STORE SPACE(256) TO lpbData, lpszValue
      STORE LEN(lpbData) TO m.lpcchValue
      STORE LEN(lpszValue) TO m.lpcbData

      nErrCode=RegEnumValue(THIS.nCurrentKey,m.nKeyEntry,@lpszValue,;
         @lpcchValue,m.lpdwReserved,@lpdwType,@lpbData,@lpcbData)

      DO CASE
      CASE m.nErrCode = ERROR_EOF
         EXIT
      CASE m.nErrCode # ERROR_SUCCESS
         EXIT
      ENDCASE

      nKeyEntry = m.nKeyEntry + 1

      * Set array values
      DIMENSION aKeyValues[m.nKeyEntry,2]
      aKeyValues[m.nKeyEntry,1] = Left(m.lpszValue,m.lpcchValue)
      DO CASE
      CASE lpdwType = REG_SZ
         aKeyValues[m.nKeyEntry,2] = Left(m.lpbData,m.lpcbData-1)
      CASE lpdwType = REG_BINARY
         * Don't support binary
         aKeyValues[m.nKeyEntry,2] = REG_BINARY_LOC
      CASE lpdwType = REG_DWORD
         * You will need to use ASC() to check values here.
         aKeyValues[m.nKeyEntry,2] = Left(m.lpbData,m.lpcbData-1)
      OTHERWISE
         aKeyValues[m.nKeyEntry,2] = REG_UNKNOWN_LOC
      ENDCASE
   ENDDO

   IF m.nErrCode = ERROR_EOF AND m.nKeyEntry # 0
      m.nErrCode = ERROR_SUCCESS
   ENDIF
   RETURN m.nErrCode


ENDPROC
PROCEDURE Init
   THIS.nUserKey = HKEY_CURRENT_USER
   DO CASE
   CASE _DOS OR _UNIX OR _MAC OR ;
         ATC("Windows 3",OS(1)) # 0
      RETURN .F.
   CASE ATC("Windows NT",OS(1)) # 0
      THIS.nCurrentOS = OS_NT
      THIS.cRegDLLFile = DLL_ADVAPI_NT
   OTHERWISE
      * Windows 95
      THIS.nCurrentOS = OS_WIN95
      THIS.cRegDLLFile = DLL_ADVAPI_WIN95
   ENDCASE
   RETURN NOT THIS.lError


ENDPROC
%�PROCEDURE setinitialcontrolproperties
   STORE THIS.nMargin TO ;
      THIS.edtCode.Left, ;
      THIS.lstAvailableObjectsAndProcs.Left, ;
      THIS.cntTools.Left

   WITH THIS.lstAvailableObjectsAndProcs      
      STORE THIS.nMargin+THIS.cntTools.Height TO ;
         .Top
      STORE THIS.WIDTH - (THIS.nMargin*2) TO ;
         THIS.edtCode.Width, ;
         .Width
   ENDWITH

   WITH THIS.shpSplitter
      .Left = -THIS.nMargin
      .Width = THIS.Width + (THIS.nMargin * 2)
   ENDWITH

 
   STORE THIS.WIDTH + (THIS.nMargin*2) TO THIS.shpSplitter.WIDTH

   STORE THIS.shpSplitter.Top TO THIS.nLastSplitterPosition
   THIS.AdjustListColumnWidths()

   
   
ENDPROC
PROCEDURE setinitialformproperties
   WITH THIS
      .MaxHeight  = SYSMETRIC(2) - .nMargin
      .MaxWidth   = SYSMETRIC(1) - .nMargin

      IF THIS.Parent.lInCoverageFrame
         .WIDTH   = MIN(.MaxWidth, ;
            THIS.Parent.oFrame.WIDTH - (SYSMETRIC(3)*2))
         .Height  = MIN(.MaxHeight, ;
            THIS.Parent.oFrame.Height * .5)
         .Left    = SYSMETRIC(3)
         .Top     = SYSMETRIC(9)

      ELSE
         .WIDTH   = MIN(.MaxWidth, _SCREEN.WIDTH * .5)
         .Height  = MIN(.MaxHeight,_SCREEN.Height * .5)
      ENDIF

   ENDWITH
   RETURN NOT THIS.lError
   
ENDPROC
PROCEDURE respondtosplitter
   LPARAMETERS nYCoord
   
   LOCAL lnHighestAllowable
   lnHighestAllowable = (THIS.nListRowHeight * 1.5) ;
                        + THIS.lstAvailableObjectsAndProcs.Top
   DO CASE 
   CASE nYCoord < lnHighestAllowable
      * too high
      THIS.shpSplitter.Top = lnHighestAllowable
      
   CASE BETWEEN(nYCoord, lnHighestAllowable,THIS.Height-THIS.nMargin)
      * we're okay
      THIS.shpSplitter.Top = nYCoord      
   OTHERWISE
      * too low
      THIS.shpSplitter.Top = (THIS.Height - THIS.nMargin)
   ENDCASE
   THIS.SynchSizes()
   RETURN NOT THIS.lError
   
ENDPROC
PROCEDURE togglepreviewzoommode
   THIS.lInZoomMode = ! THIS.lInZoomMode
   IF THIS.lInZoomMode

      THIS.RespondToSplitter(THIS.Height - THIS.nMargin)
     
   ELSE
      IF THIS.nLastSplitterPosition >= THIS.Height-THIS.nMargin
         THIS.nLastSplitterPosition = (THIS.lstAvailableObjectsandProcs.Top + ;
                                       THIS.lstAvailableObjectsandProcs.Height) - ;
                                       THIS.nMargin
      ENDIF
      THIS.RespondToSplitter(THIS.nLastSplitterPosition)
      IF THIS.edtCode.Height < THIS.lstAvailableObjectsandProcs.Height
         THIS.Height = THIS.edtCode.Top + ;
                       THIS.lstAvailableObjectsandProcs.Height + ;
                       THIS.nMargin
      ENDIF
   ENDIF
*   THISFORMSET.SynchZoomWindowState()
* the above is going to be called by synchsizes,
* from RespondToSplitter, at all times 
   
   RETURN NOT THIS.lError
   
   
ENDPROC
PROCEDURE adjustlistcolumnwidths
   LPARAMETERS nLeftColumnWidth
   IF TYPE("nLeftColumnWidth") = "N"
      THIS.iLeftListColWidth = nLeftColumnWidth
   ENDIF
   WITH THIS.lstAvailableObjectsAndProcs
      .ColumnWidths =  ;
         ALLTR(STR(THIS.iLeftListColWidth))+","+ ;
         ALLTR(STR(.WIDTH - THIS.iLeftListColWidth))
   ENDWITH


ENDPROC
PROCEDURE addtool
LPARAMETERS tcClass

ASSERT TYPE("tcClass") = "C" 

LOCAL cName

cName = "tool"+SYS(2015)

THIS.cntTools.AddObject(cName,tcClass)

IF TYPE("THIS.cntTools."+cName+".Name") = "C"

   STORE .T. TO ("THIS.cntTools."+cName+".Visible")
   THIS.cntTools.SynchSizes()

ENDIF

RETURN (NOT THIS.lError)   
      


ENDPROC
PROCEDURE setlistrowheight
WITH THIS.lstAvailableObjectsandProcs
   THIS.nListRowHeight = FONTM(1,.FontName,.FontSize) + ;
                         FONTM(5,.FontName,.FontSize) + ;
                         FONTM(4,.FontName,.FontSize)
ENDWITH                         
ENDPROC
PROCEDURE RightClick
   THISFORMSET.StandardRightClick()

ENDPROC
PROCEDURE synchsizes
   * make sure that the list hasn't gotten too
   * large for the number of items in it
   * because the part under the real items is
   * difficult to manage (can't get mouseclicks etc)

   LOCAL lnMaxListHeight, lnProposedListHeight,lnMinimumListHeight , liCount
 
   IF THIS.nListRowHeight = 0
      THIS.SetListRowHeight()
   ENDIF
   IF THIS.Parent.iTargetReccount < 1
      THIS.Parent.iTargetReccount = 1
   ENDIF
   
 
  THIS.lInZoomMode = ( THIS.shpSplitter.Top >= ;
                      (THIS.Height - THIS.nMargin) )

   
   WITH THIS.lstAvailableObjectsAndProcs
       
       * this property can change as the font does...       
       DO CASE
       CASE TYPE("THIS.Parent.iTargetReccount") = "N"
          liCount = THIS.Parent.iTargetReccount
       CASE USED(THIS.Parent.cTargetAlias)
          liCount = RECCOUNT(THIS.Parent.cTargetAlias)
       OTHERWISE
          liCount = .ListCount
       ENDCASE

       lnMinimumListHeight = THIS.nListRowHeight * 1.5
       THIS.Height = MAX(THIS.Height, ;
                         (lnMinimumListHeight + .Top + THIS.nMargin + 2))

       lnMaxListHeight = MAX(MAX(liCount,1) * THIS.nListRowHeight,lnMinimumListHeight)

       *&* start out not wanting to 
       *&* disturb the user's current listheight
       *&* settings:       
       lnProposedListHeight = THIS.shpSplitter.Top - .Top
       
       IF liCount > 1 AND ;
          (lnProposedListHeight <= lnMinimumListHeight)
          *&* we've just loaded a log and
          *&* the last log was very short
          *&*  so let's make sure we
          *&* can display at least 2 lines and 
          *&* hopefully the scrollbar
          lnProposedListHeight = MIN(liCount,3) * THIS.nListRowHeight
       ENDIF

       
       DO CASE
       CASE liCount < 2
           .Height = lnMinimumListHeight
       CASE lnProposedListHeight < lnMinimumListHeight OR ;
            lnProposedListHeight > lnMaxListHeight
           *&* average the available values and
           *&* try to come out with something reasonable
           .Height = (lnMinimumListHeight+lnMaxListHeight)/2
       OTHERWISE
           .Height = lnProposedListHeight           
       ENDCASE

       THIS.shpSplitter.Top = .Height + .Top

   ENDWITH
   
   * ENDDOUG_ER <g>

   THIS.edtCode.Visible = (NOT THIS.lInZoomMode)


   IF THIS.lInZoomMode

      THIS.shpSplitter.MousePointer = MOUSEPOINTER_ARROW_UP
      THIS.Height = THIS.shpSplitter.Top + THIS.nMargin

   ELSE
   
      THIS.nLastSplitterPosition = THIS.shpSplitter.Top  

      THIS.edtCode.Top = ;
         THIS.lstAvailableObjectsAndProcs.Top+ ;
         THIS.lstAvailableObjectsAndProcs.Height+ ;         
         THIS.nMargin

      THIS.edtCode.Height = MAX(THIS.nMargin/2, ;
                               THIS.Height -(THIS.edtCode.Top+THIS.nMargin))
                               
      IF THIS.edtCode.Height < THIS.lstAvailableObjectsandProcs.Height
         THIS.Height = THIS.edtCode.Top + ;
                       THIS.lstAvailableObjectsandProcs.Height + ;
                       THIS.nMargin
         THIS.edtCode.Height = THIS.lstAvailableObjectsandProcs.Height              
      ENDIF                               

      THIS.shpSplitter.MousePointer = MOUSEPOINTER_SIZE_NS

   ENDIF

   THIS.cntTools.opgPreviewZoomMode.Value = IIF(THIS.lInZoomMode,2,1)
   THISFORMSET.SynchZoomWindowState()

   RETURN NOT THIS.lError
   
ENDPROC
PROCEDURE DragDrop
   LPARAMETERS oSource, nXCoord, nYCoord
   IF nYCoord > (THIS.Height - THIS.nMargin)
      THISFORM.RespondToSplitter(nYCoord)
   ENDIF
   RETURN NOT THIS.lError
   
ENDPROC
PROCEDURE Init
   LOCAL ARRAY aTemp[1]

   ASSERT TYPE("THISFORMSET") = "O" AND ;
      AMEMBERS(aTemp,THISFORMSET,1) > 0 ;
      AND ASCAN(aTemp,"LIGNORECOVERAGEFILENAMES") > 0

   LOCAL lReturn, irow, icol

   * this is to avoid showing the splitter-mouse-pointer
   * during start up
   irow = MROW("",3)
   icol = MCOL("",3)
   MOUSE AT 0,0 PIXELS WINDOW (_SCREEN.Name)

   lReturn = DODEFAULT()
   IF lReturn
      THIS.SetInitialFormProperties()
      THIS.SetInitialControlProperties()
   ENDIF

   MOUSE AT irow,icol PIXELS WINDOW (_SCREEN.Name)

   RETURN lReturn AND NOT THIS.lError

ENDPROC
PROCEDURE Resize
   DODEFAULT()

   IF THIS.cntTools.ControlCount # THIS.nToolCount
      THIS.cntTools.SynchSizes()
      THIS.nToolCount = THIS.cnTools.ControlCount
   ENDIF

   STORE THIS.WIDTH - (THIS.nMargin*2) TO ;
      THIS.edtCode.WIDTH, ;
      THIS.lstAvailableObjectsAndProcs.WIDTH

   THIS.AdjustListColumnWidths()

   THIS.shpSplitter.WIDTH = THIS.WIDTH+(THIS.nMargin*2)

   IF THIS.nLastSplitterPosition > ;
         (THIS.Height - THIS.nMargin)
      THIS.nLastSplitterPosition = ;
         (THIS.Height - (THIS.nMargin * 2))
   ENDIF

   THIS.RespondToSplitter(THIS.shpSplitter.Top)

   RETURN NOT THIS.lError
   
ENDPROC
PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   DODEFAULT(nError,cMethod,nLine)
   
ENDPROC
PROCEDURE AddObject
   LPARAMETERS cName, cClass
   LOCAL nWidth, nHeight
   IF DODEFAULT(cName,cClass)
      nWidth = EVAL("THIS."+cName+".Width") + ;
         EVAL("THIS."+cName+".Left")
      nHeight =  EVAL("THIS."+cName+".Top") + ;
         EVAL("THIS."+cName+".Height")
      THIS.MinWidth = MAX(nWidth,THIS.MinWidth)
   ENDIF
   NODEFAULT
   RETURN NOT THIS.lError
   
ENDPROC
PROCEDURE KeyPress
   LPARAMETERS nKeyCode, nShiftAltCtrl
   IF nKeyCode = 93
      THISFORMSET.StandardRightClick()
      NODEFAULT
   ENDIF
   
ENDPROC
PROCEDURE fieldtosearch
LPARAMETERS tcWhichField, tlSearchThisField

LOCAL lcWhichField 

lcWhichField = "[|]+"+ALLTR(UPPER(tcWhichField))+"+[|]"

IF tlSearchThisField

   * add it to the expression, which, when EVAL()'d,
   * creates a string of the values *contained* all 
   * fields in the list delimited with "|" chars

   DO CASE
   CASE EMPTY(THIS.cFieldsToSearch)
      THIS.cFieldsToSearch = lcWhichField
   CASE ATC(lcWhichField,THIS.cFieldsToSearch) = 0
      THIS.cFieldsToSearch =  ;
         THIS.cFieldsToSearch+"+"+lcWhichField
   OTHERWISE
      * it's already there
   ENDCASE

ELSE

   * subtract it from the expression
   IF NOT EMPTY(THIS.cFieldsToSearch)
      THIS.cFieldsToSearch = ;
         STRTRAN(THIS.cFieldsToSearch,lcWhichField,"")
   ENDIF         
   
   * trim the expression after removing part of
   * its contents and get rid of any dreck
   THIS.cFieldsToSearch = ALLTR(THIS.cFieldsToSearch)
   
   * if we've taken out the middle one, this could happen:
   THIS.cFieldsToSearch = STRTRAN(THIS.cFieldsToSearch,"++","+")
   
   DO WHILE LEFT(THIS.cFieldsToSearch,1) = "+"
      THIS.cFieldsToSearch = SUBSTR(THIS.cFieldsToSearch,2)
   ENDDO

   DO WHILE RIGHT(THIS.cFieldsToSearch,1) = "+"
      THIS.cFieldsToSearch = ;
          LEFT(THIS.cFieldsToSearch,LEN(THIS.cFieldsToSearch)-1)
   ENDDO

ENDIF

THIS.CheckFindButton(.T.)

ENDPROC
PROCEDURE checkfindbutton
LPARAMETERS tlNewSearch

IF tlNewSearch
   THIS.cmdOK.Caption = COV_FIND_FIND_LOC  
ENDIF   
* we need an expression to search in 
* and a value to look for, before
* we can Find anything:
THIS.cmdOK.Enabled = ;
  (NOT (EMPTY(THIS.txtSearch.Value) OR ;
        EMPTY(THIS.cFieldsToSearch)) )
        
ENDPROC
PROCEDURE find
WITH THISFORMSET

   LOCAL lcAlias, liSelect, liRec, ;
         lcLocateCriterion, llFindAgain, llInSource

   lcAlias = .cTargetAlias
   * note that this can change
   * over the (modeless) life
   * of this Find form, 
   * so we retrieve it each time we need it,
   * we don't store it
   liSelect = SELECT()
   liRec = RECNO(lcAlias)

   
   SELECT (lcAlias)
   
   llFindAgain = THIS.InFindAgainState()
   
   IF llFindAgain AND THIS.chkSourceCode.Value ;
      AND .ShowTargetText(ALLTR(THIS.txtSearch.Value),THIS.chkMatchCase.Value, .T.)
      * show it again in the current record
     
   ELSE
  
      IF llFindAgain
         SKIP
      ENDIF

      DO CASE
      CASE UPPER(ALLTR(THIS.txtSearch.Value)) == ;
           UPPER(COV_FULL_SOURCE_FILE_LOC)
         lcLocateCriterion = "EMPTY(ObjClass)"
      CASE THIS.chkMatchCase.Value
         lcLocateCriterion = ;
           "AT(ALLTR(THIS.txtSearch.Value), "+;
              "EVAL(THIS.cFieldsToSearch)) > 0"
      OTHERWISE
         lcLocateCriterion = ;
              "ATC(ALLTR(THIS.txtSearch.Value), "+ ;
                  "EVAL(THIS.cFieldsToSearch)) > 0"
      ENDCASE
     
      LOCATE REST FOR &lcLocateCriterion
      
      IF THIS.chkWrapAround.Value AND EOF()
         GO TOP
         LOCATE REST FOR &lcLocateCriterion    
         * because a CONTINUE didn't work  
      ENDIF
   
      IF FOUND() AND ;
        (RECNO() # liRec OR  (NOT llFindAgain))
   
         THIS.cmdOK.Caption = COV_FIND_FINDNEXT_LOC  
   
         .frmMainDialog.Show()
            
         DO CASE
         CASE THIS.chkClasses.Value AND ;
              ((THIS.chkMatchCase.Value AND ;
                AT(ALLTR(THIS.txtSearch.Value),ObjClass)>0) OR ;
              (ATC(ALLTR(THIS.txtSearch.Value),ObjClass)>0))
         
            * found in the classnames
               
         CASE THIS.chkFileNames.Value AND ;
              ((THIS.chkMatchCase.Value AND ;
               AT(ALLTR(THIS.txtSearch.Value),HostFile)>0) OR ;
              (ATC(ALLTR(THIS.txtSearch.Value),HostFile)>0))
         
            * found in the filenames
        
         OTHERWISE
            * it's in the source code
            llInSource = .T.
         ENDCASE
         .SetTargetRow(RECNO())
         .NotifyTargetRecordChanged()         
         IF llInSource
            .ShowTargetText(ALLTR(THIS.txtSearch.Value), THIS.chkMatchCase.Value)
         ELSE
            THIS.Show()
         ENDIF
      ELSE
         GO liRec
         WAIT WINDOW NOWAIT COV_FIND_NOTFOUND_LOC
         ?? CHR(7)
         THIS.cmdOK.Caption = COV_FIND_FIND_LOC  
      ENDIF

   ENDIF
      
   SELECT (liSelect)   
      
ENDWITH   

ENDPROC
PROCEDURE infindagainstate
RETURN (STRTRAN(COV_FIND_FINDNEXT_LOC,"\<","")  $ STRTRAN(THIS.cmdOK.Caption,"\<",""))

ENDPROC
PROCEDURE Init
DO CASE
CASE TYPE("THISFORMSET.cBaseMonoFontName") # "C"
   RETURN .F.
   * this is only meant to be called
   * as a child form of the coverage set
CASE DODEFAULT(THISFORMSET)
   
   THIS.oCoverageEngine = THISFORMSET
   * THIS.txtSearch.FontName = THISFORMSET.cBaseMonoFontName
   THIS.chkSourceCode.Value = .T.
   THIS.chkClasses.Value = .T.
   THIS.chkFilenames.Value = .T.

   THIS.CheckFindButton(.T.)

   IF THISFORMSET.lInCoverageFrame
       ACTI WINDOW (THISFORMSET.oFrame.Name) SAME
   ENDIF
OTHERWISE
   RETURN .F.   
ENDCASE


ENDPROC
PROCEDURE cmdOK.Click
THISFORM.Find()
THIS.Default = .T.
* otherwise it seems to lose the attribute

ENDPROC
A-�� AA��%�7+?@�:�U�,%�C�THIS.frmMainDialog.Classb�C�������T��C��Target����%�C��������C�����%�C�+
����#����CO���
��C������UCTARGETTHISGETALIAS
FRMMAINDIALOGTOGGLEPREVIEWZOOMMODENOTIFYTARGETRECORDCHANGED�
H�
���*�C�THIS.frmZoom.BaseClassb�C��7�"����
�
���	��i���C�����"��������
	����%���������T��������%����
������C��������������R%�C����������	��#C�
���
���
��������,T��������	C�	�%C��%��T�
����
�������C�����2����
B���
��U
THIS
FRMMAINDIALOGLINZOOMMODEFRMZOOMVISIBLEHIDEWINDOWSTATESHOWTOPHEIGHTLEFTWIDTHLERROR������T��C��Target����%�C��
��>�B��%�����|�*lNoCodeYet = EMPTY(&cTarget..Profiled)
���(lNoCodeYet = EMPTY(&cTarget..Marked)
�$%���
���	���	�������T��C��	
���%��������(cCaption = ALLTR(&cTarget..ObjClass)
%�C����e�(T���All Classes, Objects, Procs�����%��!�����T��C�C�!��\��������
����
%������;T���-Fast Mode: DoubleClick/Enter on List for Code���V�S.Caption = "Marked Code For"  +  +" "+ALLTR(&cTarget..Hostfile)+  ": "+cCaption
�T���
������C���%��
����T��a����������C�����T����
�����
B���
��UCTARGET
LNOCODEYETCCAPTIONTHISGETALIASLINPROFILEMODE
FRMMAINDIALOGLINZOOMMODE
LFASTZOOMMODEMARKONETARGETRECORDFRMZOOMCAPTIONEDTCODESELSTARTREFRESHVISIBLELERROR������C��
����C��
��"��C�tcWhichDialogClassb�C����C�tcWhichClassLibb�C����������%���������C���	�����t&��T��C����
����T������T��������C���	��5%�C��
�"C�ALIAS �C�CLASSLIBv��	��V�<R����SET CLASSLIB TO &cLibs
�T��������
B���
��U
TCWHICHDIALOGCLASSTCWHICHCLASSLIBOFORMREFCALIASCLOGCLIBSTHISLINCOVERAGEFRAMEOFRAMESHOWCAPPNAME
CSUSPENDEDLOGLERROR�'�����������T���	�
��T���	���T���	���4T��C�cov_optionsdialog�COVERAGE.VCX�	�
��
%������
��C�	���#%����	�
�	�
����
��C�	���T��CW��T��C��Target�	���
F����T��CO��
�C��
��%�� �����%�C�2You have changed Coverage marks, but some records C�
 �'in the current log are already marked. C�
 C�
 �Would you like to: C�
 C�
 �)Preserve current marked records (yes) or C�
 C�
 �%Empty and re-mark these records (no)?�4�Coverage Profiler�x�����>�����%��	��	�	�
	����
��C�	���T��a�����	#����
F����
��C�	�����%��
��	�	��
	��C�1You have chosen to mark all records on load, but C�
 �7some records in the current log may not be marked yet. C�
 C�
 �'Would you like to mark all records now?�4�Coverage Profiler�x�	����
��C�	���
��C�	�����B����	�
	��ULRETURNLPROFILEMODECMARKCMARKNOTCTARGETISELECTIRECNOLMARKALLLALREADYREMARKEDTHIS
CMARKEXECUTEDCMARKNOTEXECUTEDLMARKALLONLOADSHOWMODALDIALOG
SETUIFONTSSETMARKSGETALIASMARKEDALLLINPROFILEMODEMARKALLTARGETRECORDSNOTIFYTARGETRECORDCHANGEDLERROR!�������
%����+�T��C����%�����\�/������:�������x�/������:���%�C��
���t,����#T��C��C�\����\��%�C���R�.����T��C�C�>�=���%�C�����z,���(���������U	TLFROMMODALDIALOG
WONTOPWIND
WSOURCELOGTHISLINCOVERAGEFRAMECSOURCEFILEOFRAMENAMESCREEN�������T��C��Source����T��C��Skipped����%�C��������%�C���	CC�N�
	��#�T��CW��T��C���
F����%�������	:'�������	�����	:'����
��z,���(�������
F����%�C��
���t,������~�S��C�No log entries were skipped.�@�Coverage Profiler� �Information�x����
B���
��UCSOURCECALIASISELECT
WONTOPWINDTHISGETALIASCREATESKIPPEDCURSORLINCOVERAGEFRAMEOFRAMENAMESCREENLERROR�%�������3���������	�
���
�
������
T�����T��C���f��T�
�C�	�%��T��CC��Skipped��f��%�C��
����
T������$T��CC��C�\����\f��%�C��
���
T������T�
�CC�f��
T�	�������9���
H�?�
�F�����	��
�C��f�TOOLBAR����������������T�	��	���
���	��T���	�����2�
�%�C��fC���f����!��	�
T�	��������
T�����%�C��
��n�%���
��Q�
T������j�T��������%�C��
����%���
����
T��������T������������	�(���������%�T��������
��T��������
��T��������&T���
C��������$��%�C��
���

	�����,6���������%�C��
���

	����z,���(����������z,���(���������%�C��
���

	��2��,6���������z,���(��������%�C��
�����,���������9z,���(�������
C��������$����B���
��UTHISLINCOVERAGEFRAMEWFRAMEICHILDWCHILDWINDOWNPOS
NPOSFOXELSCALIASCSOURCEWINDINUMBERWINDOWS
WONTOPWIND
WFRAMETOPWINDOFORMNSTAGGERAWINDOWCOLLECTIONOFRAMENAMEGETALIASCSOURCEFILEFORMS
SHOWWINDOWVISIBLE	BASECLASSWINDOWSTATELEFTTOPFONTNAMEFONTSIZELERROR9T�����
��%���
��2�
��C�����UTHIS
LFASTZOOMMODENOTIFYTARGETRECORDCHANGEDj%����� ���C������-�t&��0%�C�THIS.frmFindDialog.BaseClassb�C��������C��C�
frmFindDialog�cov_finddialog�COVERAGE.VCX������5%�C��
�"C�ALIAS �C�CLASSLIBv��	���<R����SET CLASSLIB TO &cLibs
��0%�C�THIS.frmFindDialog.BaseClassb�C��V���C��	����
B���

��UTHISLINCOVERAGEFRAMEOFRAMESHOWOFORMREFCALIASCLIBS	NEWOBJECTCAPPNAME
FRMFINDDIALOGLERROR������������(%�C���C����C�C��
��\�T��C��f���s�T��C�f���%�C��
����B��%�CCf�
����T��CW��
F���������	�
����%�C����N�C��
	��u�%�C+����#6��T��CO��-�+�CO��(��%�C+��K�
T�����T������q�T������
T���������T��CO��T������	#����T�������%�C��
����
F�����UTIREC
TCTARGETALIASLISELECTLIRECLIVALUELCTARGETLIOLDRECTHISCTARGETALIAS
FRMMAINDIALOGLSTAVAILABLEOBJECTSANDPROCSVALUE��������������,%�C�THIS.frmMainDialog.Classb�C��]�B�-���%��	�
�����T���	������T���	�
���0%�C�THIS.frmFindDialog.BaseClassb�C����T���	�
�����T������������%���	��	����T��C����\��
%����_�T��C���������T��CC�fC�f��������
T������%�C����C�C��
	���
%������T��C��������T��C��������%�C��
����T��a��T������T��C�>����C���%�C��
�����������%�C����������T��������������T�����T��������B���	�	�
	��UTCTEXTTLCASESENSITIVETLFINDAGAINLIPOSLODIALOGLCTEXTBEFORE
LIINCIDENTLLFOUNDLOWONTOPTHIS
FRMMAINDIALOGLINZOOMMODEFRMZOOM
FRMFINDDIALOGEDTCODESELSTARTVALUE	SELLENGTHSETFOCUSPARENTTOPHEIGHTLERROR�
%�C�������%T��C�ZoomMode�������%�������`���C��������C�������C��������B�-���ULLZOOMTHISGETREGISTRYKEYVALUE
FRMMAINDIALOGLINZOOMMODETOGGLEPREVIEWZOOMMODERESIZEFRMZOOM�GUI(��
wq�����'T��C�����O����
	��
%����l�T����a��t,��������COVSHORT.MPR�
%������T����-���GUI(�<��ULLOUTPUTCHANGETHISOFRAMEALLOWOUTPUTNAMECOVSHORTMPR����������T��C��Target����T��C�O����C�����#�������%���
����
��C�����U	TCSOURCETCTARGET	TCPROJECTIRECNOCTARGETTHISGETALIASLERRORNOTIFYTARGETRECORDCHANGED��������������T��C��Project�	�
��%�C������� %�C�	���C�	�0
����T�	���COV_PJX.FRX���T��C�FORM�N��?T����Coverage Profiler�Statistics by \<Project...��T���C���\<����T��CW��
F����T��C���%��	�
��f�T���9���T�9�����t&��"T��� WINDOW (oForm.Name) ��%��	�

��	�	����&T���� IN WINDOW �	��������T���C���T�C�����;REPORT FORM (THIS.cProjectFRX) PREVIEW &cClauses NOWAIT
G�(��	���T�C�����%��	�
��p�T�9������%��	�������C�	�����%�C��
����t,)�������t&��
F�����
B��	�
��UTCSOURCETCTARGET	TCPROJECTCPROJECTISELECTISTATE
WONTOPWINDCCLAUSESOFORMTHISGETALIASCPROJECTFRXCAPTIONLVFP5WINDOWSTATELINCOVERAGEFRAMEOFRAMENAMELILANGUAGEOPTIONSLANGUAGEOPTIONS
DATASESSIONIDSHOWLERRORT
%�C��M�
��C����3��C�cov_statisticsdialog�COVERAGE.VCX�����UTHISMARKONETARGETRECORDSHOWMODALDIALOGV����%�C����B���C������
��C�����
B���
��UTCSOURCETCTARGETTHISSETUITOSHOWCODENOTIFYTARGETRECORDCHANGEDLERROR6T���������T���������T���������T����	���
����C�����&J����(���
����
��&J����(���
����
��&J����(���
����
��&J����(���
�	���
�	�%������/���C������UTHIS
FRMMAINDIALOGLSTAVAILABLEOBJECTSANDPROCSFONTNAME
CBASEFONTNAMEFONTSIZE
NBASEFONTSIZE
FONTITALICLBASEFONTITALICFONTBOLD
LBASEFONTBOLDSETLISTROWHEIGHTCBASEMONOFONTNAMEEDTCODEFRMZOOMNBASEMONOFONTSIZELBASEMONOFONTITALICLBASEMONOFONTBOLDVISIBLE
SYNCHSIZES�����%�C������"%�C���C�fC��f����*T������C������6��2T���	���
� - �Coverage Profiler��T��������
��C������C���
�������
B���
��UTCSOURCETCTARGETTHISCTARGETALIAS
FRMMAINDIALOGCNTTOOLSOPGCOVERAGEPROFILEMODEVALUELINPROFILEMODECAPTIONCSOURCEFILELSTAVAILABLEOBJECTSANDPROCSNOTIFYTARGETRECORDCHANGEDSHOWLERROR���������T��C��Source����T��C��Target����%���������J��
IIF(EMPTY(��.ObjClass),[�All Classes, Objects, Procs�], �
IIF([!] $ ��.ObjClass, �SUBSTR(��.ObjClass,AT([!],��.ObjClass)+1),��
.ObjClass)), �IIF(.T.,SPACE(1) +��
.HostFile,[])�(����	�HJ��C��
��	.Profiled�
�.Marked6�(������
���%����������C�����������3��COV_PJX.FRX���O��COVERAGE.VCX���O��COVERAGE.VCX���O��COVERAGE.VCX���O��COVERAGE.VCX���O��COVERAGE.VCX����COVERAGE.ICO���HO_SPLIT.CUR���COVERAGE.BMP���
ADDINS.BMP���OPEN.BMP���PROFILE.BMP���ZOOM.BMP���OPTIONS.BMP���SAVE.BMP���PREVIEW.BMP���	STATS.BMP���FIND.BMP���COVERAGE.MSK���
ADDINS.MSK���OPEN.MSK���PROFILE.MSK���ZOOM.MSK���OPTIONS.MSK���SAVE.MSK���PREVIEW.MSK���	STATS.MSK���FIND.MSK�UTCSOURCETCTARGETCSOURCECTARGETTHISGETALIASCTARGETALIAS
FRMMAINDIALOGLSTAVAILABLEOBJECTSANDPROCS	ROWSOURCELINPROFILEMODEEDTCODE
CONTROLSOURCEFRMZOOMVISIBLE
SYNCHSIZESCOVERAGEICOHO_SPLITCURBMPADDINSOPENPROFILEZOOMOPTIONSSAVEPREVIEWSTATSFINDMSK���������T��C�����%��
����%������h�T�����������C�������	B����UTCSOURCETCTARGET
TLDOINGALLLRETURNTHISITARGETRECCOUNTSETUITOSHOWCODE�����������
T��C��
%������%�����W���C������d�t&��L��C�
frmMainDialog�cov_maindialog_standard�COVERAGE.VCX��
��	��=��C�frmZoom�cov_zoomdialog�COVERAGE.VCX��
��	���%�C�THIS.frmMainDialog.Nameb�C�C�����a��&C��COV_MAINDIALOG_STANDARD���C�THIS.frmZoom.Nameb�C�C�����a��C��COV_ZOOMDIALOG������$��C�9Cov_Standard's .cMainDialogClass and/or .cZoomDialogClassC�
 �have been incorrectly assigned.C�
 C�
 �7This Coverage User Interface class must contain dialogsC�
 �descended from �+cov_MainDialog_Standard and cov_ZoomDialog.��Coverage Profiler� �Problem�x��T��-����B�����

	��ULRETURNLACHECK
CMAINALIAS
CZOOMALIASCLIBSTHISLINCOVERAGEFRAMEOFRAMESHOW	NEWOBJECTCAPPNAME
FRMMAINDIALOGFRMZOOMLERROR�
%�C����,%�C�THIS.frmMainDialog.Classb�C����!��C�ZoomMode���������C�FastZoom��������C������������B�-���UTHISSETREGISTRYKEYVALUE
FRMMAINDIALOGLINZOOMMODE
LFASTZOOMMODERELEASE1%T���C�FastZoom������	B�C��UTHIS
LFASTZOOMMODEGETREGISTRYKEYVALUEl�����%�C�����V�.12�CTRL-F5�_oCoverage.ShowFindDialog()��e�B�-���UTCFILETLUNATTENDEDTCADDINCTRLF5{2�CTRL-F5��	��C��UCTRLF5notifyzoomwindowclosed,��synchzoomwindowstate2��notifytargetrecordchanged\��showmodaldialog���getoptionsfromuser	��showtextlog��showskippedfiles���arrangeframewindows���togglefastzoommode���showfinddialog���settargetrow���showtargettext=��setuioptions ��standardrightclick"!��showprojectstatistics"��displayprojectstatistics#��showstatistics�&��togglecoverageprofilemoder'��
setuifonts(��setuitoshowfilestatesu*��setuitoshowcode6,��markonetargetrecordI1��createforms/2��saveformsetattributes�5��setformsetattributes�6��Init7��Destroy�7��1�q���A�AB3��%#q1AAA&�ABA�B�3��BA���AD�1A2����!�AA���3A���AB�aB�3���!�2b�QA�S��AR�3rA��1�����������AAA���A��AAB3q���A��AA�1��A�qAA41����������Aq��A�2AA�34��Q��AA�A���dB�1��A��CAA�!��AA!��AA���Ai���q�qAA��qA��AB�3A�A2�QA�:T��ABB�3�r�!��AFA2��A2��QB�B�����A���B��B�A3���rA2�A��A���a��A��A��a�aAB�!���aAAA���ABR2�qRqA�qA3�rs�A2�Ar�6����Q�A3�����AB�������QA"�bAs������AA��QA�B�3��1B3�RQ�B�3����dccc2A4�R"�#b��EC�3����BX�2A�DVbaaaaBBB!111B!1114�r��AqAQA�3����QA���A�AAB4����B�qA3R�2����qA22�2"(
S#1iAL��d*D��f%��L���C.%�l.�.��/;2�^28�9+8>
m<>|?Qy�?SA`�A�Bz��B5J��ZJ�J��K�K��L�O��*PbS��S`\%�\�]p�]�c�(
d^e�3�e�e�6fg�=g�g�)A2�� k+%�p6�U�������T��C����������{�T�����%���
���	��c�T��a���w�T��-�����U	TCFILECFILETHISOCOVERAGEENGINECADDINLUSINGREGISTRYCHKREGISTERADDINSVALUELREGISTERADDINolT����C��Please specify an Add-In to run�	All Files�
 (*.*)|*.*����GETFILE�����UTHISCBOFILETORUNDISPLAYVALUEOCOVERAGEENGINEGETRESOURCELOCATION T����C����
��UTHISCMDOKENABLEDCBOFILETORUNDISPLAYVALUE��������T��C���
%������1T����Coverage Profiler� �Add-Ins��7T�����$Register this \<Add-In after running��T�����\<Run��T�����Cancel��T�����Add-Ins��%���	�

���T����-���������	����(%�C�
cAddInFileb�C�C��
	����%�C��=�\]����)��C�\]CC��\�\�\\���
��������CC��\�\\���
�������T������	����J���	��(��
���UTOENGINEREFLRETURN
CADDINFILETHISCAPTIONCHKREGISTERADDINSCMDOK	CMDCANCELLBLTITLEOCOVERAGEENGINELUSINGREGISTRYENABLEDAADDINSCBOFILETORUNADDITEMVALUELREGISTERADDINCADDINDISPLAYVALUE9�����'��C����:�������UNERRORCMETHODNLINETHISOCOVERAGEENGINEERRORNAME4��C�������T����
��C����UTHISFORMSETADDINCBOFILETORUNDISPLAYVALUEOCOVERAGEENGINERELEASED�����T���a��$��C����:������UNERRORCMETHODNLINETHISLERRORTHISFORMERRORNAMEsetaddin,��getaddin��checkoktorun���Init+��Error��CMDOK.Click|��CMDOK.Error���1qq������AA3�4�3q��q���B�Q�����AAA�A�B3�q3a��3��A2,
K;^��H+d�C.�o	H2�	

N)h�� OOȪ%��|��U0�������T�������T������T�������T�	���
���T�������T�
�������IT��CC����
�C���g�	��_����	���6��IT��CC����
�C���g�	��_����	���6����
B���
��UTHISOCOVERAGEENGINELSTACKXMLEXTENDEDTREECHKEXTENDEDSTACKXMLVALUE
CSTACKXSLT
CXSLTFILENAME
LSMARTPATHCHKSMARTPATHLREGISTERADDINCHKREGISTERADDINSLMARKALLONLOADCHKMARKALLONLOADLSTARTINPROFILEMODEOPGSTARTMODE
CMARKEXECUTEDTXTEXECUTEDCMARKNOTEXECUTEDTXTNOTEXECUTEDLERROR�����T������T������������>���C�����T���	��
��T���	����T��
�	����T���	����"T���	�C�����6��"T���	�C�����6��T���	����T���	����T������T������T������T���� ��T����!��T����"��T����#��T��$����T��%����T��&����T��'�� ��T��(��)��T��*��!��T��+��"��T��,��#��&��C�FontName�)�textbox��-��T����)����#T��.���� CC��Z���#T��.���� CC��Z���U/
OBASELABELOFIXEDLABELTHISLBLSHOWBASEFONTLBLSHOWFIXEDFONTOCOVERAGEENGINESETSTACKXSLTDISPLAYNAME
CSTACKXSLTCHKEXTENDEDSTACKXMLVALUELSTACKXMLEXTENDEDTREECHKSMARTPATH
LSMARTPATHCHKREGISTERADDINSLREGISTERADDINCHKMARKALLONLOADLMARKALLONLOADOPGSTARTMODELSTARTINPROFILEMODEOPGFRAMELINCOVERAGEFRAMETXTEXECUTED
CMARKEXECUTEDTXTNOTEXECUTEDCMARKNOTEXECUTEDFONTNAME
CBASEFONTNAMEFONTSIZE
NBASEFONTSIZE
FONTITALICLBASEFONTITALICFONTBOLD
LBASEFONTBOLDNBASEMONOFONTSIZELBASEMONOFONTITALICLBASEMONOFONTBOLDSAVEDBASEFONTNAMESAVEDBASEFONTSIZESAVEDBASEFONTITALICSAVEDBASEFONTBOLDSAVEDFIXEDFONTNAMECBASEMONOFONTNAMESAVEDFIXEDFONTSIZESAVEDFIXEDFONTITALICSAVEDFIXEDFONTBOLDSETALLCAPTION���������T������T������T������T����	��T�
�����T����
��T������T��������
B���
��UTHISOCOVERAGEENGINE
CBASEFONTNAMESAVEDBASEFONTNAME
NBASEFONTSIZESAVEDBASEFONTSIZELBASEFONTITALICSAVEDBASEFONTITALIC
LBASEFONTBOLDSAVEDBASEFONTBOLDCBASEMONOFONTNAMESAVEDFIXEDFONTNAMENBASEMONOFONTSIZESAVEDFIXEDFONTSIZELBASEMONOFONTITALICSAVEDFIXEDFONTITALICLBASEMONOFONTBOLDSAVEDFIXEDFONTBOLDLERRORJ�-�(�������UTHISCMDBASEFONTENABLEDCMDFIXEDFONT��������
T�����%�C����C�C��
	������������FT��C�C���C���B��6C�	��I��6�$w��T��C�������T�
������B�a��U
TCFILENAMELCFILELICHARSTHISFORMLBLSTACKXSLTWIDTHFONTNAMEFONTSIZEFONTBOLD
FONTITALICTHISCAPTION.�������C��������UNERRORCMETHODNLINETHISOCOVERAGEENGINEERROR������T��C���
%������1T����Coverage Profiler� �Options��T�����OK��T�����Cancel��T�����Options��&T�����Use \<Smart Pathing��.T�����Register \<Add-Ins when run��2T��	���\<Mark all code while log loads��T��
���
Start mode��&T���������
\<Coverage��%T���������	\<Profile��T��
���Environment��,T���������Co\<verage frame��*T���������Fo\<xPro frame��!T�����Coverage marks��T�����\<Executed:��"T�����\<Not executed:��/T�����Mark lengths will be matched��T�����Fonts��$T�����D\<isplay Font...��!T�����C\<ode Font...��*T�����StackLevel XML analysis��6T�����#\<Generate extended StackLevel tree��%T�����XSL \<Transform...��#T�����Set as \<default��%����
����T����-��T����-���T��C�����B�����
	��UTOENGINEREFLRETURNTHISCAPTIONCMDOK	CMDCANCEL
LBLOPTIONSCHKSMARTPATHCHKREGISTERADDINSCHKMARKALLONLOADLBLSTARTMODEOPGSTARTMODEBUTTONSLBLENVIRONMENTOPGFRAMELBLCOVERAGEMARKSLBLEXECUTEDLBLNOTEXECUTEDLBLMARKSMATCHEDLBLFONTSCMDBASEFONTCMDFIXEDFONTLBLSTACKCHKEXTENDEDSTACKXMLCMDSTACKXSLTCHKREGISTERDEFAULTSOCOVERAGEENGINELUSINGREGISTRYENABLED
GETOPTIONSLERROR�
���������C���%��������*��C�
CoverageFrame���������%��������	��}���C���	������T����
��C��
��UTHISFORM
SETOPTIONSOCOVERAGEENGINELUSINGREGISTRYSETREGISTRYKEYVALUEOPGFRAMEVALUECHKREGISTERDEFAULTSENABLEDSAVEOPTIONSTOREGISTRYRELEASE
setoptions,��
getoptions���restoreenginefonts
��disablefontsettingbuttons
��setstackxsltdisplaynameQ
��Error���Init���cmdOK.Click���1AAAA���A�3�AAAA!!AAbB326A�3�3q���e1AA1q3��3qq�R��a�!�aQ����!��A�aQ2BABB3�����ABB��2�
�c
 /�
�O;�
^=;�dId{L�pA��)O��� ����%���U������T���a��)%�C�THISFORMSET.BaseClassb�C��j�$��C����:�������{�	������UNERRORCMETHODNLINETHISLERRORTHISFORMSETERRORNAME.�������C��������UNERRORCMETHODNLINETHISPARENTERRORA'%�C������C���
	��:�T��������UTHISCAPTIONPICTURETOOLTIPTEXTA'%�C������C���
	��:�T��������UTHISCAPTIONPICTURETOOLTIPTEXT.�������C��������UNERRORCMETHODNLINETHISPARENTERRORError,��
Option1.Error���Option1.InitQ��Option2.Init���
Option2.Error%��1���A��A3��3r1A3r1A3��2�	\*��.)���� ���}%�-�U
��C����UTHISFORMSETSTANDARDRIGHTCLICK9�������C��������
B���
��U	OSOURCENXCOORDNYCOORDTHISFORMRESPONDTOSPLITTERSHPSPLITTERHEIGHTTHISLERROR
RightClick,��DragDropa��1�3���3;Z�)��� ��f�%Pd^�UT���-��UTHISVISIBLEInit,��1�2))���PROCEDURE domessage
   LPARAMETERS tcMessage, tnMessageBoxOptions, tcMessageBoxTitle
   ASSERT TYPE("tcMessage") = "C"
   
   LOCAL liReturn
   liReturn = 0
   
   IF TYPE("tnMessageBoxOptions") # "N"
      tnMessageBoxOptions = 0
   ENDIF
   IF TYPE("tcMessageBoxTitle") # "C"
      tcMessageBoxTitle = COV_DIALOG_CAPTION_LOC
   ENDIF
   IF THIS.lUnattended
      WAIT WINDOW LEFT(tcMessage,COV_MESSAGE_LIMIT);
           TIMEOUT COV_TIMEOUT_SECS
   ELSE
      liReturn = MESSAGEBOX(tcMessage, tnMessageBoxOptions, tcMessageBoxTitle)
   ENDIF
   RETURN liReturn
   

ENDPROC
PROCEDURE setuitoshowfilestates
   LPARAMETERS tcSource,tcTarget

   * abstract in the engine by design

   RETURN NOT THIS.lError

ENDPROC
PROCEDURE setmarks
   LOCAL iMarkLength
   * make sure that we've got valid marks
   IF TYPE("THIS.cMarkExecuted") # "C" OR ;
         TYPE("THIS.cMarkNotExecuted") # "C" OR ;
         EMPTY(THIS.cMarkExecuted + THIS.cMarkNotExecuted)
      * go back to original defaults,
      * since these are critical entities:
      THIS.cMarkExecuted = ;
         THIS.GetRegistryKeyValue("MarkExecuted",COV_DEFAULT_MARKEXECUTED)
      THIS.cMarkNotExecuted = ;
         THIS.GetRegistryKeyValue("MarkNotExecuted", COV_DEFAULT_MARKNOTEXECUTED)
   ENDIF
   iMarkLength = MAX(LEN(THIS.cMarkExecuted), ;
      LEN(THIS.cMarkNotExecuted), ;
      COV_DEFAULT_MARKSPACING)
   THIS.cMarkExecuted = PADR(THIS.cMarkExecuted,iMarkLength,SPACE(1))
   THIS.cMarkNotExecuted = PADR(THIS.cMarkNotExecuted,iMarkLength,SPACE(1))
   RETURN NOT THIS.lError


ENDPROC
PROCEDURE setuitoshowcode
   LPARAMETERS tcSource,tcTarget

   * abstract in the engine by design

   RETURN NOT THIS.lError

ENDPROC
PROCEDURE setuifonts
   * abstract in the engine class by design
   
   * this is where the font property values,
   * cBaseFont and nBaseFontSize,
   * cBaseMonoFont and nBaseMonoFontSize,
   * get translated to the interface as required in
   * a given interface

   RETURN NOT THIS.lError

ENDPROC
PROCEDURE setuioptions
   LOCAL lReturn
   lReturn = THIS.SetFontValues()
   IF lReturn
      lReturn = THIS.SetUiFonts()
   ENDIF
   IF lReturn
      lReturn = THIS.GetRegisteredAddins()
      IF TYPE("THIS.aAddIns[1]") = "C"
         THIS.cAddIn = THIS.aAddIns[1]
      ENDIF
   ENDIF
   RETURN lReturn AND NOT THIS.lError

ENDPROC
PROCEDURE passedproperparams
   LPARAMETERS tcFile,tlUnattended,tcAddIn

   LOCAL lReturn

   lReturn = ( (EMPTY(tcFile) OR TYPE("tcFile") = "C")   AND ;
      (EMPTY(tcAddIn) OR TYPE("tcAddIn") = "C") AND ;
      (EMPTY(tlUnattended) OR TYPE("tlUnattended") = "L") )

   IF NOT lReturn
      * This will actually result in a
      * messagebox even in
      * unattended mode, 
      * because that value isn't set yet,
      * but that's okay --
      * we want them to know their automated test went nowhere!
      * No way to do this except by "getting stuck"...

      THIS.DoMessage(COV_BAD_PARAMS_LOC,COV_STOP_MESSAGEBOX)
   ENDIF

   RETURN lReturn


ENDPROC
PROCEDURE setlogfile
   LPARAMETERS tcFile

   LOCAL lReturn, lcFile, liAnswer, loHost

   IF TYPE("tcFile") # "C"
      * there is no SET COVERAGE ON/OFF
      * SET("COVERAGE") is how you get the filename
      lcFile = SET("COVERAGE")
   ELSE
      lcFile = ALLTRIM(tcFile)
      IF (NOT EMPTY(lcFile)) AND EMPTY(SYS(2000,FULLPATH(lcFile)))
         IF AT(".",SUBSTR(lcFile,RAT("\",lcFile)+1)) = 0
            * have to substr, because a relative path 
            * might have been passed with .'s on the left end
            lcFile = lcFile+".log"
            IF EMPTY(SYS(2000,FULLPATH(lcFile))) AND THIS.lVFP5
               lcFile = STRTRAN(lcFile,".log",".txt")
            ENDIF
         ENDIF
      ENDIF
      IF NOT EMPTY(lcFile)
         lcFile = FULLPATH(lcFile)        
      ENDIF
   ENDIF

   IF EMPTY(lcFile) OR EMPTY(SYS(2000,lcFile))
      * offer a chance to find one:
       lcFile = THIS.GetResourceLocation("", ;
         COV_GETLOGFILE_TITLE_LOC, ;
         COV_LOGFILES_LOC+" (*.log;*.txt)|*.log;*.txt|" + ;
         COV_ALLFILES_LOC+" (*.*)|*.*",;
         "", ;
         "getfile" )
   ENDIF

   DO CASE
   CASE EMPTY(lcFile) AND (NOT EMPTY(THIS.cSourceFile))
      * do nothing, just return
   CASE EMPTY(lcFile)
      * called from Init, no log has yet been set
      * but the OCX isn't generating an appropriate
      * trappable error
*!*	      IF THIS.lUsingOCXs
*!*	         THIS.lUsingOCXs = .F.
*!*	         lcFile = THIS.GetResourceLocation("", ;
*!*	                       COV_GETLOGFILE_TITLE_LOC, ;
*!*	                       COV_LOGFILES_LOC+" (*.log;*.txt)|*.log;*.txt|" + ;
*!*	                       COV_ALLFILES_LOC+" (*.*)|*.*",;
*!*	                       "", ;
*!*	                       "getfile" )
*!*	      ENDIF
      IF EMPTY(lcFile) OR EMPTY(SYS(2000,lcFile))
         THIS.DoMessage(COV_LOG_NOT_SPECIFIED_LOC, ;
                        COV_STOP_MESSAGEBOX)
      ELSE
         lReturn = .T.
      ENDIF

   CASE EMPTY(SYS(2000,lcFile))
      liAnswer = THIS.DoMessage(COV_START_LOGGING_LOC, ;
                 COV_YESNOCANCEL_MESSAGEBOX )
      DO CASE
      CASE liAnswer = IDYES
         SET COVERAGE TO (lcFile)
         THIS.Release()
      CASE liAnswer = IDNO
         lReturn = THIS.SetLogFile() && recursive call
      OTHERWISE && cancel
         IF EMPTY(THIS.cSourceFile)
            THIS.Release()
         ELSE
            * go back to previous log
         ENDIF
      ENDCASE                 
   OTHERWISE
      lReturn = .T.
   ENDCASE
   
   IF lReturn
      lcFile = ALLTR(LOWER(lcFile))
      IF AT(".",lcFile) = 0
         lcFile = lcFile + "."
      ENDIF
      THIS.cSourceFile = lcFile
   ENDIF

   RETURN lReturn


ENDPROC
PROCEDURE suspendcoverage
   IF EMPTY(THIS.cSuspendedLog)
      THIS.cSuspendedLog = UPPER(SET("COVERAGE"))
      SET COVERAGE TO
   ELSE
      * Coverage is already suspended --
      * probably first Activate() after suspension
      * on startup or we've gone into a modal
      * dialog associated with this program
   ENDIF
   RETURN NOT THIS.lError

ENDPROC
PROCEDURE resumecoverage
   LOCAL lReturn

   IF NOT EMPTY(THIS.cSuspendedLog)
      LOCAL iResponse

      IF THIS.lUnattended
         iResponse = IDYES
      ELSE
         iResponse = ;
            MESSAGEBOX(COV_RESUME_LOC, COV_YESNOCANCEL_MESSAGEBOX)
      ENDIF

      IF INLIST(iResponse, IDYES, IDNO)
         * make an attempt to close any file-editing
         * windows that the user may have opened, either
         * through the Coverage app or otherwise, to
         * view the log -- of course this won't help if
         * they opened it in Notepad <g>
         RELEASE WINDOW (SUBSTR(THIS.cSuspendedLog,RAT("\",THIS.cSuspendedLog)+1))
      ENDIF

      THIS.lError = .F.
      DO CASE
      CASE iResponse = IDYES
         SET COVERAGE TO (THIS.cSuspendedLog) ADDITIVE
      CASE iResponse = IDNO
         SET COVERAGE TO (THIS.cSuspendedLog)
      OTHERWISE && IDCANCEL
         * leave coverage off
      ENDCASE
      lReturn = NOT THIS.lError
      IF THIS.lError
         * they may have it open in Notepad, or elsewhere...
         THIS.lError = .F.
         SET COVERAGE TO
         MESSAGEBOX(COV_CANNOT_RESUME_LOC, COV_STOP_MESSAGEBOX)
      ENDIF
      THIS.cSuspendedLog = "" 
   ENDIF
   RETURN lReturn


ENDPROC
PROCEDURE sourcefileislog
   ASSERT NOT (EMPTY(THIS.cSourceFile) OR ;
      EMPTY(SYS(2000,THIS.cSourceFile)) )
      
   THIS.ShowStatus(COV_CHECKING_FOR_VALID_LOG_LOC)      

   LOCAL lReturn, iSelect, liFieldCount, iHandle, iLineCount, cLine
   
   liFieldCount = IIF(THIS.lVFP5, ;
                      N_COVLOG_FIELDCOUNT_V5, ;
                      N_COVLOG_FIELDCOUNT_V6)
   lReturn = .T.                      


   * check number of commas per line
   * and check that it isn't empty
   
   IF .F. 

      * This code may be dangerous if the
      * log is too big -- or it may simply
      * take too long and it's difficult to 
      * give feedback
      * However it *is* more thorough
      * a check than the alternative
      * we're currently using, below,
      * so it's left in to give
      * developers a chance to 
      * evaluate this possibility:
      
      iSelect = SELECT()
      CREATE CURSOR Test (onefield m)
      APPEND BLANK
      APPEND MEMO onefield FROM (THIS.cSourceFile)

      * There is currently
      * an empty header line in the file,
      * which I don't want to depend on, but
      * for now subtract one from the number of lines
      * for that line:
                      
      lReturn = OCCURS( [COV_LOG_DELIMITER], ;
         Test.onefield) = ;
         ((MEMLINES(Test.onefield)-1) *  ;
         (liFieldCount - 1) )
      IF NOT lReturn
         * one more chance; this time w/o empty header line!
         lReturn = OCCURS( [COV_LOG_DELIMITER], ;
            Test.onefield) = ;
            (MEMLINES(Test.onefield) *  ;
            (liFieldCount - 1) )
      ENDIF
      USE IN Test
      SELECT (iSelect)
   ELSE
   
      * check a spec'd, limited
      * number of lines in the 
      * log for the proper structure
   
      iHandle = FOPEN(THIS.cSourceFile)
      
      IF iHandle > -1
      
         iLineCount = 0
      
         DO WHILE NOT FEOF(iHandle) AND ;
                  lReturn AND ;
                  iLineCount < COV_LINES_TO_VALIDATE
      
            cLine = FGETS(iHandle,1024)
            iLineCount = iLineCount + 1
            lReturn = EMPTY(cLine) OR ;
                     (OCCURS([COV_LOG_DELIMITER],cLine) = liFieldCount -1)
                  
         ENDDO
      
      ELSE
        lReturn = .F.
      ENDIF
      =FCLOSE(iHandle)
  
   
   ENDIF      
   
   IF THIS.lError OR (NOT lReturn)
      lReturn = .F.
      THIS.lError = .F.
      THIS.DoMessage(COV_LOG_WRONG_FORMAT_LOC, ;
          COV_STOP_MESSAGEBOX )
   ENDIF

   THIS.ClearStatus()

   RETURN lReturn

ENDPROC
PROCEDURE fillfiletypearray
   * known source types --
   * first column is what the coverage
   * log has in it and the second column
   * is what we need to translate to:
   DIME THIS.aFileTypes[9,2]

   THIS.aFileTypes[1,1] = ".fxp"
   THIS.aFileTypes[1,2] = ".prg"
   THIS.aFileTypes[2,1] = ".dct"
   THIS.aFileTypes[2,2] = ".dbc"
   THIS.aFileTypes[3,1] = ".vct"
   THIS.aFileTypes[3,2] = ".vcx"
   THIS.aFileTypes[4,1] = ".sct"
   THIS.aFileTypes[4,2] = ".scx"
   THIS.aFileTypes[5,1] = ".mpx"
   THIS.aFileTypes[5,2] = ".mpr"
   THIS.aFileTypes[6,1] = ".qpx"
   THIS.aFileTypes[6,2] = ".qpr"
   THIS.aFileTypes[7,1] = ".spx"
   THIS.aFileTypes[7,2] = ".spr"
   THIS.aFileTypes[8,1] = ".frt"
   THIS.aFileTypes[8,2] = ".frx"
   THIS.aFileTypes[9,1] = ".lbt"
   THIS.aFileTypes[9,2] = ".lbx"
   
   * note that FRXs will be ignored in 5.0x,
   * since the source log does not
   * report on them properly until 6.0

   RETURN NOT (EMPTY(THIS.aFileTypes[1,1]) OR THIS.lError)


ENDPROC
PROCEDURE createcoveragefilenamecursor
   * this one should not need to change
   * during the life of the coverage browser
   * object, unlike all the other workfiles...

   LOCAL lReturn
   IF USED(THIS.cCovFilesAlias)
      lReturn = .T.
   ELSE
      CREATE CURSOR (THIS.cCovFilesAlias) ;
         (FName c(COV_LEN_HOSTFILE))
      lReturn = THIS.FillCoverageFileNameCursor()
      IF lReturn
         INDEX ON UPPER(FName) TAG FName
      ENDIF
   ENDIF

   RETURN lReturn AND NOT THIS.lError


ENDPROC
PROCEDURE setupworkfiles
   LPARAMETERS tcLogFile, tcSource,tcTarget

   * alias names are passed here because it's possible
   * to have more than one set of files in
   * use at once by the engine. You'd have to keep
   * track of the source, target, and skipped cursor
   * aliases for each set as you parsed multiple sets.
   * one set would be the "current set of files" for
   * each instance of the main dialog within the
   * coverage formset.
   LOCAL lReturn, cCurrentSourceFile, cOldPath
   cCurrentSourceFile = THIS.cSourceFile

   IF NOT THIS.CreateCoverageFilenameCursor()
      RETURN .F.
   ENDIF

   IF THIS.SetLogFile(tcLogFile)
      lReturn = .T.
   ELSE
      RETURN .F.
   ENDIF

   IF lReturn AND (cCurrentSourceFile == THIS.cSourceFile)
      ASSERT (NOT THIS.lUnattended)
      * if we're unattended, we're starting
      * with a log file and going straight through --
      * there should be no reason to be setting up
      * a logfile twice
      IF MESSAGEBOX(COV_REOPEN_SAME_LOG_FILE_LOC, ;
            COV_WARNING_YESNO_MESSAGEBOX) = ;
            IDNO
         RETURN .T.
      ENDIF
   ENDIF

   * make an attempt to close it, in case it is open:
   RELEASE WINDOW (SUBSTR(THIS.cSourceFile,RAT("\",THIS.cSourceFile)+1))

   THIS.LockScreens(.T.)
   cOldPath = SET("PATH")

   IF lReturn
      lReturn = THIS.SourceFileIsLog()
   ENDIF
   IF lReturn
      THIS.ShowStatus(COV_CREATING_FILES_FROM_LOC+" "+ ;
         THIS.cSourceFile+"... ")
      lReturn = ;
         THIS.CreateSourceCursor(tcSource)
   ENDIF
   IF lReturn
      lReturn = ;
         THIS.CreateTargetCursor(tcSource, tcTarget)
   ENDIF
   
   THIS.cSavedTargetDBF = ""
   THIS.cSavedSkipFiles = ""
   THIS.cSavedStackXML = ""
   
   THIS.lInProfileMode = THIS.lStartInProfileMode   

   IF lReturn AND ;
         (THIS.lUnattended OR THIS.lMarkAllOnLoad)
      lReturn = THIS.MarkAllTargetRecords(tcSource, tcTarget)
   ENDIF

   IF lReturn AND THIS.lUnattended
      THIS.lInProfileMode = ! THIS.lInProfileMode
      lReturn = THIS.MarkAllTargetRecords(tcSource, tcTarget)
      * create both types of markedsource
   ENDIF

   DO CASE
   CASE (NOT lReturn) OR THIS.lError
      lReturn = .F.
      THIS.lError = .F.
      THIS.cSourceFile = cCurrentSourceFile
   CASE THIS.lUnattended
      * do nothing
   OTHERWISE
      * we're good!
      THIS.cDefaultWritePath = SUBSTR(THIS.cSourceFile,1,RAT("\",THIS.cSourceFile))      

      THIS.SetUIToShowCode(tcSource,tcTarget)
      THIS.SetUIToShowFileStates(tcSource,tcTarget)

   ENDCASE

   SET PATH TO (cOldPath)

   THIS.ClearStatus()

   THIS.LockScreens(.F.)

   RETURN lReturn


ENDPROC
PROCEDURE createskippedcursor
   LPARAMETERS tcSource, tcSkipped
   LOCAL cSkipped, cSource, iSelect
   iSelect = SELECT()
   cSource = THIS.GetAlias(tcSource,"Source")
   cSkipped = THIS.GetAlias(tcSkipped,"Skipped")
   IF USED(cSkipped)
      USE IN (cSkipped)
   ENDIF
   SET DELETED OFF
   * LOWER() tags...
   SELECT Hostfile AS Skipped FROM (cSource)  ;
      WHERE DELETED() AND ;
      (LOWER(Hostfile) # SPACE(COV_LEN_HOSTFILE)) ;
      INTO CURSOR (cSkipped) ;
      GROUP BY Skipped
   SET DELETED ON
   SELECT (iSelect)

   RETURN NOT THIS.lError


ENDPROC
PROCEDURE saveskippedcursor
   LPARAMETERS tcSkipped

   LOCAL cSkipped, cDBFName, iSelect
   iSelect = SELECT()
   cSkipped = THIS.GetAlias(tcSkipped,"Skipped")

   IF RECCOUNT(cSkipped) = 0
      RETURN .T.
   ENDIF

   cDBFName = THIS.GetTableName(COV_SKIPFILEDBF_SUFFIX)   
   
   SELECT * FROM (cSkipped) INTO TABLE (cDBFName)
   SELECT (iSelect)
   IF NOT THIS.lError
      THIS.cSavedSkipFiles = cDBFName
   ELSE
      THIS.cSavedSkipFiles = ""
   ENDIF
   RETURN NOT THIS.lError


ENDPROC
PROCEDURE createsourcecursor
   LPARAMETERS tcSource

   LOCAL lReturn, cSource
   cSource = THIS.GetAlias(tcSource,"Source")
   IF USED(cSource)
      USE IN (cSource)
   ENDIF
   
   IF THIS.lVFP5
   
      CREATE CURSOR (cSource) ;
                 (Duration n(COV_LEN_DURATION,N_COVLOG_PRECISION), ;
                  ObjClass c(COV_LEN_OBJCLASS), ;
                  Executing c(COV_LEN_EXECUTING), ;
                  Procline i, ;
                  Hostfile c(COV_LEN_HOSTFILE), ;
                  FileType c(4) )
   ELSE
   
      CREATE CURSOR (cSource) ;
                 (Duration n(COV_LEN_DURATION,N_COVLOG_PRECISION), ;
                  ObjClass c(COV_LEN_OBJCLASS), ;
                  Executing c(COV_LEN_EXECUTING), ;
                  Procline i, ;
                  Hostfile c(COV_LEN_HOSTFILE), ;
                  Stacklevel i, ;
                  FileType c(4) )
   ENDIF         
   * all this except last column
   * is ordained by structure of the log file
   * and matches what you'll find in the docs, except
   * that I've increased field lens & removed reserved
   * words from the field names used in the docs!
   * -- however, see function called below, you aren't
   * limited to this structure, you can add extra fields
   SELECT (cSource)

   THIS.AdjustSourceCursor(cSource)
   * -- add additional flag/filter columns, indexes for
   * processing or whatever you want; see notes in this
   * absract method for usage

   INDEX ON LOWER(Hostfile) TAG Hostfile
   * this tag needed when the cursor is filled
   SET ORDER TO 0

   lReturn = THIS.FillSourceCursor(cSource)
   
   THIS.ShowStatus(COV_INDEXING_SOURCE_RECORDS_LOC)

   IF lReturn

      * The tags below are all going to be
      * used for LOCATEs or FOR conditions at some point.

      * INDEX ON LOWER(Hostfile) TAG Hostfile && already done
      INDEX ON LOWER(ObjClass) TAG ObjClass
      INDEX ON Procline TAG Procline
      INDEX ON LOWER(Executing) TAG Executing
      * INDEX ON LOWER(ALLTRIM(ObjClass)+"."+Executing) TAG VCXObject
      * INDEX ON SUBSTR(Executing,1,AT(".",Executing)) TAG TopContainer
      INDEX ON DELETED() TAG IfDel

   ENDIF
   SET ORDER TO 0
   
   THIS.ClearStatus()

   RETURN lReturn AND NOT THIS.lError

ENDPROC
PROCEDURE adjustsourcecursor
   LPARAMETERS tcSource

   * abstract in the engine by design

   * called twice, during CreateSourceCursor() and
   * FillSourceCursor().
   
   * you can tell which call it is by checking 
   * EMPTY(RECCOUNT()) and TAGCOUNT(); the first call in 
   * CreateSourceCursor, after the structure
   * exists, is designed to allow you 
   * to do stuff like this:
   
   * LOCAL cSource
   * cSource = THIS.GetAlias(tcSource,"Source")
   * ALTER TABLE (cSource) ;
   *       ADD COLUMN Flag i
   
   * ... the second one, after the APPEND
   * of the text log records, would allow you to
   * remove some before FillSourceCursor goes
   * on to massage the record set by calling
   * SourceAvailable(), etc.
   
   
   * You can, additionally, augment SourceAvailable()
   * to massage the "valid" log records for which
   * source code has been found, filling your
   * flag fields, for example.

   RETURN NOT THIS.lError


ENDPROC
PROCEDURE createtargetcursor
   LPARAMETERS tcSource, tcTarget

   LOCAL cSource, cTarget, lReturn
   cTarget = THIS.GetAlias(tcTarget,"Target")
   cSource = THIS.GetAlias(tcSource,"Source")
   IF USED(cTarget)
      USE IN (cTarget)
   ENDIF

   * we're adding together the class and executing
   * information for visual classes, 
   * although we're going to have to take
   * some of this information out again when we
   * actually try to match up this information with
   * vcx records in the next step.
   * For programmatic code, we just need the Executing
   * information:

   THIS.ShowStatus(COV_CREATING_TARGET_ITEMS_LOC)   
   
   IF THIS.lVFP5
   
      SELECT Hostfile , ;
            PADR(ALLTR(ObjClass)+ ;
                 IIF((NOT EMPTY(ObjClass) ) AND ;
                     AT(".",Executing) > 0, ;
                     ".","")+ ;
                     SUBSTR(Executing,1,RAT(".",Executing)-1), ;
                 COV_LEN_OBJCLASS) ;
         AS ObjClass,;
         FileType ;
         DISTINCT ;
         FROM (cSource) WHERE NOT DELETED() ;
         INTO CURSOR Temp ;
         ORDER BY 1,2

   ELSE
  
       SELECT Hostfile , ;
            PADR(IIF(INLIST(FileType,".fxp",".mpx",".qpx",".spx"), ;
                     SUBSTR(Executing,1,RAT(".",Executing)-1), ;
                     ALLTR(ObjClass)+ ;
                     IIF((NOT EMPTY(ObjClass) ) AND ;
                         AT(".",Executing) > 0, ;
                         "!","")+ ;
                         SUBSTR(Executing,1,RAT(".",Executing)-1)), ;
                 COV_LEN_OBJCLASS) ;
         AS ObjClass,;
         FileType ;
         DISTINCT ;
         FROM (cSource) WHERE NOT DELETED() ;
         INTO CURSOR Temp ;
         ORDER BY 1,2
         
   ENDIF

   CREATE CURSOR (cTarget) ;
      (Hostfile c(COV_LEN_HOSTFILE), ;
      ObjClass c(COV_LEN_OBJCLASS), ;
      FileType c(4), ;
      Marked     m, ;
      Profiled   m, ;
      SourceCode m, ;
      Coverable i, ;
      Covered i, ;
      ObjTotal i, ;
      ObjHits i)
      *&* change from n(8) for all i fields above

   SELECT (cTarget) && JIC
   APPEND FROM (DBF("Temp"))
   USE IN Temp

   THIS.AdjustTargetCursor(cTarget)
   * -- add additional flag/filter columns, indexes for
   * processing or whatever you want
   
   SELECT (cTarget) && JIC

   INDEX ON Hostfile+ObjClass TAG Standard
   INDEX ON Hostfile TAG Hostfile
   INDEX ON DELETED() TAG IfDel
   SET ORDER TO 0
   
   THIS.ClearStatus()

   lReturn = THIS.FillTargetCursor(cSource, cTarget)

   RETURN lReturn AND NOT THIS.lError

ENDPROC
PROCEDURE adjusttargetcursor
   LPARAMETERS tcTarget

   * abstract in the engine by design

   RETURN NOT THIS.lError


ENDPROC
PROCEDURE adjustcoveragefilenamecursor
   * abstract in the engine by design

   * note: no filename is passed because
   * there is only supposed to be one of
   * these.

   RETURN NOT THIS.lError

ENDPROC
PROCEDURE savetargettodisk
   LPARAMETERS tcTarget

   LOCAL cDBFDefaultName, lReturn, iSelect, cTarget, cDetritus, iPos
   
   lReturn = .T.
   
   cTarget = THIS.GetAlias(tcTarget,"Target")
   
   cDBFDefaultName = THIS.GetTableName(COV_TARGETDBF_SUFFIX)

   IF THIS.lUnattended
      THIS.cSavedTargetDBF = cDBFDefaultName
   ELSE
      THIS.cSavedTargetDBF = ;
         THIS.GetResourceLocation(THIS.cSourceFile, ;
         COV_SETTARGETDBF_TITLE_LOC, ;
         COV_DBFSONLY_LOC + " (*.dbf)|*.dbf", ;
         cDBFDefaultName, ;
         "PUTFILE")
      lReturn = (NOT(EMPTY(THIS.cSavedTargetDBF)))
   ENDIF

   IF lReturn
      iSelect = SELECT()
      SELECT (cTarget)
      COPY TO (THIS.cSavedTargetDBF) 
      IF NOT THIS.lError
         SELE 0
         USE (THIS.cSavedTargetDBF) ALIAS Temp EXCLU
         ALTER TABLE Temp DROP COLUMN SourceCode
         ALTER TABLE Temp DROP COLUMN FileType
         USE IN Temp
         * now get rid of any trash
         * ALTER TABLE may leave behind:
         cDetritus = LOWER(THIS.cSavedTargetDBF)
         iPos = AT(".",cDetritus)
         IF iPos > 0
            cDetritus = SUBSTR(cDetritus,1,iPos -1)
         ENDIF
         IF NOT EMPTY(SYS(2000,cDetritus+".bak"))
            ERASE (cDetritus+".bak") NORECYCLE
         ENDIF
         IF NOT EMPTY(SYS(2000,cDetritus+".tbk"))
            ERASE (cDetritus+".tbk") NORECYCLE
         ENDIF
      ENDIF
      SELECT (iSelect)
   ENDIF
   IF THIS.lError
      THIS.cSavedTargetDBF = ""
   ENDIF

   RETURN lReturn AND NOT THIS.lError



ENDPROC
PROCEDURE fillonetargetrecord
   LPARAMETERS tcSource, tcTarget, tlFillingAll

   LOCAL cSource, cTarget, iSelect, cFile, cObject , cClass, ;
      cMemo, lMemofield, iPos, lReturn, cFileType, ;
      iObjTotal, iRecNo, cSourceOrder, ;
      lAlreadyHadSourceCode, cContainer, iDots, aTemp[1]

   ASSERT (EMPTY(tcSource) AND EMPTY(tcTarget)) OR ;
      (TYPE("tcSource") = "C" AND USED(tcSource) AND ;
      TYPE("tcTarget") = "C" AND USED(tcTarget))


   IF EMPTY(tcSource)
      cSource = THIS.GetAlias(tcSource,"Source")
      cTarget = THIS.GetAlias(tcTarget,"Target")
   ELSE
      cSource = tcSource
      cTarget = tcTarget
   ENDIF

   iSelect = SELECT()
   SELECT (cTarget)
   iRecNo = RECNO()
   cObject =   ALLTR(LOWER(ObjClass))   
   IF "!" $ cObject
      cClass = LEFT(cObject,AT("!",cObject)-1)
      cObject = SUBSTR(cObject,LEN(cClass)+2)
   ELSE
      cClass = ""
   ENDIF
   cFile =     ALLTR(LOWER(Hostfile))
   cFileType = FileType
   iObjTotal = ObjTotal
   cMemo = ""

   DO CASE
   CASE EMPTY(Hostfile)
      * Problem !
   CASE NOT EMPTY(SourceCode)
      lAlreadyHadSourceCode = .T.
   OTHERWISE
      * fill it
      IF NOT tlFillingAll
         THIS.LockScreens(.T.)
      ENDIF

      THIS.ShowStatus(COV_GETTING_SOURCECODE_FROM_LOC+" "+ ;
         ALLTR(cFile)+"."+cObject+"...")

      lMemofield = ;
         INLIST(cFileType,".vct",".sct",".dct",".frt",".lbt")

      IF lMemofield
         * it's a memofield
         IF tlFillingAll AND USED("Temp")
            IF LOWER(DBF("Temp")) == LOWER(cFile)
               SELECT Temp
            ELSE
               USE IN Temp
            ENDIF
         ENDIF
         IF NOT USED("Temp")
            SELECT 0
            USE (cFile) NOUPDATE SHARED ALIAS Temp
         ENDIF
         IF NOT THIS.lError
            DO CASE
            CASE cFileType = ".dct"
               * it's a dbc
               LOCATE FOR ALLTR(LOWER(objectname)) == ;
                  "storedproceduressource"
               cMemo = Code
            CASE INLIST(cFileType,".sct",".vct")

               LOCATE FOR IIF(EMPTY(Parent), LOWER(ALLTR(objName)), ;
                  LOWER(ALLTR(Parent)+"."+ALLTR(objName)) );
                  == cObject
               IF FOUND()

                  cMemo = Methods
                  
               ELSE

                  * Is it a DE object or DE member object?
                  * For DE objects, the log treats them as members of
                  * the form or formset, but the SCX does not
                  * list them as member objects of the form or formset.
                  LOCATE FOR INLIST(LOWER(ALLTR(BaseClass)), ;
                      "dataenvironment","relation","cursor") ;
                      AND IIF(EMPTY(Parent), LOWER(ALLTR(objName)), ;
                      LOWER(ALLTR(Parent)+"."+ALLTR(objName)) ) ==  ;
                      RIGHT(cObject,LEN(IIF(EMPTY(Parent), LOWER(ALLTR(objName)), ;
                      LOWER(ALLTR(Parent)+"."+ALLTR(objName)) )))

                  IF FOUND()

                     cMemo = Methods
 
                  ELSE

                     * the current contents of the Target cObject
                     * information can be difficult to interpret,
                     * since it shows all containership in one field.
                     * For example, an AddObject or a CreateObject
                     * may have create container levels in the third
                     * field of the log that have nothing to do with
                     * reality as far as the classes in the actual VCX
                     * are concerned. 
                     
                     * look for the parent record this member really
                     * belongs in:
                     IF THIS.lVFP5
                     
                        cContainer = cObject
                        FOR iDots = 1 TO OCCURS(".",cObject)
                           cContainer = SUBSTR(cContainer,1,RAT(".",cObject)-1)
                           LOCATE FOR IIF(EMPTY(Parent), LOWER(ALLTR(objName)), ;
                              LOWER(ALLTR(Parent)+"."+ALLTR(objName)) );
                              = cContainer AND NOT EMPTY(Methods)
                           IF FOUND()
                              * does this container's record
                              * already exist in the Target file?
                              cMemo = Methods
                              IF SEEK(PADR(cFile, COV_LEN_HOSTFILE)+ ;
                                    PADR(cContainer,COV_LEN_OBJCLASS), ;
                                    cTarget,"Standard")
                                 * this record will take care of it
                                 REPLACE SourceCode WITH cMemo IN (cTarget)
                                 GO iRecNo IN (cTarget)
                                 IF FOUND(cTarget)
                                    * call this an unsuccessful "go"
                                    * so that the record will be deleted:
                                    cMemo = ""
                                 ENDIF
                              ELSE
                                 GO iRecNo IN (cTarget)
                                 REPLACE ObjClass WITH cContainer IN (cTarget)
                              ENDIF
                              EXIT
                           ENDIF
                        ENDFOR
           
                     ELSE
                    
                        FOR iDots = OCCURS(".",cObject) TO 0 STEP -1 
                           IF iDots = 0
                              cContainer = SUBSTR(cObject,1,AT(".",cObject)-1)
                           ELSE
                              iPos = AT(".",cObject,iDots)
                              IF iDots = OCCURS(".",cObject)
                                 cContainer = SUBSTR(cObject,iPos+1)
                              ELSE
                                 cContainer = SUBSTR(cObject,iPos+1,AT(".",cObject,iDots+1)-iPos-1)
                              ENDIF
                           ENDIF
                           LOCATE FOR ;
                                 LOWER(ALLTR(Parent)+"."+ALLTR(objName)) ;
                                 == ALLTR(cClass)+"."+cContainer AND ;
                                 NOT EMPTY(Methods)
                           IF FOUND()
                              * does this container's record
                              * already exist in the Target file?
                              cMemo = Methods
                              IF SEEK(PADR(cFile, COV_LEN_HOSTFILE)+ ;
                                    PADR(cContainer,COV_LEN_OBJCLASS), ;
                                    cTarget,"Standard")
                                 * this record will take care of it, ;
                                 * let's pre-fill this record wherever
                                 * it is, so as not to waste time when
                                 * we find this record later in the pass
                                 IF EMPTY(&cTarget..SourceCode)
                                    REPLACE SourceCode WITH cMemo IN (cTarget)
                                 ENDIF
                                 GO iRecNo IN (cTarget)
                              ELSE
                                 GO iRecNo IN (cTarget)
                              ENDIF
                              * call this an unsuccessful "go"
                              * so that the record will be deleted:
                              cMemo = ""
                              EXIT
                           ENDIF
                        ENDFOR
                     
                     ENDIF
                  ENDIF
               ENDIF

            CASE INLIST(cFileType,".frt",".lbt")
               * dataenvironment,relation,cursor objects only
               iPos = AT(".",cObject)
               IF iPos = 0
                  * dataenvironment object
                  LOCATE FOR ObjType = N_FRX_DATAENVIRONMENT_OBJTYPE
               ELSE
                  cObject = [name="]+SUBSTR(cObject,iPos+1)+["]
                  LOCATE FOR ObjType = N_FRX_CURSOR_RELATION_OBJTYPE AND ;
                     ATC(cObject,STRTRAN(Expr,SPACE(1),"")) > 0
               ENDIF
               cMemo = TAG
            OTHERWISE
               * no other possibilities yet...
            ENDCASE
         ELSE
            cMemo = ""
         ENDIF
      ELSE
         * it's a text source file... we've already
         * validated these filenames...
         IF AT(".",cObject) > 0
            * a member object with no DEFINE CLASS
            * of its own in this file -- its
            * code will be in its container DEFINE CLASS
            * this is only likely to happen in cFileType = ".fxp"
            * but theoretically this could also be in an ".mpx" etc...
            cMemo = ""
         ELSE
            CREATE CURSOR Temp (onefield m)
            SELECT Temp
            APPEND BLANK
            APPEND MEMO onefield FROM (cFile)
            cMemo = onefield
         ENDIF
      ENDIF
      IF THIS.lError
         THIS.DoMessage(COV_SOURCE_CANNOT_BE_OPENED_LOC + ;
            C_DOUBLE_CR+ ;
            "("+cFile+")", ;
            COV_STOP_MESSAGEBOX)
         * insure that the file will show up in the
         * Skipped files list:
         SEEK PADR(cFile,COV_LEN_HOSTFILE) ;
            IN (cSource) ;
            ORDER Hostfile
         DELETE IN (cSource)
      ELSE

         *&* Note: Statistics may be removed
         *&* for performance boost using COV_TOPSPEED #define

         IF (NOT COV_TOPSPEED) AND ;
               EMPTY(iObjTotal) AND ;
               INLIST(cFileType,".vct",".sct", ".frt", ".lbt")
            * first object hit from this file:
            * some objects may not have been touched at all,
            * figure out how many classes containing
            * code were actually touched,
            * for accurate file and project statistics:
            IF INLIST(cFileType,".vct",".sct")
               COUNT ALL FOR (NOT EMPTY(Methods)) AND (NOT DELETED()) ;
                  TO iObjTotal
            ELSE && report or label
               COUNT ALL FOR ;
                  INLIST(ObjType,;
                  N_FRX_DATAENVIRONMENT_OBJTYPE, ;
                  N_FRX_CURSOR_RELATION_OBJTYPE)   AND ;
                  (NOT EMPTY(TAG)) AND ;
                  (NOT DELETED()) ;
                  TO iObjTotal
            ENDIF
            SELE (cTarget)
            SEEK cFile
            REPLACE ObjTotal WITH iObjTotal ;
               WHILE LOWER(Hostfile) = PADR(cFile,COV_LEN_HOSTFILE)
            GO iRecNo  && we don't have to worry about EOF()
                       && because we never would have gotten
                       && into this case...
         ENDIF
         * statistics on hits in the target file
         * on this total number of objects
         * can't be handled until
         * we've checked all target records
         * for containership (which target records
         * belong to which actual VCX/VCT records)
         SELECT (cTarget)
         REPLACE SourceCode WITH cMemo
      ENDIF
      IF USED("Temp") AND (NOT tlFillingAll)
         * if it was a memofield type source and
         * an error occurred opening the field,
         * it won't be open...
         * if we're filling all records, we don't
         * want to close the source file yet
         USE IN Temp
      ENDIF
      IF (NOT tlFillingAll)
         THIS.LockScreens(.F.)
         THIS.ClearStatus()
      ENDIF
   ENDCASE

   lReturn = (lAlreadyHadSourceCode OR ;
      NOT EMPTY(cMemo)) AND ;
      NOT THIS.lError

   THIS.lError = .F.
   SELECT (iSelect)

   RETURN lReturn


ENDPROC
PROCEDURE fillsourcecursor
   LPARAMETERS tcSource
   
   LOCAL cCoverageFileName, lReturn, ;
      cSource, cOrder, iSelect, ;
      cThisHost, cNewHost, cFileType, iRecNo, lRecordOK, ;
      iOdometer, cTalkWindow
   cSource = THIS.GetAlias(tcSource,"Source")
   cCoverageFileName = LOWER(_COVERAGE)
   iSelect = SELECT()

   THIS.ShowStatus(COV_CHECKING_SOURCE_AVAIL_FROM_LOC+;
      " "+THIS.cSourceFile)

   SELECT (cSource)
   cOrder = ORDER()
   SET ORDER TO 0
   * TALK is scoped to the datasesion, 
   * but the following are *not* scoped
   * to the datasession:
   iOdometer = SET("ODOMETER")
   cTalkWindow = SET("TALK",1)
   SET ODOMETER TO 1000
   SET TALK ON
   IF THIS.lInCoverageFrame
      SET TALK WINDOW (THIS.oFrame.Name)
   ELSE
      SET TALK NOWINDOW
      ACTI SCREEN
      * the ACTI SCREEN
      * appears to be necessary
      * when SET("STATUS BAR") is "OFF"
   ENDIF
   
   APPEND FROM (THIS.cSourceFile) ;
      TYPE DELIMITED WITH CHARACTER COV_LOG_DELIMITER ;
      FOR Procline > 0 AND ;
      (LOWER(Hostfile) # SPACE(COV_LEN_HOSTFILE))
  
   
   SET TALK OFF
   SET ODOMETER TO iOdometer
   SET TALK &cTalkWindow
   THIS.AdjustSourceCursor(cSource)
   * a second call -- see notes in this abstract
   * method for usage.   
   GO TOP   
   
   DO CASE
   CASE THIS.lInCoverageFrame
      THIS.oFrame.Cls()
   CASE SET("STATUS BAR") = "OFF"
      _SCREEN.Cls()
   OTHERWISE
      SET MESSAGE TO
   ENDCASE
     
   SCAN
      IF EMPTY(FileType)
         cThisHost = LOWER(Hostfile)
         THIS.ShowStatus(ALLTR(Hostfile))
         lRecordOK = THIS.SourceAvailable()
         cNewHost = Hostfile
         cFileType = FileType
         iRecNo = RECNO()
         IF NOT lRecordOK
            DELETE REST FOR LOWER(Hostfile) = cThisHost
         ELSE
            REPLACE Hostfile WITH cNewHost, ;
               FileType WITH cFileType ;
               REST FOR LOWER(Hostfile) = cThisHost
         ENDIF
         GO iRecNo
      ENDIF
   ENDSCAN
   SET ORDER TO (cOrder)
   LOCATE
   lReturn = (NOT EOF())
   SELECT (iSelect)
   IF NOT lReturn
      THIS.DoMessage(COV_LOG_HAS_NO_USABLE_RECORDS_LOC, ;
         COV_STOP_MESSAGEBOX )
   ENDIF
   THIS.ClearStatus()
   RETURN lReturn


ENDPROC
PROCEDURE addpath
   LPARAMETERS tcFileName

   ASSERT TYPE("tcFileName") = "C"  AND NOT EMPTY(SYS(2000,tcFileName))
   * the fullpath of an existing filename must have been passed
   * or this procedure doesn't make a lot of sense.
   
   * note that we don't use relative paths here
   * because it is possible for somebody to
   * do CD/SET DEFA as part of add-on code -- that would
   * allow for more "dense" path searches in spite of
   * path length limit, but wouldn't be safe.

   IF THIS.lSmartPath
      LOCAL cAddPath
      cAddPath = SUBSTR(tcFileName,1,RAT("\",tcFileName))
      IF (ATC(cAddPath+";",SET("PATH")+";") = 0) AND ;
         (LEN(cAddPath+";"+SET("PATH")) < N_VFP_PATH_LIMIT )
         SET PATH TO (cAddPath+";"+SET("PATH"))
      ENDIF
   ENDIF

   RETURN NOT THIS.lError


ENDPROC
PROCEDURE sourceavailable
   LOCAL lReturn, cFileType, cNewHost,cOldHost, ;
      icol, iElement, cDefaultExt, iPos

   IF EMPTY(Procline) OR EMPTY(Hostfile)
      * easy call:
      RETURN .F.

      * no source available or stuff like ON SELECTION, ON KEY --
      * -- these are the EMPTY(ProcLine) items --
      * this means that command results in MPRs are not very
      * well covered in the coverage log, although the procedures
      * or methods you call within those commands will be logged.

      * EMPTY(Hostfile) may be a similar record or it may be a
      * result of a run through this procedure for an earlier
      * record and an inability to find this source file,
      * with or without the user's help.

      * Although this note and this code construct helps you 
      * understand what decisions the engine makes, ordinarily
      * the calling routine is FillSourceCursor,
      * which will have DELETEd any EMPTY(Procline) records
      * and any records that start out with EMPTY(Hostfile)
      * fields before making this call, and earlier calls to
      * this routine would have already DELETEd records
      * for which the source file could not have been found.

   ENDIF

   icol = 0
   cOldHost = LOWER(ALLTR(Hostfile))
   cFileType = RIGHT(cOldHost,4)
   iElement = ASCAN(THIS.aFileTypes,cFileType)

   IF LEN(cFileType) # 4 && abnormal extension
      icol = 1
      iElement = 0
      * a PRG could have any original extension,
      * unlike other compiled types.
   ENDIF

   IF iElement # 0
      icol = ASUBSCRIPT(THIS.aFileTypes,iElement,2)
   ENDIF


   DO CASE

   CASE THIS.lvfp5 AND INLIST(cFileType, ".frt" , ".lbt")
      * nothing we can do with this in 5.0x...

   CASE icol = 2
      * source types we replaced from earlier
      * REPLACES on passes this function --
      * we don't need to do anything

   CASE THIS.lIgnoreCoverageFilenames AND ;
         SEEK(UPPER(RIGHT(ALLTRIM(Hostfile), ;
         LEN(ALLTR(Hostfile))- ;
         RAT("\",ALLTRIM(Hostfile)))), ;
         THIS.cCovFilesAlias )
      * we don't want this file, it belongs to
      * the coverage mechanism or other IgnoredFiles...

   CASE INLIST(cFileType,".app",".exe")
      cNewHost =  THIS.GetResourceLocation( cOldHost, ;
         COV_GETMAINFILE_TITLE_LOC, ;
         COV_PROGRAMSONLY_LOC + " (*.prg)|*.prg|"+ ;
         COV_ALLFILES_LOC+" (*.*)|*.*",;
         ALLTR(Executing), ;
         "GETFILE")
      IF EMPTY(cNewHost) OR EMPTY(SYS(2000,cNewHost))
         * can't use it...
      ELSE
         lReturn = .T.
         * the NewHost extension may be anything,
         * but the OldHost extension will be
         * .fxp, giving us the filetype for parsing
         * purposes
         REPLACE Hostfile WITH cNewHost, ;
            FileType WITH ".fxp"
         THIS.AddPath(cNewHost)
      ENDIF


   CASE icol = 1
      * compiled or memo source types...
      * get the matching extension we want
      * from the second column:
      IF iElement = 0
         cFileType = ".fxp"
         iPos = AT(".",cOldHost)
         IF iPos > 0
            cNewHost = FULLPATH(SUBSTR(cOldHost,1,iPos-1)+".prg")
         ELSE
            cNewHost = FULLPATH(cOldHost+".prg")
         ENDIF
      ELSE

         cNewHost = FULLPATH(STRTR(cOldHost,cFileType, ;
            THIS.aFileTypes(ASUBSCR(THIS.aFileTypes,;
            iElement,1),2)))
      ENDIF

      IF EMPTY(SYS(2000,cNewHost))
         cDefaultExt = RIGHT(cNewHost,4)
         IF iElement = 0
            * we have no idea what the source extension was,
            * show all files:
            cNewHost = THIS.GetResourceLocation(cNewHost,;
               COV_GETSOURCEFILE_TITLE_LOC, ;
               COV_SOURCEFILES_LOC+" (*"+cDefaultExt+")|*"+cDefaultExt+"|"+ ;
               COV_ALLFILES_LOC+" (*.*)|*.*",;
               cNewHost, ;
               "GETFILE")
         ELSE
            cNewHost = THIS.GetResourceLocation(cNewHost,;
               COV_GETSOURCEFILE_TITLE_LOC, ;
               COV_SOURCEFILES_LOC+" (*"+cDefaultExt+")|*"+cDefaultExt, ;
               cNewHost, ;
               "GETFILE")
         ENDIF
      ELSE
         cNewHost = LOWER(cNewHost)
      ENDIF
      IF EMPTY(SYS(2000,cNewHost)) OR EMPTY(cNewHost)
         * can't use this one...
      ELSE
         lReturn = .T.
         REPLACE Hostfile WITH cNewHost, ;
            FileType WITH cFileType
         THIS.AddPath(cNewHost)
      ENDIF

   OTHERWISE
      * iCol = 0 -- a filetype we can't handle!
   ENDCASE

   RETURN lReturn



ENDPROC
PROCEDURE marktargetcoverage
   LPARAMETERS tcSource, tcTarget
   
   LOCAL cSource, cTarget, iSelect, ;
      cText, cMemo, iSelect, nFirst, nAverage, iPos, cTemp, ;
      iFileLineNo, iOffSet, iProcLineNo, iLines, ;
      cLine, cRealLine, iPosComment, iPosOpenParen, ;
      cHostFile, cObject, cClass, cFileType, ;
      lInitialMemberAssignments, iExecuted, ;
      cExecuting, cFilter, cFirstWord, ;
      iCoverableLines, iLinesCovered, ;
      lRelToProc,iSecondWord, cSecondWord, lInText,iLenFirstWord

   iSelect = SELECT()
   cSource = THIS.GetAlias(tcSource,"Source")
   cTarget = THIS.GetAlias(tcTarget,"Target")

   SELECT (cTarget)
   cText = SourceCode
   cHostFile = PADR(LOWER(Hostfile),COV_LEN_HOSTFILE)
   cObject = LOWER(ObjClass)
   IF "!" $ cObject
     cClass = LEFT(cObject,AT("!",cObject)-1)
     cObject = SUBSTR(cObject,LEN(cClass)+2)
   ELSE
     cClass = ""
   ENDIF
   cClass = PADR(cClass,COV_LEN_OBJCLASS)

   cFileType = LOWER(FileType)
   cExecuting = ""
   cFilter = ""
   
   IF ( (THIS.lVfp5) OR ("PRO 06." $ UPPER(VERSION())) )
      lRelToProc = ;
         INLIST(cFileType,".vct",".sct",".frt",".lbt",".dct")
   ELSE   
      lRelToProc = ;
         INLIST(cFileType,".vct",".sct",".frt",".lbt")
   ENDIF         
   * change to DBC handling for VFP 7 -- 
   * DBC linenos are no longer relative to procedure.
   * This method must treat some code storage formats 
   * differently than others.  Filetypes inlist 
   * SCX,VCX,FRX,LBX have log linenos
   * relative to each method, but
   * filetypes inlist QPR,MPR,PRG,SPR,DBC
   * have their linenos relative to the full file.
   * (Previous to VFP 7, DCX linenos were relative to procedure.)
   
   * This method also treats objects
   * DEFINEd programmatically slightly differently
   * from non-class code in the same PRG. Each DEFINEd CLASS 
   * could potentially show up separately in the target file
   * although we're not creating separate records for
   * each programmatic class in the target file currently.

   iLines = MEMLINES(cText)
   STORE 0 TO iOffSet, iProcLineNo, _MLINE, ;
      iCoverableLines, iLinesCovered

   cMemo = ""

   IF NOT (lRelToProc OR EMPTY(cObject))
      * skip lines not pertinent to this class, because
      * they are "outside" the class definition we want  --  
      * an issue for programmatically-defined classes only
      * if we are treating them as separate items in the 
      * browser, which may or may not occur in other versions
      * of the code. In this version,
      * all programmatic classes are shown only in one
      * target record, IOW the PRG is treated as the target
      * object, but these classes *could* be parsed into
      * separate target records.  If that happened,
      * the code below would be necessary (cObject would not
      * be empty in this case).
      FOR iFileLineNo = 1 TO iLines
         cRealLine = MLINE(cText,1,_MLINE)
         cLine = ALLTR(STRTRAN(LOWER(cRealLine), C_TAB,""))
         IF (LEFT(cLine,12) = "define class" OR ;
             LEFT(cLine,7) = "defin c" OR ;
             LEFT(cLine,6) = "defi c") AND ;
             " "+ALLTR(cObject)+" " $ cLine
            cMemo = cMemo + THIS.cMarkExecuted + ;
               cRealLine + C_CR
            iOffSet = iFileLineNo
            lInitialMemberAssignments = .T.
            EXIT
         ENDIF
      ENDFOR
   ENDIF

   FOR iFileLineNo = 1 TO (iLines-iOffSet)
      * notice I don't reset the _MLINE var:
      cRealLine = MLINE(cText,1,_MLINE)
      cLine = ALLTR(cRealLine)
      cLine = ALLTR(STRTRAN(LOWER(cLine), C_TAB,SPACE(1)))
      iSecondWord = AT(SPACE(1),cLine)

      IF iSecondWord > 0
         cFirstWord = ALLTR(LEFT(cLine,iSecondWord))
         cSecondWord = ALLTR(SUBSTR(cLine,iSecondWord))
         iSecondWord = AT(SPACE(1),cSecondWord)
         IF iSecondWord > 0
            cSecondWord = ALLTR(LEFT(cSecondWord,iSecondWord))
         ENDIF
      ELSE
         cFirstWord = cLine
         cSecondWord = ""
      ENDIF

      iLenFirstWord = LEN(cFirstWord)
         
      STORE 0 TO iExecuted, nAverage, nFirst

      IF (NOT (lRelToProc OR EMPTY(cObject))) AND ;
         (NOT EMPTY(cFirstWord)) AND ;
         "#"+cFirstWord $ "#enddefine#"
         * finished with the programmatic class definition
         * -- never happens in visually-designed classes
         * See above; this code doesn't actually execute
         * at the moment but would be necessary if
         * programmatic classes had separate records
         * in the target file
         cMemo = cMemo + THIS.cMarkExecuted + ;
            cRealLine + C_CR
         EXIT
      ENDIF
      
      
      * moved up before evaluation of cExecuting
      * Nov 2000, to handle lRelToProc procedure line names
      * including comments.
      iPosComment = AT(C_INLINECOMMENT, cLine)
      IF iPosComment > 0
         cLine = ALLTR(SUBSTR(cLine,1,iPosComment-1))
      ENDIF

      IF lRelToProc
         IF (NOT EMPTY(cFirstWord)) AND ;
            "#"+cFirstWord $ "#method#procedure#function#"
            * starting a new procedure, get name, new offset
            iProcLineNo = 0
            cExecuting = ALLTR(SUBSTR(cLine, AT(" ",cLine)))
            iPosOpenParen = AT("(",cExecuting)
            IF iPosOpenParen > 0
               cExecuting = LEFT(cExecuting,iPosOpenParen-1)
            ENDIF
            iPosOpenParen = AT("[",cExecuting)
            IF iPosOpenParen > 0
               cExecuting = LEFT(cExecuting,iPosOpenParen-1)
            ENDIF
         ELSE
            iProcLineNo = iProcLineNo + 1
         ENDIF
      ELSE
         * programmatically defined classes
         * This is necessary whether or not we're
         * showing all programmatic classes in
         * separate records.
         DO CASE
         CASE EMPTY(cFirstWord)
            * empty line, nothing
         CASE iLenFirstWord < 4
            * could be def = <value> I guess!
         CASE "#"+cFirstWord $ "#define#" AND "#"+cSecondWord $ "#class#"
            lInitialMemberAssignments = .T.
            * start initial assigments
         CASE "#"+cFirstWord $ "#procedure#method#function#"
            lInitialMemberAssignments = .F.
            * finished with initial assignments
         OTHERWISE
            * nothing
         ENDCASE
      ENDIF
      
      * Nov 2000 moved inline comment evaluation
      * up from this position to its current position
      * above.
    
      * Now that we have the line, we need to look
      * at stats for that line

      * comparisons below are meant to be inexact, not ==.

      DO CASE
      
      CASE EMPTY(cLine)
         iExecuted = .NULL.

      CASE lInitialMemberAssignments
         iExecuted = .NULL.

      CASE RIGHT(cLine,1) =  ;
            C_CONTINUATION_SYMBOL
         iExecuted = .NULL.

      CASE INLIST(LEFT(cLine,1),C_COMMENT,C_DEFINE) OR ;
            LEFT(cLine,2) = C_INLINECOMMENT
         iExecuted = .NULL.

      CASE cFirstWord == "add" AND "#"+cSecondWord $ "#object#"

         iExecuted = .NULL.

      * single word lines:
      CASE iLenFirstWord = 4 AND ;
           EMPTY(cSecondWord) AND ;
           INLIST(cFirstWord,"else","note")

         iExecuted = .NULL.

      * multi word lines or first word could be longer than 4 letters:
      CASE iLenFirstWord > 3 AND ;
          "#"+cFirstWord $ ;
         "#function#procedure#endprocedure#endtext#note#else#otherwise"+ ;
         "#parameters#lparameters#enddefine#endfunction#endmethod#endif#endcase#"
         
         iExecuted = .NULL.
         
         IF "#"+cFirstWord $ "#endtext#"
            lInText = .F.
         ENDIF
         
      CASE lInText

         iExecuted = .NULL.
         
      CASE NOT lRelToProc && PRG type code
         cTemp = ALLTR(STR(iFileLineNo + iOffSet))
         cFilter = "LOWER(Hostfile) = cHostfile AND "+;
                   "Procline = "+cTemp
                 
      CASE EMPTY(cObject)  && dbc in VFP 5 or 6

         cTemp = PADR(ALLTR(cExecuting),COV_LEN_EXECUTING)
         cFilter = "LOWER(Hostfile) = cHostfile AND "+ ;
                   "LOWER(Executing) = ["+cTemp+"] AND "+ ;
                   "ProcLine = iProcLineNo"

      CASE cFileType =".vct"
      
         IF THIS.lVFP5
         
            * I'm not optimizing this one yet...
            IF "." $ cObject
               cTemp = PADR(SUBSTR(cObject,1,AT(".",cObject)-1), COV_LEN_OBJCLASS)            
            ELSE
               cTemp = PADR(cObject, COV_LEN_OBJCLASS)            
            ENDIF
  
            cFilter = "LOWER(Hostfile) = cHostfile AND " + ;
                      "LOWER(ObjClass) = ["+cTemp+"] AND " + ;
                      "ProcLine = iProcLineNo " 

            cTemp = ALLTR(cExecuting)                      
 
            IF "." $ cObject
               cTemp = ALLTR(SUBSTR(cObject,AT(".",cObject)+1))+"."+cTemp
            ENDIF
            
            cTemp = "." + cTemp

            iPos = LEN(cTemp)
            cFilter = cFilter + " AND "+ ;
                      "[.]+RIGHT(ALLTR(Executing),"+ ;
                             ALLTR(STR(iPos))+") == ["+cTemp+"]"          
         ELSE
      
            cTemp = PADR(ALLTR(cClass), COV_LEN_OBJCLASS)
            cFilter = "LOWER(Hostfile) = cHostfile AND " + ;
                         "ProcLine = iProcLineNo AND " + ;
                         "LOWER(ObjClass) = ["+cTemp+"]"
      
            * some of the cases below
            * may not be strictly necessary
            * however the RIGHT(...) one *is* necessary
            * and it's the only one I can't really optimize --
            * the other ones are as optimized as they
            * can get depending on how intelligent 
            * I can be about setting up the filter in 
            * a given circumstance.
         
            * This un-optimized case also has to be *first*
            * among the non-VFP5 cases, 
            * because of leaf object handling.
      
            DO CASE
         
            CASE "." $ cExecuting
                 cTemp = ALLTR(cExecuting)
                 IF "." $ cObject
                    cTemp = "."+SUBSTR(ALLTR(cObject),RAT(".",ALLTR(cObject))+1)+"."+cTemp
                 ENDIF
                 iPos = LEN(cTemp)
                 cFilter = cFilter + " AND "+ ;
                           "RIGHT(ALLTR(Executing),"+ ;
                           ALLTR(STR(iPos))+") == ["+cTemp+"]"          

            CASE ALLTRIM(cObject) == ALLTRIM(cClass)

                cTemp = PADR(ALLTR(cClass)+"."+ALLTR(cExecuting), COV_LEN_EXECUTING)
                cFilter = cFilter+" AND "+ ;
                          "LOWER(Executing) =  ["+cTemp+"]"             
   
            CASE "." $ cObject

                cTemp = PADR(ALLTR(cClass)+  ;
                          ALLTR(SUBSTR(cObject,AT(".",cObject)))+ ;
                          "."+ALLTR(cExecuting), COV_LEN_EXECUTING)
                cFilter = cFilter+" AND "+ ;
                          "LOWER(Executing) =  ["+cTemp+"]" 
            
            OTHERWISE

                cTemp = PADR(ALLTR(cClass)+"."+ALLTR(cExecuting), COV_LEN_EXECUTING)
                cFilter = cFilter+" AND "+ ;
                          "LOWER(Executing) =  ["+cTemp+"]"             

            ENDCASE

         ENDIF
         
      OTHERWISE && frx, lbx, sct
         cFilter = PADR(ALLTR(cObject)+"."+ALLTR(cExecuting),COV_LEN_EXECUTING)
         cFilter = "LOWER(Hostfile) = cHostfile AND " +;
            "LOWER(Executing) = ["+ cFilter +"] AND "+;
            "ProcLine = iProcLineNo"

      ENDCASE
    

      IF NOT ISNULL(iExecuted)

         SELECT (cSource)

         IF THIS.lInProfileMode

            LOCATE FOR &cFilter && first
            nFirst = Duration
            IF NOT EOF()
               CALCULATE AVG(Duration) FOR &cFilter ;
                  TO nAverage
               iExecuted = _TALLY
            ELSE
               iExecuted = 0
            ENDIF
         ELSE
            COUNT FOR &cFilter
            iExecuted = _TALLY
         ENDIF

         iLinesCovered = iLinesCovered + IIF(iExecuted = 0,0,1)
         iCoverableLines = iCoverableLines + 1
         
         IF cFirstWord == "text"
            lInText = .T.
         ENDIF

      ENDIF

      * See COV_TUNE.H: the following is 
      * tunable from a procedure call
      * to an IIF() offering a simple toggle,
      * based on the #DEFINE COV_TOPSPEED.
      * Because this line is going to be 
      * called every time a line of code
      * is marked, speed is extremely important
      * here.

      * The actual call to which COV_MARK_CODE_LINE
      * defaults when COV_TOPSPEED is .F. is:

      * THIS.MarkCodeLine(cRealLine,iExecuted, nFirst, nAverage)
      
      * ... COV_TOPSPEED's in-line approach is 
      * faster but less flexible for subclassers

      cMemo = cMemo + COV_MARK_CODE_LINE + C_CR
      
      
   ENDFOR

   IF NOT THIS.lError

      SELECT (cTarget)

      IF THIS.lInProfileMode
         REPLACE Profiled WITH cMemo
      ELSE
         REPLACE Marked WITH cMemo
      ENDIF
      IF EMPTY(Coverable)
         REPLACE Coverable WITH iCoverableLines, ;
            Covered WITH iLinesCovered
      ENDIF

   ENDIF

   SELECT (iSelect)

   RETURN NOT (EMPTY(cMemo) OR THIS.lError)


ENDPROC
PROCEDURE markcodeline
   LPARAMETERS tcLine,tiExecuted, tnFirst, tnAverage

   ASSERT TYPE("tcLine") = "C"
   ASSERT ISNULL(tiExecuted) OR TYPE("tiExecuted") = "N"
   ASSERT TYPE("tnFirst") = "N"
   ASSERT TYPE("tnAverage") = "N"

   * If we got a .null. in tiExecuted, this
   * will be a type of line that the
   * internally-generated log will never "see" --
   * I want to clearly delineate
   * this problem so you can
   * decide how to handle it, and
   * also decide whether you want
   * to mark incidences rather than
   * not-executed, or mark executed
   * rather than not executed.

   * This is one of the reasons
   * why this code is pulled out
   * from MarkTargetCoverage(), 
   * which you should
   * never need to touch.
   
   * You'll just need to have
   * the same CASES in your MarkCodeLine()
   * as you see below,
   * and treat each type of line as you wish:
   
   LOCAL cMarkedLine, cFirst, cAverage

   IF THIS.lInProfileMode
      IF ISNULL(tiExecuted)
         * will never be in the log
         cMarkedLine = SPACE(COV_PROFILE_EXECUTED_SPACING + ;
            COV_PROFILE_STATS_SPACING * 2)
      ELSE
         IF tiExecuted = 1
            cMarkedLine = PADR(ALLTR(STR(tiExecuted))+ SPACE(1)+ ;
               COV_PROFILE_ONE_HIT_LOC, ;
               COV_PROFILE_EXECUTED_SPACING)
         ELSE
            cMarkedLine = PADR(ALLTR(STR(tiExecuted))+ SPACE(1)+ ;
               COV_PROFILE_HITS_LOC, ;
               COV_PROFILE_EXECUTED_SPACING)
         ENDIF

         cFirst = PADR(COV_PROFILE_MARK_1ST_LOC + SPACE(1) + ;
            ALLTR(STR(tnFirst,20,N_COVLOG_PRECISION)), ;
            COV_PROFILE_STATS_SPACING)
         cMarkedLine = cMarkedLine + cFirst
         cAverage = PADR(COV_PROFILE_MARK_AVG_LOC + SPACE(1) + ;
            ALLTR(STR(tnAverage,20,N_COVLOG_PRECISION)), ;
            COV_PROFILE_STATS_SPACING)
         cMarkedLine = cMarkedLine + cAverage
      ENDIF
      cMarkedLine = cMarkedLine + tcLine
   ELSE
      DO CASE
      CASE ISNULL(tiExecuted)
         * will never be in the log
         cMarkedLine = SPACE(LEN(THIS.cMarkExecuted)) + tcLine
      CASE tiExecuted = 0
         cMarkedLine = THIS.cMarkNotExecuted + tcLine
      CASE tiExecuted > 0
         cMarkedLine = THIS.cMarkExecuted + tcLine
      OTHERWISE
         * should never be negative!
         cMarkedLine = ""
      ENDCASE
   ENDIF

   RETURN cMarkedLine

ENDPROC
PROCEDURE getalias
   LPARAMETERS tAlias,tcWhichProp

   ASSERT PCOUNT() > 1 AND ;
      TYPE("tcWhichProp") = "C" AND ;
      INLIST(UPPER(tcWhichProp),COV_KNOWN_ALIAS_PROPERTIES)

   LOCAL cReturn
   IF TYPE("tAlias") = "C"
      cReturn = tAlias
   ELSE
      cReturn = EVAL("THIS.c"+tcWhichProp+"Alias")
   ENDIF
   RETURN cReturn

ENDPROC
PROCEDURE runaddin
   LPARAMETERS tcAddIn

   LOCAL lOkay, cFileToRun, cExt

   * Add-In must accept an object parameter,
   * reference to the Coverage form object
   * It may adjust the size of the Coverage form object
   * and add new controls to it. It may reset
   * the file that is going to be parsed according
   * to queries to the user of its own. It may choose
   * to adjust the Coverage form object's error flag
   * if it thinks the form shouldn't substantiate
   * based on its own errors, and provide its own
   * error messages stating the reason.

   IF TYPE("tcAddIn") = "C"
      cFileToRun = tcAddIn
   ELSE
      cFileToRun = THIS.cAddIn
   ENDIF

   IF EMPTY(cFileToRun)
      RETURN .T.
   ENDIF

   cFileToRun = UPPER(ALLTR(cFileToRun))
   THIS.lError = .F.
   
   IF "." $ cFileToRun
      cExt = RIGHT(cFileToRun,4)   
   ELSE
      cExt = ""
   ENDIF
   
   lOkay = .T.

   IF (NOT EMPTY(cExt)) AND ;
      EMPTY(SYS(2000,cFileToRun)) 
      
      DO CASE 
      CASE "\" $ cFileToRun
          lOkay = .F.
      CASE NOT EMPTY(SYS(2000,SUBSTR(THIS.ClassLibrary,1,RAT("\",THIS.ClassLibrary))+cFileToRun))
          cFileToRun = SUBSTR(THIS.ClassLibrary,1,RAT("\",THIS.ClassLibrary))+cFileToRun
      CASE NOT (EMPTY(THIS.cAppHome) OR ;
                EMPTY(SYS(2000,SUBSTR(THIS.cAppHome,1,RAT("\",THIS.cAppHome))+cFileToRun)))
          cFileToRun = SUBSTR(THIS.cAppHome,1,RAT("\",THIS.cAppHome))+cFileToRun
      OTHERWISE
          lOkay = .F.
      ENDCASE
      
      IF NOT lOkay
         THIS.DoMessage(COV_ADDIN_DOES_NOT_EXIST_LOC, ;
         COV_STOP_MESSAGEBOX )
        
      ENDIF

   ENDIF
   
   IF lOkay AND (NOT THIS.lError)
   
      DO CASE

      CASE EMPTY(cExt)
         IF FILE(cFileToRun+".FXP") OR ;
            FILE(cFileToRun+".APP") OR ;
            FILE(cFileToRun+".PRG") OR ;
            FILE(cFileToRun+".EXE") OR ;
            FILE(cFileToRun+".QPX") OR ;
            FILE(cFileToRun+".QPR") OR ;
            FILE(cFileToRun+".MPR") OR ;
            FILE(cFileToRun+".MPX")
      
            DO (cFileToRun) WITH THIS
         ELSE
         
            THIS.DoMessage(COV_ADDIN_DOES_NOT_EXIST_LOC, ;
                           COV_STOP_MESSAGEBOX )
            lOkay = .F.                           
         ENDIF

      CASE ( INLIST(cExt,".FXP",".APP",".PRG",".EXE",".QPX",".QPR",".MPR",".MPX"))

         DO (cFileToRun) WITH THIS

      CASE ( cExt = ".SCX" )

         DO FORM (cFileToRun) WITH THIS

      OTHERWISE
         THIS.DoMessage(COV_ADDIN_NOT_SUPPORTED_TYPE_LOC, ;
            COV_STOP_MESSAGEBOX )
         lOkay = .F.
      ENDCASE
  
  ENDIF

   IF THIS.lError OR (NOT lOkay)
      lOkay = .F.
      THIS.cAddIn = ""
   ELSE
      lOkay = .T.
      THIS.cAddIn = LOWER(cFileToRun)
   ENDIF
   
   THIS.lError = .F.   

   IF THIS.lUsingRegistry
      DO CASE
      CASE lOkay AND THIS.lRegisterAddIn
         THIS.AddRegisteredAddin(cFileToRun)
      CASE NOT lOkay && whether registry is in use or not
         THIS.DeleteRegisteredAddIn(cFileToRun)
      OTHERWISE
         * registry may be in use but we're not registering
         * this particular file
      ENDCASE
   ENDIF

   RETURN lOkay 


ENDPROC
PROCEDURE filterlistbylocation
   * abstract in the engine, but doesn't have to be
   
   * ... could be:
   * SELECT all objects UNION all procs
   * represented in the file
   * and ask which ones should be surveyed

   RETURN NOT THIS.lError

ENDPROC
PROCEDURE orderlistbytime
   * INDEX ON Duration field, and SET ORDER
   * TO this index if a checkbox in the list
   * asks for this option?
   
   * abstract in the engine but doesn't have to be

   RETURN NOT THIS.lError

ENDPROC
PROCEDURE setclasslibtoalias
   LPARAMETERS tcClassLibName, tcAppName
   
   * note: this code is not necessary in VFP 6 or above
   
   IF EMPTY(tcClassLibName)
      * library is already set or
      * the calling program knows it doesn't need to
      * be set -- for example, the class def could be
      * appended into the main program but the
      * call is a #DEFINE.
      RETURN ""
   ENDIF

   LOCAL cAlias, cLibList, cClassLibName, cAppName, cSys16, iLevel
   cLibList = SET("CLASSLIB")
   cLibList = CHRTRANC(m.cLibList,["],"")   
   cAlias = ""
   cAppName = tcAppName
   cClassLibName = tcClassLibName
   IF AT(".",cClassLibName) = 0
      cClassLibName = cClassLibName+".VCX"
   ENDIF
   IF ATC(cClassLibName+" ALIAS ", cLibList) = 0 AND ;
         ATC(cClassLibName+ " IN ",cLibList) = 0
      cAlias = "c"+SYS(2015)
      IF EMPTY(cAppName)
         SET CLASSLIB TO (cClassLibName) ALIAS (cAlias) ADDITIVE
      ELSE
         SET CLASSLIB TO (cClassLibName) IN (cAppName) ALIAS (cAlias) ADDITIVE
      ENDIF
   ELSE
      * library is already loaded --
      * we want to make sure not to
      * try to RELEASE it and also not
      * to alter its current ALIAS.
   ENDIF
   RETURN cAlias


ENDPROC
PROCEDURE setworkoptions
   THIS.lStartInProfileMode   = ;
      THIS.GetRegistryKeyValue("ProfileMode", THIS.lStartInProfileMode)
   THIS.lSmartPath       = ;
      THIS.GetRegistryKeyValue("SmartPath", THIS.lSmartPath)
   THIS.lMarkAllOnLoad   = ;
      THIS.GetRegistryKeyValue("MarkAll", THIS.lMarkAllOnLoad)
   THIS.cMarkExecuted    = ;
      THIS.GetRegistryKeyValue("MarkExecuted", THIS.cMarkExecuted)
   THIS.cMarkNotExecuted = ;
      THIS.GetRegistryKeyValue("MarkNotExecuted", THIS.cMarkNotExecuted)
   THIS.lRegisterAddIn = ;
      THIS.GetRegistryKeyValue("RegisterAddIn",THIS.lRegisterAddIn)
   THIS.lInCoverageFrame = ;
      THIS.GetRegistryKeyValue("CoverageFrame",THIS.lInCoverageFrame)
   THIS.lStackXMLExtendedTree = ;      
      THIS.GetRegistryKeyValue("StackXMLExtendedTree",THIS.lStackXMLExtendedTree)
   THIS.cStackXSLT = ;
      THIS.GetRegistryKeyValue("StackXSLT",THIS.cStackXSLT)   

   THIS.SetMarks()

   RETURN NOT THIS.lError


ENDPROC
PROCEDURE getfontsfromuser
   LPARAMETERS tlBaseMonoFont, toMemberHost

   * second parameter will allow you to switch
   * easily to a toolbar member when necessary or
   * useful -- .Forms(1) default will also allow
   * a failsafe container for the control
   * in case anything happens to the toolbar, you're
   * using multiple main dialogs and close the first one, etc.

   * Note: this method is not called in the
   * engine, but is expected to be required by
   * any user-driven options dialog.
   * The engine maintains two sets of font attributes
   * one for a "Coverage display font" and one for
   * the "monospace font" one needs for effective
   * display of marked code.  However, it doesn't
   * actually use these fonts anywhere -- it just
   * makes them available since any subclass is
   * going to require them.
   
   * A .F. return should stop the calling
   * function from attempting to set UI font attributes.

   ASSERT NOT THIS.lUnattended
   ASSERT TYPE("tlBaseMonoFont") = "L"

   LOCAL oMemberHost, lFontChange, cProp, cGetFont, iPos1, ;
        iPos2, cAlias, cLibs, iHostControlCount, liOldSys2333

   IF TYPE("toMemberHost.Class") = "C"
      oMemberHost = toMemberHost
   ELSE
      IF THIS.lInCoverageFrame
         oMemberHost = THIS.oFrame
      ELSE
         oMemberHost = THIS.Forms(1)
      ENDIF
   ENDIF
   
   iHostControlCount = oMemberHost.ControlCount

   IF tlBaseMonoFont
      cProp = "Mono"
   ELSE
      cProp = ""
   ENDIF

   IF THIS.lUsingOCXs

      IF TYPE("oMemberHost.cdlCov_GetFont.Class") = "U"
         * add common dialog if this is the first time:
         THIS.lError = .F.
         cLibs = SET("CLASSLIB")

         * the following 
         * may not be necessary for the fonts
         * invocation of the common dialog control,
         * unlike the file-setting invocations in
         * GetResourceLocation, but it can't hurt
         IF THIS.lVFP5
            liOldSYS2333 = 0
         ELSE
            liOldSYS2333 = VAL(SYS(2333,2))
         ENDIF
         
         IF THIS.lVFP5 OR liOldSYS2333 # 0
            SYS(2333,0) 
         ENDIF
         
         #IF COV_COMPILED_IN_VFP5 
            cAlias = THIS.SetClassLibToAlias(COV_BASE_CLASSLIB, THIS.cAppName)
            oMemberHost.AddObject("cdlCov_GetFont",cAlias+"."+COV_COMMON_DIALOG_CLASS)
         #ELSE
            oMemberHost.NewObject("cdlCov_GetFont",COV_COMMON_DIALOG_CLASS,COV_BASE_CLASSLIB,THIS.cAppName)
         #ENDIF            
         
         IF liOldSYS2333 # 0
            SYS(2333,liOldSYS2333)
         ENDIF
         
         IF NOT EMPTY(cAlias) AND ;
               (ATC("ALIAS "+cAlias, SET("CLASSLIB")) > 0)
            RELEASE CLASSLIB ALIAS (cAlias)
            SET CLASSLIB TO &cLibs
         ENDIF
            
         IF THIS.lError OR oMemberHost.ControlCount = iHostControlCount
            WAIT WINDOW ;
               LEFT(COV_SWITCHING_OFF_COMMON_DIALOG_LOC+"...",COV_MESSAGE_LIMIT) ;
               TIMEOUT COV_TIMEOUT_SECS
            THIS.lUsingOCXs = .F.
            THIS.lError = .F.
         ENDIF
      ENDIF

   ENDIF


   IF THIS.lUsingOCXs

      WITH oMemberHost.cdlCov_GetFont

         .Flags =  cdlCFScreenFonts + ;
            cdlCFANSIOnly + ;
            cdlCFForceFontExist

         IF tlBaseMonoFont
            .Flags = .Flags + cdlCFFixedPitchOnly
         ENDIF

         .FontName = EVAL("THIS.cBase"+cProp+"FontName")
         .FontSize = EVAL("THIS.nBase"+cProp+"FontSize")
         .FontBold = EVAL("THIS.lBase"+cProp+"FontBold")
         .FontItalic = EVAL("THIS.lBase"+cProp+"FontItalic")

      ENDWITH
      IF ! oMemberHost.Visible
         * set up a reasonable position for the dialog:
         oMemberHost.Top = _SCREEN.Height/4
         oMemberHost.Left = _SCREEN.WIDTH/4
      ENDIF
      oMemberHost.cdlCov_GetFont.ShowFont()
      lFontChange = NOT( (EVAL("THIS.cBase"+cProp+"FontName") == ;
         oMemberHost.cdlCov_GetFont.FontName) AND ;
         (EVAL("THIS.nBase"+cProp+"FontSize") = ;
         oMemberHost.cdlCov_GetFont.FontSize) AND ;
         (EVAL("THIS.lBase"+cProp+"FontBold") = ;
         oMemberHost.cdlCov_GetFont.FontBold) AND ;
         (EVAL("THIS.lBase"+cProp+"FontItalic") = ;
         oMemberHost.cdlCov_GetFont.FontItalic))
      IF lFontChange AND NOT THIS.lError
         STORE oMemberHost.cdlCov_GetFont.FontName TO ("THIS.cBase"+cProp+"FontName")
         STORE oMemberHost.cdlCov_GetFont.FontSize TO ("THIS.nBase"+cProp+"FontSize")
         STORE oMemberHost.cdlCov_GetFont.FontBold TO ("THIS.lBase"+cProp+"FontBold")
         STORE oMemberHost.cdlCov_GetFont.FontItalic TO ("THIS.lBase"+cProp+"FontItalic")
      ENDIF

   ELSE

      * MESSAGEBOX(COV_FEATURE_NEEDS_OCX_LOC, COV_STOP_MESSAGEBOX)
      * RETURN .F.
      * this is an extra restriction,
      * which may be added if you wish to
      * stop proportional fonts from being picked for code,
      * since GETFONT() doesn't allow this restriction in the
      * same way that the OCX does.  However, allowing the
      * user to pick proportional fonts for code in the
      * coverage dialogs is no different from allowing 
      * proportional fonts for a MODI COMM -- it's basically
      * the user's right, even if it does drive him/her crazy <g>!

      cGetFont = GETFONT()
      IF NOT EMPTY(cGetFont)
         lFontChange = .T.
         iPos = AT(",",cGetFont)
         STORE SUBSTR(cGetFont,1,iPos-1) TO ("THIS.cBase"+cProp+"FontName")
         cGetFont = SUBSTR(cGetFont,iPos+1)
         iPos = AT(",",cGetFont)
         STORE VAL(SUBSTR(cGetFont,1,iPos-1)) TO ("THIS.nBase"+cProp+"FontSize")
         cGetFont = SUBSTR(cGetFont,iPos+1)
         STORE ("B" $ cGetFont) TO ("THIS.lBase"+cProp+"FontBold")
         STORE ("I" $ cGetFont) TO ("THIS.lBase"+cProp+"FontItalic")
      ENDIF

   ENDIF

   RETURN lFontChange AND NOT THIS.lError

ENDPROC
PROCEDURE setregistrykeyvalue
   LPARAMETERS tcWhichOption, tValue
   
   IF (NOT THIS.lUsingRegistry) OR ;
      TYPE("THIS.cov_toolbar.cusRegistry.Class") # "C"
      RETURN
   ENDIF

   LOCAL cPath, cTypeValue, cValue

*!*	   IF THIS.lVFP5
*!*	      cPath = VFP5_KEYPATH
*!*	   ELSE
*!*	      cPath = VFP6_KEYPATH
*!*	   ENDIF

   cPath = VFP_KEYPATH

   cPath = cPath + VFP_COVERAGE_KEY

   cTypeValue = TYPE("tValue")

   DO CASE
   CASE cTypeValue = "C"
      cValue = tValue
   CASE cTypeValue = "N"
      cValue = ALLTR(STR(tValue))
   CASE cTypeValue = "L" AND tValue
      cValue = ".T."
   CASE cTypeValue = "L"
      cValue = ".F."
   OTHERWISE
      * ??
      cValue = ""
   ENDCASE

   THIS.cov_toolbar.cusRegistry.SetRegKey(tcWhichOption, ;
         cValue, ;
         cPath, ;
         HKEY_CURRENT_USER)


   RETURN NOT THIS.lError


ENDPROC
PROCEDURE getregistrykeyvalue
   LPARAMETERS tcOption, tDefaultValue, tcPath

   LOCAL cValue, vReturn, cPath, cTypeValue, cTypeRegValue

   IF THIS.lUsingRegistry AND TYPE("THIS.cov_toolbar.cusRegistry.Class") = "C"

      cTypeValue = TYPE("tDefaultValue")

      DO CASE
      CASE cTypeValue = "C"
         cValue = tDefaultValue
      CASE cTypeValue = "N"
         cValue = ALLTR(STR(tDefaultValue))
      CASE cTypeValue = "L" AND tDefaultValue
         cValue = ".T."
      CASE cTypeValue = "L"
         cValue = ".F."
      OTHERWISE
         * ??
         cValue = ""
      ENDCASE


      IF EMPTY(tcPath) OR PCOUNT() < 3
         cPath = VFP_COVERAGE_KEY
      ELSE
         cPath = tcPath
      ENDIF

*!*	      IF THIS.lvfp5
*!*	         cPath = VFP5_KEYPATH + cPath
*!*	      ELSE
*!*	         cPath = VFP6_KEYPATH + cPath
*!*	      ENDIF

      cPath = VFP_KEYPATH + cPath 

      THIS.cov_toolbar.cusRegistry.GetRegKey(tcOption, @cValue,cPath,HKEY_CURRENT_USER)

      cTypeRegValue = TYPE(cValue)

      IF THIS.lError OR ;
            (cTypeRegValue # "U" AND ;
            cTypeValue # cTypeValue)
         * the latter condition should only happen
         * if somebody monkeyed around with the registry...

         vReturn = tDefaultValue
         THIS.lError = .F.

      ELSE

         IF cTypeRegValue # "U"

            vReturn = EVAL(cValue)
         ELSE

            vReturn = cValue
         ENDIF

      ENDIF

   ELSE
      vReturn = tDefaultValue
   ENDIF

   RETURN vReturn



ENDPROC
PROCEDURE getresourcelocation
   LPARAMETERS tcHost, tcTitle, tcCDLFilter , tcFileName, tcWhichDialog, toMemberHost

   ASSERT PCOUNT() >=5
   ASSERT OCCURS("|", tcCDLFilter) > 0
   ASSERT TYPE("tcWhichDialog") = "C" AND ;
      INLIST(UPPER(tcWhichDialog),"PUTFILE","GETFILE")
      * currently known types & available subclasses of
      * coverage common dialog class --
      * may add showhelp()...
      * and there might be additional file-setting OCXs or
      * other possibilities that would be useful here --
      * if so, the tcCDLFilter ASSERTion above would change

   IF THIS.lUnattended
      IF TYPE("tcFileName") = "C"
         RETURN LOWER(tcFileName)
      ELSE
         RETURN ""
      ENDIF
   ENDIF

   LOCAL oMemberHost, nPos, cReturn, cDialogControl, liOldSYS2333, ;
      oDialogControl, cAlias, cFoxFilter, cWhichDialog, iSetPointer, cLibs, ;
      iHostControlCount

   iSetPointer = _SCREEN.MousePointer

   IF TYPE("toMemberHost.Class") = "C"
      oMemberHost = toMemberHost
   ELSE
      IF THIS.lInCoverageFrame
         oMemberHost = THIS.oFrame
      ELSE
         oMemberHost = THIS.Forms(1)
      ENDIF
   ENDIF
   * see note on memberhost parameter in GetFontFromUser() method
   
   iHostControlCount = oMemberHost.ControlCount

   cWhichDialog = ALLTR(UPPER(tcWhichDialog))

   IF THIS.lUsingOCXs

      cDialogControl = "cdlCov_"+cWhichDialog

      IF TYPE("oMemberHost."+cDialogControl+".Class") = "U"
         * add common dialog if this is the first time:

         THIS.lError = .F.
         cLibs = SET("CLASSLIB")

         * the following is required for 
         * the common file dialog at least
         * in this subclass... 

         IF THIS.lVFP5
            liOldSYS2333 = 0
         ELSE
            liOldSYS2333 = VAL(SYS(2333,2))
         ENDIF
         
         IF THIS.lVFP5 OR liOldSYS2333 # 0
            SYS(2333,0) 
         ENDIF

         #IF COV_COMPILED_IN_VFP5 
            cAlias = THIS.SetClassLibToAlias(COV_BASE_CLASSLIB, THIS.cAppName)         
            oMemberHost.AddObject(cDialogControl,cAlias+"."+COV_COMMON_FILE_DIALOG_CLASS)
         #ELSE
            oMemberHost.NewObject(cDialogControl,COV_COMMON_FILE_DIALOG_CLASS, COV_BASE_CLASSLIB, THIS.cAppName)         
         #ENDIF
         
         IF liOldSYS2333 # 0
            SYS(2333,liOldSYS2333)
         ENDIF
         
         IF NOT EMPTY(cAlias) AND ;
               (ATC("ALIAS "+cAlias, SET("CLASSLIB")) > 0)
            RELEASE CLASSLIB ALIAS (cAlias)
            SET CLASSLIB TO &cLibs
         ENDIF

         IF THIS.lError OR (oMemberHost.ControlCount =  iHostControlCount) 
            WAIT WINDOW ;
               LEFT(COV_SWITCHING_OFF_COMMON_DIALOG_LOC+"...",COV_MESSAGE_LIMIT) ;
               TIMEOUT COV_TIMEOUT_SECS
            THIS.lUsingOCXs = .F.
            THIS.lError = .F.
         ELSE
        
            WITH oMemberHost.&cDialogControl.
               DO CASE
               CASE cWhichDialog = "PUTFILE"
                  .Flags = .Flags + cdlOFNNoReadOnlyReturn + ;
                                     cdlOFNOverwritePrompt
               CASE cWhichDialog = "GETFILE"
                  .Flags = .Flags + cdlOFNFileMustExist
               OTHERWISE
                  * see comment and ASSERTed list of known dlgs above
               ENDCASE
            ENDWITH

         ENDIF
      ENDIF
   ENDIF

   nPos = RAT("\",tcHost)
   cReturn = ""

   IF THIS.lUsingOCXs
      oDialogControl = EVAL("oMemberHost."+cDialogControl)

      WITH oDialogControl

         .DialogTitle = tcTitle
         IF NOT EMPTY(tcHost)
            .DialogTitle = .DialogTitle + ;
               " "+SUBSTR(tcHost,nPos+1)
         ENDIF
         IF TYPE("tcFileName") = "C"
            .FileName = tcFileName
         ELSE
            .FileName = ""
         ENDIF
         .Filter = tcCDLFilter
         .FilterIndex = 0
         IF nPos > 0
            .InitDir = SUBSTR(tcHost,1,nPos)
            * Setting the .lForceSearch
            * property of a cov_commonfiledialg
            * subclass to .T. will override this
            * and set to "", or this
            * method could set .lForceSearch
            * true here to force the same effect
            * at runtime.
         ENDIF
      ENDWITH

      IF !oMemberHost.Visible
         * set up a reasonable position for the dialog:
         oMemberHost.Top = _SCREEN.Height/4
         oMemberHost.Left = _SCREEN.WIDTH/4
      ENDIF
      DO CASE
      CASE cWhichDialog = "PUTFILE"
         oDialogControl.SHOWSAVE()
      CASE cWhichDialog = "GETFILE"
         oDialogControl.SHOWOPEN()
      OTHERWISE
         * see comment and ASSERTed list of known dlgs above
      ENDCASE

      cReturn = ALLTR(oDialogControl.FileName)

   ELSE

      WAIT WINDOW NOWAIT LEFT(tcTitle + ;
                              IIF(EMPTY(tcHost),"",C_CR + SUBSTR(tcHost,nPos+1)), ;
                              COV_MESSAGE_LIMIT)

      cFoxFilter = STRTRAN(tcCDLFilter,"*.","")
      IF OCCURS("|",cFoxFilter) > 1
         cFoxFilter = LEFT(cFoxFilter,AT("|",cFoxFilter,2)-1)
      ENDIF

      DO CASE
      CASE cWhichDialog = "PUTFILE"
         cFoxFilter = SUBSTR(cFoxFilter,AT("|",cFoxFilter)+1)
         cFoxFilter = STRTRAN(cFoxFilter,";","|")
         cReturn = PUTFILE("",IIF(EMPTY(tcFileName),"",tcFileName),cFoxFilter)
         * A confirmation of overwrite if the file already exists
         * is done automatically, whether SAFETY is ON or OFF.
      CASE cWhichDialog = "GETFILE"
         cFoxFilter = STRTRAN(cFoxFilter,";",",")
         cFoxFilter = STRTRAN(cFoxFilter,"|",":")
         cReturn = GETFILE(cFoxFilter,"",COV_GETFILE_BUTTON_LOC)
         * file *must* exist, and we have to handle this manually:
         IF NOT EMPTY(cReturn)
            cReturn = FULLPATH(cReturn)
            IF EMPTY(SYS(2000,cReturn))
               cReturn = ""
               THIS.DoMessage(COV_FILE_DOES_NOT_EXIST_LOC, ;
                  COV_STOP_MESSAGEBOX)
            ENDIF
         ENDIF
      OTHERWISE
         * see comment and ASSERTed list of known dlgs above
      ENDCASE

      WAIT CLEAR

   ENDIF

   IF iSetPointer # 0
      _SCREEN.SetAll("MousePointer",iSetPointer)
      _SCREEN.MousePointer = iSetPointer
   ENDIF

   RETURN LOWER(cReturn)


ENDPROC
PROCEDURE fillcoveragefilenamecursor
   * this is a sketch in the engine...
   * the basic records required by this
   * cursor are just hardcoded as INSERTs.
   
   * You can have a different
   * system of filling in
   * subclasses, for example they can be
   * SELECTed from a lookup table
   * of filenames, either by augmenting
   * this method or using 
   * the AdjustCoverageFilenameCursor()
   * method that it calls 
   * (for consistency with the other
   * coverage table methods).
   
   * You can write a little maintenance procedure
   * that scans your COVERAGE.PJX 
   * puts all relevant filenames
   * into such a lookup table, or 
   * into a TEXTMERGEd PRG of INSERTs.

   INSERT INTO (THIS.ccovfilesalias) ;
      VALUES ("COVERAGE.FXP")

   INSERT INTO (THIS.ccovfilesalias) ;
      VALUES ("COVERAGE.VCT")

   INSERT INTO (THIS.ccovfilesalias) ;
      VALUES ("COVERAGE.APP")

   INSERT INTO (THIS.ccovfilesalias) ;
      VALUES ("COV_PJX.FRT")

   THIS.AdjustCoverageFilenameCursor()

   RETURN NOT THIS.lError

ENDPROC
PROCEDURE togglecoverageprofilemode
   LPARAMETERS tcSource,tcTarget

   LOCAL cTarget, iSelect, iRecNo, cOrder
   THIS.lInProfileMode = ! THIS.lInProfileMode
   THIS.ShowStatus(COV_EMPTYING_ALL_RECORDS_LOC)
   iSelect = SELECT()
   cTarget = THIS.GetAlias(tcTarget,"Target")
   SELECT (cTarget)
   iRecNo = IIF(EOF(),0,RECNO())
   cOrder = ORDER()
   SET ORDER TO 0
   IF THIS.lMarkAllOnLoad
      THIS.MarkAllTargetRecords(tcSource, cTarget)
   ENDIF
   IF iRecNo = 0
      LOCATE
   ELSE
      GO iRecNo
   ENDIF
   SET ORDER TO (cOrder)
   SELECT (iSelect)
   THIS.ClearStatus()
   RETURN NOT THIS.lError

ENDPROC
PROCEDURE showstatistics
   * abstract in the engine by design
   RETURN NOT THIS.lError

ENDPROC
PROCEDURE showprojectstatistics
   LPARAMETERS tcSource, tcTarget, tcProject
   LOCAL lReturn
   lReturn = THIS.GetProjectStatistics(tcSource,tcTarget, tcProject)
   IF lReturn
      lReturn = THIS.DisplayProjectStatistics(tcSource,tcTarget,tcProject)
   ENDIF
   RETURN lReturn AND NOT THIS.lError


ENDPROC
PROCEDURE getprojectstatistics
   LPARAMETERS tcSource, tcTarget, tcProject

   LOCAL iSelect, cDefault, cOrder, cTarget, ;
      cPJXFile, cPJXAlias, cProject, lReturn, cFile, ;
      iCovered, iCoverable, iObjTotal, iObjHits, cFileType

   THIS.lError = .F.

   cPJXAlias = ""
   cTarget = THIS.GetAlias(tcTarget,"Target")
   cProject = THIS.GetAlias(tcProject,"Project")
   cPJXFile = THIS.GetResourceLocation("", ;
      COV_GETPROJECTFILE_TITLE_LOC, ;
      COV_PROJECTSONLY_LOC+" (*.pjx)|*.pjx", ;
      "", ;
      "getfile" )
   IF USED(cProject)
      USE IN (cProject)
   ENDIF

*!*	   CREATE CURSOR (cProject) ;
*!*	      (Hostfile c(COV_LEN_HOSTFILE), ;
*!*	      FileType c(4), ;
*!*	      Coverable n(8), ;
*!*	      Covered n(8), ;
*!*	      ObjTotal n(8), ;
*!*	      ObjHits n(8))

   CREATE CURSOR (cProject) ;
      (Hostfile c(COV_LEN_HOSTFILE), ;
      FileType c(4), ;
      Coverable i, ;
      Covered i, ;
      ObjTotal i, ;
      ObjHits i)

   IF NOT EMPTY(cPJXFile)
      cPJXAlias = "P"+SYS(2015)
      USE (cPJXFile) ALIAS (cPJXAlias) AGAIN SHARED IN 0
      IF NOT THIS.lError
         iSelect = SELECT()
         cDefault = SET("DIRECTORY")
         cOrder = ORDER(cTarget)
         SELECT (cPJXAlias)
         CD (SUBSTR(cPJXFile,1,RAT("\",cPJXFile)))
         SET ORDER TO Standard IN (cTarget)
         SET RELATION TO ;
            PADR(LOWER(ALLTR(FULLPATH(ALLTR(STRTRAN(;
            IIF(EMPTY(Outfile),Name,Outfile),CHR(0),""))))), ;
            COV_LEN_HOSTFILE) ;
            INTO (cTarget)
         SET Filter TO INLIST(TYPE,COV_KNOWN_PJX_TYPES)
         LOCATE
         IF EOF()
            MESSAGEBOX(COV_NO_USABLE_PROJECT_RECORDS_LOC, ;
               COV_STOP_MESSAGEBOX)
            USE IN (cPJXAlias)
         ELSE
            * create a header record
            INSERT INTO (cProject) (Hostfile) VALUES (cPJXFile)
            * now check project records of known types:
            SCAN ALL
               cFile = PADR(LOWER(ALLTR(FULLPATH(ALLTR(STRTRAN(;
                  IIF(EMPTY(Outfile),Name,Outfile),CHR(0),""))))), ;
                  COV_LEN_HOSTFILE)
               IF EOF(cTarget)
                  INSERT INTO (cProject) (Hostfile) ;
                     VALUES (cFile)
               ELSE
                  SELECT (cTarget)
                  THIS.MarkOneTargetRecord(tcSource, cTarget, .T.)
                  cFileType = FileType
                  iObjTotal = ObjTotal
                  iObjHits = ObjHits
                  STORE 0 TO iCovered, iCoverable
                  SCAN WHILE Hostfile = cFile
                     THIS.MarkOneTargetRecord(tcSource, cTarget, .T.)
                     iCovered = iCovered + Covered
                     iCoverable = iCoverable + Coverable
                  ENDSCAN
                  INSERT INTO (cProject) ;
                     (Hostfile, FileType, Covered, Coverable, ObjHits, ObjTotal) ;
                     VALUES ;
                     (cFile, cFileType, iCovered, iCoverable, iObjHits, iObjTotal)
               ENDIF
            ENDSCAN
         ENDIF
         SELECT (iSelect)
         CD (cDefault)
         SET ORDER TO (cOrder) IN (cTarget)
         GO Top IN (cTarget)
         THIS.Refresh()
         IF USED(cPJXAlias)
            USE IN (cPJXAlias)
            IF NOT THIS.lError
               lReturn = .T.
            ENDIF
         ENDIF
      ELSE
         THIS.lError = .F.
         MESSAGEBOX(COV_PROJECT_UNAVAILABLE_LOC,COV_STOP_MESSAGEBOX)
      ENDIF

   ENDIF

   RETURN lReturn
   
ENDPROC
PROCEDURE displayprojectstatistics
   LPARAMETERS tcSource, tcTarget, tcProject

   * abstract in the engine by design

   RETURN NOT THIS.lError
   
ENDPROC
PROCEDURE setfontvalues
   LOCAL iSelect, cResource, cMonoFontString

   THIS.cBaseFontName       = ;
      THIS.GetRegistryKeyValue("BaseFontName", PROPER(COV_DEFAULT_BASE_FONTNAME))
   THIS.nBaseFontSize       = ;
      THIS.GetRegistryKeyValue("BaseFontSize", THIS.nBaseFontSize)
   THIS.lBaseFontBold       = ;
      THIS.GetRegistryKeyValue("BaseFontBold", THIS.lBaseFontBold)
   THIS.lBaseFontItalic     = ;
      THIS.GetRegistryKeyValue("BaseFontItalic", THIS.lBaseFontItalic)
   THIS.nBaseMonoFontSize   = ;
      THIS.GetRegistryKeyValue("BaseMonoFontSize", THIS.nBaseMonoFontSize)
   THIS.lBaseMonoFontBold   = ;
      THIS.GetRegistryKeyValue("BaseMonoFontBold", THIS.lBaseMonoFontBold )
   THIS.lBaseMonoFontItalic = ;
      THIS.GetRegistryKeyValue("BaseMonoFontItalic", THIS.lBaseMonoFontItalic)

   * Do the monospace fontname differently 
   * from other font defaults:
   * Don't set a default registry value
   * if none has previously been saved by
   * the user. Instead, try to get default
   * code font from the editor records in
   * the resource file and, if that fails,
   * try to get it from the registry's key for
   * the Trace window font

   cMonoFontString = ;
      THIS.GetRegistryKeyValue("BaseMonoFontName", "")

   IF EMPTY(cMonoFontString)
      * no previous key value
      iSelect = SELECT()
      cResource = SET("RESOURCE",1)

      IF NOT EMPTY(SYS(2000,cResource))
         SELECT 0
         USE (cResource) ALIAS Temp AGAIN SHARED
         IF NOT THIS.lError
            GO BOTTOM
            DO WHILE NOT BOF()
               IF ID = "WINDMODIFY" AND ;
                     ".prg" $ LOWER(Name)
                  cMonoFontString = ALLTR(LOWER(Data))
                  cMonoFontString = SUBSTR(cMonoFontString,51)
                  cMonoFontString = SUBSTR(cMonoFontString,1, ;
                     AT(CHR(0),cMonoFontString)-1)
                  EXIT
               ELSE
                  SKIP -1
               ENDIF
            ENDDO
         ELSE
            THIS.lError = .F.
         ENDIF
         USE
         SELECT (iSelect)
      ENDIF

      IF EMPTY(cMonoFontString)
         * didn't get an answer from the resource file
         * so use the Trace window default:
         IF THIS.lUsingRegistry

            cMonoFontString = ;
               THIS.GetRegistryKeyValue("TraceFontName","",VFP_OPTIONS_KEY)
         ENDIF
      ENDIF

   ENDIF

   IF NOT EMPTY(cMonoFontString)
      THIS.cBaseMonoFontName   = PROPER(cMonoFontString)
   ELSE
      * court of last resort if no other option pans out:
      THIS.cBaseMonoFontName   = PROPER(COV_DEFAULT_MONO_FONTNAME)
   ENDIF

   RETURN NOT THIS.lError
   
ENDPROC
PROCEDURE lockscreens
   LPARAMETERS tlOn

   IF tlOn
      THIS.SetAll("LockScreen",.T.)
      _SCREEN.SetAll("MousePointer",11)
      _SCREEN.MousePointer = 11
   ELSE
      THIS.SetAll("LockScreen",.F.)
      _SCREEN.SetAll("MousePointer",0)
      _SCREEN.MousePointer = 0
   ENDIF

ENDPROC
PROCEDURE getregisteredaddins
   IF THIS.lUsingRegistry
      LOCAL cAddInName, iAddInNumber
      cAddInName = ""
      iAddInNumber = 1
      cAddInName = THIS.GetRegistryKeyValue("AddIn1","")
      DO WHILE NOT EMPTY(cAddInName)
         DIME THIS.aAddIns[iAddInNumber]
         THIS.aAddIns[iAddInNumber] = cAddInName
         iAddInNumber = iAddInNumber + 1
         cAddInName = THIS.GetRegistryKeyValue("AddIn"+ALLTR(STR(iAddInNumber)),"")
      ENDDO
   ENDIF
   RETURN NOT THIS.lError
   
ENDPROC
PROCEDURE showstatus
   LPARAMETERS cMessage

   IF NOT EMPTY(cMessage)
      THIS.lUsingStatusBar = ;
         ( (SET("STATUS BAR") = "ON") AND ;
         ( (NOT THIS.lInCoverageFrame) OR ;
         THIS.lUnattended) )
      IF THIS.lUsingStatusBar
         SET MESSAGE TO LEFT(cMessage,COV_MESSAGE_LIMIT)
      ELSE
         WAIT WINDOW NOWAIT LEFT(cMessage,COV_MESSAGE_LIMIT)
      ENDIF
   ENDIF
   RETURN NOT THIS.lError

ENDPROC
PROCEDURE clearstatus
   IF THIS.lUsingStatusBar
      SET MESSAGE TO ""
   ELSE
      WAIT CLEAR
   ENDIF
   RETURN NOT THIS.lError

ENDPROC
PROCEDURE markalltargetrecords
   LPARAMETERS tcSource, tcTarget

   LOCAL cSource, cTarget, iSelect, iRecNo, cOrder
   ASSERT (EMPTY(tcSource) OR ;
      (TYPE("tcSource") = "C" AND USED(tcSource))) AND ;
      (EMPTY(tcTarget) OR ;
      (TYPE("tcTarget") = "C" AND USED(tcTarget)))

   THIS.ShowStatus(COV_MARKING_ALL_RECORDS_LOC)

   iSelect = SELECT()

   IF EMPTY(tcSource)
      cSource = THIS.GetAlias(tcSource,"Source")
      cTarget = THIS.GetAlias(tcTarget,"Target")
   ELSE
      cSource = tcSource
      cTarget = tcTarget
   ENDIF

   SELECT (cTarget)
   iRecNo = IIF(EOF(),0,RECNO())
   cOrder = ORDER()
   SET ORDER TO Standard
   LOCATE
   SCAN
      THIS.MarkOneTargetRecord(cSource,cTarget, .T.)
   ENDSCAN
   IF iRecNo = 0
      LOCATE
   ELSE
      GO iRecNo
   ENDIF
   SET ORDER TO (cOrder)
   SELECT (iSelect)
   THIS.ClearStatus()
   RETURN NOT THIS.lError


ENDPROC
PROCEDURE filltargetcursor
   LPARAMETERS tcSource, tcTarget

   LOCAL cSource, cTarget, iSelect, cOrder, cFile

   ASSERT (EMPTY(tcSource) OR ;
      (TYPE("tcSource") = "C" AND USED(tcSource))) AND ;
      (EMPTY(tcTarget) OR ;
      (TYPE("tcTarget") = "C" AND USED(tcTarget)))

   THIS.LockScreens(.T.)
   THIS.ShowStatus(COV_FILLING_ALL_RECORDS_LOC)
   iSelect = SELECT()
   IF EMPTY(tcSource)
      cSource = THIS.GetAlias(tcSource,"Source")
      cTarget = THIS.GetAlias(tcTarget,"Target")
   ELSE
      cSource = tcSource
      cTarget = tcTarget
   ENDIF
   SELECT (cTarget)
   cOrder = ORDER()
   SET ORDER TO Hostfile
   LOCATE
   SCAN
      * third param will keep the source
      * file open in case we can keep using it
      * for multiple records
      THIS.FillOneTargetRecord(cSource,cTarget, .T.)

   ENDSCAN
   IF USED("Temp")
      * close any final source file
      USE IN Temp
   ENDIF
   SELECT (cTarget)
   DELETE FOR EMPTY(SourceCode)
   SELE Hostfile, COUNT(*) AS ObjHits FROM (cTarget) ;
      GROUP BY Hostfile ;
      INTO CURSOR Temp
   SELECT Temp
   INDEX ON Hostfile TAG Hostfile
   SELECT (cTarget)
   SET RELATION TO Hostfile INTO Temp
   LOCATE
   DO WHILE NOT EOF()
      IF INLIST(FileType,".vct",".sct", ".frt", ".lbt")
         cFile = Hostfile
         REPLACE ObjHits WITH Temp.ObjHits ;
            WHILE Hostfile == cFile
      ELSE
         SKIP
      ENDIF
   ENDDO
   COUNT FOR NOT DELETED()
   THIS.iTargetReccount = _TALLY
   USE IN Temp
   SET ORDER TO (cOrder)
   LOCATE
   SELECT (iSelect)
   THIS.ClearStatus()
   THIS.LockScreens(.F.)
   RETURN (THIS.iTargetReccount > 0 AND NOT THIS.lError)


ENDPROC
PROCEDURE markonetargetrecord
   LPARAMETERS tcSource, tcTarget, tlFillingAll

   LOCAL lReturn, cTarget, cObject
   cTarget = THIS.GetAlias(tcTarget,"Target")

   DO CASE
   CASE EMPTY(&cTarget..Hostfile)
      * Problem !
   CASE THIS.lInProfileMode AND NOT EMPTY(&cTarget..Profiled)
      lReturn = .T.
   CASE (NOT THIS.lInProfileMode) AND (NOT EMPTY(&cTarget..Marked))
      lReturn = .T.
   OTHERWISE
      THIS.LockScreens(.T.)   
      cObject = ALLTR(&cTarget..ObjClass)
      cObject = SUBSTR(cObject,AT("!",cObject)+1)      
      THIS.ShowStatus(COV_MARKING_SOURCE_FOR_LOC+" "+ ;
           ALLTR(&cTarget..Hostfile)+"."+ ;
           ALLTR(cObject)+"...")      
   
      lReturn = THIS.MarkTargetCoverage(tcSource,cTarget)
      IF NOT lReturn
         DELETE IN (cTarget)
         IF NOT tlFillingAll
            GO Top IN (cTarget)
            THIS.DoMessage(COV_NO_COVERABLE_CODE_LOC+C_DOUBLE_CR,;
               COV_STOP_MESSAGEBOX)
         ENDIF
      ENDIF
      THIS.ClearStatus()
      THIS.LockScreens(.F.)
   ENDCASE

   RETURN lReturn AND (NOT THIS.lError)


ENDPROC
PROCEDURE addregisteredaddin
   LPARAMETER tcFileToAdd

   ASSERT TYPE("tcFileToAdd") = "C"
   ASSERT NOT EMPTY(SYS(2000,tcFileToAdd))

   LOCAL iAddInCount, cFileToAdd, lFound

   cFileToAdd = LOWER(tcFileToAdd)
   SET EXACT ON

   IF ASCAN(THIS.aAddIns,cFileToAdd) = 0
   
      * look for a previously-emptied one to fill:
      iAddInCount = 1
      FOR iAddInCount = 1 TO ALEN(THIS.aAddIns)
         lFound =  EMPTY(THIS.aAddIns[iAddInCount]) OR ;
                   (TYPE(THIS.aAddIns[iAddInCount]) = "C" AND ;
                    EMPTY(EVAL(THIS.aAddIns[iAddInCount])))
         IF lFound
            EXIT
         ENDIF
      ENDFOR
      
      IF NOT lFound
         iAddInCount = iAddInCount + 1
         DIME THIS.aAddIns[iAddInCount]
      ENDIF

      THIS.aAddIns[iAddInCount] = cFileToAdd

   ENDIF

   SET EXACT OFF

   RETURN NOT THIS.lError


ENDPROC
PROCEDURE saveoptionstoregistry
   IF THIS.lUsingRegistry

      * allow writes, since we only go against
      * current user's Coverage keys

      * save work options

      THIS.SetRegistryKeyValue("ProfileMode", THIS.lStartInProfileMode)
      THIS.SetRegistryKeyValue("SmartPath", THIS.lSmartPath)
      THIS.SetRegistryKeyValue("MarkAll", THIS.lMarkAllOnLoad)
      THIS.SetRegistryKeyValue("MarkExecuted", THIS.cMarkExecuted)
      THIS.SetRegistryKeyValue("MarkNotExecuted", THIS.cMarkNotExecuted)
      THIS.SetRegistryKeyValue("RegisterAddIn",THIS.lRegisterAddIn)
      THIS.SetRegistryKeyValue("StackXSLT",THIS.cStackXSLT)
      THIS.SetRegistryKeyValue("StackXMLExtendedTree", THIS.lStackXMLExtendedTree)


      * save font options
      THIS.SetRegistryKeyValue("BaseFontName", THIS.cBaseFontName)
      THIS.SetRegistryKeyValue("BaseFontSize", THIS.nBaseFontSize)
      THIS.SetRegistryKeyValue("BaseFontBold", THIS.lBaseFontBold)
      THIS.SetRegistryKeyValue("BaseFontItalic", THIS.lBaseFontItalic)
      THIS.SetRegistryKeyValue("BaseMonoFontName",THIS.cBaseMonoFontName)
      THIS.SetRegistryKeyValue("BaseMonoFontSize", THIS.nBaseMonoFontSize)
      THIS.SetRegistryKeyValue("BaseMonoFontBold", THIS.lBaseMonoFontBold )
      THIS.SetRegistryKeyValue("BaseMonoFontItalic", THIS.lBaseMonoFontItalic)


      * other options not saved here:
      
      * save addins to registry is done on close, not after options dialog,
      * since we're reading from and manipulating
      * the member array for the life of the engine

      * save frame/environment has to be done directly from the options
      * dialog, since this can't be changed during the life of the engine
      * (we're just saving for the next engine instance)


   ENDIF

ENDPROC
PROCEDURE setregisteredaddins
   LOCAL iAddInNumber, liEmpty, liKeysSet
   
   STORE 0 TO liEmpty, liKeysSet
   

   IF THIS.lUsingRegistry

      FOR iAddInNumber = 1 TO ALEN(THIS.aAddIns)
         IF NOT EMPTY(THIS.aAddIns[iAddInNumber])
            IF liEmpty # 0
               THIS.SetRegistrykeyValue("AddIn"+ALLTR(STR(liEmpty)), ;
                  THIS.aAddIns[iAddInNumber])
               liEmpty = 0
            ELSE
               liKeysSet = liKeysSet + 1
               THIS.SetRegistrykeyValue("AddIn"+ALLTR(STR(liKeysSet)), ;
                  THIS.aAddIns[iAddInNumber])
            ENDIF
         ELSE
            * put in a nullstring, since if something was
            * deleted from the array it is no longer a valid entry
            THIS.SetRegistrykeyvalue("AddIn"+ALLTR(STR(iAddInNumber)), [""])
            liEmpty = iAddInNumber
         ENDIF
      ENDFOR

   ENDIF
   RETURN NOT THIS.lError
   
   
ENDPROC
PROCEDURE deleteregisteredaddin
   LPARAMETER tcFileToDelete

   LOCAL iAddInNumber

   SET EXACT ON
   iAddInNumber = ASCAN(THIS.aAddIns,LOWER(tcFileToDelete))

   IF iAddInNumber # 0
      ADEL(THIS.aAddIns, iAddInNumber)
   ENDIF

   SET EXACT OFF

   RETURN NOT THIS.lError


ENDPROC
PROCEDURE createforms
   IF THIS.lInCoverageFrame
   
      #IF COV_COMPILED_IN_VFP5 
         LOCAL cLibs, cAlias
         cLibs = SET("CLASSLIB")
         cAlias = THIS.SetClassLibToAlias(COV_BASE_CLASSLIB,THIS.cAppName)
         THIS.oFrame = CREATEOBJECT(cAlias+".cov_frame",THIS)  
         IF NOT EMPTY(cAlias)       
            IF NOT EMPTY(cLibs)
               SET CLASSLIB TO &cLibs
            ELSE
               SET CLASSLIB TO
            ENDIF
         ENDIF
      #ELSE
         THIS.oFrame = NEWOBJECT("cov_frame",COV_BASE_CLASSLIB,THIS.cAppName,THIS)      
      #ENDIF

   ENDIF      
   
   THIS.SetFormsetAttributes()

   RETURN NOT THIS.lError

ENDPROC
PROCEDURE gettablename
LPARAMETERS tcWhichSuffix, tcWhichExt

LOCAL iPos, cSuffix, cDBFStem, cTableName, cExt

IF TYPE("tcWhichSuffix") = "C"
   cSuffix = tcWhichSuffix
ELSE
   cSuffix = ""
ENDIF   

IF VARTYPE(tcWhichExt) # "C" OR EMPTY(tcWhichExt)
   cExt = "DBF"  
ELSE
   cExt = tcWhichExt
ENDIF      
   
iPos = AT(".",THIS.cSourceFile)

IF iPos = 0
   cDBFStem = THIS.cSourceFile + cSuffix
ELSE
   cDBFStem = LEFT(THIS.cSourceFile, iPos-1) + cSuffix
ENDIF

iPos = 1
cTableName = FORCEEXT(cDBFStem+"1",cExt)

IF NOT EMPTY(SYS(2000,cTableName))
   DO WHILE NOT EMPTY(SYS(2000,cTableName))
      iPos = iPos+1
      cTableName = FORCEEXT(cDBFStem+ALLTR(STR(iPos)),cExt)
   ENDDO
ENDIF      

RETURN LOWER(cTableName)


ENDPROC
PROCEDURE setapphome
LOCAL cSys16, iLevel

STORE "" TO THIS.cAppName, THIS.cAppHome

IF LEFT(UPPER(SYS(16,0)),2) # "ON"
   THIS.cAppHome = SUBSTR(SYS(16,0),1,RAT("\",SYS(16,0)))
ELSE
   THIS.cAppHome = SUBSTR(SYS(16,2),1,RAT("\",SYS(16,2)))
ENDIF

IF "PROCEDURE" $ THIS.cAppHome
   THIS.cAppHome = SUBSTR(THIS.cAppHome,11)
   THIS.cAppHome = SUBSTR(THIS.cAppHome,AT(" ",THIS.cAppHome)+1)
ENDIF

* because this engine is able to take part in a
* modeless app, we have to be careful to 
* SET CLASSLIB ... TO... IN the appropriate APP
* or EXE, but we may not know what that container
* file is named.
  

FOR iLevel = 256 TO 1 STEP -1 && 256 = twice the nested programs currently allowed!
    * note: VFP6-specific code would be different
    cSys16 = UPPER(SYS(16,iLevel))
    IF INLIST(RIGHT(cSys16,3),"APP","EXE","DLL")
       THIS.cAppName = cSys16
       EXIT
    ENDIF
ENDFOR
IF "PROCEDURE" $ THIS.cAppName
   THIS.cAppName = SUBSTR(THIS.cAppName,11)
   THIS.cAppName = SUBSTR(THIS.cAppName,AT(" ",THIS.cAppName)+1)
ENDIF

RETURN .T.
ENDPROC
PROCEDURE setformsetattributes
IF THIS.lInCoverageFrame
   WITH THIS.oFrame
       .Height = THIS.GetRegistryKeyValue("FrameHeight", .Height )         
       .Top = THIS.GetRegistryKeyValue("FrameTop", .Top)
       .Left = THIS.GetRegistryKeyValue("FrameLeft", .Left)
       .Width = THIS.GetRegistryKeyValue("FrameWidth", .Width)
   ENDWITH
ENDIF
RETURN NOT THIS.lError   




ENDPROC
PROCEDURE saveformsetattributes
IF THIS.lInCoverageFrame AND (NOT ISNULL(THIS.oFrame))
   WITH THIS.oFrame
      THIS.SetRegistryKeyValue("FrameTop",.Top)
      THIS.SetRegistryKeyValue("FrameLeft",.Left)
      THIS.SetRegistryKeyValue("FrameWidth",.Width)
      THIS.SetRegistryKeyValue("FrameHeight",.Height)
      .Release()
   ENDWITH
ENDIF

RETURN NOT THIS.lError

ENDPROC
PROCEDURE addformpositionsaver
LPARAMETERS toFormRef

ASSERT ISNULL(toFormRef) OR ;
    (VARTYPE(toFormRef) = "O" AND UPPER(toFormRef.BaseClass) == "FORM")

IF (NOT FILE(COV_BASE_CLASSLIB)) AND EMPTY(THIS.cAppName)   
   RETURN 
ENDIF   
    
LOCAL lcObjName, loForm
lcObjName = "cus"+SYS(2015) 

#IF COV_COMPILED_IN_VFP5 
    LOCAL lcLibs, lcAlias
    lcLibs = SET("CLASSLIB")
    lcAlias = THIS.SetClassLibToAlias(COV_BASE_CLASSLIB,THIS.cAppName)
    IF ISNULL(toFormRef)
       * called at startup to handle
       * all forms currently in the set
       FOR EACH loForm IN THIS.Forms
          IF UPPER(loForm.BaseClass) == "FORM"
             loForm.AddObject(lcObjName,lcAlias+".cov_SavePosition")
          ENDIF
      ENDFOR
    ELSE
       toFormRef.AddObject(lcObjName,lcAlias+".cov_SavePosition")
    ENDIF
    IF NOT EMPTY(lcAlias)       
       IF NOT EMPTY(lcLibs)
          SET CLASSLIB TO &lcLibs
       ELSE
          SET CLASSLIB TO
       ENDIF
    ENDIF

#ELSE

    IF ISNULL(toFormRef)
       * called at startup to handle
       * all forms currently in the set
       FOR EACH loForm IN THIS.Forms
          IF UPPER(loForm.BaseClass) == "FORM"
             loForm.NewObject(lcObjName,"cov_SavePosition",COV_BASE_CLASSLIB, THIS.cAppName)
          ENDIF
      ENDFOR
    ELSE
       toFormRef.NewObject(lcObjName,"cov_SavePosition",COV_BASE_CLASSLIB, THIS.cAppName)
    ENDIF

#ENDIF



ENDPROC
PROCEDURE showstackxml
LPARAMETERS tcLog
LOCAL lReturn
lReturn = THIS.GetStackXML(tcLog)
IF lReturn
   lReturn = THIS.DisplayStackXML()
ENDIF
RETURN lReturn AND NOT THIS.lError

ENDPROC
PROCEDURE getstackxml
LPARAMETERS tcLog

IF THIS.lVFP5
   * no stack info
   RETURN .F.
ENDIF   

LOCAL liSelect, llDeleted, lcFilter, lcOrder, lcStackAlias, ;
      laTemp[1], liIndex,  lcStack ,lcFile, lcSourceFile, ;
      liStackLevel, lcLastExecuting, lcExecutingStack, ;
      liPos, llAdd, liType, lnDuration, llEvent, ;
      loXML, loNode, lcTag, loParent, loThisNode, llReturn, ;
      lnPercent, liRecs, liPercent
      
#IF NOT COV_LOAD_STACK_FROM_DBF

LOCAL liMaxLineLength, liLineItems, laLine[1], ;
      lcLine, liHandle, ;
      loAncester, lcPathedParent, loParentStackAttrib, ;      
      Duration, ObjClass, Executing, Hostfile, ;
      Stacklevel, FileType
#ENDIF   

#IF COV_LOAD_STACK_FROM_DBF
   lcSourceFile = THIS.cSourceFile
#ELSE
   IF EMPTY(tcLog) OR VARTYPE(tcLog) # "C"
      lcSourceFile = THIS.cSourceFile
   ELSE
      lcSourceFile = tcLog
   ENDIF
#ENDIF   

THIS.LockScreens(.T.)

THIS.ShowStatus(COV_LOADING_STACKINFO_LOC+": "+lcSourceFile+"...")

llReturn = .T.

THIS.lError = .F.

liSelect = SELECT()
llDeleted = (SET("DELETED") = "ON")

IF llDeleted
   SET DELETED OFF
ENDIF   

SELECT 0

lcStackAlias = "S"+RIGHT(SYS(2015),9)

IF USED(lcStackAlias)
   USE IN (lcStackAlias)
ENDIF

CREATE CURSOR (lcStackAlias) ;
      (FName C(30), ;
       FType I, ;
       FStack I, ;
       FDuration N(THIS.iLenDuration, N_COVLOG_PRECISION), ;
       FLevel C(THIS.iLenExecuting) )

#IF COV_LOAD_STACK_FROM_DBF 

   SELECT (THIS.cSourceAlias)

   lcFilter = SET("FILTER")
   lcOrder = SET("ORDER")

   SET ORDER TO
   SET FILTER TO

#ELSE

   SELECT 0
   * Going to an empty
   * workarea ensures that the field values don't
   * collide with our variables of the same name.
   * Since this code is written for both
   * COV_LOAD_STACK_FROM_DBF and
   * NOT COV_LOAD_STACK_FROM_DBF, we
   * address either field values and memvars
   * in the same codes, and there are no
   * m.'s permissable

#ENDIF   

liStackLevel = 0
lcLastExecuting = ""
lcExecutingStack = ""

* Load an interim cursor
* using either the log as loaded
* from the Coverage DBF
* or directly from the original
* text log file. "Collapse" adjacent
* log lines that come from the same
* executing program into one entry in
* this interim cursor.

#IF COV_LOAD_STACK_FROM_DBF 

   SCAN ALL

#ELSE

   liHandle = FOPEN(lcSourceFile)
   IF liHandle > -1

      liLineItems = (FCOUNT(THIS.cSourceAlias) -1)
      liMaxLineLength = (INT(N_VFP_PATH_LIMIT  * 1.5))
      DO WHILE NOT FEOF(liHandle)

      lcLine = FGETS(liHandle, liMaxLineLength)
      IF EMPTY(lcLine)
         LOOP
         * first line, or line cut out by user to shorten analysis
      ENDIF
      IF (ALINES(laLine,lcLine,.T.,[COV_LOG_DELIMITER]) < liLineItems)
         LOOP
         * shouldn't happen, even for ON... events
      ENDIF
      Duration = VAL(laLine[1])
      ObjClass = laLine[2]
      Executing = laLine[3]
      Hostfile = laLine[5]
      Stacklevel = VAL(laLine[6])
      IF NOT EMPTY(Hostfile)
         FileType = "."+LOWER(JUSTEXT(Hostfile))
      ELSE
         FileType = ""
      ENDIF
   
#ENDIF   

      llAdd = .F.
      DO CASE
      CASE liStackLevel = 0
         * first record
         lcExecutingStack = "#"+ALLTR(COV_STACKEXPR)
         llAdd = .T.
      CASE StackLevel > liStackLevel
         lcExecutingStack = lcExecutingStack+"#"+ALLTR(COV_STACKEXPR)
         llAdd = .T.
      CASE StackLevel = (liStackLevel-1)
         * check the parent
         IF StackLevel = 1
            llAdd = .T.
         ELSE
            liPos = AT("#",lcExecutingStack,StackLevel)
            lcStack = SUBSTR(lcExecutingStack,liPos+1)
            IF SUBSTR(lcStack,1,AT("#",lcStack)-1) == ALLTR(COV_STACKEXPR)
               * same as the calling stacklevel
            ELSE
               * else fix the chain and add a record
                llAdd = .T.
            ENDIF
         ENDIF
      CASE (StackLevel < liStackLevel) OR ;
           (NOT (lcLastExecuting == ALLTR(COV_STACKEXPR)))
         * it's possible to "jump up levels"
         * if the previous program was the last line or
         * in the RETURN line of its calling program
         IF StackLevel = 1
            lcExecutingStack = ""
         ELSE
            liPos = AT("#",lcExecutingStack,StackLevel)
            lcExecutingStack = SUBSTR(lcExecutingStack, liPos-1)
         ENDIF
         lcExecutingStack = lcExecutingStack+"#"+ALLTR(COV_STACKEXPR)
         llAdd = .T.
      OTHERWISE
         llAdd = .F.      
         * same proc
      ENDCASE
      lnDuration = Duration
      IF llAdd
      
         liStackLevel = StackLevel
         lcLastExecuting = COV_STACKEXPR
         liType = ASCAN(THIS.aFileTypes,FileType)
         lcFile = Hostfile
         
         IF liType > 0
            liType = ASUBSCRIPT(THIS.aFileTypes,liType,1)
         ENDIF
     
        INSERT INTO (lcStackAlias) ;
                     (FLevel,FType,FName,FDuration,FStack) ;
                     VALUES (lcLastExecuting,liType,;
                             LOWER(JUSTSTEM(ALLTR(lcFile)))+;
                             IIF(EMPTY(lcFile),"","."+LOWER(JUSTEXT(ALLTR(lcFile)))), ;
                             lnDuration, liStackLevel)
      ELSE
   
         REPLACE FDuration WITH (FDuration + lnDuration) IN (lcStackAlias)
   
      ENDIF

#IF COV_LOAD_STACK_FROM_DBF 
   
   ENDSCAN

#ELSE

      ENDDO
      =FCLOSE(liHandle)

   ELSE 
   
       THIS.DoMessage(COV_LOG_CANNOT_BE_OPENED_LOC,COV_STOP_MESSAGEBOX)
   
       llReturn = .F.

   ENDIF   

#ENDIF

IF llReturn AND ((NOT USED(lcStackAlias)) OR ;
   RECCOUNT(lcStackAlias) = 0)
   
   THIS.DoMessage(COV_LOG_HAS_NO_USABLE_RECORDS_LOC,COV_STOP_MESSAGEBOX)
   llReturn = .F.
   
ENDIF   

* If the log has successfully loaded,
* generate the XML in either "extended" or
* "collapsed" format.

IF llReturn

   THIS.ShowStatus(COV_GENERATING_STACKXML_LOC+" "+lcSourceFile+"... ")

   SELECT (lcStackAlias)
   
   liRecs = RECCOUNT()
   liPercent = 0

   GO TOP
   loXML = CREATEOBJECT("Microsoft.XMLDom")
   loXML.LoadXML("<?xml version='1.0'?><"+COV_STACKROOT+"-"+ ;
                 CHRTRAN(JUSTFNAME(THIS.cSourceFile),;
                         [ &!{}%$^',()~+=@`"]+"[]","_")+"/>")
   liStackLevel = 0

   SCAN
      #IF NOT COV_LOAD_STACK_FROM_DBF 
         llEvent = (EMPTY(Fname)) && handling for on-events
      #ENDIF
      lcTag = IIF(llEvent,COV_STACK_ONEVENT_TAG,ALLTRIM(FName)) 
      IF NOT EMPTY(Flevel)
         lcTag = lcTag+"-"+ALLTRIM(Flevel)
      ENDIF
      lcTag = STRTRAN(lcTag,SPACE(1),"-") && necessary for on-events
      DO CASE
      CASE (liStackLevel = 0)
         llAdd = .T.
         loParent = loXML.DocumentElement      
      CASE  (FStack = 1) 
         IF loNode.TagName == lcTag
            llAdd = .F.
         ELSE
            llAdd = .T.
            loParent = loXML.DocumentElement      
         ENDIF
      CASE FStack = liStackLevel 
         IF loNode.TagName == lcTag
           llAdd = .F.
         ELSE
           llAdd = .T.
           loParent = loNode.ParentNode
         ENDIF
      CASE FStack > liStackLevel
         llAdd = .T.
         loParent = loNode            
      OTHERWISE && FStack < liStackLevel
         * check to see how many levels
         * up we have to go, since 
         * it's possible to skip levels (with OKLs, errors,
         * and other events)
         FOR liIndex = 1 TO FStack
            IF (VAL(loNode.getAttribute("StackLevel")) <= FStack ) OR ;
               (ISNULL(loNode.ParentNode.ownerDocument)) && we don't want to go to the root
               EXIT
            ENDIF
            loNode = loNode.ParentNode            
         ENDFOR
         IF VAL(loNode.getAttribute("StackLevel")) = FStack
            loParent = loNode.ParentNode
         ELSE
            loParent = loNode
         ENDIF
         IF loNode.TagName == lcTag
            llAdd = .F.
         ELSE
            llAdd = .T.
         ENDIF
      ENDCASE
      IF llAdd
         loThisNode = NULL
         #IF NOT COV_LOAD_STACK_FROM_DBF  
            IF NOT THIS.lStackXMLExtendedTree
               * now check to see if this element already exists
               * at this level
               IF FStack > 1
                  loAncester = loParent
                  lcPathedParent = ""
                  loParentStackAttrib = loParent.attributes.getNamedItem("StackLevel")
                  IF ISNULL(loParentStackAttrib)
                     * this can happen if the log has been excerpted/truncated 
                     lcPathedParent = "/" + loParent.NodeName
                  ELSE 
                     FOR liIndex = 0 TO (VAL(loParentStackAttrib.value))
                        IF ISNULL(loAncester.ownerDocument)
                           EXIT
                        ENDIF
                        lcPathedParent = "/"+ loAncester.NodeName + lcPathedParent 
                        loAncester = loAncester.ParentNode
                     ENDFOR       
                  ENDIF
               ELSE
                  lcPathedParent = "/" + loParent.NodeName
               ENDIF
               loThisNode = loXML.SelectSingleNode( ;
                             lcPathedParent + "/" + ;
                             lcTag+"[@StackLevel="+TRANSFORM(FStack)+"]")
            ENDIF
         #ENDIF
         IF ISNULL(loThisNode)
            loThisNode = loXML.createElement(lcTag)   
            loThisNode.setAttribute("StackLevel",TRANSFORM(FStack))            
            IF NOT llEvent 
               loThisNode.setAttribute("RunsFor",TRANSFORM(FDuration))
            ELSE 
               * On Event items don't have a meaningful 
               * duration because we can't figure out which
               * bar etc was actually invoked.  Consequently,
               * don't report at all -- could also report 
               * this attribute as follows:
               * loThisNode.setAttribute("RunsFor",COV_ATTRIB_N_A)            
            ENDIF
            #IF NOT COV_LOAD_STACK_FROM_DBF 
               IF NOT THIS.lStackXMLExtendedTree
                  IF FStack > 1
                     loThisNode.setAttribute("TimesCalled","1")
                  ELSE
                     * It doesn't really make sense to say we know
                     * how many times a StackLevel 1 program was invoked.
                     * Without some kludgy examination of line numbers (which
                     * would never be perfect) we can't know whether
                     * a top level program was re-invoked from the 
                     * command line or is continuing to execute from 
                     * the earlier call. Consequently, omit
                     * TimesCalled at StackLevel 1.  This attribute
                     * could also be reported as follows:
                     * loThisNode.setAttribute("TimesCalled",COV_ATTRIB_N_A)                  
                  ENDIF
               ENDIF
            #ENDIF
            loParent.appendChild(loThisNode)
         ELSE
            IF NOT llEvent
               loThisNode.SetAttribute("RunsFor",  ;
                          TRANSFORM(VAL(loThisNode.SelectSingleNode("@RunsFor").nodeValue)+FDuration))
            ENDIF
            #IF NOT COV_LOAD_STACK_FROM_DBF 
                * If reporting for StackLevel 1, remove
                * the first condition in the IF statement below:
                IF NOT ((FStack = 1) OR THIS.lStackXMLExtendedTree )
                   loThisNode.SetAttribute("TimesCalled",  ;
                        TRANSFORM(VAL(loThisNode.SelectSingleNode("@TimesCalled").nodeValue)+1))
                ENDIF            
            #ENDIF 
         ENDIF
         loNode = loThisNode
      ENDIF      

      liStackLevel = FStack         

      lnPercent = (RECNO()/liRecs) * 100

      IF lnPercent >= 10 + liPercent
         liPercent = INT(lnPercent)
         THIS.ShowStatus(COV_GENERATING_STACKXML_LOC+" "+lcSourceFile+"... "+TRANSFORM(liPercent)+"%")         
      ENDIF
      
   ENDSCAN

ENDIF

#IF COV_LOAD_STACK_FROM_DBF 

   SELECT (THIS.cSourceAlias)
   SET ORDER TO &lcOrder
   SET FILTER TO &lcFilter

#ENDIF

IF llReturn

   IF THIS.lStackXMLExtendedTree
      lcFile = THIS.GetTableName(COV_STACKXMLEXT_SUFFIX,"XML")
   ELSE
      lcFile  = THIS.GetTableName(COV_STACKXML_SUFFIX,"XML")
   ENDIF

   IF NOT THIS.lUnattended
   
      lcFile = ;
         THIS.GetResourceLocation(lcSourceFile, ;
         COV_SETSTACKXML_TITLE_LOC, ;
         COV_XMLFILES_LOC + " (*.xml)|*.xml", ;
         lcFile, ;
         "PUTFILE")
   ENDIF
   
   IF NOT EMPTY(lcFile)
   
      IF NOT EMPTY(SYS(2000,lcFile))
         ERASE (lcFile) RECYCLE
      ENDIF
   
      THIS.cSavedStackXML = lcFile
      THIS.ShowStatus(COV_WRITING_STACKXML_LOC+": "+THIS.cSavedStackXML+"...")     
      STRTOFILE(loXML.XML,THIS.cSavedStackXML)
   
   ELSE

      llReturn = .F.
      
   ENDIF
   
ENDIF   

IF USED(lcStackAlias)
   USE IN (lcStackAlias)
ENDIF

SELECT (liSelect)

IF llDeleted
   SET DELETED ON
ENDIF   

THIS.ClearStatus()

THIS.LockScreens(.F.)
THIS.lError = .F.

RETURN llReturn 
ENDPROC
PROCEDURE displaystackxml
LPARAMETERS tcXMLFile

LOCAL lcFile, liReturnValue

liReturnValue = -1

lcFile = tcXMLFile

IF EMPTY(lcFile) or ;
   VARTYPE(lcFile) # "C" OR ;
   EMPTY(SYS(2000,lcFile))
   
   lcFile = THIS.cSavedStackXML
   
ENDIF   

IF NOT (EMPTY(lcFile) OR ;
   EMPTY(SYS(2000,lcFile)))

   DECLARE long ShellExecuteA IN SHELL32 ;
           long, string, string, string, string, long

   liReturnValue = ShellExecuteA( 0, "open",  ;
                               lcFile, "","", 1 )

ENDIF                               

RETURN (liReturnValue >= 32) AND (NOT THIS.lError)
ENDPROC
PROCEDURE togglestackxmlextendedtree

THIS.lStackXMLExtendedTree = ;
   (! THIS.lStackXMLExtendedTree)

RETURN (NOT THIS.lError)
ENDPROC
PROCEDURE transformstackxml
LPARAMETERS tcXSLT, tcXMLIn, tcXMLOut, tlNoShow

LOCAL lcXSLT, lcInputFile, lcOutputFile, oXSL, oXML, ;
      lcResult, llSuccess, lcSaveSource

llSuccess = .T.

IF VARTYPE(tcXSLT) # "C" OR ;
   EMPTY(SYS(2000,tcXSLT))
   lcXSLT = THIS.cStackXSLT
ELSE
   lcXSLT = tcXSLT
ENDIF      

IF VARTYPE(lcXSLT) # "C" OR ;
   EMPTY(SYS(2000,lcXSLT))

   lcXSLT = THIS.GetResourceLocation("", ;
      COV_GETXSLTFILE_TITLE_LOC, ;
      COV_XSLFILES_LOC + " (*.xsl;*.xslt)|*.xsl;*.xslt|" + ;
      COV_ALLFILES_LOC+" (*.*)|*.*" ,;
      "", ;
      "GETFILE" )

ENDIF

IF VARTYPE(lcXSLT) # "C" OR ;
   EMPTY(SYS(2000,lcXSLT))
   llSuccess = .F.
ENDIF   

IF llSuccess
   IF (VARTYPE(tcXMLIn) # "C" OR ;
      EMPTY(SYS(2000,tcXMLIn)))
      lcInputFile = THIS.cSavedStackXML
   ELSE
      lcInputFile = tcXMLIn
   ENDIF   
   IF (VARTYPE(lcInputFile) # "C" OR ;
      EMPTY(SYS(2000,lcInputFile)))
      llSuccess = THIS.GetStackXML() 
      IF llSuccess
         lcInputFile = THIS.cSavedStackXML
      ENDIF
   ENDIF
ENDIF   

IF llSuccess
   oXSL = CreateObject("Microsoft.XMLDOM")
   IF ISNULL(oXSL) OR (NOT oXSL.Load(lcXSLT))
      llSuccess = .F.
   ENDIF
ENDIF   

IF llSuccess
   oXML = CreateObject("Microsoft.XMLDOM")
   IF ISNULL(oXML) OR (NOT oXML.Load(lcInputFile))
      llSuccess = .F.
   ENDIF
ENDIF

IF llSuccess
   lcResult = oXML.transformNode(oXSL)
   IF ISNULL(lcResult) OR EMPTY(lcResult)
      llSuccess = .F.
   ENDIF
ENDIF

IF llSuccess
   IF VARTYPE(tcXMLOut) = "C" AND (NOT EMPTY(tcXMLOut))
      lcOutputFile = FULLPATH(tcXMLOut)
      IF EMPTY(JUSTEXT(lcOutputFile))
         lcOutputFile = FORCEEXT(lcOutputFile,"htm")
      ENDIF
   ELSE
      lcSaveSource = THIS.cSourceFile 
      THIS.cSourceFile = lcInputFile
      lcOutputFile = THIS.GetTableName(COV_TRANSFORM_SUFFIX,"HTM")
      THIS.cSourceFile = lcSaveSource
      IF (NOT THIS.lUnattended)
         lcOutputFile = ;
            THIS.GetResourceLocation(lcInputFile, ;
            COV_SETTRANSFORMEDXML_TITLE_LOC, ;
            COV_HTMFILES_LOC + " (*.htm;*.html;*.txt)|*.htm;*.html;*.txt|" +  ;
            COV_ALLFILES_LOC+" (*.*)|*.*" ,;            
            lcOutputFile, ;
            "PUTFILE")
      ENDIF
   ENDIF
   IF (EMPTY(lcOutputFile))   
      llSuccess = .F.
   ENDIF
ENDIF   

IF llSuccess
   IF NOT EMPTY(SYS(2000,lcOutputFile))
      ERASE (lcOutputFile) RECYCLE
   ENDIF

   THIS.ShowStatus(COV_WRITING_TRANSFORM_LOC+": "+lcOutputFile+"...")     
   STRTOFILE(lcResult,lcOutputFile)
   
   IF NOT tlNoShow
      THIS.DisplayStackXML(lcOutputFile)
   ENDIF
ENDIF   

STORE NULL TO oXSL, oXML

RETURN llSuccess AND (NOT THIS.lError)
ENDPROC
PROCEDURE Deactivate
   IF THIS.lTurnedOffTrace
      SET TRBETWEEN ON
      THIS.lTurnedOffTrace = .F.
   ENDIF
   ACTIVATE SCREEN
   RETURN NOT THIS.lError

ENDPROC
PROCEDURE Activate
   IF SET("TRBETWEEN") = "ON"
      SET TRBETWEEN OFF
      THIS.lTurnedOffTrace = .T.
   ENDIF
   * note: we could go to the registry
   * to get this variable name,
   * rather than using a #DEFINE, if desired.
   PUBLIC COV_PUBLIC_VARIABLE
   STORE THIS TO ([COV_PUBLIC_VARIABLE])
   THIS.SuspendCoverage()
   RETURN NOT THIS.lError

ENDPROC
PROCEDURE Unload

   CLOSE DATA
   * close data in the session explicitly to avoid any unknown data
   * sessions left over from BROWSEs NOWAITs opened in this session
   * or other use of these tables done by subclasses, addins, etc.
   THIS.ResumeCoverage()
   IF THIS.lTurnedOffTrace
      SET TRBETWEEN ON
      THIS.lTurnedOffTrace = .F.
   ENDIF   
   RELEASE COV_PUBLIC_VARIABLE   
   
   

ENDPROC
PROCEDURE Init
   LPARAMETERS tcFile, tlUnattended, tcAddIn

   LOCAL lReturn, lcFile, loForm
   lReturn = DODEFAULT()

   IF lReturn AND THIS.PassedProperParams(tcFile,tlUnattended,tcAddIn)
      THIS.lUnattended = tlUnattended
      THIS.lIgnoreCoverageFilenames = COV_IGNORE_COVERAGE_FILES
      THIS.SetAppHome()
      IF EMPTY(tcFile)
         lcFile = LOWER(THIS.cSuspendedLog)
      ELSE
         lcFile = LOWER(tcFile)
      ENDIF
   ELSE
      lReturn = .F.
   ENDIF

   * options required for proper file processing
   * according to user preferences:
   THIS.lUsingOCXs = COV_USE_OCXS
   
   IF lReturn AND NOT THIS.SetWorkOptions()
      lReturn = .F.
   ENDIF

   IF lReturn 
      IF NOT THIS.lUnattended
         lReturn = THIS.CreateForms()
         IF lReturn AND THIS.lSaveFormPositions
            lReturn = THIS.AddFormPositionSaver(NULL)
         ENDIF
      ELSE
         THIS.lInCoverageFrame = .F.
         * override this preference setting for unattended mode
      ENDIF
   ENDIF

   * the real guts of the work:
   IF lReturn AND NOT THIS.SetUpWorkFiles(lcFile)
      lReturn = .F.
   ENDIF
   
   * anything else we want to do now,
   * such as adding buttons,
   * running some queries?
   IF lReturn
      IF EMPTY(tcAddIn)
         THIS.cAddIn = ""
      ELSE
         THIS.cAddIn = tcAddIn
         IF NOT THIS.RunAddIn()
            lReturn = .F.
         ENDIF
      ENDIF
   ENDIF
   
   IF lReturn
      * either save results to disk
      * immediately, if we're in unattended mode,
      * or set up the interface for the user
      * to explore the results:
      IF THIS.lUnattended
         IF lReturn AND NOT THIS.SaveTargetToDisk()
            lReturn = .F.
         ENDIF
         IF lReturn AND NOT THIS.CreateSkippedCursor()
            lReturn = .F.
         ENDIF
         IF lReturn AND NOT THIS.SaveSkippedCursor()
            lReturn = .F.
         ENDIF
         IF lReturn AND NOT THIS.GetStackXML()
            lReturn = .F.         
         ENDIF
      ELSE
         IF lReturn AND NOT THIS.SetUIOptions()
            lReturn = .F.
         ENDIF
      ENDIF
   ENDIF

   IF lReturn
      * Note: we could go to the registry
      * to set this varname if desired...
      PUBLIC COV_PUBLIC_VARIABLE
      STORE THIS TO ([COV_PUBLIC_VARIABLE])
   ELSE
      FOR EACH loForm IN THIS.Forms
          IF NOT ISNULL(loForm)
             loForm.Release()
          ENDIF
      ENDFOR
      THIS.oFrame = NULL
      THIS.ResumeCoverage()
   ENDIF

   RETURN lReturn AND NOT THIS.lError


ENDPROC
PROCEDURE Load
   * make sure any apps that contain this
   * object look for access to the appropriate
   * header files:
   
   EXTERNAL PROCEDURE COVERAGE.H
   EXTERNAL PROCEDURE COV_CHAR.H
   EXTERNAL PROCEDURE COV_LOCS.H
   EXTERNAL PROCEDURE COV_DLGS.H
   EXTERNAL PROCEDURE COV_SPEC.H
   EXTERNAL PROCEDURE COV_REGS.H
   EXTERNAL PROCEDURE COV_TUNE.H

   * datasession-specific settings required
   * by the engine

   SET POINT TO COV_POINT_SETTING
   SET TALK OFF
   SET MEMOWIDTH TO COV_MEMOWIDTH
   SET DELETED ON
   SET EXACT OFF
   SET SAFETY OFF
   SET EXCLU OFF
   SET BLOCKSIZE TO 0
   IF SET("TRBETWEEN") = "ON" 
      SET TRBETWEEN OFF
      THIS.lTurnedOffTrace = .T.
   ENDIF

   * make the app a Singleton:
   LOCAL ARRAY aTemp[1]
   LOCAL oForm, lFoundWindow
   IF AINSTANCE(aTemp, THIS.CLASS) > 0
      * first look for any modal dialog:
      FOR EACH oForm IN _SCREEN.Forms
         IF UPPER(oForm.BaseClass) # "TOOLBAR" 
            IF oForm.WindowType = 1
               lFoundWindow = .T.
               EXIT               
            ENDIF
         ENDIF
      ENDFOR
      IF NOT lFoundWindow
         * what was previously active in the coverage formset?
         FOR EACH oForm IN (aTemp[1]+".Forms")
            IF UPPER(oForm.BaseClass) # "TOOLBAR" AND ;
               oForm.Visible
               lFoundWindow = .T.
               EXIT
            ENDIF
         ENDFOR
      ENDIF
      IF lFoundWindow
         ACTIVATE WINDOW (oForm.Name) TOP
      ENDIF
      WAIT WINDOW LEFT(COV_ALREADY_ACTIVE_LOC,COV_MESSAGE_LIMIT) NOWAIT      
      RETURN .F.
   ENDIF

   IF NOT (THIS.SuspendCoverage() AND ;
         THIS.FillFileTypeArray())

      RETURN .F.

   ENDIF

   RETURN NOT THIS.lError

ENDPROC
PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine

   DODEFAULT(nError, cMethod, nLine)

   IF (NOT INLIST(nError,1420,1421,1422,1423,1424,1426,1427,;
                  1428,1429,1431,1434,1436,1508,1440,2003,1782,2021)) AND ;
      (NOT UPPER(cMethod)=="RUNADDIN") 
      COV_ENGINE_ERROR_DEFAULT
   ENDIF
   
   
ENDPROC
PROCEDURE Destroy
   THIS.SaveFormsetAttributes()
   
   THIS.oFrame = .NULL.

   THIS.SetRegisteredAddins()

   RETURN DODEFAULT()
   
ENDPROC
PROCEDURE COV_TOOLBAR.Dock
LPARAMETERS nLocation
NODEFAULT
ENDPROC
PROCEDURE COV_TOOLBAR.DblClick
NODEFAULT
ENDPROC
PROCEDURE COV_TOOLBAR.DragDrop
LPARAMETERS oSource, nXCoord, nYCoord
NODEFAULT
ENDPROC
PROCEDURE COV_TOOLBAR.Activate
   NODEFAULT
   RETURN NOT THIS.lError
   
ENDPROC
PROCEDURE COV_TOOLBAR.Show
   LPARAMETERS nStyle
   NODEFAULT
   RETURN NOT THIS.lError

ENDPROC
���� ����&O%*�X� 	��U�������C�	tcMessageb�C�����
T�����'%�C�tnMessageBoxOptionsb�N��p�
T������%%�C�tcMessageBoxTitleb�C����T���Coverage Profiler���%�������R,����C���=�����T��C����x���	B����U	TCMESSAGETNMESSAGEBOXOPTIONSTCMESSAGEBOXTITLELIRETURNTHISLUNATTENDED����
B���
��UTCSOURCETCTARGETTHISLERROR&���\%�C�THIS.cMarkExecutedb�C� C�THIS.cMarkNotExecutedb�C�C���������&T���C�MarkExecuted�����0T���C�MarkNotExecuted�|C�X�����T��CC��>C��>�D��T���C���C�X���T���C���C�X���
B���
��UIMARKLENGTHTHIS
CMARKEXECUTEDCMARKNOTEXECUTEDGETREGISTRYKEYVALUELERROR����
B���
��UTCSOURCETCTARGETTHISLERROR
B���
��UTHISLERROR����T��C����
%����6�T��C�����
%������T��C����#%�C�THIS.aAddIns[1]b�C����T���C�������B�����
	��ULRETURNTHIS
SETFONTVALUES
SETUIFONTSGETREGISTEREDADDINSCADDINAADDINSLERROR3��������hT��C���C�tcFileb�C�C���C�tcAddInb�C	�!C���C�tlUnattendedb�L	��%��
��#����C�3You have passed one or more parameters incorrectly.C�
 C�
 �%This application takes the following C�
 �parameters, all optional:C�
 C�
 �5(1), type 'C'     the name of a coverage log to mark;C�
 C�
 �9(2), type 'L'     a switch to process the log unattended;C�
 C�
 �7(3), type 'C'     the name of an Add-In program to run.��Coverage Profiler� �Problem�����	B����UTCFILETLUNATTENDEDTCADDINLRETURNTHIS	DOMESSAGEj���������%�C�tcFileb�C��K�T��C�COVERAGEv���,�T��C����"%�C��
�CC��C��]�	���&%�C�.C�C�\���\����T����.log��!%�CC��C��]����	����T��C��.log�.txt������%�C��
��(�T��C������%�C���CC���]������T��C�� Please specify coverage log file�
Coverage Logs� (*.log;*.txt)|*.log;*.txt|�	All Files�
 (*.*)|*.*��getfile�����
H������C���C���
	��
��C������%�C���CC���]�����M��C�No log file specified.��Coverage Profiler� �Problem��	�����T��a����CC���]������T��C�*The log file you chose does not exist yet.C�
 C�
 �+Test your application with COVERAGE SET TO C�
 �!<your chosen filename>, then run �Coverage ProfilerC�
 �against that log.C�
 C�
 �Coverage Profiler�# can SET COVERAGE TO your filename C�
 �8now and you can test your application.  When you re-run C�
 �Coverage Profiler�, it will analyze the current C�
 �'contents of SET('COVERAGE') by default.C�
 C�
 �Would you like to: C�
 C�
 �(SET COVERAGE TO your log file now? (yes)C�
 C�
 �1Pick a filename from existing coverage logs? (no)C�
 C�
 �Come back later? (cancel)�#�Coverage Profiler��	��
H�e����������G�(����
��C��
���������T��C����2���%�C�������
��C��
�������2���T��a���
%����Z�T��CC�@���%�C�.����F�T����.���T�������	B����UTCFILELRETURNLCFILELIANSWERLOHOSTTHISLVFP5GETRESOURCELOCATIONCSOURCEFILE	DOMESSAGERELEASE
SETLOGFILEP%�C�����4�T���CC�COVERAGEvf��G�(��<��
B���
��UTHIS
CSUSPENDEDLOGLERRORe���%�C���
��U����%�����>�
T���������T��C�/Running Coverage Profiler temporarily suspendedC�
 �coverage logging to ���.C�
 C�
 �;How would you like to resume coverage logging to this file?C�
 C�
 �Click:C�	 �To have this effect:C�
 C�
 �YesC�XC�	 �!-- Append records to the log fileC�
 �NoC�XC�	 �-- Overwrite the log fileC�
 �CancelC�	 �-- Leave coverage set off�#�Coverage Profiler�x���%�C������*� <,�C��C�\����\���T���-��
H�I��������j�G�(������������G�(�����2����T����
��%�����A�T���-��G�(�v��C�$Former coverage file is unavailable;C�
 �COVERAGE will be off.��Coverage Profiler� �Problem�x���T�������	B����ULRETURNTHIS
CSUSPENDEDLOG	IRESPONSELUNATTENDEDLERROR�"��C����CC����]�
��)��C�Validating source file...������������T��C��	����6��T��a��%�-��M�T��CW��h��Test��M��������.T��C�,�
��C�
�������%��
��7�)T��C�,�
��C�
�������Q�
�
F������T��C�����%���������
T�����#+�C��
��	���d
	����T��C�����T������%T��C���C�,��������	�T��-�����C�����%�����
����T��-��T���-�����C�JFile specified is not correct Coverage Log format for this version of VFP.��Coverage Profiler� �Problem��
���
��C����	B����UTHISCSOURCEFILE
SHOWSTATUSLRETURNISELECTLIFIELDCOUNTIHANDLE
ILINECOUNTCLINELVFP5TESTONEFIELDLERROR	DOMESSAGECLEARSTATUSz����	����� T����������.fxp�� T����������.prg�� T����������.dct�� T����������.dbc�� T����������.vct�� T����������.vcx�� T����������.sct�� T����������.scx�� T����������.mpx�� T����������.mpr�� T����������.qpx�� T����������.qpr�� T����������.spx�� T����������.spr�� T����������.frt�� T����������.frx�� T����	������.lbt�� T����	������.lbx��!B�CC��������
��UTHIS
AFILETYPESLERROR����%�C�����$�T��a����!h�������C�����T��C����
%����{�& �C�f�����B�����
	��ULRETURNTHISCCOVFILESALIASFNAMETHISFORMSETILENHOSTFILEFILLCOVERAGEFILENAMECURSORLERROR�����������T������%�C��
��G�B�-���%�C���	��k�T��a���z�B�-���%������	��O�����

���%�C�4You haven't changed the specified Coverage filename.C�
 C�
 �-Do you want to re-examine this Coverage file?�4�Coverage Profiler�x���K�B�a���� <,�C��C�\����\����Ca����T��C�PATHv��
%������T��C�����
%�����<��C�Creating work files from� ���... ��
��T��C������
%����>�T��C�������T������T������T������T�������"%�����
���	����T��C�������%�����
	���T�����
��T��C�������
H������
�����[�T��-��T���-��T���������
��k�2���$T���C���C�\���\����C��������C�������G)(����
��C������C-����	B����U	TCLOGFILETCSOURCETCTARGETLRETURNCCURRENTSOURCEFILECOLDPATHTHISCSOURCEFILECREATECOVERAGEFILENAMECURSOR
SETLOGFILELUNATTENDEDLOCKSCREENSSOURCEFILEISLOG
SHOWSTATUSCREATESOURCECURSORCREATETARGETCURSORCSAVEDTARGETDBFCSAVEDSKIPFILESCSAVEDSTACKXMLLINPROFILEMODELSTARTINPROFILEMODELMARKALLONLOADMARKALLTARGETRECORDSLERRORCDEFAULTWRITEPATHSETUITOSHOWCODESETUITOSHOWFILESTATESCLEARSTATUS����������T��CW��T��C��Source����T��C��Skipped����%�C����}�Q�����G�:o������Q��C'�C�@C�	�
X	�����������G �
F����
B���
��UTCSOURCE	TCSKIPPEDCSKIPPEDCSOURCEISELECTTHISGETALIASHOSTFILESKIPPEDTHISFORMSETILENHOSTFILELERROR���������T��CW��T��C��Skipped����%�C�N���[�B�a���T��C�_SKIP����o���Ǽ1����
F����%���
����T���������T�������
B���
��U		TCSKIPPEDCSKIPPEDCDBFNAMEISELECTTHISGETALIASGETTABLENAMELERRORCSAVEDSKIPFILES��������T��C��Source����%�C����J�Q�����%�������h������N�����C�05.Ch�"�06.00Ch�CCC�h�\g�� 
	����6��	�C���
���C�����
�I��C������C��������h������N�����C�05.Ch�"�06.00Ch�CCC�h�\g�� 
	����6��	�C���
���C�����
�I��C������I��C�����
F������C�����& �C�@���
G((�0�T��C�����*��C�Indexing source records...����
%������& �C�	@��	�& ��
��
�& �C�@���
& �C'����
G((�0�
��C����B�����
	��UTCSOURCELRETURNCSOURCETHISGETALIASLVFP5DURATIONTHISFORMSETILENDURATIONOBJCLASSILENOBJCLASS	EXECUTING
ILENEXECUTINGPROCLINEHOSTFILEILENHOSTFILEFILETYPE
STACKLEVELADJUSTSOURCECURSORFILLSOURCECURSOR
SHOWSTATUSIFDELCLEARSTATUSLERROR���
B���
��UTCSOURCETHISLERROR'���������T��C��Target����T��C��Source����%�C����p�Q�����(��C�Creating target items...����%�����0��o������	��CC�
�CC�
�
�C�.��	��.��6C��C�.���\��
��Q�
����C'
����������Temp�����o������	��CCC��.fxp�.mpx�.qpx�.spx��C��C�.���\�CC�
�CC�
�
�C�.��	��!��6C��C�.���\6��
��Q�
����C'
����������Temp��wh�����	�C�����
�C���
���C�����M��M��M��I��I��I��I�
F�����C�Temp&��Q����C�����
F����& ��	�
���& ��	��	�
& �C'���
G((�0�
��C����T��C������B�����
	��UTCSOURCETCTARGETCSOURCECTARGETLRETURNTHISGETALIAS
SHOWSTATUSLVFP5HOSTFILEOBJCLASS	EXECUTINGTHISFORMSETILENOBJCLASSFILETYPETEMPILENHOSTFILEMARKEDPROFILED
SOURCECODE	COVERABLECOVEREDOBJTOTALOBJHITSADJUSTTARGETCURSORSTANDARDIFDELCLEARSTATUSFILLTARGETCURSORLERROR���
B���
��UTCTARGETTHISLERROR
B���
��UTHISLERROR������������T��a��T��C��Target����T��C�_COV��	��%���
����T��������}T���C��
�4Please specify location to save Coverage results for�	Table/DBF� (*.dbf)|*.dbf��PUTFILE����T��C���
���
%����p�T��CW��
F����(�����%���
��b�F��Q�������i1�Temp���i1�Temp���Q��T��C��@��T��C�.���%�������T��C����\���%�CC����.bak]�
��*� ���.bak���%�CC����.tbk]�
��^� ���.tbk����
F�����%�������T�������B�����
	��UTCTARGETCDBFDEFAULTNAMELRETURNISELECTCTARGET	CDETRITUSIPOSTHISGETALIASGETTABLENAMELUNATTENDEDCSAVEDTARGETDBFGETRESOURCELOCATIONCSOURCEFILELERRORTEMP
SOURCECODEFILETYPE������Q��������	�
���
�����������T��C���C��	�<C�tcSourceb�C�C��	�C�tcTargetb�C	�C��	��%�C������T��C��Source����T��C��Target�����!�
T�����
T������T��CW��
F����T��CO��T��CC�@���%��!�����T��C�C�!��=��T��C�C�>�\�����
T������T��CC�@���
T�
����
T�����
T�	����
H������C������C��
��&�T��a��2���%��
��J���Ca�����C��C�Getting source code from� C���.��...����2T�
�C�
�.vct�.sct�.dct�.frt�.lbt���
%��
��	�%���
C�Temp�	�� �%�CC�Temp&@C�@���F����Q����%�C�Temp�
��P�F��Q¾������%���
����
H�r�����
�.dct����(-�CC� @��storedproceduressource��
T�	��!���C�
�.sct�.vct���(�1-�CC�"��
CC�#�@�CC�"��.C�#�@6���%�C4��#�
T�	��$���$��-�CCC�%�@�dataenvironment�relation�cursor��UCC�"��
CC�#�@�CC�"��.C�#�@6C�CCC�"��
CC�#�@�CC�"��.C�#�@6>R	��%�C4����
T�	��$��� �%���&��8�
T����������(�C�.����4�T��C��C�.���\��;-�CC�"��
CC�#�@�CC�"��.C�#�@6��C�$�
	��%�C4��0�
T�	��$��1%�CC��'�(�C��'�)���Standard�����>������	��#�������%�C�4����
T�	������(�#�������>���������!������$���C�.���(����������%�������T��C��C�.��\����T��C�.����%��C�.������T��C���\����.T��C���C�.�����\����2-�CC�"��.C�#�@C���.��C�$�
	��%�C4���
T�	��$��1%�CC��'�(�C��'�)���Standard�����&IF EMPTY(&cTarget..SourceCode)���>������	���#����������#��������
T�	����!��������C�
�.frt�.lbt�����T��C�.���%�����w�-��+������%T���name="C���\�"��(-��+��C�C�,C�X����	���
T�	��-��2�������
T�	������w	�%�C�.����.	�
T�	�����s	�h��Temp�.�M�F����.����
T�	��.����%�����#
�i��C�Source file unavailable.C�
 C�
 �(��)��Coverage Profiler� �Problem��/��$E����Hostfile�C��'�(��������,�;%�-
�C��	�"C�
�.vct�.sct�.frt�.lbt�	���%�C�
�.vct�.sct����
��C�$�
�C'
	�(����
�*�C�+����C�-�
	�C'
	�(���
F����	E����!>����+�C�@C��'�(���	#�����
F����
>���	���%�C�Temp���
	��T�Q���%��
������C-����
��C��1����#T����C�	�
���
	��T���-��
F����	B����U2TCSOURCETCTARGETTLFILLINGALLCSOURCECTARGETISELECTCFILECOBJECTCCLASSCMEMO
LMEMOFIELDIPOSLRETURN	CFILETYPE	IOBJTOTALIRECNOCSOURCEORDERLALREADYHADSOURCECODE
CCONTAINERIDOTSATEMPTHISGETALIASOBJCLASSHOSTFILEFILETYPEOBJTOTAL
SOURCECODELOCKSCREENS
SHOWSTATUSTEMPLERROR
OBJECTNAMECODEPARENTOBJNAMEMETHODS	BASECLASSLVFP5THISFORMSETILENHOSTFILEILENOBJCLASSINOBJTYPEEXPRTAGONEFIELD	DOMESSAGEWHILECLEARSTATUS����3����������	�
���T��C��Source�
���T��C�B@��T��CW��8��C�Checking for source code for� �
��
���
F����T��C���
G((�0�T��C�ODOMETERv��T��C�TALK�v��G'(�����G2 �%��
���+�G2,��
�����>�G2=�t&��3��
������C�@C��X	�Ծѿ�,�G2�G'(����SET TALK &cTalkWindow
��C��
���#)�
H������
�������C�
���� �C�
STATUS BARv�OFF�����C�9���2��G&(��~���%�C������T��C�@����CC���
���T�
�C�
���
T�����
T�����T�	�CO��%��

����$�C�@������$>��������$�C�@����	#��	����G((����-�T��C+
��
F����%��
��{�V��C�Log file has no usable records.��Coverage Profiler� �Problem�
����
��C�
���	B����UTCSOURCECCOVERAGEFILENAMELRETURNCSOURCECORDERISELECT	CTHISHOSTCNEWHOST	CFILETYPEIRECNO	LRECORDOK	IODOMETERCTALKWINDOWTHISGETALIAS
SHOWSTATUSCSOURCEFILELINCOVERAGEFRAMEOFRAMENAMEPROCLINEHOSTFILETHISFORMSETILENHOSTFILEADJUSTSOURCECURSORCLSFILETYPESOURCEAVAILABLEREST	DOMESSAGECLEARSTATUS����*��C�
tcFileNameb�C�
CC���]�
	��%����������T��C��C�\��\��E%�C��;C�PATHv�;���C��;C�PATHv>�
	����G)(���;C�PATHv����
B���
��U
TCFILENAMETHIS
LSMARTPATHCADDPATHLERROR�#����������%�C���C�	���B�B�-���
T�����T��CC�	�@��T��C��R��T��C�
�����%�C�>�����
T�����
T������%�������T��C�
�������
H�����'��
��C��.frt�.lbt�	��������0�8��
�
�%CCCC�	�CC�	�>C�\C�	��Rf�
��	��h��C��.app�.exe���j��T��C��Please confirm main program for�
Programs Only� (*.prg)|*.prg|�	All Files�
 (*.*)|*.*C���GETFILE�
���%�C���CC���]���'��f�T��a��>�	������.fxp����C��
�����������%������T���.fxp��T��C�.���%�������#T��CC����\�.prg�����T��C��.prg�����<�-T��CC��CC�
������
������%�CC���]���T�T��C��R��%�������xT��C��
Please locate�Source Files� (*��)|*��|�	All Files�
 (*.*)|*.*��GETFILE�
����P�XT��C��
Please locate�Source Files� (*��)|*���GETFILE�
�����k�T��C�@���%�CC���]��C���������T��a��>�	����������C��
����2����	B����ULRETURN	CFILETYPECNEWHOSTCOLDHOSTICOLIELEMENTCDEFAULTEXTIPOSPROCLINEHOSTFILETHIS
AFILETYPESLVFP5LIGNORECOVERAGEFILENAMESCCOVFILESALIASGETRESOURCELOCATION	EXECUTINGFILETYPEADDPATH;���������������	�
���
������������������� �!�"�T��CW��T��C��Source�#�$��T��C��Target�#�$��
F����
T���%��T��CC�&@�'�(���T��C�)@��%��!���a�T��C�C�!��=��T��C�C�>�\���v�
T������T��C��'�*���T��C�+@��
T�����
T�����&%��#�,��PRO 06.CChf���2T��C��.vct�.sct�.frt�.lbt�.dct����C�+T��C��.vct�.sct�.frt�.lbt����T��C����J���(��
�"���
T�����%���C��
���������(������T��C���"���T��CCC�@C�	 �����g%�C��=�define class�C��=�defin c�C��=�defi c�� C��� �	��~�T����#�-�C�
 ��
T�����T��a��!����������(�������T��C���"���T��C����T��CCC�@C�	 C�X����T��CC�X���%�����p�T��CC��=���T� �CC��\���T��CC�X� ��%�����l�T� �CC� �=�������
T�����
T� �����T�"�C�>��J���(����?%���C��
�C��
	��#��#enddefine#	���T����#�-�C�
 ��!��T��CC�& C�& ���%�����e�T��CC����\����
%����r�<%�C��
�(�#��#method#procedure#function#	��U�
T�
����T��CC�C� �\���T��C�(���%������T��C���=���T��C�[���%�����Q�T��C���=����n�T�
��
�����/�
H���+��C��������"�
����5��#��#define#��#� �#class#	����T��a��1��#��#procedure#method#function#��#�T��-��2�+���
H�@�%��C����Z�T���
����r�T����C��RC�; ����T���6�CC��=C�* C�# ��C��=C�& C�& ����T���,���add��#� �#object#	��
�T���1��"��C� �	�C��else�note�	��I�T������"���#��<#function#procedure#endprocedure#endtext#note#else#otherwise�F#parameters#lparameters#enddefine#endfunction#endmethod#endif#endcase#	��)	�T���%��#��	#endtext#��%	�T�!�-���
��!��A	�T�����
���	�T�
�CC��Z���@T��� LOWER(Hostfile) = cHostfile AND �Procline = �
���C����7
�T�
�CC���'�.���mT��� LOWER(Hostfile) = cHostfile AND �LOWER(Executing) = [�
�] AND �ProcLine = iProcLineNo�����.vct����%��#�,����%��.����
�'T�
�CC��C�.��\�'�*�����
�T�
�C��'�*����mT��� LOWER(Hostfile) = cHostfile AND �LOWER(ObjClass) = [�
�] AND �ProcLine = iProcLineNo ��T�
�C����%��.���k�'T�
�CC�C�.��\��.�
���T�
��.�
��T�	�C�
>��PT���� AND �[.]+RIGHT(ALLTR(Executing),CC�	Z��) == [�
�]�����T�
�CC���'�*���lT��� LOWER(Hostfile) = cHostfile AND �ProcLine = iProcLineNo AND �LOWER(ObjClass) = [�
�]��
H�x�����.���8
�T�
�C����%��.�����.T�
��.CC��C�.C����\�.�
���T�	�C�
>��LT���� AND �RIGHT(ALLTR(Executing),CC�	Z��) == [�
�]���C��C�����
�"T�
�CC���.C���'�.���8T���� AND �LOWER(Executing) =  [�
�]����.���$�3T�
�CC��CC�C�.�\��.C���'�.���8T���� AND �LOWER(Executing) =  [�
�]��2���"T�
�CC���.C���'�.���8T���� AND �LOWER(Executing) =  [�
�]����2�%�"T��CC���.C���'�.���mT��� LOWER(Hostfile) = cHostfile AND �LOWER(Executing) = [��] AND �ProcLine = iProcLineNo���%�C��
��e�
F����%��#�/����LOCATE FOR &cFilter 

T���0��
%�C+
����5CALCULATE AVG(Duration) FOR &cFilter  TO nAverage
T��� �����
T�������	�COUNT FOR &cFilter
T��� ���#T���C������6��T������%���text��a�T�!�a����+T���C�����#�1C�
 ����%��#�2
���
F����%��#�/����
>�3�������
>�4�����%�C�5����>�5����6������
F����B�C����#�2
��U7TCSOURCETCTARGETCSOURCECTARGETISELECTCTEXTCMEMONFIRSTNAVERAGEIPOSCTEMPIFILELINENOIOFFSETIPROCLINENOILINESCLINE	CREALLINEIPOSCOMMENT
IPOSOPENPAREN	CHOSTFILECOBJECTCCLASS	CFILETYPELINITIALMEMBERASSIGNMENTS	IEXECUTED
CEXECUTINGCFILTER
CFIRSTWORDICOVERABLELINES
ILINESCOVERED
LRELTOPROCISECONDWORDCSECONDWORDLINTEXT
ILENFIRSTWORDTHISGETALIAS
SOURCECODEHOSTFILETHISFORMSETILENHOSTFILEOBJCLASSILENOBJCLASSFILETYPELVFP5
CMARKEXECUTED
ILENEXECUTINGLINPROFILEMODEDURATIONMARKCODELINELERRORPROFILEDMARKED	COVERABLECOVERED���������C�tcLineb�C��#��C���C�
tiExecutedb�N����C�tnFirstb�N����C�	tnAverageb�N�������%����� �%�C�����T��C�(X����%�������#T��CCC�Z�C�X�Hit�
����!�$T��CCC�Z�C�X�Hits�
����bT��C�1stC�XCC��C�05.Ch�"�06.00Ch�CCC�h�\g�� 
	����6Z�����T������bT��C�AvgC�XCC��C�05.Ch�"�06.00Ch�CCC�h�\g�� 
	����6Z�����T�������T���������
H�5����C���\�T��CC��	>X����������T����
����������T����	���2���
T�������	B����UTCLINE
TIEXECUTEDTNFIRST	TNAVERAGECMARKEDLINECFIRSTCAVERAGETHISLINPROFILEMODE
CMARKEXECUTEDCMARKNOTEXECUTED�����b��C�t��C�tcWhichPropb�C	�9CC�f�SOURCE�TARGET�SKIPPED�COVFILES�PROJECT�	�����%�C�tAliasb�C����
T��������"T��C�THIS.c��Alias���	B����UTALIASTCWHICHPROPCRETURN���������%�C�tcAddInb�C��>�
T������V�T�������%�C����p�B�a���T��CC��f��T���-��%��.�����T��C��R�����
T������T��a�� %�C��
�CC���]�	��]�
H������\���%�T��-��.�CC��C���C�\���\�]�
��x�%T��C���C�\���\���;�C����$CC��C���C�\���\�]�
����%T��C���C�\���\���2���T��-���%��
��Y�\��C�%Add-In file specified does not exist.��Coverage Profiler� �Problem��	����%���	��
	����
H������C�������%�C��.FXP0�C��.APP0�C��.PRG0�C��.EXE0�C��.QPX0�C��.QPR0�C��.MPR0�C��.MPX0��2���������\��C�%Add-In file specified does not exist.��Coverage Profiler� �Problem��	��T��-���H�C��.FXP�.APP�.PRG�.EXE�.QPX�.QPR�.MPR�.MPX�������������.SCX�� ������2���e��C�.Add-In file specified is not a supported type.��Coverage Profiler� �Problem��	��T��-����%�����
����T��-��T���������T��a��T���C�@���T���-��%���
��{�
H�(�w������	��P���C�������
��o���C���
��2�w���	B����UTCADDINLOKAY
CFILETORUNCEXTTHISCADDINLERRORCLASSLIBRARYCAPPHOME	DOMESSAGELUSINGREGISTRYLREGISTERADDINADDREGISTEREDADDINDELETEREGISTEREDADDIN
B���
��UTHISLERROR
B���
��UTHISLERRORy����%�C����#�	B�������������T��C�CLASSLIBv��T��C�
��"���
T�����
T�����
T�����%�C�.������T����.VCX���9%�C�� ALIAS ����C�� IN ���	��a�T���cC��]��%�C����:�G~(��������]�G~(������������i��	B����UTCCLASSLIBNAME	TCAPPNAMECALIASCLIBLIST
CCLASSLIBNAMECAPPNAMECSYS16ILEVEL�(T���C�ProfileMode������&T���C�	SmartPath������$T���C�MarkAll������)T���C�MarkExecuted������,T���C�MarkNotExecuted������*T���C�
RegisterAddIn������*T���C�
CoverageFrame������1T��	�C�StackXMLExtendedTree��	����&T��
�C�	StackXSLT��
����
��C����
B���
��U
THISLSTARTINPROFILEMODEGETREGISTRYKEYVALUE
LSMARTPATHLMARKALLONLOAD
CMARKEXECUTEDCMARKNOTEXECUTEDLREGISTERADDINLINCOVERAGEFRAMELSTACKXMLEXTENDEDTREE
CSTACKXSLTSETMARKSLERROR�����
����
����C�tlBaseMonoFontb�L��+�������	�
���
�&%�C�toMemberHost.Classb�C����
T��������%�������T���������T��C�������T������
%�����T���Mono���#�
T������%�����p�4%�C� oMemberHost.cdlCov_GetFont.Classb�U��l�T���-��T��C�CLASSLIBv��%�������
T�
�������T�
�CC�	�]g���%�����
�������C�	�]���G��C�cdlCov_GetFont�scov_CommonDialog�COVERAGE.VCX������%��
���c���C�	�
]���5%�C�
�
�"C�ALIAS �
C�CLASSLIBv��	����<R��
��SET CLASSLIB TO &cLibs
�%���������h�hR,����C�Common Dialog OCX not found; C�
 �%switching to native VFP code version.�...��=��T���-��T���-�����%�����i�������t�T�����
%������T����@���*T��C�
THIS.cBase��FontName��*T��C�
THIS.nBase��FontSize��*T��C�
THIS.lBase��FontBold��,T��C�
THIS.lBase��
FontItalic����%���
����T����9����T�� ��9�!������C���"���T��C�
THIS.cBase��FontName�����+C�
THIS.nBase��FontSize����	�+C�
THIS.lBase��FontBold����	�-C�
THIS.lBase��
FontItalic����	
��%�����
	��e�0J�����(��
THIS.cBase��FontName��0J�����(��
THIS.nBase��FontSize��0J�����(��
THIS.lBase��FontBold��2J�����(��
THIS.lBase��
FontItalic������
T��C�'��%�C��
����T��a��T�#�C�,���6J�C���#�\�(��
THIS.cBase��FontName��T��C��#�\��T�#�C�,���8J�CC���#�\g�(��
THIS.nBase��FontSize��T��C��#�\��0J��B��(��
THIS.lBase��FontBold��2J��I��(��
THIS.lBase��
FontItalic����B�����
	��U$TLBASEMONOFONTTOMEMBERHOSTTHISLUNATTENDEDOMEMBERHOSTLFONTCHANGECPROPCGETFONTIPOS1IPOS2CALIASCLIBSIHOSTCONTROLCOUNTLIOLDSYS2333LINCOVERAGEFRAMEOFRAMEFORMSCONTROLCOUNT
LUSINGOCXSLERRORLVFP5	NEWOBJECTCAPPNAMECDLCOV_GETFONTFLAGSFONTNAMEFONTSIZEFONTBOLD
FONTITALICVISIBLETOPHEIGHTLEFTWIDTHSHOWFONTIPOS�����B%���
�-C�"THIS.cov_toolbar.cusRegistry.Classb�C��Q�B�������pT��� Software\Microsoft\VisualFoxPro\CCCCChC� Ch��\�C�.CChC� Ch��\��\g_�.0��T����	\Coverage��T��C�tValueb��
H�������C��/�
T��������N��R�T��CC�Z������L��	��{�T���.T.�����L����T���.F.��2���
T������%��C���������	��
B���

��U
TCWHICHOPTIONTVALUETHISLUSINGREGISTRYCPATH
CTYPEVALUECVALUECOV_TOOLBARCUSREGISTRY	SETREGKEYLERROR�������������@%���	�-C�"THIS.cov_toolbar.cusRegistry.Classb�C	����T��C�
tDefaultValueb��
H���1����C����
T��������N����T��CC�Z������L��	����T���.T.�����L���T���.F.��2�1�
T������%�C���C�t�
��e�T���	\Coverage���z�
T������tT��� Software\Microsoft\VisualFoxPro\CCCCChC� Ch��\�C�.CChC� Ch��\��\g_�.0���%��C�������
����T��C�b��(%���
���U���	��i�
T�����T��
�-�����%���U����T��C������
T����������
T������	B����UTCOPTION
TDEFAULTVALUETCPATHCVALUEVRETURNCPATH
CTYPEVALUE
CTYPEREGVALUETHISLUSINGREGISTRYCOV_TOOLBARCUSREGISTRY	GETREGKEYLERROR	��������
��C�t�����C�|�����<��C�
tcWhichDialogb�C�CC�f�PUTFILE�GETFILE�	��%�������%�C�
tcFileNameb�C����B�C�@�����	B������3���	�
���
�������T���9���&%�C�toMemberHost.Classb�C��>�
T��������%�����f�T���������T��C�������T������T��CC�f���%�������T���cdlCov_���.%�C�oMemberHost.��.Classb�U����T���-��T��C�CLASSLIBv��%�����C�
T������`�T��CC�	�]g���%������������C�	�]���>��C��scov_CommonFileDialog�COVERAGE.VCX������%���������C�	�]���5%�C��
�"C�ALIAS �C�CLASSLIBv��	��O�<R����SET CLASSLIB TO &cLibs
�%�����������hR,����C�Common Dialog OCX not found; C�
 �%switching to native VFP code version.�...��=��T���-��T���-�����)WITH oMemberHost.&cDialogControl.���
H�4������PUTFILE��f�T�����������GETFILE����T������2���������T�	�C�\����
T�
����%�������T�
�C�oMemberHost.���
���
����T�����%�C��
��I�!T���� C��	�\���%�C�
tcFileNameb�C��y�T� �������T� �����T�!����T�"����%��	�����T�#�C���	\�����%���$
���T��%��9�&���T��'��9�(����
H�,�~����PUTFILE��Q�
��C�
�)�����GETFILE��v�
��C�
�*��2�~��T�
�C�
� ������3R,:�C�CC�����C�
 C��	�\6��=��T��C��*.����%�C�|������T��C�C�|���=���
H�-������PUTFILE����T��C�C�|��\��T��C��;�|���%T�
�C�CC������6������GETFILE����T��C��;�,���T��C��|�:���T�
�C���Select���%�C�
�
����T�
�C�
���%�CC���
]�����
T�
����U��C�File specified does not exist.��Coverage Profiler� �Problem��+����2����R��%���������C�MousePointer��9�,��T�9������B�C�
@��U-TCHOSTTCTITLETCCDLFILTER
TCFILENAME
TCWHICHDIALOGTOMEMBERHOSTTHISLUNATTENDEDOMEMBERHOSTNPOSCRETURNCDIALOGCONTROLLIOLDSYS2333ODIALOGCONTROLCALIAS
CFOXFILTERCWHICHDIALOGISETPOINTERCLIBSIHOSTCONTROLCOUNTMOUSEPOINTERLINCOVERAGEFRAMEOFRAMEFORMSCONTROLCOUNT
LUSINGOCXSLERRORLVFP5	NEWOBJECTCAPPNAMEFLAGSDIALOGTITLEFILENAMEFILTERFILTERINDEXINITDIRVISIBLETOPHEIGHTLEFTWIDTHSHOWSAVESHOWOPEN	DOMESSAGESETALL�"r��������COVERAGE.FXP��"r��������COVERAGE.VCT��"r��������COVERAGE.APP��!r��������COV_PJX.FRT��
��C����
B���
��UTHISCCOVFILESALIASADJUSTCOVERAGEFILENAMECURSORLERROR^����������T�����
��C��C�3Changing Coverage modes and emptying marked code...����T��CW��T��C��Target��	��
F����T��CC+���CO6��T��C���
G((�0�%���
������C�������%������-��'�	#�����G((����
F����
��C����
B���

��UTCSOURCETCTARGETCTARGETISELECTIRECNOCORDERTHISLINPROFILEMODE
SHOWSTATUSGETALIASLMARKALLONLOADMARKALLTARGETRECORDSCLEARSTATUSLERROR
B���
��UTHISLERRORx��������T��C�������
%����]�T��C��������B�����
	��UTCSOURCETCTARGET	TCPROJECTLRETURNTHISGETPROJECTSTATISTICSDISPLAYPROJECTSTATISTICSLERROR������;��������	�
���
����T���-��
T�����T��C��Target����T�	�C��Project����lT��C��&Please specify a project file to check�
Projects Only� (*.pjx)|*.pjx��getfile����%�C�	���(�Q��	���Mh���	���C������C�����I��I��I��I�%�C��
����T���PC��]��Q���������%���
�� �T��CW��T��C�	DIRECTORYv��T��C����
F������C��C�\��\��G(���(�Standard�<G-(�CCCCCCCC������6C� �����@���������1G(�C� �K�V�P�M�Q�R�B�F�d���-�%�C+���[��C�(Project has no source-code-type records.��Coverage Profiler� �Problem�x��Q�������r���	�������	~���7T��CCCCCCCC������6C� �����@�����%�C�+����r���	����������
F������C��a��!��
T�����
T�����
T�����J���(��
�~+�����H���C��a��!��T������T�
��
����Jr���	�������������������
�����������
F����
�����G(���(����#���)�
��C��"��%�C�����Q����%���
���T�
�a�������T���-��V��C�#Project file currently unavailable.��Coverage Profiler� �Problem�x����	B��
��U#TCSOURCETCTARGET	TCPROJECTISELECTCDEFAULTCORDERCTARGETCPJXFILE	CPJXALIASCPROJECTLRETURNCFILEICOVERED
ICOVERABLE	IOBJTOTALIOBJHITS	CFILETYPETHISLERRORGETALIASGETRESOURCELOCATIONHOSTFILETHISFORMSETILENHOSTFILEFILETYPE	COVERABLECOVEREDOBJTOTALOBJHITSSTANDARDOUTFILENAMETYPEMARKONETARGETRECORDREFRESH�����
B���
��UTCSOURCETCTARGET	TCPROJECTTHISLERRORe�����4T���C�BaseFontNameC�MS San Serif�����)T���C�BaseFontSize������)T���C�BaseFontBold������+T���C�BaseFontItalic������-T��	�C�BaseMonoFontSize��	����-T��
�C�BaseMonoFontBold��
����/T���C�BaseMonoFontItalic������'T��C�BaseMonoFontName�����%�C�����T��CW��T��C�RESOURCE�v��%�CC���]�
����F��Q������%���

����#6�+�C
����,%���
WINDMODIFY��.prgC�@	��j�T��CC�@���T��C��3\�� T��C��CC� ��\��!��|�
H�����������T��
�-���Q�
F�����%�C�����%�������/T��C�
TraceFontName��\Options�������%�C��
��,�T���C�����Q�T���C�Courier New����
B���

��UISELECT	CRESOURCECMONOFONTSTRINGTHIS
CBASEFONTNAMEGETREGISTRYKEYVALUE
NBASEFONTSIZE
LBASEFONTBOLDLBASEFONTITALICNBASEMONOFONTSIZELBASEMONOFONTBOLDLBASEMONOFONTITALICTEMPLERRORIDNAMEDATALUSINGREGISTRYCBASEMONOFONTNAME����
%����\���C�
LockScreena������C�MousePointer��9���T�9����������C�
LockScreen-������C�MousePointer��9���T�9������UTLONTHISSETALLMOUSEPOINTER�%�����������
T�����
T�����T��C�AddIn1�����+�C��
����������T���������T������$T��C�AddInCC�Z��������
B���
��UTHISLUSINGREGISTRY
CADDINNAMEIADDINNUMBERGETREGISTRYKEYVALUEAADDINSLERROR����%�C��
����;T���C�
STATUS BARv�ON���
���	��%�����r�G&(�C���=�����R,:�C���=����
B���
��UCMESSAGETHISLUSINGSTATUSBARLINCOVERAGEFRAMELUNATTENDEDLERROR<%������G&(�����(�R��
B���
��UTHISLUSINGSTATUSBARLERROR������������V��C���C�tcSourceb�C�C��	�'C���C�tcTargetb�C�C��		��*��C�Marking all source code...����T��CW��%�C������T��C��Source��	��T��C��Target��	����
T�����
T������
F����T��CC+���CO6��T��C���G((�Standard�-�~�����C��a�����%�������-����	#�����G((����
F����
��C����
B���

��UTCSOURCETCTARGETCSOURCECTARGETISELECTIRECNOCORDERTHIS
SHOWSTATUSGETALIASSTANDARDMARKONETARGETRECORDCLEARSTATUSLERROR	�����������V��C���C�tcSourceb�C�C��	�'C���C�tcTargetb�C�C��		����Ca����?��C�/Checking Coverage of all target source files...��	��T��CW��%�C�����T��C��Source��
��T��C��Target��
���>�
T�����
T������
F����T��C���G((�Hostfile�-�~�����C��a�����%�C�Temp�����Q�
��
F�����C����*o�������C�Q��������Temp�F�
�& �����
F����G-(�����
�-�+�C+
����+%�C��.vct�.sct�.frt�.lbt�����
T�����>���
��+��������H���
�C'
��T���� ��Q�
�G((����-�
F����
��C������C-����B�������
	��UTCSOURCETCTARGETCSOURCECTARGETISELECTCORDERCFILETHISLOCKSCREENS
SHOWSTATUSGETALIASHOSTFILEFILLONETARGETRECORDTEMPFOR
SOURCECODEOBJHITSFILETYPEWHILEITARGETRECCOUNTCLEARSTATUSLERROR)����������T��C��Target����
H�I�
�&CASE EMPTY(&cTarget..Hostfile)�o�BCASE THIS.lInProfileMode AND NOT EMPTY(&cTarget..Profiled)���T��a��HCASE (NOT THIS.lInProfileMode) AND (NOT EMPTY(&cTarget..Marked))��T��a��2�
���Ca����'cObject = ALLTR(&cTarget..ObjClass)
T��C�C�!��\��oTHIS.ShowStatus("Marking source code for"+" "+  ALLTR(&cTarget..Hostfile)+"."+  ALLTR(cObject)+"...")      
T��C����	��%��
��������%��
����#���)����C�)A source code entry has no coverable codeC�
 �%or is a member of a container object.C�
 C�
 �This record will be deleted.C�
 C�
 ��Coverage Profiler� �Problem������
��C������C-�����B���	��

	��UTCSOURCETCTARGETTLFILLINGALLLRETURNCTARGETCOBJECTTHISGETALIASLOCKSCREENSMARKTARGETCOVERAGEIN	DOMESSAGECLEARSTATUSLERRORX�����C�tcFileToAddb�C����CC���]�
�������T��C�@��G �%�C�������>�
T����������(�C������AT��CC�����'CC���b�C�CCC���Ρ	��
%������!����%��
��$�T�������������T����������G�
B���
��UTCFILETOADDIADDINCOUNT
CFILETOADDLFOUNDTHISAADDINSLERRORK%�����D�!��C�ProfileMode��������C�	SmartPath��������C�MarkAll������"��C�MarkExecuted������%��C�MarkNotExecuted������#��C�
RegisterAddIn��������C�	StackXSLT��	����*��C�StackXMLExtendedTree��
����"��C�BaseFontName������"��C�BaseFontSize������"��C�BaseFontBold��
����$��C�BaseFontItalic������&��C�BaseMonoFontName������&��C�BaseMonoFontSize������&��C�BaseMonoFontBold������(��C�BaseMonoFontItalic�������UTHISLUSINGREGISTRYSETREGISTRYKEYVALUELSTARTINPROFILEMODE
LSMARTPATHLMARKALLONLOAD
CMARKEXECUTEDCMARKNOTEXECUTEDLREGISTERADDIN
CSTACKXSLTLSTACKXMLEXTENDEDTREE
CBASEFONTNAME
NBASEFONTSIZE
LBASEFONTBOLDLBASEFONTITALICCBASEMONOFONTNAMENBASEMONOFONTSIZELBASEMONOFONTBOLDLBASEMONOFONTITALICB�����J���(���%�����.������(�C����*�%�CC����
����%�������(��C�AddInCC�Z�C�������
T��������T������(��C�AddInCC�Z�C���������&�"��C�AddInCC�Z��""����
T���������
B���
��UIADDINNUMBERLIEMPTY	LIKEYSSETTHISLUSINGREGISTRYAADDINSSETREGISTRYKEYVALUELERRORi������G �T��C��C�@���%�����O���C�������G�
B���
��UTCFILETODELETEIADDINNUMBERTHISAADDINSLERRORf%�����E�5T���C�	cov_frame�COVERAGE.VCX�������
��C����
B���
��UTHISLINCOVERAGEFRAMEOFRAMECAPPNAMESETFORMSETATTRIBUTESLERROR������������!%�C�
tcWhichSuffixb�C��P�
T������e�
T������%�C����C�C������T���DBF�����
T������T��C�.����%�������T���������T��C����=����
T�����T��C��1����%�CC���]�
����+�CC���]�
����T������T��C�CC�Z�������B�C�@��U	
TCWHICHSUFFIX
TCWHICHEXTIPOSCSUFFIXCDBFSTEM
CTABLENAMECEXTTHISCSOURCEFILE�����J���(�����%�CCC��]f�=�ON��i�(T���CC��]�C�\C��]�\�����(T���CC��]�C�\C��]�\���%��	PROCEDURE������T���C���\��%T���C��C� ���\��������(���������l�T��CC��]f��&%�CC��R�APP�EXE�DLL���h�T������!����%��	PROCEDURE������T���C���\��%T���C��C� ���\���B�a��UCSYS16ILEVELTHISCAPPNAMECAPPHOME�%���������������$T��C�FrameHeight�����!T��C�FrameTop�����"T��C�	FrameLeft�����#T��C�
FrameWidth��������
B���
��U	THISLINCOVERAGEFRAMEOFRAMEHEIGHTGETREGISTRYKEYVALUETOPLEFTWIDTHLERROR�%����C���
	��������������C�FrameTop�������C�	FrameLeft�������C�
FrameWidth�������C�FrameHeight�������C������
B���	
��U
THISLINCOVERAGEFRAMEOFRAMESETREGISTRYKEYVALUETOPLEFTWIDTHHEIGHTRELEASELERRORM���/��C���!C����O�C��f�FORM	��)%�C�COVERAGE.VCX0
�	C���	��c�B������T���cusC��]��%�C����������%�C��f�FORM����9��C��cov_SavePosition�COVERAGE.VCX����������F�9��C��cov_SavePosition�COVERAGE.VCX�������U	TOFORMREF	BASECLASSTHISCAPPNAME	LCOBJNAMELOFORMFORMS	NEWOBJECT\������T��C�����
%����A�T��C�����B�����
	��UTCLOGLRETURNTHISGETSTACKXMLDISPLAYSTACKXMLLERROR���%������B�-���u�����������	�
���
�����������������A���� ����!�"�#�$�%�&�'�(�)�*�+�%�C���C����C���T����,����
T��������Ca��-��D��C�#Loading log for StackLevel analysis�: ��...��.��T��a��T��/�-��T��CW��T��C�DELETEDv�ON��
%������G��F��T���SCC��]�	R��%�C�����Q������h�����0�C����1�I�2�I�3�N���4��C�05.Ch�"�06.00Ch�CCC�h�\g�� 
	����6��5�C���6��F��
T�
����
T�����
T�����T�"�C����%��"������
�T��C��7.���T��C��@�8��+�C�"�
���
�T�!�C�"����%�C�!���N�.��%�C�� �!a�,��
��u�.��T�&�CC�� g��T�'�C�� ��T�(�C�� ��T�)�C�� ��T�*�CC�� g��%�C�)�
����T�+��.CC�)��@����
T�+�����T��-��
H�*�	���
������T���#CCCC�+�.fxp�.mpx�.qpx�.spx��wCC�'��CC�(�
�C�(���6�QCC�(�=�.�C�.�(��%C�'�CC�.�(���.��6��6C�(�6�C�(�6����T��a����*�
�����T����#CCCC�+�.fxp�.mpx�.qpx�.spx��wCC�'��CC�(�
�C�(���6�QCC�(�=�.�C�.�(��%C�'�CC�.�(���.��6��6C�(�6�C�(�6����T��a����*�
����%��*����T��a����T��C�#��*��T�
�C���\���%�C�
�C�#�
�\CCCC�+�.fxp�.mpx�.qpx�.spx��wCC�'��CC�(�
�C�(���6�QCC�(�=�.�C�.�(��%C�'�CC�.�(���.��6��6C�(�6�C�(�6��������T��a�������*�

��CCCC�+�.fxp�.mpx�.qpx�.spx��wCC�'��CC�(�
�C�(���6�QCC�(�=�.�C�.�(��%C�'�CC�.�(���.��6��6C�(�6�C�(�6��
����%��*�����
T������,�T��C�#��*��T��C���\����T����#CCCC�+�.fxp�.mpx�.qpx�.spx��wCC�'��CC�(�
�C�(���6�QCC�(�=�.�C�.�(��%C�'�CC�.�(���.��6��6C�(�6�C�(�6����T��a��2�	�T��-���
T���&��
%�����
�
T�
��*���T��CCC�+�.fxp�.mpx�.qpx�.spx��wCC�'��CC�(�
�C�(���6�QCC�(�=�.�C�.�(��%C�'�CC�.�(���.��6��6C�(�6�C�(�6���T��C��8�+���
T���)��%�����-
�T��C��8������gr�����5�1�0�3�2��������CCC����@CC������.CCC����@6������
����
�>����3��3�������C�"����+�L��C�Log file unavailable.��Coverage Profiler� �Problem��:��T��-���&%���C��
�
C�N�	����V��C�Log file has no usable records.��Coverage Profiler� �Problem��:��T��-���
%������>��C�Generating StackLevel XML for� ��... ��.��
F����T��CN��
T�����#)� T��C�Microsoft.XMLDom�N��o��C�<?xml version='1.0'?><�VFPCallStackLog�-CC��,�� &!{}%$^',()~+=@`"�[]�_��/>��;��
T�
����~���T��C�0���"T��C���event�C�0�6��%�C�5�
��+
�T����-C�5����T��C�C�X�-���
H�T
�L���
����
�T��a��T����<����2����
�%���=����
�T��-����
�T��a��T����<�����2�
��0�%���=���	�T��-���,�T��a��T����>�����2�
��Y�T��a��
T�����2�L���	���(��2����5%�CC�
StackLevel��?g�2�
C��>�@�����!��T����>����$%�CC�
StackLevel��?g�2����T����>����
T������%���=���5�T��-���H�T��a����
%����O�T���%���A
����%��2���Y�
T�#����
T�$����!T�%�C�
StackLevel��B�C��%�C�%����T�$��/��D���U���	���(�C�%�Eg��Q�%�C�#�@��$�!��T�$��/�#�D�$��T�#��#�>������v�T�$��/��D���9T��C�$�/��
[@StackLevel=C�2_�]��F���%�C�����T��C���G����C�
StackLevelC�2_��H��%��
��$���C�RunsForC�3_��H���,��%���A
��}�%��2���q���C�TimesCalled�1��H���y�����C���I���>�%��
����4��C�RunsForCCC�@RunsFor��F�Jg�3_��H���%��2����A
��:�<��C�TimesCalledCCC�@TimesCalled��F�Jg�_��H����
T������
T�
��2��T��CO��d��%���
�����T��C�8��I��C�Generating StackLevel XML for� ��... C�_�%��.�����
%������%���A��,�!T��C�_STACKX�XML��K���T� T��C�_STACK�XML��K���%���L
����T��C��;Please specify location to save Coverage StackLevel XML for�	XML Files� (*.xml)|*.xml��PUTFILE��M���%�C��
����%�CC���]�
��� �����T��N����B��C�Writing StackLevel XML to disk�: ��N�...��.����C��O��N������T��-����%�C������Q�����
F����
%������G ��
��C��P����C-��-��T��/�-��	B����UQTCLOGTHISLVFP5LISELECT	LLDELETEDLCFILTERLCORDERLCSTACKALIASLATEMPLIINDEXLCSTACKLCFILELCSOURCEFILELISTACKLEVELLCLASTEXECUTINGLCEXECUTINGSTACKLIPOSLLADDLITYPE
LNDURATIONLLEVENTLOXMLLONODELCTAGLOPARENT
LOTHISNODELLRETURN	LNPERCENTLIRECS	LIPERCENTLIMAXLINELENGTHLILINEITEMSLALINELCLINELIHANDLE
LOANCESTERLCPATHEDPARENTLOPARENTSTACKATTRIBDURATIONOBJCLASS	EXECUTINGHOSTFILE
STACKLEVELFILETYPECSOURCEFILELOCKSCREENS
SHOWSTATUSLERRORFNAMEFTYPEFSTACK	FDURATIONILENDURATIONFLEVEL
ILENEXECUTINGCSOURCEALIAS
AFILETYPESIN	DOMESSAGELOADXMLDOCUMENTELEMENTTAGNAME
PARENTNODEGETATTRIBUTE
OWNERDOCUMENTLSTACKXMLEXTENDEDTREE
ATTRIBUTESGETNAMEDITEMNODENAMEVALUESELECTSINGLENODE
CREATEELEMENTSETATTRIBUTEAPPENDCHILD	NODEVALUEGETTABLENAMELUNATTENDEDGETRESOURCELOCATIONCSAVEDSTACKXMLXMLCLEARSTATUS��������T�������
T�����-%�C���C����C�CC���]���j�T������� %�C���CC���]�
����+|�
ShellExecuteA�SHELL32������%T��C��open��������B��� �	��
	��U	TCXMLFILELCFILE
LIRETURNVALUETHISCSAVEDSTACKXML
SHELLEXECUTEASHELL32LERROR&T�����
��B���
��UTHISLSTACKXMLEXTENDEDTREELERROR�������#�������	�
��T�
�a��$%�C����C�CC���]���u�T����
�����
T������$%�C����C�CC���]���L��T��C��)Please specify an XSL Transformation file�XSL Transforms� (*.xsl;*.xslt)|*.xsl;*.xslt|�	All Files�
 (*.*)|*.*��GETFILE�����$%�C����C�CC���]����T�
�-���
%��
��9�%%�C����C�CC���]�����T���������
T������%%�C����C�CC���]���5�T�
�C����
%��
��1�T���������
%��
���� T��C�Microsoft.XMLDOM�N�� %�C���C���
����T�
�-����
%��
���� T��C�Microsoft.XMLDOM�N�� %�C���C���
����T�
�-����
%��
��F�T�	�C�����%�C�	��C�	���B�T�
�-����
%��
���� %�C����C�C��
	����T��C����%�CC��ӡ����T��C��htm�������T������T������T��C�_XSL�HTM����T������%���
�����T��C��4Please specify location to save transformed file for�
HTML Files�) (*.htm;*.html;*.txt)|*.htm;*.html;*.txt|�	All Files�
 (*.*)|*.*��PUTFILE������%�C������T�
�-����
%��
����%�CC���]�
��"� �����A��C� Writing transformed file to disk�: ��...������C�	����%��
������C�������J��(���B��
�	��
	��UTCXSLTTCXMLINTCXMLOUTTLNOSHOWLCXSLTLCINPUTFILELCOUTPUTFILEOXSLOXMLLCRESULT	LLSUCCESSLCSAVESOURCETHIS
CSTACKXSLTGETRESOURCELOCATIONCSAVEDSTACKXMLGETSTACKXMLLOAD
TRANSFORMNODECSOURCEFILEGETTABLENAMELUNATTENDED
SHOWSTATUSDISPLAYSTACKXMLLERROR=%�����$�Ge �T���-���t&�
B���
��UTHISLTURNEDOFFTRACELERRORt%�C�	TRBETWEENv�ON��2�Ge�T���a���7��J���(��
_oCoverage��
��C����
B���
��UTHISLTURNEDOFFTRACE
_OCOVERAGESUSPENDCOVERAGELERRORD�
��C����%�����6�Ge �T���-���<��UTHISRESUMECOVERAGELTURNEDOFFTRACE
_OCOVERAGE�����������
T��C��$%���C�����	����T������T��	�a��
��C��
��%�C������T��C��@�����T��C�@������T��-���T���a��%���	C��

	����T��-���
%����y�%���
��_�T��C����%�����	��[�T��C�������u�T���-����%���
C���
	����T��-���
%�����%�C������T��������T������%�C��
��
�T��-�����
%�����%�������%���	C��
	��W�T��-���%���	C��
	���T��-���%���	C��
	����T��-���%���	C��
	����T��-�����%���	C��
	����T��-�����
%����9�7��J���(��
_oCoverage����������t�%�C��
��p�
��C�������T����
��C�����B�����
	��U TCFILETLUNATTENDEDTCADDINLRETURNLCFILELOFORMTHISPASSEDPROPERPARAMSLUNATTENDEDLIGNORECOVERAGEFILENAMES
SETAPPHOME
CSUSPENDEDLOG
LUSINGOCXSSETWORKOPTIONSCREATEFORMSLSAVEFORMPOSITIONSADDFORMPOSITIONSAVERLINCOVERAGEFRAMESETUPWORKFILESCADDINRUNADDINSAVETARGETTODISKCREATESKIPPEDCURSORSAVESKIPPEDCURSORGETSTACKXMLSETUIOPTIONS
_OCOVERAGEFORMSRELEASEOFRAMERESUMECOVERAGELERROR����
COVERAGE.H����
COV_CHAR.H����
COV_LOCS.H����
COV_DLGS.H����
COV_SPEC.H����
COV_REGS.H����
COV_TUNE.H�G;(��.��G2�G$(�� ��G �G�G.�G�GC(����%�C�	TRBETWEENv�ON����Ge�T��	�a���
��
��������%�C��
��
���R����9����%�C��f�TOOLBAR��~�%������z�T��a��!�����%��
���� ���C��
�.Forms����'%�C��f�TOOLBAR���	����T��a��!�����
%�����t,)������5R,:�C�Coverage Profiler� already active!��=��B�-���%�C���C��	
��{�B�-���
B���
��UCOVERAGEHCOV_CHARCOV_LOCSCOV_DLGSCOV_SPECCOV_REGSCOV_TUNETHISLTURNEDOFFTRACEATEMPOFORMLFOUNDWINDOWCLASSFORMS	BASECLASS
WINDOWTYPEVISIBLENAMESUSPENDCOVERAGEFILLFILETYPEARRAYLERROR��������C�����l%�C������������������������������������
�C�f�RUNADDIN
	����
��C�����UNERRORCMETHODNLINETHISRELEASE4
��C����T����
��C����	B�C��UTHISSAVEFORMSETATTRIBUTESOFRAMESETREGISTEREDADDINS�����U	NLOCATION��U�������UOSOURCENXCOORDNYCOORD��
B���
��UTHISLERROR�����
B���
��UNSTYLETHISLERROR	domessage,��setuitoshowfilestates���setmarks���setuitoshowcodeJ��
setuifonts���setuioptions���passedproperparams���
setlogfile*��suspendcoverage��resumecoverage���sourcefileislog*��fillfiletypearray���createcoveragefilenamecursorD��setupworkfilesG��createskippedcursor���saveskippedcursorN ��createsourcecursor�!��adjustsourcecursor\%��createtargetcursor�%��adjusttargetcursor�)��adjustcoveragefilenamecursor(*��savetargettodiskJ*��fillonetargetrecord�-��fillsourcecursor�;��addpaths@��sourceavailable�A��marktargetcoverage?G��markcodeline�Z��getalias.^��runaddin%_��filterlistbylocationZe��orderlistbytime|e��setclasslibtoalias�e��setworkoptionsqg��getfontsfromuser�i��setregistrykeyvalues��getregistrykeyvaluewu��getresourcelocation�x��fillcoveragefilenamecursor̃��togglecoverageprofilemode����showstatistics����showprojectstatisticsц��getprojectstatistics����displayprojectstatistics����
setfontvalues���lockscreensr���getregisteredaddinsK���
showstatus{���clearstatusi���markalltargetrecordsȖ��filltargetcursor=���markonetargetrecord'���addregisteredaddin���saveoptionstoregistry����setregisteredaddins���deleteregisteredaddin����createformsX���gettablename
���
setapphome���setformsetattributes���saveformsetattributes2���addformpositionsaver]���showstackxml����getstackxml����displaystackxmlF���togglestackxmlextendedtree����transformstackxml����
Deactivate����Activate5���Unload����Initd���Load����Error1���Destroy���COV_TOOLBAR.Dockr���COV_TOOLBAR.DblClick����COV_TOOLBAR.DragDrop����COV_TOOLBAR.Activate����COV_TOOLBAR.Show����1��r�r�AQ�AR�aA�4��3q�dA����4��3�3q�A�1qAAA3�r��yA�4q2�s��!aS�AAA�AA��A�������AR�*����!��BA��A�q!AA�4!�a�E�3q2q���ARA����B�aaAA�4"������QQ!���A���&"�42RB��A�C���A��3e4u!���AAB4��"qAR��qA���	qAA�1�A��RA��A2#�ArA�B�����BRQB����4�������Aa�a��4q���2qA�B��A�4q����A�
�)A��R����B��B3q��4������A�N��!B|���"�����B3q�4�3q������QA�����!�#1�A�!A�!AA�AAB5�D������A���!����A���������A3#���q��AAA�A�Q����������
������B��A�AAAAA�B��aqa��AA$��eAA�A�AAABAA�2��Q�A��B��A�s��QqQ��AA�E�������A���C��A��A���AA4���4q5�������ta�a!�aQD5c��S���aA���!�����CA�AA�A���bA��4q�
q�R�AA�42�rPA�!a2��C�A�r��F����A11�qA��AR!���A��A���rA�B�5�������q�!����AQ���b"��A����}A�t���AAAA�B��AAAAAA���A�R��AA��A����1aA1aA�A���R���BA�������c����v
���A���Q�r�R#q�QA��"qA"��r��"�!�A��R"�"4��"�BB�!�B����R���A�a�A2R�AB �C����A�rAB�r41b1q�p����3�CA$#A����AA��AA�3�$r���!A�3q����A�qA�"!��A��!��Q�Q��A��BB��������A��b��R�AB����!A��q��CA�4�3�3���A�q����qQA�Q�A��A�E�4�bB����b��4�`���b���AAA���AB�q��QA��Av�AS��A����AAB�AA����BbaA(�!A���1aa1�a!ABB3�#AA��R�!�!�!��AU�4�r��!�!�!��A�a��AHR�����"���AB��A�5��1�����AA4�b���AAA���q��QA��A��AS��A����������A�BABAA2����A����A��aHAbaA������B"�4rq�A���qQ�qq��Q�RAA�BRB��A�4`!##��3�2A1������QAA��A����3�3�q���AA4���������A��Q��������A������s����a���!aA�AAA��1�����AA��aAB�3��3�C������}���b�Q��!A��AA��AA�A��AAB!��A�3q��������A3����aAAA�3q��AA�3��QA�3�rd��������A���A�aAA��A����4�re���������A��A�dB1�A���q���A�����AAA����A����4����a"�����q�������rAA��AR4q�!��a����AAA�AbBb�4��!Q1��$!!Aaaa�N3�������A�#�AAB�4qrb�!Ab�4_C��3�r���A���AbA��A��bq�AA�4�r����A��QA�BaAAA��QAr2A!1AA�6������AA�3q��AA�q��#��AA��A7qqQ�AA3qrAW���A�B�����aA����A������!r�"�AB�AB11q��A��R���a��aaa��AA2��aaA����B����
a��Aw��BH����Beb�B�����R���"�A��!�!A���AA���A���uRAAAA��AA���AA�����R��!AA�AA�QA�A�Q����G��KA��BA��AB�A�RR��ABB��A�Ab�A!Q��BB��A��aA����2q����B�SB�2S�213�C��AC�	BC�A�R��AR�AAA��AA��AA�Q��AA��!aA��!�
AA�AA�a�A��AA�R2a�AQ�3�a�At���3R�a�Aq5���B���!��A��A���A�q!A��BA��A���!�AAA���A��A��A��A���AAA�s��!�AA��AB4%!!!!!!�a�aaaa��a�A����A�AAAA�r�AAAA��AQqA�rB�3�R��A4����3qA2A2�A2A�3qA�2Lx��> d�6"�>$(b	J1�	Y97rp'z�w������'�(�+g�#,.��&.�8��8;"4;=3>=%F1NNF	JyR2JhT�n�T�T�q%U�Us�U\�?\�EB?�#�t}A�g���������֩(�v�K������D�W�c�<�g�g�E���k�8��a�$��I�!%/�;{�(��Rb#	��#�<[	7�<�@'
?&AzCN
V�C�Ch
X
D!Em
`LEQSx
��S�S�
�T�^�
��^�_?�`�aM�b�c]��cWdn�d�gw#h�n�O�n$s�jMs�v��v�}/��}��Z���‚z�������������������P���|�؏
���
��]�G
�A�Q
g���!��D�5$l�"�<qC����x��L���i�����
�K���f�[�9	w���~	��I��	p����	�����	����	J�v��	�����)��M�� 44W.
%T+�K�UU�������������	���
���
�����������%�����x�	B�����%|�
RegOpenKey�Win32API����%�������
B�������'|�RegCreateKey�Win32API����$|�RegDeleteKey�Win32API���%|�RegDeleteValue�Win32API�� |�RegCloseKey�Win32API�,|�
RegSetValueEx�Win32API������1|�RegQueryValueEx�Win32API�������'|�
RegEnumKey�Win32API�����4|�RegEnumKeyEx�Win32API���������4|�RegEnumValue�Win32API���������T���a��	B����U"NHKEYCSUBKEYNRESULTHKEYIVALUE	LPSZVALUE
LPCCHVALUELPDWTYPELPBDATALPCBDATALPCSTRLPSZVALNLENLPDWRESERVED
LPSZVALUENAME
DWRESERVEDFDWTYPEISUBKEYLPSZNAMECCHNAMETHISLLOADEDDLLS
REGOPENKEYWIN32APILERRORREGCREATEKEYREGDELETEKEYREGDELETEVALUEREGCLOSEKEY
REGSETVALUEEXREGQUERYVALUEEX
REGENUMKEYREGENUMKEYEXREGENUMVALUE������������
T�����T��C��(%�C�	m.nRegKeyb�N�C�
����u�T�
�������T��C��	��%��
������B��
����T������-%��
���C�m.lCreateKeyb�L	����T����
����%�����-�T��C�
��
���
���S�T��C�
��
������T����
���%�������B��
����T����
���	B����U

CLOOKUPKEYNREGKEY
LCREATEKEYNSUBKEYNERRCODENPCOUNTLSAVECREATEKEYTHISNUSERKEYLOADREGFUNCSREGCREATEKEY
REGOPENKEYNCURRENTKEY0��C�����T������
B���
��UREGCLOSEKEYTHISNCURRENTKEYLERROR�������������
T�����
T�����
T�����%T�
��C�
��
���
��	��%��
������B��
����T��C�
��
�����
��C����B��
���U
COPTNAMECOPTVALCKEYPATHNUSERKEYIPOSCOPTKEYCOPTIONNERRNUMTHISOPENKEYLCREATEKEYONSETSETKEYVALUECLOSEKEY�������������
T�����
T�����
T�����T�
��C�
��
���	��%��
������B��
����T��C����
��
��C����B��
���UCOPTNAMECOPTVALCKEYPATHNUSERKEYIPOSCOPTKEYCOPTIONNERRNUMTHISOPENKEYGETKEYVALUECLOSEKEYd�����������J���(���J�C�X�(��J�C�
�>�(�
��
H�c���2�C�THIS.nCurrentKeyb�N��������
B������ �C�m.cValueNameb�C����
B�������.T�
��C���
��
�����	��%��
�����B��
����%�����8�
B�������T�
��C�
��
��=��	B����U

CVALUENAME	CKEYVALUELPDWRESERVEDLPDWTYPELPBDATALPCBDATANERRCODETHISNCURRENTKEYREGQUERYVALUEEXP��������
H�#���2�C�THIS.nCurrentKeyb�N������_�
B������6�C�m.cValueNameb�C�C�m.cValueb�C����
B������!�C�
���
C�
�>�����
B�������T���
�C� ��T��C�
�>��.T�
��C���
����
��
����%��
����@�B��
����	B����U
CVALUENAMECVALUE
NVALUESIZENERRCODETHISNCURRENTKEY
REGSETVALUEEXI�������
T�����T�
��C�
��
����B��
���UNUSERKEYCKEYPATHNERRNUMREGDELETEKEY&������������
T�����
T�����
T�����)%�C�
�C�m.lEnumKeysb�L����T��-���T�
��C�
��
���	��%��
������B��
����%��
�����T��C���
����T��C������
��C����B��
���U
AREGOPTSCOPTPATHNUSERKEY	LENUMKEYSIPOSCOPTKEYCOPTIONNERRNUMTHISOPENKEYENUMKEYS
ENUMKEYVALUESCLOSEKEY^����T��C�
��
�����%��
����H�
��C�����B��
����UCKEYNAMENREGKEYNERRNUMTHISOPENKEYCLOSEKEY������������
T�����
�����+�a����
T�����T��C�dX��T��C�
�>��T��C�dX��T��C�
�>��T��C�dX��3T�
��C�
��
��������	��
H������
������!���
�����!��T��C�
����T��C�
�C�
�>�=��%�CC���
��l���C�����T��C����
���T���
�����!%��
���
�
��	����T�
������B��
���U	AKEYNAMES	NKEYENTRYCNEWKEYCNEWSIZECBUFNBUFLENCRETTIMENKEYSIZENERRCODEREGENUMKEYEXTHISNCURRENTKEY������������������	�
J���(��2%�C�THIS.nCurrentKeyb�N��
����}�
B�������%��
��
����
B�������+�a����J���(����J�C�X�(���J�C�>�(�
��J�C�>�(�
��4T��C�
��
����
�������
H�;�j���
����S�!���
����j�!��T���
�������
������$T���
������C�
��
�=��
H�����������(T���
������C�
��
��=�������4�#T���
�������*Binary*�������m�(T���
������C�
��
��=��2���)T���
�������*Unknown type*����!%��
���
�
��	����T�
������B��
���U
AKEYVALUES	LPSZVALUE
LPCCHVALUELPDWRESERVEDLPDWTYPELPBDATALPCBDATANERRCODE	NKEYENTRYLARRAYPASSEDTHISNCURRENTKEY
NCURRENTOSOS_W32SREGENUMVALUE�T�������
H� ���3��2��4��3�C�	Windows 3C�J����Z�B�-��"�C�
Windows NTC�J������T������T����ADVAPI32.DLL��2���T������T����ADVAPI32.DLL���
B���
��UTHISNUSERKEY
NCURRENTOSCREGDLLFILELERRORloadregfuncs,��openkey���closekey4��	setregkey���	getregkey���getkeyvalue	��setkeyvalue�
��	deletekey���enumoptions
��iskey���enumkeys@��
enumkeyvalues���Init/��1��1���AS�AsCS�sDE��5�2���"A1�A�!A���A"�A"�5�451���S1�A���551����1�A���4�r1�!��A�3�A�A��4���!�a��AS�3�A�4�q���421�����A�1�A�R�RA��4��1�A�4q��������2�AA1AA�AAA�1A�A�6s����"�AC�A�RAC�AA1AA2SA��2���AA�A�41�2q!���A�3<Z<<4[�h8��pE��R@��g��y7�0!��=V�u+!$�O!�'M�(�)�)4��� ���f%�1��U�������T������T�������T�����C��%���������T��C����D��T������T��	�C��%��T�����
����
�������T�
����T�������T�����
��
B���
��UNCONTAINERWIDTHNCONTAINERSPACERNCONTAINERHEIGHTOCONTROLTHISBORDERWIDTHCONTROLSHEIGHTLEFTTOPWIDTHTHISFORM
NTOOLCOUNTCONTROLCOUNTLERROR
B���
��UTHISLERROR������T���a��)%�C�THISFORMSET.BaseClassb�C��j�$��C����:�������{�	������UNERRORCMETHODNLINETHISLERRORTHISFORMSETERRORNAME
synchsizes,��Init���Error��1rA�"�1AA���A2�3�3���A��A2$?]yH#)�Z�� AA��%����U
��C����UTHISFORMSETSTANDARDRIGHTCLICK$!J����(�������UTHISFORM	BACKCOLORTHISBORDERCOLOR	FILLCOLOR
RightClick,��Inita��1�33;V�)A��� ��\%N��U
��C����UTHISFORMSETSTANDARDRIGHTCLICK
��C����
��C����UTHISFORMSETMARKONETARGETRECORDNOTIFYTARGETRECORDCHANGED
��C����UTHISFORMSETNOTIFYTARGETRECORDCHANGED*������T������B�UNBUTTONNSHIFTNXCOORDNYCOORDTHISFORMILISTMOUSESTART�������
�������+%�C����������[�T����	���s�T�������(%�������	C��%
	����T����
���T�
������C������UNBUTTONNSHIFTNXCOORDNYCOORDTHISFORMILEFTLISTCOLWIDTHNMARGINTHISMOUSEPOINTERWIDTHILISTMOUSESTARTADJUSTLISTCOLUMNWIDTHS0�������C�����
B���
��UOSOURCENXCOORDNYCOORDTHISFORMRESPONDTOSPLITTERTHISLERROR
RightClick,��Valida��InteractiveChange���	MouseDown���	MouseMoveg��DragDrop���1�3��8�51B31���B����AB3��2;W��8��A`�:)�L�� 339%����U
��C����
B���
��UTHISFORMSETSHOWFINDDIALOGTHISLERROR T����Find��	B�C��UTHISTOOLTIPTEXTClick,��Initx��1��3A�2Rm�)3�� ���%4�{�U2%�C�����
��C�����
B���
��UTHISFORMTOGGLEPREVIEWZOOMMODETHISFORMSETNOTIFYTARGETRECORDCHANGEDTHISLERROR(T����Preview Mode��	B�C��UTHISTOOLTIPTEXT%T����	Zoom Mode��	B�C��UTHISTOOLTIPTEXTInteractiveChange,��Option1.Init���Option2.Init���1�B�3��3��2��	*l)��� ��f�%Pd^�UT���-��UTHISVISIBLEInit,��1�2))��� ��%@���U-
��C������C�����
B���
��UTHISFORMSETTOGGLECOVERAGEPROFILEMODETHISFORMLSTAVAILABLEOBJECTSANDPROCSVALIDTHISLERROR)T����
Coverage Mode��	B�C��UTHISTOOLTIPTEXT(T����Profile Mode��	B�C��UTHISTOOLTIPTEXTInteractiveChange,��Option1.Init���Option2.Init��1��3��3��2	,u��)�� ��f�%Pd^�UT���-��UTHISVISIBLEInit,��1�3+)�S�� ::�%����U#T����Options��	B�C��UTHISTOOLTIPTEXT
��C����
B���
��UTHISFORMSETGETOPTIONSFROMUSERTHISLERRORInit,��Clickf��1r�3��2Rn�):��� ���<%N8�U#T����Add-Ins��	B�C��UTHISTOOLTIPTEXTr���2T��C�cov_addindialog�COVERAGE.VCX����
%����W�T��C�����B�����
	��ULRETURNTHISFORMSETSHOWMODALDIALOGRUNADDINTHISLERRORInit,��Clickf��1r�3q"�AB2Qm<)�R�� 99��%����U&T����
Statistics��	B�C��UTHISTOOLTIPTEXT
��C����
B���
��UTHISFORMSETSHOWSTATISTICSTHISLERRORInit,��Clicki��1��3��2Uq�)9�� ��f�%Pd^�UT���-��UTHISVISIBLEInit,��1�31)�N�� 55Kh%����U T����Save��	B�C��UTHISTOOLTIPTEXT
��C����
B���
��UTHISFORMSETSAVETARGETTODISKTHISLERRORInit,��Clickc��1A�4��3Uq�)5L�� 339%����U T����Open��	B�C��UTHISTOOLTIPTEXT
��C����
B���
��UTHISFORMSETSETUPWORKFILESTHISLERRORInit,��Clickc��1A�3��2Pl�)3X�� ??H%�1d�U
��C����UTHISFORMSETSTANDARDRIGHTCLICK
��C����
B���
��UTHIS
SYNCHSIZESLERROR�����T��C�����5%�C�!THIS.opgCoverageProfileMode.Classb�C��*�������&�
T����������%�C���
����T������T��	�-��T��
���
��T�������T�������T��
����T���������T��������1%�C�THIS.opgPreviewZoomMode.Classb�C��1�������-�
T����������%�C���
����T������T��	�-��T��
���
��T�������T�������T��
����T���������T��������	��C��'T���C����
���D��T�����
���ULOBUTTONLNWIDTHLOMODELCONTROLTHISCONTROLSOPGCOVERAGEPROFILEMODEBUTTONSPICTURECAPTIONAUTOSIZEHEIGHTWIDTHTOPLEFTOPGPREVIEWZOOMMODETHISFORMMINWIDTH	MINHEIGHT'�������C�����UNERRORCMETHODNLINE
RightClick,��Inita��
synchsizes���Error���1�3��3�BS�1�11AAA�AA�1�11AAA�AA�sq5�Q2;V���
.�<>)?��� ~~_�%�U���U*J����(����������������|�J�������(��'J�������(�����������	����T����c��T�����������"J�������(��	��J���	��(��
�
��C����UTHISNMARGINEDTCODELEFTLSTAVAILABLEOBJECTSANDPROCSCNTTOOLSHEIGHTTOPWIDTHSHPSPLITTERNLASTSPLITTERPOSITIONADJUSTLISTCOLUMNWIDTHS$
������T��C��%���T��C��%���%��������)T��C�����C��%�F��)T��C�������?F��T�	�C��%��T�
�C�	�%����"T��C��9���?F��"T��C��9���?F�����
B���
��UTHIS	MAXHEIGHTNMARGINMAXWIDTHPARENTLINCOVERAGEFRAMEWIDTHOFRAMEHEIGHTLEFTTOPLERROR�������'T������?�����
H�B������
��f�T��������C�����������T�������2���T�����������
��C��	��
B���

��UNYCOORDLNHIGHESTALLOWABLETHISNLISTROWHEIGHTLSTAVAILABLEOBJECTSANDPROCSTOPSHPSPLITTERHEIGHTNMARGIN
SYNCHSIZESLERROR�T�����
��%�����>���C�����������%�����������(T����������������C������%�������
����'T���������������
B���	
��U
THISLINZOOMMODERESPONDTOSPLITTERHEIGHTNMARGINNLASTSPLITTERPOSITIONLSTAVAILABLEOBJECTSANDPROCSTOPEDTCODELERROR����$%�C�nLeftColumnWidthb�N��;�T�������������y�*T��CC��Z��,CC���Z�����UNLEFTCOLUMNWIDTHTHISILEFTLISTCOLWIDTHLSTAVAILABLEOBJECTSANDPROCSCOLUMNWIDTHSWIDTH������C�tcClassb�C�����T���toolC��]����C�������/%�C�THIS.cntTools.��.Nameb�C����,J�a�(��THIS.cntTools.��.Visible����C������B���
��UTCCLASSCNAMETHISCNTTOOLS	ADDOBJECT
SYNCHSIZESLERRORP������I�9T���C����$C����$C����$����UTHISLSTAVAILABLEOBJECTSANDPROCSNLISTROWHEIGHTFONTNAMEFONTSIZE
��C����UTHISFORMSETSTANDARDRIGHTCLICK
������%������4�
��C�����%�����
��b�T��������&T��	���
�����
��������v�
H���+�/�C�THIS.Parent.iTargetReccountb�N����T��������C�������T��C���N��2�+�T������T������?��)T���C������
�D��T��CC��D���D��T����
����%����	��	����T��C��F�����
H���Y����
���T��������
�����C�T�������2�Y�T������T��
��������T������	
��%���	����T��
���
��T�����
���
�����T�����
���*T������������
��4T����C��
��������
D��%�������
����'T�����������
��T����������T��
������'T�����C��	����6��
��C����
B���
��ULNMAXLISTHEIGHTLNPROPOSEDLISTHEIGHTLNMINIMUMLISTHEIGHTLICOUNTTHISNLISTROWHEIGHTSETLISTROWHEIGHTPARENTITARGETRECCOUNTLINZOOMMODESHPSPLITTERTOPHEIGHTNMARGINLSTAVAILABLEOBJECTSANDPROCSCTARGETALIAS	LISTCOUNTEDTCODEVISIBLEMOUSEPOINTERNLASTSPLITTERPOSITIONCNTTOOLSOPGPREVIEWZOOMMODEVALUETHISFORMSETSYNCHZOOMWINDOWSTATELERRORP�����%��������<���C������
B���
��U	OSOURCENXCOORDNYCOORDTHISHEIGHTNMARGINTHISFORMRESPONDTOSPLITTERLERROR
������[��C�THISFORMSETb�O�C�����b�	�'C��LIGNORECOVERAGEFILENAMES��	�������T��C����T��C������,��9���������
T��C��
%������
��C����
��C�������,��9���������B�����	
	��U
ATEMPTHISFORMSETLRETURNIROWICOLNAMETHISSETINITIALFORMPROPERTIESSETINITIALCONTROLPROPERTIESLERROR	��C��%��������I���C�����T���������,J�������(�����	��
��C��
��"T�����������%�����
������ T�����
��������C�������
B���
��UTHISCNTTOOLSCONTROLCOUNT
NTOOLCOUNT
SYNCHSIZESCNTOOLSWIDTHNMARGINEDTCODELSTAVAILABLEOBJECTSANDPROCSADJUSTLISTCOLUMNWIDTHSSHPSPLITTERNLASTSPLITTERPOSITIONHEIGHTRESPONDTOSPLITTERTOPLERROR'�������C�����UNERRORCMETHODNLINE���������%�C������:T��C�THIS.��.Width�C�THIS.��.Left���:T��C�THIS.��.Top�C�THIS.��.Height���T���C���D�����
B���
��UCNAMECCLASSNWIDTHNHEIGHTTHISMINWIDTHLERROR4����%���]��-�
��C�������UNKEYCODE
NSHIFTALTCTRLTHISFORMSETSTANDARDRIGHTCLICKsetinitialcontrolproperties,��setinitialformproperties���respondtosplitter`��togglepreviewzoommode���adjustlistcolumnwidthsN��addtool/��setlistrowheightG��
RightClick���
synchsizes	��DragDrop���InitC��Resize���Error���	AddObject
��KeyPress��1��sA!�A#b�5�aa2���!!AB�3qrr�2�2��A��3A����A1�sAA�4qAA�A4qrr����B�5�A2�36B�Aq1Ad��1QQ��A������A���s��A�B�2��b�C�s�A2Br��3��A�3���$!�����A�B3��aA��"�Ab�3�Q3��Q���AA�3��AA2'��"J�3+�WI9��dA�$qLK?�P`��R�^��}(�C� �� 6#"�R#�#=��#.%B�M%�%P)~��� ��;%DYS�U
<��UTHISFORMClick,��1q1!)�<�� ##h(%����U��Ca����UTHISFORMCHECKFINDBUTTON
��C����UTHISINTERACTIVECHANGEInteractiveChange,��ProgrammaticChange\��1�2�1:c{)#y�� ``��%���U# ��C�
Sourcecode������UTHISFORM
FIELDTOSEARCHTHISVALUE# ��C�
SourceCode������UTHISFORM
FIELDTOSEARCHTHISVALUEProgrammaticChange,��InteractiveChangey��132Px�)`u�� \\�%���U!��C�Hostfile������UTHISFORM
FIELDTOSEARCHTHISVALUE!��C�Hostfile������UTHISFORM
FIELDTOSEARCHTHISVALUEProgrammaticChange,��InteractiveChangew��1�3�2Nv�)\u�� \\�%���U!��C�ObjClass������UTHISFORM
FIELDTOSEARCHTHISVALUE!��C�ObjClass������UTHISFORM
FIELDTOSEARCHTHISVALUEProgrammaticChange,��InteractiveChangew��1�4�2Px�)\(�� �8%9���U	��C����Ca����UTHISFORMCHECKFINDBUTTON	��C����Ca����UTHISFORMCHECKFINDBUTTONf����%�C����P�%���
��L�����C�����B�-����_�B�-���UNKEYCODE
NSHIFTALTCTRLTHISFORMCMDOKCLICKProgrammaticChange,��InteractiveChangee��KeyPress���1��3��3�QEqA�qA2Jr��))Q�� 88˻%R
�i�
�U��������!T���[|]+CC�f��+[|]��
%������
H�M����C�����o�T�������C���������T������+���2�������%�C���
����T���C��������T���C�����T���C���++�+���+�C���=�+��P�T���C���\���+�C���R�+����!T���C��C��>�=������Ca����UTCWHICHFIELDTLSEARCHTHISFIELDLCWHICHFIELDTHISCFIELDSTOSEARCHCHECKFINDBUTTON^���
%����-�T�����\<Find���*T����C�����	C���
��UTLNEWSEARCHTHISCMDOKCAPTIONENABLED	TXTSEARCHVALUECFIELDSTOSEARCH-
�����&���������T�����T��CW��T��C�O��
F����T��C��	��8%���
��
�	�CC��
�����a�	������
%������H��
H�����8�CC��
��fC�All Classes, Objects, Procsf��"�T���EMPTY(ObjClass)����������PT��� AT(ALLTR(THIS.txtSearch.Value), �EVAL(THIS.cFieldsToSearch)) > 0��2���QT���!ATC(ALLTR(THIS.txtSearch.Value), �EVAL(THIS.cFieldsToSearch)) > 0���&LOCATE REST FOR &lcLocateCriterion
%�����C+	��P�#)�*LOCATE REST FOR &lcLocateCriterion    
� %�C4�CO���
	����T�����Find \<Next����C�����
H���f�S�����=����CC��
����	�CC��
�����	���S�����=����CC��
����	�CC��
�����	��S�2�f�T��a���
��CCO�����C���
%��������CC��
�����������
��C�������	#����R,:��
Not found!����C� ��T�����\<Find����
F������UTHISFORMSETLCALIASLISELECTLIRECLCLOCATECRITERIONLLFINDAGAIN
LLINSOURCECTARGETALIASTHISINFINDAGAINSTATE
CHKSOURCECODEVALUESHOWTARGETTEXT	TXTSEARCHCHKMATCHCASE
CHKWRAPAROUNDCMDOKCAPTION
FRMMAINDIALOGSHOW
CHKCLASSESOBJCLASSCHKFILENAMESHOSTFILESETTARGETROWNOTIFYTARGETRECORDCHANGED63B�C�Find \<Next�\<��C����\<����UTHISCMDOKCAPTION�
H�
���1�C�THISFORMSET.cBaseMonoFontNameb�C��E�B�-���C�����T������T����a��T����a��T����a����Ca����%�������t,���	�
���2���B�-���UTHISFORMSETTHISOCOVERAGEENGINE
CHKSOURCECODEVALUE
CHKCLASSESCHKFILENAMESCHECKFINDBUTTONLINCOVERAGEFRAMEOFRAMENAME
��C����T���a��UTHISFORMFINDTHISDEFAULT
fieldtosearch,��checkfindbutton0��find���infindagainstateU��Init���cmdOK.Click
��1�r��!���B�3�AT���A�AB�3q��A�3���������AA���1�Ab�Q�B���47��A������A��Q��AB�B313�q�!A�qA4��3���5!�CT�D�V_��f��)8�� ����%r���UT����
��C����UTHISFORMOCOVERAGEENGINERELEASEClick,��1��2N)��� ���%\0�UT����UTHISOCOVERAGEENGINEG�����T���a��'��C����:�������UNERRORCMETHODNLINETHISLERROROCOVERAGEENGINEERRORNAME����
������b��C�toEngineRef.Baseclassb�C�C����b�	�'C��LIGNORECOVERAGEFILENAMES��	��T�������%�C��
MS Sans Serif���$�
�!C��
MS Sans Serif���$��!C��
MS Sans Serif���$��!C��
MS Sans Serif���$���Q� ��C�fontname�Arial����T����Arial�����(��C�fontname�
MS Sans Serif����T����
MS Sans Serif�����C�fontsize�����T������UTOENGINEREFATEMPTHISOCOVERAGEENGINESETALLFONTNAMEFONTSIZEDestroy,��ErrorX��Init���1�3��q3q�$a	Q���A�38T���)��� ����%a{u�U
��C����UTHISFORMSETSTANDARDRIGHTCLICK
RightClick,��1�3?)���� ���%�[&�U�
������[��C�THISFORMSETb�O�C�����b�	�'C��LIGNORECOVERAGEFILENAMES��	�����
T��C��
%������
�����|�%������0�#T������C��%���#T��������?��T�	�C��%��0T�
�����
����C�	�%����x� T��	�����	C�	�%�� T��
�����
C�	�%�����
��C�����	B����U
ATEMPTHISFORMSETLRETURNTHISPARENTLINCOVERAGEFRAMEWIDTHOFRAMEHEIGHTLEFTTOP
FRMMAINDIALOGRESIZE9%������2�
��C����
��C�������UTHISRELEASETYPEHIDETHISFORMSETNOTIFYZOOMWINDOWCLOSED
��C����UTHISFORMSETSTANDARDRIGHTCLICK/T��������T��������UTHISEDTCODEWIDTHHEIGHT4����%���]��-�
��C�������UNKEYCODE
NSHIFTALTCTRLTHISFORMSETSTANDARDRIGHTCLICKInit,��QueryUnloadC��
RightClick���Resize���KeyPressD��1��r���211�AB�B�3B��AB3�3bb3��AA2b�&!H1e�6 �U=)�W�� >>� %����U�����
T��C��
%������
�������T��C�����%T���C��Height�����"T���C��Top�����#T���C��Left�����$T��	�C��Width��	������B���	�
�
	��ULLRETURN
LCFORMNAMETHISFORMSETTHISFORMNAMEHEIGHTGETREGISTRYKEYVALUETOPLEFTWIDTHTHISLERROR����T��C�����
���������C��Height�������C��Top�������C��Width�������C��Left�������	��C��U	
LCFORMNAMETHISFORMNAMETHISFORMSETSETREGISTRYKEYVALUEHEIGHTTOPWIDTHLEFTInit,��Destroy���1����"Q!1ABBR3q"�����B�2-K�)>��� qq�R%�$��U��C�������UTHISOCOVERAGEENGINESTANDARDRIGHTCLICKE.%�C�THIS.oCoverageEngine.Classb�C��>���C������UTHISOCOVERAGEENGINE
DEACTIVATET����UTHISOCOVERAGEENGINE����
������b��C�toEngineRef.Baseclassb�C�C����b�	�'C��LIGNORECOVERAGEFILENAMES��	��T������,T����C�� �Coverage Profiler�� |�GetSysColor�Win32API�T���C����U	TOENGINEREFATEMPTHISOCOVERAGEENGINECAPTIONNAMEGETSYSCOLORWIN32API	BACKCOLORl%������e�2%�C�THIS.oCoverageEngine.BaseClassb�C��a�T����
��C������UTHISRELEASETYPEOCOVERAGEENGINE
_OCOVERAGERELEASEY7%�C�#THIS.oCoverageEngine.Forms(2).Classb�C��R���CC����������UTHISOCOVERAGEENGINEFORMSACTIVATE7����%���]��0���C��������UNKEYCODE
NSHIFTALTCTRLTHISOCOVERAGEENGINESTANDARDRIGHTCLICK
RightClick,��
Deactivater��Destroy���Init
��QueryUnloadS��Activate���KeyPress���1A3�A3�4q�$�A3A!��AA3qqAA3�AA2Qr��
8��"�p+�2)q��� ��f�%�T$�Uk���
T��C��
%����P�T���a��T���-��T�������B�����
	��ULRETURNTHISCANCELERRORLFORCESEARCHFLAGSLERROR8%����� �T�������
�������UTHISLFORCESEARCHINITDIROBJECTSHOWOPEN8%����� �T�������
�������UTHISLFORCESEARCHINITDIROBJECTSHOWSAVE8%����� �T�������
�������UTHISLFORCESEARCHINITDIROBJECTSHOWHELPk�����$%�C�SHOW������	��G�T���������d���C������UNERRORCMETHODNLINETHISCANCELERRORFILENAMEInit,��SHOWOPEN���SHOWSAVE?��ShowHelp���Error��1q����9AB4A�A3A�A3A�A3�AA�QA2z
�:�"�]+y`4)�[�� BB�\%����U]���
T��C��
%����B�!T����Coverage Profiler���B�����
	��ULRETURNTHISCAPTIONLERROR�����7%�C�THISFORMSET.cSourceFileb�C�	C�����F�B���������%���������T��a��!����%��
����<���UOFORMLOTHERMAINDIALOGSTHISFORMSETCSOURCEFILEFORMSCLASSTHISInit,��Unload���1q��AA3�qAA"q�AAA�qA2��.
)BD�� ++
T%����U����3%�C�	tcCaptionb�C�C�THISFORMb�O��A�B�-�����������.%����	�
�	�����
�����T���
�	��T���
���T�
�	����	��T�
��������
T�����T��C�WWW�
����
T�����T�����
��+��C��
��
��n�T������T���.. C��\���T�������%�C��
����T�
�	����T�
������U	TCCAPTION
LCDISPLAYTEXTLISTARTCHARLILABELWIDTHLIMARGIN
LVFONTNAME
LVFONTSIZETHISLBLNAMEFONTNAMETHISFORMFONTSIZE	TEXTWIDTHWIDTHCAPTIONsetfileorclassnamecaption,��1q2rA��aaA���1��B2A2%�)+E�� ,,5�%����U��C�����UTHISFORMOCOVERAGEENGINESHOWSKIPPEDFILES)&T����\<Source Files Skipped��UTHISCAPTIONClick,��Initp��13a2A\�),<�� ##h(%����U��Ca�����UTHISFORMOCOVERAGEENGINESHOWTEXTLOG$!T����Source Text \<Log��UTHISCAPTIONClick,��Initl��132B]�)#N�� 55Kh%����U��C�����UTHISFORMOCOVERAGEENGINESHOWPROJECTSTATISTICS-*T����Statistics by \<Project...��UTHISCAPTIONClick,��Initu��14�2Kf�)5�� ����%g}u�U(T����View details��	B�C��UTHISCAPTIONInit,��1��2X)��� ����%g}u�U(T����View details��	B�C��UTHISCAPTIONInit,��1��2X)���� ��Z %�wF��U&����������T��C���
%�����YT����Coverage Profiler� �
Statistics�: C���	C�\���	��\��T��
���
Statistics��T�����View details��T��C��Target�����T��CW��
F����T��CC�
�f��������B���C�FontName�������C�FontSize�����T����C�Z��T����C��Z��T����C�Z��"T����C���d�
�Z��T�����Line(s) hit��T�����Line(s) missed��&T�����Total coverable lines��$T�����% Covered Linecount����2%�-
�"C��.vct�.sct�.frt�.lbt�	��y�����������C�FontName�������C�FontSize�������C����T����C�Z��T����C� �Z��T����C� Z��"T����C�� �d�
�Z��T�����
Class(es) hit��!T�����Class(es) missed��"T�����Classes with code��"T�����% Covered Classes����T��CC�!�f��T��C�!���
H���a��������������T��C��\����C�>��C�T��C���=��2�a�T��C���\�����C�����������������)T�"���#�"�$��#�$���T��%�"��"��%�$�����C������T���&�-���
F�����B�����'
	��U(TOENGINEREFLRETURNCTARGETISELECTCHOSTIPOSTHISCAPTIONOCOVERAGEENGINECSOURCEFILE
LBLSTATISTICSLBLVIEWGETALIASHOSTFILECNTLINESCOVEREDSETALLFONTNAMEFONTSIZE
LBLCOVEREDCOVERED
LBLNOTCOVERED	COVERABLELBLTOTAL
LBLPERCENTLBLCOVEREDCAPTIONLBLNOTCOVEREDCAPTIONLBLTOTALCAPTIONLBLPERCENTCAPTIONFILETYPECNTCLASSESCOVEREDSETFILEORCLASSNAMECAPTIONOBJHITSOBJTOTALOBJCLASSWIDTHSHPFRAMELEFTLBLNAMEVISIBLELERROR'�������C�����UNERRORCMETHODNLINE2���
T��C��T����OK��	B����ULRETURNTHISCAPTIONInit,��Error)��
cmdOK.Initl��1qr���������1q1!��bBA"���1q1!�""A2�"1b�aAB����AB�BB3�Q3q�!�2�>�IaAj�f)���� ��xF%G1�U
B���
��UTHISLERROR������T���a��)%�C�THISFORMSET.BaseClassb�C��j�$��C����:�������{�	������UNERRORCMETHODNLINETHISLERRORTHISFORMSETERRORNAMEInit,��ErrorN��1�3���A��A2.J)���� ��xF%G1�U
B���
��UTHISLERROR������T���a��)%�C�THISFORMSET.BaseClassb�C��j�$��C����:�������{�	������UNERRORCMETHODNLINETHISLERRORTHISFORMSETERRORNAMEInit,��ErrorN��1�4���A��A23O)���� ��xF%G1�U������T���a��)%�C�THISFORMSET.BaseClassb�C��j�$��C����:�������{�	������UNERRORCMETHODNLINETHISLERRORTHISFORMSETERRORNAME
B���
��UTHISLERRORError,��Init���1���A��A4�2�	�)���� ��xF%G1�U������T���a��)%�C�THISFORMSET.BaseClassb�C��j�$��C����:�������{�	������UNERRORCMETHODNLINETHISLERRORTHISFORMSETERRORNAME
B���
��UTHISLERRORError,��Init���1���A��A3�2�	�)���� ��xF%G1�U
B���
��UTHISLERROR������T���a��)%�C�THISFORMSET.BaseClassb�C��j�$��C����:�������{�	������UNERRORCMETHODNLINETHISLERRORTHISFORMSETERRORNAMEInit,��ErrorN��1�3���A��A2.J)���� nn_L%��U
B���
��UTHISLERRORr�����R��C�Problem�:C�
 CEC�
 ���Coverage Profiler� �Problem�x��T���a��UNERRORCMETHODNLINETHISLERRORInit,��ErrorN��1�3�!�3.J�)n��� ��xF%G1�U������T���a��)%�C�THISFORMSET.BaseClassb�C��j�$��C����:�������{�	������UNERRORCMETHODNLINETHISLERRORTHISFORMSETERRORNAME
B���
��UTHISLERRORError,��Init���1���A��A3�2�	�)���� ��xF%G1�U
B���
��UTHISLERROR������T���a��)%�C�THISFORMSET.BaseClassb�C��j�$��C����:�������{�	������UNERRORCMETHODNLINETHISLERRORTHISFORMSETERRORNAMEInit,��ErrorN��1�3���A��A2.J)�;�� ""H�%*�}�U������T���a��)%�C�THISFORMSET.BaseClassb�C��j�$��C����:�������{�	������UNERRORCMETHODNLINETHISLERRORTHISFORMSETERRORNAMEB���
��UTHISLERRORUUUError,��Init���SHOWOPEN��SHOWSAVE��ShowHelp#��1���A��A3�3443�	�4Sr�
��)"1�� -k%����U_ %�C����C���
	��3�T��������K�T�������
B���
��UTHISPICTURETOOLTIPTEXTCAPTIONLERROR������T���a��)%�C�THISFORMSET.BaseClassb�C��j�$��C����:�������{�	������UNERRORCMETHODNLINETHISLERRORTHISFORMSETERRORNAMEInit,��Error���11�A�3���A��A2���)��� ��xF%G1�U������T���a��)%�C�THISFORMSET.BaseClassb�C��j�$��C����:�������{�	������UNERRORCMETHODNLINETHISLERRORTHISFORMSETERRORNAME
B���
��UTHISLERRORError,��Init���1���A��A3�2�	�)�Error���11�A�3���A��A2�� }�%q���UN'%�C������C���
	��:�T��������
B���
��UTHISCAPTIONPICTURETOOLTIPTEXTLERROR������T���a��)%�C�THISFORMSET.BaseClassb�C��j�$��C����:�������{�	������UNERRORCMETHODNLINETHISLERRORTHISFORMSETERRORNAMEInit,��Error���1r1A�3���A��A2���	)�
coverage.h��Ur�1
cov_char.h��Ur�1
cov_locs.h��Ur�1
cov_dlgs.h�Ur�1
cov_spec.h�Ur�1
cov_regs.h�Ur�1
cov_tune.h�Ur�1=lfastzoommode In Zoom mode, indicates whether Coverage should refrain from marking a record unless specifically indicated by the user, to avoid unnecessary processing.
cprojectfrx The name of the report form that will be called by DisplayProjectStatistics to display the project statistics cursor. Defaults to COV_PROJECT_FRX in COV_TUNE.H.
*notifyzoomwindowclosed Puts interface elements into Preview mode and synchronizes these elements as necessary when the Zoom window is closed.
*synchzoomwindowstate Makes sure that state of Zoom window matches current Preview/Zoom mode.
*notifytargetrecordchanged Synchronizes all coverage UI elements when the record pointer has moved in the target workfile.
*showmodaldialog Instantiates modal dialogs as part of coverage standard UI.
*getoptionsfromuser Invokes Options dialog and applies results of user's selections, if appropriate.
*showtextlog Displays the original Coverage source log.
*showskippedfiles Displays browse of source files that weren't Located or that are weren't parsed because they're ignored as part of the coverage app's own file list.
*arrangeframewindows Cascades all windows within the frame when Coverage is running in Coverage frame.
*togglefastzoommode Signals interface elements that Fast Zoom mode has been toggled on or off.
*showfinddialog Shows the modaless Find dialog (instantiates it as necessary and brings it forward).
*settargetrow Provides RECNO() from which the proper row of the target cursor to display in the interface can be derived (accounting for deleted records and other records eliminated because of filters).
*showtargettext Tells UI to select a particular string within source code display. When Find target is found in source code, this method provides the Find dialog with behavior resembling the internal Find dialog used with a text file.

PROCEDURE setaddin
   LPARAMETERS tcFile
   LOCAL cFile
   cFile = ALLTR(tcFile)
   WITH THIS.oCoverageEngine
      .caddin = cFile
      IF (.lUsingRegistry AND THIS.chkRegisterAddIns.Value)
         .lRegisterAddIn = .T.
      ELSE
         .lRegisterAddIn = .F.
      ENDIF
   ENDWITH

ENDPROC
PROCEDURE getaddin
   THIS.cboFileToRun.DisplayValue = ;
      THIS.oCoverageEngine.GetResourceLocation(;
      "", ;
      COV_GETADDINFILE_TITLE_LOC, ;
      COV_ALLFILES_LOC+" (*.*)|*.*", ;
      THIS.cboFileToRun.DisplayValue, ;
      "GETFILE")


ENDPROC
PROCEDURE checkoktorun
   THIS.cmdOK.Enabled = (NOT EMPTY(THIS.cboFileToRun.DisplayValue))

ENDPROC
PROCEDURE Init
   LPARAMETERS toEngineRef
   LOCAL lReturn, cAddInFile
   lReturn = DODEFAULT(toEngineRef)
   IF lReturn
      THIS.Caption = COV_DIALOG_CAPTION_LOC +" "+COV_ADDINS_LOC
      THIS.chkRegisterAddIns.Caption = COV_ADDIN_REGISTER_LOC
      THIS.cmdOK.Caption = COV_ADDIN_RUN_LOC
      THIS.cmdCancel.Caption = COV_CANCEL_LOC
      THIS.lblTitle.Caption = COV_ADDINS_LOC

      IF NOT THIS.oCoverageEngine.lUsingRegistry
         THIS.chkRegisterAddIns.Enabled = .F.
      ELSE
         FOR EACH cAddInFile IN THIS.oCoverageEngine.aAddIns
            IF TYPE("cAddInFile") = "C" AND NOT EMPTY(cAddInFile)
               *&* old code: THIS.cboFileToRun.AddItem(cAddInFile)
               *&* new code: add escape backslashes throughout the path
               *&* wherever backslashes appear, but exempt a combination
               *&* of "\]" at the beginning, which disables any entry.
               IF LEFT(cAddInFile,2) == "\]"
                  THIS.cboFileToRun.AddItem( ;
                      "\]"+ STRTRAN(SUBSTR(cAddInFile,3),"\","\\"))
               ELSE
                      THIS.cboFileToRun.AddItem(STRTRAN(cAddInFile,"\","\\"))
               ENDIF  
            ENDIF
         ENDFOR
         THIS.chkRegisterAddIns.Value = THIS.oCoverageEngine.lRegisterAddIn
      ENDIF

      STORE THIS.oCoverageEngine.cAddIn TO ;
         THIS.cboFileToRun.DisplayValue

   ENDIF

ENDPROC
PROCEDURE Error
   LPARAMETERS nError, cMethod, nLine
   THIS.oCoverageEngine.Error(nError, THIS.Name+":"+cMethod, nLine)
   
ENDPROC
PROCEDURE CMDOK.Click
   THISFORM.SetAddIn(THISFORM.cboFileToRun.DisplayValue)
   THISFORM.oCoverageEngine = .NULL.
   THISFORM.Release()
   
ENDPROC
PROCEDURE CMDOK.Error
   LPARAMETERS nError, cMethod, nLine
   THIS.lError = .T.
   THISFORM.Error(nError, THIS.Name+":"+cMethod, nLine)
   
ENDPROC
EHeight = 95
Width = 443
DoCreate = .T.
Caption = "Coverage Add-Ins"
HelpContextID = 1895825780
Name = "cov_addindialog"
CMDOK.AutoSize = .F.
CMDOK.Top = 17
CMDOK.Left = 361
CMDOK.Height = 23
CMDOK.Width = 75
CMDOK.Cancel = .F.
CMDOK.Caption = "Run"
CMDOK.TabIndex = 1
CMDOK.ZOrderSet = 1
CMDOK.Name = "CMDOK"
g�PROCEDURE notifyzoomwindowclosed

   IF TYPE("THIS.frmMainDialog.Class") = "C"
      LOCAL cTarget
         
      cTarget = THIS.GetAlias(, "Target")
      * it's possible that we're on our way out at this point
      * and have just closed the zoom window, triggering this notification
      IF USED(cTarget) 
         THIS.frmMainDialog.TogglePreviewZoomMode()
         IF NOT EOF(cTarget)
            GO RECNO() IN (cTarget)
         ENDIF
         THIS.NotifyTargetRecordChanged()                           
      ENDIF

   ENDIF

ENDPROC
PROCEDURE synchzoomwindowstate
  
   DO CASE

   CASE TYPE("THIS.frmZoom.BaseClass") # "C"
      * we may be starting up and the window
      * is not yet available

   CASE (NOT THIS.frmMainDialog.lInZoomMode) AND ;
         THIS.frmZoom.Visible
      THIS.frmZoom.Hide()

   CASE THIS.frmMainDialog.lInZoomMode AND ;
         (NOT THIS.frmZoom.Visible)
      IF THIS.frmMainDialog.WindowState = 2
         THIS.frmMainDialog.WindowState = 0
      ENDIF
      IF NOT THIS.frmMainDialog.Visible 
         THIS.frmMainDialog.Show()
      ENDIF
      
      WITH THIS.frmZoom
         IF BETWEEN(.Top, ;
            THIS.frmMainDialog.Top, ;
            THIS.frmMainDialog.Top+THIS.frmMainDialog.Height) OR ;
            BETWEEN(.Left, ;
            THIS.frmMainDialog.Left, ;
            THIS.frmMainDialog.Left+THIS.frmMainDialog.WIDTH)
   
            .Top = THIS.frmMainDialog.Top + ;
                   THIS.frmMainDialog.Height + ;
                   SYSMETRIC(9) + SYSMETRIC(20)
            .Left = THIS.frmMainDialog.Left
   
         ENDIF
      ENDWITH
      THIS.frmZoom.Show()

   OTHERWISE
     * nothing to do here as currently designed
   ENDCASE

   RETURN NOT THIS.lError

ENDPROC
PROCEDURE notifytargetrecordchanged
   LOCAL cTarget, lNoCodeYet, cCaption

   cTarget = THIS.GetAlias(,"Target")
   
   IF NOT USED(cTarget)
      * on our way in or out
      RETURN
   ENDIF

   IF THIS.lInProfileMode
      lNoCodeYet = EMPTY(&cTarget..Profiled)
   ELSE
      lNoCodeYet = EMPTY(&cTarget..Marked)
   ENDIF

   IF lNoCodeYet AND ;
      THIS.frmMainDialog.lInZoomMode AND ;
      THIS.lFastZoomMode
         *&* could do a windowstate check in here also...
   ELSE
      lNoCodeYet = (NOT THIS.MarkOneTargetRecord())
   ENDIF

   IF THIS.frmMainDialog.lInZoomMode

      cCaption = ALLTR(&cTarget..ObjClass)

      IF EMPTY(cCaption)
         cCaption = COV_FULL_SOURCE_FILE_LOC
      ELSE
         IF "!" $ cCaption
             cCaption = SUBSTR(cCaption,AT("!",cCaption)+1)
         ENDIF
      ENDIF

      WITH THIS.frmZoom
      
         IF lNoCodeYet

            .Caption = COV_ZOOM_GET_CODE_LOC
           
         ELSE
            .Caption = COV_ZOOM_MARKED_CODE_FOR_LOC+ ;
               +" "+ALLTR(&cTarget..Hostfile)+ ;
               ": "+cCaption
         ENDIF
         .edtCode.SelStart = 0
         .Refresh()

*!*	         IF BETWEEN(.Top, ;
*!*	               THIS.frmMainDialog.Top, ;
*!*	               THIS.frmMainDialog.Top+THIS.frmMainDialog.Height) AND ;
*!*	               BETWEEN(.Left, ;
*!*	               THIS.frmMainDialog.Left, ;
*!*	               THIS.frmMainDialog.Left+THIS.frmMainDialog.WIDTH)
*!*	            .Top = THIS.frmMainDialog.Top - SYSMETRIC(9)
*!*	            .Left = THIS.frmMainDialog.Left - SYSMETRIC(9)
*!*	         ENDIF
         IF NOT .Visible
            .Visible = .T.
         ENDIF
         
      ENDWITH
   ELSE

      THIS.frmMainDialog.Refresh()
      THIS.frmMainDialog.edtCode.SelStart = 0

   ENDIF

   RETURN NOT THIS.lError

ENDPROC
PROCEDURE showmodaldialog
   LPARAMETERS tcWhichDialogClass, tcWhichClassLib
   
   ASSERT NOT EMPTY(tcWhichDialogClass)
   ASSERT NOT EMPTY(tcWhichClassLib)
   ASSERT TYPE("tcWhichDialogClass") = "C"
   ASSERT TYPE("tcWhichClassLib") = "C"
  
   LOCAL oFormRef,cAlias,cLog, cLibs
   
   PUSH KEY CLEAR

   #IF COV_COMPILED_IN_VFP5 
      cLibs = SET("CLASSLIB")
      cAlias = THIS.SetClassLibToAlias(tcWhichClassLib,THIS.cAppName)
   #ENDIF

   IF THIS.lInCoverageFrame
      THIS.oFrame.Show()
   ELSE
      ACTIVATE SCREEN
   ENDIF
   
   #IF COV_COMPILED_IN_VFP5
      oFormRef = CREATEOBJECT(cAlias+"."+tcWhichDialogClass, THIS)
   #ELSE
      oFormRef = NEWOBJECT(tcWhichDialogClass,tcWhichClassLib,THIS.cAppName,THIS)
   #ENDIF

   cLog = THIS.cSuspendedLog
   * avoid attempt to resume logging
   * during this modal dialog
   THIS.cSuspendedLog = ""


   oFormRef.Show(1)

   IF NOT EMPTY(cAlias) AND ;
         (ATC("ALIAS "+cAlias, SET("CLASSLIB")) > 0)
      RELEASE CLASSLIB ALIAS (cAlias)
      SET CLASSLIB TO &cLibs
   ENDIF

   THIS.cSuspendedLog = cLog
   
   POP KEY
   
   RETURN NOT THIS.lError

ENDPROC
PROCEDURE getoptionsfromuser
   LOCAL lReturn, lProfileMode, cMark, cMarkNot, ;
      cTarget, iSelect, iRecNo, lMarkAll, lAlreadyReMarked

   cMark = THIS.cMarkExecuted
   cMarkNot = THIS.cMarkNotExecuted
   lMarkAll = THIS.lMarkAllOnLoad
   lReturn = THIS.ShowModalDialog(COV_OPTIONSDIALOG, COV_OPTIONS_CLASSLIB)
   IF lReturn
      THIS.SetUiFonts()
      IF NOT ((cMark+cMarkNot)==(THIS.cMarkExecuted+THIS.cMarkNotExecuted))
         * a change has happened
         THIS.SetMarks() && make them of comparable length
         iSelect = SELECT()
         cTarget = THIS.GetAlias(,"Target")
         SELECT (cTarget)
         iRecNo = RECNO()
         COUNT FOR NOT EMPTY(Marked)
         IF _TALLY > 0
            IF MESSAGEBOX(COV_MARKS_CHANGED_LOC, ;
                  COV_WARNING_YESNO_MESSAGEBOX) ;
                  = IDNO
               REPLACE ALL Marked WITH ""
               IF THIS.lMarkAllOnLoad AND (NOT THIS.lInProfileMode)
                  THIS.MarkAllTargetRecords()
                  lAlreadyReMarked = .T.
               ENDIF
            ENDIF
         ENDIF
         GO iRecNo
         SELECT (iSelect)
         THIS.NotifyTargetRecordChanged()
      ENDIF

      IF (NOT lMarkAll) AND ;
            THIS.lMarkAllOnLoad AND ;
            (NOT lAlreadyReMarked) AND ;
            (MESSAGEBOX(COV_MARK_ALL_NOW_LOC, ;
            COV_WARNING_YESNO_MESSAGEBOX) ;
            = IDYES)
         THIS.MarkAllTargetRecords()
         THIS.NotifyTargetRecordChanged()
      ENDIF
   ENDIF

   RETURN lReturn AND NOT THIS.lError
   
ENDPROC
PROCEDURE showtextlog
   LPARAMETERS tlFromModalDialog
   LOCAL wOnTopWind, wSourceLog
   
   IF tlFromModalDialog
      wOnTopWind = WONTOP()
   ENDIF
  
   IF THIS.lInCoverageFrame
      MODI COMM (THIS.cSourceFile) NOWAIT NOEDIT IN WINDOW (THIS.oFrame.Name)
   ELSE
      MODI COMM (THIS.cSourceFile) NOWAIT NOEDIT IN SCREEN
   ENDIF
   
   IF NOT EMPTY(wOnTopWind)
      ACTIVATE WINDOW (wOnTopWind)
      wSourceLog = (SUBSTR(THIS.cSourceFile,RAT("\",THIS.cSourceFile)+1))
      IF RIGHT(THIS.cSourceFile,1) = "."
         wSourceLog = LEFT(wSourceLog,LEN(wSourceLog)-1)
      ENDIF        
      IF WEXIST(wSourceLog) && it should!
         MOVE WINDOW (wSourceLog) TO 1,1
      ENDIF
   ENDIF


ENDPROC
PROCEDURE showskippedfiles
   LOCAL cSource,cAlias, iSelect, wOnTopWind

   cSource = THIS.GetAlias(,"Source")
   cAlias = THIS.GetAlias(,"Skipped")

   IF THIS.CreateSkippedCursor(cSource, cAlias)
      IF USED(cAlias) AND NOT EMPTY(RECC(cAlias))
         iSelect = SELECT()
         wOnTopWind = WONTOP()
         SELECT (cAlias)
         IF THIS.lInCoverageFrame
            BROWSE NOWAIT IN WINDOW (THIS.oFrame.Name) TITLE cAlias
         ELSE
            BROWSE NOWAIT IN SCREEN TITLE cAlias
         ENDIF
         MOVE WINDOW (cAlias) TO 1,1
         SELECT (iSelect)
         IF NOT EMPTY(wOnTopWind)
            ACTIVATE WINDOW (wOnTopWind)
         ENDIF
      ELSE
         MESSAGEBOX(COV_NO_LOG_ENTRIES_SKIPPED_LOC, ;
            64,COV_DIALOG_CAPTION_LOC+" "+COV_INFO_LOC)
      ENDIF
   ENDIF
   RETURN NOT THIS.lError
   
ENDPROC
PROCEDURE arrangeframewindows

   IF THIS.lInCoverageFrame

      LOCAL wFrame, iChild, wChildWindow, nPos, nPosFoxels, ;
            cAlias, cSourceWind, iNumberWindows, ;
            wOnTopWind, wFrameTopWind, oForm, nStagger
            
      LOCAL ARRAY aWindowCollection[1]
    
      iChild = 0
      wFrame = UPPER(THIS.oFrame.Name)
      nStagger = SYSMETRIC(9)

      cAlias = UPPER(THIS.GetAlias(,"Skipped"))
      IF NOT WVISIBLE(cAlias)
         cAlias = ""
      ENDIF
      cSourceWind = UPPER(SUBSTR(THIS.cSourceFile, RAT("\",THIS.cSourceFile)+1))
      IF NOT WVISIBLE(cSourceWind)
         cSourceWind = ""
      ENDIF
     
      wOnTopWind = UPPER(WONTOP())     
      iNumberWindows = 0
      
      * first find any forms that are in this frame,
      * which will be in the stack before the frame:
      FOR EACH oForm IN _SCREEN.Forms
         DO CASE
         CASE oForm.ShowWindow = 0 OR ;
              (! oForm.Visible) OR ;
              UPPER(oForm.BaseClass) == "TOOLBAR"  OR ;
              (oForm.WindowState # 0) 
              * skip it
         CASE oForm.ShowWindow = 1
              * add to the collection           
             iNumberWindows = iNumberWindows + 1
             DIME aWindowCollection[iNumberWindows]
             aWindowCollection[iNumberWindows] = oForm
         OTHERWISE && oForm.ShowWindow = 2
             * is it the right frame?
             IF UPPER(oForm.Name) == UPPER(THIS.oFrame.Name)
                EXIT
             ELSE
                iNumberWindows = 0
                * start again with the next batch,
                * in the stack, recreating the array
             ENDIF
          ENDCASE
      ENDFOR
     
      nPos = 0
      IF NOT EMPTY(cAlias) 
         IF (cAlias == wOnTopWind)
            wFrameTopWind = cAlias
         ELSE
            nPos = nPos + 1
         ENDIF
      ENDIF
      IF NOT EMPTY(cSourceWind)
         IF (cSourceWind == wOnTopWind)      
            wFrameTopWind = cSourceWind
         ELSE
            nPos = nPos + 1
         ENDIF
      ENDIF
     
      FOR iChild = iNumberWindows TO 1 STEP -1
         aWindowCollection[iChild].Left = nPos * nStagger
         aWindowCollection[iChild].Top = nPos * nStagger          
         nPos = nPos + 1
      ENDFOR
     
     * Now add the ones that won't show up in _SCREEN.Forms()
     * -- we can't depend on the stack order, 
     * to give us these windows so unless they are WONTOP()
     * we have to create one arbitrarily, putting these at the back.

     * Skipped Files Browse:
     
     nPosFoxels = nStagger/ FONTM(1,THIS.oFrame.FontName, THIS.oFrame.FontSize)     
     
     IF (NOT EMPTY(cAlias)) AND ;
        (NOT (cAlias == wOnTopWind))
         SHOW WINDOW (cAlias) ;
            IN WINDOW (THIS.oFrame.Name) BOTTOM
         IF (NOT EMPTY(cSourceWind)) AND ; 
            (NOT (cSourceWind == wOnTopWind))
            MOVE WINDOW (cAlias) TO nPosFoxels, nPosFoxels
         ELSE
            MOVE WINDOW (cAlias) TO 0,0          
         ENDIF
     ENDIF

     * Text Log MODI window:     
     IF NOT EMPTY(cSourceWind)  AND ;
        (NOT (cSourceWind == wOnTopWind))
        SHOW WINDOW (cSourceWind) ;
             IN WINDOW (THIS.oFrame.Name) BOTTOM
        MOVE WINDOW (cSourceWind) TO 0,0
      ENDIF

     IF NOT EMPTY(wFrameTopWind)
        SHOW WINDOW (wFrameTopWind) ;
            IN WINDOW (THIS.oFrame.Name) 
        MOVE WINDOW (wFrameTopWind) TO ;
                    nPos * nPosFoxels, ;
                   (nPos * nStagger)/FONTM(6,THIS.oFrame.FontName, THIS.oFrame.FontSize)        
     ENDIF

   ENDIF

   RETURN (NOT THIS.lError)         

ENDPROC
PROCEDURE togglefastzoommode
THIS.lFastZoomMode = NOT THIS.lFastZoomMode
IF NOT THIS.lFastZoomMode
   THIS.NotifyTargetRecordChanged()
ENDIF   
ENDPROC
PROCEDURE showfinddialog
IF THIS.lInCoverageFrame
   THIS.oFrame.Show()
ELSE
   ACTIVATE SCREEN
ENDIF

IF TYPE("THIS.frmFindDialog.BaseClass") # "C"

   LOCAL oFormRef,cAlias, cLibs

   #IF COV_COMPILED_IN_VFP5 
       cLibs = SET("CLASSLIB")
       cAlias = THIS.SetClassLibToAlias(COV_FIND_CLASSLIB ,THIS.cAppName)
   #ENDIF

   #IF COV_COMPILED_IN_VFP5
      THIS.AddObject("frmFindDialog",cAlias+"."+COV_FINDDIALOG)
   #ELSE
      THIS.NewObject("frmFindDialog",COV_FINDDIALOG, COV_FIND_CLASSLIB,THIS.cAppName)
   #ENDIF

   IF NOT EMPTY(cAlias) AND ;
      (ATC("ALIAS "+cAlias, SET("CLASSLIB")) > 0)
      RELEASE CLASSLIB ALIAS (cAlias)
      SET CLASSLIB TO &cLibs
   ENDIF
  
ENDIF
   
IF TYPE("THIS.frmFindDialog.BaseClass") = "C"
  
   THIS.frmFindDialog.Show()
      
ENDIF

RETURN NOT THIS.lError

ENDPROC
PROCEDURE settargetrow
LPARAMETERS tiRec, tcTargetAlias

LOCAL liSelect, liRec, liValue, lcTarget, liOldRec

IF EMPTY(tcTargetAlias) OR ;
   VARTYPE(tcTargetAlias) # "C" OR ;
   NOT USED(tcTargetAlias)
   lcTarget = UPPER(THIS.cTargetAlias)
ELSE
   lcTarget = UPPER(tcTargetAlias)
ENDIF   

IF NOT USED(lcTarget)
   * shouldn't be in here,
   * but theoretically this method
   * could be called as a refresh
   * at a moment that we're on our way out
   * (would not happen in existing code!)
   RETURN
ENDIF   

IF NOT UPPER(ALIAS()) == lcTarget
   liSelect = SELECT()
   SELECT (lcTarget)
ENDIF

WITH THIS.frmMainDialog.lstAvailableObjectsAndProcs

   IF VARTYPE(tiRec) = "N" AND NOT EMPTY(tiRec)
      
      IF EOF()
         GO BOTTOM
         * can't just use RECCOUNT() because of filters
      ENDIF

      liOldRec = RECNO()

      LOCATE
      COUNT WHILE RECNO() # tiRec TO liValue
      
      * have to do this to account for
      * deleted or filtered records -- no other way
      * to get the list index or value
      * that does not screw up on this account
      
      IF EOF()
         liRec = liOldRec
         liValue = .Value
      ELSE
         liValue = liValue + 1
         liRec = tiRec
      ENDIF

   ELSE   
   
      liRec = RECNO()
      liValue = .Value

   ENDIF
   
   GO liRec 
   .Value = liValue
   
ENDWITH

IF NOT EMPTY(liSelect)
   SELECT (liSelect)
ENDIF   

ENDPROC
PROCEDURE showtargettext
LPARAMETERS tcText, tlCaseSensitive, tlFindAgain 

LOCAL liPos, loDialog, lcTextBefore, liIncident, llFound, loWonTop

IF TYPE("THIS.frmMainDialog.Class") # "C"
   * called inappropriately
   RETURN .F.
ENDIF   

IF THIS.frmMainDialog.lInZoomMode
   loDialog = THIS.frmZoom
ELSE
   loDialog = THIS.frmMainDialog
ENDIF      

IF TYPE("THIS.frmFindDialog.BaseClass") = "C"
   loWontop = THIS.frmFindDialog
ELSE
   loWontop = NULL   
ENDIF

WITH loDialog.edtCode

   IF tlFindAgain AND .SelStart > 0
      lcTextBefore = SUBSTR(.Value,1,.SelStart+.SelLength)
      IF tlCaseSensitive
         liIncident = OCCURS(tcText,lcTextBefore)+1
      ELSE
         liIncident = OCCURS(UPPER(tcText),UPPER(lcTextBefore))+1
      ENDIF
   ELSE
      liIncident = 1
   ENDIF   

   IF VARTYPE(tcText) = "C" AND ;
      NOT EMPTY(tcText)

      IF tlCaseSensitive
         liPos = AT(tcText,.Value,liIncident)
      ELSE
         liPos = ATC(tcText,.Value, liIncident)
      ENDIF

   ENDIF
   
   IF NOT EMPTY(liPos)
      llFound = .T.
      .SelStart = liPos-1
      .SelLength = LEN(tcText)
      .SetFocus() 
      IF (NOT ISNULL(loWonTop)) 
         WITH .Parent
            IF BETWEEN(loWonTop.Top, ;
                        .Top, .Top+.Height) 
               loWonTop.Top = .Top+.Height 
            ENDIF
         ENDWITH
      ENDIF
   ELSE
      .SelStart = 0
      .SelLength = 0
   ENDIF
   
ENDWITH         
         
RETURN llFound AND (NOT THIS.lError)
ENDPROC
PROCEDURE setuioptions
IF DODEFAULT()
   LOCAL llZoom
   llZoom = ;
       THIS.GetRegistryKeyValue("ZoomMode",THIS.frmMainDialog.lInZoomMode)
   IF llZoom # THIS.frmMainDialog.lInZoomMode
      THIS.frmMainDialog.TogglePreviewZoomMode()
   ENDIF
   THIS.frmMainDialog.Resize()
   THIS.frmZoom.Resize()
ELSE
   RETURN .F.   
ENDIF

ENDPROC
PROCEDURE standardrightclick
SET TOPIC ID TO 1895825783

LOCAL llOutputChange

llOutputChange  = (VARTYPE(THIS.oFrame) = "O" AND ;
                   NOT THIS.oFrame.AllowOutput)                  
                   
IF llOutputChange
   THIS.oFrame.AllowOutput = .T.
   ACTIVATE WINDOW (THIS.oFrame.Name)
ENDIF   

DO COVSHORT.MPR

IF llOutputChange
   THIS.oFrame.AllowOutput = .F.
ENDIF   

SET TOPIC ID TO
RELEASE POPUP COVSHORT




ENDPROC
PROCEDURE showprojectstatistics
   LPARAMETERS tcSource, tcTarget, tcProject

   LOCAL iRecNo, cTarget
   
   cTarget = THIS.GetAlias(tcTarget,"Target")
   iRecNo = RECNO(cTarget)
   DODEFAULT(tcSource, tcTarget, tcProject)
   GO iRecNo IN (cTarget)

   IF NOT THIS.lError
      THIS.NotifyTargetRecordChanged()
   ENDIF

ENDPROC
PROCEDURE displayprojectstatistics
   LPARAMETERS tcSource, tcTarget, tcProject
   
   LOCAL cProject, iSelect, iState, wOnTopWind, cClauses, oForm
   
   cProject = THIS.GetAlias(tcProject, "Project")

   IF DODEFAULT(tcSource, tcTarget, tcProject)
   
      IF EMPTY(THIS.cProjectFRX) OR (NOT FILE(THIS.cProjectFRX))
         THIS.cProjectFRX = COV_PROJECT_FRX  && will be built into the APP
      ENDIF
   
      oForm = CREATEOBJECT("FORM")
      oForm.Caption = COV_APPLICATION_NAME_LOC + ;
                      COV_STATS_VIEW_PROJECT_LOC 
      * because I am re-using a LOC from
      * a button which may have a hotkey:
      oForm.Caption = STRTRAN(oForm.Caption,"\<","")

      iSelect = SELECT()

      SELECT (cProject)

      wOnTopWind = WONTOP()
     
      IF THIS.lVFP5
         iState = _SCREEN.WindowState
         _SCREEN.WindowState = 2
         ACTIVATE SCREEN
      ENDIF
      
      cClauses = " WINDOW (oForm.Name) "

      IF ((NOT THIS.lVFP5) AND THIS.lInCoverageFrame)
         cClauses = cClauses + ;
                    " IN WINDOW " + THIS.oFrame.Name
      ENDIF
      
      #IF COV_FRX_LANGUAGEOPTIONS_ISSUE
         LOCAL liLanguageOptions
         liLanguageOptions = _VFP.LanguageOptions
         _VFP.LanguageOptions = 0
      #ENDIF
            
      REPORT FORM (THIS.cProjectFRX) PREVIEW &cClauses NOWAIT
      
      SET DATASESSION TO (THIS.DataSessionId) 
      
      #IF COV_FRX_LANGUAGEOPTIONS_ISSUE
         _VFP.LanguageOptions = liLanguageOptions
      #ENDIF

      IF THIS.lVFP5
         _SCREEN.WindowState = iState
      ENDIF
      
      IF THIS.lInCoverageFrame
         THIS.oFrame.Show()
      ENDIF

      IF NOT EMPTY(wOnTopWind)
         ACTIVATE WINDOW (wOnTopWind) TOP
      ELSE 
         ACTIVATE SCREEN
      ENDIF

      SELECT (iSelect)

   ENDIF

   RETURN NOT THIS.lError

ENDPROC
PROCEDURE showstatistics
   IF DODEFAULT()

      THIS.MarkOneTargetRecord() && JIC
      THIS.ShowModalDialog(COV_STATISTICSDIALOG, COV_STATISTICS_CLASSLIB)

   ENDIF

ENDPROC
PROCEDURE togglecoverageprofilemode
   LPARAMETERS tcSource,tcTarget

   IF DODEFAULT(tcSource,tcTarget)
      THIS.SetUIToShowCode(tcSource,tcTarget)
      THIS.NotifyTargetRecordChanged()

   ENDIF

   RETURN NOT THIS.lError

ENDPROC
PROCEDURE setuifonts
   THIS.frmMainDialog.lstAvailableObjectsAndProcs.FontName =  ;
        THIS.cBaseFontName
   THIS.frmMainDialog.lstAvailableObjectsAndProcs.FontSize =  ;
        THIS.nBaseFontSize
   THIS.frmMainDialog.lstAvailableObjectsAndProcs.FontItalic =  ;
        THIS.lBaseFontItalic
   THIS.frmMainDialog.lstAvailableObjectsAndProcs.FontBold =  ;
        THIS.lBaseFontBold
   
   THIS.frmMainDialog.SetListRowHeight()

   STORE THIS.cBaseMonoFontName TO ;
      THIS.frmMainDialog.edtCode.FontName, ;
      THIS.frmZoom.edtCode.FontName
   STORE THIS.nBaseMonoFontSize TO ;
      THIS.frmMainDialog.edtCode.FontSize, ;
      THIS.frmZoom.edtCode.FontSize
   STORE THIS.lBaseMonoFontItalic TO ;
      THIS.frmMainDialog.edtCode.FontItalic, ;
      THIS.frmZoom.edtCode.FontItalic
   STORE THIS.lBaseMonoFontBold TO ;
      THIS.frmMainDialog.edtCode.FontBold, ;
      THIS.frmZoom.edtCode.FontBold

IF THIS.frmMainDialog.Visible      
   THIS.frmMainDialog.SynchSizes()
ENDIF   
   
         
ENDPROC
PROCEDURE setuitoshowfilestates
   LPARAMETERS tcSource, tcTarget

   IF DODEFAULT(tcSource, tcTarget) 
   
      IF EMPTY(tcTarget) OR (UPPER(tcTarget) == UPPER(THIS.cTargetAlias))
 
         THIS.frmMainDialog.cntTools.opgCoverageProfileMode.Value = ;
            IIF(THIS.lInProfileMode,2,1)

         THIS.frmMainDialog.Caption = THIS.cSourceFile+" - "+ ;
            COV_DIALOG_CAPTION_LOC

         THIS.frmMainDialog.lstAvailableObjectsAndProcs.Value = 1

         THIS.NotifyTargetRecordChanged()
         THIS.frmMainDialog.Show()
      ELSE
         * we're in the middle of getting the Engine to parse some
         * other files we don't want to show in the standard UI 
         * and we don't want to disturb the standard Main Dialog
         * during this process
      ENDIF


   ENDIF

   RETURN NOT THIS.lError

ENDPROC
PROCEDURE setuitoshowcode
   LPARAMETERS tcSource,tcTarget
   
   LOCAL cSource,cTarget
   cSource = THIS.GetAlias(tcSource,"Source")
   cTarget = THIS.GetAlias(tcTarget,"Target")

   IF cTarget == THIS.cTargetAlias

      STORE "IIF(EMPTY("+cTarget+".ObjClass),["+;
                 COV_FULL_SOURCE_FILE_LOC+"], "+;
                 "IIF([!] $ "+cTarget+".ObjClass, "+ ;
                     "SUBSTR("+cTarget+".ObjClass,AT([!],"+cTarget+".ObjClass)+1),"+ ;
                     cTarget+".ObjClass)), "+ ;
                 "IIF(.T.,SPACE(1) +"+ cTarget+".HostFile,[])" TO ;
         THIS.frmMainDialog.lstAvailableObjectsAndProcs.RowSource
         
      STORE cTarget+ ;
         IIF(THIS.lInProfileMode, ".Profiled",".Marked")   ;
         TO ;
         THIS.frmMainDialog.edtCode.ControlSource, ;
         THIS.frmZoom.edtCode.ControlSource

      IF THIS.frmMainDialog.Visible
         THIS.frmMainDialog.SynchSizes()
      ENDIF
      
      * because of IntegralHeight and MaxHeight that we 
      * want for list, which depends on number of source entries         
  ELSE
     * we're in the middle of getting the Engine to parse some
     * other files we don't want to show in the standard UI         
  
  ENDIF

  * the following simply makes sure that UI objects required by the
  * cov_standard component get built into any project that instantiates
  * cov_standard:
  
  EXTERNAL REPORT COV_PROJECT_FRX   
  
  EXTERNAL CLASS COV_MAINFORM_CLASSLIB
  EXTERNAL CLASS COV_ZOOMFORM_CLASSLIB
  EXTERNAL CLASS COV_STATISTICS_CLASSLIB
  EXTERNAL CLASS COV_OPTIONS_CLASSLIB
  EXTERNAL CLASS COV_ADDIN_CLASSLIB

  EXTERNAL FILE COVERAGE.ICO
  
  EXTERNAL FILE HO_SPLIT.CUR

  EXTERNAL FILE COVERAGE.BMP
  EXTERNAL FILE ADDINS.BMP
  EXTERNAL FILE OPEN.BMP
  EXTERNAL FILE PROFILE.BMP
  EXTERNAL FILE ZOOM.BMP
  EXTERNAL FILE OPTIONS.BMP
  EXTERNAL FILE SAVE.BMP
  EXTERNAL FILE PREVIEW.BMP
  EXTERNAL FILE STATS.BMP
  EXTERNAL FILE FIND.BMP

  EXTERNAL FILE COVERAGE.MSK
  EXTERNAL FILE ADDINS.MSK
  EXTERNAL FILE OPEN.MSK
  EXTERNAL FILE PROFILE.MSK
  EXTERNAL FILE ZOOM.MSK
  EXTERNAL FILE OPTIONS.MSK
  EXTERNAL FILE SAVE.MSK
  EXTERNAL FILE PREVIEW.MSK
  EXTERNAL FILE STATS.MSK
  EXTERNAL FILE FIND.MSK
  

ENDPROC
PROCEDURE markonetargetrecord
   LPARAMETERS tcSource, tcTarget, tlDoingAll

   LOCAL lReturn

   lReturn = DODEFAULT(tcSource, tcTarget, tlDoingAll)

   IF NOT lReturn
      IF THIS.iTargetReccount > 0
         THIS.iTargetReccount = THIS.iTargetReccount - 1
      ENDIF
      THIS.SetUIToShowCode(tcSource, tcTarget)      
   ENDIF

   RETURN lReturn

ENDPROC
PROCEDURE createforms
   LOCAL lReturn, laCheck[1], cMainAlias, cZoomAlias,cLibs

   lReturn = DODEFAULT()

   IF lReturn
      IF THIS.lInCoverageFrame
         THIS.oFrame.Show()
      ELSE
         ACTIVATE SCREEN
      ENDIF

  
      #IF COV_COMPILED_IN_VFP5 
         cLibs = SET("CLASSLIB")
         cMainAlias = THIS.SetClassLibToAlias(COV_MAINFORM_CLASSLIB,THIS.cAppName)
         cZoomAlias = THIS.SetClassLibToAlias(COV_ZOOMFORM_CLASSLIB,THIS.cAppName)
         THIS.AddObject("frmMainDialog",cMainAlias+"."+COV_MAINFORM)         
         THIS.AddObject("frmZoom",cZoomAlias+"."+COV_ZOOMFORM) 
         IF NOT EMPTY(cMainAlias+cZoomAlias)         
            IF NOT EMPTY(cLibs)        
               SET CLASSLIB TO &cLibs
            ELSE
               SET CLASSLIB TO
            ENDIF
         ENDIF
      #ELSE
         THIS.NewObject("frmMainDialog",COV_MAINFORM,COV_MAINFORM_CLASSLIB,THIS.cAppName)      
         THIS.NewObject("frmZoom",COV_ZOOMFORM,COV_ZOOMFORM_CLASSLIB,THIS.cAppName)      
      #ENDIF

      IF TYPE("THIS.frmMainDialog.Name") # "C" OR ;
         ACLASS(laCheck,THIS.frmMainDialog) = 0 OR ;
         ASCAN(laCheck,"COV_MAINDIALOG_STANDARD") = 0 OR ;
         TYPE("THIS.frmZoom.Name") # "C" OR ;
         ACLASS(laCheck,THIS.frmZoom) = 0 OR ;
         ASCAN(laCheck,"COV_ZOOMDIALOG") = 0 
         MESSAGEBOX(COV_BADDIALOGS_LOC,COV_STOP_MESSAGEBOX)
         lReturn = .F.
      ENDIF
   ENDIF

   RETURN lReturn AND NOT THIS.lError
   
   
ENDPROC
PROCEDURE saveformsetattributes
IF DODEFAULT()
   IF TYPE("THIS.frmMainDialog.Class") = "C"
      THIS.SetRegistryKeyValue("ZoomMode",THIS.frmMainDialog.lInZoomMode)      
      THIS.SetRegistryKeyValue("FastZoom",THIS.lFastZoomMode)   
      THIS.frmMainDialog.Release()      
   ELSE
      * may be an early quit   
   ENDIF   
ELSE
   RETURN .F.
ENDIF      

ENDPROC
PROCEDURE setformsetattributes
THIS.lFastZoomMode = ;
   THIS.GetRegistryKeyValue("FastZoom", THIS.lFastZoomMode)
RETURN DODEFAULT()
ENDPROC
PROCEDURE Init
LPARAMETERS tcFile,tlUnattended,tcAddin
IF DODEFAULT(tcFile,tlUnattended,tcAddin)
   #IFDEF COV_OKL_SHOW_FIND_DIALOG
      ON KEY LABEL COV_OKL_SHOW_FIND_DIALOG COV_PUBLIC_VARIABLE.ShowFindDialog()
   #ENDIF
ELSE
   RETURN .F.
ENDIF      
ENDPROC
PROCEDURE Destroy
#IFDEF COV_OKL_SHOW_FIND_DIALOG
   ON KEY LABEL COV_OKL_SHOW_FIND_DIALOG
#ENDIF   
DODEFAULT()

ENDPROC
]cprojectfrx = ("")
lincoverageframe = .T.
oframe = .NULL.
lsaveformpositions = .T.
Name = "cov_standard"
cov_toolbar.cusRegistry.Top = 3
cov_toolbar.cusRegistry.Left = 5
cov_toolbar.cusRegistry.Name = "cusRegistry"
cov_toolbar.Height = 21
cov_toolbar.Left = 0
cov_toolbar.Top = 0
cov_toolbar.Width = 33
cov_toolbar.Name = "cov_toolbar"
  �&(( @����������������������������wwwwwwwwww����������������������������������wp��wwx��������wwxp��������wwwx��������wwwxw�������~wwxw�������~wwxw���wxp����������x����wp������������������������������������������������������x������������������������������������������������ǀ���?�������?�?���������������������?�����������( �������������������������������������x��w���wxp���xp��x����x��������������?BM�v(����������������������������������������33330��3333��33330��3333���������������������������������������������������������BM�v(����������������������������������������3w�3w�3w�3�333333�33�0wwww�0wwww�0wwww�0wwww�0wwww�0wwww���������BM�v(���������������������������������������������������������������������������������������������������������������������������������BM�v(����������������������������������������������������������������������������������������������������������������������������������BM�v(����������������������������������������������������x���w���wxp����xp����x�����x������������������������������BM�v(���������������������������������������������������������������������������DDDDD��DDDDD�������������������������������������BM�v(�����������������������������������������������������������������������������������������������������������������BM�v(�����������������������������������������������������������������������������������������������������������������������������������������������BM�v(��������������������������������������������������wwww�������������������0��0����30����30��3������������* COV_CHAR.H
* character constants in use by Coverage app

#DEFINE C_TAB                       CHR(9)
* tab character
#DEFINE C_NULL                      CHR(0)
* null character
#DEFINE C_TAB_REPLACEMENT           REPL("#",5)
* we may need to replace tabs during processing
#DEFINE C_INLINECOMMENT             CHR(38)+CHR(38)
* double ampersand
#DEFINE C_COMMENT                   CHR(42)
* asterisk
#DEFINE C_DEFINE                    CHR(35)
* hash or pound sign
#DEFINE C_CR                        CHR(13)
* carriage return
#DEFINE C_DOUBLE_CR                 CHR(13)+CHR(13)
* double carriage return
#DEFINE C_CONTINUATION_SYMBOL       CHR(59)
* semi-colon
* COV_DLGS.H
* Constants for components in use by Coverage app

*&* Messagebox:
#DEFINE COV_STOP_MESSAGEBOX                     16,COV_DIALOG_CAPTION_LOC+" "+COV_PROBLEM_LOC
#DEFINE COV_INFO_MESSAGEBOX                     64,COV_DIALOG_CAPTION_LOC+" "+COV_INFO_LOC
#DEFINE COV_YESNOCANCEL_MESSAGEBOX              32+3,COV_DIALOG_CAPTION_LOC
#DEFINE COV_WARNING_YESNO_MESSAGEBOX            48+4,COV_DIALOG_CAPTION_LOC
#DEFINE IDYES                                   6
#DEFINE IDNO                                    7
#DEFINE IDCANCEL                                2 


*&* common dialog classes in use:

#DEFINE COV_COMMON_FILE_DIALOG_CLASS            "scov_CommonFileDialog"
#DEFINE COV_COMMON_DIALOG_CLASS                 "scov_CommonDialog"

#DEFINE cdlScaleModePixels                      3

*&* common dialog flag constants and results for getfont:
#DEFINE cdlCFScreenFonts                        0x1
* Screen fonts supported by the system only
#DEFINE cdlCFANSIOnly                           0x400
* Specifies that the dialog box allows only a selection of the fonts that use the Windows character set. 
* If this flag is set, the user won't be able to select a font that contains only symbols.
#DEFINE cdlCFForceFontExist                     0x10000
* Specifies that an error message box is displayed if the user attempts to select a font or style that doesn't exist.
#DEFINE cdlCFNoStyleSel	                        0x100000
* No style
#DEFINE cdlCFFixedPitchOnly	                    0x4000	
* Specifies that the dialog box selects only fixed-pitch fonts

*&* common dialog constants for getfile/putfile:
#DEFINE cdlOFNPathMustExist                     0x800	
* User can enter only valid path names.
#DEFINE cdlOFNNoChangeDir                       0x8
* Sets the current directory to what it was when the dialog box was invoked.
#DEFINE cdlOFNHideReadOnly                      0x4
* Hide readonly checkbox
#DEFINE cdlOFNExplorer                          0x80000	
* Use Explorer dialog template

*&* addtl common dialog constant for getfile/reads:
#DEFINE cdlOFNFileMustExist                     0x1000	
* User can enter only names of existing files.

*&* addtl common dialog constants for putfile/writes:
#DEFINE cdlOFNOverwritePrompt                   0x2
* User must confirm whether to overwrite the file.
#DEFINE cdlOFNNoReadOnlyReturn                  0x8000
* File can't be Read Only and can't be in a write-protected dir.


* COV_LOCS.H
* String constants in use by Coverage app

* NB: some of these #DEFINEs are dependent on COV_CHAR.H
* definitions, so this file is #INCLUDEd after COV_CHAR.H
* in COVERAGE.H

#DEFINE COV_LOC                       "English-US"

#IF UPPER(COV_LOC) = "ENGLISH-US"

   #DEFINE COV_APPLICATION_NAME_LOC             "Coverage Profiler"
   #DEFINE COV_DIALOG_CAPTION_LOC               COV_APPLICATION_NAME_LOC

   *&* error messages and other feedback:
   #DEFINE COV_PROBLEM_LOC                      "Problem"
   #DEFINE COV_INFO_LOC                         "Information"    
   #DEFINE COV_DEBUG_ERROR_LOC                  "Error #"
   #DEFINE COV_DEBUG_LINENO_LOC                 "Line #"
   #DEFINE COV_LOG_NOT_SPECIFIED_LOC            "No log file specified."
   #DEFINE COV_LOCATE_CLASSLIB_LOC              "Where is "+COV_APPLICATION_NAME_LOC+"'s VCX?"
   #DEFINE COV_FILE_DOES_NOT_EXIST_LOC          "File specified does not exist."
   #DEFINE COV_OKAY_TO_OVERWRITE_LOC            "File specified already exists. "+C_CR+"Okay to overwrite?"
   #DEFINE COV_ADDIN_DOES_NOT_EXIST_LOC         "Add-In file specified does not exist."
   #DEFINE COV_ADDIN_NOT_SUPPORTED_TYPE_LOC     "Add-In file specified is not a supported type."
   #DEFINE COV_LOG_CANNOT_BE_OPENED_LOC         "Log file unavailable."
   #DEFINE COV_SOURCE_CANNOT_BE_OPENED_LOC      "Source file unavailable."
   #DEFINE COV_START_LOGGING_LOC                "The log file you chose does not exist yet."+C_DOUBLE_CR + ;
                                                "Test your application with COVERAGE SET TO "+C_CR + ;
                                                "<your chosen filename>, then run "+COV_APPLICATION_NAME_LOC+C_CR+;
                                                "against that log."+C_DOUBLE_CR+;
                                                COV_APPLICATION_NAME_LOC+" can SET COVERAGE TO your filename "+ C_CR+;
                                                "now and you can test your application.  When you re-run "+ C_CR+;
                                                COV_APPLICATION_NAME_LOC+", it will analyze the current "+ C_CR+;
                                                "contents of SET('COVERAGE') by default."+C_DOUBLE_CR+;
                                                "Would you like to: "+C_DOUBLE_CR+;
                                                "SET COVERAGE TO your log file now? (yes)"+C_DOUBLE_CR+;
                                                "Pick a filename from existing coverage logs? (no)"+C_DOUBLE_CR+;
                                                "Come back later? (cancel)"
                                                
   #DEFINE COV_NO_COVERABLE_CODE_LOC            "A source code entry has no coverable code"+C_CR+;
                                                "or is a member of a container object."+C_DOUBLE_CR+;
                                                "This record will be deleted."

   #DEFINE COV_PROJECT_UNAVAILABLE_LOC          "Project file currently unavailable."
   #DEFINE COV_CANNOT_RESUME_LOC                "Former coverage file is unavailable;"+C_CR+"COVERAGE will be off."
   #DEFINE COV_LOG_WRONG_FORMAT_LOC             "File specified is not correct Coverage Log format for this version of VFP."
   #DEFINE COV_LOG_HAS_NO_USABLE_RECORDS_LOC    "Log file has no usable records."
   #DEFINE COV_NO_USABLE_PROJECT_RECORDS_LOC    "Project has no source-code-type records."
   #DEFINE COV_NO_LOG_ENTRIES_SKIPPED_LOC       "No log entries were skipped."
   #DEFINE COV_SWITCHING_OFF_COMMON_DIALOG_LOC  "Common Dialog OCX not found; "+ C_CR + ;
                                                "switching to native VFP code version."

   #DEFINE COV_FEATURE_NEEDS_OCX_LOC            "This feature is currently unavailable, "+C_CR+ ;
                                                "because it requires an ActiveX control "+C_CR+ ;
                                                "not found on your system."

   #DEFINE COV_ALREADY_ACTIVE_LOC               COV_APPLICATION_NAME_LOC+" already active!"
   
   #DEFINE COV_REOPEN_SAME_LOG_FILE_LOC         "You haven't changed the specified Coverage filename."+ ;
                                                C_DOUBLE_CR+;
                                                "Do you want to re-examine this Coverage file?"
                                                
   #DEFINE COV_MARKS_CHANGED_LOC                "You have changed Coverage marks, but some records "+C_CR+;
                                                "in the current log are already marked. "+ ;
                                                C_DOUBLE_CR+ ;
                                                "Would you like to: "+ ;
                                                C_DOUBLE_CR+ ;
                                                "Preserve current marked records (yes) or "+ ;
                                                C_DOUBLE_CR+ ;
                                                "Empty and re-mark these records (no)?"

   #DEFINE COV_MARK_ALL_NOW_LOC                 "You have chosen to mark all records on load, but "+C_CR+;
                                                "some records in the current log may not be marked yet. "+ ;
                                                C_DOUBLE_CR+ ;
                                                "Would you like to mark all records now?"                                                
   
   #DEFINE COV_RESUME_LOC                       "Running Coverage Profiler temporarily suspended" + C_CR + ;
                                                "coverage logging to " + THIS.cSuspendedLog + "." + ;
                                                C_DOUBLE_CR + ;
                                                "How would you like to resume coverage logging to this file?" + ;
                                                C_DOUBLE_CR + ;
                                                "Click:"+ C_TAB + "To have this effect:" + ;
                                                C_DOUBLE_CR + ;  
                                                "Yes"+ SPACE(2) + C_TAB + "-- Append records to the log file" + C_CR + ;
                                                "No"+ SPACE(3) + C_TAB + "-- Overwrite the log file" + C_CR + ;
                                                "Cancel"+ C_TAB + "-- Leave coverage set off"

   #DEFINE COV_BAD_PARAMS_LOC                   "You have passed one or more parameters incorrectly." + ;
                                                C_DOUBLE_CR+ ;
                                                "This application takes the following "+ C_CR + ;
                                                "parameters, all optional:"+ ;
                                                C_DOUBLE_CR + ;
                                                "(1), type 'C'     the name of a coverage log to mark;"+ ;
                                                C_DOUBLE_CR + ;
                                                "(2), type 'L'     a switch to process the log unattended;" + ;
                                                C_DOUBLE_CR + ;
                                                "(3), type 'C'     the name of an Add-In program to run."
  #DEFINE COV_BADDIALOGS_LOC                    "Cov_Standard's .cMainDialogClass and/or .cZoomDialogClass"+C_CR+;
                                                "have been incorrectly assigned."+C_DOUBLE_CR+;
                                                "This Coverage User Interface class must contain dialogs"+C_CR+;
                                                "descended from "+ ;
                                                "cov_MainDialog_Standard and cov_ZoomDialog."
   
   *&*GETFILE/PUTFILE dialog titles, filters, etc:
   #DEFINE COV_GETMAINFILE_TITLE_LOC            "Please confirm main program for"
   #DEFINE COV_GETSOURCEFILE_TITLE_LOC          "Please locate"
   #DEFINE COV_SETTARGETDBF_TITLE_LOC           "Please specify location to save Coverage results for"
   #DEFINE COV_SETSTACKXML_TITLE_LOC            "Please specify location to save Coverage StackLevel XML for"
   #DEFINE COV_SETTRANSFORMEDXML_TITLE_LOC      "Please specify location to save transformed file for"
   #DEFINE COV_GETXSLTFILE_TITLE_LOC            "Please specify an XSL Transformation file"
   #DEFINE COV_SAVEDTARGET_AS_LOC               "Your coverage analysis is saved as"   
   #DEFINE COV_SAVEDSTACKXML_AS_LOC             "Your coverage stack analysis is saved as"      
   #DEFINE COV_SAVEDSKIPFILES_AS_LOC            "Some source files could not be located;"+C_CR+;
                                                "their names are saved in a second table"  
   #DEFINE COV_GETLOGFILE_TITLE_LOC             "Please specify coverage log file"
   #DEFINE COV_GETPROJECTFILE_TITLE_LOC         "Please specify a project file to check"
   #DEFINE COV_GETADDINFILE_TITLE_LOC           "Please specify an Add-In to run"
   #DEFINE COV_GETFILE_BUTTON_LOC               "Select"
   #DEFINE COV_LOGFILES_LOC                     "Coverage Logs"
   #DEFINE COV_ALLFILES_LOC                     "All Files"
   #DEFINE COV_XMLFILES_LOC                     "XML Files"
   #DEFINE COV_XSLFILES_LOC                     "XSL Transforms"
   #DEFINE COV_HTMFILES_LOC                     "HTML Files"
   #DEFINE COV_PROJECTSONLY_LOC                 "Projects Only"
   #DEFINE COV_PROGRAMSONLY_LOC                 "Programs Only"
   #DEFINE COV_DBFSONLY_LOC                     "Table/DBF"
   #DEFINE COV_SOURCEFILES_LOC                  "Source Files"   

   *&* wait window nowait /status bar messages during processing
   #DEFINE COV_FILLING_ALL_RECORDS_LOC          "Checking Coverage of all target source files..."
   #DEFINE COV_MARKING_ALL_RECORDS_LOC          "Marking all source code..."
   #DEFINE COV_EMPTYING_ALL_RECORDS_LOC         "Changing Coverage modes and emptying marked code..."
   #DEFINE COV_CREATING_FILES_FROM_LOC          "Creating work files from"
   #DEFINE COV_CHECKING_SOURCE_AVAIL_FROM_LOC   "Checking for source code for"
   #DEFINE COV_MARKING_SOURCE_FOR_LOC           "Marking source code for"
   #DEFINE COV_GETTING_SOURCECODE_FROM_LOC      "Getting source code from"
   #DEFINE COV_CHECKING_FOR_VALID_LOG_LOC       "Validating source file..."
   #DEFINE COV_INDEXING_SOURCE_RECORDS_LOC      "Indexing source records..."
   #DEFINE COV_CREATING_TARGET_ITEMS_LOC        "Creating target items..."
   #DEFINE COV_LOADING_STACKINFO_LOC            "Loading log for StackLevel analysis" 
   #DEFINE COV_GENERATING_STACKXML_LOC          "Generating StackLevel XML for"  
   #DEFINE COV_WRITING_STACKXML_LOC             "Writing StackLevel XML to disk"
   #DEFINE COV_WRITING_TRANSFORM_LOC            "Writing transformed file to disk"
   
                                                
   *&* main dialog buttons (tooltips and default captions if no pictures)
   #DEFINE COV_OPEN_LOC                         "Open"
   #DEFINE COV_SAVE_LOC                         "Save"   
   #DEFINE COV_COVERAGE_MODE_LOC                "Coverage Mode"
   #DEFINE COV_PROFILE_MODE_LOC                 "Profile Mode"
   #DEFINE COV_PREVIEW_MODE_LOC                 "Preview Mode"
   #DEFINE COV_ZOOM_MODE_LOC                    "Zoom Mode"
   #DEFINE COV_STATISTICS_LOC                   "Statistics"
   #DEFINE COV_OPTIONS_LOC                      "Options"
   #DEFINE COV_ADDINS_LOC                       "Add-Ins"   
   #DEFINE COV_HELP_LOC                         "Help"
   #DEFINE COV_OKCLOSE_LOC                      "OK"
   #DEFINE COV_CANCEL_LOC                       "Cancel"   
   #DEFINE COV_FIND_LOC                         "Find"
   
   *&* Main and Zoom dialog strings      
   #DEFINE COV_FULL_SOURCE_FILE_LOC             "All Classes, Objects, Procs"
   #DEFINE COV_ZOOM_MARKED_CODE_FOR_LOC         "Marked Code For"  
   #DEFINE COV_ZOOM_GET_CODE_LOC                "Fast Mode: DoubleClick/Enter on List for Code"
   #DEFINE COV_PROFILE_MARK_1ST_LOC             "1st"
   #DEFINE COV_PROFILE_MARK_AVG_LOC             "Avg"   
   #DEFINE COV_PROFILE_ONE_HIT_LOC              "Hit"
   #DEFINE COV_PROFILE_HITS_LOC                 "Hits"

   *&* Statistics dialog and reporting
   #DEFINE COV_STATS_VIEW_DETAILS_LOC           "View details"
   #DEFINE COV_STATS_VIEW_FILES_SKIPPED_LOC     "\<Source Files Skipped"
   #DEFINE COV_STATS_VIEW_SOURCE_LOG_LOC        "Source Text \<Log"
   #DEFINE COV_STATS_VIEW_PROJECT_LOC           "Statistics by \<Project..."
   
   #DEFINE COV_STATS_LINES_COVERABLE_LOC        "Total coverable lines"
   #DEFINE COV_STATS_LINES_HIT_LOC              "Line(s) hit"
   #DEFINE COV_STATS_LINES_MISSED_LOC           "Line(s) missed"
   #DEFINE COV_STATS_PCT_LINES_LOC              "% Covered Linecount"
   #DEFINE COV_STATS_OBJS_COVERABLE_LOC         "Classes with code"
   #DEFINE COV_STATS_OBJS_HIT_LOC               "Class(es) hit"
   #DEFINE COV_STATS_OBJS_MISSED_LOC            "Class(es) missed"
   #DEFINE COV_STATS_PCT_OBJS_LOC               "% Covered Classes"
   #DEFINE COV_STATS_FULL_FILE_LOC              "All Objects and Procs"

   #DEFINE COV_STATS_PJXFILES_HIT_LOC           "Project Source Files Hit"
   #DEFINE COV_STATS_PJXFILES_COVERABLE_LOC     "Total Source Code Files For Project"
   #DEFINE COV_STATS_PJXLINES_HIT_LOC           "Total Project Lines Hit"
   #DEFINE COV_STATS_PJXLINES_COVERABLE_LOC     "Total Lines Coverable Code in Files Hit"
   #IF ATC("FoxPro 05",VERSION()) > 0
      #DEFINE COV_STATS_PJXOBJS_HIT_LOC            "Total Classes Hit in Project VCXs and SCXs"
      #DEFINE COV_STATS_PJXOBJS_COVERABLE_LOC      "Total Classes in Project VCXs and SCXs contain code"
   #ELSE
      #DEFINE COV_STATS_PJXOBJS_HIT_LOC            "Total Classes Hit in Project VCXs, SCXs, FRXs, and LBXs"
      #DEFINE COV_STATS_PJXOBJS_COVERABLE_LOC      "Total Classes in Project VCXs, SCXs, FRXs, and LBXs contain code"
   #ENDIF
   #DEFINE COV_STATS_PCT_PJXFILES_LOC           "% Project Coverage by Files"
   #DEFINE COV_STATS_PCT_PJXLINES_LOC           "% Project Coverage by Lines (Files Hit Only)"
   #DEFINE COV_STATS_PCT_PJXOBJS_LOC            "% Class Code Coverage for Project Files Hit"
   #DEFINE COV_STATS_FILE_NOT_HIT_LOC           "File skipped or not logged"
   
   *&* Options dialog
   #DEFINE COV_OPT_SMARTPATH_LOC                "Use \<Smart Pathing"
   #DEFINE COV_OPT_REGISTER_ADDINS_LOC          "Register \<Add-Ins when run"   
   #DEFINE COV_OPT_MARKALL_LOC                  "\<Mark all code while log loads"
   #DEFINE COV_OPT_COVERAGE_MARKS_LOC           "Coverage marks"
   #DEFINE COV_OPT_MARKS_WILL_BE_MATCHED_LOC    "Mark lengths will be matched"
   #DEFINE COV_OPT_MARK_EXECUTED_LOC            "\<Executed:"
   #DEFINE COV_OPT_MARK_NOT_EXECUTED_LOC        "\<Not executed:"
   #DEFINE COV_OPT_FONTS_LOC                    "Fonts"
   #DEFINE COV_OPT_GETFONT_LOC                  "D\<isplay Font..."
   #DEFINE COV_OPT_GETFIXEDFONT_LOC             "C\<ode Font..."
   #DEFINE COV_OPT_SET_DEFAULTS_LOC             "Set as \<default"
   #DEFINE COV_OPT_START_IN_LOC                 "Start mode"
   #DEFINE COV_OPT_START_COVERAGE_LOC           "\<Coverage"   
   #DEFINE COV_OPT_START_PROFILE_LOC            "\<Profile"
   #DEFINE COV_OPT_ENVIRONMENT_LOC              "Environment"
   #DEFINE COV_OPT_COVFRAME_LOC                 "Co\<verage frame"
   #DEFINE COV_OPT_VFPFRAME_LOC                 "Fo\<xPro frame"
   #DEFINE COV_OPT_STACK_LOC                    "StackLevel XML analysis"
   #DEFINE COV_OPT_STACK_EXTENDED_LOC           "\<Generate extended StackLevel tree"
   #DEFINE COV_OPT_STACK_XSLT_LOC               "XSL \<Transform..."
   
   
   
   *&* shortcut prompts (different hotkeys)
   #DEFINE COV_SC_SMARTPATH_LOC                "\<Use Smart Pathing"
   #DEFINE COV_SC_GETFONT_LOC                  "\<Display Font..."
   #DEFINE COV_SC_GETFIXEDFONT_LOC             "\<Code Font..."
   #DEFINE COV_SC_STATISTICS_LOC               "\<Statistics..."
   #DEFINE COV_SC_ADDINS_LOC                   "\<Add-Ins..."
   #DEFINE COV_SC_SOURCELOG_LOC                "\<View Source Log"
   #DEFINE COV_SC_ARRANGE_LOC                  "Cascade \<Windows"
   #DEFINE COV_SC_FASTZOOM_LOC                 "Fast \<Zoom Mode"
   #DEFINE COV_SC_STACKLEVEL_LOC               "\<Generate StackLevel XML"      
   #DEFINE COV_SC_VIEW_STACKLEVEL_LOC          "View Stac\<kLevel XML"
   #DEFINE COV_SC_STACK_TRANSFORM_LOC          "\<Transform StackLevel XML"
   #DEFINE COV_SC_STACKLEVEL_EXTENDED_LOC      "E\<xtended StackLevel XML"
   
   
   *&* Add-Ins dialog
   #DEFINE COV_ADDIN_REGISTER_LOC               "Register this \<Add-In after running"
   #DEFINE COV_ADDIN_RUN_LOC                    "\<Run"
   
   *&* Find dialog
   #DEFINE COV_FIND_NOTFOUND_LOC               "Not found!"
   #DEFINE COV_FIND_FIND_LOC                   "\<Find"
   #DEFINE COV_FIND_FINDNEXT_LOC               "Find \<Next"
#ELSE

   * this case can contain empty #defs,
   * for pasting to new #ELIF cases above

#ENDIF
* COV_REGS.H
* constants for Coverage Standard UI app registry object
* constant list and procs excerpted from REGISTRY.PRG
* Copyright (c) 1995,1996 Sierra Systems, Microsoft Corporation
* Written by Randy Brown
* Contributions from Matt Oshry, Calvin Hsia
* Delivered as a PRG sample in VFP 5
*
* Randy's Registry class provides a complete library of API
* calls to access the Windows Registry. Support is provided
* for Windows 32S, Windows NT amd Windows 95. Included for
* backward compatibility with older applications which still
* use INI files are several routines which access INI sections
* and details. Finally, several valuable routines are included
* for accessing ODBC drivers and data sources.

* The Coverage registry object is a lighterweight
* version that subsets Randy's Registry functionality
* and adds some VFP6- and Coverage- specific items.

* Operating System codes
#DEFINE   OS_NT            2
#DEFINE   OS_WIN95         3

* DLL Paths for various operating systems
#DEFINE DLLPATH_NT         "\SYSTEM32\"
#DEFINE DLLPATH_WIN95      "\SYSTEM\"

* DLL files used to read registry
#DEFINE   DLL_ADVAPI_NT      "ADVAPI32.DLL"
#DEFINE   DLL_ADVAPI_WIN95   "ADVAPI32.DLL"

* Registry roots
#DEFINE HKEY_CLASSES_ROOT           -2147483648  && BITSET(0,31)
#DEFINE HKEY_CURRENT_USER           -2147483647  && BITSET(0,31)+1
#DEFINE HKEY_LOCAL_MACHINE          -2147483646  && BITSET(0,31)+2
#DEFINE HKEY_USERS                  -2147483645  && BITSET(0,31)+3

* Misc
#DEFINE APP_PATH_KEY                "\Shell\Open\Command"
#DEFINE OLE_PATH_KEY                "\Protocol\StdFileEditing\Server"
* #DEFINE VFP5_KEYPATH                "Software\Microsoft\VisualFoxPro\5.0"
* #DEFINE VFP6_KEYPATH                "Software\Microsoft\VisualFoxPro\6.0"

* the above #DEFINEs are replaced by a version-independent
* expression, at least for the current known keys:
#DEFINE VFP_KEYVERSION              TRANS(VAL(SUBSTR(SUBSTR(VERS(),AT(" ",VERS(),2)+1),;
                                         1,AT(".",SUBSTR(VERS(),AT(" ",VERS(),2)+1),1)-1)))+ ;
                                    ".0"
* if desired for future versions that don't fit the
* current pattern,
* the above expression can be explictly here
* overridden for these versions, for example:
* #IF "7.3" $ VERS()
*    #UNDEF VFP_KEYVERSION
*    #DEFINE VFP_KEYVERSION   "7.3"
* #ENDIF
   
#DEFINE VFP_KEYPATH                 "Software\Microsoft\VisualFoxPro\"+VFP_KEYVERSION
#DEFINE VFP_COVERAGE_KEY            "\Coverage"
#DEFINE VFP_OPTIONS_KEY             "\Options"
#DEFINE CURVER_KEY                  "\CurVer"

* Error Codes
#DEFINE ERROR_SUCCESS      0   && OK
#DEFINE ERROR_EOF          259 && no more entries in key

* Note these next error codes are specific to this Class, not DLL
#DEFINE ERROR_NOAPIFILE      -101   && DLL file to check registry not found
#DEFINE ERROR_KEYNOREG       -102   && key not registered
#DEFINE ERROR_BADPARM        -103   && bad parameter passed
#DEFINE ERROR_NOENTRY        -104   && entry not found
#DEFINE ERROR_BADKEY         -105   && bad key passed
#DEFINE ERROR_NONSTR_DATA    -106   && data type for value is not a data string
#DEFINE ERROR_BADPLAT        -107   && platform not supported
#DEFINE ERROR_NOINIFILE      -108   && DLL file to check INI not found
#DEFINE ERROR_NOINIENTRY     -109   && No entry in INI file
#DEFINE ERROR_FAILINI        -110   && failed to get INI entry
#DEFINE ERROR_NOPLAT         -111   && call not supported on this platform
#DEFINE ERROR_NOODBCFILE     -112   && DLL file to check ODBC not found
#DEFINE ERROR_ODBCFAIL       -113   && failed to get ODBC environment

* Data types for keys
#DEFINE REG_SZ             1   && Data string
#DEFINE REG_BINARY         3   && Binary data in any form.
#DEFINE REG_DWORD          4   && A 32-bit number.

* Data types labels
#DEFINE REG_BINARY_LOC      "*Binary*"         && Binary data in any form.
#DEFINE REG_DWORD_LOC       "*Dword*"         && A 32-bit number.
#DEFINE REG_UNKNOWN_LOC      "*Unknown type*"   && unknown type


* COV_SPEC.H
* Constants required by current Coverage app specifications

#DEFINE COV_COMPILED_IN_VFP5       ( "PRO 05." $ UPPER(VERSION()) )

#DEFINE COV_MESSAGE_LIMIT           254
* used to trim WAIT WINDOW messages to the legal limit

* Legal path length:
#DEFINE N_VFP_PATH_LIMIT           1024

* FRX Object Types:
#DEFINE N_FRX_DATAENVIRONMENT_OBJTYPE    25
#DEFINE N_FRX_CURSOR_RELATION_OBJTYPE    26

* Mouse Pointers:
#DEFINE MOUSEPOINTER_ARROW_UP        10
#DEFINE MOUSEPOINTER_HOURGLASS       11
#DEFINE MOUSEPOINTER_ARROW_EW        9
#DEFINE MOUSEPOINTER_SIZE_NS         7
#DEFINE MOUSEPOINTER_DEFAULT         0

* set by format of internally-created log:
#DEFINE N_COVLOG_FIELDCOUNT_V5       5
#DEFINE N_COVLOG_FIELDCOUNT_V6       6
#DEFINE N_COVLOG_PRECISION           IIF("05." $ VERS() OR ;
                                         ("06.00" $ VERS() AND ;
                                           VAL(SUBS(VERS(4),7)) < ;
                                          8365),;
                                          3,6)
   

* original: "06.00" $ VERS(),3,6)

#DEFINE COV_LOG_DELIMITER            ,
* comma, at least so far!
* and you can't use CHR(44) or any other
* variant thereof, that I can find...

* currently required:
#DEFINE COV_IGNORE_COVERAGE_FILES     .T.
#DEFINE COV_KNOWN_ALIAS_PROPERTIES    "SOURCE","TARGET","SKIPPED","COVFILES","PROJECT"
#DEFINE COV_KNOWN_PJX_TYPES           "K","V","P","M","Q","R","B","F","d"
#DEFINE COV_BASE_CLASSLIB             "COVERAGE.VCX"

#DEFINE COV_FRX_LANGUAGEOPTIONS_ISSUE .T.

* COV_TUNE.H
* Default/tunable option settings for Coverage app

* reference variable for the formset:
#DEFINE COV_PUBLIC_VARIABLE         _oCoverage

* class to instance:
#DEFINE COV_CLASS_TO_INSTANCE       "cov_standard"
#DEFINE COV_CLASS_CLASSLIB          "COVERAGE.VCX"

* forms in use by the cov_standard interface:
#DEFINE COV_MAINFORM                "cov_maindialog_standard"
#DEFINE COV_ZOOMFORM                "cov_zoomdialog"
#DEFINE COV_MAINFORM_CLASSLIB       "COVERAGE.VCX"
#DEFINE COV_ZOOMFORM_CLASSLIB       "COVERAGE.VCX"
* The two form classes must descend from 
* cov_maindialog_standard and
* cov_zoomdialog,
* or cov_standard will refuse to instantiate.

* dialogs in use by the cov_standard interface:
#DEFINE COV_STATISTICSDIALOG          "cov_statisticsdialog"
#DEFINE COV_STATISTICS_CLASSLIB       "COVERAGE.VCX"
#DEFINE COV_OPTIONSDIALOG             "cov_optionsdialog"
#DEFINE COV_OPTIONS_CLASSLIB          "COVERAGE.VCX"
#DEFINE COV_ADDINDIALOG               "cov_addindialog"
#DEFINE COV_ADDIN_CLASSLIB            "COVERAGE.VCX"
#DEFINE COV_FINDDIALOG                "cov_finddialog"
#DEFINE COV_FIND_CLASSLIB             "COVERAGE.VCX"

* default profile marking:
#DEFINE COV_PROFILE_EXECUTED_SPACING 10
#DEFINE COV_PROFILE_STATS_SPACING    15

* default coverage marking
#DEFINE COV_DEFAULT_MARKEXECUTED     ""
#DEFINE COV_DEFAULT_MARKNOTEXECUTED  "|"+SPACE(3)
#DEFINE COV_DEFAULT_MARKSPACING      5

* default fonts:
#DEFINE COV_DEFAULT_BASE_FONTNAME   "MS San Serif"
#DEFINE COV_DEFAULT_MONO_FONTNAME   "Courier New"
* these defaults will be overwritten by registry
* (trace window and standard Font properties) or
* if available resource file entries

* suffixs for default savenames for coverage result tables:
#DEFINE COV_SKIPFILEDBF_SUFFIX       "_SKIP"
#DEFINE COV_TARGETDBF_SUFFIX         "_COV"

#DEFINE COV_USE_OCXS                .T.
#DEFINE COV_TOPSPEED                .F.
* Make this one .T. if you want a fast, in-line call
* while Coverage parses your code.
* Using the method call, OTOH, gives you more
* scope for formatting the marks:
#IF COV_TOPSPEED
    #DEFINE COV_MARK_CODE_LINE      IIF(THIS.lInProfileMode, ;
                                        IIF(ISNULL(iExecuted), ;
                                            SPACE(40), ;
                                            STR(iExecuted,10,0)+ ;
                                            STR(nFirst,15,6)+STR(nAverage,15,6)), ;
                                        IIF(ISNULL(iExecuted), ;
                                            SPACE(LEN(THIS.cMarkExecuted)), ;
                                            IIF(iExecuted > 0, ;
                                                THIS.cMarkExecuted, ;
                                                THIS.cMarkNotExecuted)) ) + ;
                                     SPACE(4) + ;
                                     cRealLine
#ELSE
    #DEFINE COV_MARK_CODE_LINE      THIS.MarkCodeLine(cRealLine,iExecuted, nFirst, nAverage)
#ENDIF


* The following item is used for SET MEMOWIDTH in the Coverage 
* private data session.
* The Coverage engine uses MLINE(), MEMLINES(), and _MLINE to parse
* lines of source code.
* Note: this figure is the command line limit, and SET MEMOWIDTH
* limit, in VFP 6. In VFP 5, SETting MEMOWIDTH TO this value still 
* results in a setting of 1024 (the VFP 5 command and SET MEMOWIDTH
* limit).
* You can change this setting manually in the Coverage data session
* any time you like.... unless you write *lines without 
* continuation/concatenation* that are extremely long, 
* you do not need this high a limit --  and you may find that 
* leaving it at this setting uses slightly more memory than necessary.
* (Remember that we're not talking about macro-expanded SELECT statements,
* here, but rather the length of the actual code lines you *type*.)
* When figuring your longest lines of code, take a look at the length
* of your object and procedure names
* This figure is set at the outside limit for safety's sake.
#DEFINE COV_MEMOWIDTH                 8192

* The following items define the length of 
* character fields in the source and target cursors.
* Their default values (115 each) are defined by
* max length concatenated key,
* since two of these may be used together.
*
* To conserve disk space, especially in the source
* cursor and its CDX, you may reduce the size
* of these fields if you wish.  However,
* use care, or errors will occur
* when filenames or object/container
* information is truncated, as described below.

* As in the COV_MARK_CODE_LINE item above,
* these items are defined in two ways, depending
* on the setting of COV_TOPSPEED.  Setting 
* COV_TOPSPEED .T. will give you the fastest possible
* execution, since these #DEFINEs will resolve to a 
* literal.  By contrast, when COV_TOPSPEED is .F.,
* (the default value of this #DEFINE), 
* these #DEFINEs resolve to coverage engine properties,
* which means they take a little longer to execute but
* can be tweaked dynamically, for example when you know
* you are about to open a very large log.

* Whether you change these values in the #DEFINEs or
* in the property values, be mindful of the following
* conditions:

* If you choose to increase any of these values, 
* don't make the sum of any two of them over 240,
* to avoid potential max key length problems.

* If you choose to decrease any of these values, to
* conserve diskspace, avoid decreasing Hostfile unless
* you are sure the lengths of your fully-qualified 
* source files will not be exceeded. Otherwise,
* you may receive errors when the Profiler tries
* to find the uncompiled versions of these files.  

* Whether you decrease ObjClass, Executing, or both,
* be sensible. If you know you nest pageframes and
* grids several container-layers deep, or that
* you tend to use very long class names, try to
* stay above the maximum string these fields 
* are likely to contain, plus a margin for error.
* You may want to examine the source and target files
* first, to see how the engine uses these fields.
* Be on the lookout for suddenly-incorrect 
* Coverage and Profiling statistics,
* even though you may receive no obvious errors when
* when the Profiler analyzes the log.
* Statistical errors will occur if object and method names 
* are being truncated in the fields.


#IF COV_TOPSPEED

   #DEFINE COV_LEN_HOSTFILE            115
   #DEFINE COV_LEN_OBJCLASS            115
   #DEFINE COV_LEN_EXECUTING           115


#ELSE

   #DEFINE COV_LEN_HOSTFILE            THISFORMSET.iLenHostFile
   #DEFINE COV_LEN_OBJCLASS            THISFORMSET.iLenObjClass
   #DEFINE COV_LEN_EXECUTING           THISFORMSET.iLenExecuting

#ENDIF

* The Duration field in the source cursor is tuned with a constant
* and engine property similar to the character fields above.  
* However, this numeric field's length is also
* affected by the N_COVLOG_PRECISION specification.  Like all other
* constants set by the internal log and its version changes,
* you will find N_COVLOG_PRECISION in COV_SPEC.H.  You should
* not change N_COVLOG_PRECISION, but you can change the total length
* of the Duration field using COV_LEN_DURATION, after some experience,
*  if you find you don't need this many places in the field.  

#IF COV_TOPSPEED
   #DEFINE COV_LEN_DURATION            11
#ELSE
   #DEFINE COV_LEN_DURATION            THISFORMSET.iLenDuration
#ENDIF   

#DEFINE COV_LINES_TO_VALIDATE       100
#DEFINE COV_POINT_SETTING           "."

* The following item is the report form in use 
* by the cov_standard.DisplayProjectStatistics()
* method. 
* Note that this method is abstract in the cov_engine class.
* It is called by cov_engine.ShowProjectStatistics() after 
* cov_engine.GetProjectStatistics(), which serves to
* create a cursor containing the appropriate information.
* You can use a different FRX, and recompile COVERAGE.APP,
* to change cov_standard's display of this cursor,
* or you can subclass cov_engine with a different 
* .DisplayProjectStatistics() method that doesn't 
* use a REPORT FORM mechanism at all.
* Refer to cov_engine.GetProjectStatistics() to 
* the makeup of the project statistics cursor.
#DEFINE COV_PROJECT_FRX             "COV_PJX.FRX"

* debugging:
#DEFINE COV_DEBUG                    .F.
#DEFINE COV_TIMEOUT_SECS             2
#IF COV_DEBUG

    #DEFINE COV_DEBUG_MESSAGE        WAIT WINDOW LEFT(MESSAGE()+C_CR+;
                                                      SYS(2018)+C_CR+;
                                                      cMethod+C_CR+;
                                                      MESSAGE(1),COV_MESSAGE_LIMIT) ;
                                          TIMEOUT COV_TIMEOUT_SECS
    #DEFINE COV_DEBUG_ACTION         ERROR nError
    #DEFINE COV_ENGINE_ERROR_DEFAULT NOTE

#ELSE

    #DEFINE COV_DEBUG_MESSAGE        MESSAGEBOX(COV_PROBLEM_LOC+":"+C_CR+;
                                                MESSAGE()+C_CR+;
                                                cMethod,COV_STOP_MESSAGEBOX)
    #DEFINE COV_DEBUG_ACTION         NOTE
    #DEFINE COV_ENGINE_ERROR_DEFAULT THIS.Release()

#ENDIF

*&* comment out the line
*&* below if you don't want the
*&* on key label set up to
*&* invoke the Find dialog in the Coverage context...
*&* Or, if this keystroke conflicts with some other
*&* utility you use, change the label to suit
*&* your environment... 
#DEFINE COV_OKL_SHOW_FIND_DIALOG CTRL-F5

*&* the following five items are used by Coverage generation
*&* of StackLevel information to an XML version of the log:

* the first two represent element node prefixes
#DEFINE COV_STACKROOT        "VFPCallStackLog"     
#DEFINE COV_STACK_ONEVENT_TAG    "event"

* the next items are used to help identify the XML and HTM files written to
* disk as being generated from this particular process.
#DEFINE COV_STACKXML_SUFFIX          "_STACK"    
#DEFINE COV_STACKXMLEXT_SUFFIX       "_STACKX"
#DEFINE COV_TRANSFORM_SUFFIX         "_XSL"

* the next item indicates whether lines are loaded from the Coverage
* source workfile dbf or gathered directly by reading the original
* text log.  The former has a very slight speed advantage but will
* not include ON... events, since those lines are ignored by the
* Coverage source and target workfiles (there is no code to mark or profile
* for these lines).
#DEFINE COV_LOAD_STACK_FROM_DBF    .F.

* the vars in the next item have the same meaning as the columns of the
* same name in the Coverage source workfile DBF -- equivalents for these
* items are read in from the source text log when COV_LOAD_STACK_FROM_DBF is .F.,
* and this expression stays the same.  You can change it as long as you ensure that
* the result will never be empty except for ON... events.
* Load a log into COVERAGE.APP, SET DATASESSION TO _oCoverage.DataSessionID, 
* and refer to the source workfile (by default, its alias is FromLog) for 
* some indication on the possible contents of these columns.  
#DEFINE COV_STACKEXPR             ALLTR(IIF(INLIST(FileType,".fxp",".mpx",".qpx",".spx"), ;
                                  IIF(EMPTY(ObjClass), ;
                                      IIF(NOT EMPTY(Executing),ALLTR(Executing),""),;
                                      IIF(LEFT(Executing,1)="." OR AT(".",Executing) = 0,ALLTR(ObjClass)+;
                                      IIF(AT(".",Executing) = 0,".",""),"")+ALLTR(Executing)), ;
                                   ALLTR(Executing)))    
* COVERAGE.H

*&* Coverage character constants for log and parsing:
#INCLUDE COV_CHAR.H

*&* Coverage localized strings (may use some constants above):
#INCLUDE COV_LOCS.H

*&* Coverage common dialog component constants:
#INCLUDE COV_DLGS.H

*&* Coverage specs & requirements:
#INCLUDE COV_SPEC.H

*&* Coverage registry object constants:
#INCLUDE COV_REGS.H

*&* Coverage tune-able options:
#INCLUDE COV_TUNE.H

0
G�
�PLATFORMCUNIQUEIDC	
TIMESTAMPN
OBJTYPENOBJCODENNAMEM"EXPRM&VPOSN*	HPOSN3	HEIGHTN<	WIDTHNE	STYLEMNPICTUREMRORDERMVUNIQUELZCOMMENTM[ENVIRONL_BOXCHARC`FILLCHARCaTAGMbTAG2MfPENREDNjPENGREENNoPENBLUENtFILLREDNyFILLGREENN~FILLBLUEN�PENSIZEN�PENPATN�FILLPATN�FONTFACEM�FONTSTYLEN�FONTSIZEN�MODEN�RULERN�RULERLINESN�GRIDL�GRIDVN�GRIDHN�FLOATL�STRETCHL�STRETCHTOPL�TOPL�BOTTOML�SUPTYPEN�SUPRESTN�NOREPEATL�RESETRPTN�PAGEBREAKL�COLBREAKL�RESETPAGEL�GENERALN�SPACINGN�DOUBLEL�SWAPHEADERL�SWAPFOOTERL�EJECTBEFORL�EJECTAFTERL�PLAINL�SUMMARYL�ADDALIASL�OFFSETN�TOPMARGINN�BOTMARGINN�TOTALTYPEN�RESETTOTALN�RESOIDN�CURPOSL�SUPALWAYSL�SUPOVFLOWL�SUPRPCOLN�SUPGROUPN�SUPVALCHNGL�SUPEXPRM�USERM�
 WINDOWS _RKG1EC3CA 581548962 1 53    1.000    0.000    0.000   -1.000 F                                                 0 10   20F1212   FF              T    F T               1F       WINDOWS _RKO12T389           9  0                   6459.000    0.000                                                                        F  FFF           F                  F       WINDOWS _RKG1EC3CC           9  1                      0.000    0.000                                                                        F  FFF           F                  F       WINDOWS _RKG1EC3CD           9  4                  14167.000    0.000                                                                        F  FFF           F                  F       WINDOWS _RKG1EC3CE           9  7                      0.000    0.000                                                                        F  FFF           T                  F       WINDOWS _RKG1ENPY8           9  8                  19792.000 1.012E+9                                                                        T  FTT         FFT                  F       WINDOWS _RKH0Z67E8 581600017 8  011145.833 1875.000 1875.00058854.167   C    0    0    0   -1   -1   -1                 4 10  1       FFFTF  F          2T         0       0 1  1FTF0 0F WINDOWS _RKH0Z67E9 687691255 8  011041.667 1875.000 1979.16775416.667   C    0    0    0   -1   -1   -1                 2 10  1       FTFTF  F          2T         0       0 1  1FTF0 0F WINDOWS _RKH0Z67EA 687691251 8  013125.000 1770.833 1875.00011666.667   N    0    0    0   -1   -1   -1                 0 10  1       FFFTF  T          0T         1       0 6  1FTF0 0F WINDOWS _RKH0Z67EB 581600017 8  015000.000 1770.833 1875.00011666.667   N    0    0    0   -1   -1   -1                 0 10  1       FFFTF  T          0T         1       0 6  1FTF0 0F WINDOWS _RKH0Z67EC 687691249 8  013125.00014270.833 1875.00062916.667   C    0    0    0   -1   -1   -1                 0 10  1       FFFTF  T          0T         0       0 1  1FTF0 0F WINDOWS _RKH0Z67ED 687691129 8  015000.00014270.833 1875.00062916.667   C    0    0    0   -1   -1   -1                 0 10  1       FFFTF  T          0T         0       0 1  1FTF0 0F  WINDOWS _RKH0Z67EE 687691141 8  0!20625.00014270.833 1875.00062916.667   C    0    0    0   -1   -1   -1               "  0 10  1       FFFTF  T          0T         0       0 1  1FTF0 0F# WINDOWS _RKH0Z67EF 608795707 8  0$20625.000 1770.833 1875.00011666.667   N    0    0    0   -1   -1   -1               %  0 10  1       FFFTF  T          0T         1       0 6  1FTF0 0F& WINDOWS _RKH11NL6Q 687691247 8  0'22500.00014270.833 1875.00062916.667   C    0    0    0   -1   -1   -1               (  0 10  1       FFFTF  T          0T         0       0 1  1FFF0 0T) WINDOWS _RKH11NL6R 687691244 8  0+22500.000 1770.833 1875.00011666.667   N    0    0    0   -1   -1   -1               ,  0 10  1       FFFTF  T          0T         1       0 6  1FFF0 0T- WINDOWS _RKH11PRUV 608922386 8  0/16875.000 1770.833 1875.00011666.667   N    0    0    0   -1   -1   -1               0  0 10  1       FFFTF  T          0T         1       0 6  1FFF0 0T1 WINDOWS _RKH11PRUW 608922397 8  0318750.000 1770.833 1875.00011666.667   N    0    0    0   -1   -1   -1               4  0 10  1       FFFTF  T          0T         1       0 6  1FFF0 0T5 WINDOWS _RKH11PRUX 687691132 8  0716875.00014270.833 1875.00062916.667   C    0    0    0   -1   -1   -1               8  0 10  1       FFFTF  T          0T         0       0 1  1FFF0 0T9 WINDOWS _RKH11PRUY 687691137 8  0;18750.00014270.833 1875.00062916.667   C    0    0    0   -1   -1   -1               <  0 10  1       FFFTF  T          0T         0       0 1  1FFF0 0T= WINDOWS _RKL10IGGC 581863491 6   29062.500 1250.000  104.16776250.000       -1   -1   -1   -1   -1   -1    1    8             0       FFFTF  F                     1             FTF3 0F WINDOWS _RKL10IJ44 581863493 6   29375.000 1250.000  104.16776250.000       -1   -1   -1   -1   -1   -1    1    8             0       FFFTF  F                     1             FTF3 0F WINDOWS _RKO12QV53 582062226 6   10729.167 1250.000  104.16776250.000       -1   -1   -1   -1   -1   -1    1    8             0       FFFTF  F                     1             FTF3 0F WINDOWS _RKO12U3BN 582390213 8  0?    0.000 1250.000 6041.66765104.167   C    0    0    0   -1   -1   -1               @  1 16  1 5     FFFTF  F          2T         0       0 1  1TTF0 0F WINDOWS _RS60XE4GS 687691240 8  0A29791.667 1458.333 1875.00011666.667   N    0    0    0   -1   -1   -1               B  0 10  1       FFFTF  F          0T         1       0 1  1FTF0 0F WINDOWS _RS60XE4GT 687691214 8  0C29791.66713854.167 1875.00062916.667   C    0    0    0   -1   -1   -1               D  0 10  1       FFFTF  F          0T         0       0 1  1FTF0 0F WINDOWS _RS60XE4GU 687691238 8  0E31666.667 1458.333 1875.00011666.667   N    0    0    0   -1   -1   -1               F  0 10  1       FFFTF  F          0T         1       0 1  1FTF0 0F WINDOWS _RS60XE4GV 687691213 8  0G31666.66713854.167 1875.00062916.667   C    0    0    0   -1   -1   -1               H  0 10  1       FFFTF  F          0T         0       0 1  1FTF0 0F WINDOWS _RS60XE4GW 687691237 8  0I33750.000 1458.333 1875.00011666.667   N    0    0    0   -1   -1   -1               J  0 10  1       FFFTF  F          0T         1       2 1  1FTF0 0F WINDOWS _RS60XE4GX 687691211 8  0K33750.00013854.167 1875.00062916.667   C    0    0    0   -1   -1   -1               L  0 10  1       FFFTF  F          0T         0       0 1  1FTF0 0F WINDOWS _RS60XE4GY 687691235 8  0M35625.000 1458.333 1875.00011666.667   N    0    0    0   -1   -1   -1               N  0 10  1       FFFTF  F          0T         1       2 1  1FTF0 0F WINDOWS _RS60XE4GZ 687691210 8  0O35625.00013854.167 1875.00062916.667   C    0    0    0   -1   -1   -1               P  0 10  1       FFFTF  F          0T         0       0 1  1FTF0 0F WINDOWS _RS60XE4H0 687691203 8  0Q41875.00013854.167 1875.00062916.667   C    0    0    0   -1   -1   -1               R  0 10  1       FFFTF  F          0T         0       0 1  1FTF0 0FS WINDOWS _RS60XE4H2 687691201 8  0T44062.50013854.167 1875.00062916.667   C    0    0    0   -1   -1   -1               U  0 10  1       FFFTF  F          0T         0       0 1  1FTF0 0FV WINDOWS _RS60XE4H4 687691197 8  0W46250.00013854.167 1875.00062916.667   C    0    0    0   -1   -1   -1               X  0 10  1       FFFTF  F          0T         0       0 1  1FTF0 0FY WINDOWS _RS60XE4H6 687691233 8  0Z37812.500 1458.333 1875.00011666.667   N    0    0    0   -1   -1   -1               [  0 10  1       FFFTF  F          0T         1       2 1  1FTF0 0F\ WINDOWS _RS60XE4H7 687691207 8  0]37812.50013854.167 1875.00062916.667   C    0    0    0   -1   -1   -1               ^  0 10  1       FFFTF  F          0T         0       0 1  1FTF0 0F_ WINDOWS _RS60XE4H8 687691232 8  0`39687.500 1458.333 1875.00011666.667   N    0    0    0   -1   -1   -1               a  0 10  1       FFFTF  F          0T         1       2 1  1FTF0 0Fb WINDOWS _RS60XE4H9 687691205 8  0c39687.50013854.167 1875.00062916.667   C    0    0    0   -1   -1   -1               d  0 10  1       FFFTF  F          0T         0       0 1  1FTF0 0Fe WINDOWS _RS60XEKLZ 687691225 8  0f41770.833 1458.333 1875.00011666.667   C    0    0    0   -1   -1   -1               h  0 10  1       FFFTF  F          0T         0       0 1  1FTF0 0F WINDOWS _RS60XEKM0 687691219 8  0i43958.333 1354.167 1875.00011770.833   C    0    0    0   -1   -1   -1               k  0 10  1       FFFTF  F          0T         0       0 1  1FTF0 0F WINDOWS _RS60XEKM1 687691217 8  0l46145.833 1458.333 1875.00011666.667   C    0    0    0   -1   -1   -1               n  0 10  1       FFFTF  F          0T         0       0 1  1FTF0 0Fo WINDOWS _RKG1F4584 58239294418   pq                                    T   r                                                                                                  2 1   F       WINDOWS _RKG1F4586 58239294418   st                                    T   u                                                                                                  2 1   F       WINDOWS _RKG1F4588 58239294518   vw                                    T   x                                                                                                  2 1   F       WINDOWS _RKG1F458A 58239294618   yz                                    T   {                                                                                                  2 1   F       WINDOWS _RKH146OXG 58239294718   |}                                    T   ~                                                                                                  2 1   F       WINDOWS _RKH146OXI 58239294818   �                                    T   �                                                                                                  2 1   F       WINDOWS _RKO11TH6L 58239294918   ��                                    T   �                                                                                                  0 1   F       WINDOWS _RKO11TH6N 58239295318   ��                                    T   �                                                                                                  0 1   F       WINDOWS _RKO11TH6P 58239295418   ��                                    T   �                                                                                                  0 1   F       WINDOWS _RKO11TH6R 58239295518   ��                                    T   �                                                                                                  0 1   F       WINDOWS _RKO11TH6T 58239295518   ��                                    T   �                                                                                                  0 1   F       WINDOWS _RKO11TH6V 58239295618   ��                                    T   �                                                                                                  0 1   F       WINDOWS _RKO11TH6X 58239295618   ��                                    T   �                                                                                                  0 1   F       WINDOWS _RKO11TH6Z 58239295718   ��                                    T   �                                                                                                  0 1   F       WINDOWS _RKO11TH71 58239295718   ��                                    T   �                                                                                                  0 1   F       WINDOWS _RKO11TH73 58239296018   ��                                    T   �                                                                                                  0 1   F       WINDOWS _RKO11TH75 58239296018   ��                                    T   �                                                                                                  0 1   F       WINDOWS _RKO11TH77 58239296118   ��                                    T   �                                                                                                  0 1   F       WINDOWS _RKO11TH79 58239296218   ��                                    T   �                                                                                                  0 1   F       WINDOWS _RKO11TH7B 58239296218   ��                                    T   �                                                                                                  0 1   F       WINDOWS _RKO11TH7D 58239296318   ��                                    T   �                                                                                                  0 1   F       WINDOWS _RKO11TH7F 58239296318   ��                                    T   �                                                                                                  0 1   F       WINDOWS _RKO1212MR 58239296418   ��                                    T   �                                                                                                  0 1   F       WINDOWS _RKO12YHMQ 68769092218   ��                                    T   �                                                                                                  0 1   F       WINDOWS                     23      16.000    8.000   12.000    9.000        4    0                                   �  0 10                                                     F       WINDOWS                     23      16.000    8.000   12.000    9.000        4    0                                   �  4 10                                                     F       WINDOWS                     23      17.000    8.000   13.000   11.000        4    0                                   �  2 10                                                     F       WINDOWS                     23      23.000   13.000   17.000   16.000        6    0                                   �  1 16                                                     F       WINDOWS                     25   �                                     F  ��                                             	                                                           F      �@%ORIENTATION=0
PAPERSIZE=1
COLOR=1
500 USB
OUTPUT=USB�
coverage.h�Ur�1
cov_char.h��Ur�1
cov_locs.h��Ur�1
cov_dlgs.hUr�1
cov_spec.hUr�1
cov_regs.hUr�1
cov_tune.hUr�1aTop = 219
Left = 257
Width = 520
Height = 200
DataSource = .NULL.
Name = "Dataenvironment"
Courier NewHostfileCourier NewCovered # 0rcNoHits+":  "+HostfileCourier New5Covered = 0 AND NOT (EMPTY(FileType) AND RECNO() = 1)CoveredCourier NewCovered # 0	CoverableCourier NewCovered # 0rcHLinesCourier NewCovered # 0rcTLinesCourier NewCovered # 0rcPLinesCourier NewCovered # 0 AND Coverable# 07IIF(Coverable = 0,"",STR((Covered/Coverable)*100,10,2))Courier NewCovered # 0rcPObjsCourier Newg(NOT rlOmitObjects) AND Covered # 0 AND INLIST(FileType,".vct",".sct", ".frt", ".lbt") AND ObjTotal # 05IIF(ObjTotal = 0,"",STR((ObjHits/ObjTotal)*100,10,2))Courier NewT(NOT rlOmitObjects) AND Covered # 0 AND INLIST(FileType,".vct",".sct",".frt",".lbt")ObjHitsCourier NewU(NOT rlOmitObjects) AND  Covered # 0 AND INLIST(FileType,".vct",".sct",".frt",".lbt")ObjTotalCourier NewT(NOT rlOmitObjects) AND Covered # 0 AND INLIST(FileType,".vct",".sct",".frt",".lbt")rcHObjsCourier NewV(NOT rlOmitObjects) AND Covered # 0 AND INLIST(FileType,".vct",".sct", ".frt", ".lbt")rcTObjsCourier NewU(NOT rlOmitObjects) AND Covered # 0 AND INLIST(FileType,".vct",".sct", ".frt",".lbt")3rcTitle + IIF(EMPTY(FileType),CHR(13)+ Hostfile,"")Courier NewriFileCountCourier New	rcTPFilesCourier New
riFileHitsCourier New	rcHPFilesCourier New	CoverableCourier New	rcTPLinesCourier NewCoveredCourier New	rcHPLinesCourier New	rcPPFilesCourier NewriFileCount > 0	rcPPLinesCourier NewriCoverable > 0rcPPObjsCourier New'(NOT rlOmitObjects)  AND riObjTotal > 0ObjTotalCourier New(NOT rlOmitObjects)rcTPObjsCourier New(NOT rlOmitObjects)ObjHitsCourier New(NOT rlOmitObjects) rcHPObjsCourier New(NOT rlOmitObjects) =IIF(riFileCount = 0,"",ROUND((riFileHits/riFileCount)*100,2))Courier New>IIF(riCoverable = 0, "", ROUND((riCovered/riCoverable)*100,2))Courier New<IIF(riObjTotal = 0, "", ROUND((riObjHits/riObjTotal)*100,2))Courier New(NOT rlOmitObjects) riFileCount(IIF(EMPTY(FileType) AND RECNO() = 1,0,1)0
riFileHitsIIF(Covered # 0,1,0)0	riCoveredCovered0riCoverable	Coverable0
riObjTotalObjTotal0	riObjHitsObjHits0
rlOmitObjects
rlOmitObjects
rlOmitObjectsrcTLinesrcTLinesrcTLinesrcHLinesrcHLinesrcHLinesrcPLinesrcPLinesrcPLinesrcTObjsrcTObjsrcTObjsrcHObjsrcHObjsrcHObjsrcPObjsrcPObjsrcPObjs	rcTPFiles	rcTPFiles	rcTPFiles	rcHPFiles	rcHPFiles	rcHPFiles	rcTPLines	rcTPLines	rcTPLines	rcHPLines	rcHPLines	rcHPLinesrcTPObjsrcTPObjsrcTPObjsrcHPObjsrcHPObjsrcHPObjs	rcPPLines	rcPPLines	rcPPLines	rcPPFiles	rcPPFiles	rcPPFilesrcPPObjsrcPPObjsrcPPObjsrcNoHitsrcNoHitsrcNoHitsrcTitlercTitlercTitleCourier NewCourier NewCourier NewCourier Newdataenvironment�PROCEDURE Init
#INCLUDE COVERAGE.H

rcTitle = COV_APPLICATION_NAME_LOC + " " + COV_STATS_VIEW_PROJECT_LOC 
* in case I am re-using any LOC's from
* buttons with hotkeys:
rcTitle = STRTRAN(rcTitle,"\<","")

rlOmitObjects = COV_TOPSPEED

rcNoHits = COV_STATS_FILE_NOT_HIT_LOC

rcTLines = COV_STATS_LINES_COVERABLE_LOC
rcHLines = COV_STATS_LINES_HIT_LOC 
rcPLines = COV_STATS_PCT_LINES_LOC 
rcTObjs  = COV_STATS_OBJS_COVERABLE_LOC
rcHObjs  = COV_STATS_OBJS_HIT_LOC
rcPObjs  = COV_STATS_PCT_OBJS_LOC

rcTPFiles = COV_STATS_PJXFILES_COVERABLE_LOC
rcHPFiles = COV_STATS_PJXFILES_HIT_LOC 
rcTPLines = COV_STATS_PJXLINES_COVERABLE_LOC
rcHPLines = COV_STATS_PJXLINES_HIT_LOC
rcTPObjs  = COV_STATS_PJXOBJS_COVERABLE_LOC
rcHPObjs  = COV_STATS_PJXOBJS_HIT_LOC

rcPPLines = COV_STATS_PCT_PJXLINES_LOC
rcPPFiles = COV_STATS_PCT_PJXFILES_LOC
rcPPObjs  = COV_STATS_PCT_PJXOBJS_LOC


ENDPROC
��� ��"�%�7
�UAT���Coverage Profiler� �Statistics by \<Project...��T��C��\<����T��-��'T���File skipped or not logged��"T���Total coverable lines��T���Line(s) hit�� T���% Covered Linecount��T���Classes with code��T���
Class(es) hit��T���% Covered Classes��0T�	��#Total Source Code Files For Project��%T�
��Project Source Files Hit��4T���'Total Lines Coverable Code in Files Hit��$T���Total Project Lines Hit��MT�
��@Total Classes in Project VCXs, SCXs, FRXs, and LBXs contain code��DT���7Total Classes Hit in Project VCXs, SCXs, FRXs, and LBXs��9T���,% Project Coverage by Lines (Files Hit Only)��(T���% Project Coverage by Files��8T���+% Class Code Coverage for Project Files Hit��URCTITLE
RLOMITOBJECTSRCNOHITSRCTLINESRCHLINESRCPLINESRCTOBJSRCHOBJSRCPOBJS	RCTPFILES	RCHPFILES	RCTPLINES	RCHPLINESRCTPOBJSRCHPOBJS	RCPPLINES	RCPPFILESRCPPOBJSInit,��1s�r"����QAA�A���3�)��)T���C�BaseFontBold�  0( @����@ ���������� @����������������������������������������������?������?���������������?������?������������������������������������%�3j[b�1;��s��C��C��W�/s����"���\<Use Smart Pathing���-s����"���Cascade \<Windows���s����"��\-��-s����"���\<Display Font...���*s����"���\<Code Font...���+s����"���\<Statistics...���(s����"���\<Add-Ins...���s����"��\-��-s��	��"���\<View Source Log���,s��
��"���Fast \<Zoom Mode���s����"��\-��5s����"���\<Generate StackLevel XML���1s��
��"���View Stac\<kLevel XML���6s����"���\<Transform StackLevel XML���5s����"���E\<xtended StackLevel XML���A1������/_oCoverage.lSmartPath = ! _oCoverage.lSmartPath�21������ _oCoverage.ArrangeFrameWindows()�Q1������?=IIF(_oCoverage.GetFontsFromUser(),_oCoverage.SetUIFonts(),.T.)�T1������B=IIF(_oCoverage.GetFontsFromUser(.T.),_oCoverage.SetUIFonts(),.T.)�-1������_oCoverage.ShowStatistics()�o1������]=IIF(_oCoverage.ShowModalDialog("cov_addindialog", "COVERAGE.VCX"),_oCoverage.RunAddIn(),.T.)�*1���	���_oCoverage.ShowTextLog()�11���
���_oCoverage.ToggleFastZoomMode()�+1������_oCoverage.ShowStackXML()�.1���
���_oCoverage.DisplayStackXML()�01������_oCoverage.TransformStackXML()�91������'_oCoverage.ToggleStackXMLExtendedTree()�G:�����(�����%����
����GN���
���a���G:���
��(�����%�C�������GN���
���a���6%�C����C�����C�CC����]���&�GN������a���%�-��\�GN������a��G:�����(�a���}�G:�����(������%���	
����<������t��U
COVSHORT
_OCOVERAGE
LSMARTPATH
FRMMAINDIALOGLINZOOMMODE
LFASTZOOMMODECSAVEDSTACKXML
CSTACKXSLTLSTACKXMLEXTENDEDTREELINCOVERAGEFRAME@A��a����a��aQaQ!A�������B1A�"1Ad1A�1A��A�A�1BM~>(@����������������������BM~>(@������������u������BM~>(@�����������������������BM~>(@���������BM~>(@�������?BM~>(@�������������������������BM~>(@�����������������������BM~>(@��������������c�1�����BM~>(@��������������������?����BM�v(����������������������������������������������������������������������������BMz>(�����BM�CH�KB�BMCLNUBMCL�RA�.B�C�GR�P.�P��MBcoverage.prgc:\docume~1\vfpbuild\locals~1\temp\coverage.fxp.\coverage.vcxcoverage.vctcoverage.icoopen.bmpsave.bmpcoverage.bmpprofile.bmppreview.bmpzoom.bmpstats.bmpoptions.bmpaddins.bmpcov_char.hcov_dlgs.hcov_locs.hcov_regs.hcov_spec.hcov_tune.hcoverage.hcov_pjx.frxcov_pjx.frtho_split.curcovshort.mprcovshort.mpxcoverage.mskopen.msksave.mskprofile.mskpreview.mskzoom.mskstats.mskaddins.mskoptions.mskfind.bmpfind.msk)

1
�J>A�JFf>NFf|j>[|jrk>hrkhl>qhl^m>z^mTn>�TnJo>�Jo@p>�@p6q>�6q,r>�,r"s>�"s�u>��u�>��,�>�,�E�>�E�}�>�}�4>4�>
��R>�R��>"����>.��֓
H֓T�>UT�Ҕ>bҔP�>kP�Ε>tΕL�>�L�ʖ>�ʖH�>�H�Ɨ>�ƗD�>�D�2�>�2���>�