function GetVarAnnotationsSciFile(FileInfoDatFile); // function GetVarAnnotationsSciFile(FileInfoDatFile); // -------------------------------------------------------------------------------- // This function reads the .sci input file and returns all the variable annotations // found in that file. // // Input data: // FileInfoDatFile: name of the .dat file containing the FileInfo structure. // SharedInfoDatFile: it is a buffer containing parameters that are exchanged by the // functions of the SCI2C tool. // // Output data: // // Status: // 21-Jun-2007 -- Nutricato Raffaele: Author. // ----------------------------------------------------------------- // --------------------- // --- Load section. --- // --------------------- // --- Load File Info Structure. --- load(FileInfoDatFile,'FileInfo'); // --- Load Shared Info Structure. --- load(FileInfo.SharedInfoDatFile,'SharedInfo'); // --- Extraction of the function name and number. --- funname = SharedInfo.Next(1).SCIFunName; funnumber = SharedInfo.NextSCIFunNumber; // --- Load GlobalVars Structure. --- load(FileInfo.GlobalVarFileName,'GlobalVars'); // --- Load LocalVars Structure. --- load(FileInfo.Funct(funnumber).LocalVarFileName,'LocalVars'); // ------------------------- // --- End load section. --- // ------------------------- SciFileName = FileInfo.Funct(funnumber).SCIFileName; PrintStepInfo('Get annotations from '+SciFileName,... FileInfo.GeneralReport,'both'); // --------------------------------------- // --- Open the .sci file (read only). --- // --------------------------------------- [inscifid,inscierr] = mopen(SciFileName,'r'); if (inscierr < 0) SCI2Cerror(['Cannot open: '+SciFileName]) end // --- Loop Initialization. --- GlobalVarNames = []; // ---------------------------------------------- // --- Loop over the lines of the input file. --- // ---------------------------------------------- line_position = 0; while (meof(inscifid) == 0) check_string = stripblanks(mgetl(inscifid,1)); line_position = line_position + 1; if (length(check_string) >= 1) if (SCI2Cstrncmps1size(SharedInfo.Annotations.GBLVAR,check_string)) PrintStringInfo('Line '+string(line_position)+' - Global Variables: '+' ""'+check_string+' ""',... FileInfo.GeneralReport,'both','y'); TmpGlobalAnn = stripblanks(tokens(check_string,' ')); GlobalVarNames = [GlobalVarNames,TmpGlobalAnn(2:max(size(TmpGlobalAnn)))]; clear TmpGlobalAnn elseif (SCI2Cstrncmps1size(SharedInfo.Annotations.VARTYPE,check_string)) // Assuming the following annotation: // //_SCI2C_VARTYPE: name | type | size // Ex.: // //_SCI2C_VARTYPE: myvar | z | [10,4] TmpVarAnn = GetVarTypeAnnotation(check_string); PrintStringInfo('Line '+string(line_position)+' - VARTYPE annotation: '+' ""'+check_string+' ""',... FileInfo.GeneralReport,'file','y'); // Check if the variable is global or local if length(find(GlobalVarNames==TmpVarAnn(2))) > 0 //RN Qui manca un check per verificare se sto ridefinendo una global gia definita GlobalVarsNum = size(GlobalVars,1) + 1; GlobalVars(GlobalVarsNum).Name = TmpVarAnn(2); GlobalVars(GlobalVarsNum).CName = TmpVarAnn(2); GlobalVars(GlobalVarsNum).Type = TmpVarAnn(3); GlobalVars(GlobalVarsNum).Size = eval(TmpVarAnn(4)); else //RN Qui manca un check per verificare se sto ridefinendo una local gia definita LocalVarsNum = size(LocalVars,1) + 1; LocalVars(LocalVarsNum).Name = TmpVarAnn(2); LocalVars(LocalVarsNum).CName = TmpVarAnn(2); LocalVars(LocalVarsNum).Type = TmpVarAnn(3); LocalVars(LocalVarsNum).Size = eval(TmpVarAnn(4)); end clear TmpVarAnn end end end // -------------------------------------------------- // --- End loop over the lines of the input file. --- // -------------------------------------------------- mclose(inscifid); // --------------------- // --- Save section. --- // --------------------- // --- Save File Info Structure. --- save(FileInfoDatFile,FileInfo); // Save Global and Local variables info into .dat files. save(FileInfo.GlobalVarFileName,GlobalVars); save(FileInfo.Funct(funnumber).LocalVarFileName,LocalVars); endfunction