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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? multi.c

?? 這是一個linux 嵌入式系統(tǒng)中很重要的GCC編譯器程序
?? C
字號:
/* multi.c -- multitable stuff for makeinfo.   $Id: multi.c,v 1.2 1998/03/24 18:07:57 law Exp $   Copyright (C) 1996, 97 Free Software Foundation, Inc.   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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */#include "system.h"#include "makeinfo.h"#define MAXCOLS 100             /* remove this limit later @@ *//* * Output environments.  This is a hack grafted onto existing * structure.  The "output environment" used to consist of the * global variables `output_paragraph', `fill_column', etc. * Routines like add_char would manipulate these variables. * * Now, when formatting a multitable, we maintain separate environments * for each column.  That way we can build up the columns separately * and write them all out at once.  The "current" output environment" * is still kept in those global variables, so that the old output * routines don't have to change.  But we provide routines to save * and restore these variables in an "environment table".  The * `select_output_environment' function switches from one output * environment to another. * * Environment #0 (i.e., element #0 of the table) is the regular * environment that is used when we're not formatting a multitable. * * Environment #N (where N = 1,2,3,...) is the env. for column #N of * the table, when a multitable is active. *//* contents of an output environment *//* some more vars may end up being needed here later @@ */struct env{  unsigned char *output_paragraph;  int output_paragraph_offset;  int output_column;  int paragraph_is_open;  int current_indent;  int fill_column;} envs[MAXCOLS];                /* the environment table *//* index in environment table of currently selected environment */static int current_env_no;/* column number of last column in current multitable */static int last_column;/* flags indicating whether horizontal and vertical separators need   to be drawn, separating rows and columns in the current multitable. */static int hsep, vsep;/* Output a row.  Have to keep `output_position' up-to-date for each   character we output, or the tags table will be off, leading to   chopped-off output files and undefined nodes (because they're in the   wrong file, etc.).  Perhaps it would be better to accumulate this   value somewhere and add it once at the end of the table, or return it   as the value, but this seems simplest.  */static voidout_char (ch)    int ch;{  extern int output_position;  putc (ch, output_stream);  output_position++;}voiddraw_horizontal_separator (){  int i, j, s;  for (s = 0; s < envs[0].current_indent; s++)    out_char (' ');  if (vsep)    out_char ('+');  for (i = 1; i <= last_column; i++) {    for (j = 0; j <= envs[i].fill_column; j++)      out_char ('-');    if (vsep)      out_char ('+');  }  out_char ('\n');}voiddo_multitable (){  int ncolumns;  /*   *  multitable strategy:   *  for each item {   *     for each column in an item {   *      initialize a new paragraph   *      do ordinary formatting into the new paragraph   *      save the paragraph away   *      repeat if there are more paragraphs in the column   *    }   *    dump out the saved paragraphs and free the storage   *  }   */  if (multitable_active)    {      line_error ("Multitables cannot be nested");      return;    }  /* scan the current item function to get the field widths     and number of columns, and set up the output environment list     accordingly. */  ncolumns = setup_multitable_parameters ();  if (hsep)    draw_horizontal_separator ();  /* The next @item command will direct stdout into the first column     and start processing.  @tab will then switch to the next column,     and @item will flush out the saved output and return to the first     column.  Environment #1 is the first column.  (Environment #0 is     the normal output) */  ++multitable_active;}/* Read the parameters for a multitable from the current command   line, save the parameters away, and return the   number of columns. */intsetup_multitable_parameters (){  char *params = insertion_stack->item_function;  int nchars;  float columnfrac;  char command[200]; /* naughty, should be no fixed limits */  int i = 1;  /* We implement @hsep and @vsep even though TeX doesn't.     We don't get mixing of @columnfractions and templates right,     but TeX doesn't either.  */  hsep = vsep = 0;  while (*params) {    while (whitespace (*params))      params++;    if (*params == '@') {      sscanf (params, "%200s", command);      nchars = strlen (command);      params += nchars;      if (strcmp (command, "@hsep") == 0)        hsep++;      else if (strcmp (command, "@vsep") == 0)        vsep++;      else if (strcmp (command, "@columnfractions") == 0) {        /* Clobber old environments and create new ones, starting at #1.           Environment #0 is the normal output, so don't mess with it. */        for ( ; i <= MAXCOLS; i++) {          if (sscanf (params, "%f", &columnfrac) < 1)            goto done;          /* Unfortunately, can't use %n since some m68k-hp-bsd libc             doesn't support it.  So skip whitespace (preceding the             number) and then non-whitespace (the number).  */          while (*params && (*params == ' ' || *params == '\t'))            params++;          /* Hmm, but what about @columnfractions 3foo?  Well, I suppose             it's invalid input anyway.  */          while (*params && *params != ' ' && *params != '\t'                 && *params != '\n' && *params != '@')            params++;          setup_output_environment (i,                     (int) (columnfrac * (fill_column - current_indent) + .5));        }      }    } else if (*params == '{') {      char *start = params;      while ((*params != '}' || params[-1] == '@') && *params) {        params++;      }      /* This gives us two spaces between columns.  Seems reasonable.         Really should expand the text, though, so a template of         `@code{foo}' has a width of five, not ten.  Also have to match         braces, then.  How to take into account current_indent here?  */      setup_output_environment (i++, params++ - start);          } else {      warning (_("ignoring stray text `%s' after @multitable"), params);      break;    }  }done:  flush_output ();  inhibit_output_flushing ();  last_column = i - 1;  return last_column;}/* Initialize environment number ENV_NO, of width WIDTH.   The idea is that we're going to use one environment for each column of   a multitable, so we can build them up separately and print them   all out at the end. */intsetup_output_environment (env_no, width)    int env_no;    int width;{  int old_env = select_output_environment (env_no);  /* clobber old environment and set width of new one */  init_paragraph ();  /* make our change */  fill_column = width;  /* Save new environment and restore previous one. */  select_output_environment (old_env);  return env_no;}/* Direct current output to environment number N.  Used when   switching work from one column of a multitable to the next.   Returns previous environment number. */int select_output_environment (n)    int n;{  struct env *e = &envs[current_env_no];  int old_env_no = current_env_no;  /* stash current env info from global vars into the old environment */  e->output_paragraph = output_paragraph;  e->output_paragraph_offset = output_paragraph_offset;  e->output_column = output_column;  e->paragraph_is_open = paragraph_is_open;  e->current_indent = current_indent;  e->fill_column = fill_column;  /* now copy new environment into global vars */  current_env_no = n;  e = &envs[current_env_no];  output_paragraph = e->output_paragraph;  output_paragraph_offset = e->output_paragraph_offset;  output_column = e->output_column;  paragraph_is_open = e->paragraph_is_open;  current_indent = e->current_indent;  fill_column = e->fill_column;  return old_env_no;}/* advance to the next environment number */voidnselect_next_environment (){  if (current_env_no >= last_column) {    line_error (_("Too many columns in multitable item (max %d)"), last_column);    return;  }  select_output_environment (current_env_no + 1);}static void output_multitable_row ();/* do anything needed at the beginning of processing a   multitable column. */voidinit_column (){  /* don't indent 1st paragraph in the item */  cm_noindent ();  /* throw away possible whitespace after @item or @tab command */  skip_whitespace ();}/* start a new item (row) of a multitable */intmultitable_item (){  if (!multitable_active) {    /* impossible, I think. */    error (_("multitable item not in active multitable"));    exit (1);  }  if (current_env_no > 0) {    output_multitable_row ();  }  /* start at column 1 */  select_output_environment (1);  if (!output_paragraph) {    line_error (_("Cannot select column #%d in multitable"), current_env_no);    exit (FATAL);  }  init_column ();  return 0;}static voidoutput_multitable_row (){  int i, j, s, remaining;  /* offset in the output paragraph of the next char needing     to be output for that column. */  int offset[MAXCOLS];  for (i = 0; i <= last_column; i++)    offset[i] = 0;  /* select the current environment, to make sure the env variables     get updated */  select_output_environment (current_env_no);#define CHAR_ADDR(n) (offset[i] + (n))#define CHAR_AT(n) (envs[i].output_paragraph[CHAR_ADDR(n)])  /* remove trailing whitespace from each column */  for (i = 1; i <= last_column; i++) {    while (cr_or_whitespace (CHAR_AT (envs[i].output_paragraph_offset - 1))) {      envs[i].output_paragraph_offset--;    }  }  /* read the current line from each column, outputting them all     pasted together.  Do this til all lines are output from all     columns.  */  for (;;) {    remaining = 0;    /* first, see if there is any work to do */    for (i = 1; i <= last_column; i++) {      if (CHAR_ADDR (0) < envs[i].output_paragraph_offset) {        remaining = 1;        break;      }    }    if (!remaining)      break;        for (s = 0; s < envs[0].current_indent; s++)      out_char (' ');        if (vsep)      out_char ('|');    for (i = 1; i <= last_column; i++) {      for (s = 0; i < envs[i].current_indent; s++)        out_char (' ');      for (j = 0; CHAR_ADDR (j) < envs[i].output_paragraph_offset; j++) {        if (CHAR_AT (j) == '\n')          break;        out_char (CHAR_AT (j));      }      offset[i] += j + 1;       /* skip last text plus skip the newline */      for (; j <= envs[i].fill_column; j++)        out_char (' ');      if (vsep)        out_char ('|'); /* draw column separator */    }    out_char ('\n');    /* end of line */  }  if (hsep)    draw_horizontal_separator ();  /* Now dispose of the buffered output. */  for (i = 1; i <= last_column; i++) {    select_output_environment (i);    init_paragraph ();  }}#undef CHAR_AT#undef CHAR_ADDR/* select a new column in current row of multitable */voidcm_tab (){  if (!multitable_active)    error (_("ignoring @tab outside of multitable"));    nselect_next_environment ();  init_column ();}/* close a multitable, flushing its output and resetting   whatever needs resetting */voidend_multitable (){  output_multitable_row ();  /* Multitables cannot be nested.  Otherwise, we'd have to save the     previous output environment number on a stack somewhere, and then     restore to that environment.  */  select_output_environment (0);  close_paragraph ();  insert ('\n'); /* we swallow newlines, so insert one of our own */    multitable_active = 0;  uninhibit_output_flushing ();#if 0  printf (_("** Multicolumn output from last row:\n"));  for (i = 1; i <= last_column; i++) {    select_output_environment (i);    printf (_("* column #%d: output = %s\n"), i, output_paragraph);  }#endif}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本久道久久综合中文字幕| 成人精品免费网站| 国产日韩精品一区二区三区在线| 成人av在线播放网址| 一二三区精品福利视频| 久久免费的精品国产v∧| 91色.com| 九色|91porny| 有码一区二区三区| 精品三级在线观看| 91在线免费视频观看| 日本v片在线高清不卡在线观看| 国产亚洲短视频| 欧美性色aⅴ视频一区日韩精品| 国产在线观看免费一区| 一区二区三区四区不卡在线 | 亚洲国产综合91精品麻豆| 欧美一级日韩免费不卡| 99免费精品视频| 久久国产婷婷国产香蕉| 亚洲激情中文1区| 欧美国产精品劲爆| 欧美一区二区三区在线电影 | 日韩精品电影一区亚洲| 国产精品国产三级国产有无不卡 | 国产一区二区影院| 性久久久久久久久久久久| 国产精品国产三级国产普通话99| 在线播放/欧美激情| 成人国产一区二区三区精品| 麻豆国产欧美一区二区三区| 亚洲久本草在线中文字幕| 国产色91在线| 欧美一级黄色大片| 欧美亚洲综合色| 91免费看视频| 本田岬高潮一区二区三区| 韩国三级中文字幕hd久久精品| 亚洲狠狠爱一区二区三区| 国产日韩欧美一区二区三区乱码| 在线91免费看| 91在线观看免费视频| 国产激情一区二区三区四区| 麻豆一区二区三| 一区二区三区中文字幕精品精品| 91精品国产综合久久精品| 91国产成人在线| a亚洲天堂av| 99久久精品久久久久久清纯| 国产精品888| 国产尤物一区二区| 偷拍自拍另类欧美| 亚洲国产成人91porn| 国产精品美女久久久久久久久| 91精品国产aⅴ一区二区| 欧美久久久久免费| 欧美日韩一区二区三区不卡| 色综合久久久久| 91色乱码一区二区三区| 91视视频在线直接观看在线看网页在线看 | 日韩一区二区在线观看| 欧美精品自拍偷拍| 日韩一区二区三区免费观看| 日韩精品中文字幕一区| 日韩精品一区二区三区老鸭窝| 精品久久一区二区| 精品国产一区二区亚洲人成毛片| 久久网这里都是精品| 国产三区在线成人av| 国产精品成人在线观看| 久久久久国产精品麻豆| 国产嫩草影院久久久久| 国产精品乱码妇女bbbb| 亚洲视频免费看| 亚洲综合区在线| 日韩黄色小视频| 国精品**一区二区三区在线蜜桃| 国产精品一区二区三区乱码 | 国产乱码字幕精品高清av| 国产精品12区| av在线不卡免费看| 欧美性猛交xxxxxx富婆| 日韩欧美一级二级三级久久久| 精品少妇一区二区三区日产乱码| 国产无一区二区| 亚洲乱码国产乱码精品精小说| 亚洲观看高清完整版在线观看| 免费观看久久久4p| 国产不卡视频一区| 日本韩国一区二区| 欧美一区二区三区视频免费播放| 国产午夜精品一区二区| 一区二区三区国产精华| 麻豆成人91精品二区三区| 国产白丝精品91爽爽久久| 91电影在线观看| 日韩精品在线网站| 亚洲摸摸操操av| 琪琪一区二区三区| 成人毛片老司机大片| 在线观看av一区二区| 欧美tk—视频vk| 亚洲免费在线观看视频| 麻豆成人在线观看| 91福利社在线观看| 国产视频一区不卡| 日产国产高清一区二区三区| 成人免费观看av| 91精品国产综合久久香蕉麻豆| 久久九九久精品国产免费直播| 亚洲永久免费av| 国产精品一区二区你懂的| 欧美少妇一区二区| 国产精品高清亚洲| 久久99精品一区二区三区 | 国产精品一区二区在线播放| 欧美偷拍一区二区| 国产精品久久久久久久久免费丝袜| 亚洲成人自拍一区| 99精品黄色片免费大全| 精品国产第一区二区三区观看体验| 亚洲影院久久精品| 国产超碰在线一区| 亚洲精品在线免费播放| 偷偷要91色婷婷| 在线免费观看不卡av| 中文字幕第一区| 亚洲.国产.中文慕字在线| 91免费小视频| 亚洲欧洲一区二区三区| 婷婷六月综合网| 成人爱爱电影网址| 久久这里只有精品6| 日日噜噜夜夜狠狠视频欧美人 | 成人黄色综合网站| 久久综合久久综合久久综合| 奇米四色…亚洲| 欧美精品粉嫩高潮一区二区| 亚洲靠逼com| 一本久久综合亚洲鲁鲁五月天 | 蜜臀99久久精品久久久久久软件| 欧美一a一片一级一片| 亚洲精品视频在线观看免费| 国产福利精品导航| 久久一二三国产| 国产真实乱对白精彩久久| 日韩欧美一级二级三级| 日本三级亚洲精品| 欧美精品精品一区| 奇米四色…亚洲| 日韩欧美成人激情| 免费看欧美女人艹b| 欧美一卡二卡在线| 亚洲一区二三区| 91欧美一区二区| 中文字幕 久热精品 视频在线| 老司机午夜精品99久久| 91精品国产入口在线| 日本女优在线视频一区二区| 91精品国产综合久久久久久久久久| 亚洲卡通动漫在线| 欧美午夜一区二区三区| 中文字幕亚洲欧美在线不卡| 99re这里只有精品6| 亚洲乱码日产精品bd| 欧美色成人综合| 婷婷激情综合网| 欧美一区二区三区在线电影| 男人的j进女人的j一区| 精品美女在线观看| 成人午夜视频免费看| 亚洲色图视频网站| 在线视频一区二区三| 一区二区三区四区av| 91精品欧美久久久久久动漫 | 久久精品国产免费看久久精品| 日韩午夜在线观看| 天堂成人国产精品一区| 日韩欧美中文一区二区| 国产成人午夜精品影院观看视频| 国产精品久久久久三级| 91福利在线导航| 久久成人18免费观看| 欧美激情在线观看视频免费| 91捆绑美女网站| 欧美aⅴ一区二区三区视频| 国产拍揄自揄精品视频麻豆| 色天使久久综合网天天| 热久久一区二区| 国产精品久久三| 欧美久久久久久久久久| 精品写真视频在线观看 | 欧美精品精品一区| 日韩综合小视频| 欧美一区二区福利在线| 国产综合色在线视频区| 国产精品亲子乱子伦xxxx裸| 欧美日韩免费视频| 成人一区在线观看| 久久激五月天综合精品|