Compile the following subroutine (called MFS_Installer), in your SYSPROG account.  You will be able to run this subroutine from the System Monitor, or call it as a subroutine from your customized MFS installer, as you prefer.

Compile subroutine MFS_Installer(TargetTable,MFS_Name,Action)
 /*
  --> RUN MFS_INSTALLER 'CUSTOMERS','SIMPLE_MFS*EXAMPLES',2     <--- 2 is default
 MFS Installer
 Original Author  Cameron Purdy
 Revised  R T Bright
 1. Develop your MFS in the SYSPROG application. 
That is the only supported application for developing an MFS/BFS in. 
(This routine can be run in Application at owner's risk)  
2. The FILE.SYSTEM.EQUATES and FILE.SYSTEM.ONGOSUB inserts are often used to help implement an MFS.  
3. Always remove the MFS before adding it, and always save the database
definition after adding it.   This fixes a synchronization issue if you
have added the MFS to the table (i.e. put it in the mediamap) but have not saved the database definition.
*/   
   Declare subroutine Set_Status , Set_MFS, Define_Database, Message_Box
   $Insert logical
   debug
   Equ AddMFSEnd$       to 1
   Equ AddMFSBegin$     to 2
   Equ AddMFSNearBegin$ to 3
   Equ RemoveMFS$       to 5
   Equ RemoveAllMFS$    to 6
   
   If Index(MFS_Name,'*':@AppID<1>,1) Else
     MFS_Name :='*':@AppID<1>
   End  
   
   /* first remove MFS (in case it is already in the media map)*/
   Set_Status(FALSE$)
   
   Set_MFS(TargetTable, MFS_NAME, RemoveMFS$)
   
   Convert @Lower_Case to @Upper_Case in Action
   If Action = 5 or Action = 'REMOVE' then
     Return
   End  
   
   * add the MFS
   Set_Status(FALSE$)
   
   Set_MFS(TargetTable, MFS_NAME, AddMFSBegin$)
   
   if Get_Status(Code) then
     Error  = "An error occurred adding the MFS to the ": TargetTable: " table."
     Error := "||Error Code: ": Code<1,1,1>
     gosub ErrMsg
   end
   
   /* update database definition*/
   Set_Status(FALSE$)
   Define_Database(@dbid, TRUE$, "", "")
   if Get_Status(Code) then
      Error  = "An error occurred saving the ": @dbid: " database definition."
      Error := "||Error Code: ": Code<1,1,1>
      gosub ErrMsg
   end
Return 1
ErrMsg:
  Call Msg(@Window,Error)
Return 0
  • No labels