[comp.text] BibTeX in C, 6/6

rokicki@rocky.STANFORD.EDU (Tomas Rokicki) (12/30/87)

---cut here---
    intentptr = 0 ; 
    while ( ( intentptr < numentints * numcites ) ) 
      { entryints [ intentptr ] = 0 ; 
        incr ( intentptr ) ; 
        } 
      if ( ( numentstrs * numcites > maxentstrs ) ) 
    { tputi ( cnull , numentstrs * numcites  ) ;
      tputs ( cnull , " " ) ;
      
      { tputs ( cnull , "Sorry, you've exceeded BibTeX's total number of string entry-variables " ) ;
        tputi ( cnull , maxentstrs  ) ;
        tputc ( cnull , 10 ) ;
        jumpout ( 1 ) ; 
        } 
      } 
    strentptr = 0 ; 
    while ( ( strentptr < numentstrs * numcites ) ) 
      { mymalloc ( entrystrs [ strentptr ] , 1 ) ;
        entrystrs [ strentptr ] [ 0 ] = 127 ; 
        incr ( strentptr ) ; 
        } 
      citeptr = 0 ; 
    while ( ( citeptr < numcites ) ) 
      { typelist [ citeptr ] = 0 ; 
        sortedcites [ citeptr ] = citeptr ; 
        incr ( citeptr ) ; 
        } 
      bibptr = 0 ; 
    while ( ( bibptr < numbibfiles ) ) 
      { tputs ( cnull , "Database file #" ) ;
        tputi ( cnull , bibptr + 1  ) ;
        tputs ( cnull , ": " ) ;
        printbibname () ; 
        biblinenum = 0 ; 
        bufptr2 = last ; 
        while ( ( ! feof ( bibfile [ bibptr ] ) ) ) getbibcommandorentry () ; 
          aclose ( bibfile [ bibptr ] ) ; 
        incr ( bibptr ) ; 
        } 
      
#ifdef TRACE
    tputs ( logfile , "finished reading the database file(s)\n" ) ;
    
#endif
    citeptr = 0 ; 
    while ( ( citeptr < numcites ) ) 
      { if ( ( typelist [ citeptr ] == 0 ) ) 
        { tputs ( cnull , "I didn't find a database entry for \\cite key \"" ) ;
          printpoolstr ( citelist [ citeptr ] ) ; 
          tputs ( cnull , "\"--warning\n" ) ;
          } 
        incr ( citeptr ) ; 
        } 
      bufptr2 = svptr1 ; 
    last = svptr2 ; 
    tmpptr = bufptr2 ; 
    while ( ( tmpptr < last ) ) 
      { buffer [ tmpptr ] = svbuffer [ tmpptr ] ; 
        incr ( tmpptr ) ; 
        } 
      lab10 : ; 
    } 
  bstreversecommand () { /* 10 */ if ( ( ! readseen ) ) 
    { tputs ( cnull , "illegal, reverse command before read command" ) ;
      bsterrprintandlookfo () ; 
      goto lab10 ; 
      } 
    
    { if ( ( ! eatbstwhitespace () ) ) 
      { eatbstprint () ; 
        
        { tputs ( cnull , "reverse" ) ;
          bsterrprintandlookfo () ; 
          goto lab10 ; 
          } 
        } 
      } 
    
    { if ( ( buffer [ bufptr2 ] != 123 ) ) 
      { bstleftbraceprint () ; 
        
        { tputs ( cnull , "reverse" ) ;
          bsterrprintandlookfo () ; 
          goto lab10 ; 
          } 
        } 
      incr ( bufptr2 ) ; 
      } 
    
    { if ( ( ! eatbstwhitespace () ) ) 
      { eatbstprint () ; 
        
        { tputs ( cnull , "reverse" ) ;
          bsterrprintandlookfo () ; 
          goto lab10 ; 
          } 
        } 
      } 
    
    { scanidentifier ( 125 , 37 ) ; 
      if ( ( ( scanresult == 3 ) || ( scanresult == 1 ) ) ) ; 
      else 
      { bstidprint () ; 
        
        { tputs ( cnull , "reverse" ) ;
          bsterrprintandlookfo () ; 
          goto lab10 ; 
          } 
        } 
      } 
    
#ifdef TRACE
    traceprtoken () ; 
    tputs ( logfile , " is a to be iterated in reverse function\n" ) ;
    
#endif
    lowercase ( buffer , bufptr1 , ( bufptr2 - bufptr1 ) ) ; 
    fnloc = strlookup ( buffer , bufptr1 , ( bufptr2 - bufptr1 ) , 11 , false 
    ) ; 
    if ( ( ! hashfound ) ) 
    { printtoken () ; 
      
      { tputs ( cnull , " is an unknown function" ) ;
        bstwarnprint () ; 
        } 
      } 
    else if ( ( ( fntype [ fnloc ] != 0 ) && ( fntype [ fnloc ] != 2 ) ) ) 
    printfunctiontypebst () ; 
    
    { if ( ( ! eatbstwhitespace () ) ) 
      { eatbstprint () ; 
        
        { tputs ( cnull , "reverse" ) ;
          bsterrprintandlookfo () ; 
          goto lab10 ; 
          } 
        } 
      } 
    
    { if ( ( buffer [ bufptr2 ] != 125 ) ) 
      { bstrightbraceprint () ; 
        
        { tputs ( cnull , "reverse" ) ;
          bsterrprintandlookfo () ; 
          goto lab10 ; 
          } 
        } 
      incr ( bufptr2 ) ; 
      } 
    
    { initcommandexecution () ; 
      messwithentries = true ; 
      if ( ( numcites > 0 ) ) 
      { sortciteptr = numcites ; 
        do { decr ( sortciteptr ) ; 
          citeptr = sortedcites [ sortciteptr ] ; 
          
#ifdef TRACE
          traceprpoolstr ( hashtext [ fnloc ] ) ; 
          tputs ( logfile , " to be iterated in reverse on " ) ;
          traceprpoolstr ( citelist [ citeptr ] ) ; 
          tputc ( logfile , 10 ) ;
          
#endif
          executefn ( fnloc ) ; 
          checkcommandexecutio () ; 
          } while ( ! ( ( sortciteptr == 0 ) ) ) ; 
        } 
      } 
    lab10 : ; 
    } 
  bstsortcommand () { /* 10 */ if ( ( ! readseen ) ) 
    { tputs ( cnull , "illegal, sort command before read command" ) ;
      bsterrprintandlookfo () ; 
      goto lab10 ; 
      } 
    
    { 
#ifdef TRACE
      tputs ( logfile , "sorting the entries\n" ) ;
      
#endif
      if ( ( numcites > 1 ) ) quicksort ( 0 , numcites - 1 ) ; 
      
#ifdef TRACE
      tputs ( logfile , "done sorting\n" ) ;
      
#endif
      } 
    lab10 : ; 
    } 
  bststringscommand () { /* 10 */ 
    { if ( ( ! eatbstwhitespace () ) ) 
      { eatbstprint () ; 
        
        { tputs ( cnull , "strings" ) ;
          bsterrprintandlookfo () ; 
          goto lab10 ; 
          } 
        } 
      } 
    
    { if ( ( buffer [ bufptr2 ] != 123 ) ) 
      { bstleftbraceprint () ; 
        
        { tputs ( cnull , "strings" ) ;
          bsterrprintandlookfo () ; 
          goto lab10 ; 
          } 
        } 
      incr ( bufptr2 ) ; 
      } 
    
    { if ( ( ! eatbstwhitespace () ) ) 
      { eatbstprint () ; 
        
        { tputs ( cnull , "strings" ) ;
          bsterrprintandlookfo () ; 
          goto lab10 ; 
          } 
        } 
      } 
    while ( ( buffer [ bufptr2 ] != 125 ) ) 
      { 
        { scanidentifier ( 125 , 37 ) ; 
          if ( ( ( scanresult == 3 ) || ( scanresult == 1 ) ) ) ; 
          else 
          { bstidprint () ; 
            
            { tputs ( cnull , "strings" ) ;
              bsterrprintandlookfo () ; 
              goto lab10 ; 
              } 
            } 
          } 
        
#ifdef TRACE
        traceprtoken () ; 
        tputs ( logfile , " is a string global-variable\n" ) ;
        
#endif
        lowercase ( buffer , bufptr1 , ( bufptr2 - bufptr1 ) ) ; 
        fnloc = strlookup ( buffer , bufptr1 , ( bufptr2 - bufptr1 ) , 11 , 
        true ) ; 
        
        { if ( ( hashfound ) ) 
          { alreadyseenfunctionp ( fnloc ) ; 
            goto lab10 ; 
            } 
          } 
        fntype [ fnloc ] = 9 ; 
        ilkinfo [ fnloc ] = numglbstrs ; 
        mymalloc ( globalstrs [ numglbstrs ] , 1 ) ;
        globalstrs [ numglbstrs ] [ 0 ] = 127 ; 
        if ( ( numglbstrs == maxglobstrs ) ) 
        { tputs ( cnull , "Sorry, you've exceeded BibTeX's number of string global-variables " ) ;
          tputi ( cnull , maxglobstrs  ) ;
          tputc ( cnull , 10 ) ;
          jumpout ( 1 ) ; 
          } 
        incr ( numglbstrs ) ; 
        
        { if ( ( ! eatbstwhitespace () ) ) 
          { eatbstprint () ; 
            
            { tputs ( cnull , "strings" ) ;
              bsterrprintandlookfo () ; 
              goto lab10 ; 
              } 
            } 
          } 
        } 
      incr ( bufptr2 ) ; 
    lab10 : ; 
    } 
  getbstcommandandproc () { /* 10 */ if ( ( ! scanalpha () ) ) 
    { tputs ( cnull , "\"" ) ;
      tputc ( cnull , xchr [ buffer [ bufptr2 ] ]  ) ;
      tputs ( cnull , "\" can't start a style-file command" ) ;
      bsterrprintandlookfo () ; 
      goto lab10 ; 
      } 
    lowercase ( buffer , bufptr1 , ( bufptr2 - bufptr1 ) ) ; 
    commandnum = ilkinfo [ strlookup ( buffer , bufptr1 , ( bufptr2 - bufptr1 
    ) , 4 , false ) ] ; 
    if ( ( ! hashfound ) ) 
    { printtoken () ; 
      
      { tputs ( cnull , " is an illegal style-file command" ) ;
        bsterrprintandlookfo () ; 
        goto lab10 ; 
        } 
      } 
    switch ( commandnum ) 
    { case 0 : 
      bstentrycommand () ; 
      break ; 
      case 1 : 
      bstexecutecommand () ; 
      break ; 
      case 2 : 
      bstfunctioncommand () ; 
      break ; 
      case 3 : 
      bstintegerscommand () ; 
      break ; 
      case 4 : 
      bstiteratecommand () ; 
      break ; 
      case 5 : 
      bstmacrocommand () ; 
      break ; 
      case 6 : 
      bstreadcommand () ; 
      break ; 
      case 7 : 
      bstreversecommand () ; 
      break ; 
      case 8 : 
      bstsortcommand () ; 
      break ; 
      case 9 : 
      bststringscommand () ; 
      break ; 
      default : 
      
      { tputs ( cnull , "this can't happen---unknown style-file command" ) ;
        bsterrprintandlookfo () ; 
        goto lab10 ; 
        } 
      break ; 
      } lab10 : ; 
    } 
  initialize () { /* 41 46 */ quarterword i ; 
    hashloc k ; 
    quarterword auxnamelength ; 
    integer c ; 
    bad = 0 ; 
    setupenv() ;
    if ( ( minprintline < 3 ) ) bad = 1 ; 
    if ( ( maxprintline < minprintline ) ) bad = 10 * bad + 2 ; 
    if ( ( maxprintline >= bufsize ) ) bad = 10 * bad + 3 ; 
    if ( ( maxstrings > 5000 ) ) bad = 10 * bad + 7 ; 
    if ( ( maxcites > maxstrings ) ) bad = 10 * bad + 8 ; 
    if ( ( bad > 0 ) ) 
    { tputi ( stdout , bad  ) ;
      tputs ( stdout , " is a bad bad\n" ) ;
      jumpout ( 0 ) ;
      } 
    for ( i = 0 ; i <= 127 ; i ++ ) xord [ chr ( i ) ] = 127 ; 
      for ( i = 1 ; i <= 126 ; i ++ ) xord [ xchr [ i ] ] = i ; 
      for ( i = 0 ; i <= 127 ; i ++ ) lexclass [ i ] = 4 ; 
      for ( i = 0 ; i <= 31 ; i ++ ) lexclass [ i ] = 0 ; 
      lexclass [ 127 ] = 0 ; 
    lexclass [ 9 ] = 1 ; 
    lexclass [ 32 ] = 1 ; 
    for ( i = 48 ; i <= 57 ; i ++ ) lexclass [ i ] = 3 ; 
      for ( i = 65 ; i <= 90 ; i ++ ) lexclass [ i ] = 2 ; 
      for ( i = 97 ; i <= 122 ; i ++ ) lexclass [ i ] = 2 ; 
      for ( i = 0 ; i <= 127 ; i ++ ) idclass [ i ] = 1 ; 
      for ( i = 0 ; i <= 31 ; i ++ ) idclass [ i ] = 0 ; 
      idclass [ 32 ] = 0 ; 
    idclass [ 9 ] = 0 ; 
    idclass [ 34 ] = 0 ; 
    idclass [ 35 ] = 0 ; 
    idclass [ 37 ] = 0 ; 
    idclass [ 39 ] = 0 ; 
    idclass [ 40 ] = 0 ; 
    idclass [ 41 ] = 0 ; 
    idclass [ 44 ] = 0 ; 
    idclass [ 61 ] = 0 ; 
    idclass [ 123 ] = 0 ; 
    idclass [ 125 ] = 0 ; 
    for ( k = 1 ; k <= 5000 ; k ++ ) 
      { hashnext [ k ] = 0 ; 
        hashtext [ k ] = 0 ; 
        } 
      hashused = 5001 ; 
    poolptr = 0 ; 
    strptr = 1 ; 
    strstart [ strptr ] = poolptr ; 
    bibptr = 0 ; 
    bibseen = false ; 
    bststr = 0 ; 
    bstseen = false ; 
    citeptr = 0 ; 
    citationseen = false ; 
    wizdefptr = 0 ; 
    numglbstrs = 0 ; 
    numentints = 0 ; 
    numentstrs = 0 ; 
    numfields = 0 ; 
    entryseen = false ; 
    readseen = false ; 
    readperformed = false ; 
    implfnnum = 0 ; 
    predefine ( ".aux" , 7 ) ; 
    sauxextension = hashtext [ predefloc ] ; 
    predefine ( ".bbl" , 7 ) ; 
    sbblextension = hashtext [ predefloc ] ; 
    predefine ( ".blg" , 7 ) ; 
    slogextension = hashtext [ predefloc ] ; 
    predefine ( ".bst" , 7 ) ; 
    sbstextension = hashtext [ predefloc ] ; 
    predefine ( ".bib" , 7 ) ; 
    sbibextension = hashtext [ predefloc ] ; 
    predefine ( "\\citation" , 2 ) ; 
    ilkinfo [ predefloc ] = 2 ; 
    predefine ( "\\bibdata" , 2 ) ; 
    ilkinfo [ predefloc ] = 0 ; 
    predefine ( "\\bibstyle" , 2 ) ; 
    ilkinfo [ predefloc ] = 1 ; 
    predefine ( "\\@input" , 2 ) ; 
    ilkinfo [ predefloc ] = 3 ; 
    predefine ( "entry" , 4 ) ; 
    ilkinfo [ predefloc ] = 0 ; 
    predefine ( "execute" , 4 ) ; 
    ilkinfo [ predefloc ] = 1 ; 
    predefine ( "function" , 4 ) ; 
    ilkinfo [ predefloc ] = 2 ; 
    predefine ( "integers" , 4 ) ; 
    ilkinfo [ predefloc ] = 3 ; 
    predefine ( "iterate" , 4 ) ; 
    ilkinfo [ predefloc ] = 4 ; 
    predefine ( "macro" , 4 ) ; 
    ilkinfo [ predefloc ] = 5 ; 
    predefine ( "read" , 4 ) ; 
    ilkinfo [ predefloc ] = 6 ; 
    predefine ( "reverse" , 4 ) ; 
    ilkinfo [ predefloc ] = 7 ; 
    predefine ( "sort" , 4 ) ; 
    ilkinfo [ predefloc ] = 8 ; 
    predefine ( "strings" , 4 ) ; 
    ilkinfo [ predefloc ] = 9 ; 
    predefine ( "comment" , 12 ) ; 
    ilkinfo [ predefloc ] = 0 ; 
    predefine ( "string" , 12 ) ; 
    ilkinfo [ predefloc ] = 1 ; 
    bequals = buildin ( "=" , 0 ) ; 
    bgreaterthan = buildin ( ">" , 1 ) ; 
    blessthan = buildin ( "<" , 2 ) ; 
    bplus = buildin ( "+" , 3 ) ; 
    bminus = buildin ( "-" , 4 ) ; 
    bconcatenate = buildin ( "*" , 5 ) ; 
    bgets = buildin ( ":=" , 6 ) ; 
    baddperiod = buildin ( "add.period$" , 7 ) ; 
    bcalltype = buildin ( "call.type$" , 8 ) ; 
    bchangecase = buildin ( "change.case$" , 9 ) ; 
    bchrtoint = buildin ( "chr.to.int$" , 10 ) ; 
    bcite = buildin ( "cite$" , 11 ) ; 
    bduplicate = buildin ( "duplicate$" , 12 ) ; 
    bformatname = buildin ( "format.name$" , 13 ) ; 
    bif = buildin ( "if$" , 14 ) ; 
    binttochr = buildin ( "int.to.chr$" , 15 ) ; 
    binttostr = buildin ( "int.to.str$" , 16 ) ; 
    bmissing = buildin ( "missing$" , 17 ) ; 
    bnewline = buildin ( "newline$" , 18 ) ; 
    bnumnames = buildin ( "num.names$" , 19 ) ; 
    bpop = buildin ( "pop$" , 20 ) ; 
    bpurify = buildin ( "purify$" , 21 ) ; 
    bquote = buildin ( "quote$" , 22 ) ; 
    bskip = buildin ( "skip$" , 23 ) ; 
    bstack = buildin ( "stack$" , 24 ) ; 
    bsubstring = buildin ( "substring$" , 25 ) ; 
    bswap = buildin ( "swap$" , 26 ) ; 
    btopstack = buildin ( "top$" , 27 ) ; 
    btype = buildin ( "type$" , 28 ) ; 
    bwhile = buildin ( "while$" , 29 ) ; 
    bwidth = buildin ( "width$" , 30 ) ; 
    bwrite = buildin ( "write$" , 31 ) ; 
    predefine ( "sort.key$" , 11 ) ; 
    fntype [ predefloc ] = 7 ; 
    ilkinfo [ predefloc ] = numentstrs ; 
    sortkeynum = numentstrs ; 
    incr ( numentstrs ) ; 
    predefine ( "" , 0 ) ; 
    snull = hashtext [ predefloc ] ; 
    fntype [ predefloc ] = 4 ; 
    predefine ( "default.type" , 0 ) ; 
    sdefault = hashtext [ predefloc ] ; 
    fntype [ predefloc ] = 4 ; 
    bdefault = bskip ; 
    predefine ( "ul" , 0 ) ; 
    sul = hashtext [ predefloc ] ; 
    fntype [ predefloc ] = 4 ; 
    predefine ( "ll" , 0 ) ; 
    sll = hashtext [ predefloc ] ; 
    fntype [ predefloc ] = 4 ; 
    predefine ( "uu" , 0 ) ; 
    suu = hashtext [ predefloc ] ; 
    fntype [ predefloc ] = 4 ; 
    predefine ( "lu" , 0 ) ; 
    slu = hashtext [ predefloc ] ; 
    fntype [ predefloc ] = 4 ; 
    predefine ( "." , 0 ) ; 
    speriod = hashtext [ predefloc ] ; 
    fntype [ predefloc ] = 4 ; 
    while ( true ) 
      { if (gchrc > 0) {
        auxnamelength = 0 ; 
        while ( gchrc > 0 ) 
          { if ( ( auxnamelength == 100 ) ) 
            { gchrc = 0 ;
              { tputs ( stdout , "file name---" ) ;
                nameptr = 1 ; 
                while ( ( nameptr <= auxnamelength ) ) 
                  { fputc ( nameoffile [ nameptr ] , stdout ) ; 
                    incr ( nameptr ) ; 
                    } 
                  tputs ( stdout , "---is too long\n" ) ;
                goto lab46 ; 
                } 
              } 
            incr ( auxnamelength ) ; 
            nameoffile [ auxnamelength ] = * gargv ++ ; 
            gchrc -- ;
          }
        } else {
        tputs ( stdout , "Please type input file name (no extension)--" ) ;
        auxnamelength = 0 ; 
        c = getc ( stdin ) ; 
        while ( ( c != 10 && ! feof ( stdin ) ) ) 
          { if ( ( auxnamelength == 100 ) ) 
            { while ( ( c != 10 ) ) c = getc ( stdin ) ; 
                
              { tputs ( stdout , "file name---" ) ;
                nameptr = 1 ; 
                while ( ( nameptr <= auxnamelength ) ) 
                  { fputc ( nameoffile [ nameptr ] , stdout ) ; 
                    incr ( nameptr ) ; 
                    } 
                  tputs ( stdout , "---is too long\n" ) ;
                goto lab46 ; 
                } 
              } 
            incr ( auxnamelength ) ; 
            nameoffile [ auxnamelength ] = c ; 
            c = getc ( stdin ) ; 
            } }
          if ( ( ( auxnamelength + ( strstart [ sauxextension + 1 ] - 
        strstart [ sauxextension ] ) > 100 ) || ( auxnamelength + ( strstart 
        [ slogextension + 1 ] - strstart [ slogextension ] ) > 100 ) || ( 
        auxnamelength + ( strstart [ sbblextension + 1 ] - strstart [ 
        sbblextension ] ) > 100 ) ) ) 
        { tputs ( stdout , "file name---" ) ;
          nameptr = 1 ; 
          while ( ( nameptr <= auxnamelength ) ) 
            { fputc ( nameoffile [ nameptr ] , stdout ) ; 
              incr ( nameptr ) ; 
              } 
            tputs ( stdout , "---is too long\n" ) ;
          goto lab46 ; 
          } 
        namelength = auxnamelength ; 
        addextension ( sauxextension ) ; 
        auxptr = 0 ; 
        if ( ( ! aopenin ( auxfile [ auxptr ] , "." ) ) ) 
        { tputs ( stdout , "I couldn't open file name---" ) ;
          nameptr = 1 ; 
          while ( ( nameptr <= namelength ) ) 
            { fputc ( nameoffile [ nameptr ] , stdout ) ; 
              incr ( nameptr ) ; 
              } 
            tputc ( stdout , 10 ) ;
          goto lab46 ; 
          } 
        namelength = auxnamelength ; 
        addextension ( slogextension ) ; 
        if ( ( ! aopenout ( logfile ) ) ) 
        { tputs ( stdout , "I couldn't open file name---" ) ;
          nameptr = 1 ; 
          while ( ( nameptr <= namelength ) ) 
            { fputc ( nameoffile [ nameptr ] , stdout ) ; 
              incr ( nameptr ) ; 
              } 
            tputc ( stdout , 10 ) ;
          goto lab46 ; 
          } 
        namelength = auxnamelength ; 
        addextension ( sbblextension ) ; 
        if ( ( ! aopenout ( bblfile ) ) ) 
        { tputs ( stdout , "I couldn't open file name---" ) ;
          nameptr = 1 ; 
          while ( ( nameptr <= namelength ) ) 
            { fputc ( nameoffile [ nameptr ] , stdout ) ; 
              incr ( nameptr ) ; 
              } 
            tputc ( stdout , 10 ) ;
          goto lab46 ; 
          } 
        namelength = auxnamelength ; 
        addextension ( sauxextension ) ; 
        nameptr = 1 ; 
        while ( ( nameptr <= namelength ) ) 
          { buffer [ nameptr ] = xord [ nameoffile [ nameptr ] ] ; 
            incr ( nameptr ) ; 
            } 
          lowercase ( buffer , 1 , namelength ) ; 
        toplevstr = hashtext [ strlookup ( buffer , 1 , auxnamelength , 0 , 
        true ) ] ; 
        auxlist [ auxptr ] = hashtext [ strlookup ( buffer , 1 , namelength , 
        3 , true ) ] ; 
        if ( ( hashfound ) ) 
        { tputs ( cnull , "already encountered auxiliary file " ) ;
          printauxname () ; 
          
          { tputs ( cnull , "---this can't happen\n" ) ;
            jumpout ( 1 ) ; 
            } 
          } 
        auxlnstack [ auxptr ] = 0 ; 
        goto lab41 ; 
        lab46 : ; 
        } 
      lab41 : ; 
    } 
  main ( argc , argv ) 
int argc ;
char *argv[] ;
{
  if (argc > 1) {
     gargv = argv[1] ;
     gchrc = strlen(gargv) ;
  }
  initialize () ;
  tputs ( cnull , "This is BibTeX, C Version 0.98i\n" ) ;
  tputs ( cnull , "The top-level auxiliary file: " ) ;
  printauxname () ; 
  while ( true ) 
    { incr ( auxlnstack [ auxptr ] ) ; 
      if ( ( ! inputln ( auxfile [ auxptr ] ) ) ) {
        if ( poptheauxstack () )
           goto lab31 ;
        }
      else getauxcommandandproc () ; 
      } 
    
lab31 :
#ifdef TRACE
  tputs ( logfile , "finished reading the auxiliary file(s)\n" ) ;
  
#endif
  lastcheckforauxerror () ; 
  if ( ( bststr == 0 ) ) goto lab9932 ; 
  bstlinenum = 0 ; 
  bbllinenum = 1 ; 
  bufptr2 = last ; 
  while ( true ) 
    { if ( ( ! eatbstwhitespace () ) ) goto lab32 ; 
      getbstcommandandproc () ; 
      } 
    lab32 : aclose ( bstfile ) ; 
  lab9932 : aclose ( bblfile ) ; 
  jumpout ( 1 ) ;
  } 
---cut here---