Procedure Passing Two File and Record Parameters for deep assign

Another alternative is to create a class that does the copying, but use a virtual method to do the deep assign of the fields.

CopyTPS2SQL         CLASS,TYPE
Copy                  PROCEDURE(FILE pTPS,FILE pSQL,STRING pProgressText,LONG pProgressBar,UNSIGNED pFeq)
Assign                PROCEDURE,VIRTUAL
                    END
  
CopyTPS2SQL.Copy    PROCEDURE(FILE pTPS,FILE pSQL,STRING pProgressText,LONG pProgressBar,UNSIGNED pFeq)
  CODE
  !Your existing code, wherein it calls SELF.Assign()
  
CopyTPS2SQL.Assign  PROCEDURE
  CODE
  !Abstract Virtual
  ASSERT(False, 'CopyTPS2SQL.Assign must be derived')

!For each file  
CT2S_SomeFile       CLASS(CopyTPS2SQL)
Assign                PROCEDURE,DERIVED
                    END

CT2S_SomeFile.Assign  PROCEDURE
  CODE
  SomeFileSQL.Record :=: SomeFileTps.Record