亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? wmerge.w

?? 著名算法大師高爺爺設計的語言。此語言結合了Tex和C
?? W
?? 第 1 頁 / 共 2 頁
字號:
% Modified 16 Jan 2002 to agree with COMMON version 3.64\def\9#1{} % this hack is explained in CWEB manual Appendix F11@* Introduction.  This file contains the program \.{wmerge},which takes two or more files and merges them accordingto the conventions of \.{CWEB}. Namely, it takes an ordinary \.{.w}file and and optional \.{.ch} file and sends the corresponding\.{.w}-style file to standard output (or to a named file),expanding all ``includes''that might be specified by \.{@@i} in the original \.{.w} file.(A more precise description appears in the section on ``command linearguments'' below.)@c#include <stdio.h>#include <stdlib.h> /* declaration of |getenv| */#include <ctype.h> /* definition of |isalpha|, |isdigit| and so on */@<Definitions@>@;@<Predeclarations of functions@>@;@<Functions@>@;main (ac,av)int ac; char **av;{  argc=ac; argv=av;  @<Set the default options@>;  @<Scan arguments and open output file@>;  reset_input();  while (get_line())    put_line();  fflush(out_file);  check_complete();  fflush(out_file);  return wrap_up();}@ @<Definitions@>=typedef short boolean;typedef unsigned char eight_bits;typedef char ASCII; /* type of characters inside \.{WEB} */@ We predeclare some standard string-handling functions here instead ofincluding their system header files, because the names of the header filesare not as standard as the names of the functions. (There's confusionbetween \.{<string.h>} and \.{<strings.h>}.)@<Predecl...@>=extern int strlen(); /* length of string */extern char* strcpy(); /* copy one string to another */extern int strncmp(); /* compare up to $n$ string characters */extern char* strncpy(); /* copy up to $n$ string characters */@ @<Predec...@>=@ The lowest level of input to the \.{WEB} programsis performed by |input_ln|, which must be told which file to read from.The return value of |input_ln| is 1 if the read is successful and 0 ifnot (generally this means the file has ended).The characters of the next line of the fileare copied into the |buffer| array,and the global variable |limit| is set to the first unoccupied position.Trailing blanks are ignored. The value of |limit| must be strictly lessthan |buf_size|, so that |buffer[buf_size-1]| is never filled.Some of the routines use the fact that it is safe to refer to|*(limit+2)| without overstepping the bounds of the array.@d buf_size 4096@<Definitions...@>=ASCII buffer[buf_size]; /* where each line of input goes */ASCII *buffer_end=buffer+buf_size-2; /* end of |buffer| */ASCII *limit; /* points to the last character in the buffer */ASCII *loc; /* points to the next character to be read from the buffer */@ In the unlikely event that your standard I/O library does notsupport |feof|, |getc| and |ungetc|, you may have to change things here.@^system dependencies@>Incidentally, here's a curious fact about \.{CWEB} for those of youwho are reading this file as an example of \.{CWEB} programming.The file \.{stdio.h} includes a typedef forthe identifier |FILE|, which is not, strictly speaking, part of \CEE/.It turns out \.{CWEAVE} knows that |FILE| is a reserved word (after all,|FILE| is almost as common as |int|); indeed, \.{CWEAVE} knows allthe types of the ISO standard \CEE/ library. Butif you're using other types like {\bf caddr\_t},@:caddr_t}{\bf caddr_t@>which is defined in \.{/usr/include/sys/types.h}, you should let\.{WEAVE} know that this is a type, either by including the \.{.h} fileat \.{WEB} time (saying \.{@@i /usr/include/sys/types.h}), or byusing \.{WEB}'s format command (saying \.{@@f caddr\_t int}).  Either ofthese will make {\bf caddr\_t} be treated in the same way as |int|.@<Func...@>=input_ln(fp) /* copies a line into |buffer| or returns 0 */FILE *fp; /* what file to read from */{  register int  c=EOF; /* character read; initialized so some compilers won't complain */  register char *k;  /* where next character goes */  if (feof(fp)) return(0);  /* we have hit end-of-file */  limit = k = buffer;  /* beginning of buffer */  while (k<=buffer_end && (c=getc(fp)) != EOF && c!='\n')    if ((*(k++) = c) != ' ') limit = k;  if (k>buffer_end)    if ((c=getc(fp))!=EOF && c!='\n') {      ungetc(c,fp); loc=buffer; err_print("! Input line too long");@.Input line too long@>  }  if (c==EOF && limit==buffer) return(0);  /* there was nothing after    the last newline */  return(1);}@ Now comes the problem of deciding which file to read from next.Recall that the actual text that \.{CWEB} should process comes from twostreams: a |web_file|, which can contain possibly nested includecommands \.{@@i}, and a |change_file|, which might also containincludes.  The |web_file| together with the currently open includefiles form a stack |file|, whose names are stored in a parallel stack|file_name|.  The boolean |changing| tells whether or not we're readingfrom the |change_file|.The line number of each open file is also kept for error reporting.@f line x /* make |line| an unreserved word */@d max_include_depth 10 /* maximum number of source files open  simultaneously, not counting the change file */@d max_file_name_length 60@d cur_file file[include_depth] /* current file */@d cur_file_name file_name[include_depth] /* current file name */@d cur_line line[include_depth] /* number of current line in current file */@d web_file file[0] /* main source file */@d web_file_name file_name[0] /* main source file name */@<Definitions...@>=int include_depth; /* current level of nesting */FILE *file[max_include_depth]; /* stack of non-change files */FILE *change_file; /* change file */char file_name[max_include_depth][max_file_name_length];  /* stack of non-change file names */char change_file_name[max_file_name_length]; /* name of change file */char alt_web_file_name[max_file_name_length]; /* alternate name to try */int line[max_include_depth]; /* number of current line in the stacked files */int change_line; /* number of current line in change file */int change_depth; /* where \.{@@y} originated during a change */boolean input_has_ended; /* if there is no more input */boolean changing; /* if the current line is from |change_file| */boolean web_file_open=0; /* if the web file is being read */@ When |changing=0|, the next line of |change_file| is kept in|change_buffer|, for purposes of comparison with the nextline of |cur_file|. After the change file has been completely input, weset |change_limit=change_buffer|,so that no further matches will be made.Here's a shorthand expression for inequality between the two lines:@d lines_dont_match (change_limit-change_buffer != limit-buffer ||  strncmp(buffer, change_buffer, limit-buffer))@<Def...@>=char change_buffer[buf_size]; /* next line of |change_file| */char *change_limit; /* points to the last character in |change_buffer| */@ Procedure |prime_the_change_buffer| sets |change_buffer| inpreparation for the next matching operation. Since blank lines in the changefile are not used for matching, we have|(change_limit==change_buffer && !changing)| if and only ifthe change file is exhausted. This procedure is called only when|changing| is 1; hence error messages will be reported correctly.@<Func...@>=voidprime_the_change_buffer(){  change_limit=change_buffer; /* this value is used if the change file ends */  @<Skip over comment lines in the change file; |return| if end of file@>;  @<Skip to the next nonblank line; |return| if end of file@>;  @<Move |buffer| and |limit| to |change_buffer| and |change_limit|@>;}@ While looking for a line that begins with \.{@@x} in the change file, weallow lines that begin with \.{@@}, as long as they don't begin with \.{@@y},\.{@@z} or \.{@@i} (which would probably mean that the change file is fouled up).@<Skip over comment lines in the change file...@>=while(1) {  change_line++;  if (!input_ln(change_file)) return;  if (limit<buffer+2) continue;  if (buffer[0]!='@@') continue;  if (isupper(buffer[1])) buffer[1]=tolower(buffer[1]);  if (buffer[1]=='x') break;  if (buffer[1]=='y' || buffer[1]=='z' || buffer[1]=='i') {    loc=buffer+2;    err_print("! Missing @@x in change file");@.Missing @@x...@>  }}@ Here we are looking at lines following the \.{@@x}.@<Skip to the next nonblank line...@>=do {  change_line++;  if (!input_ln(change_file)) {    err_print("! Change file ended after @@x");@.Change file ended...@>    return;  }} while (limit==buffer);@ @<Move |buffer| and |limit| to |change_buffer| and |change_limit|@>={  change_limit=change_buffer+(limit-buffer);  strncpy(change_buffer,buffer,limit-buffer+1);}@ The following procedure is used to see if the next change entry shouldgo into effect; it is called only when |changing| is 0.The idea is to test whether or not the currentcontents of |buffer| matches the current contents of |change_buffer|.If not, there's nothing more to do; but if so, a change is called for:All of the text down to the \.{@@y} is supposed to match. An errormessage is issued if any discrepancy is found. Then the procedureprepares to read the next line from |change_file|.This procedure is called only when |buffer<limit|, i.e., when thecurrent line is nonempty.@<Func...@>=voidcheck_change() /* switches to |change_file| if the buffers match */{  int n=0; /* the number of discrepancies found */  if (lines_dont_match) return;  while (1) {    changing=1; change_line++;    if (!input_ln(change_file)) {      err_print("! Change file ended before @@y");@.Change file ended...@>      change_limit=change_buffer; changing=0;      return;    }    if (limit>buffer+1 && buffer[0]=='@@') {      char xyz_code=isupper(buffer[1])? tolower(buffer[1]): buffer[1];      @<If the current line starts with \.{@@y},        report any discrepancies and |return|@>;    }    @<Move |buffer| and |limit|...@>;    changing=0; cur_line++;    while (!input_ln(cur_file)) { /* pop the stack or quit */      if (include_depth==0) {        err_print("! CWEB file ended during a change");@.CWEB file ended...@>        input_has_ended=1; return;      }      include_depth--; cur_line++;    }    if (lines_dont_match) n++;  }}@ @<If the current line starts with \.{@@y}...@>=if (xyz_code=='x' || xyz_code=='z') {  loc=buffer+2; err_print("! Where is the matching @@y?");@.Where is the match...@>  }else if (xyz_code=='y') {  if (n>0) {    loc=buffer+2;    fprintf(stderr,"\n! Hmm... %d ",n);    err_print("of the preceding lines failed to match");@.Hmm... n of the preceding...@>  }  change_depth=include_depth;  return;}@ The |reset_input| procedure gets the program ready to read theuser's \.{WEB} input.@<Func...@>=voidreset_input(){  limit=buffer; loc=buffer+1; buffer[0]=' ';  @<Open input files@>;  include_depth=0; cur_line=0; change_line=0;  change_depth=include_depth;  changing=1; prime_the_change_buffer(); changing=!changing;  limit=buffer; loc=buffer+1; buffer[0]=' '; input_has_ended=0;}@ The following code opens the input files.@^system dependencies@>@<Open input files@>=if ((web_file=fopen(web_file_name,"r"))==NULL) {  strcpy(web_file_name,alt_web_file_name);  if ((web_file=fopen(web_file_name,"r"))==NULL)       fatal("! Cannot open input file ", web_file_name);}@.Cannot open input file@>@.Cannot open change file@>web_file_open=1;if ((change_file=fopen(change_file_name,"r"))==NULL)       fatal("! Cannot open change file ", change_file_name);@ The |get_line| procedure is called when |loc>limit|; it puts the nextline of merged input into the buffer and updates the other variablesappropriately. A space is placed at the right end of the line.This procedure returns |!input_has_ended| because we often want tocheck the value of that variable after calling the procedure.@<Fun...@>=int get_line() /* inputs the next line */{  restart:  if (changing && include_depth==change_depth)   @<Read from |change_file| and maybe turn off |changing|@>;  if (! changing || include_depth>change_depth) {    @<Read from |cur_file| and maybe turn on |changing|@>;    if (changing && include_depth==change_depth) goto restart;  }  if (input_has_ended) return 0;  loc=buffer; *limit=' ';  if (buffer[0]=='@@' && (buffer[1]=='i' || buffer[1]=='I')) {    loc=buffer+2; *limit='"';    while (*loc==' '||*loc=='\t') loc++;    if (loc>=limit) {      err_print("! Include file name not given");@.Include file name ...@>      goto restart;    }    if (include_depth>=max_include_depth-1) {      err_print("! Too many nested includes");@.Too many nested includes@>      goto restart;    }    include_depth++; /* push input stack */    @<Try to open include file, abort push if unsuccessful, go to |restart|@>;  }  return 1;}void put_line(){  char *ptr=buffer;  while (ptr<limit) putc(*ptr++,out_file);  putc('\n',out_file);}@ When an \.{@@i} line is found in the |cur_file|, we must temporarilystop reading it and start reading from the named include file.  The\.{@@i} line should give a complete file name with or withoutdouble quotes.If the environment variable \.{CWEBINPUTS} is set, or if the compiler flag

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
奇米精品一区二区三区在线观看一 | 国产视频一区二区在线观看| 99视频一区二区| 911精品产国品一二三产区| 亚洲色图制服诱惑| 欧美老女人在线| 美女久久久精品| 夜夜揉揉日日人人青青一国产精品| 久久免费视频色| 国产精品国产精品国产专区不蜜| 91丨porny丨蝌蚪视频| 亚洲综合另类小说| 日韩国产欧美在线观看| 欧美一级二级在线观看| 亚洲欧洲日韩av| 日韩一级免费观看| 欧美日韩中文国产| 91在线视频播放地址| 日本久久电影网| 欧美系列在线观看| 99久久伊人精品| 日本不卡一二三区黄网| 国内精品国产三级国产a久久| 亚洲乱码一区二区三区在线观看| 精品乱人伦小说| 久久精品国内一区二区三区 | 国产精品久久福利| 亚洲精品一线二线三线| 26uuu国产电影一区二区| 国产精品久99| 欧美视频一区二区三区四区| 石原莉奈在线亚洲二区| 午夜久久久久久| 亚洲午夜精品久久久久久久久| 91精品国产综合久久久久久久久久 | 91精品国产色综合久久不卡蜜臀 | 人人超碰91尤物精品国产| 精品少妇一区二区| 欧美不卡在线视频| 国产精品视频一二三| 亚洲成av人片在线观看无码| 日韩欧美国产一区在线观看| 一二三区精品视频| 亚洲综合视频网| 日韩制服丝袜av| 国产一区在线看| 另类的小说在线视频另类成人小视频在线 | 亚洲一区二区三区小说| 国产美女娇喘av呻吟久久| 免费高清在线视频一区·| 美腿丝袜一区二区三区| 久久精品99国产精品| 91原创在线视频| 日韩vs国产vs欧美| 成人一二三区视频| 久久99精品久久久久久动态图| 麻豆精品在线看| 成人一道本在线| 大美女一区二区三区| 欧美三级在线播放| 亚洲自拍欧美精品| 久久精品国产在热久久| 国产麻豆欧美日韩一区| 欧美日韩国产一级| 亚洲综合网站在线观看| 成人国产精品免费观看动漫| 国产精品欧美精品| 色噜噜偷拍精品综合在线| 国产午夜精品一区二区三区嫩草| 日韩欧美123| 奇米777欧美一区二区| 制服.丝袜.亚洲.中文.综合| 亚洲自拍偷拍九九九| 欧美精品一区二区高清在线观看| 久久疯狂做爰流白浆xx| 色婷婷综合久久久久中文一区二区 | 成人福利视频在线| 国产日韩视频一区二区三区| 欧美日韩免费一区二区三区| 欧美久久久久中文字幕| 夜色激情一区二区| 国产精品嫩草影院av蜜臀| 99天天综合性| 亚洲欧美日韩久久精品| 国产精品久久久久久久岛一牛影视| 97se亚洲国产综合自在线| 中文一区在线播放| 99久久精品情趣| 日韩在线卡一卡二| 国产三级一区二区| 韩国中文字幕2020精品| 欧美性一区二区| 毛片不卡一区二区| 亚洲成a人片在线观看中文| 久久综合资源网| 欧美另类z0zxhd电影| 国产制服丝袜一区| 成人av在线资源网站| 日韩女优毛片在线| 91国在线观看| 久久99在线观看| 亚洲福利视频一区| 久久99精品国产91久久来源| 欧美日韩国产综合视频在线观看 | 波多野结衣欧美| 最新久久zyz资源站| 欧美久久久影院| 欧美日韩中文国产| 福利一区二区在线| 日韩黄色在线观看| 日韩亚洲欧美在线| 欧美日韩一区二区三区视频 | 亚洲综合在线观看视频| 91成人在线免费观看| 蜜臀av一级做a爰片久久| 欧美日韩一区二区欧美激情| 91片黄在线观看| 国产精品美女久久福利网站| 久久综合久久综合九色| 国产亚洲一二三区| 日韩一级黄色大片| 欧美精品v国产精品v日韩精品| 国内精品写真在线观看| 日韩专区欧美专区| 韩国av一区二区三区四区| 国产高清精品在线| 欧美日韩国产系列| 国产视频一区二区在线观看| 麻豆高清免费国产一区| 亚洲国产精品高清| 天天色综合成人网| 老司机免费视频一区二区| 国产精品一区二区视频| 97se亚洲国产综合自在线| 欧美亚洲日本国产| 9191精品国产综合久久久久久| 51午夜精品国产| 91福利在线播放| 欧美精品亚洲一区二区在线播放| 久久综合狠狠综合久久综合88| 欧美国产精品一区二区三区| 亚洲成人免费av| 国产一区二区三区美女| 91在线观看成人| 91麻豆精品久久久久蜜臀| 欧美电影免费观看高清完整版在| 国产亚洲欧洲997久久综合| 91视视频在线直接观看在线看网页在线看| 欧美区一区二区三区| 一区二区三区国产| 丝袜亚洲另类欧美| 久久av资源网| 国产91色综合久久免费分享| 日本大胆欧美人术艺术动态| 国产精品一色哟哟哟| 91麻豆精品国产91久久久资源速度| 亚洲欧美日韩中文播放 | 久久久影院官网| 中文字幕在线不卡| 成人夜色视频网站在线观看| 亚洲精品一区二区三区影院| 蜜桃久久精品一区二区| 亚洲免费色视频| 黄色日韩网站视频| 99久久99久久综合| 国产人成一区二区三区影院| 老司机免费视频一区二区| 亚洲精品一区二区三区蜜桃下载 | 亚洲大片免费看| 色8久久精品久久久久久蜜| 日韩毛片在线免费观看| 欧美日韩色一区| 精品亚洲国内自在自线福利| 日韩午夜激情av| 日本中文字幕一区二区视频| 91女厕偷拍女厕偷拍高清| 国产精品久99| 亚洲国产成人在线| 在线一区二区视频| 日韩精品乱码av一区二区| 国产视频一区二区三区在线观看 | 91久久精品一区二区| 亚洲欧美偷拍三级| 国产日韩成人精品| proumb性欧美在线观看| 亚洲一区二区三区在线| 国产精品欧美久久久久无广告| 色8久久精品久久久久久蜜| 日韩电影在线看| 欧美一区二区三区四区久久| 亚洲国产精品欧美一二99| 欧美福利视频一区| 国产91在线观看丝袜| 日韩av一区二| 日韩高清不卡一区二区| 成人欧美一区二区三区白人| 日本亚洲最大的色成网站www| 久久久蜜臀国产一区二区| 成人av免费在线观看| 亚洲另类色综合网站|