home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 April A / Pcwk4a98.iso / Wtestowe / OnNet16 / LIBGET.SCR < prev    next >
Text File  |  1997-01-08  |  5KB  |  147 lines

  1. *---------------------------------------------------------------------*
  2. *         "LIBGET.BAT" : Relay/PC Gold Library Extraction          *
  3. *---------------------------------------------------------------------*
  4. *
  5. *  (c) Copyright 1983,1993 RELAY Technology Inc.
  6. *
  7. * This program extracts members from a Library file previously
  8. * built for use with Relay/PC Gold. The user is prompted for the
  9. * library fileid and the output member file (which includes the
  10. * drive, path, name, extension).
  11. *
  12. * Supplied arguments (optional) are:
  13. *    &1 = Library fileid
  14. *    &2 = Member fileid
  15.  
  16. *---------------------------------------------------------------------*
  17. *                 Module History                  *
  18. *---------------------------------------------------------------------*
  19. *                                      *
  20. *  Latest Revision -                              *
  21. *                                      *
  22. *     $Revision:   1.8  $                          *
  23. *                                      *
  24. *  Modification Log -                              *
  25. *                                      *
  26. *     M0001V70 Put Relay Source Files under PVCS Control          *
  27. *          by JMM on 12/18/95                      *
  28. *                                      *
  29. *---------------------------------------------------------------------*
  30.  
  31. *
  32. *     Initialize variables
  33. *
  34.  
  35.      &INPFILE = &1               ;* Library fileid (input file)
  36.      &OUTFILE = &2               ;* Member fileid (output file)
  37.      &MFILE=""                     ;* Member fileid
  38.      &MNAME=""                     ;* Current Member name
  39.  
  40.      &DIRCNT=0               ;* Count of directory entries
  41.      &DIRNUM=0               ;* Current directory entry number
  42.      &DIRMN0=""                    ;* Array is list of member names
  43.      &DIRNO0=0               ;* Array is member offset in file
  44.      &DIRLN0=0               ;* Array is length of member
  45.  
  46. *
  47. *     Introduction & prompts
  48. *
  49.      clear
  50.  
  51.      if (&INPFILE<>"") goto -CHECK1
  52. -ASK1
  53.      &FILESPEC = "Library Files/*.LIB/All Files/*.*/"
  54.      &INPFILE = &rdrive
  55.      display dialogbox CLEAR
  56.      display dialogbox FILEOPEN "Specify fileid for the Library" &FILESPEC &INPFILE
  57.      if (&rc = 2) quiet stop
  58.      if (&INPFILE="") stop 99 "INo library specified!"
  59. -CHECK1  &INPFILE=&upper(&trim(&INPFILE))
  60.      if not valid &INPFILE goto -ASK1
  61.      if exists &INPFILE then goto CONT1
  62.  
  63.      display dialogbox OK "Library Extract Utility" "File &INPFILE does not exist."
  64.      &INPFILE = ""
  65.      goto ASK1
  66.  
  67. -CONT1
  68.      if (&OUTFILE<>"") goto -CHECK2
  69. -ASK2     display dialogbox INPUT "Library Extract Utility" "Specify the fileid for the output members: " &OUTFILE
  70.      if (&OUTFILE="") stop 99 "INo member specified!"
  71. -CHECK2  &OUTFILE=&upper(&trim(&OUTFILE))
  72.      if not valid &OUTFILE goto -ASK2
  73.  
  74. *
  75. *     Check for single or complete extraction
  76. *
  77.      &MNAME = &fname(&OUTFILE)
  78.      if (&MNAME="????????") goto -READALL
  79.  
  80.      gosub -EXTRACT
  81.      display dialogbox OK "Library Extract Utility" "Extract completed."
  82.      stop
  83.  
  84.  
  85.  
  86. *---------------------------------------------------------------------*
  87. *         Extract all members from the library              *
  88. *---------------------------------------------------------------------*
  89. *
  90. *     First, read the library directory.
  91. *
  92. -READALL open &INPFILE as #1 length 16 binary
  93.      field #1 1 8 &DIRMN&DIRNUM char
  94.      field #1 * 2 &DIRNO&DIRNUM dec
  95.      field #1 * 2 &DIRLN&DIRNUM dec
  96.      field #1 * 4 &NULL
  97.  
  98.      &DIRNUM = 0
  99.      read record #1
  100.      if (&DIRMN0<>"PDSDIR  ") then display dialogbox OK "Library Extract Utility" "File &INPFILE is not a library!"
  101.      then stop 98
  102.      &DIRCNT = &DIRLN0
  103.  
  104.      &DIRNUM = 1
  105.      loop *+2 &DIRCNT
  106.        read record #1
  107.        &DIRNUM = &DIRNUM+1
  108.  
  109.      close #1
  110.  
  111. *
  112. *     Loop to extract all members
  113. *
  114.      &DIRNUM = 1
  115.      loop *+3 &DIRCNT
  116.        &MNAME = &trim(&DIRMN&DIRNUM)
  117.        gosub -EXTRACT
  118.        &DIRNUM = &DIRNUM+1
  119.      display dialogbox OK "Library Extract Utility" "Extract completed."
  120.      stop
  121.  
  122.  
  123. *---------------------------------------------------------------------*
  124. *           Extract a member from the library              *
  125. *---------------------------------------------------------------------*
  126.  
  127. -EXTRACT &MFILE=&FDIR(&OUTFILE)&MNAME..&FEXT(&OUTFILE)
  128.      display dialogbox INFO "Library Extract Utility" "Writing &MFILE"
  129.      on error
  130.      open &INPFILE as #1 for input stream binary buffersize 4096 member &MNAME
  131.      &HRC = &rc
  132.      if (&HRC=2) then display dialogbox OK "Library Extract Utility" "Member &MNAME not found in file &INPFILE.."
  133.      then quiet stop
  134.      if (&HRC<>0) then display dialogbox OK "Library Extract Utility" "Member &MNAME could not be extracted. Problems opening file &INPFILE.."
  135.      on error stop error
  136.      open &MFILE   as #2 for output stream binary buffersize 4096
  137.  
  138.      read file #1 &RECORD
  139.  
  140.      loop *+2 while found
  141.        write file #2 &RECORD
  142.        read file #1 &RECORD
  143.  
  144.      close #1
  145.      close #2
  146.      return
  147.