########################################################################
##
## Copyright (C) 2010-2026 The Octave Project Developers
##
## See the file COPYRIGHT.md in the top-level directory of this
## distribution or <https://octave.org/copyright/>.
##
## This file is part of Octave.
##
## Octave 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 3 of the License, or
## (at your option) any later version.
##
## Octave 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 Octave; see the file COPYING.  If not, see
## <https://www.gnu.org/licenses/>.
##
########################################################################

## -*- texinfo -*-
## @deftypefn {} {@var{txt} =} __unimplemented__ (@var{fcn})
## Return specific help text for the unimplemented function @var{fcn}.
##
## This is usually a suggestion for an existing compatible function to use in
## place of @var{fcn}.
##
## This function is not called by users, but by the Octave interpreter when it
## fails to recognize an input string as a valid function name.  See
## @code{missing_function_hook} for using a different handler for this event.
## @seealso{missing_function_hook}
## @end deftypefn

function txt = __unimplemented__ (fcn)

  if (nargin < 1)
    print_usage ();
  endif

  print_contribute_msg = true;

  ## Some smarter cases, add more as needed.
  switch (fcn)
    case {"avifile", "aviinfo", "aviread"}
      txt = ["Basic video file support is provided in the video package.  ", ...
             "See @url{https://packages.octave.org/video/}."];

    case "funm"
      txt = ["@code{funm} is not currently part of core Octave.  ", ...
             "See the linear-algebra package at ", ...
             "@url{https://packages.octave.org/linear-algebra/}."];
      print_contribute_msg = false;

    case "griddedInterpolant"
      txt = ["@code{griddedInterpolant} is not implemented.  ", ...
             "Consider using @code{griddata}."];

    case "linprog"
      txt = ["Octave does not currently provide @code{linprog}.  ", ...
             "Linear programming problems may be solved using @code{glpk}.  ", ...
             "Try @code{help glpk} for more info."];

    case "matlabrc"
      txt = ["@file{matlabrc} is not implemented.  ", ...
             "Octave uses the file @file{.octaverc} instead."];
      print_contribute_msg = false;

    case {"ode113", "ode23t", "ode23tb"}
      txt = ["Octave provides @code{lsode}, and @code{ode15i}, ", ...
             "@code{ode15s}, @code{ode23}, @code{ode23s}, @code{ode45}", ...
             "for solving differential equations.  For more information", ...
             "try @code{help lsode} or @code{help ode45}.  ", ...
             "Further specialized ODE solvers are provided by the odepkg ", ...
             "package.  See @url{https://wiki.octave.org/Odepkg}."];

    case "polarplot"
      txt = ["@code{polarplot} is not implemented.  ", ...
             "Consider using @code{polar}."];

    case "startup"
      txt = ["@file{startup.m} is a user startup and configuration script.", ...
             "  Try @code{doc startup} for more information."];
      print_contribute_msg = false;

    case {"xlsread", "xlsfinfo", "xlswrite", "wk1read", "wk1finfo", "wk1write"}
      txt = ["Functions for spreadsheet style I/O ", ...
             "(.xls .xlsx .sxc .ods .dbf .wk1 etc.) " , ...
             "are provided in the io package. ", ...
             "See @url{https://packages.octave.org/io/}."];
      print_contribute_msg = false;

    ## control system
    case {"absorbDelay", "allmargin", "append", "augstate", "balreal", ...
          "balred", "balredOptions", "bdschur", "bode", ...
          "bodemag", "bodeoptions", "bodeplot", "c2d", "c2dOptions", ...
          "canon", "care", "chgFreqUnit", "chgTimeUnit", "connect", ...
          "connectOptions", "covar", "ctrb", "ctrbf", "ctrlpref", "d2c", ...
          "d2cOptions", "d2d", "d2dOptions", "damp", "dare", "db2mag", ...
          "dcgain", "delay2z", "delayss", "dlqr", "dlyap", "dlyapchol", ...
          "drss", "dsort", "dss", "dssdata", "esort", "estim", "evalfr", ...
          "feedback", "filt", "frd", "frdata", "freqresp", "gcare", "gdare", ...
          "genfrd", "genmat", "gensig", "genss", "get", "getBlockValue", ...
          "getDelayModel", "getGainCrossover", "getIOTransfer", ...
          "getLFTModel", "getLoopTransfer", "getNominal", "getoptions", ...
          "getPeakGain", "getSwitches", "getValue", "gram", "hasdelay", ...
          "hasInternalDelay", "hsvd", "hsvdOptions", "hsvoptions", ...
          "hsvplot", "imp2exp", "impulse", "impulseplot", "initial", ...
          "initialplot", "iopzmap", "iopzplot", "isct", "isdt", ...
          "isfinite", "isParametric", "isproper", "isreal", "issiso", ...
          "isstable", "isstatic", "kalman", "kalmd", "lft", "loopswitch", ...
          "lqg", "lqgreg", "lqgtrack", "lqi", "lqr", "lqrd", "lqry", "lsim", ...
          "lsiminfo", "lsimplot", "ltiview", "lyap", "lyapchol", "mag2db", ...
          "margin", "minreal", "modred", "modsep", "nblocks", "ndims", ...
          "ngrid", "nichols", "nicholsoptions", "nicholsplot", "nmodels", ...
          "norm", "nyquist", "nyquistoptions", "nyquistplot", "obsv", ...
          "obsvf", "order", "pade", "parallel", "permute", "pid", "piddata", ...
          "pidstd", "pidstddata", "pidtool", "pidtune", "pidtuneOptions", ...
          "place", "pole", "prescale", "pzmap", "pzoptions", "pzplot", ...
          "realp", "reg", "replaceBlock", "repsys", "reshape", "rlocus", ...
          "rlocusplot", "rss", "series", "set", "setBlockValue", ...
          "setDelayModel", "setoptions", "setValue", "sgrid", ...
          "showBlockValue", "showTunable", "sigma", "sigmaoptions", ...
          "sigmaplot", "sisoinit", "sisotool", "sminreal", "ss", ...
          "ss2ss", "ssdata", "stabsep", "stabsepOptions", "stack", "step", ...
          "stepDataOptions", "stepinfo", "stepplot", "sumblk", "tf", ...
          "tfdata", "thiran", "timeoptions", "totaldelay", "tzero", ...
          "updateSystem", "upsample", "xperm", "zero", "zgrid", "zpk", ...
          "zpkdata"}
      txt = check_package (fcn, "control", ...
                           {"frd", "iddata", "lti", "ss", "tf", "poly"});
      print_contribute_msg = false;

    ## communications
    case {"algdeintrlv", "algintrlv", "alignsignals", "amdemod", "ammod", ...
          "arithdeco", "arithenco", "awgn", "bchdec", "bchenc", ...
          "bchgenpoly", "bchnumerr", "berawgn", "bercoding", "berconfint", ...
          "berfading", "berfit", "bersync", "bertool", "bi2de", "bin2gray", ...
          "biterr", "bsc", "cma", "commscope", "compand", "convdeintrlv", ...
          "convenc", "convintrlv", "convmtx", "cosets", "cyclgen", ...
          "cyclpoly", "de2bi", "decode", "deintrlv", "dfe", "dftmtx", ...
          "distspec", "doppler", "dpcmdeco", "dpcmenco", "dpcmopt", ...
          "dpskdemod", "dpskmod", "dvbs2ldpc", "encode", "equalize", ...
          "eyediagram", "EyeScope", "finddelay", "fmdemod", "fmmod", ...
          "fskdemod", "fskmod", "gaussdesign", "gen2par", "genqamdemod", ...
          "genqammod", "gf", "gfadd", "gfconv", "gfcosets", "gfdeconv", ...
          "gfdiv", "gffilter", "gflineq", "gfminpol", "gfmul", "gfpretty", ...
          "gfprimck", "gfprimdf", "gfprimfd", "gfrank", "gfrepcov", ...
          "gfroots", "gfsub", "gftable", "gftrunc", "gftuple", "gfweight", ...
          "gray2bin", "hammgen", "heldeintrlv", "helintrlv", ...
          "helscandeintrlv", "helscanintrlv", "huffmandeco", "huffmandict", ...
          "huffmanenco", "intdump", "intrlv", "iscatastrophic", ...
          "isprimitive", "istrellis", "legacychannelsim", "lineareq", ...
          "lloyds", "lms", "lteZadoffChuSeq", "marcumq", ...
          "mask2shift", "matdeintrlv", "matintrlv", "minpol", "mldivide", ...
          "mlseeq", "modnorm", "muxdeintrlv", "muxintrlv", "noisebw", ...
          "normlms", "oct2dec", "oqpskdemod", "oqpskmod", "pamdemod", ...
          "pammod", "pmdemod", "pmmod", "poly2trellis", "primpoly", ...
          "pskdemod", "pskmod", "qamdemod", "qammod", "qfunc", "qfuncinv", ...
          "quantiz", "randdeintrlv", "randerr", "randintrlv", "randsrc", ...
          "rayleighchan", "rcosdesign", "rectpulse", "reset", "ricianchan", ...
          "rls", "rsdec", "rsenc", "rsgenpoly", "rsgenpolycoeffs", ...
          "scatterplot", "sdrexamples", "sdrfgensysace", "sdrfroot", ...
          "sdrinfo", "sdrload", "sdrsetup", "semianalytic", "shift2mask", ...
          "signlms", "ssbdemod", "ssbmod", "stdchan", ...
          "supportPackageInstaller", "symerr", "syndtable", "varlms", ...
          "vec2mat", "vitdec", "wgn"}
      txt = check_package (fcn, "communications");
      print_contribute_msg = false;

    ## dataypes
    case {"array2table", "caldays", "calendarDuration", "calmonths", ...
          "calquarters", "calweeks", "calyears", "categorical", ...
          "cell2table", "convertCharsToStrings", "convertStringsToChars", ...
          "csv2table", "datetime", "days", "duration", "hours", ...
          "iscalendarduration", "iscategorical", "isdatetime", "isduration", ...
          "isnat", "istable", "keyHash", "keyMatch", "milliseconds", ...
          "minutes", "missing", "NaT", "seconds", "string", "struct2table", ...
          "table", "vartype", "years"}
      txt = check_package (fcn, "datatypes");
      print_contribute_msg = false;

    ## dicom
    case {"addContour", "convertToInfo", "dicomanon", "dicomBrowser", ...
          "dicomCollection", "dicomContours", "dicomdict", "dicomdisp", ...
          "dicominfo", "dicomlookup", "dicomread", "dicomreadVolume", ...
          "dicomuid", "dicomwrite", "deleteContour", ...
          "images.dicom.decodeUID", "images.dicom.parseDICOMDIR", "isdicom", ...
          "plotContour"}
      txt = check_package (fcn, "dicom");
      print_contribute_msg = false;

    ## financial
    case {"abs2active", "accrfrac", "acrubond", "acrudisc", "active2abs", ...
          "addEquality", "addGroupRatio", "addGroups", "addInequality", ...
          "adline", "adosc", "amortize", "annurate", "annuterm", ...
          "arith2geom", "ascii2fts", "beytbill", "binprice", "blkimpv", ...
          "blkprice", "blsdelta", "blsgamma", "blsimpv", "blslambda", ...
          "blsprice", "blsrho", "blstheta", "blsvega", "bndconvp", ...
          "bndconvy", "bnddurp", "bnddury", "bndkrdur", "bndprice", ...
          "bndspread", "bndtotalreturn", "bndyield", "bolling", "bollinger", ...
          "boxcox", "busdate", "busdays", "candle", "cdai", "cdprice", ...
          "cdyield", "cfamounts", "cfbyzero", "cfconv", "cfdates", "cfdur", ...
          "cfplot", "cfport", "cfprice", "cfspread", "cftimes", "cfyield", ...
          "chaikosc", "chaikvolat", "chartfts", "checkFeasibility", ...
          "chfield", "convert2sur", ...
          "convertto", "corr2cov", "cov2corr", "cpncount", "cpndaten", ...
          "cpndatenq", "cpndatep", "cpndaysp", "cpnpersz", "createholidays", ...
          "cumsum", "cur2frac", "cur2str", "date2time", "dateaxis", ...
          "datedisp", "datefind", "datemnth", "datewrkdy", "day", "days360", ...
          "days360e", "days360isda", "days360psa", "days365", "daysact", ...
          "daysadd", "daysdif", "dec2thirtytwo", "depfixdb", "depgendb", ...
          "deprdv", "depsoyd", "depstln", "diff", "disc2zero", "discrate", ...
          "ecmmvnrfish", "ecmmvnrmle", "ecmmvnrobj", "ecmmvnrstd", ...
          "ecmnfish", "ecmnhess", "ecmninit", "ecmnmle", "ecmnobj", ...
          "ecmnstd", "effrr", "elpm", "emaxdrawdown", "end", "eomdate", ...
          "estimateAssetMoments", "estimateBounds", ...
          "estimateFrontier", ...
          "estimateFrontierByReturn", ...
          "estimateFrontierByRisk", ...
          "estimateFrontierLimits", ...
          "estimateMaxSharpeRatio", "estimatePortMoments", ...
          "estimatePortReturn", ...
          "estimatePortRisk", ...
          "estimatePortStd", "estimatePortVaR", ...
          "estimateScenarioMoments", "ewstats", ...
          "exp", "extfield", "fbusdate", "fetch", "fieldnames", "fillts", ...
          "fints", "floatdiscmargin", "floatmargin", "fpctkd", "frac2cur", ...
          "freqnum", "freqstr", "frontcon", "frontier", "fts2ascii", ...
          "fts2mat", "ftsbound", "ftsgui", "ftsinfo", "ftstool", "ftsuniq", ...
          "fvdisc", "fvfix", "fvvar", "fwd2zero", "geom2arith", ...
          "getAssetMoments", "getBounds", ...
          "getBudget", ...
          "getCosts", "getEquality", ...
          "getGroupRatio", "getGroups", ...
          "getInequality", ...
          "getnameidx", "getOneWayTurnover", ...
          "getScenarios", ...
          "hhigh", "highlow", "holdings2weights", ...
          "holidays", "horzcat", "hour", "inforatio", "irr", "isbusday", ...
          "iscompatible", "isfield", "issorted", "kagi", "lagts", ...
          "lbusdate", "leadts", "length", "linebreak", "llow", ...
          "log10", "log2", "lpm", "lweekdate", "m2xdate", "macd", ...
          "maxdrawdown", "medprice", "merge", "minus", "minute", "mirr", ...
          "month", "months", "movavg", "mrdivide", "mtimes", "mvnrfish", ...
          "mvnrmle", "mvnrobj", "mvnrstd", "negvolidx", ...
          "nomrr", "nweekdate", "nyseclosures", "onbalvol", "opprofit", ...
          "payadv", "payodd", "payper", "payuni", "pcalims", "pcgcomp", ...
          "pcglims", "pcpval", "peravg", "periodicreturns", "plotFrontier", ...
          "plus", "pointfig", "portalloc", ...
          "portalpha", "portcons", "Portfolio", "PortfolioCVaR", ...
          "PortfolioMAD", "portopt", "portrand", "portror", "portsim", ...
          "portstats", "portvar", "portvrisk", "posvolidx", "power", ...
          "prbyzero", "prcroc", "prdisc", "priceandvol", "prmat", "prtbill", ...
          "pvfix", "pvtrend", "pvvar", "pyld2zero", "rdivide", "renko", ...
          "resamplets", "ret2tick", "rmfield", "rsindex", "selectreturn", ...
          "setAssetList", "setAssetMoments", ...
          "setBounds", "setBudget", ...
          "setCosts", ...
          "setDefaultConstraints", ...
          "setEquality", ...
          "setGroupRatio", ...
          "setGroups", "setInequality", ...
          "setInitPort", ...
          "setOneWayTurnover", ...
          "setProbabilityLevel", "setScenarios", ...
          "setSolver", ...
          "setTurnover", "sharpe", ...
          "simulateNormalScenariosByData", ...
          "simulateNormalScenariosByMoments", ...
          "smoothts", "sortfts", ...
          "spctkd", "stochosc", "subsasgn", "subsref", "targetreturn", ...
          "taxedrr", "tbilldisc2yield", "tbillprice", "tbillrepo", ...
          "tbillval01", "tbillyield", "tbillyield2disc", "tbl2bond", ...
          "thirdwednesday", "thirtytwo2dec", "tick2ret", "time2date", ...
          "times", "toannual", "todaily", "today", "todecimal", "tomonthly", ...
          "toquarterly", "toquoted", "tosemi", "totalreturnprice", ...
          "toweekly", "tr2bonds", "transprob", "transprobbytotals", ...
          "transprobfromthresholds", "transprobgrouptotals", ...
          "transprobprep", "transprobtothresholds", "tsaccel", "tsmom", ...
          "tsmovavg", "typprice", "ugarch", "ugarchllf", "ugarchpred", ...
          "ugarchsim", "uicalendar", "uminus", "uplus", "vertcat", ...
          "volarea", "volroc", "wclose", "weeknum", "weights2holdings", ...
          "willad", "willpctr", "wrkdydif", "x2mdate", "xirr", "year", ...
          "yeardays", "yearfrac", "ylddisc", "yldmat", "yldtbill", ...
          "zbtprice", "zbtyield", "zero2disc", "zero2fwd", "zero2pyld"}
      txt = check_package (fcn, "financial", {"diffusion", "drift", "sde"});
      print_contribute_msg = false;

    ## image
    case {"activecontour", "adapthisteq", "affine2d", "affine3d", ...
          "analyze75info", "analyze75read", "applycform", "applylut", ...
          "axes2pix", "bestblk", "blockproc", "bwarea", "bwareaopen", ...
          "bwboundaries", "bwconncomp", "bwconvhull", "bwdist", ...
          "bwdistgeodesic", "bweuler", "bwhitmiss", "bwlabel", "bwlabeln", ...
          "bwlookup", "bwmorph", "bwpack", "bwperim", "bwselect", ...
          "bwtraceboundary", "bwulterode", "bwunpack", "checkerboard", ...
          "col2im", "colfilt", "conndef", "convmtx2", "corner", ...
          "cornermetric", "corr2", "cp2tform", "cpcorr", "cpselect", ...
          "cpstruct2pairs", "dct2", "dctmtx", "deconvblind", "deconvlucy", ...
          "deconvreg", "deconvwnr", "decorrstretch", "demosaic", ...
          "edge", "edgetaper", "entropy", "entropyfilt", "fan2para", ...
          "fanbeam", "findbounds", "fitgeotrans", "fliptform", "freqz2", ...
          "fsamp2", "fspecial", "ftrans2", "fwind1", "fwind2", "getheight", ...
          "getimage", "getimagemodel", "getline", "getneighbors", ...
          "getnhood", "getpts", "getrect", "getsequence", "graycomatrix", ...
          "graycoprops", "graydist", "grayslice", "graythresh", "hdrread", ...
          "hdrwrite", "histeq", "hough", "houghlines", "houghpeaks", ...
          "iccfind", "iccread", "iccroot", "iccwrite", "idct2", "ifanbeam", ...
          "im2bw", "im2col", "im2double", "im2int16", "im2java2d", ...
          "im2single", "im2uint16", "im2uint8", "imabsdiff", "imadd", ...
          "imadjust", "ImageAdapter", "imageinfo", "imapplymatrix", ...
          "imapprox", "imattributes", "imbothat", "imclearborder", ...
          "imclose", "imcolormaptool", "imcomplement", "imcontour", ...
          "imcontrast", "imcrop", "imdilate", "imdisplayrange", ...
          "imdistline", "imdivide", "imellipse", "imerode", "imextendedmax", ...
          "imextendedmin", "imfill", "imfilter", "imfindcircles", ...
          "imfreehand", "imfuse", "imgca", "imgcf", "imgetfile", ...
          "imgradient", "imgradientxy", "imhandles", "imhist", ...
          "imhistmatch", "imhmax", "imhmin", "imimposemin", "imlincomb", ...
          "imline", "immagbox", "immovie", "immultiply", "imnoise", ...
          "imopen", "imoverview", "imoverviewpanel", "impixel", ...
          "impixelinfo", "impixelinfoval", "impixelregion", ...
          "impixelregionpanel", "implay", "impoint", "impoly", "improfile", ...
          "impyramid", "imquantize", "imreconstruct", "imrect", "imref2d", ...
          "imref3d", "imregconfig", "imregionalmax", "imregionalmin", ...
          "imregister", "imregtform", "imresize", "imroi", "imrotate", ...
          "imsave", "imscrollpanel", "imsharpen", "imshowpair", ...
          "imsubtract", "imtool", "imtophat", "imtransform", "imwarp", ...
          "interfileinfo", "interfileread", "intlut", "iptaddcallback", ...
          "iptcheckconn", "iptcheckhandle", "iptgetapi", ...
          "iptGetPointerBehavior", "iptgetpref", "ipticondir", ...
          "iptPointerManager", "iptprefs", "iptremovecallback", ...
          "iptSetPointerBehavior", "iptsetpref", "iptwindowalign", "iradon", ...
          "isflat", "isicc", "isrset", "lab2double", "lab2uint16", ...
          "lab2uint8", "label2rgb", "labelmatrix", "makecform", ...
          "makeConstrainToRectFcn", "makehdr", "makelut", "makeresampler", ...
          "maketform", "mat2gray", "mean2", "medfilt2", "montage", ...
          "multithresh", "nitfinfo", "nitfread", "nlfilter", "normxcorr2", ...
          "openrset", "ordfilt2", "otf2psf", "padarray", "para2fan", ...
          "phantom", "poly2mask", "projective2d", "psf2otf", "qtdecomp", ...
          "qtgetblk", "qtsetblk", "radon", "rangefilt", "reflect", ...
          "regionprops", "rgb2gray", "rgb2ycbcr", "roicolor", "roifill", ...
          "roifilt2", "roipoly", "rsetwrite", "std2", "stdfilt", "strel", ...
          "stretchlim", "subimage", "tformarray", "tformfwd", "tforminv", ...
          "tonemap", "translate", "truesize", "viscircles", "warp", ...
          "watershed", "whitepoint", "wiener2", "xyz2double", "xyz2uint16", ...
          "ycbcr2rgb"}
      txt = check_package (fcn, "image", {"imref2d", "imref3d", "strel"});
      print_contribute_msg = false;

    ## signal
    case {"ac2poly", "ac2rc", "angle", "arburg", "arcov", "armcov", ...
          "aryule", "bandpower", "barthannwin", "besselap", "besself", ...
          "bilinear", "bitrevorder", "blackmanharris", "bohmanwin", ...
          "buffer", "buttap", "butter", "buttord", "cceps", "cconv", ...
          "cell2sos", "cfirpm", "cheb1ap", "cheb1ord", "cheb2ap", ...
          "cheb2ord", "chebwin", "cheby1", "cheby2", "chirp", "convmtx", ...
          "corrmtx", "cpsd", "czt", "db", "db2mag", "db2pow", "dct", ...
          "decimate", "demod", "design", "designmethods", "designopts", ...
          "dfilt", "dftmtx", "digitrevorder", "diric", "downsample", "dpss", ...
          "dpssclear", "dpssdir", "dpssload", "dspdata", "dspfwiz", ...
          "dutycycle", "ellip", "ellipap", "ellipord", "enbw", "equiripple", ...
          "falltime", "fdatool", "fdesign", "filt2block", "filterbuilder", ...
          "filternorm", "filtfilt", "filtic", "filtord", "findpeaks", ...
          "fir1", "fir2", "fircls", "fircls1", "firls", "firpm", "firpmord", ...
          "firrcos", "firtype", "flattopwin", "freqs", "freqsamp", "fvtool", ...
          "fwht", "gauspuls", "gaussdesign", "gaussfir", "gausswin", ...
          "gmonopuls", "goertzel", "grpdelay", "hann", "hilbert", "icceps", ...
          "idct", "ifwht", "impinvar", "impz", "impzlength", "interp", ...
          "intfilt", "invfreqs", "invfreqz", "is2rc", "isallpass", ...
          "islinphase", "ismaxphase", "isminphase", "isstable", "kaiser", ...
          "kaiserord", "kaiserwin", "lar2rc", "latc2tf", "latcfilt", ...
          "levinson", "lp2bp", "lp2bs", "lp2hp", "lp2lp", "lpc", "lsf2poly", ...
          "mag2db", "marcumq", "maxflat", "medfilt1", "midcross", ...
          "modulate", "mscohere", "nuttallwin", "overshoot", "parzenwin", ...
          "pburg", "pcov", "peak2peak", "peak2rms", "peig", "phasedelay", ...
          "phasez", "pmcov", "pmtm", "pmusic", "poly2ac", "poly2lsf", ...
          "poly2rc", "polyscale", "polystab", "pow2db", "prony", ...
          "pulseperiod", "pulsesep", "pulsewidth", "pulstran", "pwelch", ...
          "pyulear", "rc2ac", "rc2is", "rc2lar", "rc2poly", "rceps", ...
          "rcosdesign", "realizemdl", "rectpuls", "rectwin", "resample", ...
          "residuez", "risetime", "rlevinson", "rms", "rooteig", ...
          "rootmusic", "rssq", "sawtooth", "schurrc", "seqperiod", ...
          "setspecs", "settlingtime", "sfdr", "sgolay", "sgolayfilt", ...
          "shiftdata", "sigwin", "sinad", "slewrate", "snr", "sos2cell", ...
          "sos2ss", "sos2tf", "sos2zp", "sosfilt", "spectrogram", ...
          "spectrum", "sptool", "square", "ss2sos", "ss2tf", "ss2zp", ...
          "statelevels", "stepz", "stmcb", "strips", "taylorwin", "tf2latc", ...
          "tf2sos", "tf2ss", "tf2zp", "tf2zpk", "tfestimate", "thd", "toi", ...
          "triang", "tripuls", "tukeywin", "udecode", "uencode", ...
          "undershoot", "unshiftdata", "upfirdn", "upsample", ...
          "validstructures", "vco", "window", "wintool", "wvtool", "xcorr", ...
          "xcorr2", "xcov", "yulewalk", "zerophase", "zp2sos", "zp2ss", ...
          "zp2tf", "zplane"}
      txt = check_package (fcn, "signal");
      print_contribute_msg = false;

    ## statistics
    case {"adtest", "anova1", "anova2", "anovan", "bar3", "bar3h", ...
           "bartlett_test", "barttest", "betacdf", "BetaDistribution", ...
           "betafit", "betainv", "betalike", "betapdf", "betarnd", ...
           "betastat", "binocdf", "binofit", "binoinv", "binolike", ...
           "BinomialDistribution", "binopdf", "binornd", "binostat", ...
           "binotest", "BirnbaumSaundersDistribution", "bisacdf", ...
           "bisafit", "bisainv", "bisalike", "bisapdf", "bisarnd", ...
           "bisastat", "boxplot", "burrcdf", "BurrDistribution", "burrfit", ...
           "burrinv", "burrlike", "burrpdf", "burrrnd", "burrstat", ...
           "bvncdf", "bvtcdf", "CalinskiHarabaszEvaluation", "canoncorr", ...
           "cauchycdf", "cauchyinv", "cauchypdf", "cauchyrnd", "cdf", ...
           "cdfcalc", "cdfplot", "chi2cdf", "chi2gof", "chi2inv", ...
           "chi2pdf", "chi2rnd", "chi2stat", "chi2test", "cholcov", ...
           "cl_multinom", "ClassificationDiscriminant", ...
           "ClassificationGAM", "ClassificationKNN", ...
           "ClassificationNeuralNetwork", "ClassificationPartitionedModel", ...
           "ClassificationSVM", "cluster", "ClusterCriterion", ...
           "clusterdata", "cmdscale", "combnk", ...
           "CompactClassificationDiscriminant", "CompactClassificationGAM", ...
           "CompactClassificationNeuralNetwork", "CompactClassificationSVM", ...
           "confusionchart", "confusionmat", "ConfusionMatrixChart", ...
           "cophenet", "copulacdf", "copulapdf", "copularnd", ...
           "correlation_test", "createns", "crosstab", "crossval", ...
           "cvpartition", "datasample", "DaviesBouldinEvaluation", "dcov", ...
           "dendrogram", "ecdf", "editDistance", "einstein", "evalclusters", ...
           "evcdf", "evfit", "evinv", "evlike", "evpdf", "evrnd", "evstat", ...
           "ExhaustiveSearcher", "expcdf", "expfit", "expinv", "explike", ...
           "ExponentialDistribution", "exppdf", "exprnd", "expstat", ...
           "ExtremeValueDistribution", "factoran", "fcdf", "fcnnpredict", ...
           "fcnntrain", "ff2n", "fillmissing", "finv", "fishertest", ...
           "fitcdiscr", "fitcgam", "fitcnet", "fitcsvm", "fitdist", ...
           "fitgmdist", "fitlm", "fitrgam", "fpdf", "friedman", "frnd", ...
           "fstat", "fullfact", "gamcdf", "gamfit", "gaminv", "gamlike", ...
           "GammaDistribution", "gampdf", "gamrnd", "gamstat", ...
           "GapEvaluation", "GeneralizedExtremeValueDistribution", ...
           "GeneralizedParetoDistribution", "geocdf", "geofit", "geoinv", ...
           "geomean", "geopdf", "geornd", "geostat", "gevcdf", "gevfit", ...
           "gevfit_lmom", "gevinv", "gevlike", "gevpdf", "gevrnd", ...
           "gevstat", "glmfit", "glmval", "gpcdf", "gpfit", "gpinv", ...
           "gplike", "gppdf", "gprnd", "gpstat", "grp2idx", "grpstats", ...
           "gscatter", "gumbelcdf", "gumbelfit", "gumbelinv", "gumbellike", ...
           "gumbelpdf", "gumbelrnd", "HalfNormalDistribution", "harmmean", ...
           "hist3", "histfit", "hmmestimate", "hmmgenerate", "hmmviterbi", ...
           "hncdf", "hnfit", "hninv", "hnlike", "hnpdf", "hnrnd", "hnstat", ...
           "hnswSearcher", "hotelling_t2test", "hotelling_t2test2", ...
           "hygecdf", "hygeinv", "hygepdf", "hygernd", "hygestat", "icdf", ...
           "inconsistent", "InverseGaussianDistribution", "invgcdf", ...
           "invgfit", "invginv", "invglike", "invgpdf", "invgrnd", ...
           "invgstat", "ismissing", "isoutlier", "iwishpdf", "iwishrnd", ...
           "jackknife", "jsucdf", "jsupdf", "KDTreeSearcher", "kmeans", ...
           "knnsearch", "kruskalwallis", "kstest", "kstest2", "laplacecdf", ...
           "laplaceinv", "laplacepdf", "laplacernd", "levene_test", ...
           "libsvmread", "libsvmwrite", "linkage", "loadmodel", "logicdf", ...
           "logifit", "logiinv", "logilike", "logipdf", "logirnd", ...
           "logistat", "logistic_regression", "LogisticDistribution", ...
           "logit", "loglcdf", "loglfit", "loglinv", "logllike", ...
           "LoglogisticDistribution", "loglpdf", "loglrnd", "loglstat", ...
           "logncdf", "lognfit", "logninv", "lognlike", ...
           "LognormalDistribution", "lognpdf", "lognrnd", "lognstat", ...
           "LoguniformDistribution", "mahal", "makedist", "makima", ...
           "manova1", "manovacluster", "mcnemar_test", "mhsample", "mle", ...
           "mnpdf", "mnrfit", "mnrnd", "monotone_smooth", "multcompare", ...
           "MultinomialDistribution", "multiway", "mvncdf", "mvnpdf", ...
           "mvnrnd", "mvtcdf", "mvtcdfqmc", "mvtpdf", "mvtrnd", "nakacdf", ...
           "nakafit", "NakagamiDistribution", "nakainv", "nakalike", ...
           "nakapdf", "nakarnd", "nakastat", "nanmax", "nanmean", "nanmin", ...
           "nansum", "nbincdf", "nbinfit", "nbininv", "nbinlike", "nbinpdf", ...
           "nbinrnd", "nbinstat", "ncfcdf", "ncfinv", "ncfpdf", "ncfrnd", ...
           "ncfstat", "nctcdf", "nctinv", "nctpdf", "nctrnd", "nctstat", ...
           "ncx2cdf", "ncx2inv", "ncx2pdf", "ncx2rnd", "ncx2stat", ...
           "NegativeBinomialDistribution", "NormalDistribution", ...
           "normalise_distribution", "normcdf", "normfit", "norminv", ...
           "normlike", "normpdf", "normplot", "normrnd", "normstat", ...
           "optimalleaforder", "pca", "pcacov", "pcares", "pdf", "pdist", ...
           "pdist2", "PiecewiseLinearDistribution", "plcdf", "plinv", ...
           "plpdf", "plrnd", "plsregress", "plstat", "poisscdf", ...
           "poissfit", "poissinv", "poisslike", "PoissonDistribution", ...
           "poisspdf", "poissrnd", "poisstat", "ppplot", "princomp", ...
           "probit", "procrustes", "qqplot", "random", "rangesearch", ...
           "ranksum", "raylcdf", "RayleighDistribution", "raylfit", ...
           "raylinv", "rayllike", "raylpdf", "raylrnd", "raylstat", ...
           "regress", "regress_gp", "regression_ftest", "regression_ttest", ...
           "RegressionGAM", "ricecdf", "ricefit", "riceinv", "ricelike", ...
           "ricepdf", "ricernd", "ricestat", "RicianDistribution", "ridge", ...
           "rmmissing", "runstest", "sampsizepwr", "sigma_pts", "signrank", ...
           "signtest", "silhouette", "SilhouetteEvaluation", "slicesample", ...
           "squareform", "standardizeMissing", "stepwisefit", "svmpredict", ...
           "svmtrain", "tabulate", "tcdf", "tiedrank", "tinv", ...
           "tLocationScaleDistribution", "tlscdf", "tlsfit", "tlsinv", ...
           "tlslike", "tlspdf", "tlsrnd", "tlsstat", "tpdf", ...
           "TriangularDistribution", "tricdf", "triinv", "trimmean", ...
           "tripdf", "trirnd", "tristat", "trnd", "tstat", "ttest", ...
           "ttest2", "unidcdf", "unidfit", "unidinv", "unidpdf", "unidrnd", ...
           "unidstat", "unifcdf", "unifinv", "unifit", ...
           "UniformDistribution", "unifpdf", "unifrnd", "unifstat", ...
           "vartest", "vartest2", "vartestn", "violin", "vmcdf", "vminv", ...
           "vmpdf", "vmrnd", "wblcdf", "wblfit", "wblinv", "wbllike", ...
           "wblpdf", "wblplot", "wblrnd", "wblstat", "WeibullDistribution", ...
           "wienrnd", "wishpdf", "wishrnd", "x2fx", "ztest", "ztest2"}
      txt = check_package (fcn, "statistics");
      print_contribute_msg = false;

    ## symbolic
    case {"argnames", "bernoulli", "catalan", "charpoly", "chebyshevT", ...
          "chebyshevU", "children", "coshint", "cosint", "dawson", ...
          "digits", "dilog", "dirac", "divisors", "dsolve", "ei", ...
          "ellipticCE", "ellipticCK", "ellipticCPi", "ellipticE", ...
          "ellipticF", "ellipticK", "ellipticPi", "euler", "eulergamma", ...
          "expand", "finverse", "formula", "fresnelc", "fresnels", ...
          "funtool", "gegenbauerC", "harmonic", "heaviside", "hermiteH", ...
          "hypergeom", "igamma", "jacobiP", "kroneckerDelta", "kummerU", ...
          "laguerreL", "legendreP", "logint", "minpoly", "pochhammer", ...
          "poles", "poly2sym", "polylog", "pretty", "quorem", ...
          "rectangularPulse", "signIm", "simplify", "sinhint", "sinint", ...
          "solve", "ssinint", "sym", "sym2poly", "symfun", "sympref", ...
          "syms", "symvar", "triangularPulse", "vpa", "vpasolve", ...
          "whittakerM", "whittakerW", "zeta"}
      txt = check_package (fcn, "symbolic", ...
                           {"double", "logical", "sym", "symfun"});
      print_contribute_msg = false;

    ## optim(ization)
    case {"bintprog", "color", "fgoalattain", "fmincon", "fminimax", ...
          "fminsearch", "fseminf", "fzmult", "gangstr", "ktrlink", ...
          "linprog", "lsqcurvefit", "lsqlin", "lsqnonlin", "optimoptions", ...
          "optimtool", "quadprog"}
      txt = check_package (fcn, "optim");
      print_contribute_msg = false;

    otherwise
      ## Not in any package, check against list of core Matlab functions
      if (ismember (fcn, missing_functions ()))
        txt = sprintf ("The @code{%s} function is not yet implemented in Octave.", fcn);
      else
        txt = "";
      endif

  endswitch

  if (txt)
    if (print_contribute_msg)
      txt = [txt, "\n\n@noindent\nPlease read ", ...
             "@url{https://www.octave.org/missing.html} to learn how ", ...
             "you can contribute missing functionality."];
    endif
    txt = __makeinfo__ (txt, "plain text");
  endif

  if (nargout == 0)
    error ("Octave:missing-function", "%s\n", txt);
  endif

endfunction

function txt = check_package (fcn, name, classes = {})

  txt = sprintf (strcat ("The '%s' function belongs to the '%s' package", ...
                         " indexed in Octave Packages at @url{https://", ...
                         "packages.octave.org}"), fcn, name);

  [~, status] = pkg ("describe", name);
  switch (lower (status{1}))

    case "loaded",
      for i = 1:numel (classes)
        cls = classes{i};
        try
          meths = methods (cls);
        catch
          meths = {};
        end_try_catch
        if (any (strcmp (fcn, meths)))
          txt = sprintf (["@code{%s} is a method of class @code{%s}; ", ...
                          "it must be called by prepending '%s/' ", ...
                          "to the method name (type @code{help @@%s/%s})."],
                         fcn, cls, cls, cls, fcn);
          return;
        endif
      endfor
      ## FIXME: This code is probably unreachable if package contains the list
      ## of implemented functions, rather than the list from Matlab.
      txt = sprintf ("%s but has not yet been implemented.", txt);

    case "not loaded",
      txt = sprintf (["%s which you have installed, but not loaded.  ", ...
                      "To load the package, type @w{@code{pkg load %s}}@ ", ...
                      "from the Octave prompt."], txt, name);

    otherwise
      ## this includes "not installed" and anything else if pkg changes
      ## the output of describe.
      txt = sprintf ("%s which seems not to be installed on your system.", txt);

  endswitch

endfunction

function rlist = missing_functions ()

  persistent list = {
  "addboundary",
  "addcats",
  "addCause",
  "addedge",
  "addmulti",
  "addnode",
  "addpoints",
  "addRequired",
  "addsample",
  "addsampletocollection",
  "addts",
  "adjacency",
  "align",
  "alim",
  "alpha",
  "alphamap",
  "alphaShape",
  "alphaSpectrum",
  "alphaTriangulation",
  "animatedline",
  "animatedLine",
  "append",
  "array2timetable",
  "barycentricToCartesian",
  "bctree",
  "bench",
  "between",
  "bfsearch",
  "bicgstabl",
  "biconncomp",
  "binary",
  "binscatter",
  "bitnot",
  "boundary",
  "boundaryFacets",
  "boundingbox",
  "brush",
  "builddocsearchdb",
  "bvp4c",
  "bvp5c",
  "bvpget",
  "bvpinit",
  "bvpset",
  "bvpxtend",
  "caldiff",
  "calllib",
  "callSoapService",
  "camdolly",
  "cameratoolbar",
  "campan",
  "camproj",
  "cartesianToBarycentric",
  "cartToBary",
  "categories",
  "cdf2rdf",
  "cdfepoch",
  "cdfinfo",
  "cdflib",
  "cdfread",
  "cdfwrite",
  "cellplot",
  "centrality",
  "centroid",
  "checkcode",
  "checkin",
  "checkout",
  "circumcenter",
  "circumcenters",
  "classUnderlying",
  "clearCache",
  "clearpoints",
  "clipboard",
  "clone",
  "cmopts",
  "collapse",
  "colordef",
  "colormapeditor",
  "compose",
  "condensation",
  "coneplot",
  "conncomp",
  "contains",
  "contourslice",
  "convexHull",
  "copyHDU",
  "count",
  "countcats",
  "countEachLabel",
  "createClassFromWsdl",
  "createFile",
  "createImg",
  "createSoapMessage",
  "createTbl",
  "criticalAlpha",
  "customverctrl",
  "daqread",
  "datacursormode",
  "datastore",
  "datatipinfo",
  "dateshift",
  "day",
  "dbmex",
  "dde23",
  "ddeget",
  "ddensd",
  "ddesd",
  "ddeset",
  "decomposition",
  "degree",
  "delaunayTriangulation",
  "deleteCol",
  "deleteFile",
  "deleteHDU",
  "deleteKey",
  "deleteproperty",
  "deleteRecord",
  "deleteRows",
  "delevent",
  "DelimitedTextImportOptions",
  "delsample",
  "delsamplefromcollection",
  "depdir",
  "depfun",
  "details",
  "detectImportOptions",
  "deval",
  "dfsearch",
  "digraph",
  "discretize",
  "dissect",
  "distances",
  "docsearch",
  "dragrect",
  "duration",
  "dynamicprops",
  "echodemo",
  "edgeAttachments",
  "edges",
  "empty",
  "enableservice",
  "enumeration",
  "eraseBetween",
  "eventlisteners",
  "events",
  "exceltime",
  "Execute",
  "export2wsdlg",
  "exportsetupdlg",
  "extractAfter",
  "extractBefore",
  "extractBetween",
  "faceNormal",
  "faceNormals",
  "fcontour",
  "featureEdges",
  "Feval",
  "fewerbins",
  "figurepalette",
  "FileDatastore",
  "filemarker",
  "fileMode",
  "fileName",
  "filloutliers",
  "fimplicit",
  "fimplicit3",
  "findedge",
  "findgroups",
  "findnode",
  "findprop",
  "fitsdisp",
  "fitsinfo",
  "fitsread",
  "fitswrite",
  "FixedWidthImportOptions",
  "flipedge",
  "flow",
  "fmesh",
  "fplot3",
  "freeBoundary",
  "freqspace",
  "fsurf",
  "FunctionTestCase",
  "functiontests",
  "funm",
  "gather",
  "gcmr",
  "geobubble",
  "geolimits",
  "getabstime",
  "getAColParms",
  "getaudiodata",
  "getBColParms",
  "GetCharArray",
  "getColName",
  "getColType",
  "getConstantValue",
  "getdatasamples",
  "getdatasamplesize",
  "getEqColType",
  "getFileFormats",
  "GetFullMatrix",
  "getHdrSpace",
  "getHDUnum",
  "getHDUtype",
  "getImgSize",
  "getImgType",
  "getinterpmethod",
  "getnext",
  "getNumCols",
  "getNumHDUs",
  "getNumInputs",
  "getNumOutputs",
  "getNumRows",
  "getOpenFiles",
  "getpoints",
  "getProfiles",
  "getqualitydesc",
  "getReport",
  "getsamples",
  "getsampleusingtime",
  "gettimeseriesnames",
  "gettsafteratevent",
  "gettsafterevent",
  "gettsatevent",
  "gettsbeforeatevent",
  "gettsbeforeevent",
  "gettsbetweenevents",
  "GetVariable",
  "getvaropts",
  "getVersion",
  "GetWorkspaceData",
  "gobjects",
  "graph",
  "GraphPlot",
  "graymon",
  "griddedInterpolant",
  "guide",
  "h5create",
  "h5disp",
  "h5info",
  "h5read",
  "h5readatt",
  "h5write",
  "h5writeatt",
  "handle",
  "hasdata",
  "hasFrame",
  "hasnext",
  "hdf5info",
  "hdf5read",
  "hdf5write",
  "hdfan",
  "hdfdf24",
  "hdfdfr8",
  "hdfh",
  "hdfhd",
  "hdfhe",
  "hdfhx",
  "hdfinfo",
  "hdfml",
  "hdfpt",
  "hdfread",
  "hdftool",
  "hdfv",
  "hdfvf",
  "hdfvh",
  "hdfvs",
  "head",
  "heatmap",
  "helpbrowser",
  "helpdesk",
  "helpwin",
  "hgexport",
  "hgsetget",
  "highlight",
  "histcounts",
  "histcounts2",
  "histogram",
  "histogram2",
  "hms",
  "holes",
  "hour",
  "idealfilter",
  "im2java",
  "ImageDatastore",
  "imapprox",
  "imgCompress",
  "import",
  "imresize",
  "incenter",
  "incenters",
  "incidence",
  "indegree",
  "inmem",
  "innerjoin",
  "inOutStatus",
  "insertAfter",
  "insertATbl",
  "insertBefore",
  "insertBTbl",
  "insertCol",
  "insertImg",
  "insertRows",
  "inShape",
  "inspect",
  "instrcallback",
  "instrfind",
  "instrfindall",
  "interfaces",
  "interp1q",
  "interpstreamspeed",
  "invoke",
  "isaUnderlying",
  "isbetween",
  "iscategory",
  "ischange",
  "iscom",
  "isCompressedImg",
  "isConnected",
  "isdag",
  "isdst",
  "isEdge",
  "isenum",
  "isevent",
  "ishole",
  "isIllConditioned",
  "isinterface",
  "isinterior",
  "isInterior",
  "isisomorphic",
  "islocalmax",
  "islocalmin",
  "isLocked",
  "isomorphism",
  "isordinal",
  "isprotected",
  "isregular",
  "issimplified",
  "issortedrows",
  "isStringScalar",
  "istall",
  "istimetable",
  "isundefined",
  "isvalid",
  "isweekend",
  "javaMethodEDT",
  "javaObjectEDT",
  "join",
  "juliandate",
  "labeledge",
  "labelnode",
  "lag",
  "laplacian",
  "last",
  "layout",
  "ldl",
  "libfunctions",
  "libfunctionsview",
  "libisloaded",
  "libpointer",
  "libstruct",
  "linkdata",
  "loadlibrary",
  "lsqminnorm",
  "lsqr",
  "makehgtform",
  "mapreduce",
  "mapreducer",
  "matfile",
  "maxflow",
  "MaximizeCommandWindow",
  "maxk",
  "memmapfile",
  "MemoizedFunction",
  "mergecats",
  "meta.abstractDetails",
  "meta.DynamicProperty",
  "meta.EnumeratedValue",
  "meta.MetaData",
  "methodsview",
  "MException",
  "milliseconds",
  "MinimizeCommandWindow",
  "mink",
  "minres",
  "minspantree",
  "minute",
  "mlint",
  "mlintrpt",
  "mmfileinfo",
  "month",
  "morebins",
  "movAbsHDU",
  "move",
  "movie2avi",
  "movNamHDU",
  "movRelHDU",
  "mput",
  "multibandread",
  "multibandwrite",
  "nccreate",
  "ncdisp",
  "ncinfo",
  "ncread",
  "ncreadatt",
  "ncwrite",
  "ncwriteatt",
  "ncwriteschema",
  "nearest",
  "nearestNeighbor",
  "neighbors",
  "netcdf",
  "noanimate",
  "notebook",
  "notify",
  "nsidedpoly",
  "num2ruler",
  "numArgumentsFromSubscript",
  "numboundaries",
  "numedges",
  "numnodes",
  "numpartitions",
  "numRegions",
  "numsides",
  "ode113",
  "ode23t",
  "ode23tb",
  "odextend",
  "openFile",
  "opengl",
  "outdegree",
  "outerjoin",
  "pad",
  "pagesetupdlg",
  "parse",
  "parseSoapResponse",
  "partition",
  "parula",
  "path2rc",
  "pathtool",
  "pcode",
  "pdepe",
  "pdeval",
  "perimeter",
  "plotbrowser",
  "plotedit",
  "plottools",
  "pointLocation",
  "polaraxes",
  "polarhistogram",
  "polarplot",
  "polarscatter",
  "polybuffer",
  "polyshape",
  "posixtime",
  "predecessors",
  "preview",
  "printdlg",
  "printopt",
  "printpreview",
  "profsave",
  "propedit",
  "propertyeditor",
  "PutCharArray",
  "PutFullMatrix",
  "PutWorkspaceData",
  "pyargs",
  "pyversion",
  "quarter",
  "Quit",
  "RandStream",
  "rbbox",
  "readall",
  "readasync",
  "readATblHdr",
  "readBTblHdr",
  "readCard",
  "readCol",
  "readFrame",
  "readimage",
  "readImg",
  "readKey",
  "readKeyCmplx",
  "readKeyDbl",
  "readKeyLongLong",
  "readKeyLongStr",
  "readKeyUnit",
  "readRecord",
  "readtable",
  "recordblocking",
  "regions",
  "registerevent",
  "regmatlabserver",
  "release",
  "Remove",
  "RemoveAll",
  "removecats",
  "removets",
  "renamecats",
  "reordercats",
  "reordernodes",
  "replace",
  "replaceBetween",
  "resample",
  "retime",
  "reverse",
  "rlim",
  "rmboundary",
  "rmedge",
  "rmholes",
  "rmnode",
  "rmslivers",
  "rowfun",
  "rtickangle",
  "rtickformat",
  "rticklabels",
  "ruler2num",
  "runperf",
  "scale",
  "scatteredInterpolant",
  "scroll",
  "second",
  "selectmoveresize",
  "sendmail",
  "serial",
  "serialbreak",
  "seriallist",
  "setabstime",
  "setBscale",
  "setcats",
  "setCompressionType",
  "setHCompScale",
  "setHCompSmooth",
  "setinterpmethod",
  "setpixelposition",
  "setTileDim",
  "settimeseriesnames",
  "setTscale",
  "setuniformtime",
  "setvaropts",
  "setvartype",
  "sheetnames",
  "shortestpath",
  "shortestpathtree",
  "showplottool",
  "shuffle",
  "simplify",
  "smoothdata",
  "snapnow",
  "sortboundaries",
  "sortregions",
  "sortx",
  "sorty",
  "split",
  "splitapply",
  "splitEachLabel",
  "splitlines",
  "SpreadsheetDatastore",
  "SpreadsheetImportOptions",
  "ss2tf",
  "stack",
  "standardizeMissing",
  "stats",
  "step",
  "stopasync",
  "str2mat",
  "streamparticles",
  "streamslice",
  "string",
  "strings",
  "strip",
  "strlength",
  "struct2table",
  "subgraph",
  "subtract",
  "subvolume",
  "successors",
  "summary",
  "superclasses",
  "support",
  "supportPackageInstaller",
  "surf2patch",
  "surfaceArea",
  "symmlq",
  "synchronize",
  "syntax",
  "table2timetable",
  "TabularTextDatastore",
  "tail",
  "tall",
  "TallDatastore",
  "tallrng",
  "targetupdater",
  "tcpclient",
  "Test",
  "TestResult",
  "testsuite",
  "texlabel",
  "textwrap",
  "tfqmr",
  "thetalim",
  "thetatickformat",
  "thetaticklabels",
  "throw",
  "throwAsCaller",
  "Tiff",
  "timeit",
  "timeofday",
  "timer",
  "timerange",
  "timeseries",
  "timetable",
  "timetable2table",
  "timezones",
  "todatenum",
  "toolboxdir",
  "topkrows",
  "toposort",
  "transclosure",
  "translate",
  "transreduction",
  "triangulation",
  "TriRep",
  "TriScatteredInterp",
  "tscollection",
  "tzoffset",
  "uialert",
  "uiaxes",
  "uibutton",
  "uicheckbox",
  "uiconfirm",
  "uidropdown",
  "uieditfield",
  "uigauge",
  "uigetpref",
  "uiimport",
  "uiknob",
  "uilabel",
  "uilamp",
  "uilistbox",
  "uiopen",
  "uiradiobutton",
  "uisave",
  "uisetcolor",
  "uisetpref",
  "uislider",
  "uispinner",
  "uistack",
  "uiswitch",
  "uitab",
  "uitabgroup",
  "uitextarea",
  "uitogglebutton",
  "uitree",
  "uitreenode",
  "undocheckout",
  "unloadlibrary",
  "unmesh",
  "unregisterallevents",
  "unregisterevent",
  "unstack",
  "upgradePreviouslyInstalledSupportPackages",
  "userpath",
  "ValueIterator",
  "varfun",
  "verctrl",
  "vertexAttachments",
  "vertexNormal",
  "VideoReader",
  "VideoWriter",
  "viewmtx",
  "visdiff",
  "volume",
  "volumebounds",
  "voronoiDiagram",
  "websave",
  "week",
  "whatsnew",
  "winopen",
  "withtol",
  "wordcloud",
  "write",
  "writeChecksum",
  "writeCol",
  "writeComment",
  "writeDate",
  "writeHistory",
  "writeImg",
  "writeKey",
  "writeKeyUnit",
  "writetable",
  "writeVideo",
  "xmlread",
  "xmlwrite",
  "xslt",
  "xtickformat",
  "year",
  "ymd",
  "ytickformat",
  "yyaxis",
  "yyyymmdd",
  "ztickformat",
  };

  rlist = list;

endfunction


%!test
%! str = __unimplemented__ ("no_name_function");
%! assert (isempty (str));

%!test
%! str = __unimplemented__ ("matlabrc");
%! assert (regexp (str, ".matlabrc. is not implemented\.  Octave uses the file .\.octaverc..instead\."));

%!test
%! str = __unimplemented__ ("MException");
%! assert (regexp (str, "The .MException. function is not yet implemented in Octave"));
