\item The program shall run on any computer running GNU/Linux.
\item It has no graphical user interface but a help option and command line error reporting.
\item The program shall support and check all block types according to \cite{ser16:progref:bformats}.
-\item The Program must be able to list a tape image's contents.
+\item The program must be able to list a tape image's contents.
\item The program shall be capable of splitting tape images into single object files.
\item The program's structure must be modular and easily extendable.
\end{itemize}
\begin{itemize}
\item Possibility to split a tape image into single data block files.
\item Software handshake paper tape reader control:\\
-A paper paper tape reader connected to the computer's serial port could be motion-controlled
+A paper tape reader connected to the computer's serial port could be motion-controlled
by use of XON and XOFF characters. This is useful when error breaks for tape inspection are
enabled and the paper tape device does not support RTS/CTS hardware handshake.
\item Full POSIX.1, 2004 edition, compliance.\\
an end of tape mark is an appropriate end block.
}
-\rd{chk005}{Interactive checksum error handling}{
- The program shall be configurable to pause block processing on
- detection of a checksum error (\req{chk002}) and resume processing after
- user intervention.\\
- This feature is incompatible with data input from standard input.
-}
%*******************************************************************************
\subsection{Additional features}
of all blocks contained in the input data.\\
The output line format shall be unified for all block types.
}
+\vspace{0.5em}
+\par
+Here is an example output for the object \verb|O$PB|: \begin{verbatim}
+O$PB (0-0) Subprogram Name
+O$PS (0-0) " "
+O$PLDR (0-0) " "
+ (0-24) Switch to relocatable mode
+ (0-4) Data
+ (0-4) Data
+O$PB (0-50) Subprogram Entry Point Definition
+ (0-4) Data
+ (0-4) Data
+ (0-4) Data
+O$PLDR (0-50) Subprogram Entry Point Definition
+ (0-4) Data
+ (0-4) Data
+ (0-14) End
+\end{verbatim}
\rd{da002}{List exported symbols}{
Output a list of all exported symbols.
a zero-padded three digit number and EOT blocks are not suppressed.
}
+\rd{dp003}{Split into numbered blocks}{
+ The whole tape is split into one named and numbered file for each block.
+}
+
%*******************************************************************************
\newpage
}
\rd{err001}{Error types}{
+ The program shall react to several error conditions. Some error
+ conditions can be turned into warnings by program configuration,
+ see \req{cfg003} and \req{cfg004} for details.\\
The following distinguished error types shall exist:
\begin{itemize}
\item Input/output error:\\
- Error occuring during reading from the input file descriptor
- or during writing to an output file.\\
+ Error occuring during read from the input file descriptor
+ or during write to an output file.\\
+ No recovery from this error is possible.
\enosup
\item Block integrity error:\\
Caused by failed check according to \req{chk001}.\\
}
\rd{err002}{Program exit codes}{
- \begin{table}[H]
+ The application shall return several different exir codes to the
+ execution environment (i.e. the shell). On occurrence of any error,
+ the program shall terminate with the appropriate exit code.\\
+ Program runs with warnings shall return a special exit code.
+ \begin{table}[H]
\begin{center}
\begin{tabular}{|r|c|}
\hline
Unknown block type error & 5\\
Object integrity error & 6\\
Usage error & 7\\
+ Success with warnings & 99 \\
Internal program error & 100 \\
\hline
\end{tabular}
}
\rd{err003}{Error and warning messages}{
+ Every warning or error case shall cause an appropriate error respective
+ warning message.\\
Error messages shall consinst of ''Error:'' and the error reason.\\
Warning messages shall consist of ''Warning:'' and a descriptive
text.\\
There shall be a possibility to suppress warning messages.
}
+\rd{err006}{Informational messages}{
+ Any informational messages go to standard error.
+}
+
+
%*******************************************************************************
\newpage
\subsection{Program configuration}
(\req{dp001}).\\
split\_objects\_numbered & S & Split into numbered object files
(\req{dp002}).\\
+ split\_blocks & B & Split tape into named and numbered block
+ files (\req{dp003}).\\
ignore\_block\_errors & b & Ignore block integrity errors
(\req{err001},\req{chk001}).\\
ignore\_checksum\_errors & k & Ignore Checksum errors
(\req{err001}\req{chk002}).\\
- pause\_on\_checksum\_error & p & Wait for user input on checksum error
- (\req{chk005}).\\
+% pause\_on\_checksum\_error & p & Wait for user input on checksum error
+% (\req{chk005}).\\
ignore\_unknown\_block\_errors & n & Ignore errors causes by
datablocks of unknown type
(\req{err001}\req{chk003}).\\
ignore\_object\_integrity\_errors & g & Ignore errors caused by objects
without proper end block
(\req{err001}\req{chk004}).\\
+ quiet & q & Suppress all non-critical messages
+ (warnings, informational text)\\
\hline
\end{tabular}\end{center}
\caption{Configuration switches}
\rd{cfg005}{Configuration file syntax}{
The configuration file must comply two the following grammar, given in EBNF:
}
+
+% | "pause_on_checksum_error"
+
\begin{verbatim}
ConfigurationFile = { ConfigurationLine "<EOL>" } ;
ConfigurationLine = SwitchLine | StringLine | CommentLine ;
CommentLine = WSpace [ "#" String ] ;
WSpace = { " " } ;
SwLong = "output_info" | "ouput_called" | "output_exported"
- | "output_unsatisfied" | "split_objects" [ _"numbered" ]
+ | "output_unsatisfied" | "split_objects" [ "_numbered" ]
+ | "split_blocks"
| "ignore_block_errors" | "ignore_checksum_errors
- | "pause_on_checksum_error"
| "ignore_unknown_block_errors"
- | "ignore_object_integrity" ;
+ | "ignore_object_integrity"
+ | "quiet" ;
StrLong = "out_file" | "in_file" ;
BoolValue = TrueStr | FalseStr ;
String = { ? Every character except newline ?} ;
TrueStr = "yes" | "1" | "true" ;
- FalseStr = | "no" | "0" | "false" ;
+ FalseStr = "no" | "0" | "false" ;
\end{verbatim}
\rd{cfg006}{Command Line syntax}{
LongSwitch = "--" SwLong [ "=" BoolValue ] ;
ShortParam = "-" StrShort String ;
LongParam = "--" StrLong "=" String ;
- SwShort = "h" | "a" | "c" | "e" | "u" | "s" | "S"
- | "b" | "k" | "p" | "n" | "g" ;
+ SwShort = "h" | "a" | "c" | "e" | "u" | "s" | "S" | "B"
+ | "b" | "k" | "p" | "n" | "g" | "q";
SwLong = "help"
| "output_info" | "ouput_called" | "output_exported"
- | "output_unsatisfied" | "split_objects" [ _"numbered" ]
+ | "output_unsatisfied" | "split_objects" [ "_numbered" ]
| "ignore_block_errors" | "ignore_checksum_errors"
- | "pause_on_checksum_error"
| "ignore_unknown_block_errors"
- | "ignore_object_integrity" ;
+ | "ignore_object_integrity"
+ | "quiet" ;
StrShort = "o" ;
StrLong = "out_file" ;
\end{verbatim}
+ Some command line examples:\\
+ \verb|ldc2 -ve --output-file=out.dat in.dat|\\
+ \verb|ldc2 -kb test.obj|\\
+
+% | "pause_on_checksum_error"
\newpage
\rd{cfg007}{Configuration implications}{
\begin{itemize}
- \item \emph{pause\_on\_checksum\_errors} implies \emph{ignore\_checksum\_errors}.
- \item \emph{pause\_on\_checksum\_errors} is completely ignored when input
- is read from standard input.
- \item \emph{output\_*} inhibits tape information output (\req{da001}).
+% \item \emph{pause\_on\_checksum\_error} implies \emph{ignore\_checksum\_errors}.
+% \item \emph{pause\_on\_checksum\_error} is completely ignored when input
+% is read from standard input.
+ \item \emph{output\_*} inhibit
+ tape information output (\req{da001}).
\item \emph{help} inhibits all other actions.
\end{itemize}
}
\item Data is read from standard input.
\item All error conditions result in immediate program termination
and an error message.
- \item Tape information according to \req{da001} is output.
- \item Normal Text is output to standard output.
- \item Error messages are output to standard error.
+ \item Tape information according to \req{da001} is output to standard output.
\end{itemize}
}