home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 8 Other / 08-Other.zip / HPTDEM.ZIP / HSEND.RXC < prev    next >
Text File  |  1992-06-22  |  8KB  |  189 lines

  1. /* HSEND.CMD    (c) Copyright HeteroGenius Systems Ltd 1991     */
  2. CALL RXFUNCADD "TBDISPL","HRXDLL","HRXDSPT"
  3. CALL RXFUNCADD "DISPLAY","HRXDLL","HRXDSPL"
  4. CALL RXFUNCADD "HRXQFILE","HRXDLL","HRXQFILE"
  5. CALL RXFUNCADD "HRXPAUSE","HRXDLL","HRXPAUSE"
  6. CALL RXFUNCADD "HRXVGET","HRXDLL","HRXVPRF"
  7. CALL RXFUNCADD "HRXVPUT","HRXDLL","HRXVPRF"
  8. CALL RXFUNCADD "HAPSEND","HDPDDM","HDPFTSR"
  9. /* Get the profile variables */
  10. profvars = "hostlu sfmask senddsn fclass repopt zscfl"
  11. CALL HRXVGET "HPTSO",profvars
  12. oldpath = DIRECTORY()
  13. /* Get the LU name override */
  14. ARG lu .
  15. IF lu <> '' THEN hostlu = lu
  16. msg = ''
  17. DO m=1 BY 0
  18.    /* Prompt the user for file mask */
  19.    cursor = "SFMASK"
  20.    DO UNTIL msg = ''
  21.       CALL DISPLAY "HBPSNDP1",cursor,msg; msg = ''
  22.       IF result = "END" THEN LEAVE m
  23.       IF result <> "ENTER" THEN EXIT 12
  24.       IF sfmask = '' THEN DO
  25.          msg = 'ENTER FILE SPECIFICATION'
  26.          cursor = "SFMASK"; ITERATE; END
  27.    END /* DO */
  28.    pattern = sfmask
  29.    DO w=1 BY 0
  30.       /* Obtain a list of matching files */
  31.       CALL HRXQFILE pattern,"FS" /* sets fsfnum,fspath,fsmaxl,
  32.                 fsfile.k,fssize.k,fslmdate.k,fslmtime.k */
  33.       IF fsfnum = 0 THEN DO
  34.          msg = 'NO MATCHING FILES'; ITERATE m; END
  35.       /* Display the table of file names */
  36.       IF fsmaxl > 12 THEN tbpanel = "HBPSNDT2"
  37.       ELSE tbpanel = "HBPSNDT1"
  38.       pattern = fspath
  39.       path = FILESPEC('D',pattern) || FILESPEC('P',pattern)
  40.       CALL DIRECTORY path
  41.       tbselect. = ''
  42.       next = 1; msg = ''; pause = 'N'
  43.       DO FOREVER
  44.          IF pause = 'Y' THEN DO; CALL HRXPAUSE "***"; pause = 'N'; END
  45.          CALL TBDISPL tbpanel,fsfnum,next,,msg,pattern; msg = ''
  46.          IF result = "END" THEN LEAVE w
  47.          IF result <> "ENTER" THEN EXIT 12
  48.          prompt = 'Y'
  49.          firstsel = 0
  50.          /* Search the array for selected files */
  51.          DO k = 1 TO fsfnum
  52.             IF tbselect.k <> ' ' THEN DO
  53.                next = k
  54.                IF firstsel = 0 THEN firstsel = k
  55.                sendlfn = path || fsfile.k
  56.                subdir = (fssize.k = '<DIR>')
  57.             END
  58.             SELECT
  59.             WHEN tbselect.k = 'S' THEN DO
  60.                IF ¬subdir THEN DO
  61.                   msg = "'S' IS ONLY VALID FOR DIRECTORIES"
  62.                   LEAVE k; END
  63.                pattern = sendlfn || '\*.*'
  64.                ITERATE w
  65.             END /* WHEN tbselect.k = 'S' */
  66.             WHEN tbselect.k = 'J' THEN DO
  67.                IF subdir THEN DO
  68.                   msg = "'J' CANNOT BE USED ON A DIRECTORY"
  69.                   LEAVE k; END
  70.                prompt = 'Y'
  71.                IF pause='Y' THEN DO;CALL HRXPAUSE "***";pause='N';END
  72.                CALL HSBMT sendlfn,,hostlu
  73.                IF result = 0 THEN pause = 'Y'
  74.                IF result <> 0 & result <> 4 THEN DO
  75.                   msg = "SUBMIT FAILED"; pause = 'Y'; LEAVE k; END
  76.                tbselect.k = '*'
  77.             END /* WHEN tbselect.k = 'J' */
  78.             WHEN tbselect.k = 'T' THEN DO
  79.                IF prompt = 'Y' & pause='Y' THEN DO
  80.                   CALL HRXPAUSE "***"; pause = 'N'; END
  81.                cursor = "SENDDSN"
  82.                /* Prompt the user for LU name and host dsname */
  83.                IF prompt = 'Y' THEN DO UNTIL msg = ''
  84.                   CALL DISPLAY "HBPSNDP2",cursor,msg; msg = ''
  85.                   IF result = "END" THEN DO
  86.                      tbselect.k = ''; LEAVE k; END
  87.                   IF result <> "ENTER" THEN EXIT 12
  88.                   IF prompt <> 'Y' & prompt <> 'N' THEN DO
  89.                      msg = 'INVALID PROMPT VALUE. SPECIFY Y OR N'
  90.                      cursor = "PROMPT"; ITERATE; END
  91.                   IF hostlu = ''  THEN DO
  92.                      msg = "ENTER HOST NAME"
  93.                      cursor = "HOSTLU"; ITERATE; END
  94.                   IF senddsn = '' THEN DO
  95.                      msg = "ENTER HOST DATASET NAME"
  96.                      cursor = "SENDDSN"; ITERATE; END
  97.                   rdsname = dsnbuild(sendlfn,senddsn)
  98.                   IF VERIFY(rdsname,'<>|&"','M') <> 0 THEN DO
  99.                      msg = 'INVALID CHARACTERS IN HOST DATASET NAME'
  100.                      cursor = "SENDDSN"; ITERATE; END
  101.                   x = TRANSLATE(LEFT(fclass,1))
  102.                   SELECT
  103.                   WHEN x = 'T' THEN fclass = 'TEXT'
  104.                   WHEN x = 'B' THEN fclass = 'BINARY'
  105.                   OTHERWISE
  106.                      msg = 'INVALID FILE CLASS'
  107.                      cursor = "FCLASS"; ITERATE
  108.                   END
  109.                   x = TRANSLATE(LEFT(repopt,1))
  110.                   SELECT
  111.                   WHEN x = 'R' THEN repopt = 'REPL'
  112.                   WHEN x = 'N' THEN repopt = 'NOREPL'
  113.                   WHEN x = 'L' THEN repopt = 'LATER'
  114.                   OTHERWISE
  115.                      msg = 'INVALID REPLACE OPTION'
  116.                      cursor = "REPOPT"; ITERATE
  117.                   END
  118.                END /* IF */
  119.                ELSE rdsname = dsnbuild(sendlfn,senddsn)
  120.                IF subdir THEN
  121.                   /* Send all files in directory to the host */
  122.                   CALL senddir hostlu,sendlfn,senddsn,fclass,repopt
  123.                ELSE DO
  124.                   /* Send one file to the host */
  125.                   SAY 'HAPSEND' hostlu sendlfn rdsname fclass repopt
  126.                   CALL HAPSEND hostlu,sendlfn,rdsname,fclass,repopt
  127.                END
  128.                pause = 'Y'
  129.                IF result <> 0 & result <> 4 THEN DO
  130.                   msg = "SEND FAILED"; LEAVE k; END
  131.                tbselect.k = '*'
  132.             END /* WHEN tbselect.k = 'T' */
  133.             OTHERWISE
  134.                NOP
  135.             END /* SELECT */
  136.          END k
  137.          IF k > fsfnum THEN next = firstsel
  138.       END /* DO FOREVER */
  139.    END w
  140. END m
  141. CALL DIRECTORY oldpath
  142. CALL HRXVPUT "HPTSO",profvars
  143. EXIT 0
  144. /* Procedure to send all files in subdirectory */
  145. senddir: PROCEDURE EXPOSE msg
  146.    PARSE ARG hostlu,dirname,senddsn,fclass,repopt
  147.    /* Obtain a list of files in directory */
  148.    CALL HRXQFILE dirname'\*.*',"SS" /* sets ssfnum,sspath,ssmaxl,
  149.                 ssfile.k,sssize.k,sslmdate.k,sslmtime.k */
  150.    /* Send each file to the remote LU */
  151.    DO k = 1 TO ssfnum
  152.       IF sssize.k <> '<DIR>' THEN DO
  153.          sendlfn = dirname'\'ssfile.k
  154.          rdsname = dsnbuild(sendlfn,senddsn)
  155.          SAY 'HAPSEND' hostlu sendlfn rdsname fclass repopt
  156.          ft = HAPSEND(hostlu,sendlfn,rdsname,fclass,repopt)
  157.          IF ft <> 0 & ft <> 4 THEN RETURN ft
  158.       END
  159.    END
  160.    RETURN 0
  161. /* Procedure to build host dsname from local filename */
  162. dsnbuild: PROCEDURE
  163.    PARSE ARG lfname,senddsn
  164.    drive = FILESPEC('D',lfname); path = FILESPEC('P',lfname)
  165.    PARSE VAR path '\' qual1 '\' qual2 '\' qual3 '\' qual4 '\',
  166.         qual5 '\' qual6 '\' qual7 '\' qual8 '\' qual9 '\'
  167.    PARSE VALUE FILESPEC('N',lfname) WITH fname '.' ftype
  168.    rdsname = replace(senddsn,"&DRIVE",drive)
  169.    rdsname = replace(rdsname,"&PATH",path)
  170.    rdsname = replace(rdsname,"&FNAME",fname)
  171.    rdsname = replace(rdsname,"&FTYPE",ftype)
  172.    rdsname = replace(rdsname,"&QUAL1",qual1)
  173.    rdsname = replace(rdsname,"&QUAL2",qual2)
  174.    rdsname = replace(rdsname,"&QUAL3",qual3)
  175.    rdsname = replace(rdsname,"&QUAL4",qual4)
  176.    rdsname = replace(rdsname,"&QUAL5",qual5)
  177.    rdsname = replace(rdsname,"&QUAL6",qual6)
  178.    rdsname = replace(rdsname,"&QUAL7",qual7)
  179.    rdsname = replace(rdsname,"&QUAL8",qual8)
  180.    rdsname = replace(rdsname,"&QUAL9",qual9)
  181.    RETURN rdsname
  182. /* Procedure to replace one substring by another */
  183. replace: PROCEDURE
  184.    PARSE ARG source,string1,string2
  185.    PARSE UPPER ARG usource,ustring1
  186.    i = POS(ustring1,usource)
  187.    IF i = 0 THEN RETURN source
  188.    RETURN INSERT(string2,DELSTR(source,i,LENGTH(string1)),i-1)
  189.