📄 wcl.c
字号:
return
stricmp( p, ".cpp" ) == 0 ||
stricmp( p, ".cxx" ) == 0 ||
stricmp( p, ".cc" ) == 0 ||
stricmp( p, ".hpp" ) == 0 ||
stricmp( p, ".hxx" ) == 0 ;
}
static char *SrcName( char *name )
/********************************/
{
char *cc_name;
char *exename;
char *p;
char buffer[_MAX_PATH2];
char *ext;
_splitpath2( name, buffer, NULL, NULL, NULL, &ext );
p = &ext[0];
if( ext[0] == '\0' ) {
p = strchr( name, '\0' );
strcpy( p, ".cxx" );
if( access( name, F_OK ) != 0 ) {
strcpy( p, ".cpp" );
if( access( name, F_OK ) != 0 ) {
strcpy( p, ".cc" );
if( access( name, F_OK ) != 0 ) {
strcpy( p, ".asm" );
if( access( name, F_OK ) != 0 ) {
strcpy( p, ".c" );
}
}
}
}
}
if( stricmp( p, ".asm" ) == 0 ) {
exename = "wasm" EXE_EXT;
cc_name = "wasm";
} else {
exename = CC EXE_EXT; // assume C compiler
cc_name = CC;
if( ! Flags.force_c ) {
if( Flags.force_c_plus || useCPlusPlus( p ) ) {
exename = CCXX EXE_EXT; // use C++ compiler
cc_name = CCXX;
}
}
}
FindPath( exename, CC_Path );
return( cc_name );
}
static int CompLink( void )
/***************************/
{
int rc;
char *p;
char *end;
char *file;
char *path;
char *cc_name;
struct directives *d_list;
char errors_found;
if( Flags.be_quiet ) {
Fputnl( "option quiet", Fp );
}
fputs( DebugOptions[ DebugFlag ], Fp );
#if defined(WCL386) || defined(WCLI86)
Fputnl( "option dosseg", Fp );
#endif
if( StackSize != NULL ) {
fputs( "option stack=", Fp );
Fputnl( StackSize, Fp );
}
if( Flags.link_for_sys ) { /* 10-jun-91 */
fputs( "system ", Fp );
Fputnl( SystemName, Fp );
} else {
#if defined(WCLAXP)
Fputnl( "system ntaxp", Fp );
#elif defined(WCLPPC)
Fputnl( "system ntppc", Fp );
#elif defined(WCL386)
#if defined(__OS2__)
Fputnl( "system os2v2", Fp ); /* 04-feb-92 */
#elif defined(__NT__)
Fputnl( "system nt", Fp );
#elif defined(__LINUX__)
Fputnl( "system linux", Fp );
#else
Fputnl( "system dos4g", Fp );
#endif
#else
if( Flags.windows ) { /* 15-mar-90 */
Fputnl( "system windows", Fp );
} else if( Flags.tiny_model ) {
Fputnl( "system com", Fp );
} else if( Flags.link_for_dos ) {
Fputnl( "system dos", Fp );
} else if( Flags.link_for_os2 ) {
Fputnl( "system os2", Fp );
} else {
#if defined(__OS2__)
Fputnl( "system os2", Fp );
#else
Fputnl( "system dos", Fp );
#endif
}
#endif
}
for( d_list = Directive_List; d_list; d_list = d_list->next ) {
Fputnl( d_list->directive, Fp );
}
errors_found = 0; /* 21-jan-92 */
p = Files;
while( *p != '\0' ) {
if( *p == '"' ) {
end = strpbrk(++p, "\""); /* get quoted filespec */
} else {
end = strpbrk(p, " "); /* get filespec */
}
if( end != NULL ) {
*(end++) = 0;
if( *end == ' ' ) end++;
}
strcpy( Word, p );
cc_name = SrcName( Word ); /* if no extension, assume .c */
file = GetName( Word ); /* get first matching filename */
path = MakePath( Word ); /* isolate path portion of filespec */
while( file != NULL ) { /* while more filenames: */
strcpy( Word, path );
strcat( Word, file );
if( ! FileExtension( Word, OBJ_EXT ) ) { // if not .obj, compile
if( ! Flags.be_quiet ) {
PrintMsg( " %s %s %s\n", cc_name, Word, CC_Opts );
fflush( stdout );
}
rc = spawnlp( P_WAIT, CC_Path, cc_name, Word, CC_Opts, NULL );
if( rc != 0 ) {
if( rc == -1 || rc == 255 ) {
PrintMsg( WclMsgs[ UNABLE_TO_INVOKE_EXE ], CC_Path );
} else {
PrintMsg( WclMsgs[ COMPILER_RETURNED_A_BAD_STATUS ],
Word );
}
errors_found = 1; /* 21-jan-92 */
}
p = strrchr( file, '.' );
if( p != NULL ) *p = NULLCHAR;
strcpy( Word, file );
}
AddName( Word, Fp );
if( Exe_Name[0] == '\0' ) {
p = strrchr( Word, '.' );
if( p != NULL ) *p = NULLCHAR;
strcpy( Exe_Name, Word );
}
file = GetName( NULL ); /* get next filename */
}
p = end; /* get next filespec */
}
if( errors_found ) return( 1 ); /* 21-jan-92 */
BuildLinkFile();
if( ( Obj_List != NULL || Flags.do_link ) && Flags.no_link == FALSE ) {
FindPath( "wlink" EXE_EXT, PathBuffer );
if( ! Flags.be_quiet ) {
puts( "" );
}
fflush( stdout );
rc = spawnlp( P_WAIT, PathBuffer, LINK, Temp_Link, NULL );
if( rc != 0 ) {
if( rc == -1 || rc == 255 ) {
PrintMsg( WclMsgs[ UNABLE_TO_INVOKE_EXE ], PathBuffer );
} else {
PrintMsg( WclMsgs[ LINKER_RETURNED_A_BAD_STATUS ] );
}
return( 2 ); /* return 2 to show Temp_File already closed */
}
if( Flags.do_cvpack ){
FindPath( "cvpack" EXE_EXT, PathBuffer );
rc = spawnlp( P_WAIT, PathBuffer, "cvpack", Exe_Name, NULL );
if( rc != 0 ) {
if( rc == -1 || rc == 255 ) {
PrintMsg( WclMsgs[ UNABLE_TO_INVOKE_EXE ], PathBuffer );
} else {
PrintMsg( WclMsgs[ CVPACK_RETURNED_A_BAD_STATUS ] );
}
return( 2 ); /* return 2 to show Temp_File already closed */
}
}
}
return( 0 );
}
static char *SkipSpaces( char *ptr )
/************************************/
{
while( *ptr == ' ' || *ptr == '\t' ) ptr++; /* 16-mar-91 */
return( ptr );
}
static void MakeName( char *name, char *ext )
/*********************************************/
{
if( strrchr( name, '.' ) <= strstr( name, PATH_SEP_STR ) ) {
strcat( name, ext );
}
}
char *EnglishHelp[] = {
#undef E
#undef J
#define E(msg) msg,
#define J(msg)
#include "wclhelp.h"
NULL };
char *JapaneseHelp[] = {
#undef E
#undef J
#define E(msg)
#define J(msg) msg,
#include "wclhelp.h"
NULL };
static void Usage( void )
/*************************/
{
char **list;
char *p;
int lines_printed;
unsigned int i, n;
auto char buf[82];
print_banner();
lines_printed = 3;
list = EnglishHelp;
while( *list ) {
memset( buf, ' ', 80 );
if( **list == '[' ) { /* title to be centered */
i = strlen( *list );
strcpy( &buf[38-i/2], *list );
++list;
for( n = 0; list[n]; ++n ) { /* count number in list */
if( *list[n] == '[' ) break;
}
n = (n+1) / 2; /* half way through list */
#ifndef __UNIX__
if( isatty( fileno( stdout ) ) ) {
if( lines_printed != 0 ) {
if( lines_printed + n > 25 ) {
fputs( WclMsgs[ PRESS_ANY_KEY_TO_CONTINUE ], stdout );
fflush( stdout );
getch();
puts( "" );
lines_printed = 0;
}
}
}
#endif
puts( buf );
lines_printed++;
for(;;) {
memset( buf, ' ', 80 );
p = *list;
if( p == NULL ) break;
for( i = 0; *p; ) buf[i++] = *p++;
p = list[n];
if( p != NULL && *p != '[' ) {
for( i = 38; *p; ) buf[i++] = *p++;
}
buf[i] = '\0';
puts( buf );
lines_printed++;
p = list[n];
if( p == NULL ) break;
if( *p == '[' ) break;
list[n] = NULL; /* indicate already printed */
++list;
}
list = &list[n];
} else {
puts( *list );
lines_printed++;
++list;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -