View previous topic :: View next topic |
Author |
Message |
viroxa
Joined: 28 Jul 2017 Posts: 78
|
Posted: Tue Aug 29, 2017 4:25 pm Post subject: Write Code to Text File |
|
|
Hello, everyone,
is there a way to automatically write the whole code of a project (or slices of it) to a text file?
Specifix example:
Each SUBROUTINE/FUNCTION has several commented lines at the top, containing information (what it does, when it was last changed, etc.).
Now it would be great, if I could have Plato or FTN95 extract these lines automatically from the whole project.
Thanks! |
|
Back to top |
|
|
mecej4
Joined: 31 Oct 2006 Posts: 1886
|
Posted: Thu Aug 31, 2017 1:00 am Post subject: |
|
|
You have made two conflicting requests. It seems to me that what you really want is just the subprogram declarations and adjacent comment lines, rather than "the whole code".
Do you want to extract just the comment lines from your source files? Do you want the context of these comment lines preserved (i.e., which subroutine/function does each comment line pertain to)? Do these comment lines precede the subprogram line, or do they follow them?
There are third party utilities to help with such work, but the task is by no means simple. If your source code was not structured so as to work with one of these utilities, that utility may not work properly. |
|
Back to top |
|
|
viroxa
Joined: 28 Jul 2017 Posts: 78
|
Posted: Thu Aug 31, 2017 7:36 am Post subject: |
|
|
You're right. Basically I only want to extract the lines between the subprogram declaration and IMPLICIT NONE.
But if there was a way to get the whole code (which I imagine to be easier) I could read the required lines from the output file.
I could just copy all the code to a text file manually, but that would take a while. |
|
Back to top |
|
|
mecej4
Joined: 31 Oct 2006 Posts: 1886
|
Posted: Thu Aug 31, 2017 9:36 am Post subject: |
|
|
Why do you need to create duplicate copies of your source files? The source files are text files and are present in one or more sub-directories of your project, wherever those files were created. |
|
Back to top |
|
|
viroxa
Joined: 28 Jul 2017 Posts: 78
|
Posted: Thu Aug 31, 2017 10:07 am Post subject: |
|
|
Every SUBROUTINE/FUNCTION contains this header:
Code: | SUBROUTINE form_freedom_array(fnodn,nequa)
!-------------------------------------------------------------------------
! Title: form_freedom_array
!
! Type: SUBROUTINE
!
! Purpose: Assemble array containing global DOFs and get number
! of equations in problem.
!
! Comments: -
!
! Licensing: -
!
! Originally modified: 21 August 2017
! Original Author: HX
!
! Last modified: 29 August 2017
! Modified by: HX
!
! Parameters:
! I/O INTEGER fnodn: Array containing properties of fixed nodes
! Dimensions: (ndofn,nnodn)
! O INTEGER nequa: Number of equations in FE-problem
!
IMPLICIT NONE |
What I now want is to collect all these headers in my project in ONE text file, which I can then use as a reference for myself to have an overview of what I have already available and what I have to start from scratch. |
|
Back to top |
|
|
LitusSaxonicum
Joined: 23 Aug 2005 Posts: 2388 Location: Yateley, Hants, UK
|
Posted: Thu Aug 31, 2017 1:51 pm Post subject: |
|
|
My advice to you is to do it with a word processor, as by the time you have a program working faultlessly, you could have done the job several times over by hand! Copy your source files to a different file, and block delete the code you don't want is probably less error prone than cutting and pasting the parts you need. Finding the line numbers for each SUBROUTINE or FUNCTION statement will help you get to them in future.
I have such headers in my own programs, although usually a lot shorter, and I program in what appears to be your style: card image layout (mostly), capitals for code, lower or mixed case for comments. Your 'title' and 'type' appear to me to unnecessarily duplicate the subprogram declaration, and your 'parameters' section makes it worth putting in INTENT statements (if you haven't already got them) as they do help the compiler find a class of common programming errors. |
|
Back to top |
|
|
mecej4
Joined: 31 Oct 2006 Posts: 1886
|
Posted: Thu Aug 31, 2017 2:54 pm Post subject: |
|
|
Here is the source code of a C utility to do what you (viroxa) want; I modified an existing utility that I had for this purpose. It assumes the following input file structure:
1. heading line containing PROGRAM, SUBROUTINE or <type> FUNCTION
2. any number of comment lines
3. line containing IMPLICIT NONE statement
The same processing could be done in Fortran, if you want to write the code.
Code: |
/* Utility to echo subprogram heading and subsequent comment lines
until an "IMPLICIT NONE" line is seen.
USAGE: comnts < abc.f90 > myheaders.txt
...
comnts < xyz.f90 >> myheaders.txt
Fortran source is read from STDIN, and must be free form.
*/
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <clib.h>
main(){
char line[200],*ptr;
int i,printon;
printon=0;
while(fgets(line,200,stdin)){
i=0; while(line[i] != '\n')i++; // remove trailing blanks
do i--; while(line[i]==' '); line[++i]='\n'; line[++i]='\0';
i=0;
while(line[i]==' ')i++; // skip leading blanks
if(line[i] != '!'){
if(strnicmp(line+i,"subroutine",10)==0)printon=1;
else if(strnicmp(line+i,"program",7)==0)printon=1;
else if(strnicmp(line+i,"implicit none",13)==0)printon=0;
else {
ptr=strchr(line+i,'f'); if(!ptr)ptr=strchr(line+i,'F');
if(ptr && strnicmp(ptr,"function",8)==0)printon=1;
}
}
if(printon)printf(line);
}
}
|
You can use any C compiler, including Silverfrost SCC (the "#include <clib.h>" line is needed for only SCC). |
|
Back to top |
|
|
viroxa
Joined: 28 Jul 2017 Posts: 78
|
Posted: Sat Sep 02, 2017 11:09 pm Post subject: |
|
|
Thanks! |
|
Back to top |
|
|
|