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

export("?", .DollarNames, .S3methods, .romans, CRAN.packages, 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, 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, "aspell")
S3method(format, "news_db")
S3method(format, "object_size")
S3method(format, "roman")
S3method(getRcode, vignette)
S3method(head, data.frame)
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, data.frame)
S3method(tail, default)
S3method(tail, "function")
S3method(tail, matrix)
S3method(tail, ftable)
S3method(tail, table)
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("$<-", "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,
       .RtangleCodeLabel,
       makeRweaveLatexCodeRunner)

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)
}
