Source code of Windows XP (NT5)
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.
|
|
/***
*NMKtoBAT.C - convert NMAKE.EXE output into a Windows 9x batch file * * Copyright (c) 1995-2001, Microsoft Corporation. All rights reserved. * *Purpose: * The makefiles provided with the Microsoft Visual C++ (C/C++) Run-Time * Library Sources generate commands with multiple commands per line, * separated by ampersands (&). This program will convert such a * text file into a batch file which can be executed by the Windows 9x * command interpreter (COMMAND.COM) which does not recognize multiple * commands on a single line. * *******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv);
#define MAXLINE 4096
char InBuf [ MAXLINE ] ;
int main(int argc, char **argv) { /*
* If any arguments are given, print a usage message and exit */
if ( argc != 1 || argv [ 1 ] ) { fprintf ( stderr , "Usage: nmk2bat < input > output\n" "This program takes no arguments\n" ) ; exit ( 1 ) ; }
/*
* Batch file should be terse */
printf ( "@echo off\n" ) ;
/*
* Process each input line */
while ( fgets ( InBuf , sizeof ( InBuf ) , stdin ) ) { char * pStart ; char * pFinish ; char * pNextPart ;
pStart = InBuf ; pFinish = pStart + strlen ( pStart ) ;
/*
* Remove the trailing newline character from the * input buffer. This simplifies the line processing. */
if ( pFinish > pStart && pFinish [ -1 ] == '\n' ) pFinish [ -1 ] = '\0' ;
/*
* Process each part of the line. Parts are delimited * by ampersand characters with optional whitespace. */
do { /*
* Skip initial whitespace */
while ( * pStart == ' ' || * pStart == '\t' ) ++ pStart ;
/*
* Find the next command separator or * the end of line, whichever comes first */
pNextPart = strchr ( pStart , '&' ) ;
if ( ! pNextPart ) pNextPart = pStart + strlen ( pStart ) ; pFinish = pNextPart ;
/*
* Skip blank lines and blank parts of lines */
if ( pStart == pNextPart ) break ; /*
* Skip the trailing whitespace */
while ( pFinish > pStart && ( pFinish [ -1 ] == ' ' || pFinish [ -1 ] == '\t' ) ) -- pFinish ;
/*
* Copy to stdout the characters between * the skipped initial whitespace and * the skipped trailing whitespace */
while ( pStart < pFinish ) putchar ( * pStart ++ ) ;
putchar ( '\n' ) ;
/*
* We are done with this line when pNextPart * points to a null character (rather than a '&'). */
pStart = pNextPart ;
} while ( * pStart ++ ) ; }
return 0 ; }
|