⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mkmkman.c

📁 将用户指定的符合iso-9660标准的文件的信息dump出来。
💻 C
字号:
/*  mkmkman.c  --  make mkman.c  Copyright (C) 1999 Steffen Solyga <solyga@absinth.net>  This program is free software; you can redistribute it and/or modify  it under the terms of the GNU General Public License as published by  the Free Software Foundation; either version 2 of the License, or  (at your option) any later version.  This program is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  GNU General Public License for more details.  You should have received a copy of the GNU General Public License  along with this program; if not, write to the Free Software  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.*//*#include	"header.h"*/	/* all prg defs must be in this header file */#include	<stdio.h>#include	<stdlib.h>#include	<string.h>#include	<ctype.h>#define		MKMKMAN_BUFFER_SIZE	32/*  - reads manual template from stdin, writes mkman.c (which will generate    the man file later) to stdout  - if a substring "[FORMAT DEF_NAME]" is found in the template it will finally     be replaced by the value of the constant DEF_NAME, where FORMAT is used as    output format for printf(). Example:    header.h:		#define	BUFFER_SIZE	128    gcc command line:	... -Dprg_name=\"nice-program\"    template.man:	... [%s prg_name] ... [%d BUFFER_SIZE] bytes ...    ==> nice-program.1:	... nice-program ... 128 bytes ...  - DEF_NAME must not contain a ']'  ==> "[%" indicates the substring to replace and cannot be used in the manual  - in the manual template all defs from header.h and the cmd-line can be used,    in addition the following constants may be used:    - Prg_name			(fist letter uppercase)    - PRG_NAME			(all letters uppercase)    - MANUAL_SECTION_STR    - STD_CHANNEL_STR		(ifdef STD_CHANNEL)    - HELP_CHANNEL_STR		(ifdef HELP_CHANNEL)    - VERSION_CHANNEL_STR	(ifdef VERSION_CHANNEL)    - VERBOSE_CHANNEL_STR	(ifdef VERBOSE_CHANNEL)    - ERROR_CHANNEL_STR		(ifdef ERROR_CHANNEL)  - mkmkman.c needs cmd-line definition of    - prg_name    - MANUAL_NUMBER    - OS_TYPE_STRlast modified: Sat Apr 3 11:52:31 CEST 1999 @beast*/char*read_line( char* s ) {  static size_t size= MKMKMAN_BUFFER_SIZE;  size_t nbr= 0;  int c;  if( s == NULL ) s= (char*)malloc(size);  if( s == NULL ) return( NULL );  while( (c=getchar()) != EOF ) {    s[nbr++]= (char)c;    if( c == '\n' ) {      s[nbr-1]= '\0';	/* string end */      s[nbr]=   '\0';	/* buffer end */      break;    }    if( nbr+1 >= size ) {	/* +1 for buffer end */      size+= MKMKMAN_BUFFER_SIZE;      s= realloc( s, size );      if( s == NULL ) return( NULL );    }  }  if( nbr == 0 ) return( NULL );  return( s );}intoutput_normal_printf( char* s ) {  char* p= s;  if( *s == '\0' ) return( 0 );  printf( "  printf( \"" );  while( *p != '\0' ) {    switch( *p ) {      case '"' : printf( "\\%c", *p ); break;      case '\\': printf( "\\%c", *p ); break;      case '%' : printf( "%%%c", *p ); break;      default  : printf( "%c", *p );    }    p++;  }  printf( "\" );\n" );  return( 0 );}intmain( int argc, char** argv ) {  int retval= 0;  char* line_str= NULL;  int line= 0;  char actual_prg_name[]= prg_name;	/* prg_name: cc cmd-line def */  char* p= actual_prg_name;/* output header stuff */  printf( "/*\n" );  printf( "  mkman.c  --  output manual page for %s\n", prg_name );  printf( "  generated automatically by %s\n", *argv );  printf( "  Copyright (C) 1999 Steffen Solyga <solyga@absinth.net>\n" );  printf( "*/\n" );  printf( "\n" );  printf( "#include\t\"header.h\"\n" );  printf( "#include\t<stdio.h>\n" );  printf( "\n" );  /* program name(s) */  *p= (char)toupper((int)*p);  printf( "#define\tPrg_name\t\"%s\"\n", actual_prg_name );  while( *p != '\0' ) { *p= (char)toupper((int)*p); p++; }  printf( "#define\tPRG_NAME\t\"%s\"\n", actual_prg_name );  /* channels */  printf( "#ifdef\tHELP_CHANNEL\n" );  printf( "#define\tHELP_CHANNEL_STR\t(HELP_CHANNEL==stdout?\"stdout\":\"stderr\")\n" );  printf( "#endif\n" );  printf( "#ifdef\tSTD_CHANNEL\n" );  printf( "#define\tSTD_CHANNEL_STR\t(STD_CHANNEL==stdout?\"stdout\":\"stderr\")\n" );  printf( "#endif\n" );  printf( "#ifdef\tVERSION_CHANNEL\n" );  printf( "#define\tVERSION_CHANNEL_STR\t(VERSION_CHANNEL==stdout?\"stdout\":\"stderr\")\n" );  printf( "#endif\n" );  printf( "#ifdef\tVERBOSE_CHANNEL\n" );  printf( "#define\tVERBOSE_CHANNEL_STR\t(VERBOSE_CHANNEL==stdout?\"stdout\":\"stderr\")\n" );  printf( "#endif\n" );  printf( "#ifdef\tERROR_CHANNEL\n" );  printf( "#define\tERROR_CHANNEL_STR\t(ERROR_CHANNEL==stdout?\"stdout\":\"stderr\")\n" );  printf( "#endif\n" );  /* manual section */  printf( "#define\tMANUAL_SECTION_STR\t\"%s ", OS_TYPE_STR );  switch( MANUAL_NUMBER ) {    case  1: printf( "User's " ); break;    case  2:    case  3: printf( "Programmer's " ); break;    case  8: printf( "System Manager's " ); break;    default: ;  }  printf( "Manual\"\n" );  printf( "\n" );  /* main() header */  printf( "int main( int argc, char** argv ) {\n" );  printf( "  int retval= 0;\n" );/* output body stuff (man page contents) */  while( (line_str=read_line(line_str)) != NULL ) {    char* s= line_str;    char* p;    line++;    while( (p=strstr(s,"[%")) != NULL ) {      char* pend;      char* fmt;      if( (pend=strstr(p,"]")) == NULL ) {        fprintf( stderr, "%s: Missing `]' (input line %d)\n",                 *argv, line );        retval= 1; goto DIE_NOW;      }      *p= '\0'; p++;			/* delete '[', *p == '%' */      *pend= '\0';			/* delete ']' */      output_normal_printf( s );      s= pend+1;			/* s -> behind ']' (now '\0') */      if( (pend=strstr(p," ")) == NULL ) {        fprintf( stderr, "%s: Missing space in `%s' (input line %d)\n",                 *argv, p, line );        retval= 1; goto DIE_NOW;      }      *pend= '\0';			/* delete ' ' */      fmt= p;      p= pend+1;			/* p -> DEF_NAME */      printf( "  printf( \"%s\", %s );\n", fmt, p );    }    output_normal_printf( s );    printf( "  printf( \"\\n\" );\n" );  }/* output tail stuff */DIE_NOW:  printf( "  exit( retval );\n" );  printf( "}\n" );  free( line_str );  exit( retval );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -