# Refer to all C routines by their name prefixed by C_
useDynLib(utils, .registration = TRUE, .fixes = "C_")

export("?", .DollarNames, .S3methods, .romans, Rprof, Rprofmem,
       RShowDoc, RSiteSearch, URLdecode, URLencode, View, adist,
       alarm, apropos, aregexec, argsAnywhere, asDateBuilt, askYesNo,
       assignInMyNamespace, assignInNamespace, as.roman, as.person,
       as.personList, as.relistable, aspell, aspell_package_C_files,
       aspell_package_R_files, aspell_package_Rd_files,
       aspell_package_vignettes,
       aspell_write_personal_dictionary_file, available.packages,
       browseEnv, browseURL, browseVignettes, bug.report,
       capture.output, changedFiles, charClass, checkCRAN,
       chooseBioCmirror, chooseCRANmirror, citation, cite, citeNatbib,
       citEntry, citHeader, citFooter, close.socket, combn,
       compareVersion, contrib.url, count.fields, create.post, data,
       data.entry, dataentry, de, de.ncols, de.restore, de.setup,
       debugger, debugcall, demo, download.file, download.packages,
       dump.frames, edit, emacs, example, file_test, file.edit,
       fileSnapshot, find, fix, fixInNamespace, findLineNum,
       flush.console, formatOL, formatUL, getAnywhere, getCRANmirrors,
       getFromNamespace, getParseData, getParseText, getS3method,
       getSrcDirectory, getSrcFilename, getSrcLocation, getSrcref,
       glob2rx, globalVariables, hasName, head, head.matrix, help,
       help.request, help.search, help.start, history,
       install.packages, installed.packages, is.relistable,
       isS3method, isS3stdGeneric, limitedLabels, loadhistory,
       localeToCharset, ls.str, lsf.str, maintainer,
       make.packages.html, make.socket, memory.limit, memory.size,
       menu, methods, mirror2html, modifyList, new.packages, news,
       object.size, old.packages, osVersion, package.skeleton,
       packageDate, packageDescription, packageName, packageVersion,
       packageStatus, page, person, personList, pico, process.events,
       prompt, promptData, promptImport, promptPackage, rc.getOption,
       rc.options, rc.settings, rc.status, readCitationFile, read.DIF,
       read.csv, read.csv2, read.delim, read.delim2, read.fwf,
       read.fortran, read.socket, read.table, recover, relist,
       remove.packages, removeSource, rtags, savehistory, select.list,
       sessionInfo, setBreakpoint, setRepositories, stack, str,
       strcapture, strOptions, summaryRprof, suppressForeignCheck,
       tail, tail.matrix, tar, timestamp, toBibtex, toLatex,
       type.convert, undebugcall, unstack, untar, unzip, ## update.packageStatus,
       update.packages, upgrade, url.show, vi, vignette, warnErrList,
       write.csv, write.csv2, write.socket, write.table, xedit,
       xemacs, zip)

export(txtProgressBar, getTxtProgressBar, setTxtProgressBar)

export("hsearch_db", "hsearch_db_concepts", "hsearch_db_keywords")

S3method("[", getAnywhere)
S3method("[", "news_db")
S3method("[", roman)
S3method(Ops, roman)
S3method(Summary, roman)
S3method(as.character, person)
S3method(as.character, roman)
S3method(as.person, default)
S3method(as.personList, default)
S3method(as.personList, person)
S3method(close, txtProgressBar)
S3method(edit, data.frame)
S3method(edit, default)
S3method(edit, matrix)
S3method(edit, vignette)
S3method(format, MethodsFunction)
S3method(format, "aspell")
S3method(format, "news_db")
S3method(format, "object_size")
S3method(format, "roman")
S3method(getRcode, vignette)
S3method(head, array)
S3method(head, data.frame, head.array)
S3method(head, default)
S3method(head, "function")
S3method(head, matrix)
S3method(head, ftable)
# S3method(head, table)
S3method(print, "aspell")
S3method(print, "aspell_inspect_context")
S3method(print, Bibtex)
S3method(print, changedFiles)
S3method(print, fileSnapshot)
S3method(print, findLineNumResult)
S3method(print, getAnywhere)
S3method(print, "help_files_with_topic")
S3method(print, hsearch)
S3method(print, "hsearch_db")
S3method(print, Latex)
S3method(print, "ls_str")
S3method(print, MethodsFunction)
S3method(print, "news_db")
S3method(print, "object_size")
S3method(print, packageDescription)
S3method(print, packageIQR)
S3method(print, packageStatus)
S3method(print, roman)
S3method(print, sessionInfo)
S3method(print, socket)
S3method(print, summary.packageStatus)
S3method(print, vignette)
S3method(print, browseVignettes)
S3method(prompt, data.frame)
S3method(prompt, default)
S3method(relist, default)
S3method(relist, factor)
S3method(relist, list)
S3method(relist, matrix)
S3method(rep, roman)
S3method(stack, data.frame)
S3method(stack, default)
S3method(str, POSIXt)
S3method(str, Date)
S3method(str, data.frame)
S3method(str, default)
S3method(subset, "news_db")
S3method(summary, aspell)
S3method(summary, packageStatus)
S3method(tail, array)
S3method(tail, data.frame, tail.array)
S3method(tail, default)
S3method(tail, "function")
S3method(tail, matrix)
S3method(tail, ftable)
S3method(tail, table, tail.array)
S3method(toBibtex, person)
S3method(toLatex, sessionInfo)
S3method(type.convert, default)
S3method(type.convert, list)
S3method(type.convert, data.frame)
S3method(unlist, relistable)
S3method(unstack, data.frame)
S3method(unstack, default)
S3method(upgrade, packageStatus)
## Cannot register update.packageStatus as update is in stats and would
## create a cycle, i.e., can NOT use anything from stats.
## Hence (at least for now) register in stats.

export("bibentry")
S3method("$", "bibentry")
S3method("$", "person")
S3method("$<-", "bibentry")
S3method("$<-", "citation")
S3method("$<-", "person")
S3method("[", "bibentry")
S3method("[", "person")
S3method("[[", "bibentry")
S3method("[[", "person")
S3method("c", "bibentry")
S3method("c", "person")
S3method("format", "bibentry")
S3method("format", "citation")
S3method("format", "person")
S3method("print", "bibentry")
S3method("print", "citation")
S3method("print", "person")
S3method("rep", "bibentry")
S3method("sort", "bibentry")
S3method("toBibtex", "bibentry")
S3method("unique", "bibentry")

S3method(.DollarNames, default)
S3method(.DollarNames, list)
S3method(.DollarNames, environment)

export(Rtangle, RtangleSetup, RweaveLatex, RweaveLatexSetup, Stangle,
       Sweave, SweaveSyntConv, SweaveSyntaxLatex, SweaveSyntaxNoweb,
       RtangleWritedoc, RweaveChunkPrefix, RweaveEvalWithOpt,
       RweaveTryStop, SweaveHooks, RweaveLatexWritedoc,
       RweaveLatexOptions, RweaveLatexFinish, RtangleFinish,
       .RtangleCodeLabel,
       makeRweaveLatexCodeRunner, RtangleRuncode)

if(tools:::.OStype() == "unix") {
export(nsl)
}

if(tools:::.OStype() == "windows") {
export(DLL.version, Filters, choose.dir, choose.files, getClipboardFormats,
       getIdentification, getWindowsHandle, getWindowsHandles, getWindowTitle,
       loadRconsole, readClipboard,
       readRegistry, setStatusBar, setWindowTitle, shortPathName,
       win.version, winDialog, winDialogString, winMenuAdd,
       winMenuAddItem, winMenuDel, winMenuDelItem, winMenuNames,
       winMenuItems, writeClipboard,
       winProgressBar, getWinProgressBar, setWinProgressBar,
       setInternet2, zip.unpack, ## defunct stub
       arrangeWindows)
S3method(close, winProgressBar)
}

export(hashtab, gethash, sethash, remhash, numhash, typhash,
       maphash, clrhash, is.hashtab)

S3method(print, hashtab)
S3method(format, hashtab)
S3method("[[", hashtab)
S3method("[[<-", hashtab)
S3method(length, hashtab)
S3method(as.environment, hashtab)
S3method(str, hashtab)
