*PROC testlargeform SET STEP OFF SET ECHO OFF SET DEBUG OFF SET ESCAPE OFF SET TALK OFF SET SAFETY OFF _SCREEN.VISIBLE=.T. _SCREEN.WINDOWSTATE=2 PRIVATE m.x2 m.x2="" COMPILE FORM testlargeform.scx =MESSAGEBOX("Now the form file testlargeform.scx is good."+CHR(13)+; "We will run DO FORM testlargeform.scx and there is no problem.",0,"TEST LARGEFORM") DO FORM testlargeform.scx =MESSAGEBOX("Please make some changes."+CHR(13)+; "For example, Comment or Uncomment some statements.",0,"TEST LARGEFORM") MODIFY FORM testlargeform.scx method INIT COPY FILE testlargeform.scx TO testlargeform_bad.scx COPY FILE testlargeform.sct TO testlargeform_bad.sct USE testlargeform_bad.scx LOCATE FOR objname="Form1" =STRTOFILE(objcode,"testlargeform_bad.fxp") USE COPY FILE testlargeform.scx TO testlargeform_good.scx COPY FILE testlargeform.sct TO testlargeform_good.sct COMPILE FORM testlargeform_good.scx USE testlargeform_good.scx LOCATE FOR objname="Form1" =STRTOFILE(objcode,"testlargeform_good.fxp") USE USE testlargeform.scx LOCATE FOR objname="Form1" PRIVATE m.q_com m.q_com=methods PRIVATE m.q_procedures m.q_procedures="" DO WHILE AT("PROCEDURE ",m.q_com)>0 m.q_com=SUBS(m.q_com,AT("PROCEDURE ",m.q_com)) m.q_procedures=m.q_procedures+LEFT(m.q_com,AT(CHR(13),m.q_com)) m.q_com=SUBS(m.q_com,AT(CHR(13),m.q_com)+1) ENDDO USE m.q_procedures=STRTRAN(m.q_procedures,"PROCEDURE Init","PROCEDURE Init (LARGE PROCEDURE)") IF FILETOSTR("testlargeform_bad.fxp")==FILETOSTR("testlargeform_good.fxp") =MESSAGEBOX("It seems the form file testlargeform.scx is good."+CHR(13)+; m.q_procedures+; "We will run DO FORM testlargeform.scx and there is no problem.",0,"TEST LARGEFORM") DO FORM testlargeform.scx ELSE =MESSAGEBOX("Now the form file testlargeform.scx is bad."+CHR(13)+; m.q_procedures+; "If we run DO FORM testlargeform.scx then VFP will crash.",16,"TEST LARGEFORM") DO FORM testlargeform.scx ENDIF RETURN * END OF PROC TESTLARGEFORM. In the testlargeform.scx: PROCEDURE Load SET TALK OFF ?"Load" ENDPROC PROCEDURE Init * Please make some changes. * For example, Comment or Uncomment some statements. SET TALK OFF SET TALK OFF SET TALK OFF ?"Init" PRIVATE m.x2 m.x2="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" m.x2="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" ... m.x2="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" m.x2="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" ENDPROC PROCEDURE Destroy SET TALK OFF ?"Destroy" ENDPROCThe size of the procedure Init is about 100KB, it is a large procedure.