%%HP: T(3)A(D)F(.);
@  getobj2 - General routine to select an object of the following types from the HP48 SX memory.
@
@  input : tobj   sdpath 
@ 
@  input : 
@      tobj   : type of object to display and select
@              : 0    display all objects
@              : 1    (5 - HP type) =  list
@              : 2    (8)              =  program
@              : 3    (11)             =  graphics object
@              : 4    (15)             =  directory
@             Note: if tobj = 0, there will be no returned value, this option is for roaming and viewing only.
@      sdpath : the starting directory path
@
@  output : directory path of the object
@              if no object is found in or if user choose FINISH/CANCEL, {} is returned
@              Note: if tobj = 0 nothing is returned
@
\<< RCLF {HOME URPLUI} {"DATA LIST" "PROGRAM" "GROB" "DIR" } {5 8 11 15} {} 0  0 0  0  

GROB 56 19 FFFFFFFFFFFFFF1000000000000810220000000008103AB8E6A8A348182B8DAAA822A814AABAA648A3A8126A88AA4090A8112AB8EA409B48100000000000081000000000087810E00000000488101D944730023918845D61500A091474D557300A0912845541500239110D55475514881000000000087810000000000008FFFFFFFFFFFFFF

\-> 
   otype opath        fs udir odsp onum vlst iv otype1 k g mroamg \<<
 
   IF otype THEN onum otype GET 'otype1' STO END

   \<< \-> ddir lst ix n \<< 
        CASE
         n 1 == THEN
          PICT {# 71d,# 11d} {# 126d,# 29d} SUB 'ppg1' STO
          PICT {# 71d,# 37d} {# 117d,# 59d} SUB 'ppg2' STO
         END

         n 2 == THEN 
          ddir 1 GET  ddir 2 GET 0 \-> odir udir bg \<<
          IF odir EVAL lst ix GET TYPE 6 == THEN
             IF udir EVAL getobj2.ini 1 GET THEN
               PICT {# 71d,# 11d} # 56d # 19d BLANK REPL
               71 11 56 1 
               odir EVAL lst ix GET VTYPE 1 + 
               {"REAL NUM" "COMPLX NUM" "STRING" "REAL ARRAY" "COMPLX ARRAY"
                "LIST" " " " " "PROGRAM" "ALGEBRAIC OBJ" "BINARY INT" "GRAPHIC OBJ"
                "TAGGED OBJ" "UNIT OBJ" " " "DIRECTORY"  " "  " "  " "  " "} SWAP GET
                1 1 0 udir EVAL MORE48D DROP
               71 21 56 1 odir EVAL lst ix GET BYTES \->STR " BYTES" + SWAP DROP
               1 1 0 udir EVAL MORE48D DROP
             END 
             IF getobj2.ini 2 GET THEN
               PICT {# 71d,# 37d} # 47d # 23d BLANK REPL
               {# 71d,# 37d} {# 117d,# 59d} BOX
               IF odir EVAL lst ix GET VTYPE 11 == THEN
                 PICT {#73d #39d} lst ix GET
                 EVAL DUP SIZE \-> dx dy \<< 
                   IF dy B\->R 19 > THEN {#0 #0} dx #18d 2 \->LIST SUB DUP SIZE 'dy' STO 'dx' STO END 
                   IF dx B\->R 43 > THEN {#0 #0} #42 dy 2 \->LIST SUB END 
                 REPL \>>
               ELSE
                 72 38 45 3
                 IF lst ix GET BYTES SWAP DROP 500 \<= THEN
                    IF lst ix GET VTYPE 1 + {1 1 1 1 1 1 0 0 1 1 1 0 1 1 0 0 0 0 0 0} SWAP  GET THEN
                        {# 73d,# 39d} 0 1 udir EVAL BUSY  'bg' STO
                        odir EVAL lst ix GET RCL \->STR
                        {# 73d,# 39d} bg 0 udir EVAL BUSY
                    ELSE
                       "OBJ NOT DISPLAYED"
                    END
                 ELSE
                    "OBJ TOO BIG"
                 END
                 0 1 0 udir EVAL MORE48D DROP
               END
             END
          ELSE
             udir EVAL 
             PICT {#71d #11d} ppg1 REPL
             PICT {#71d #37d} ppg2 REPL             
          END
          \>>
         END 

         n 3 == THEN 
           PICT {#71d #11d} ppg1 REPL
           PICT {#71d #37d} ppg2 REPL 
         END
        END
   \>> \>> 'pp' STO

   IF 'getobj2.ini' VTYPE -1 == THEN { 1 1 } 'getobj2.ini' STO END

   PICT {#2d #1d} {#128d #62d} SUB 'g' STO
   PICT {# 2d,# 1d} # 127d # 62d BLANK REPL
   {# 2d,# 1d} {# 128d,# 62d} BOX
@   x  y  xd  yn ds bflag dflag cflag
   4 2 123 1 opath \->STR 0 1 0 MORE48D DROP
@   c ix gb pdir par prg   x y xs yn t l nlist 
   2 0 0  {} 0 0  -4 11 65 5 IF otype THEN "SELECT " odsp otype GET + ELSE " " END 0 
   {"MOVE TO PREV DIR" "FINISH/CANCEL"} 
   IF otype1 15 == THEN {"SELECT THIS DIR"} + END
   IF otype1 THEN opath EVAL 15 TVARS + END
   IF otype1 15 \=/ THEN
      opath EVAL  IF otype1 THEN otype1 TVARS  ELSE VARS END +
   END  udir EVAL  POPM DROP
   PICT {#71d #11d} mroamg REPL
   PICT {#71d #31d} "OBJ PREVIEW:" 1 \->GROB REPL
   {# 71d,# 37d} {# 117d,# 59d} BOX

   2 CF 4 CF
   WHILE 2 FC? REPEAT
     PICT {#119d #52d} CMDGPIC REPL
     DO UNTIL KEY END 'k' STO
     CASE
@    v - select/view
       k 61 == THEN
          PICT {# 119d,# 52d} # 8d # 8d BLANK REPL
          1 CF 70 .1 BEEP 4 SF
          WHILE 1 FC? REPEAT
             PICT {# 4d,# 11d} # 66d # 49d BLANK REPL
             5 0 0 udir opath udir 2 \->LIST 'pp' 
             -4 11 65 5   IF otype THEN "SELECT " odsp otype GET + ELSE " " END  0
             {"MOVE TO PREV DIR" "FINISH/CANCEL"} IF otype1 15 == THEN {"SELECT THIS DIR"} + END
             IF otype1 THEN opath EVAL 15 TVARS + END
             IF otype1 15 \=/ THEN
                opath EVAL IF otype1 THEN otype1 TVARS  ELSE VARS END +
             END 'vlst' STO udir EVAL vlst POPM
             'iv' STO DROP 3 CF
             IF iv 1 == THEN 
                opath EVAL UPDIR PATH 'opath' STO 3 SF udir EVAL
             ELSE
                IF iv 3 ==  otype1 15 == AND THEN
                  1 SF
                ELSE
                  IF iv 2 ==  THEN
                     1 SF
                  ELSE
                    IF opath EVAL vlst iv GET VTYPE 15 == THEN
                       opath vlst iv GET 1 \->LIST + 'opath' STO 3 SF
                    ELSE
                       1 SF
                    END
                    udir EVAL
                  END
                END
             END
             IF 3 FS? THEN 4 2 123 1 opath \->STR 0 1 0 MORE48D DROP END
          END
       END

@    p - GETOBJ2 preference
       k 44 == THEN 70 .1 BEEP
          PICT {# 119d,# 52d} # 8d # 8d BLANK REPL
@       s t dval1  dval2  f
          {"SHOW OBJECT DETAILS" "PREVIEW OBJECTS"} "PREFERENCE"
           0 getobj2.ini 2 CHOOSES DROP 'getobj2.ini' STO
       END
@    + - command help
       k 95 == THEN 70 .1 BEEP
         PICT {# 119d,# 52d} # 8d # 8d BLANK REPL
         {"P" "V" "X" "+"}
         {"SET PREFERENCE" "VIEW/SELECT" "EXIT" "HELP"} CMDHELP
       END
@    x - exit GETOBJ2
       k 63 == THEN
        IF otype NOT   otype 4 FS? AND  OR THEN
         PICT {# 119d,# 52d} # 8d # 8d BLANK REPL
         2 SF 70 .1 BEEP
         IF  otype THEN
            IF iv 2 == THEN
                {} 
            ELSE
                IF iv 3 == otype1 15 == AND THEN
                   opath
                ELSE
                   opath vlst iv GET 1 \->LIST + 
                END
            END 
         END
        END
       END
     END
   END

      
   udir EVAL fs STOF 'ppg1' PURGE 'ppg2' PURGE 'pp' PURGE 
   PICT {#2d #1d} g REPL
   \>>
\>>          
