// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
// Copyright (C) INRIA
//
// This file must be used under the terms of the CeCILL.
// This source file is licensed as described in the file COPYING, which
// you should have received as part of this distribution.  The terms
// are also available at
// http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt

function L=dir(str)

    mask = int32(61440);
    dirtype = 16384;

    if argn(2) == 1 then
        if type(str) <> 10 then
            error(999, msprintf(_("%s: Wrong type for input argument #%d: A string expected.\n"), "dir", 1));
        end

        files = listfiles(str);
        basepath = str;
    else
        files = listfiles();
        basepath = "";
    end

    n = size(files, "*");

    if n==0 then
        files = [];
        dt    = [];
        bytes = [];
        isd   = [];
    else
        if getos() == "Windows" then
            [tmp,k] = gsort(convstr(files, "l"), "lr", "i")
            files = files(k)
        else
            files = gsort(files, "lr", "i");
        end

        dt = zeros(n, 1);
        bytes = zeros(n, 1);
        isd(n, 1) = %f;

        for k=1:n
            if (basepath == "") then
                [x,ierr] = fileinfo(files(k));
            else
                [x,ierr] = fileinfo(basepath + "/" + files(k));
            end

            if x == [] & ierr== -1 then
                [x,ierr] = fileinfo(files(k));
            end

            if x <> [] then
                dt(k)    = x(6);
                bytes(k) = x(1);
                isd(k)   = (double(int32(x(2)) & mask) == dirtype);
            end
        end //for
    end //if n==0

    L = tlist(["dir", "name", "date", "bytes", "isdir"], files, dt, bytes, isd);
endfunction