1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
#define XERR
#include "builtin.ih"
// This function converts the last pushed string into a listvariable
// holding expanded filenames. On return d_reg contains the
// (alphabetically, case-sensitively sorted) list.
//
// The stack is organized as follows:
//
// 1: without older/younger
//
// stack[2] : Opcode::hlt
// stack[3] : filemask value (file type)
// stack[4] : pattern
//
// 2: with older/younger
//
// stack[2] : Opcode::older or Opcode::younger
// stack[3] : filemask value
// stack[4] : pattern
// stack[5] : reference filename
//
// filemask values: O_ALL, O_DIR, O_FILE, O_SUBDIR
// Glob Type: ANY, DIRECTORY, REGULAR_FILE, DIRECTORY
// Glob Flags: PERIOD PERIOD PERIOD
// NOMATCH NOMATCH NOMATCH NOMATCH
void Builtin::makeList()
{
Opcodes::Byte selector = as<Opcodes::Byte>(d_stack[2].value());
vector<string> ret;
switch (selector)
{
case Opcodes::younger:
ret = youngerList();
break;
case Opcodes::older:
ret = olderList();
break;
default:
ret = patternList();
break;
}
d_reg = move(ret);
}
|