mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
184 lines
4.3 KiB
184 lines
4.3 KiB
/*++
|
|
|
|
Copyright (c) 1989 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
doctor.c
|
|
|
|
Abstract:
|
|
|
|
Main source file for the doctor program. This program reads plain
|
|
text source files, with limited markups to describe formatting. It
|
|
output .RTF files, which can then be read into WORD to convert to
|
|
.DOC files. Hopefully, we can run the RTF_OS2.EXE conversion program
|
|
directly.
|
|
|
|
Author:
|
|
|
|
Steve Wood (stevewo) 02-Mar-1989
|
|
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "doctor.h"
|
|
|
|
//
|
|
// Variables maintained by doctor.c
|
|
//
|
|
|
|
int DoctorReturnCode = 0;
|
|
|
|
BOOLEAN VerboseOutput = FALSE;
|
|
BOOLEAN KeepIntermediateFile = FALSE;
|
|
BOOLEAN OutputQuickHelp = FALSE; // -h switch specified
|
|
BOOLEAN OutputRichTextFormat = TRUE; // -r switch NOT specified
|
|
|
|
BOOLEAN
|
|
ConstructFileNames( PSZ FileNameArgument );
|
|
|
|
char TxtFileName[ MAXPATHLEN ]; // Full path spec of text input file
|
|
char RtfFileName[ MAXPATHLEN ]; // Full path spec of RTF output file
|
|
char DocFileName[ MAXPATHLEN ]; // Full path spec of RTF output file
|
|
char HlpFileName[ MAXPATHLEN ]; // Full path spec of QH output file
|
|
|
|
#define RTF2DOC_PROGRAM "RTF_OS2.EXE"
|
|
char ProgramName[ MAXPATHLEN ]; // Full path name for RTF_OS2.EXE
|
|
char Arguments[ 4+2*MAXPATHLEN ]; // Command line arguments for RTF_OS2.EXE
|
|
|
|
void
|
|
PrintUsage( void )
|
|
{
|
|
fprintf( stderr, "usage: DOCTOR [-?] [-v] [-k] {.TXT filename}\n" );
|
|
}
|
|
|
|
|
|
int
|
|
_CRTAPI1
|
|
main(
|
|
int argc,
|
|
char *argv[]
|
|
)
|
|
{
|
|
register char *s, c;
|
|
BOOLEAN result;
|
|
PROCESS_INFORMATION ProcessInformation;
|
|
STARTUPINFO StartupInfo;
|
|
|
|
if (argc < 2) {
|
|
PrintUsage();
|
|
exit( 1 );
|
|
}
|
|
|
|
while (--argc) {
|
|
s = *++argv;
|
|
if (*s == '-' || *s == '/') {
|
|
while (c = *++s) {
|
|
switch( tolower( c ) ) {
|
|
case '?': PrintUsage();
|
|
exit( 1 );
|
|
break;
|
|
|
|
case 'h': OutputQuickHelp = TRUE;
|
|
break;
|
|
|
|
case 'k': KeepIntermediateFile = TRUE;
|
|
break;
|
|
|
|
case 'v': VerboseOutput = TRUE;
|
|
break;
|
|
|
|
default:
|
|
fprintf( stderr, "Invalid switch: %c\n", (USHORT)c );
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
if (ConstructFileNames( s )) {
|
|
fprintf( stderr, "Reading %s", TxtFileName );
|
|
if (InitTxtFileReader( TxtFileName )) {
|
|
fprintf( stderr, "\n" );
|
|
if (OutputRichTextFormat) {
|
|
if (!OpenRtfFile( RtfFileName )) {
|
|
fprintf( stderr,
|
|
"Unable to open intermediate file - %s\n",
|
|
RtfFileName );
|
|
exit(1);
|
|
}
|
|
}
|
|
|
|
if (OutputRichTextFormat || OutputQuickHelp) {
|
|
result = ProcessTxtFile();
|
|
|
|
if (OutputRichTextFormat)
|
|
CloseRtfFile();
|
|
if (OutputQuickHelp)
|
|
;
|
|
}
|
|
|
|
TermTxtFileReader();
|
|
}
|
|
else {
|
|
fprintf( stderr, " - unable to open\n" );
|
|
DoctorReturnCode = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
return( DoctorReturnCode );
|
|
}
|
|
|
|
BOOLEAN
|
|
ConstructFileNames( PSZ FileNameArgument )
|
|
{
|
|
register char *s;
|
|
|
|
RtfFileName[ 0 ] = '\0';
|
|
DocFileName[ 0 ] = '\0';
|
|
HlpFileName[ 0 ] = '\0';
|
|
|
|
rootpath( FileNameArgument, TxtFileName );
|
|
while (!(s = strchr( TxtFileName, '.' ))) {
|
|
strcat( TxtFileName, ".txt" );
|
|
}
|
|
|
|
*s = '\0';
|
|
strcpy( RtfFileName, TxtFileName );
|
|
strcpy( DocFileName, TxtFileName );
|
|
*s = '.';
|
|
strcat( RtfFileName, ".rtf" );
|
|
strcat( DocFileName, ".doc" );
|
|
|
|
return( TRUE );
|
|
}
|
|
|
|
|
|
PVOID
|
|
AllocateMemory(
|
|
IN ULONG NumberBytes
|
|
)
|
|
{
|
|
register PVOID Memory = (PVOID)calloc( NumberBytes, 1 );
|
|
|
|
if (!Memory)
|
|
fprintf( stderr, "*** Out of memory, need %d bytes\n", NumberBytes );
|
|
|
|
return( Memory );
|
|
}
|
|
|
|
|
|
PVOID
|
|
FreeMemory(
|
|
IN PVOID Memory
|
|
)
|
|
{
|
|
if (Memory) {
|
|
free( (char *)Memory );
|
|
Memory = (PVOID)NULL;
|
|
}
|
|
|
|
return( NULL );
|
|
}
|