%%HP: T(3)A(D)F(.);
@
@  findobj - General purpose routine to search for an object within the HP48SX
@              memory, beginning at a directory
@  input:    object_name|common_string   object_type   starting_directory_path sflag
@      object_name | common_string : if it is a 'name', then search only for that name
@                                                 : if it is a string (type 2), then will match for name(s) which
@                                                   contain the string in their names 
@
@      object_type
@        : 1    (5 - HP type) =  list
@        : 2    (8)               =  program
@        : 3    (11)             =  graphics object
@        : 4    (15)             =  directory
@      
@      starting_directory_path : starting path to search
@
@      sflag : 1 - search all sub-directories
@                0 - search only the directory specifed by starting_directory_path
@
@
@  output:  {'name1' 'name2' ...'nameN'}  { {path1} {path2}... {pathN} }
@              if object(s) are found.
@              {} {} if no object is found.
@
@  
@  Note: Only  LIST, PROGRAM, GROB, and DIR type objects can be search
@  
@

\<< RCLF PATH  {} {} {} {} \-> oname otype opath sflag    fs adir  vlst dlst mlst plst \<<
   {5 8 11 15} otype GET 'otype' STO
   1 CF opath 1 \->LIST 'dlst' STO 
   IF oname TYPE 2 == THEN 2 SF ELSE 2 CF END
   WHILE 1 FC? REPEAT
      dlst 1 GET DUP 'opath' STO EVAL otype TVARS 'vlst' STO
      dlst 2 dlst SIZE  SUB 'dlst' STO
      IF vlst {} \=/ THEN
        1 vlst SIZE FOR i
          IF 2 FC? THEN
            IF vlst i GET oname SAME  THEN
              mlst vlst i GET + 'mlst' STO
              plst opath 1 \->LIST + 'plst' STO
              vlst SIZE 1 +  'i' STO
            END
          ELSE
            IF vlst i GET \->STR DUP SIZE 1 - 2 SWAP SUB oname POS  THEN
              mlst vlst i GET + 'mlst' STO
              plst opath 1 \->LIST + 'plst' STO
            END 
          END
        NEXT
      END
      IF sflag NOT THEN 1 SF END
      IF 1 FC? THEN
        15 TVARS 'vlst' STO
        IF vlst {} \=/ THEN
           dlst
           1 vlst SIZE FOR i
              opath vlst i GET + 1 \->LIST +
           NEXT
           'dlst' STO
        END
        IF dlst {} == THEN
          1 SF 
        END
      END
   END
   adir EVAL fs STOF mlst plst
\>> \>>





