home *** CD-ROM | disk | FTP | other *** search
Text File | 1988-05-03 | 109.5 KB | 1,961 lines |
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --combine.ada
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- with TEXT_IO;
- procedure COMBINE_FILES is
- use TEXT_IO;
- package int_io is new integer_io(integer);
- use INT_IO;
-
- type HELP_TYPE is array (1..20) of STRING(1..70);
-
- HELP : HELP_TYPE := (
- "This procedure reads file names from STANDARD_INPUT and copies those ",
- "files onto another separated by two rows of commented colons and the ",
- "basic name of the file, so that they may be automatically separated ",
- "The file name may be preceded by a directory name which is stripped ",
- "to make the basic name, and the procedure will affix a default ",
- "extension to the input name if the input named file does not exist ",
- "The directory format and default extension are system dependent ",
- " ",
- "USAGE: ",
- "A target file name is requested, ",
- "Target file for combined text file <RETURN> => ",
- "then the files to be combined together ",
- "File to be appended =>DBA4:[WHITAKER]COMBINE ",
- "A default extension will be added if required e.g. COMBINE.TXT; ",
- "or the files may be referenced in a file of files preceded by '@' ",
- "and copy that file preceded by the header ",
- "--::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::",
- "--COMBINE ",
- "--::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::",
- " ");
-
-
- -- ############## S Y S T E M D E P E N D E N C Y ##################
- DEFAULT_INPUT_PREFIX_TERMINATOR : constant CHARACTER := ']'; --##
- DEFAULT_EXTENSION : constant STRING := ".TXT"; --##
- -- Also see use of this and the removal of special characters --##
- -- ####################################################################
-
- PRE_FLAG : constant STRING :=
- "--::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::";
- FILE_SEPARATION_FLAG : constant STRING := "--";
- POST_FLAG : constant STRING :=
- "--::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::";
-
- MAXIMUM_NAME_SIZE : constant NATURAL := 140;
- MAXIMUM_LINE_SIZE : constant NATURAL := 250;
-
- TARGET_FILE : TEXT_IO.FILE_TYPE;
- TARGET_FILE_NAME : STRING(1..MAXIMUM_NAME_SIZE) := (OTHERS => ' ');
- TARGET_FILE_NAME_LAST : INTEGER := 0;
-
- INPUT_FILE : TEXT_IO.FILE_TYPE;
- INPUT_FILE_NAME : STRING(1..MAXIMUM_NAME_SIZE) := (OTHERS => ' ');
- INPUT_FILE_NAME_LAST : INTEGER := 0;
-
- FILE_OF_FILE_NAMES : TEXT_IO.FILE_TYPE;
-
- BASIC_FILE_NAME_FIRST : INTEGER := 1;
- BASIC_FILE_NAME_LAST : INTEGER := 0;
-
- LINE : STRING(1..MAXIMUM_LINE_SIZE) := (OTHERS => ' ');
- LINE_LAST : INTEGER := 0;
-
- STATEMENTS : NATURAL := 0;
- LINE_COUNT : NATURAL := 0;
- COMMENTS : NATURAL := 0;
-
- TOTAL_STATEMENTS : NATURAL := 0;
- TOTAL_LINE_COUNT : NATURAL := 0;
- TOTAL_COMMENTS : NATURAL := 0;
-
-
- ----------------------------------------------------------------------------
-
- procedure EAT_LEADING_BLANKS(NAME : in out STRING; LAST: in out NATURAL) is
- begin
- while LAST >= 1 and NAME(1) = ' ' loop
- NAME(1..LAST-1) := NAME(2..LAST);
- LAST := LAST - 1;
- end loop;
- end EAT_LEADING_BLANKS;
-
- procedure TERMINATE_NAME_AT_THE_BLANK(NAME : in out STRING;
- LAST : in out NATURAL) is
- begin
- for I in 2..LAST loop
- if NAME(I) = ' ' then
- LAST := I - 1;
- exit;
- end if;
- end loop;
- end TERMINATE_NAME_AT_THE_BLANK;
-
- procedure GET_FILE_NAME(INPUT_FILE_NAME : in out STRING;
- INPUT_FILE_NAME_LAST : in out NATURAL;
- HELP : in HELP_TYPE) is
- begin
- PUT("File name =>");
- loop -- until a valid name, absorbing commments, file-of-files, '?'
- if IS_OPEN(FILE_OF_FILE_NAMES) then -- Check input file is used
- if END_OF_FILE(FILE_OF_FILE_NAMES) then
- CLOSE(FILE_OF_FILE_NAMES); -- Have come to the end of a
- SET_INPUT(STANDARD_INPUT); -- file-of-files and want to
- end if; -- return to keyboard input
- end if;
- GET_LINE(INPUT_FILE_NAME, INPUT_FILE_NAME_LAST);
-
- EAT_LEADING_BLANKS(INPUT_FILE_NAME, INPUT_FILE_NAME_LAST);
- TERMINATE_NAME_AT_THE_BLANK(INPUT_FILE_NAME, INPUT_FILE_NAME_LAST);
-
- if INPUT_FILE_NAME_LAST = 1 and
- INPUT_FILE_NAME(1) = '?' then -- Query for help
- for I in HELP'FIRST..HELP'LAST loop
- PUT_LINE(HELP(I));
- end loop;
- PUT(""""); PUT(DEFAULT_EXTENSION);
- PUT_LINE(""" is the current default extension");
- PUT("File name =>");
-
- elsif INPUT_FILE_NAME_LAST >= 2 and
- INPUT_FILE_NAME(1..2) = "--" then -- Skip comment lines
- null;
-
- elsif INPUT_FILE_NAME_LAST >= 2 and
- INPUT_FILE_NAME(1) = '@' then -- File of file names
- TRY_FILE_OF_FILES:
- begin
- OPEN(FILE_OF_FILE_NAMES, IN_FILE,
- INPUT_FILE_NAME(2..INPUT_FILE_NAME_LAST));
- SET_INPUT(FILE_OF_FILE_NAMES);
- exception
- when NAME_ERROR =>
- PUT("NAME_ERROR in name given for file-of-files, give full name");
-
- end TRY_FILE_OF_FILES;
- NEW_LINE;
- PUT("File name =>");
-
- elsif INPUT_FILE_NAME_LAST = 0 then -- Use a blank line to
- NEW_LINE; -- quit the program
- exit;
-
- else -- Regular file name
- exit;
- end if;
- end loop;
- exception
- when END_ERROR =>
- SET_INPUT(STANDARD_INPUT);
- end GET_FILE_NAME;
-
- procedure OPEN_INPUT_FILE_NAME_MAYBE_ADD_EXTENSION
- (INPUT_FILE : in out FILE_TYPE;
- INPUT_FILE_NAME : in out STRING;
- INPUT_FILE_NAME_LAST : in out NATURAL) is
- begin
- OPEN(INPUT_FILE, IN_FILE,
- INPUT_FILE_NAME(1..INPUT_FILE_NAME_LAST));
- exception
- when NAME_ERROR =>
- INPUT_FILE_NAME_LAST := INPUT_FILE_NAME_LAST +
- DEFAULT_EXTENSION'LAST;
- INPUT_FILE_NAME(1..INPUT_FILE_NAME_LAST) :=
- INPUT_FILE_NAME(1..
- INPUT_FILE_NAME_LAST - DEFAULT_EXTENSION'LAST) &
- DEFAULT_EXTENSION;
- OPEN(INPUT_FILE, IN_FILE,
- INPUT_FILE_NAME(1..INPUT_FILE_NAME_LAST));
- end OPEN_INPUT_FILE_NAME_MAYBE_ADD_EXTENSION;
-
- ----------------------------------------------------------------------------
-
- procedure COPY_FILE_AND_COUNT is
- NEXT_CHAR : NATURAL := 1;
- C : CHARACTER := ' ';
- LEVEL : INTEGER := 0;
-
- procedure FETCH (CH : in out CHARACTER) is
- begin
- if NEXT_CHAR > LINE_LAST then
- loop
- TEXT_IO.GET_LINE(INPUT_FILE, LINE, LINE_LAST);
- -- To take care of editors that fill out blocks with nulls
- if END_OF_FILE(INPUT_FILE) and LINE_LAST = 0 then
- raise END_ERROR;
- end if;
- TEXT_IO.PUT_LINE(TARGET_FILE, LINE(1..LINE_LAST));
- if END_OF_PAGE(INPUT_FILE) then
- SKIP_PAGE(INPUT_FILE);
- NEW_PAGE(TARGET_FILE);
- end if;
- LINE_COUNT := LINE_COUNT + 1;
- NEXT_CHAR := 1;
- exit when NEXT_CHAR <= LINE_LAST;
- end loop;
- end if;
- CH := LINE (NEXT_CHAR);
- NEXT_CHAR := NEXT_CHAR + 1;
- end FETCH;
-
- begin
- STATEMENTS := 0;
- LINE_COUNT := 0;
- COMMENTS := 0;
-
- loop
- FETCH (C);
- -- Check for comment on the line
- if C = '-' then
- FETCH (C);
- -- Which is signaled by the '-' following a '-'
- if C = '-' then
- -- Then just skip the rest of the line and go to the next
- NEXT_CHAR := LINE_LAST + 1;
- COMMENTS := COMMENTS + 1;
- end if;
- end if;
-
- -- Check for one of the characters which introduce code constructs
- -- like string or character literal or formal parameter list
- -- within which a ';' does not terminate a "line of code"
- if C = '(' or C = '"' or C = '%' or C = ''' then
-
- -- Check for opening parentheses
- -- Every ';' within is in a formal parameter list
- if C = '(' then
- -- Count the number of levels of parentheses
- LEVEL := LEVEL + 1;
- -- Read ahead until the whole construct is closed, LEVEL = 0
- while LEVEL > 0 loop
- FETCH (C);
- if C = '(' then
- -- Increase the level if another '(' is found
- LEVEL := LEVEL + 1;
- elsif C = ')' then
- -- Decrease the level if a ')' is found
- LEVEL := LEVEL - 1;
- end if;
- end loop;
-
- -- Now check for string brackets of either kind, " or %
- elsif C = '"' or C = '%' then
- -- Treat them in parallel, one must lead off
- if C = '"' then
- loop
- FETCH (C);
- -- Loop until the close comes
- -- If there is a doubled character it just starts again
- exit when C = '"';
- end loop;
- -- The '%' is handled exactly the same way as '"'
- elsif C = '%' then
- loop
- FETCH (C);
- exit when C = '%';
- end loop;
- end if;
-
- -- Character literals are just three characters long including '
- elsif C = ''' then
- FETCH (C);
- FETCH (C);
- end if;
-
- -- Any ';' that can be found at this point after all exclusions
- -- must be a valid "Ada statement" terminator
- elsif C = ';' then
- STATEMENTS := STATEMENTS + 1;
-
- end if;
-
- end loop;
-
- end COPY_FILE_AND_COUNT;
-
- ------------------------------------------------------------------------------
-
- begin
- PUT_LINE("COMBINE_FILES : (or '@' and a file of file names, ? for help)");
-
- loop -- To create a target file
- PUT("Target file for combined text file <RETURN> =>");
- GET_LINE(TARGET_FILE_NAME, TARGET_FILE_NAME_LAST);
- if TARGET_FILE_NAME_LAST = 1 and
- TARGET_FILE_NAME(1) = '?' then -- Query for help
- for I in HELP'FIRST..HELP'LAST loop
- PUT_LINE(HELP(I));
- end loop;
- else
- CREATE_TARGET_OR_RAISE_EXCEPTION:
- begin
- CREATE(TARGET_FILE, OUT_FILE,
- TARGET_FILE_NAME(1..TARGET_FILE_NAME_LAST));
- exception -- Checking for the prior existance of the file
-
- when NAME_ERROR =>
- PUT("######## NAME_ERROR in creating file name " &
- INPUT_FILE_NAME(1..INPUT_FILE_NAME_LAST));
- NEW_LINE;
- when STATUS_ERROR =>
- PUT("######## STATUS_ERROR in creating file name " &
- INPUT_FILE_NAME(1..INPUT_FILE_NAME_LAST));
- NEW_LINE;
- when USE_ERROR =>
- PUT("######## USE_ERROR in creating file name " &
- INPUT_FILE_NAME(1..INPUT_FILE_NAME_LAST));
- NEW_LINE;
- end CREATE_TARGET_OR_RAISE_EXCEPTION;
- end if;
- if IS_OPEN(TARGET_FILE) then
- exit;
- end if;
- end loop;
-
- PUT_LINE("Files to be combined:");
-
- loop -- on the processing of the series of files
-
- GET_FILE_NAME(INPUT_FILE_NAME, INPUT_FILE_NAME_LAST, HELP);
-
- exit when INPUT_FILE_NAME_LAST = 0; -- Finished
-
- -- Count off the prefix from the basic file name
- BASIC_FILE_NAME_FIRST := 1;
- for I in 1..INPUT_FILE_NAME_LAST-1 loop
- if INPUT_FILE_NAME(I) = DEFAULT_INPUT_PREFIX_TERMINATOR then
- BASIC_FILE_NAME_FIRST := I + 1;
- exit;
- end if;
- end loop;
-
- BASIC_FILE_NAME_LAST := INPUT_FILE_NAME_LAST;
- -- Count back to the last ';' over any version number (for VAX/VMS) #####
- for I in reverse BASIC_FILE_NAME_FIRST..INPUT_FILE_NAME_LAST loop
- if INPUT_FILE_NAME(I) = ';' then
- BASIC_FILE_NAME_LAST := I - 1;
- exit;
- end if;
- end loop;
-
- -- Check if the ending is the default extension, remove for basic name
- -- if BASIC_FILE_NAME_LAST > DEFAULT_EXTENSION'LAST and then
- if BASIC_FILE_NAME_LAST > DEFAULT_EXTENSION'LAST then
- if
- INPUT_FILE_NAME(BASIC_FILE_NAME_LAST - DEFAULT_EXTENSION'LAST..
- BASIC_FILE_NAME_LAST) = DEFAULT_EXTENSION then
- BASIC_FILE_NAME_LAST := BASIC_FILE_NAME_LAST - DEFAULT_EXTENSION'LAST;
- end if;
- end if;
-
- OPEN_INPUT_FILE_NAME_MAYBE_ADD_EXTENSION(INPUT_FILE,
- INPUT_FILE_NAME, INPUT_FILE_NAME_LAST);
-
- if IS_OPEN(INPUT_FILE) then -- If we were successful opening file
- PUT_LINE(INPUT_FILE_NAME(1..INPUT_FILE_NAME_LAST));
- -- Put out the interfile flags
- PUT(TARGET_FILE, PRE_FLAG); NEW_LINE(TARGET_FILE);
- PUT(TARGET_FILE, FILE_SEPARATION_FLAG);
- PUT_LINE(TARGET_FILE,
- INPUT_FILE_NAME(BASIC_FILE_NAME_FIRST..BASIC_FILE_NAME_LAST));
- PUT(TARGET_FILE, POST_FLAG); NEW_LINE(TARGET_FILE);
-
- TRANSFER_FILE:
- -- Assuming that it is a text file of reasonable lines
- begin
- COPY_FILE_AND_COUNT;
- exception
- when END_ERROR =>
- null;
- end TRANSFER_FILE;
-
- CLOSE(INPUT_FILE);
- PUT("STATEMENTS = "); PUT(STATEMENTS);
- PUT(" LINE_COUNT = "); PUT(LINE_COUNT);
- PUT(" COMMENTS = "); PUT(COMMENTS);
- NEW_LINE;
- NEW_LINE;
- TOTAL_STATEMENTS := TOTAL_STATEMENTS + STATEMENTS;
- TOTAL_LINE_COUNT := TOTAL_LINE_COUNT + LINE_COUNT;
- TOTAL_COMMENTS := TOTAL_COMMENTS + COMMENTS;
-
- end if;
-
- end loop;
-
- CLOSE(TARGET_FILE);
- if (STATEMENTS = TOTAL_STATEMENTS) and (LINE_COUNT = TOTAL_LINE_COUNT) then
- null;
- else
- NEW_LINE; NEW_LINE;
- PUT_LINE("TOTALS");
- NEW_LINE;
- PUT("STATEMENTS = "); PUT(TOTAL_STATEMENTS);
- PUT(" LINE_COUNT = "); PUT(TOTAL_LINE_COUNT);
- PUT(" COMMENTS = "); PUT(TOTAL_COMMENTS);
- NEW_LINE;
- NEW_LINE;
- end if;
-
- exception
- when others =>
- PUT_LINE("Unexpected exception raised in COMBINE");
- CLOSE(TARGET_FILE);
- end COMBINE_FILES;
-
-
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --combine.ins
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- package SD_COMBINE_FILES is end;
- with SD_COMBINE_FILES;
- with SD_Run_Time_Monitor; use SD_Run_Time_Monitor;
- with SD_Type_Definitions; use SD_Type_Definitions;
- with SD_User_Interface; use SD_User_Interface;
- with SD_Runtime_Declarations; use SD_Runtime_Declarations;
- with SD_Runtime_Utilities; use SD_Runtime_Utilities;
- with SD_Trace_Predefined_Types; use SD_Trace_Predefined_Types;
- with SD_Generic_Templates; use SD_Generic_Templates;
- with String_Pkg;
-
- with TEXT_IO;
- procedure COMBINE_FILES is
- SD_CURRENT_COMPILATION_UNIT: constant String := "COMBINE_FILES";
- procedure COMBINE_FILES_SI2AFSD_1861_F(S: STRING := "");
-
- use TEXT_IO;
- package INT_IO is
- new INTEGER_IO(INTEGER);
- use INT_IO;
- type HELP_TYPE is array(1 .. 20) of STRING(1 .. 70);
- procedure SI2AFSD_1861_D(Name: String; Var: STANDARD.COMBINE_FILES.HELP_TYPE);
- procedure SI2AFSD_1861_S(Var: in out STANDARD.COMBINE_FILES.HELP_TYPE);
- function SI2AFSD_1861_M(Var: STANDARD.COMBINE_FILES.HELP_TYPE) return String;
-
- HELP : HELP_TYPE := (
- "This procedure reads file names from STANDARD_INPUT and copies those "
- ,
- "files onto another separated by two rows of commented colons and the "
- ,
- "basic name of the file, so that they may be automatically separated "
- ,
- "The file name may be preceded by a directory name which is stripped "
- ,
- "to make the basic name, and the procedure will affix a default "
- ,
- "extension to the input name if the input named file does not exist "
- ,
- "The directory format and default extension are system dependent "
- ,
- " "
- ,
- "USAGE: "
- ,
- "A target file name is requested, "
- ,
- "Target file for combined text file <RETURN> => "
- ,
- "then the files to be combined together "
- ,
- "File to be appended =>DBA4:[WHITAKER]COMBINE "
- ,
- "A default extension will be added if required e.g. COMBINE.TXT; "
- ,
- "or the files may be referenced in a file of files preceded by '@' "
- ,
- "and copy that file preceded by the header "
- ,
- "--::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
- ,
- "--COMBINE "
- ,
- "--::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
- ,
- " "
- );
- DEFAULT_INPUT_PREFIX_TERMINATOR : constant CHARACTER := ']';
- DEFAULT_EXTENSION : constant STRING := ".TXT";
- PRE_FLAG : constant STRING :=
- "--::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
- ;
- FILE_SEPARATION_FLAG : constant STRING := "--";
- POST_FLAG : constant STRING :=
- "--::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
- ;
- MAXIMUM_NAME_SIZE : constant NATURAL := 140;
- MAXIMUM_LINE_SIZE : constant NATURAL := 250;
- TARGET_FILE : TEXT_IO.FILE_TYPE;
- TARGET_FILE_NAME : STRING(1 .. MAXIMUM_NAME_SIZE) := (others => ' ');
- TARGET_FILE_NAME_LAST : INTEGER := 0;
- INPUT_FILE : TEXT_IO.FILE_TYPE;
- INPUT_FILE_NAME : STRING(1 .. MAXIMUM_NAME_SIZE) := (others => ' ');
- INPUT_FILE_NAME_LAST : INTEGER := 0;
- FILE_OF_FILE_NAMES : TEXT_IO.FILE_TYPE;
- BASIC_FILE_NAME_FIRST : INTEGER := 1;
- BASIC_FILE_NAME_LAST : INTEGER := 0;
- LINE : STRING(1 .. MAXIMUM_LINE_SIZE) := (others => ' ');
- LINE_LAST : INTEGER := 0;
- STATEMENTS : NATURAL := 0;
- LINE_COUNT : NATURAL := 0;
- COMMENTS : NATURAL := 0;
- TOTAL_STATEMENTS : NATURAL := 0;
- TOTAL_LINE_COUNT : NATURAL := 0;
- TOTAL_COMMENTS : NATURAL := 0;
- procedure EAT_LEADING_BLANKS(NAME : in out STRING;
- LAST : in out NATURAL) is
- procedure EAT_LEADING_BLANKS_SI2AFSD_1861_F(S: STRING := "");
-
- procedure EAT_LEADING_BLANKS_SI2AFSD_1861_F(S: STRING := "") is
- begin
- SD_Runtime_Utilities.Searching_Scope("STANDARD.COMBINE_FILES." &
- "EAT_LEADING_BLANKS.");
- SD_Runtime_Utilities.Check_Loop_Param(S);
- case SD_Runtime_Utilities.Search_For_Variable("NAME LAST ") is
- when 1 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.EAT_LEADING_BLANKS.NAME);
- else
- SI2AFSD_1861_D("COMBINE_FILES.EAT_LEADING_BLANKS.NAME",STANDARD.
- COMBINE_FILES.EAT_LEADING_BLANKS.NAME);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 2 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.EAT_LEADING_BLANKS.LAST);
- else
- SI2AFSD_1861_D("COMBINE_FILES.EAT_LEADING_BLANKS.LAST",STANDARD.
- COMBINE_FILES.EAT_LEADING_BLANKS.LAST);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when others =>
- null;
- end case;
- if SD_Runtime_Utilities.Search_Outer_Scope then
- COMBINE_FILES_SI2AFSD_1861_F;
- else
- SD_Runtime_Utilities.Error_Message("Variable not found");
- end if;
- exception
- when Constraint_Error =>
- SD_Runtime_Utilities.Error_Message("Constraint error raised");
- when others => null;
- end;
- procedure SI2AFSD_1861_Local_Break is new SD_Local_Break(
- SD_Current_Compilation_Unit, 1,EAT_LEADING_BLANKS_SI2AFSD_1861_F);
-
- begin
- SD_RTM.Entering_Unit(SD_CURRENT_COMPILATION_UNIT, 1);
- SI2AFSD_1861_Local_Break( 1, 89);
- while LAST >= 1 and NAME(1) = ' ' loop
- SI2AFSD_1861_Local_Break( 2, 90);
- NAME(1 .. LAST - 1) := NAME(2 .. LAST);
- SI2AFSD_1861_Local_Break( 3, 91);
- LAST := LAST - 1;
- end loop;
- SI2AFSD_1861_Local_Break( 4, 93);
- SD_RTM.Exiting_Unit(SD_CURRENT_COMPILATION_UNIT, 1);
- exception
- when others =>
- if SD_RTM'CALLABLE then
- SD_RTM.Exiting_Unit(SD_CURRENT_COMPILATION_UNIT, 1);
- raise;
- end if;
- end EAT_LEADING_BLANKS;
- procedure TERMINATE_NAME_AT_THE_BLANK(NAME : in out STRING;
- LAST : in out NATURAL) is
- procedure TERMINATE_NAME_AT_THE_BLANK_SI2AFSD_1861_F(S: STRING := "");
-
- procedure TERMINATE_NAME_AT_THE_BLANK_SI2AFSD_1861_F(S: STRING := "") is
- begin
- SD_Runtime_Utilities.Searching_Scope("STANDARD.COMBINE_FILES." &
- "TERMINATE_NAME_AT_THE_BLANK.");
- SD_Runtime_Utilities.Check_Loop_Param(S);
- case SD_Runtime_Utilities.Search_For_Variable("NAME LAST ") is
- when 1 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.TERMINATE_NAME_AT_THE_BLANK.NAME);
- else
- SI2AFSD_1861_D("COMBINE_FILES.TERMINATE_NAME_AT_THE_BLANK.NAME",STANDARD.
- COMBINE_FILES.TERMINATE_NAME_AT_THE_BLANK.NAME);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 2 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.TERMINATE_NAME_AT_THE_BLANK.LAST);
- else
- SI2AFSD_1861_D("COMBINE_FILES.TERMINATE_NAME_AT_THE_BLANK.LAST",STANDARD.
- COMBINE_FILES.TERMINATE_NAME_AT_THE_BLANK.LAST);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when others =>
- null;
- end case;
- if SD_Runtime_Utilities.Search_Outer_Scope then
- COMBINE_FILES_SI2AFSD_1861_F;
- else
- SD_Runtime_Utilities.Error_Message("Variable not found");
- end if;
- exception
- when Constraint_Error =>
- SD_Runtime_Utilities.Error_Message("Constraint error raised");
- when others => null;
- end;
- procedure SI2AFSD_1861_Local_Break is new SD_Local_Break(
- SD_Current_Compilation_Unit, 2,TERMINATE_NAME_AT_THE_BLANK_SI2AFSD_1861_F);
-
- begin
- SD_RTM.Entering_Unit(SD_CURRENT_COMPILATION_UNIT, 2);
- SI2AFSD_1861_Local_Break( 5, 97);
- for I in 2 .. LAST loop
- SI2AFSD_1861_Local_Break( 6, 98," I " & SI2AFSD_1861_M(I));
- if NAME(I) = ' ' then
- SI2AFSD_1861_Local_Break( 7, 99," I " & SI2AFSD_1861_M(I));
- LAST := I - 1;
- SI2AFSD_1861_Local_Break( 8, 100," I " & SI2AFSD_1861_M(I));
- exit;
- end if;
- end loop;
- SI2AFSD_1861_Local_Break( 9, 103);
- SD_RTM.Exiting_Unit(SD_CURRENT_COMPILATION_UNIT, 2);
- exception
- when others =>
- if SD_RTM'CALLABLE then
- SD_RTM.Exiting_Unit(SD_CURRENT_COMPILATION_UNIT, 2);
- raise;
- end if;
- end TERMINATE_NAME_AT_THE_BLANK;
- procedure GET_FILE_NAME(INPUT_FILE_NAME : in out STRING;
- INPUT_FILE_NAME_LAST : in out NATURAL;
- HELP : in HELP_TYPE) is
- procedure GET_FILE_NAME_SI2AFSD_1861_F(S: STRING := "");
-
- procedure GET_FILE_NAME_SI2AFSD_1861_F(S: STRING := "") is
- begin
- SD_Runtime_Utilities.Searching_Scope("STANDARD.COMBINE_FILES.GET_FILE_NAME.");
- SD_Runtime_Utilities.Check_Loop_Param(S);
- case SD_Runtime_Utilities.Search_For_Variable("INPUT_FILE_NAME " &
- "INPUT_FILE_NAME_LAST HELP ") is
- when 1 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.GET_FILE_NAME.INPUT_FILE_NAME);
- else
- SI2AFSD_1861_D("COMBINE_FILES.GET_FILE_NAME.INPUT_FILE_NAME",STANDARD.
- COMBINE_FILES.GET_FILE_NAME.INPUT_FILE_NAME);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 2 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.GET_FILE_NAME.INPUT_FILE_NAME_LAST);
- else
- SI2AFSD_1861_D("COMBINE_FILES.GET_FILE_NAME.INPUT_FILE_NAME_LAST",STANDARD.
- COMBINE_FILES.GET_FILE_NAME.INPUT_FILE_NAME_LAST);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 3 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SD_Runtime_Utilities.General_Message("Constants or IN parameters cannot " &
- "be set");
- else
- SI2AFSD_1861_D("COMBINE_FILES.GET_FILE_NAME.HELP", STANDARD.COMBINE_FILES.
- GET_FILE_NAME.HELP);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when others =>
- null;
- end case;
- if SD_Runtime_Utilities.Search_Outer_Scope then
- COMBINE_FILES_SI2AFSD_1861_F;
- else
- SD_Runtime_Utilities.Error_Message("Variable not found");
- end if;
- exception
- when Constraint_Error =>
- SD_Runtime_Utilities.Error_Message("Constraint error raised");
- when others => null;
- end;
- procedure SI2AFSD_1861_Local_Break is new SD_Local_Break(
- SD_Current_Compilation_Unit, 3,GET_FILE_NAME_SI2AFSD_1861_F);
-
- begin
- SD_RTM.Entering_Unit(SD_CURRENT_COMPILATION_UNIT, 3);
- SI2AFSD_1861_Local_Break( 10, 108);
- PUT("File name =>");
- SI2AFSD_1861_Local_Break( 11, 109);
- loop
- SI2AFSD_1861_Local_Break( 12, 110);
- if IS_OPEN(FILE_OF_FILE_NAMES) then
- SI2AFSD_1861_Local_Break( 13, 111);
- if END_OF_FILE(FILE_OF_FILE_NAMES) then
- SI2AFSD_1861_Local_Break( 14, 112);
- CLOSE(FILE_OF_FILE_NAMES);
- SI2AFSD_1861_Local_Break( 15, 113);
- SET_INPUT(STANDARD_INPUT);
- end if;
- end if;
- SI2AFSD_1861_Local_Break( 16, 116);
- GET_LINE(INPUT_FILE_NAME, INPUT_FILE_NAME_LAST);
- SI2AFSD_1861_Local_Break( 17, 117);
- EAT_LEADING_BLANKS(INPUT_FILE_NAME, INPUT_FILE_NAME_LAST);
- SI2AFSD_1861_Local_Break( 18, 118);
- TERMINATE_NAME_AT_THE_BLANK(INPUT_FILE_NAME, INPUT_FILE_NAME_LAST);
- SI2AFSD_1861_Local_Break( 19, 119);
- if INPUT_FILE_NAME_LAST = 1 and INPUT_FILE_NAME(1) = '?' then
- SI2AFSD_1861_Local_Break( 20, 121);
- for I in HELP'FIRST .. HELP'LAST loop
- SI2AFSD_1861_Local_Break( 21, 122," I " & SI2AFSD_1861_M(I));
- PUT_LINE(HELP(I));
- end loop;
- SI2AFSD_1861_Local_Break( 22, 124);
- PUT("""");
- SI2AFSD_1861_Local_Break( 23, 125);
- PUT(DEFAULT_EXTENSION);
- SI2AFSD_1861_Local_Break( 24, 126);
- PUT_LINE(""" is the current default extension");
- SI2AFSD_1861_Local_Break( 25, 127);
- PUT("File name =>");
- elsif INPUT_FILE_NAME_LAST >= 2 and INPUT_FILE_NAME(1 .. 2) = "--"
- then
- SI2AFSD_1861_Local_Break( 26, 130);
- null;
- elsif INPUT_FILE_NAME_LAST >= 2 and INPUT_FILE_NAME(1) = '@' then
- SI2AFSD_1861_Local_Break( 27, 133);
- TRY_FILE_OF_FILES : begin
- SI2AFSD_1861_Local_Break( 28, 134);
- OPEN(FILE_OF_FILE_NAMES, IN_FILE, INPUT_FILE_NAME(2 ..
- INPUT_FILE_NAME_LAST));
- SI2AFSD_1861_Local_Break( 29, 136);
- SET_INPUT(FILE_OF_FILE_NAMES);
- exception
- when NAME_ERROR =>
- SI2AFSD_1861_Local_Break( 30, 139);
- PUT(
- "NAME_ERROR in name given for file-of-files, give full name"
- );
- end TRY_FILE_OF_FILES;
- SI2AFSD_1861_Local_Break( 31, 143);
- NEW_LINE;
- SI2AFSD_1861_Local_Break( 32, 144);
- PUT("File name =>");
- elsif INPUT_FILE_NAME_LAST = 0 then
- SI2AFSD_1861_Local_Break( 33, 146);
- NEW_LINE;
- SI2AFSD_1861_Local_Break( 34, 147);
- exit;
- else
- SI2AFSD_1861_Local_Break( 35, 149);
- exit;
- end if;
- end loop;
- SI2AFSD_1861_Local_Break( 36, 152);
- SD_RTM.Exiting_Unit(SD_CURRENT_COMPILATION_UNIT, 3);
- exception
- when END_ERROR =>
- begin
- if SD_RTM'CALLABLE then
- SI2AFSD_1861_Local_Break( 37, 154);
- SET_INPUT(STANDARD_INPUT);
- SI2AFSD_1861_Local_Break( 38, 155);
- SD_RTM.Exiting_Unit(SD_CURRENT_COMPILATION_UNIT, 3);
- end if;
- exception
- when others =>
- SD_RTM.Exiting_Unit(SD_CURRENT_COMPILATION_UNIT, 3);
- raise;
- end;
- when others =>
- if SD_RTM'CALLABLE then
- SD_RTM.Exiting_Unit(SD_CURRENT_COMPILATION_UNIT, 3);
- raise;
- end if;
- end GET_FILE_NAME;
- procedure OPEN_INPUT_FILE_NAME_MAYBE_ADD_EXTENSION(INPUT_FILE : in out
- FILE_TYPE;
- INPUT_FILE_NAME : in
- out STRING;
- INPUT_FILE_NAME_LAST
- : in out NATURAL)
- is
- procedure OPEN_INPUT_FILE_NAME_MAYBE_ADD_EXTENSION_SI2AFSD_1861_F(S: STRING :=
- "");
-
- procedure OPEN_INPUT_FILE_NAME_MAYBE_ADD_EXTENSION_SI2AFSD_1861_F(S: STRING :=
- "") is
- begin
- SD_Runtime_Utilities.Searching_Scope("STANDARD.COMBINE_FILES." &
- "OPEN_INPUT_FILE_NAME_MAYBE_ADD_EXTENSION.");
- SD_Runtime_Utilities.Check_Loop_Param(S);
- case SD_Runtime_Utilities.Search_For_Variable("INPUT_FILE INPUT_FILE_NAME " &
- "INPUT_FILE_NAME_LAST ") is
- when 1 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.
- OPEN_INPUT_FILE_NAME_MAYBE_ADD_EXTENSION.INPUT_FILE);
- else
- SI2AFSD_1861_D("COMBINE_FILES.OPEN_INPUT_FILE_NAME_MAYBE_ADD_EXTENSION." &
- "INPUT_FILE",STANDARD.COMBINE_FILES.OPEN_INPUT_FILE_NAME_MAYBE_ADD_EXTENSION.
- INPUT_FILE);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 2 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.
- OPEN_INPUT_FILE_NAME_MAYBE_ADD_EXTENSION.INPUT_FILE_NAME);
- else
- SI2AFSD_1861_D("COMBINE_FILES.OPEN_INPUT_FILE_NAME_MAYBE_ADD_EXTENSION." &
- "INPUT_FILE_NAME",STANDARD.COMBINE_FILES.
- OPEN_INPUT_FILE_NAME_MAYBE_ADD_EXTENSION.INPUT_FILE_NAME);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 3 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.
- OPEN_INPUT_FILE_NAME_MAYBE_ADD_EXTENSION.INPUT_FILE_NAME_LAST);
- else
- SI2AFSD_1861_D("COMBINE_FILES.OPEN_INPUT_FILE_NAME_MAYBE_ADD_EXTENSION." &
- "INPUT_FILE_NAME_LAST",STANDARD.COMBINE_FILES.
- OPEN_INPUT_FILE_NAME_MAYBE_ADD_EXTENSION.INPUT_FILE_NAME_LAST);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when others =>
- null;
- end case;
- if SD_Runtime_Utilities.Search_Outer_Scope then
- COMBINE_FILES_SI2AFSD_1861_F;
- else
- SD_Runtime_Utilities.Error_Message("Variable not found");
- end if;
- exception
- when Constraint_Error =>
- SD_Runtime_Utilities.Error_Message("Constraint error raised");
- when others => null;
- end;
- procedure SI2AFSD_1861_Local_Break is new SD_Local_Break(
- SD_Current_Compilation_Unit, 4,
- OPEN_INPUT_FILE_NAME_MAYBE_ADD_EXTENSION_SI2AFSD_1861_F);
-
- begin
- SD_RTM.Entering_Unit(SD_CURRENT_COMPILATION_UNIT, 4);
- SI2AFSD_1861_Local_Break( 39, 164);
- OPEN(INPUT_FILE, IN_FILE, INPUT_FILE_NAME(1 .. INPUT_FILE_NAME_LAST))
- ;
- SI2AFSD_1861_Local_Break( 40, 166);
- SD_RTM.Exiting_Unit(SD_CURRENT_COMPILATION_UNIT, 4);
- exception
- when NAME_ERROR =>
- begin
- if SD_RTM'CALLABLE then
- SI2AFSD_1861_Local_Break( 41, 168);
- INPUT_FILE_NAME_LAST := INPUT_FILE_NAME_LAST + DEFAULT_EXTENSION'
- LAST;
- SI2AFSD_1861_Local_Break( 42, 170);
- INPUT_FILE_NAME(1 .. INPUT_FILE_NAME_LAST) := INPUT_FILE_NAME(1 ..
- INPUT_FILE_NAME_LAST - DEFAULT_EXTENSION'LAST) & DEFAULT_EXTENSION
- ;
- SI2AFSD_1861_Local_Break( 43, 173);
- OPEN(INPUT_FILE, IN_FILE, INPUT_FILE_NAME(1 .. INPUT_FILE_NAME_LAST)
- );
- SI2AFSD_1861_Local_Break( 44, 175);
- SD_RTM.Exiting_Unit(SD_CURRENT_COMPILATION_UNIT, 4);
- end if;
- exception
- when others =>
- SD_RTM.Exiting_Unit(SD_CURRENT_COMPILATION_UNIT, 4);
- raise;
- end;
- when others =>
- if SD_RTM'CALLABLE then
- SD_RTM.Exiting_Unit(SD_CURRENT_COMPILATION_UNIT, 4);
- raise;
- end if;
- end OPEN_INPUT_FILE_NAME_MAYBE_ADD_EXTENSION;
- procedure COPY_FILE_AND_COUNT is
- procedure COPY_FILE_AND_COUNT_SI2AFSD_1861_F(S: STRING := "");
-
- NEXT_CHAR : NATURAL := 1;
- C : CHARACTER := ' ';
- LEVEL : INTEGER := 0;
- procedure FETCH(CH : in out CHARACTER) is
- procedure FETCH_SI2AFSD_1861_F(S: STRING := "");
-
- procedure FETCH_SI2AFSD_1861_F(S: STRING := "") is
- begin
- SD_Runtime_Utilities.Searching_Scope("STANDARD.COMBINE_FILES." &
- "COPY_FILE_AND_COUNT.FETCH.");
- SD_Runtime_Utilities.Check_Loop_Param(S);
- case SD_Runtime_Utilities.Search_For_Variable("CH ") is
- when 1 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.COPY_FILE_AND_COUNT.FETCH.CH);
- else
- SI2AFSD_1861_D("COMBINE_FILES.COPY_FILE_AND_COUNT.FETCH.CH",STANDARD.
- COMBINE_FILES.COPY_FILE_AND_COUNT.FETCH.CH);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when others =>
- null;
- end case;
- if SD_Runtime_Utilities.Search_Outer_Scope then
- COPY_FILE_AND_COUNT_SI2AFSD_1861_F;
- else
- SD_Runtime_Utilities.Error_Message("Variable not found");
- end if;
- exception
- when Constraint_Error =>
- SD_Runtime_Utilities.Error_Message("Constraint error raised");
- when others => null;
- end;
- procedure SI2AFSD_1861_Local_Break is new SD_Local_Break(
- SD_Current_Compilation_Unit, 5,FETCH_SI2AFSD_1861_F);
-
- begin
- SD_RTM.Entering_Unit(SD_CURRENT_COMPILATION_UNIT, 5);
- SI2AFSD_1861_Local_Break( 45, 184);
- if NEXT_CHAR > LINE_LAST then
- SI2AFSD_1861_Local_Break( 46, 185);
- loop
- SI2AFSD_1861_Local_Break( 47, 186);
- TEXT_IO.GET_LINE(INPUT_FILE, LINE, LINE_LAST);
- SI2AFSD_1861_Local_Break( 48, 188);
- if END_OF_FILE(INPUT_FILE) and LINE_LAST = 0 then
- SI2AFSD_1861_Local_Break( 49, 189);
- raise END_ERROR;
- end if;
- SI2AFSD_1861_Local_Break( 50, 191);
- TEXT_IO.PUT_LINE(TARGET_FILE, LINE(1 .. LINE_LAST));
- SI2AFSD_1861_Local_Break( 51, 192);
- if END_OF_PAGE(INPUT_FILE) then
- SI2AFSD_1861_Local_Break( 52, 193);
- SKIP_PAGE(INPUT_FILE);
- SI2AFSD_1861_Local_Break( 53, 194);
- NEW_PAGE(TARGET_FILE);
- end if;
- SI2AFSD_1861_Local_Break( 54, 196);
- LINE_COUNT := LINE_COUNT + 1;
- SI2AFSD_1861_Local_Break( 55, 197);
- NEXT_CHAR := 1;
- SI2AFSD_1861_Local_Break( 56, 198);
- exit when NEXT_CHAR <= LINE_LAST;
- end loop;
- end if;
- SI2AFSD_1861_Local_Break( 57, 201);
- CH := LINE(NEXT_CHAR);
- SI2AFSD_1861_Local_Break( 58, 202);
- NEXT_CHAR := NEXT_CHAR + 1;
- SI2AFSD_1861_Local_Break( 59, 203);
- SD_RTM.Exiting_Unit(SD_CURRENT_COMPILATION_UNIT, 5);
- exception
- when others =>
- if SD_RTM'CALLABLE then
- SD_RTM.Exiting_Unit(SD_CURRENT_COMPILATION_UNIT, 5);
- raise;
- end if;
- end FETCH;
- procedure COPY_FILE_AND_COUNT_SI2AFSD_1861_F(S: STRING := "") is
- begin
- SD_Runtime_Utilities.Searching_Scope("STANDARD.COMBINE_FILES." &
- "COPY_FILE_AND_COUNT.");
- SD_Runtime_Utilities.Check_Loop_Param(S);
- case SD_Runtime_Utilities.Search_For_Variable("NEXT_CHAR C LEVEL ") is
- when 1 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.COPY_FILE_AND_COUNT.NEXT_CHAR);
- else
- SI2AFSD_1861_D("COMBINE_FILES.COPY_FILE_AND_COUNT.NEXT_CHAR",STANDARD.
- COMBINE_FILES.COPY_FILE_AND_COUNT.NEXT_CHAR);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 2 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.COPY_FILE_AND_COUNT.C);
- else
- SI2AFSD_1861_D("COMBINE_FILES.COPY_FILE_AND_COUNT.C",STANDARD.COMBINE_FILES.
- COPY_FILE_AND_COUNT.C);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 3 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.COPY_FILE_AND_COUNT.LEVEL);
- else
- SI2AFSD_1861_D("COMBINE_FILES.COPY_FILE_AND_COUNT.LEVEL",STANDARD.
- COMBINE_FILES.COPY_FILE_AND_COUNT.LEVEL);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when others =>
- null;
- end case;
- if SD_Runtime_Utilities.Search_Outer_Scope then
- COMBINE_FILES_SI2AFSD_1861_F;
- else
- SD_Runtime_Utilities.Error_Message("Variable not found");
- end if;
- exception
- when Constraint_Error =>
- SD_Runtime_Utilities.Error_Message("Constraint error raised");
- when others => null;
- end;
- procedure SI2AFSD_1861_Local_Break is new SD_Local_Break(
- SD_Current_Compilation_Unit, 6,COPY_FILE_AND_COUNT_SI2AFSD_1861_F);
-
- begin
- SD_RTM.Entering_Unit(SD_CURRENT_COMPILATION_UNIT, 6);
- SI2AFSD_1861_Local_Break( 60, 205);
- STATEMENTS := 0;
- SI2AFSD_1861_Local_Break( 61, 206);
- LINE_COUNT := 0;
- SI2AFSD_1861_Local_Break( 62, 207);
- COMMENTS := 0;
- SI2AFSD_1861_Local_Break( 63, 208);
- loop
- SI2AFSD_1861_Local_Break( 64, 209);
- FETCH(C);
- SI2AFSD_1861_Local_Break( 65, 211);
- if C = '-' then
- SI2AFSD_1861_Local_Break( 66, 212);
- FETCH(C);
- SI2AFSD_1861_Local_Break( 67, 214);
- if C = '-' then
- SI2AFSD_1861_Local_Break( 68, 216);
- NEXT_CHAR := LINE_LAST + 1;
- SI2AFSD_1861_Local_Break( 69, 217);
- COMMENTS := COMMENTS + 1;
- end if;
- end if;
- SI2AFSD_1861_Local_Break( 70, 224);
- if C = '(' or C = '"' or C = '%' or C = ''' then
- SI2AFSD_1861_Local_Break( 71, 228);
- if C = '(' then
- SI2AFSD_1861_Local_Break( 72, 230);
- LEVEL := LEVEL + 1;
- SI2AFSD_1861_Local_Break( 73, 232);
- while LEVEL > 0 loop
- SI2AFSD_1861_Local_Break( 74, 233);
- FETCH(C);
- SI2AFSD_1861_Local_Break( 75, 234);
- if C = '(' then
- SI2AFSD_1861_Local_Break( 76, 236);
- LEVEL := LEVEL + 1;
- elsif C = ')' then
- SI2AFSD_1861_Local_Break( 77, 239);
- LEVEL := LEVEL - 1;
- end if;
- end loop;
- elsif C = '"' or C = '%' then
- SI2AFSD_1861_Local_Break( 78, 246);
- if C = '"' then
- SI2AFSD_1861_Local_Break( 79, 247);
- loop
- SI2AFSD_1861_Local_Break( 80, 248);
- FETCH(C);
- SI2AFSD_1861_Local_Break( 81, 251);
- exit when C = '"';
- end loop;
- elsif C = '%' then
- SI2AFSD_1861_Local_Break( 82, 255);
- loop
- SI2AFSD_1861_Local_Break( 83, 256);
- FETCH(C);
- SI2AFSD_1861_Local_Break( 84, 257);
- exit when C = '%';
- end loop;
- end if;
- elsif C = ''' then
- SI2AFSD_1861_Local_Break( 85, 263);
- FETCH(C);
- SI2AFSD_1861_Local_Break( 86, 264);
- FETCH(C);
- end if;
- elsif C = ';' then
- SI2AFSD_1861_Local_Break( 87, 270);
- STATEMENTS := STATEMENTS + 1;
- end if;
- end loop;
- SI2AFSD_1861_Local_Break( 88, 273);
- SD_RTM.Exiting_Unit(SD_CURRENT_COMPILATION_UNIT, 6);
- exception
- when others =>
- if SD_RTM'CALLABLE then
- SD_RTM.Exiting_Unit(SD_CURRENT_COMPILATION_UNIT, 6);
- raise;
- end if;
- end COPY_FILE_AND_COUNT;
- procedure SI2AFSD_1861_D(Name: String; Var: STANDARD.COMBINE_FILES.HELP_TYPE) is
- X: SD_Runtime_Utilities.Array_Info;
- Y: Boolean;
- begin
- for i in Var'Range loop
- SD_Runtime_Utilities.Check_This_Element(SI2AFSD_1861_M(i),X,Y);
- if Y then
- SI2AFSD_1861_D(Name & "(" & SI2AFSD_1861_M(i) & ")", Var(i));
- end if;
- exit when X.Stop_Tracing_Array;
- end loop;
- SD_Runtime_Utilities.Check_Array(X);
- end;
- procedure SI2AFSD_1861_S(Var: in out STANDARD.COMBINE_FILES.HELP_TYPE) is
- X: SD_Runtime_Utilities.Array_Info;
- Y: Boolean;
- begin
- for i in Var'Range loop
- SD_Runtime_Utilities.Check_This_Element(SI2AFSD_1861_M(i),X,Y);
- if Y then
- SI2AFSD_1861_S(Var(i));
- end if;
- exit when X.Stop_Tracing_Array;
- end loop;
- SD_Runtime_Utilities.Check_Array(X);
- end;
- function SI2AFSD_1861_M(Var: STANDARD.COMBINE_FILES.HELP_TYPE) return String is
- begin
- return "";
- end;
- procedure COMBINE_FILES_SI2AFSD_1861_F(S: STRING := "") is
- begin
- SD_Runtime_Utilities.Searching_Scope("STANDARD.COMBINE_FILES.");
- SD_Runtime_Utilities.Check_Loop_Param(S);
- case SD_Runtime_Utilities.Search_For_Variable("HELP " &
- "DEFAULT_INPUT_PREFIX_TERMINATOR DEFAULT_EXTENSION PRE_FLAG " &
- "FILE_SEPARATION_FLAG POST_FLAG MAXIMUM_NAME_SIZE MAXIMUM_LINE_SIZE " &
- "TARGET_FILE TARGET_FILE_NAME TARGET_FILE_NAME_LAST INPUT_FILE " &
- "INPUT_FILE_NAME INPUT_FILE_NAME_LAST FILE_OF_FILE_NAMES " &
- "BASIC_FILE_NAME_FIRST BASIC_FILE_NAME_LAST LINE LINE_LAST STATEMENTS " &
- "LINE_COUNT COMMENTS TOTAL_STATEMENTS TOTAL_LINE_COUNT TOTAL_COMMENTS ") is
- when 1 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.HELP);
- else
- SI2AFSD_1861_D("COMBINE_FILES.HELP",STANDARD.COMBINE_FILES.HELP);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 2 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SD_Runtime_Utilities.General_Message("Constants or IN parameters cannot " &
- "be set");
- else
- SI2AFSD_1861_D("COMBINE_FILES.DEFAULT_INPUT_PREFIX_TERMINATOR", STANDARD.
- COMBINE_FILES.DEFAULT_INPUT_PREFIX_TERMINATOR);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 3 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SD_Runtime_Utilities.General_Message("Constants or IN parameters cannot " &
- "be set");
- else
- SI2AFSD_1861_D("COMBINE_FILES.DEFAULT_EXTENSION", STANDARD.COMBINE_FILES.
- DEFAULT_EXTENSION);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 4 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SD_Runtime_Utilities.General_Message("Constants or IN parameters cannot " &
- "be set");
- else
- SI2AFSD_1861_D("COMBINE_FILES.PRE_FLAG", STANDARD.COMBINE_FILES.PRE_FLAG);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 5 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SD_Runtime_Utilities.General_Message("Constants or IN parameters cannot " &
- "be set");
- else
- SI2AFSD_1861_D("COMBINE_FILES.FILE_SEPARATION_FLAG", STANDARD.COMBINE_FILES.
- FILE_SEPARATION_FLAG);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 6 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SD_Runtime_Utilities.General_Message("Constants or IN parameters cannot " &
- "be set");
- else
- SI2AFSD_1861_D("COMBINE_FILES.POST_FLAG", STANDARD.COMBINE_FILES.POST_FLAG);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 7 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SD_Runtime_Utilities.General_Message("Constants or IN parameters cannot " &
- "be set");
- else
- SI2AFSD_1861_D("COMBINE_FILES.MAXIMUM_NAME_SIZE", STANDARD.COMBINE_FILES.
- MAXIMUM_NAME_SIZE);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 8 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SD_Runtime_Utilities.General_Message("Constants or IN parameters cannot " &
- "be set");
- else
- SI2AFSD_1861_D("COMBINE_FILES.MAXIMUM_LINE_SIZE", STANDARD.COMBINE_FILES.
- MAXIMUM_LINE_SIZE);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 9 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.TARGET_FILE);
- else
- SI2AFSD_1861_D("COMBINE_FILES.TARGET_FILE",STANDARD.COMBINE_FILES.
- TARGET_FILE);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 10 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.TARGET_FILE_NAME);
- else
- SI2AFSD_1861_D("COMBINE_FILES.TARGET_FILE_NAME",STANDARD.COMBINE_FILES.
- TARGET_FILE_NAME);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 11 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.TARGET_FILE_NAME_LAST);
- else
- SI2AFSD_1861_D("COMBINE_FILES.TARGET_FILE_NAME_LAST",STANDARD.COMBINE_FILES.
- TARGET_FILE_NAME_LAST);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 12 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.INPUT_FILE);
- else
- SI2AFSD_1861_D("COMBINE_FILES.INPUT_FILE",STANDARD.COMBINE_FILES.INPUT_FILE)
- ;
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 13 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.INPUT_FILE_NAME);
- else
- SI2AFSD_1861_D("COMBINE_FILES.INPUT_FILE_NAME",STANDARD.COMBINE_FILES.
- INPUT_FILE_NAME);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 14 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.INPUT_FILE_NAME_LAST);
- else
- SI2AFSD_1861_D("COMBINE_FILES.INPUT_FILE_NAME_LAST",STANDARD.COMBINE_FILES.
- INPUT_FILE_NAME_LAST);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 15 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.FILE_OF_FILE_NAMES);
- else
- SI2AFSD_1861_D("COMBINE_FILES.FILE_OF_FILE_NAMES",STANDARD.COMBINE_FILES.
- FILE_OF_FILE_NAMES);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 16 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.BASIC_FILE_NAME_FIRST);
- else
- SI2AFSD_1861_D("COMBINE_FILES.BASIC_FILE_NAME_FIRST",STANDARD.COMBINE_FILES.
- BASIC_FILE_NAME_FIRST);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 17 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.BASIC_FILE_NAME_LAST);
- else
- SI2AFSD_1861_D("COMBINE_FILES.BASIC_FILE_NAME_LAST",STANDARD.COMBINE_FILES.
- BASIC_FILE_NAME_LAST);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 18 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.LINE);
- else
- SI2AFSD_1861_D("COMBINE_FILES.LINE",STANDARD.COMBINE_FILES.LINE);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 19 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.LINE_LAST);
- else
- SI2AFSD_1861_D("COMBINE_FILES.LINE_LAST",STANDARD.COMBINE_FILES.LINE_LAST);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 20 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.STATEMENTS);
- else
- SI2AFSD_1861_D("COMBINE_FILES.STATEMENTS",STANDARD.COMBINE_FILES.STATEMENTS)
- ;
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 21 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.LINE_COUNT);
- else
- SI2AFSD_1861_D("COMBINE_FILES.LINE_COUNT",STANDARD.COMBINE_FILES.LINE_COUNT)
- ;
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 22 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.COMMENTS);
- else
- SI2AFSD_1861_D("COMBINE_FILES.COMMENTS",STANDARD.COMBINE_FILES.COMMENTS);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 23 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.TOTAL_STATEMENTS);
- else
- SI2AFSD_1861_D("COMBINE_FILES.TOTAL_STATEMENTS",STANDARD.COMBINE_FILES.
- TOTAL_STATEMENTS);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 24 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.TOTAL_LINE_COUNT);
- else
- SI2AFSD_1861_D("COMBINE_FILES.TOTAL_LINE_COUNT",STANDARD.COMBINE_FILES.
- TOTAL_LINE_COUNT);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when 25 =>
- if SD_Runtime_Utilities.Command = SD_Runtime_Declarations.Set_Var then
- SI2AFSD_1861_S(STANDARD.COMBINE_FILES.TOTAL_COMMENTS);
- else
- SI2AFSD_1861_D("COMBINE_FILES.TOTAL_COMMENTS",STANDARD.COMBINE_FILES.
- TOTAL_COMMENTS);
- end if;
- raise SD_Runtime_Utilities.Stop_Searching;
- when others =>
- null;
- end case;
- SD_Runtime_Utilities.Error_Message("Variable not found");
- exception
- when Constraint_Error =>
- SD_Runtime_Utilities.Error_Message("Constraint error raised");
- when others => null;
- end;
- procedure SI2AFSD_1861_Local_Break is new SD_Local_Break(
- SD_Current_Compilation_Unit, 7,COMBINE_FILES_SI2AFSD_1861_F);
-
- begin
- SD_RTM.Entering_Unit(SD_CURRENT_COMPILATION_UNIT, 7);
- SI2AFSD_1861_Local_Break( 89, 277);
- PUT_LINE("COMBINE_FILES : (or '@' and a file of file names, ? for help)"
- );
- SI2AFSD_1861_Local_Break( 90, 279);
- loop
- SI2AFSD_1861_Local_Break( 91, 280);
- PUT("Target file for combined text file <RETURN> =>");
- SI2AFSD_1861_Local_Break( 92, 281);
- GET_LINE(TARGET_FILE_NAME, TARGET_FILE_NAME_LAST);
- SI2AFSD_1861_Local_Break( 93, 282);
- if TARGET_FILE_NAME_LAST = 1 and TARGET_FILE_NAME(1) = '?' then
- SI2AFSD_1861_Local_Break( 94, 284);
- for I in HELP'FIRST .. HELP'LAST loop
- SI2AFSD_1861_Local_Break( 95, 285," I " & SI2AFSD_1861_M(I));
- PUT_LINE(HELP(I));
- end loop;
- else
- SI2AFSD_1861_Local_Break( 96, 288);
- CREATE_TARGET_OR_RAISE_EXCEPTION : begin
- SI2AFSD_1861_Local_Break( 97, 289);
- CREATE(TARGET_FILE, OUT_FILE, TARGET_FILE_NAME(1 ..
- TARGET_FILE_NAME_LAST));
- exception
- when NAME_ERROR =>
- SI2AFSD_1861_Local_Break( 98, 293);
- PUT("######## NAME_ERROR in creating file name " &
- INPUT_FILE_NAME(1 .. INPUT_FILE_NAME_LAST));
- SI2AFSD_1861_Local_Break( 99, 295);
- NEW_LINE;
- when STATUS_ERROR =>
- SI2AFSD_1861_Local_Break( 100, 297);
- PUT("######## STATUS_ERROR in creating file name " &
- INPUT_FILE_NAME(1 .. INPUT_FILE_NAME_LAST));
- SI2AFSD_1861_Local_Break( 101, 299);
- NEW_LINE;
- when USE_ERROR =>
- SI2AFSD_1861_Local_Break( 102, 301);
- PUT("######## USE_ERROR in creating file name " &
- INPUT_FILE_NAME(1 .. INPUT_FILE_NAME_LAST));
- SI2AFSD_1861_Local_Break( 103, 303);
- NEW_LINE;
- end CREATE_TARGET_OR_RAISE_EXCEPTION;
- end if;
- SI2AFSD_1861_Local_Break( 104, 306);
- if IS_OPEN(TARGET_FILE) then
- SI2AFSD_1861_Local_Break( 105, 307);
- exit;
- end if;
- end loop;
- SI2AFSD_1861_Local_Break( 106, 310);
- PUT_LINE("Files to be combined:");
- SI2AFSD_1861_Local_Break( 107, 311);
- loop
- SI2AFSD_1861_Local_Break( 108, 312);
- GET_FILE_NAME(INPUT_FILE_NAME, INPUT_FILE_NAME_LAST, HELP);
- SI2AFSD_1861_Local_Break( 109, 313);
- exit when INPUT_FILE_NAME_LAST = 0;
- SI2AFSD_1861_Local_Break( 110, 316);
- BASIC_FILE_NAME_FIRST := 1;
- SI2AFSD_1861_Local_Break( 111, 317);
- for I in 1 .. INPUT_FILE_NAME_LAST - 1 loop
- SI2AFSD_1861_Local_Break( 112, 318," I " & SI2AFSD_1861_M(I));
- if INPUT_FILE_NAME(I) = DEFAULT_INPUT_PREFIX_TERMINATOR then
- SI2AFSD_1861_Local_Break( 113, 319," I " & SI2AFSD_1861_M(I));
- BASIC_FILE_NAME_FIRST := I + 1;
- SI2AFSD_1861_Local_Break( 114, 320," I " & SI2AFSD_1861_M(I));
- exit;
- end if;
- end loop;
- SI2AFSD_1861_Local_Break( 115, 323);
- BASIC_FILE_NAME_LAST := INPUT_FILE_NAME_LAST;
- SI2AFSD_1861_Local_Break( 116, 325);
- for I in reverse BASIC_FILE_NAME_FIRST .. INPUT_FILE_NAME_LAST loop
- SI2AFSD_1861_Local_Break( 117, 326," I " & SI2AFSD_1861_M(I));
- if INPUT_FILE_NAME(I) = ';' then
- SI2AFSD_1861_Local_Break( 118, 327," I " & SI2AFSD_1861_M(I));
- BASIC_FILE_NAME_LAST := I - 1;
- SI2AFSD_1861_Local_Break( 119, 328," I " & SI2AFSD_1861_M(I));
- exit;
- end if;
- end loop;
- SI2AFSD_1861_Local_Break( 120, 334);
- if BASIC_FILE_NAME_LAST > DEFAULT_EXTENSION'LAST then
- SI2AFSD_1861_Local_Break( 121, 335);
- if INPUT_FILE_NAME(BASIC_FILE_NAME_LAST - DEFAULT_EXTENSION'LAST ..
- BASIC_FILE_NAME_LAST) = DEFAULT_EXTENSION then
- SI2AFSD_1861_Local_Break( 122, 337);
- BASIC_FILE_NAME_LAST := BASIC_FILE_NAME_LAST - DEFAULT_EXTENSION'
- LAST;
- end if;
- end if;
- SI2AFSD_1861_Local_Break( 123, 341);
- OPEN_INPUT_FILE_NAME_MAYBE_ADD_EXTENSION(INPUT_FILE, INPUT_FILE_NAME,
- INPUT_FILE_NAME_LAST);
- SI2AFSD_1861_Local_Break( 124, 343);
- if IS_OPEN(INPUT_FILE) then
- SI2AFSD_1861_Local_Break( 125, 344);
- PUT_LINE(INPUT_FILE_NAME(1 .. INPUT_FILE_NAME_LAST));
- SI2AFSD_1861_Local_Break( 126, 346);
- PUT(TARGET_FILE, PRE_FLAG);
- SI2AFSD_1861_Local_Break( 127, 347);
- NEW_LINE(TARGET_FILE);
- SI2AFSD_1861_Local_Break( 128, 348);
- PUT(TARGET_FILE, FILE_SEPARATION_FLAG);
- SI2AFSD_1861_Local_Break( 129, 349);
- PUT_LINE(TARGET_FILE, INPUT_FILE_NAME(BASIC_FILE_NAME_FIRST ..
- BASIC_FILE_NAME_LAST));
- SI2AFSD_1861_Local_Break( 130, 351);
- PUT(TARGET_FILE, POST_FLAG);
- SI2AFSD_1861_Local_Break( 131, 352);
- NEW_LINE(TARGET_FILE);
- SI2AFSD_1861_Local_Break( 132, 353);
- TRANSFER_FILE :
- begin
- SI2AFSD_1861_Local_Break( 133, 356);
- COPY_FILE_AND_COUNT;
- exception
- when END_ERROR =>
- SI2AFSD_1861_Local_Break( 134, 359);
- null;
- end TRANSFER_FILE;
- SI2AFSD_1861_Local_Break( 135, 361);
- CLOSE(INPUT_FILE);
- SI2AFSD_1861_Local_Break( 136, 362);
- PUT("STATEMENTS = ");
- SI2AFSD_1861_Local_Break( 137, 363);
- PUT(STATEMENTS);
- SI2AFSD_1861_Local_Break( 138, 364);
- PUT(" LINE_COUNT = ");
- SI2AFSD_1861_Local_Break( 139, 365);
- PUT(LINE_COUNT);
- SI2AFSD_1861_Local_Break( 140, 366);
- PUT(" COMMENTS = ");
- SI2AFSD_1861_Local_Break( 141, 367);
- PUT(COMMENTS);
- SI2AFSD_1861_Local_Break( 142, 368);
- NEW_LINE;
- SI2AFSD_1861_Local_Break( 143, 369);
- NEW_LINE;
- SI2AFSD_1861_Local_Break( 144, 370);
- TOTAL_STATEMENTS := TOTAL_STATEMENTS + STATEMENTS;
- SI2AFSD_1861_Local_Break( 145, 371);
- TOTAL_LINE_COUNT := TOTAL_LINE_COUNT + LINE_COUNT;
- SI2AFSD_1861_Local_Break( 146, 372);
- TOTAL_COMMENTS := TOTAL_COMMENTS + COMMENTS;
- end if;
- end loop;
- SI2AFSD_1861_Local_Break( 147, 375);
- CLOSE(TARGET_FILE);
- SI2AFSD_1861_Local_Break( 148, 376);
- if (STATEMENTS = TOTAL_STATEMENTS) and (LINE_COUNT = TOTAL_LINE_COUNT)
- then
- SI2AFSD_1861_Local_Break( 149, 378);
- null;
- else
- SI2AFSD_1861_Local_Break( 150, 380);
- NEW_LINE;
- SI2AFSD_1861_Local_Break( 151, 381);
- NEW_LINE;
- SI2AFSD_1861_Local_Break( 152, 382);
- PUT_LINE("TOTALS");
- SI2AFSD_1861_Local_Break( 153, 383);
- NEW_LINE;
- SI2AFSD_1861_Local_Break( 154, 384);
- PUT("STATEMENTS = ");
- SI2AFSD_1861_Local_Break( 155, 385);
- PUT(TOTAL_STATEMENTS);
- SI2AFSD_1861_Local_Break( 156, 386);
- PUT(" LINE_COUNT = ");
- SI2AFSD_1861_Local_Break( 157, 387);
- PUT(TOTAL_LINE_COUNT);
- SI2AFSD_1861_Local_Break( 158, 388);
- PUT(" COMMENTS = ");
- SI2AFSD_1861_Local_Break( 159, 389);
- PUT(TOTAL_COMMENTS);
- SI2AFSD_1861_Local_Break( 160, 390);
- NEW_LINE;
- SI2AFSD_1861_Local_Break( 161, 391);
- NEW_LINE;
- end if;
- SI2AFSD_1861_Local_Break( 162, 393);
- SD_RTM.Exiting_Unit(SD_CURRENT_COMPILATION_UNIT, 7);
- exception
- when others =>
- begin
- if SD_RTM'CALLABLE then
- SI2AFSD_1861_Local_Break( 163, 395);
- PUT_LINE("Unexpected exception raised in COMBINE");
- SI2AFSD_1861_Local_Break( 164, 396);
- CLOSE(TARGET_FILE);
- SI2AFSD_1861_Local_Break( 165, 397);
- SD_RTM.Exiting_Unit(SD_CURRENT_COMPILATION_UNIT, 7);
- end if;
- exception
- when others =>
- SD_RTM.Exiting_Unit(SD_CURRENT_COMPILATION_UNIT, 7);
- raise;
- end; end COMBINE_FILES;
- with SD_RUN_TIME_MONITOR; use SD_RUN_TIME_MONITOR;
- with SD_TYPE_DEFINITIONS, STRING_PKG; use SD_TYPE_DEFINITIONS;
- package body SD_COMBINE_FILES is
- begin
- SD_RTM.Unit_Information("COMBINE_FILES", 165, (
- 1 => (STRING_PKG.CREATE("COMBINE_FILES.EAT_LEADING_BLANKS"),PROCEDURE_TYPE, 1,
- 0),
- 2 => (STRING_PKG.CREATE("COMBINE_FILES.TERMINATE_NAME_AT_THE_BLANK"),
- PROCEDURE_TYPE, 5, 0),
- 3 => (STRING_PKG.CREATE("COMBINE_FILES.GET_FILE_NAME"),PROCEDURE_TYPE, 10, 0),
- 4 => (STRING_PKG.CREATE("COMBINE_FILES." &
- "OPEN_INPUT_FILE_NAME_MAYBE_ADD_EXTENSION"),PROCEDURE_TYPE, 39, 0),
- 5 => (STRING_PKG.CREATE("COMBINE_FILES.COPY_FILE_AND_COUNT.FETCH"),
- PROCEDURE_TYPE, 45, 0),
- 6 => (STRING_PKG.CREATE("COMBINE_FILES.COPY_FILE_AND_COUNT"),PROCEDURE_TYPE,
- 60, 0),
- 7 => (STRING_PKG.CREATE("COMBINE_FILES"),PROCEDURE_TYPE, 89, 0)));
- end;
-
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --combinef.cat
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- with TEXT_IO;
- procedure COMBINE_FILES is
- use TEXT_IO;
- package INT_IO is
- new INTEGER_IO(INTEGER);
- use INT_IO;
- type HELP_TYPE is array(1 .. 20) of STRING(1 .. 70);
- HELP : HELP_TYPE := (
- "This procedure reads file names from STANDARD_INPUT and copies those
- ,
- "files onto another separated by two rows of commented colons and the
- ,
- "basic name of the file, so that they may be automatically separated
- ,
- "The file name may be preceded by a directory name which is stripped
- ,
- "to make the basic name, and the procedure will affix a default
- ,
- "extension to the input name if the input named file does not exist
- ,
- "The directory format and default extension are system dependent
- ,
- "
- ,
- "USAGE:
- ,
- "A target file name is requested,
- ,
- "Target file for combined text file <RETURN> =>
- ,
- "then the files to be combined together
- ,
- "File to be appended =>DBA4:[WHITAKER]COMBINE
- ,
- "A default extension will be added if required e.g. COMBINE.TXT;
- ,
- "or the files may be referenced in a file of files preceded by '@'
- ,
- "and copy that file preceded by the header
- ,
- "--:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ,
- "--COMBINE
- ,
- "--:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ,
- "
- );
-
-
- -- ############## S Y S T E M D E P E N D E N C Y ##################
- DEFAULT_INPUT_PREFIX_TERMINATOR : constant CHARACTER := ']'; --##
- DEFAULT_EXTENSION : constant STRING := ".TXT"; --##
- -- Also see use of this and the removal of special characters --##
- -- ####################################################################
- PRE_FLAG : constant STRING :=
- "--:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ;
- FILE_SEPARATION_FLAG : constant STRING := "--";
- POST_FLAG : constant STRING :=
- "--:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ;
- MAXIMUM_NAME_SIZE : constant NATURAL := 140;
- MAXIMUM_LINE_SIZE : constant NATURAL := 250;
- TARGET_FILE : TEXT_IO.FILE_TYPE;
- TARGET_FILE_NAME : STRING(1 .. MAXIMUM_NAME_SIZE) := (others => ' ');
- TARGET_FILE_NAME_LAST : INTEGER := 0;
- INPUT_FILE : TEXT_IO.FILE_TYPE;
- INPUT_FILE_NAME : STRING(1 .. MAXIMUM_NAME_SIZE) := (others => ' ');
- INPUT_FILE_NAME_LAST : INTEGER := 0;
- FILE_OF_FILE_NAMES : TEXT_IO.FILE_TYPE;
- BASIC_FILE_NAME_FIRST : INTEGER := 1;
- BASIC_FILE_NAME_LAST : INTEGER := 0;
- LINE : STRING(1 .. MAXIMUM_LINE_SIZE) := (others => ' ');
- LINE_LAST : INTEGER := 0;
- STATEMENTS : NATURAL := 0;
- LINE_COUNT : NATURAL := 0;
- COMMENTS : NATURAL := 0;
- TOTAL_STATEMENTS : NATURAL := 0;
- TOTAL_LINE_COUNT : NATURAL := 0;
- TOTAL_COMMENTS : NATURAL := 0;
-
-
- ------------------------------------------------------------------------
- procedure EAT_LEADING_BLANKS(NAME : in out STRING;
- LAST : in out NATURAL) is
- begin
- 1 while LAST >= 1 and NAME(1) = ' ' loop
- 2 NAME(1 .. LAST - 1) := NAME(2 .. LAST);
- 3 LAST := LAST - 1;
- end loop;
- 4 end EAT_LEADING_BLANKS;
- procedure TERMINATE_NAME_AT_THE_BLANK(NAME : in out STRING;
- LAST : in out NATURAL) is
- begin
- 5 for I in 2 .. LAST loop
- 6 if NAME(I) = ' ' then
- 7 LAST := I - 1;
- 8 exit;
- end if;
- end loop;
- 9 end TERMINATE_NAME_AT_THE_BLANK;
- procedure GET_FILE_NAME(INPUT_FILE_NAME : in out STRING;
- INPUT_FILE_NAME_LAST : in out NATURAL;
- HELP : in HELP_TYPE) is
- begin
- 10 PUT("File name =>");
- 11 loop -- until a valid name, absorbing commments, file-of-files, '?'
- 12 if IS_OPEN(FILE_OF_FILE_NAMES) then -- Check input file is used
- 13 if END_OF_FILE(FILE_OF_FILE_NAMES) then
- 14 CLOSE(FILE_OF_FILE_NAMES); -- Have come to the end of a
- 15 SET_INPUT(STANDARD_INPUT); -- file-of-files and want to
- end if; -- return to keyboard input
- end if;
- 16 GET_LINE(INPUT_FILE_NAME, INPUT_FILE_NAME_LAST);
- 17 EAT_LEADING_BLANKS(INPUT_FILE_NAME, INPUT_FILE_NAME_LAST);
- 18 TERMINATE_NAME_AT_THE_BLANK(INPUT_FILE_NAME, INPUT_FILE_NAME_LAST);
- 19 if INPUT_FILE_NAME_LAST = 1 and INPUT_FILE_NAME(1) = '?' then
- -- Query for help
- 20 for I in HELP'FIRST .. HELP'LAST loop
- 21 PUT_LINE(HELP(I));
- end loop;
- 22 PUT("""");
- 23 PUT(DEFAULT_EXTENSION);
- 24 PUT_LINE(""" is the current default extension");
- 25 PUT("File name =>");
- elsif INPUT_FILE_NAME_LAST >= 2 and INPUT_FILE_NAME(1 .. 2) = "--"
- then -- Skip comment lines
- 26 null;
- elsif INPUT_FILE_NAME_LAST >= 2 and INPUT_FILE_NAME(1) = '@' then
- -- File of file name
- 27 TRY_FILE_OF_FILES : begin
- 28 OPEN(FILE_OF_FILE_NAMES, IN_FILE, INPUT_FILE_NAME(2 ..
- INPUT_FILE_NAME_LAST));
- 29 SET_INPUT(FILE_OF_FILE_NAMES);
- exception
- when NAME_ERROR =>
- 30 PUT(
- "NAME_ERROR in name given for file-of-files, give full name"
- );
- end TRY_FILE_OF_FILES;
- 31 NEW_LINE;
- 32 PUT("File name =>");
- elsif INPUT_FILE_NAME_LAST = 0 then -- Use a blank line to
- 33 NEW_LINE; -- quit the program
- 34 exit;
- else -- Regular file name
- 35 exit;
- end if;
- end loop;
- 36 exception
- when END_ERROR =>
- 37 SET_INPUT(STANDARD_INPUT);
- 38 end GET_FILE_NAME;
- procedure OPEN_INPUT_FILE_NAME_MAYBE_ADD_EXTENSION(INPUT_FILE : in out
- FILE_TYPE;
- INPUT_FILE_NAME : in
- out STRING;
- INPUT_FILE_NAME_LAST
- : in out NATURAL)
- is
- begin
- 39 OPEN(INPUT_FILE, IN_FILE, INPUT_FILE_NAME(1 .. INPUT_FILE_NAME_LAST))
- ;
- 40 exception
- when NAME_ERROR =>
- 41 INPUT_FILE_NAME_LAST := INPUT_FILE_NAME_LAST + DEFAULT_EXTENSION'
- LAST;
- 42 INPUT_FILE_NAME(1 .. INPUT_FILE_NAME_LAST) := INPUT_FILE_NAME(1 ..
- INPUT_FILE_NAME_LAST - DEFAULT_EXTENSION'LAST) & DEFAULT_EXTENSION
- ;
- 43 OPEN(INPUT_FILE, IN_FILE, INPUT_FILE_NAME(1 .. INPUT_FILE_NAME_LAST)
- );
- 44 end OPEN_INPUT_FILE_NAME_MAYBE_ADD_EXTENSION;
-
- --------------------------------------------------------------------------
- procedure COPY_FILE_AND_COUNT is
- NEXT_CHAR : NATURAL := 1;
- C : CHARACTER := ' ';
- LEVEL : INTEGER := 0;
- procedure FETCH(CH : in out CHARACTER) is
- begin
- 45 if NEXT_CHAR > LINE_LAST then
- 46 loop
- 47 TEXT_IO.GET_LINE(INPUT_FILE, LINE, LINE_LAST);
- -- To take care of editors that fill out blocks with nulls
- 48 if END_OF_FILE(INPUT_FILE) and LINE_LAST = 0 then
- 49 raise END_ERROR;
- end if;
- 50 TEXT_IO.PUT_LINE(TARGET_FILE, LINE(1 .. LINE_LAST));
- 51 if END_OF_PAGE(INPUT_FILE) then
- 52 SKIP_PAGE(INPUT_FILE);
- 53 NEW_PAGE(TARGET_FILE);
- end if;
- 54 LINE_COUNT := LINE_COUNT + 1;
- 55 NEXT_CHAR := 1;
- 56 exit when NEXT_CHAR <= LINE_LAST;
- end loop;
- end if;
- 57 CH := LINE(NEXT_CHAR);
- 58 NEXT_CHAR := NEXT_CHAR + 1;
- 59 end FETCH;
- begin
- 60 STATEMENTS := 0;
- 61 LINE_COUNT := 0;
- 62 COMMENTS := 0;
- 63 loop
- 64 FETCH(C);
- -- Check for comment on the line
- 65 if C = '-' then
- 66 FETCH(C);
- -- Which is signaled by the '-' following a '-'
- 67 if C = '-' then
- -- Then just skip the rest of the line and go to the next
- 68 NEXT_CHAR := LINE_LAST + 1;
- 69 COMMENTS := COMMENTS + 1;
- end if;
- end if;
-
- -- Check for one of the characters which introduce code constructs
- -- like string or character literal or formal parameter list
- -- within which a ';' does not terminate a "line of code"
- 70 if C = '(' or C = '"' or C = '%' or C = ''' then
-
- -- Check for opening parentheses
- -- Every ';' within is in a formal parameter list
- 71 if C = '(' then
- -- Count the number of levels of parentheses
- 72 LEVEL := LEVEL + 1;
- -- Read ahead until the whole construct is closed, LEVEL = 0
- 73 while LEVEL > 0 loop
- 74 FETCH(C);
- 75 if C = '(' then
- -- Increase the level if another '(' is found
- 76 LEVEL := LEVEL + 1;
- elsif C = ')' then
- -- Decrease the level if a ')' is found
- 77 LEVEL := LEVEL - 1;
- end if;
- end loop;
-
- -- Now check for string brackets of either kind, " or %
- elsif C = '"' or C = '%' then
- -- Treat them in parallel, one must lead off
- 78 if C = '"' then
- 79 loop
- 80 FETCH(C);
- -- Loop until the close comes
- -- If there is a doubled character it just starts again
- 81 exit when C = '"';
- end loop;
- -- The '%' is handled exactly the same way as '"'
- elsif C = '%' then
- 82 loop
- 83 FETCH(C);
- 84 exit when C = '%';
- end loop;
- end if;
-
- -- Character literals are just three characters long including '
- elsif C = ''' then
- 85 FETCH(C);
- 86 FETCH(C);
- end if;
-
- -- Any ';' that can be found at this point after all exclusions
- -- must be a valid "Ada statement" terminator
- elsif C = ';' then
- 87 STATEMENTS := STATEMENTS + 1;
- end if;
- end loop;
- 88 end COPY_FILE_AND_COUNT;
-
- --------------------------------------------------------------------------
- begin
- 89 PUT_LINE("COMBINE_FILES : (or '@' and a file of file names, ? for help)"
- );
- 90 loop -- To create a target file
- 91 PUT("Target file for combined text file <RETURN> =>");
- 92 GET_LINE(TARGET_FILE_NAME, TARGET_FILE_NAME_LAST);
- 93 if TARGET_FILE_NAME_LAST = 1 and TARGET_FILE_NAME(1) = '?' then
- -- Query for help
- 94 for I in HELP'FIRST .. HELP'LAST loop
- 95 PUT_LINE(HELP(I));
- end loop;
- else
- 96 CREATE_TARGET_OR_RAISE_EXCEPTION : begin
- 97 CREATE(TARGET_FILE, OUT_FILE, TARGET_FILE_NAME(1 ..
- TARGET_FILE_NAME_LAST));
- exception -- Checking for the prior existance of the file
- when NAME_ERROR =>
- 98 PUT("######## NAME_ERROR in creating file name " &
- INPUT_FILE_NAME(1 .. INPUT_FILE_NAME_LAST));
- 99 NEW_LINE;
- when STATUS_ERROR =>
- 100 PUT("######## STATUS_ERROR in creating file name " &
- INPUT_FILE_NAME(1 .. INPUT_FILE_NAME_LAST));
- 101 NEW_LINE;
- when USE_ERROR =>
- 102 PUT("######## USE_ERROR in creating file name " &
- INPUT_FILE_NAME(1 .. INPUT_FILE_NAME_LAST));
- 103 NEW_LINE;
- end CREATE_TARGET_OR_RAISE_EXCEPTION;
- end if;
- 104 if IS_OPEN(TARGET_FILE) then
- 105 exit;
- end if;
- end loop;
- 106 PUT_LINE("Files to be combined:");
- 107 loop -- on the processing of the series of files
- 108 GET_FILE_NAME(INPUT_FILE_NAME, INPUT_FILE_NAME_LAST, HELP);
- 109 exit when INPUT_FILE_NAME_LAST = 0; -- Finished
-
- -- Count off the prefix from the basic file name
- 110 BASIC_FILE_NAME_FIRST := 1;
- 111 for I in 1 .. INPUT_FILE_NAME_LAST - 1 loop
- 112 if INPUT_FILE_NAME(I) = DEFAULT_INPUT_PREFIX_TERMINATOR then
- 113 BASIC_FILE_NAME_FIRST := I + 1;
- 114 exit;
- end if;
- end loop;
- 115 BASIC_FILE_NAME_LAST := INPUT_FILE_NAME_LAST;
- -- Count back to the last ';' over any version number (for VAX/VMS)
- 116 for I in reverse BASIC_FILE_NAME_FIRST .. INPUT_FILE_NAME_LAST loop
- 117 if INPUT_FILE_NAME(I) = ';' then
- 118 BASIC_FILE_NAME_LAST := I - 1;
- 119 exit;
- end if;
- end loop;
-
- -- Check if the ending is the default extension, remove for basic nam
- -- if BASIC_FILE_NAME_LAST > DEFAULT_EXTENSION'LAST and then
- 120 if BASIC_FILE_NAME_LAST > DEFAULT_EXTENSION'LAST then
- 121 if INPUT_FILE_NAME(BASIC_FILE_NAME_LAST - DEFAULT_EXTENSION'LAST ..
- BASIC_FILE_NAME_LAST) = DEFAULT_EXTENSION then
- 122 BASIC_FILE_NAME_LAST := BASIC_FILE_NAME_LAST - DEFAULT_EXTENSION'
- LAST;
- end if;
- end if;
- 123 OPEN_INPUT_FILE_NAME_MAYBE_ADD_EXTENSION(INPUT_FILE, INPUT_FILE_NAME,
- INPUT_FILE_NAME_LAST);
- 124 if IS_OPEN(INPUT_FILE) then -- If we were successful opening file
- 125 PUT_LINE(INPUT_FILE_NAME(1 .. INPUT_FILE_NAME_LAST));
- -- Put out the interfile flags
- 126 PUT(TARGET_FILE, PRE_FLAG);
- 127 NEW_LINE(TARGET_FILE);
- 128 PUT(TARGET_FILE, FILE_SEPARATION_FLAG);
- 129 PUT_LINE(TARGET_FILE, INPUT_FILE_NAME(BASIC_FILE_NAME_FIRST ..
- BASIC_FILE_NAME_LAST));
- 130 PUT(TARGET_FILE, POST_FLAG);
- 131 NEW_LINE(TARGET_FILE);
- 132 TRANSFER_FILE :
- -- Assuming that it is a text file of reasonable lines
- begin
- 133 COPY_FILE_AND_COUNT;
- exception
- when END_ERROR =>
- 134 null;
- end TRANSFER_FILE;
- 135 CLOSE(INPUT_FILE);
- 136 PUT("STATEMENTS = ");
- 137 PUT(STATEMENTS);
- 138 PUT(" LINE_COUNT = ");
- 139 PUT(LINE_COUNT);
- 140 PUT(" COMMENTS = ");
- 141 PUT(COMMENTS);
- 142 NEW_LINE;
- 143 NEW_LINE;
- 144 TOTAL_STATEMENTS := TOTAL_STATEMENTS + STATEMENTS;
- 145 TOTAL_LINE_COUNT := TOTAL_LINE_COUNT + LINE_COUNT;
- 146 TOTAL_COMMENTS := TOTAL_COMMENTS + COMMENTS;
- end if;
- end loop;
- 147 CLOSE(TARGET_FILE);
- 148 if (STATEMENTS = TOTAL_STATEMENTS) and (LINE_COUNT = TOTAL_LINE_COUNT)
- then
- 149 null;
- else
- 150 NEW_LINE;
- 151 NEW_LINE;
- 152 PUT_LINE("TOTALS");
- 153 NEW_LINE;
- 154 PUT("STATEMENTS = ");
- 155 PUT(TOTAL_STATEMENTS);
- 156 PUT(" LINE_COUNT = ");
- 157 PUT(TOTAL_LINE_COUNT);
- 158 PUT(" COMMENTS = ");
- 159 PUT(TOTAL_COMMENTS);
- 160 NEW_LINE;
- 161 NEW_LINE;
- end if;
- 162 exception
- when others =>
- 163 PUT_LINE("Unexpected exception raised in COMBINE");
- 164 CLOSE(TARGET_FILE);
- 165 end COMBINE_FILES;
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --pkgfiles.cat
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- COMBINE_FILES*COMBINEF*02/11/86*09:47:50*
-