%%
%%
%%Copyright2009-2019TheMathWorks,Inc.
%%
 
%if EXISTS("_FILEPACKAGINGLIB_") == 0
%assign _FILEPACKAGINGLIB_ = 1
 
%include "fileoperations.tlc"
 
%%Function:SLibIsCompactFileFormat()===============================
%%Abstract:
%%Isfilepackageforamtacompactformat(includingcompactfile
%%formatwithseparatedatafile)?
%%
%function SLibIsCompactFileFormat()
  %assign ret = TLC_FALSE
  %if SLibIsERTTarget()
    %if ::CompiledModel.ConfigSet.ERTFilePackagingFormat == "Compact" || ...
      ::CompiledModel.ConfigSet.ERTFilePackagingFormat == "CompactWithDataFile"
      %assign ret = TLC_TRUE
    %endif
  %endif
  %return ret
%endfunction %% SLibIsCompactFileFormat
 
%%Function:SLibGenModelTypesFile()===============================
%%Abstract:
%%Returntrueifmodel_types.hisneededinCompactfileformat.
%%Case1:thereareCodeVariants
%%Case2:therearenon-sharedcustomfilesgeneratedforcustomstorageclass
%%
%function SLibGenModelTypesFile()
  %if SLibIsCompactFileFormat() && ...
      !SLibGenCustomNonSharedHeaderFileForCSC()
      %return TLC_FALSE
  %endif
  %return TLC_TRUE
%endfunction %% SLibGenModelTypesFile
 
%%Function:FcnGetFileNameTableID(codeGroupName)====================
%%Abstract:
%%LookuptheidoffilenametableforforcodeGroupName.
%%
%function FcnGetFileNameTableID(codeGroupName)
  %assign value = GETFIELD(::CompiledModel.FilePackagingTable, codeGroupName)
  %assign fileName_ID = value[0]
  %assert (TYPE(fileName_ID)=="Number")
  %return fileName_ID
%endfunction %% FcnGetFileNameTableID
 
%%Function:SLibGetFileNameForCode(codeGroupName)====================
%%Abstract:
%%LookupthefilenameinfilepackagingtableforcodeGroupName
%%
%function SLibGetFileNameForCode(codeGroupName)
  %if CGMODEL_ACCESS("FileRepository.getMoveFilePackagingTableFromTLC")
    %assign fileType = FcnMapCodeNamesToFileTypes(codeGroupName)
    %assign fileName = CGMODEL_ACCESS("FileRepository.getModelFileName", fileType)
  %else
    %assign fileName_ID = FcnGetFileNameTableID(codeGroupName)
    %assign fileName = ::CompiledModel.FileNameTable.File%<fileName_ID>.Name
  %endif
  %return fileName
%endfunction %% SLibGetFileNameForCode
 
%%Function:SLibGetSectionNameForCode(codeGroupName)
%%Abstract:
%%LookupthesectionnameinfilepackagingtableforcodeGroupName
%%
%function SLibGetSectionNameForCode(codeGroupName)
  %assign value = GETFIELD(::CompiledModel.FilePackagingTable, codeGroupName)
  %assign sectionName_ID = value[1]
  %assert(TYPE(sectionName_ID)=="Number")
  %assign sectionName = ::CompiledModel.FileSectionTable.Section%<sectionName_ID>
  %return sectionName
%endfunction %% SLibGetSectionNameForCode
 
%%Function:SLibGetFileRecForCode(codeGroupName)=====================
%%Abstract:
%%ReturnthefilerecordtoholdspecifiedcodeGroup.Return""if
%%thiscodeGroupshouldnotbegenerated.
%%
%function SLibGetFileRecForCode(codeGroupName)
  %assign fileName_ID = FcnGetFileNameTableID(codeGroupName)
  %assert (TYPE(fileName_ID)=="Number")
  %assign fileName = ::CompiledModel.FileNameTable.File%<fileName_ID>.Name
  %if ISEMPTY(fileName)
    %return ""
  %endif
  %assign fileCreator = ::CompiledModel.FileNameTable.File%<fileName_ID>.Creator
  %assign GroupName = ::CompiledModel.FileNameTable.File%<fileName_ID>.Group
  %assign type = ::CompiledModel.FileNameTable.File%<fileName_ID>.Type
  %assign fileRec = SLibAddModelFile(type, fileCreator, fileName)
  %<SLibSetModelFileAttribute(fileRec, "Group", GroupName)>
  %return fileRec
%endfunction %% SLibGetFileRecForCode
 
%%Function:SLibGetFileRec(FileType)=====================
%%Abstract:
%%Returnthefilerecordforthegivenfiletype-new
%%filepackaginginfrastructure
%function SLibGetFileRec(FileType) void
  %assign modelFileIndex = CGMODEL_ACCESS("FileRepository.getModelFileIndex", FileType)
   
  %if modelFileIndex == -1
    %assign fileRec = CGMODEL_ACCESS("FileRepository.createNewFileOrReturnExistingFile", FileType)
    %return LibUpdateCompiledModelFiles(fileRec)
  %else
    %return ::CompiledModel.ModelFiles.ModelFile[modelFileIndex]
  %endif
%endfunction %% SLibGetFileRec
 
%%Function:SLibCacheCodeToFile(codeGroupName,buffer)===============
%%Abstract:
%%Placecodebufferintorightsectionofarightfilerecordaccordingto
%%filepackagetable.
%%
%function SLibCacheCodeToFile(codeGroupName, buffer) void
  %assign fileRec = ""
  %assign section = ""
  %if CGMODEL_ACCESS("FileRepository.getMoveFilePackagingTableFromTLC")
    %assign fileType = CGMODEL_ACCESS("FileRepository.getFileType", codeGroupName)
    %assign fileRec = SLibGetFileRec(fileType)
    %assign section = CGMODEL_ACCESS("FileRepository.getFileSection", codeGroupName)
  %else
    %assign fileRec = SLibGetFileRecForCode(codeGroupName)
    %assign section = SLibGetSectionNameForCode(codeGroupName)
  %endif
 
  %if !WHITE_SPACE(buffer) && !ISEMPTY(fileRec) && !ISEMPTY(section)
    %<SLibSetModelFileAttribute(fileRec, section, buffer)>
  %endif
%endfunction %% SLibCacheCodeToFile
 
%%Function:SLibGetFileNameForSystemCode(codeGroupName,system)======
%%Abstract:
%%Lookupthefilenameinfilepackagingtableforsystem
%%codeGroupName.
%%systemisasystemrecord.(Includesystem)
%%
%function SLibGetFileNameForSystemCode(codeGroupName, system)
  %if system.SystemSourceFileName != GetRootSystemSourceFileName()
    %% go to separate subsystem file
    %assign systemSrcFileName = SLibGetSystemOutputSrcFileBaseName(system)
    %assign systemHdrFileName = SLibGetSystemOutputHdrFileBaseName(system)
    %assign systemPrivHdrFileName = systemHdrFileName
  %else
    %% go to model file
    %assign systemHdrFileName = SLibGetFileNameForCode("mdl_hdr")
    %assign systemSrcFileName = SLibGetFileNameForCode("mdl_src")
    %assign systemPrivHdrFileName = systemHdrFileName + "_private"
  %endif
  %%modify
  %assign subsystemDataFileName = systemSrcFileName + "_data"
  %assign value = GETFIELD(::CompiledModel.systemFilePackagingTable, codeGroupName)
  %assign fileName_ID = value[0]
  %assert (TYPE(fileName_ID)=="Number")
  %assign fileNameString = ::CompiledModel.systemFileNameTable.File%<fileName_ID>.Name
  %assign fileName = %<fileNameString>
  %return fileName
%endfunction %% SLibGetFileNameForSystemCode
 
%%Function:SLibGetSectionNameForSystemCode(codeGroupName,system)====
%%Abstract:
%%Lookupthesectionnameinfilepackagingtableforsystem
%%codeGroupName.
%%systemisasystemrecord.(Includesystem)
%%
%function SLibGetSectionNameForSystemCode(codeGroupName, system)
  %assign value = GETFIELD(::CompiledModel.systemFilePackagingTable, codeGroupName)
  %assign sectionName_ID = value[1]
  %assert(TYPE(sectionName_ID)=="Number")
  %assign sectionName = ::CompiledModel.FileSectionTable.Section%<sectionName_ID>
  %return sectionName
%endfunction %% SLibGetSectionNameForSystemCode
 
%%Function:SLibGetFileRecForSystemCode(codeGroupName,system,isRLS,isGlobalServer)=======
%%Abstract:
%%ReturnthefilerecordtoholdspecifiedsystemcodeGroup.
%%Return""ifcodeGroupshouldnotbegenerated.
%%systemisasystemrecord.(Includesystem)
%%IfisRLS,thefilegoesintotheutilitiesgroup.
%%IfisGlobalServerandaheaderfile,thefilegoesintotheutilitiesgroup.
%%
%function SLibGetFileRecForSystemCode(codeGroupName, system, isRLS, isGlobalServer)
  %assign fileName = SLibGetFileNameForSystemCode(codeGroupName, system)
  %assign value = GETFIELD(::CompiledModel.systemFilePackagingTable, codeGroupName)
  %assign fileName_ID = value[0]
  %assert (TYPE(fileName_ID)=="Number")
  %assign type = ::CompiledModel.systemFileNameTable.File%<fileName_ID>.Type
  %assign globalServerHeader = isGlobalServer && (type == "SystemHeader")
  %if globalServerHeader && !SLibIsCompactFileFormat()
    %assign fileName = fileName + "_private"
  %endif
  %if ISEMPTY(fileName)
    %return fileName
  %endif
  %assign fileRec = SLibAddModelFile(type, "Simulink", fileName)
  %if system.SystemSourceFileName == ::CompiledModel.System[GetBaseSystemIdx()].SystemSourceFileName
    %<SLibSetModelFileAttribute(fileRec, "Group", "model")>
  %else
    %if isRLS
      %<SLibSetModelFileAttribute(fileRec, "Group", "utility")>
    %else
      %<SLibSetModelFileAttribute(fileRec, "Group", "subsystem")>
    %endif
  %endif
  %return fileRec
%endfunction %% SLibCacheSystemCodeToFile
 
%%Function:SLibCacheSystemCodeToFile(codeGroupName,system,buffer)=========
%%Abstract:
%%Placecodebufferintorightsectionofarightfilerecordaccordingto
%%systemfilepackagetable.
%%systemisasystemrecord.(Includesystem)
%%
%function SLibCacheSystemCodeToFile(codeGroupName, system, buffer) void
  %if LibIsSystemExistingLibrary(system)
    %return
  %endif
   
  %if(CGMODEL_ACCESS("CGModel.TLCServerBlockOperationsInCPP"))
    %assign sysIdx = system.SystemIdx
    %<LibCacheSystemCodeToFile(codeGroupName, sysIdx, buffer)>
  %else
    %assign ownerFile = ::CompiledModel.System[system.FileNameOwnerIdx]
    %assign isRls = LibSystemIsReusedLibraryFcn(ownerFile)
    %assign isGlobalServer = LibIsGlobalServer(ownerFile)
    %assign fileRec = SLibGetFileRecForSystemCode(codeGroupName, system, isRls, isGlobalServer)
    %assign sectionName = SLibGetSectionNameForSystemCode(codeGroupName, system)
    %if !WHITE_SPACE(buffer) && !ISEMPTY(fileRec) && !ISEMPTY(sectionName)
      %<SLibSetModelFileAttribute(fileRec, sectionName, buffer)>
    %endif
  %endif
%endfunction %% SLibCacheSystemCodeToFile
 
%%Function:SLibGetFileRecForUtilCode(codeGroupName,utilFileName)============
%%Abstract:
%%ReturnthefilerecordtoholdspecifiedutilitycodeGroup.Return""
%%ifthiscodeGroupshouldnotbegenerated.Returnthepassed-infileRecif
%%instrucedbythefilepackagingtable("$pass_in_filename$"inFPT).
%%
%function SLibGetFileRecForUtilCode(codeGroupName, utilFileName)
  %assign fileName_ID = FcnGetFileNameTableID(codeGroupName)
  %assert (TYPE(fileName_ID)=="Number")
  %assign fileName = ::CompiledModel.FileNameTable.File%<fileName_ID>.Name
  %if ISEMPTY(fileName)
    %return ""
  %endif
  %if fileName == "$pass_in_filename$"
    %assign fileName = utilFileName
  %endif
  %assign fileCreator = ::CompiledModel.FileNameTable.File%<fileName_ID>.Creator
  %assign GroupName = ::CompiledModel.FileNameTable.File%<fileName_ID>.Group
  %assign type = ::CompiledModel.FileNameTable.File%<fileName_ID>.Type
  %assign fileRec = SLibAddModelFile(type, fileCreator, fileName)
  %<SLibSetModelFileAttribute(fileRec, "Group", GroupName)>
  %return fileRec
%endfunction %% SLibGetFileRecForUtilCode
 
%%Function:SLibCacheUtilCodeToFile(codeGroupName,utilFileRec,buffer)======
%%Abstract:
%%Placeutilitycodebufferintotherightsectionofarightfilerecord
%%accordingtoutilityfilepackagetable.
%%
%function SLibCacheUtilCodeToFile(codeGroupName, utilFileRec, buffer) void
  %assign utilRecName = LibGetFileRecordName(utilFileRec)
  %assign fileRec = SLibGetFileRecForUtilCode(codeGroupName, utilRecName)
  %assign sectionName = SLibGetSectionNameForCode(codeGroupName)
  %if !WHITE_SPACE(buffer) && !ISEMPTY(fileRec) && !ISEMPTY(sectionName)
    %if ISEMPTY(fileRec)
      %% if not specified in File Packaging Table, use the passed-in fileRec
      %<SLibSetModelFileAttribute(utilFileRec, sectionName, buffer)>
    %else
      %% if specifiled in File Packaging Table, do not use passed-in fileRec
      %<SLibSetModelFileAttribute(fileRec, sectionName, buffer)>
    %endif
  %endif
%endfunction %% SLibCacheUtilCodeToFile
 
%%Function:SLibFilterUtilSourceFile(utilFileRec)=====
%%Abstract:
%%Requesttofilteroututilitysourcefile.
%%
%function SLibFilterUtilSourceFile(utilFileRec) void
  %if !SLibIsCompactFileFormat() || ::CompiledModel.GenUtilsSrcInSharedLocation == 1
    %<SLibSetModelFileAttribute(utilFileRec, "Filter", 1)>
  %endif
%endfunction %% SLibFilterUtilSourceFile
 
%%Function:SLibCacheMacroToUtilityFile(macroName,macroBuf,codeGroup,fileRec)=
%%Abstract:
%%CachemacrobufintofileReconlywhenithasnotbeencached.
%%
%function SLibCacheMacroToUtilityFile(macroName, macroBuf, codeGroup, fileRec) void
  %assign definedMacro = SLibDirectAccessGetFileAttribute(fileRec, "DefinedMacro")
 
  %if ISEMPTY(FEVAL("strfind", definedMacro, macroName + ", "))
    %assign newDefinedMacro = definedMacro + macroName + ", "
    %<SLibDirectAccessSetFileAttribute(fileRec, "DefinedMacro", newDefinedMacro)>
    %<SLibCacheUtilCodeToFile(codeGroup, fileRec, macroBuf)>
  %endif
%endfunction %% SLibCacheMacroToUtilityFile
 
%%Function:FcnGenOpenExternCForCPP()=========================================
%function FcnGenOpenExternCForCPP() Output
  %if GenCPP
    %if SLibIsCompactFileFormat()
      extern "C" {
    %else
      #ifdef __cplusplus
      extern "C" {
      #endif
    %endif
  %endif
%endfunction %% FcnGenOpenExternCForCPP
 
%%Function:FcnGenCloseExternCForCPP()========================================
%function FcnGenCloseExternCForCPP() Output
  %if GenCPP
    %if SLibIsCompactFileFormat()
      } /* extern "C" */
    %else
      #ifdef __cplusplus
      } /* extern "C" */
      #endif
    %endif
  %endif
%endfunction %% FcnGenCloseExternCForCPP
 
%%Function:SLibIncludePrivateHeader()=========================================
%function SLibIncludePrivateHeader() Output
  %assign mdlPrivHdrFileName = SLibGetFileNameForCode("mdl_priv_hdr")
  %if !WHITE_SPACE(mdlPrivHdrFileName)
    #include "%<mdlPrivHdrFileName>.h"
  %endif
%endfunction %% SLibIncludePrivateHeader
 
%%Function:SLibIncludeModelTypesHeader()=========================================
%function SLibIncludeModelTypesHeader() Output
  %assign mdlTypesHdrFileName = SLibGetFileNameForCode("mdl_types_hdr")
  %if !WHITE_SPACE(mdlTypesHdrFileName)
    #include "%<mdlTypesHdrFileName>.h"
  %endif
%endfunction %% SLibIncludeModelTypesHeader
 
%%Function:SLibIncludeModelHeader()=========================================
%function SLibIncludeModelHeader() Output
  %assign mdlHeaderFile = SLibGetFileNameForCode("mdl_hdr")
  %if !WHITE_SPACE(mdlHeaderFile)
    #include "%<mdlHeaderFile>.h"
  %endif
%endfunction %% SLibIncludeModelHeader
 
%%Function:SLibIncludeRTnonFiniteHeader()=====================================
%function SLibIncludeRTnonFiniteHeader() Output
  %if SLibRealNonFinitesRequired() && ...
    (!SLibIsCompactFileFormat() || ::CompiledModel.GenUtilsSrcInSharedLocation == 1)
    #include "rt_nonfinite.h"
  %endif
%endfunction %% SLibIncludeRTnonFiniteHeader
 
%include "filepackagingtable.tlc"
 
%endif %% _FILEPACKAGINGLIB_
%%[EOF]filepackaginglib.tlc