%if EXISTS("_FILEPACKAGINGLIB_") == 0
%assign _FILEPACKAGINGLIB_ = 1
%include "fileoperations.tlc"
%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
%function SLibGenModelTypesFile()
%if SLibIsCompactFileFormat() && ...
!SLibGenCustomNonSharedHeaderFileForCSC()
%return TLC_FALSE
%endif
%return TLC_TRUE
%endfunction
%function FcnGetFileNameTableID(codeGroupName)
%assign value = GETFIELD(::CompiledModel.FilePackagingTable, codeGroupName)
%assign fileName_ID = value[0]
%assert (TYPE(fileName_ID)=="Number")
%return fileName_ID
%endfunction
%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
%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
%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
%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
%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
%function SLibGetFileNameForSystemCode(codeGroupName, system)
%if system.SystemSourceFileName != GetRootSystemSourceFileName()
%assign systemSrcFileName = SLibGetSystemOutputSrcFileBaseName(system)
%assign systemHdrFileName = SLibGetSystemOutputHdrFileBaseName(system)
%assign systemPrivHdrFileName = systemHdrFileName
%else
%assign systemHdrFileName = SLibGetFileNameForCode("mdl_hdr")
%assign systemSrcFileName = SLibGetFileNameForCode("mdl_src")
%assign systemPrivHdrFileName = systemHdrFileName + "_private"
%endif
%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
%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
%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
%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
%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
%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)
%<SLibSetModelFileAttribute(utilFileRec, sectionName, buffer)>
%else
%<SLibSetModelFileAttribute(fileRec, sectionName, buffer)>
%endif
%endif
%endfunction
%function SLibFilterUtilSourceFile(utilFileRec) void
%if !SLibIsCompactFileFormat() || ::CompiledModel.GenUtilsSrcInSharedLocation == 1
%<SLibSetModelFileAttribute(utilFileRec, "Filter", 1)>
%endif
%endfunction
%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
%function FcnGenOpenExternCForCPP() Output
%if GenCPP
%if SLibIsCompactFileFormat()
extern "C" {
%else
#ifdef __cplusplus
extern "C" {
#endif
%endif
%endif
%endfunction
%function FcnGenCloseExternCForCPP() Output
%if GenCPP
%if SLibIsCompactFileFormat()
} /* extern "C" */
%else
#ifdef __cplusplus
} /* extern "C" */
#endif
%endif
%endif
%endfunction
%function () Output
%assign mdlPrivHdrFileName = SLibGetFileNameForCode("mdl_priv_hdr")
%if !WHITE_SPACE(mdlPrivHdrFileName)
#include "%<mdlPrivHdrFileName>.h"
%endif
%endfunction
%function () Output
%assign mdlTypesHdrFileName = SLibGetFileNameForCode("mdl_types_hdr")
%if !WHITE_SPACE(mdlTypesHdrFileName)
#include "%<mdlTypesHdrFileName>.h"
%endif
%endfunction
%function () Output
%assign mdlHeaderFile = SLibGetFileNameForCode("mdl_hdr")
%if !WHITE_SPACE(mdlHeaderFile)
#include "%<mdlHeaderFile>.h"
%endif
%endfunction
%function () Output
%if SLibRealNonFinitesRequired() && ...
(!SLibIsCompactFileFormat() || ::CompiledModel.GenUtilsSrcInSharedLocation == 1)
#include "rt_nonfinite.h"
%endif
%endfunction
%include "filepackagingtable.tlc"
%endif