You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: render_workspace.m
    path of file: ./repos/osqp-matlab/codegen
    
    the code of the file until where you have to start completion: function render_workspace( work, hfname, cfname, embedded_flag )
%RENDER_WORKSPACE Write workspace to header file.

incFile = fopen(hfname, 'w');
srcFile = fopen(cfname, 'w');

% Add an include-guard statement
[~, fname, ~] = fileparts(hfname);
incGuard = [upper(fname), '_H'];
fprintf(incFile, '#ifndef %s\n',   incGuard);
fprintf(incFile, '#define %s\n\n', incGuard);

% Print comment headers containing the generation time into the files
daystr  = datestr(now, 'mmmm dd, yyyy');
timestr = datestr(now, 'HH:MM:SS');
fprintf(incFile, '/*\n');
fprintf(incFile, ' * This file was autogenerated by OSQP-Matlab on %s at %s.\n', daystr, timestr);
fprintf(incFile, ' * \n');
fprintf(incFile, ' * This file contains the prototypes for all the workspace variables needed\n');
fprintf(incFile, ' * by OSQP. The actual data is contained inside workspace.c.\n');
fprintf(incFile, ' */\n\n');

fprintf(srcFile, '/*\n');
fprintf(srcFile, ' * This file was autogenerated by OSQP-Matlab on %s at %s.\n', daystr, timestr);
fprintf(srcFile, ' * \n');
fprintf(srcFile, ' * This file contains the workspace variables needed by OSQP.\n');
fprintf(srcFile, ' */\n\n');


% Include types, constants and private header
fprintf(incFile, '#include \"types.h\"\n');
fprintf(incFile, '#include \"qdldl_interface.h\"\n\n');

fprintf(srcFile, '#include \"types.h\"\n');
fprintf(srcFile, '#include \"qdldl_interface.h\"\n\n');

% Write data structure
write_data_src(srcFile, work.data);
write_data_inc(incFile, work.data);

% Write settings structure
write_settings_src(srcFile, work.settings, embedded_flag);
write_settings_inc(incFile, work.settings, embedded_flag);

% Write scaling structure
write_scaling_src(srcFile, work.scaling);
write_scaling_inc(incFile, work.scaling);

% Write linsys_solver structure
write_linsys_solver_src(srcFile, work.linsys_solver, embedded_flag);
write_linsys_solver_inc(incFile, work.linsys_solver, embedded_flag);


    
function render_workspace( work, hfname, cfname, embedded_flag )
%RENDER_WORKSPACE Write workspace to header file.

incFile = fopen(hfname, 'w');
srcFile = fopen(cfname, 'w');

% Add an include-guard statement
[~, fname, ~] = fileparts(hfname);
incGuard = [upper(fname), '_H'];
fprintf(incFile, '#ifndef %s\n',   incGuard);
fprintf(incFile, '#define %s\n\n', incGuard);

% Print comment headers containing the generation time into the files
daystr  = datestr(now, 'mmmm dd, yyyy');
timestr = datestr(now, 'HH:MM:SS');
fprintf(incFile, '/*\n');
fprintf(incFile, ' * This file was autogenerated by OSQP-Matlab on %s at %s.\n', daystr, timestr);
fprintf(incFile, ' * \n');
fprintf(incFile, ' * This file contains the prototypes for all the workspace variables needed\n');
fprintf(incFile, ' * by OSQP. The actual data is contained inside workspace.c.\n');
fprintf(incFile, ' */\n\n');

fprintf(srcFile, '/*\n');
fprintf(srcFile, ' * This file was autogenerated by OSQP-Matlab on %s at %s.\n', daystr, timestr);
fprintf(srcFile, ' * \n');
fprintf(srcFile, ' * This file contains the workspace variables needed by OSQP.\n');
fprintf(srcFile, ' */\n\n');


% Include types, constants and private header
fprintf(incFile, '#include \"types.h\"\n');
fprintf(incFile, '#include \"qdldl_interface.h\"\n\n');

fprintf(srcFile, '#include \"types.h\"\n');
fprintf(srcFile, '#include \"qdldl_interface.h\"\n\n');

% Write data structure
write_data_src(srcFile, work.data);
write_data_inc(incFile, work.data);

% Write settings structure
write_settings_src(srcFile, work.settings, embedded_flag);
write_settings_inc(incFile, work.settings, embedded_flag);

% Write scaling structure
write_scaling_src(srcFile, work.scaling);
write_scaling_inc(incFile, work.scaling);

% Write linsys_solver structure
write_linsys_solver_src(srcFile, work.linsys_solver, embedded_flag);
write_linsys_solver_inc(incFile, work.linsys_solver, embedded_flag);

% Define empty solution structure
write_solution_src(srcFile, work.data.n, work.data.m);
write_solution_inc(incFile, work.data.n, work.data.m);

% Define info structure
write_info_src(srcFile);
write_info_inc(incFile);

% Define workspace structure
write_workspace_src(srcFile, work.data.n, work.data.m, work.rho_vectors, embedded_flag);
write_workspace_inc(incFile, work.data.n, work.data.m, work.rho_vectors, embedded_flag);

% The end