home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 8 Other / 08-Other.zip / HPTDEM.ZIP / HRECV.RXC < prev    next >
Text File  |  1992-03-17  |  9KB  |  217 lines

  1. /* HRECV.CMD    (c) Copyright HeteroGenius Systems Ltd 1991     */
  2. CALL RXFUNCADD "DISPLAY","HRXDLL","HRXDSPL"
  3. CALL RXFUNCADD "TBDISPL","HRXDLL","HRXDSPT"
  4. CALL RXFUNCADD "HRXVGET","HRXDLL","HRXVPRF"
  5. CALL RXFUNCADD "HRXVPUT","HRXDLL","HRXVPRF"
  6. CALL RXFUNCADD "HRXPAUSE","HRXDLL","HRXPAUSE"
  7. CALL RXFUNCADD "HAPLIST","HDPDDM","HDPFLRQ"
  8. CALL RXFUNCADD "HAPRECV","HDPDDM","HDPFTSR"
  9. /* Get the profile variables */
  10. profvars = "hostlu recvdsn lfname fclass repopt zscfl"
  11. CALL HRXVGET "HPTSO",profvars
  12. /* Get the LU name override */
  13. ARG lu .
  14. IF lu <> '' THEN hostlu = lu
  15. DO m=1 BY 0
  16.    /* Prompt user for LU name and file mask */
  17.    msg = ''
  18.    cursor = "RECVDSN"
  19.    DO UNTIL msg = ''
  20.       CALL DISPLAY "HBPRCVP1", cursor, msg
  21.       IF result = "END" THEN SIGNAL finish
  22.       IF result <> "ENTER" THEN EXIT 12
  23.       msg = ''
  24.       IF hostlu = ''  THEN DO
  25.          msg = 'ENTER HOST NAME'
  26.          cursor = "HOSTLU"; ITERATE; END
  27.       IF recvdsn = '' THEN DO
  28.          msg = 'ENTER HOST DATASET NAME'
  29.          cursor = "RECVDSN"; ITERATE; END
  30.    END /* DO */
  31.    flrqname = recvdsn;
  32.    DO w=1 BY 0
  33.       /* Obtain a list of files or members from the host system */
  34.       tempfile = aloctemp()
  35.       CALL HAPLIST hostlu,tempfile,flrqname
  36.       IF result <> 0 THEN DO
  37.          ADDRESS CMD '@DEL' tempfile; CALL HRXPAUSE "***";ITERATE m;END
  38.       /* Read the list into a table and close the file */
  39.       DO k = 1 WHILE LINES(tempfile) > 0
  40.          PARSE VALUE LINEIN(tempfile) WITH hdsn.k '00'X hddata.k
  41.       END
  42.       CALL LINEOUT tempfile
  43.       ADDRESS CMD '@DEL' tempfile
  44.       count = k - 1
  45.       /* Display the table of file or member names */
  46.       PARSE VAR flrqname flrqdsn '(' flrqmem ')'
  47.       IF flrqmem = '' THEN tbpanel = "HBPRCVT1"
  48.       ELSE tbpanel = "HBPRCVT2"
  49.       tbselect. = ''; caption = flrqname 'at' hostlu
  50.       next = 1; msg = ''; pause = 'N'
  51.       DO FOREVER
  52.          IF pause = 'Y' THEN DO; CALL HRXPAUSE "***"; pause = 'N'; END
  53.          CALL TBDISPL tbpanel,count,next,,msg,caption; msg = ''
  54.          IF result = "END" THEN LEAVE w
  55.          IF result <> "ENTER" THEN EXIT 12
  56.          prompt = 'Y'
  57.          firstsel = 0
  58.          /* Search the array for selected files or members */
  59.          DO k = 1 TO count
  60.             PARSE VALUE hddata.k WITH dsorg .
  61.             pds = ( dsorg='PO' | dsorg='PF-SRC' )
  62.             IF tbselect.k = 'S' THEN DO
  63.                next = k
  64.                IF firstsel = 0 THEN firstsel = k
  65.                SELECT
  66.                WHEN dsorg = 'PCDIR' THEN flrqname = hdsn.k'\*.*'
  67.                WHEN dsorg = 'PO' | LEFT(dsorg,2) = 'PF' | dsorg = 'LF'
  68.                   THEN flrqname = hdsn.k'(*)'
  69.                OTHERWISE
  70.                   msg = "'S' IS NOT VALID FOR TYPE" dsorg; LEAVE k
  71.                END /* SELECT */
  72.                ITERATE w
  73.             END
  74.             IF tbselect.k = 'R' THEN DO
  75.                next = k
  76.                IF firstsel = 0 THEN firstsel = k
  77.                IF flrqmem = '' THEN rfname = hdsn.k
  78.                ELSE rfname = flrqdsn'('hdsn.k')'
  79.                IF pds & prompt = 'N' THEN
  80.                   IF POS('&MEMBER',TRANSLATE(lfname))=0 THEN
  81.                      prompt = 'Y'
  82.                IF prompt = 'Y' & pause='Y' THEN DO
  83.                   CALL HRXPAUSE "***"; pause = 'N'; END
  84.                cursor = "LFNAME"
  85.                /* Prompt the user for the local file name */
  86.                IF prompt = 'Y' THEN DO UNTIL msg = ''
  87.                   CALL DISPLAY "HBPRCVP2",cursor,msg; msg = ''
  88.                   IF result = "END" THEN DO
  89.                      tbselect.k = ''; LEAVE k; END
  90.                   IF result <> "ENTER" THEN EXIT 12
  91.                   IF prompt <> 'Y' & prompt <> 'N' THEN DO
  92.                      msg = 'INVALID PROMPT VALUE. SPECIFY Y OR N'
  93.                      cursor = "PROMPT"; ITERATE; END
  94.                   IF lfname = '' THEN DO
  95.                      msg = 'ENTER FILE NAME'
  96.                      cursor = "LFNAME"; ITERATE; END
  97.                   IF pds THEN IF POS('&MEMBER',TRANSLATE(lfname))=0
  98.                   THEN DO
  99.                      msg = 'FILE NAME MUST CONTAIN &MEMBER'
  100.                      cursor = "LFNAME"; ITERATE; END
  101.                   lfile = fnbuild(lfname,rfname)
  102.                   IF VERIFY(lfile,'<>|&"','M') <> 0 THEN DO
  103.                      msg = 'INVALID CHARACTERS IN FILE NAME'
  104.                      cursor = "LFNAME"; ITERATE; END
  105.                   x = TRANSLATE(LEFT(fclass,1))
  106.                   SELECT
  107.                   WHEN x = 'T' THEN fclass = 'TEXT'
  108.                   WHEN x = 'B' THEN fclass = 'BINARY'
  109.                   OTHERWISE
  110.                      msg = 'INVALID FILE CLASS'
  111.                      cursor = "FCLASS"; ITERATE
  112.                   END
  113.                   x = TRANSLATE(LEFT(repopt,1))
  114.                   SELECT
  115.                   WHEN x = 'R' THEN repopt = 'REPL'
  116.                   WHEN x = 'N' THEN repopt = 'NOREPL'
  117.                   WHEN x = 'L' THEN repopt = 'LATER'
  118.                   OTHERWISE
  119.                      msg = 'INVALID REPLACE OPTION'
  120.                      cursor = "REPOPT"; ITERATE
  121.                   END
  122.                END /* IF */
  123.                ELSE lfile = fnbuild(lfname,rfname)
  124.                IF pds THEN
  125.                   /* Receive all members from the host system */
  126.                   CALL recvpds hostlu,lfname,rfname,fclass,repopt
  127.                ELSE DO
  128.                   /* Retrieve one file or member from the host */
  129.                   SAY "HAPRECV" hostlu lfile rfname fclass repopt
  130.                   CALL HAPRECV hostlu,lfile,rfname,fclass,repopt
  131.                END
  132.                pause = 'Y'
  133.                IF result <> 0 & result <> 4 THEN LEAVE k
  134.                tbselect.k = '*'
  135.             END /* IF */
  136.          END k
  137.          IF k > count THEN next = firstsel
  138.       END /* DO FOREVER */
  139.    END w
  140. END m
  141. finish:
  142. CALL HRXVPUT "HPTSO",profvars
  143. EXIT 0
  144. /* Procedure to receive all members of host dataset */
  145. recvpds: PROCEDURE
  146.    PARSE ARG hostlu,lfname,pdsname,fclass,repopt
  147.    /* Obtain list of members from the host system */
  148.    tempfile = aloctemp()
  149.    CALL HAPLIST hostlu,tempfile,pdsname'(*)'
  150.    IF result <> 0 THEN DO
  151.       ADDRESS CMD '@DEL' tempfile; RETURN result; END
  152.    /* Read the list into a table and close the file */
  153.    DO k = 1 WHILE LINES(tempfile) > 0
  154.       PARSE VALUE LINEIN(tempfile) WITH hmem.k '00'X .
  155.    END
  156.    CALL LINEOUT tempfile
  157.    ADDRESS CMD '@DEL' tempfile
  158.    count = k - 1
  159.    /* Retrieve each member from the host dataset */
  160.    DO k = 1 TO count
  161.       rfname = pdsname'('hmem.k')'
  162.       lfile = fnbuild(lfname,rfname)
  163.       SAY "HAPRECV" hostlu lfile rfname fclass repopt
  164.       ft = HAPRECV(hostlu,lfile,rfname,fclass,repopt)
  165.       IF ft <> 0 & ft <> 4 THEN RETURN ft
  166.    END
  167.    RETURN 0
  168. /* Procedure to construct local filename from remote filename */
  169. fnbuild: PROCEDURE
  170.    PARSE ARG lfname,rfname
  171.    PARSE VAR rfname dsname '(' member ')'
  172.    SELECT
  173.    WHEN POS('\',dsname) <> 0 THEN DO
  174.       drive = FILESPEC('D',dsname); path = FILESPEC('P',dsname)
  175.       PARSE VAR path '\' qual1 '\' qual2 '\' qual3 '\' qual4 '\',
  176.           qual5 '\' qual6 '\' qual7 '\' qual8 '\' qual9 '\'
  177.       PARSE VALUE FILESPEC('N',dsname) WITH fname '.' ftype
  178.       END
  179.    WHEN POS('/',dsname) <> 0 THEN DO
  180.       PARSE VAR dsname qual1 '/' qual2 '' qual3 qual4 qual5,
  181.           qual6 qual7 qual8 qual9
  182.       drive = ''; path= ''; fname = qual2; ftype = ''
  183.       END
  184.    OTHERWISE
  185.       PARSE VAR dsname qual1 '.' qual2 '.' qual3 '.' qual4 '.',
  186.           qual5 '.' qual6 '.' qual7 '.' qual8 '.' qual9 '.'
  187.       drive = ''; path = ''; fname = ''; ftype = ''
  188.    END
  189.    lfile = replace(lfname,"&QUAL1",qual1)
  190.    lfile = replace(lfile,"&QUAL2",qual2)
  191.    lfile = replace(lfile,"&QUAL3",qual3)
  192.    lfile = replace(lfile,"&QUAL4",qual4)
  193.    lfile = replace(lfile,"&QUAL5",qual5)
  194.    lfile = replace(lfile,"&QUAL6",qual6)
  195.    lfile = replace(lfile,"&QUAL7",qual7)
  196.    lfile = replace(lfile,"&QUAL8",qual8)
  197.    lfile = replace(lfile,"&QUAL9",qual9)
  198.    lfile = replace(lfile,"&MEMBER",member)
  199.    lfile = replace(lfile,"&DRIVE",drive)
  200.    lfile = replace(lfile,"&PATH",path)
  201.    lfile = replace(lfile,"&FNAME",fname)
  202.    lfile = replace(lfile,"&FTYPE",ftype)
  203.    RETURN lfile
  204. /* Procedure to replace one substring by another */
  205. replace: PROCEDURE
  206.    PARSE ARG source,string1,string2
  207.    PARSE UPPER ARG usource,ustring1
  208.    i = POS(ustring1,usource)
  209.    IF i = 0 THEN RETURN source
  210.    RETURN INSERT(string2,DELSTR(source,i,LENGTH(string1)),i-1)
  211. /* Procedure to allocate a temporary file name */
  212. aloctemp: PROCEDURE
  213.    DO UNTIL STREAM(tempfile,'C','QUERY EXISTS') = ''
  214.       tempfile = 'ZZZ' || TIME('S') || '.R' || SUBSTR(TIME('L'),10,2)
  215.    END
  216.    RETURN tempfile
  217.