#Saluton Emacson! Bonvolu elekti -*- mode: awk; -*-. Dankon. BEGIN{ headerfile="wrapped.h"; deffile="wrapdef.h"; structfile="wrapstruct.h"; tmpffile="wraptmpf.h"; FS=";"; WARNING="/* Automatically generated file. Do not edit. Edit wrapawk/wrapfunc.inp. */"; print WARNING > headerfile; print "#ifndef WRAPPED_H" > headerfile; print "#define WRAPPED_H" > headerfile; print WARNING > deffile; print "#ifndef WRAPDEF_H" > deffile; print "#define WRAPDEF_H" > deffile; print WARNING > tmpffile; print "#ifndef WRAPTMPF_H" > tmpffile; print "#define WRAPTMPF_H" > tmpffile; print WARNING > structfile; print "#ifndef WRAPSTRUCT_H" > structfile; print "#define WRAPSTRUCT_H" > structfile; print "struct next_wrap_st next_wrap[]= {" > structfile; } /\/\*/{ } /^(\#)/{ print $0 > structfile; print $0 > tmpffile; print $0 > deffile; print $0 > headerfile; } /^[^\/].*;.*;.*;/{ name=$1; ret=$2; argtype=$3; argname=$4; MACRO=$5; openat_extra=$6; if(openat_extra){ print " {(void(*))&next_" name ", \"" name "\"}," > structfile; print "extern " ret " (*next_" name ")" openat_extra ";" > headerfile; print ret " (*next_" name ")" openat_extra "=tmp_" name ";"> deffile; print ret " tmp_" name, openat_extra "{" > tmpffile; print " mode_t mode = 0;" > tmpffile; print " if (flags & O_CREAT) {" > tmpffile; print " va_list args;" > tmpffile; print " va_start(args, flags);" > tmpffile; print " mode = va_arg(args, int);" > tmpffile; print " va_end(args);" > tmpffile; print " }" > tmpffile; print " load_library_symbols();" > tmpffile; print " return next_" name, argname ";" > tmpffile; print "}" > tmpffile; print "" > tmpffile; } else if(MACRO){ print " {(void(*))&NEXT_" MACRO "_NOARG, " name "_QUOTE}," > structfile; print "extern " ret " (*NEXT_" MACRO "_NOARG)" argtype ";" > headerfile; print ret " (*NEXT_" MACRO "_NOARG)" argtype "=TMP_" MACRO ";"> deffile; print ret " TMP_" MACRO, argtype "{" > tmpffile; print " load_library_symbols();" > tmpffile; print " return NEXT_" MACRO "_NOARG " argname ";" > tmpffile; print "}" > tmpffile; print "" > tmpffile; } else { print " {(void(*))&next_" name ", \"" name "\"}," > structfile; print "extern " ret " (*next_" name ")" argtype ";" > headerfile; print ret " (*next_" name ")" argtype "=tmp_" name ";"> deffile; print ret " tmp_" name, argtype "{" > tmpffile; print " load_library_symbols();" > tmpffile; print " return next_" name, argname ";" > tmpffile; print "}" > tmpffile; print "" > tmpffile; } } /^ *$/{ print > structfile; print > headerfile; print > deffile; print > tmpffile; } END{ print " {NULL, NULL}," > structfile; print "};" > structfile; print "#endif" > structfile; print "#endif" > tmpffile; print "#endif" > deffile; print "#endif" > headerfile; }