home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1993 #3 / NN_1993_3.iso / spool / vmsnet / sources / 494 < prev    next >
Encoding:
Internet Message Format  |  1993-01-25  |  47.6 KB

  1. Path: sparky!uunet!usc!news.service.uci.edu!unogate!mvb.saic.com!vmsnet-sources
  2. Newsgroups: vmsnet.sources
  3. From: "Andy, Systems Manager" <UDAA055@ELM.CC.KCL.AC.UK>
  4. Subject: VMS_SHARE V8.2, part 04/09
  5. Message-ID: <10312294@MVB.SAIC.COM>
  6. Date: Mon, 25 Jan 1993 21:34:19 GMT
  7. Lines: 1184
  8. Followup-To: vmsnet.sources.d
  9. Approved: Mark.Berryman@Mvb.Saic.Com
  10.  
  11. Submitted-by: "Andy, Systems Manager" <UDAA055@ELM.CC.KCL.AC.UK>
  12. Posting-number: Volume 4, Issue 48
  13. Archive-name: vms_share/part04
  14. Supersedes: vms_share: Volume 3, Issue 87-89
  15.  
  16. -+-+-+-+-+-+-+-+ START OF PART 4 -+-+-+-+-+-+-+-+
  17. X
  18. X!`20Compute`20final`20size`20stats`20and`20compression`20ratio
  19. X`20`20l2:=GET_INFO(Xbuffer,"RECORD_COUNT");
  20. X`20`20b2:=SizeBuffer(Xbuffer);
  21. X`20`20IF`20b1`20=`200
  22. X`20`20`20`20THEN`20c`20:=`200
  23. X`20`20`20`20ELSE`20c`20:=`20(1000*(b2-b1)+5)/(10*b1);`09!`20Compute`20%`20chan
  24. Vge`20in`20size
  25. X`20`20ENDIF;
  26. X
  27. X
  28. X!`20Concise`20summary`20of`20encoding/compression`20if`20logging`20requested
  29. X`20`20IF`20Logging`20>=`20LOG_ShowStats
  30. X`20`20`20`20THEN
  31. X`20`20`20`20`20`20f:="!8%T,`20Records:`20!UL,`20Bytes:`20!UL,`20Change`20!SL%"
  32. V;
  33. X`20`20`20`20`20`20Inform("I","ENCDSIZE",FAO(f,0,l2,b2,c));
  34. X`20`20ENDIF;
  35. X
  36. XENDPROCEDURE;
  37. X`0C
  38. X!`20+--------------------------------------------------------------------+
  39. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  40. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  41. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  42. X!`20+`20`20`20`20`20S`20H`20A`20R`20E`20`20`20F`20I`20L`20E`20`20`20H`20E`20A
  43. V`20D`20E`20R`20S`20`20`20A`20N`20D`20`20`20T`20R`20A`20I`20L`20E`20R`20S`20
  44. V`20+
  45. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  46. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  47. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  48. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  49. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  50. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  51. X!`20+`20`20`20The`20share`20file`20which`20is`20created`20consists`20of`20a
  52. V`20mixture`20of`20DCL,`20TPU+
  53. X!`20+`20`20`20and`20user`20data.`20`20The`20DCL`20and`20TPU`20code`20surroundi
  54. Vng`20each`20file`20of`20`20`20`20+
  55. X!`20+`20`20`20user`20data`20create`20a`20sequence`20which,`20when`20executed,
  56. V`20unpacks`20the`20`20`20`20+
  57. X!`20+`20`20`20encoded`20user`20data`20to`20its`20original`20format.`20`20`20
  58. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  59. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  60. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  61. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  62. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  63. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  64. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  65. X!`20+`20`20`208.0`20`20`20`20`20`20`20`20`20`20`20`20`20`20Andy`20Harper`20
  66. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20September`201992`20`20
  67. V`20`20+
  68. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  69. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  70. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  71. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  72. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  73. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  74. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  75. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  76. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  77. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20R`20O`20U`20T`20I`20N`20E
  78. V`20`20`20S`20U`20M`20M`20A`20R`20Y`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  79. V`20`20`20`20`20`20`20`20`20`20+
  80. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  81. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  82. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  83. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  84. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  85. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  86. X!`20+`20`20`20Create_Prologue_Head`20`20`20`20`20`20`20Create`20the`20share
  87. V`20file`20header`20plus`20the`20+
  88. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  89. V`20`20`20`20`20`20start`20of`20the`20UNPACK`20subroutine`20`20`20`20`20`20`20
  90. V`20+
  91. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  92. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  93. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  94. X!`20+`20`20`20Create_Prologue_Unpacker`20`20`20Create`20the`20TPU`20unpack`20c
  95. Vode`20`20`20`20`20`20`20`20`20`20`20`20+
  96. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  97. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  98. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  99. X!`20+`20`20`20Create_Prologue_Trail`20`20`20`20`20`20Create`20the`20remainder
  100. V`20of`20the`20unpack`20`20`20`20+
  101. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  102. V`20`20`20`20`20`20subroutine`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  103. V`20`20`20`20`20`20`20`20`20`20`20`20+
  104. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  105. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  106. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  107. X!`20+`20`20`20Create_Epilogue`20`20`20`20`20`20`20`20`20`20`20`20Create`20the
  108. V`20share`20file`20completion`20code`20+
  109. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  110. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  111. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  112. X!`20+--------------------------------------------------------------------+
  113. X`0C
  114. X!`20----------------------------------------------------------------------
  115. X!`20`20The`20share`20file`20contains`20a`20prolog`20consisting`20of`20a`20chun
  116. Vk`20of`20DCL`20code
  117. X!`20`20and`20some`20TPU`20code`20which,`20together,`20form`20the`20unpacking
  118. V`20and`20decoding
  119. X!`20`20routine`20for`20a`20given`20file.
  120. X!
  121. X!`20`20This`20routine`20writes`20in`20the`20share`20file`20identification,`20v
  122. Version`20checks
  123. X!`20`20and`20various`20initialization`20tasks,`20followed`20by`20the`20DCL`20c
  124. Vode`20forming
  125. X!`20`20the`20start`20of`20unpacking`20routine.
  126. X!`20----------------------------------------------------------------------
  127. X
  128. XPROCEDURE`20Create_Prologue_Head(Xbuffer,`20Creator,`20Blocks,`20FilenameBuffe
  129. Vr)
  130. XLOCAL`20filecount,file;
  131. X
  132. X`20`20ReuseBuffer(Xbuffer);
  133. X
  134. X`20`20CopyLine(`20"$!`20------------------`20CUT`20HERE`20--------------------
  135. V---");
  136. X`20`20CopyLine(`20"$`20v='f$verify(f$trnlnm(""SHARE_UNPACK_VERIFY""))'");
  137. X`20`20CopyLine(`20"$!"`20);
  138. X`20`20CopyLine(`20"$!`20This`20archive`20created`20by`20"`20+`20Facility`20+
  139. V`20"`20Version`20"`20+`20Version_Number);
  140. X`20`20CopyLine(`20FAO("$!!`20`20`20On`20!%D`20`20`20By`20user`20!AS",`200,`20C
  141. Vreator)`20);
  142. X`20`20CopyLine(`20"$!"`20);
  143. X`20`20CopyLine(`20"$!`20The`20"`20+`20Facility`20+`20"`20software`20that`20cre
  144. Vated`20this`20archive");
  145. X`20`20CopyLine(`20"$!`20`20`20`20was`20written`20by`20`20Andy`20Harper,`20King
  146. Vs`20College`20London`20UK");
  147. X`20`20CopyLine(`20"$!`20`20`20`20--`20December`201992");
  148. X`20`20CopyLine(`20"$!"`20);
  149. X`20`20CopyLine(`20"$!`20Credit`20is`20due`20to`20these`20people`20for`20their
  150. V`20original`20ideas:");
  151. X`20`20CopyLine(`20"$!`20`20`20`20James`20Gray,`20Michael`20Bednarek`20");
  152. X`20`20CopyLine(`20"$!");
  153. X`20`20CopyLine(`20"$!+`20THIS`20PACKAGE`20DISTRIBUTED`20IN`20999`20PARTS,`20TO
  154. V`20KEEP`20EACH`20PART");
  155. X`20`20CopyLine(`20"$!`20`20BELOW`20"`20+`20STR(Blocks)`20+`20"`20BLOCKS");
  156. X`20`20CopyLine(`20"$!");
  157. X`20`20CopyLine(`20"$!`20TO`20UNPACK`20THIS`20SHARE`20FILE,`20CONCATENATE`20ALL
  158. V`20PARTS`20IN`20ORDER");
  159. X`20`20CopyLine(`20"$!`20AND`20EXECUTE`20AS`20A`20COMMAND`20PROCEDURE`20`20(
  160. V`20`20@name`20`20)");
  161. X`20`20CopyLine(`20"$!");
  162. X`20`20CopyLine(`20"$!`20THE`20FOLLOWING`20FILE(S)`20WILL`20BE`20CREATED`20AFTE
  163. VR`20UNPACKING:");
  164. X
  165. X`20`20filecount`20:=`200;
  166. X`20`20LOOP
  167. X`20`20`20`20`20POSITION(FilenameBuffer);
  168. X`20`20`20`20`20EXITIF`20MARK(NONE)`20=`20END_OF(CURRENT_BUFFER);
  169. X
  170. X`20`20`20!`20extract`20next`20filename`20from`20list
  171. X`20`20`20`20`20file`20`20:=`20StripFile(`20SUBSTR(CURRENT_LINE,1,INDEX(CURRENT
  172. V_LINE,"`20")-1)`20);
  173. X
  174. X`20`20`20`20`20filecount`20:=`20filecount`20+`201;
  175. X`20`20`20`20`20MOVE_VERTICAL(1);
  176. X
  177. X`20`20`20!`20Copy`20filename`20into`20the`20share`20file`20prologue
  178. X`20`20`20`20`20POSITION(Xbuffer);
  179. X`20`20`20`20`20CopyLine(`20FAO("$!!!8UL.`20!AS",`20filecount,`20file));
  180. X
  181. X`20`20`20`20`20IF`20Debugging`20>=`20DEBUG_AddToPrologue
  182. X`20`20`20`20`20`20`20`20THEN
  183. X`20`20`20`20`20`20`20`20`20`20Inform("I","DBGPROADFIL","Adding`20name`20"""
  184. V`20+`20file`20+`20"""`20to`20prologue");
  185. X`20`20`20`20`20ENDIF;
  186. X
  187. X`20`20ENDLOOP;
  188. X
  189. X`20`20POSITION(Xbuffer);
  190. X`20`20CopyLine(`20"$!");
  191. X`20`20CopyLine(`20"$set=""set""");
  192. X`20`20CopyLine(`20"$set`20symbol/scope=(nolocal,noglobal)");
  193. X`20`20CopyLine(`20"$f=f$parse(""SHARE_UNPACK_TEMP"",""SYS$SCRATCH:.""+f$getjpi
  194. V("""",""PID""))");
  195. X`20`20CopyLine(`20"$e=""write`20sys$error`20`20""""%"+FAC_unpack+""""",`20""")
  196. V;
  197. X`20`20CopyLine(`20"$w=""write`20sys$output`20""""%"+FAC_unpack+""""",`20""");
  198. X`20`20CopyLine(`20"$`20if`20.not.`20f$trnlnm(""SHARE_UNPACK_LOG"")`20then`20$
  199. V`20w`20=`20""!""");
  200. X`20`20CopyLine(`20"$`20ve=f$getsyi(""version"")");
  201. X`20`20CopyLine(`20"$`20if`20ve-f$extract(0,1,ve)`20.ges.`20"""+Min_VMS+"""`20t
  202. Vhen`20$`20goto`20start");
  203. X`20`20CopyLine(`20"$`20e`20""-E-OLDVER,`20Must`20run`20at`20least`20VMS`20"+Mi
  204. Vn_VMS+"""");
  205. X`20`20CopyLine(`20"$`20v=f$verify(v)");
  206. X`20`20CopyLine(`20"$`20exit`2044");
  207. X
  208. X!`20Insert`20the`20DCL`20procedure`20which`20unpacks`20a`20specific`20file,
  209. V`20restores`20the
  210. X!`20record`20attributes,`20and`20validates`20the`20checksum
  211. X`20`20CopyLine(`20"$unpack:`20subroutine`20!`20P1=filename,`20P2=checksum,`20P
  212. V3=attributes");
  213. X
  214. X!`20Insert`20code`20to`20check`20directory`20exists`20and`20create`20if`20not
  215. X`20`20CopyLine(`20"$`20if`20f$parse(P1)`20.nes.`20""""`20then`20$`20goto`20dir
  216. Vok");
  217. X`20`20CopyLine(`20"$`20dn=f$parse(P1,,,""DIRECTORY"")");
  218. X`20`20CopyLine(`20"$`20w`20""-I-CREDIR,`20Creating`20directory`20''dn'""");
  219. X`20`20CopyLine(`20"$`20create/dir`20'dn'");
  220. X`20`20CopyLine(`20"$`20if`20$status`20then`20$`20goto`20dirok");
  221. X`20`20CopyLine(`20"$`20e`20""-E-CREDIRFAIL,`20Unable`20to`20create`20''dn'`20F
  222. Vile`20skipped""");
  223. X`20`20CopyLine(`20"$`20delete`20'f'*");
  224. X`20`20CopyLine(`20"$`20exit");
  225. X
  226. X!`20Directory`20now`20in`20place
  227. X`20`20CopyLine(`20"$dirok:");
  228. X
  229. X!`20Check`20file`20existence
  230. X`20`20CopyLine(`20"$`20x=f$search(P1)");
  231. X`20`20CopyLine(`20"$`20if`20x`20.eqs.`20""""`20then`20$`20goto`20file_absent")
  232. V;
  233. X
  234. X!`20If`20we're`20not`20preserving`20versions,`20then`20we`20can't`20bomb`20out
  235. V`20if`20an`20old`20version
  236. X!`20already`20exists`20when`20we`20unpack;`20so`20alter`20the`20check`20depend
  237. Vent`20on`20the`20setting
  238. X!`20of`20the`20`60preserve`20versions'`20flag.
  239. X`20`20IF`20VersKeep
  240. X`20`20`20`20THEN
  241. X`20`20`20`20`20`20CopyLine(`20"$`20e`20""-W-EXISTS,`20File`20''P1'`20exists.
  242. V`20Skipped""");
  243. X`20`20`20`20`20`20CopyLine(`20"$`20delete`20'f'*");
  244. X`20`20`20`20`20`20CopyLine(`20"$`20exit");
  245. X`20`20`20`20ELSE
  246. X`20`20`20`20`20`20CopyLine("$`20e`20""-W-HIGHVERS,`20Creating`20higher`20versi
  247. Von`20of`20"",`20P1");
  248. X`20`20ENDIF;
  249. X
  250. X`20`20CopyLine(`20"$file_absent:");
  251. X`20`20CopyLine(`20"$`20w`20""-I-UNPACK,`20Unpacking`20file`20"",`20P1");
  252. X`20`20CopyLine(`20"$`20n=P1");
  253. X`20`20CopyLine(`20"$`20if`20P3`20.nes.`20""""`20then`20$`20n=f");
  254. X`20`20COPY_TEXT(`20"$`20if`20.not.`20f$verify()`20then`20$`20define/user`20sys
  255. V$output`20nl:");
  256. X
  257. XENDPROCEDURE;
  258. X`0C
  259. X!`20----------------------------------------------------------------------
  260. X!`20This`20routine`20creates`20the`20packed`20TPU`20code`20which`20makes`20up
  261. V`20the`20heart`20of
  262. X!`20the`20decoding`20subroutine`20in`20the`20share`20file.`20`20To`20save`20sp
  263. Vace,`20the`20TPU
  264. X!`20code`20is`20tightly`20packed`20in`20the`20share`20file`20-`20see`20packTPU
  265. V`20for`20details
  266. X!`20----------------------------------------------------------------------
  267. X
  268. XPROCEDURE`20Create_Prologue_Unpacker(Xbuffer)
  269. X
  270. X`20`20ReuseBuffer(Xbuffer);
  271. X
  272. X`20`20CopyLine("$`20EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT`20'f'/OUT='n'");
  273. X
  274. X!`20Insert`20procedure`20to`20extract`20the`20next`20two`20digits`20as`20a`20h
  275. Vex`20character
  276. X`20`20PackTPU(`20"PROCEDURE`20GetHex(s,p)");
  277. X`20`20PackTPU(`20"LOCAL`20x1,x2;");
  278. X`20`20PackTPU(`20"`20`20x1:=INDEX(t,SUBSTR(s,p,1))-1;");
  279. X`20`20PackTPU(`20"`20`20x2:=INDEX(t,SUBSTR(s,p+1,1))-1;");
  280. X`20`20PackTPU(`20"`20`20RETURN`2016*x1+x2;");
  281. X`20`20PackTPU(`20"ENDPROCEDURE;");
  282. X
  283. X!`20Insert`20procedure`20to`20skip`20part`20separators
  284. X`20`20PackTPU(`20"PROCEDURE`20SkipPartsep");
  285. X`20`20PackTPU(`20"`20`20LOOP");
  286. X`20`20PackTPU(`20"`20`20`20`20EXITIF`20MARK(NONE)=END_OF(b);"`20);
  287. X`20`20PackTPU(`20"`20`20`20`20EXITIF`20INDEX(ERASE_LINE,"""+Part_Begin+""")=1;
  288. V");
  289. X`20`20PackTPU(`20"`20`20ENDLOOP;");
  290. X`20`20PackTPU(`20"ENDPROCEDURE;");
  291. X
  292. X!`20Insert`20procedure`20to`20expand`20LZW`20encoded`20substrings
  293. X`20`20IF`20Compression`20=`20COMPRESS_LZW`20THEN
  294. X`20`20PackTPU(`20"PROCEDURE`20COPY_PREVIOUS(b,n)");
  295. X`20`20PackTPU(`20"LOCAL`20m,s,e;");
  296. X`20`20PackTPU(`20"`20`20m:=MARK(NONE);MOVE_HORIZONTAL(-b);");
  297. X`20`20PackTPU(`20"`20`20s:=MARK(NONE);MOVE_HORIZONTAL(n-1);");
  298. X`20`20PackTPU(`20"`20`20e:=MARK(NONE);POSITION(m);COPY_TEXT(CREATE_RANGE(s,e))
  299. V;");
  300. X`20`20PackTPU(`20"ENDPROCEDURE;");
  301. X`20`20ENDIF;
  302. X
  303. X!`20Insert`20procedure`20to`20decode`20the`20current`20line`20back`20to`20usef
  304. Vul`20data
  305. X`20`20PackTPU(`20"PROCEDURE`20ProcessLine");
  306. X`20`20PackTPU(`20"LOCAL`20c,s,l,b,n,p;");
  307. X`20`20PackTPU(`20"`20`20c`20:=`20ERASE_CHARACTER(1);");
  308. X`20`20PackTPU(`20"`20`20s`20:=`20ERASE_LINE;");
  309. X`20`20PackTPU(`20"`20`20IF`20c`20=`20"""+Initial_Flag+"""`20THEN`20SPLIT_LINE;
  310. V`20ENDIF;");
  311. X`20`20PackTPU(`20"`20`20MOVE_HORIZONTAL(-1);");
  312. X`20`20PackTPU(`20"`20`20l`20:=`20LENGTH(s);");
  313. X`20`20PackTPU(`20"`20`20p`20:=`201;");
  314. X`20`20PackTPU(`20"`20`20LOOP");
  315. X`20`20PackTPU(`20"`20`20`20`20EXITIF`20p`20>`20l;");
  316. X`20`20PackTPU(`20"`20`20`20`20c`20:=`20SUBSTR(s,p,1);");
  317. X`20`20PackTPU(`20"`20`20`20`20p`20:=`20p+1;");
  318. X`20`20PackTPU(`20"`20`20`20`20CASE`20c`20FROM`20'`20'`20TO`20'`60'");
  319. X`20`20IF`20Compression`20=`20COMPRESS_RunLength`20THEN
  320. X`20`20PackTPU(`20"`20`20`20`20`20`20`5B'"+Run_Flag+"'`5D:`20b:=GetHex(s,p);
  321. V`20n:=GetHex(s,p+2);`20p:=p+4;`20COPY_TEXT(ASCII(n)*b);");
  322. X`20`20ENDIF;
  323. X`20`20IF`20Compression`20=`20COMPRESS_LZW`20THEN
  324. X`20`20PackTPU(`20"`20`20`20`20`20`20`5B'"+LZW_Flag+"'`5D:`20b:=GetHex(s,p);
  325. V`20n:=GetHex(s,p+2);`20p:=p+4;`20COPY_PREVIOUS(b,n);");
  326. X`20`20ENDIF;
  327. X`20`20PackTPU(`20"`20`20`20`20`20`20`5B'"+Quote_Flag+"'`5D:`20COPY_TEXT(ASCII(
  328. VGetHex(s,p)));`20p:=p+2;");
  329. X`20`20PackTPU(`20"`20`20`20`20`20`20`5B'`20'`5D:`20p:=p+1;");
  330. X`20`20PackTPU(`20"`20`20`20`20`20`20`5BINRANGE,OUTRANGE`5D:`20COPY_TEXT(c);");
  331. V
  332. X`20`20PackTPU(`20"`20`20`20`20ENDCASE;");
  333. X`20`20PackTPU(`20"`20`20ENDLOOP;");
  334. X`20`20PackTPU(`20"ENDPROCEDURE;");
  335. X
  336. X!`20Insert`20procedure`20to`20scan`20and`20decode`20the`20whole`20buffer
  337. X`20`20PackTPU(`20"PROCEDURE`20Decode"`20);
  338. X`20`20PackTPU(`20"`20`20POSITION(BEGINNING_OF(b));"`20);
  339. X`20`20PackTPU(`20"`20`20LOOP"`20);
  340. X`20`20PackTPU(`20"`20`20`20`20EXITIF`20MARK(NONE)=END_OF(b);"`20);
  341. X`20`20PackTPU(`20"`20`20`20`20IF`20INDEX(CURRENT_LINE,"""+Part_End+""")=1`20TH
  342. VEN");
  343. X`20`20PackTPU(`20"`20`20`20`20`20`20SkipPartSep;");
  344. X`20`20PackTPU(`20"`20`20`20`20ELSE");
  345. X`20`20PackTPU(`20"`20`20`20`20`20`20ProcessLine;");
  346. X`20`20PackTPU(`20"`20`20`20`20`20`20MOVE_HORIZONTAL(1);");
  347. X`20`20PackTPU(`20"`20`20`20`20ENDIF;");
  348. X`20`20PackTPU(`20"`20`20ENDLOOP;"`20);
  349. X`20`20PackTPU(`20"ENDPROCEDURE;"`20);
  350. X
  351. X!`20Start`20of`20main`20program`20code`20here
  352. X`20`20PackTPU(`20"SET(FACILITY_NAME,"""+FAC_unpack+""");"`20);
  353. X`20`20PackTPU(`20"SET(SUCCESS,OFF);"`20);
  354. X`20`20PackTPU(`20"SET(INFORMATIONAL,OFF);"`20);
  355. X`20`20PackTPU(`20"t:=""0123456789ABCDEF"";"`20);`09!`20For`20decoding`20hex
  356. V`20(see`20gethex)
  357. X`20`20PackTPU(`20"f:=GET_INFO(COMMAND_LINE,""file_name"");"`20);
  358. X`20`20PackTPU(`20"b:=CREATE_BUFFER(f,f);"`20);
  359. X`20`20
  360. X!`20Call`20the`20decoding`20routine
  361. X`20`20PackTPU(`20"Decode;");`09`09`09`09!`20Procedure`20call
  362. X`20`20PackTPU(`20"WRITE_FILE(b,GET_INFO(COMMAND_LINE,""output_file""));"`20);
  363. X`20`20PackTPU(`20"QUIT;"`20);
  364. X
  365. XENDPROCEDURE;
  366. X`0C
  367. XPROCEDURE`20Create_Prologue_Trail(Xbuffer)
  368. X
  369. X`20`20ReuseBuffer(Xbuffer);
  370. X
  371. X!`20Insert`20code`20to`20Restore`20the`20file's`20record`20attributes
  372. X`20`20CopyLine(`20"$`20if`20p3`20.eqs.`20""""`20then`20$`20goto`20dl");
  373. X`20`20CopyLine(`20"$`20open/write`20fdl`20`26f");
  374. X`20`20CopyLine(`20"$`20write`20fdl`20""RECORD""");
  375. X`20`20CopyLine(`20"$`20write`20fdl`20P3");
  376. X`20`20CopyLine(`20"$`20close`20fdl");
  377. X`20`20CopyLine(`20"$`20w`20""-I-CONVRFM,`20Converting`20record`20format`20to
  378. V`20"",`20P3");
  379. X`20`20CopyLine(`20"$`20convert/fdl=`26f`20`26f-1`20`26P1");
  380. X`20`20CopyLine(`20"$dl:`20delete`20'f'*");
  381. X
  382. X!`20Insert`20code`20to`20do`20a`20checksum`20and`20validate`20the`20created
  383. V`20file;`20then`20tidy`20up
  384. X`20`20CopyLine(`20"$`20checksum`20'P1'");
  385. X`20`20CopyLine(`20"$`20if`20checksum$checksum`20.nes.`20P2`20then`20$`20-");
  386. X`20`20CopyLine(`20"`20`20e`20""-E-CHKSMFAIL,`20Checksum`20of`20''P1'`20failed.
  387. V""");
  388. X`20`20CopyLine(`20"$`20exit");
  389. X`20`20CopyLine(`20"$`20endsubroutine");
  390. X`20`20COPY_TEXT(`20"$start:");
  391. X
  392. XENDPROCEDURE;
  393. X
  394. X
  395. X
  396. X
  397. XPROCEDURE`20Create_Epilogue(Xbuffer);
  398. X
  399. X`20`20ReuseBuffer(Xbuffer);
  400. X`20`20CopyLine("$`20v=f$verify(v)");
  401. X`20`20COPY_TEXT("$`20exit");
  402. X
  403. XENDPROCEDURE;
  404. X
  405. X`0C
  406. X!`20+--------------------------------------------------------------------+
  407. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  408. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  409. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  410. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20F`20I`20L`20E`20`20`20P`20A`20C`20K
  411. V`20A`20G`20I`20N`20G`20`20`20R`20O`20U`20T`20I`20N`20E`20S`20`20`20`20`20`20
  412. V`20`20`20`20`20+
  413. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  414. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  415. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  416. X!`20+`20`20`20Each`20file`20taken`20from`20the`20parameter`20list`20is`20read
  417. V`20into`20a`20buffer`20and+
  418. X!`20+`20`20`20encoded.`20The`20encoded`20buffer,`20together`20with`20a`20file
  419. V`20header`20and`20`20`20`20`20+
  420. X!`20+`20`20`20trailer,`20is`20then`20added`20to`20the`20existing`20part`20buff
  421. Ver.`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  422. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  423. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  424. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  425. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  426. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  427. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  428. X!`20+`20`20`208.0`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20Andy`20Harper
  429. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20September`201992
  430. V`20`20+
  431. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  432. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  433. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  434. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  435. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  436. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  437. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  438. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  439. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  440. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20R`20O`20U`20T`20I`20N
  441. V`20E`20`20`20S`20U`20M`20M`20A`20R`20Y`20`20`20`20`20`20`20`20`20`20`20`20`20
  442. V`20`20`20`20`20`20`20`20`20+
  443. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  444. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  445. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  446. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  447. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  448. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  449. X!`20+`20`20`20Create_File_Header`20`20`20`20`20Generate`20the`20DCL`20prolog
  450. V`20for`20the`20file`20`20`20`20`20`20+
  451. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  452. V`20`20which`20copies`20the`20data`20to`20a`20scratch`20file`20`20`20+
  453. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  454. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  455. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  456. X!`20+`20`20`20Create_File_Trailer`20`20`20`20Generates`20the`20DCL`20epilog
  457. V`20for`20the`20file`20`20`20`20`20+
  458. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  459. V`20`20which`20generates`20the`20call`20to`20the`20unpacker`20`20+
  460. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  461. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  462. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  463. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  464. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  465. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  466. X!`20+`20`20`20Create_File`20`20`20`20`20`20`20`20`20`20`20`20Gets`20the`20file
  467. V`20into`20a`20buffer`20and`20encodes`20`20`20+
  468. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  469. V`20`20the`20data.`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  470. V`20`20`20`20`20`20`20`20`20`20`20`20`20+
  471. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  472. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  473. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  474. X!`20+`20`20`20PackageFile`20`20`20`20`20`20`20`20`20`20`20`20Master`20routine
  475. V`20called`20to`20deal`20with`20a`20`20`20`20`20`20+
  476. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  477. V`20`20single`20file`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  478. V`20`20`20`20`20`20`20`20`20`20`20`20+
  479. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  480. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  481. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  482. X!`20+--------------------------------------------------------------------+
  483. X`0C
  484. X!`20----------------------------------------------------------------------
  485. X!`20Create`20the`20initial`20DCL`20code`20that`20copies`20the`20encoded`20data
  486. V`20from`20the`20share
  487. X!`20file`20into`20a`20temporary`20file.
  488. X!`20----------------------------------------------------------------------
  489. X
  490. XPROCEDURE`20Create_File_Header(Xbuffer)
  491. X
  492. X`20`20ReuseBuffer(Xbuffer);
  493. X`20`20CopyLine("$!");
  494. X`20`20COPY_TEXT("$`20create`20'f'");
  495. X
  496. XENDPROCEDURE;
  497. X
  498. X
  499. X
  500. X
  501. X!`20----------------------------------------------------------------------
  502. X!`20Get`20the`20named`20file`20into`20the`20named`20buffer;`20give`20up`20on
  503. V`20any`20failure`20to
  504. X!`20get`20the`20file.
  505. X!`20----------------------------------------------------------------------
  506. X
  507. XPROCEDURE`20Create_File(Xbuffer,`20Filename)
  508. XLOCAL`20r;
  509. X
  510. X`20`20ON_ERROR
  511. X`20`20`20`20Inform("E","FILRDERR",`20"Error`20reading`20from`20file`20"`20+
  512. V`20FileName);
  513. X`20`20`20`20ABORT;
  514. X`20`20ENDON_ERROR;
  515. X
  516. X`20`20IF`20Logging`20>=`20LOG_ShowFile
  517. X`20`20`20`20THEN
  518. X`20`20`20`20`20`20Inform("I","PACKFILE",FAO("!8%T,`20Packaging`20file`20!AS",0
  519. V,FileName));
  520. X`20`20ENDIF;
  521. X
  522. X`20`20ReuseBuffer(Xbuffer);
  523. X`20`20READ_FILE(FileName);
  524. X
  525. XENDPROCEDURE;
  526. X
  527. X
  528. X
  529. X
  530. X!`20----------------------------------------------------------------------
  531. X!`20Add`20the`20DCL`20trailer`20line`20to`20the`20file.`20If`20the`20resultant
  532. V`20parameters`20would
  533. X!`20make`20the`20line`20longer`20than`20the`20maximum`20share`20file`20line
  534. V`20length,`20then`20use
  535. X!`20normal`20DCL`20continuation`20flags`20to`20indicate`20this`20and`20continu
  536. Ve`20onto`20several
  537. X!`20lines
  538. X!`20----------------------------------------------------------------------
  539. X
  540. XPROCEDURE`20Create_File_Trailer(Xbuffer,`20File,`20FileAttr)
  541. X
  542. X`20!`20Strip`20parts`20of`20the`20file`20name`20if`20this`20has`20been`20reque
  543. Vsted
  544. X`20`20File`20:=`20StripFile(File);
  545. X
  546. X`20`20ReuseBuffer(Xbuffer);
  547. X`20`20COPY_TEXT("$`20call`20unpack`20");`20`20`20AddDCL(File+"`20");`20`20`20A
  548. VddDCL(FileAttr);
  549. X
  550. XENDPROCEDURE;
  551. X`0C
  552. X!`20----------------------------------------------------------------------
  553. X!`20Package`20one`20file`20passed`20as`20a`20parameter`20into`20the`20share
  554. V`20file`20by
  555. X!`20writing`20the`20file`20header,`20the`20encoded`20file`20and`20the`20file
  556. V`20trailer
  557. X!`20----------------------------------------------------------------------
  558. X
  559. XPROCEDURE`20PackageFile(FileDetails)
  560. XLOCAL`20Separator,FileAttr,FileName;
  561. X
  562. X`20`20`20Separator`20:=`20INDEX(FileDetails,'`20');
  563. X`20`20`20FileName`20`20:=`20SUBSTR(FileDetails,1,separator-1);
  564. X`20`20`20FileAttr`20`20:=`20SUBSTR(FileDetails,separator+1,LENGTH(FileDetails)
  565. V-separator);
  566. X
  567. X`20`20`20Create_File_Header(WorkBuffer);
  568. X`20`20`20Add_To_Part(WorkBuffer);
  569. X
  570. X`20`20`20Create_File(WorkBuffer,FileName);
  571. X`20`20`20Encode_Buffer(WorkBuffer);
  572. X`20`20`20Add_To_Part(WorkBuffer);
  573. X
  574. X`20`20`20Create_File_Trailer(WorkBuffer,FileName,FileAttr);
  575. X`20`20`20Add_To_Part_Nosplit(WorkBuffer);
  576. X
  577. XENDPROCEDURE;
  578. X`0C
  579. X!`20+--------------------------------------------------------------------+
  580. X!`20+`20`20`20MAIN`20PROGRAM`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  581. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  582. V`20`20`20`20`20`20`20`20`20`20`20`20+
  583. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  584. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  585. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  586. X!`20+`20`20`20This`20is`20the`20main`20control`20loop`20of`20the`20program,
  587. V`20responsible`20for`20`20`20`20+
  588. X!`20+`20`20`20picking`20up`20the`20parameters,`20creating`20the`20prologue`20a
  589. Vnd`20epilogue`20of`20+
  590. X!`20+`20`20`20the`20share`20file,`20setting`20up`20global`20constants`20and
  591. V`20variables`20etc.`20`20`20+
  592. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  593. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  594. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  595. X!`20+`20`20`20It`20also`20contains`20the`20main`20loop`20which`20goes`20around
  596. V`20each`20of`20the`20`20`20`20`20+
  597. X!`20+`20`20`20specified`20files`20to`20be`20packed`20into`20the`20share`20file
  598. V.`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  599. X!`20+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  600. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  601. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20+
  602. X!`20+--------------------------------------------------------------------+
  603. X
  604. XInitialize;
  605. X
  606. XSET(SUCCESS,OFF);`09`09!`20Suppress`20non-error`20messages
  607. XSET(INFORMATIONAL,OFF);
  608. X
  609. XParamFile`20`20`20:=`20GET_INFO(COMMAND_LINE,"FILE_NAME");
  610. XParamBuff`20`20`20:=`20CREATE_BUFFER("`7Binfo`7D",`20ParamFile);
  611. XPartBuffer`20`20:=`20CREATE_BUFFER("`7Bpart`7D");
  612. XPart1Buffer`20:=`20CREATE_BUFFER("`7Bpart_1`7D");
  613. XWorkBuffer`20`20:=`20CREATE_BUFFER("`7Bwork`7D");
  614. X
  615. X
  616. X!`20Pick`20up`20parameters`20from`20the`20outside`20world
  617. XPOSITION(ParamBuff);
  618. XFacility`20`20`20`20`20`20`20`20`20`20`20`20:=`20ERASE_LINE;
  619. XVersion_Number`20`20`20`20`20`20:=`20ERASE_LINE;
  620. XMin_VMS`20`20`20`20`20`20`20`20`20`20`20`20`20:=`20ERASE_LINE;
  621. XMax_TPU_Line_Length`20:=`20INT(ERASE_LINE);
  622. XMax_Share_Length`20`20`20`20:=`20INT(ERASE_LINE);
  623. XDebugging`20`20`20`20`20`20`20`20`20`20`20:=`20INT(ERASE_LINE);
  624. XLogging`20`20`20`20`20`20`20`20`20`20`20`20`20:=`20INT(ERASE_LINE);
  625. XPart_Size`20`20`20`20`20`20`20`20`20`20`20:=`20INT(ERASE_LINE);
  626. XCompression`20`20`20`20`20`20`20`20`20:=`20INT(ERASE_LINE);
  627. XDirKeep`20`20`20`20`20`20`20`20`20`20`20`20`20:=`20INT(ERASE_LINE);
  628. XVersKeep`20`20`20`20`20`20`20`20`20`20`20`20:=`20INT(ERASE_LINE);
  629. XUsername`20`20`20`20`20`20`20`20`20`20`20`20:=`20ERASE_LINE;
  630. XShare_File`20`20`20`20`20`20`20`20`20`20:=`20ERASE_LINE;
  631. X
  632. XSET(FACILITY_NAME,`20Facility);`09!`20identify`20ourself`20in`20errors
  633. XIF`20Debugging`20>=`20DEBUG_SIMess`20THEN`20SET(SUCCESS,ON);`20SET(INFORMATION
  634. VAL,ON);`20ENDIF;
  635. X
  636. X!`20Initialize`20stuff`20to`20go`20through`20files
  637. XPartNo`20:=`200;
  638. XMax_Bytes`20:=`20(512`20*`20Part_Size)`20-`20LENGTH(FAO(FAO_start_part,Max_Par
  639. Vts))`20-`20EOL;
  640. X
  641. X!`20Create`20the`20initial`20share`20file`20header
  642. XCreate_Prologue_Head(WorkBuffer,`20Username,`20Part_Size,`20ParamBuff);
  643. XAdd_To_Part(WorkBuffer);
  644. XCreate_Prologue_Unpacker(WorkBuffer);
  645. XAdd_To_Part_Nosplit(WorkBuffer);
  646. XCreate_Prologue_Trail(WorkBuffer);
  647. XAdd_To_Part(WorkBuffer);
  648. X
  649. X
  650. X!`20Loop`20around,`20filling`20the`20part`20buffer`20with`20data`20from`20file
  651. Vs
  652. XLOOP
  653. X`20`20`20EXITIF`20GET_INFO(ParamBuff,"RECORD_COUNT")`20=`200;
  654. X`20`20`20POSITION(BEGINNING_OF(ParamBuff));
  655. X`20`20`20PackageFile(ERASE_LINE);
  656. XENDLOOP;
  657. X
  658. X
  659. X!`20Add`20the`20share`20file`20epilogue`20to`20exit`20cleanly
  660. XCreate_Epilogue(WorkBuffer);
  661. XAdd_To_Part(WorkBuffer);
  662. X
  663. X
  664. X!`20Flush`20out`20the`20last`20part`20if`20its`20contents`20are`20not`20empty
  665. XFlushPart;
  666. X
  667. X
  668. X!`20Massage`20the`20contents`20of`20the`20initial`20part`20to`20accurately`20r
  669. Veflect`20the`20number`20of
  670. X!`20Parts`20generated`20and`20to`20give`20the`20appropriate`20instructions`20i
  671. Vf`20more`20than`201`20part
  672. XPOSITION(`20BEGINNING_OF(Part1Buffer)`20);
  673. XPOSITION(`20SEARCH(`20"$!+",`20FORWARD)`20);
  674. XIF`20PartNo`20>`201
  675. X`20`20THEN`09!`20Modify`20the`20inital`20message`20to`20state`20exact`20number
  676. V`20of`20parts
  677. X`20`20`20`20`20POSITION(`20SEARCH(`20STR(Max_Parts),`20FORWARD)`20);
  678. X`20`20`20`20`20ERASE_CHARACTER(3);
  679. X`20`20`20`20`20COPY_TEXT(`20STR(PartNo)`20);
  680. X`20`20ELSE`09!`20Erase`20initial`20attention`20message`20as`20there's`20only
  681. V`201`20part!
  682. X`20`20`20`20`20ERASE_LINE;`20ERASE_LINE;`20ERASE_LINE;
  683. XENDIF;
  684. X
  685. X
  686. X!`20Finally`20flush`20out`20the`20first`20part
  687. XWritePart(Part1Buffer,1);
  688. X
  689. X
  690. X!`20In`20this`20version,`20we`20write`20a`20value`20back`20to`20the`20paramete
  691. Vr`20file`20to`20indicate`20how
  692. X!`20many`20parts`20were`20generated.
  693. XReuseBuffer(WorkBuffer);
  694. XCOPY_TEXT(STR(PartNo));
  695. XWRITE_FILE(WorkBuffer,`20ParamFile);
  696. X
  697. XQUIT;
  698. X$`20if`20.not.`20$status`20then`20$`20goto`20abort
  699. X$`20return
  700. $ call unpack VMS_SHARE.COM;191 2020019812 ""
  701. $!
  702. $ create 'f'
  703. X!`20Version`208.2`20Of`20VMS_SHARE
  704. X!`20`20`20`20`20`20-`208`20Jan`201993,`20`20Andy`20Harper,`20`20Kings`20Colleg
  705. Ve`20London`20UK
  706. X1`20VMS_SHARE
  707. X
  708. XPackage`20a`20series`20of`20files`20into`20a`20form`20suitable`20for`20mailing
  709. V`20out
  710. Xacross`20the`20network.`20
  711. X
  712. XFormat:
  713. X`20`20`20`20`20$`20VMS_SHARE`20filespec`20sharefile`20`5B/qualifiers`5D
  714. X
  715. X2`20Author
  716. X
  717. XThe`20VMS_SHARE`20software`20is`20written`20by:
  718. X
  719. XAndy`20Harper,
  720. XSystems`20Manager,
  721. XComputing`20Centre,
  722. XKings`20College`20London,
  723. XThe`20Strand,
  724. XLondon`20WC2R`202LS
  725. XEngland
  726. X
  727. XThe`20software`20and`20all`20associated`20files`20remains`20the`20copyright
  728. V`20of
  729. Xthe`20author`20but`20may`20be`20freely`20distributed`20without`20charge`20to
  730. V`20any
  731. Xother`20user,`20provided`20that`20all`20copyright`20notices`20are`20retained
  732. Xintact.
  733. X
  734. XNo`20guarantees`20are`20offered`20as`20to`20the`20suitability`20of`20this`20so
  735. Vftware
  736. Xfor`20any`20given`20purpose.`20Any`20errors`20arising`20from`20its`20use`20are
  737. V`20the
  738. Xresponsibility`20of`20the`20user.
  739. X
  740. XBug`20reports`20and`20suggestions`20for`20new`20features`20are`20always`20welc
  741. Vomed
  742. Xbut`20no`20committment`20is`20made`20to`20acting`20on`20them.
  743. X
  744. X2`20Bugs
  745. X
  746. XAt`20this`20time,`20the`20following`20problems`20are`20known`20to`20exist`20wi
  747. Vth`20the
  748. XVMS_SHARE`20package
  749. X
  750. XRecord`20size`20determination.
  751. X
  752. XVMS`20provides`20no`20facility`20for`20the`20utility`20to`20determine`20the
  753. V`20longest
  754. Xrecord`20actually`20stored`20in`20a`20file.`20Where`20the`20record`20length
  755. V`20cannot
  756. Xbe`20determined,`20record`20buffers`20of`20inadequate`20size`20may`20be`20used
  757. V`20and
  758. Xthe`20file`20will`20fail`20to`20be`20packaged.`20All`20cases`20should`20result
  759. V`20in`20an
  760. Xerror`20message,`20although`20these`20may`20not`20appear`20until`20processing
  761. V`20of
  762. Xthe`20file`20begins.
  763. X
  764. XIt`20will`20be`20necessary`20to`20use`20the`20CONVERT`20utility`20on`20such
  765. V`20a`20file`20to
  766. Xensure`20that`20the`20MRS`20field`20of`20the`20file`20header`20is`20set`20to
  767. V`20a`20value`20at
  768. Xleast`20equal`20to`20the`20longest`20record.
  769. X
  770. X2`20Examples
  771. X
  772. X`20`20`20`20`20$`20VMS_SHARE`20*.for`20SOURCE
  773. X`20`20`20`20`20`20`20`20`20`20Package`20all`20the`20files`20ending`20in`20.FOR
  774. V`20into`20the`20sharefile
  775. X`20`20`20`20`20`20`20`20`20`20'SOURCE'.`20Parts`20will`20be`20created`20called
  776. V`20SOURCE.1-OF-n,
  777. X`20`20`20`20`20`20`20`20`20`20SOURCE.2-OF-n`20...`20etc.
  778. X
  779. X`20`20`20`20`20$`20VMS_SHARE`20`5B...`5D*.*`20SBDIR
  780. X`20`20`20`20`20`20`20`20`20`20Package`20all`20the`20files`20in`20all`20subdire
  781. Vctories`20below`20the
  782. X`20`20`20`20`20`20`20`20`20`20current`20one.`20The`20directory`20structure,
  783. V`20relative`20to`20the
  784. X`20`20`20`20`20`20`20`20`20`20current`20directory,`20will`20be`20preserved`20a
  785. Vnd`20recreated`20at
  786. X`20`20`20`20`20`20`20`20`20`20the`20unpacking`20stage.
  787. X
  788. X`20`20`20`20`20$`20VMS_SHARE`20`5B...`5D*.*`20SAVE`20/LOG`20/LONGLINES`20/COMP
  789. VRESS
  790. X`20`20`20`20`20`20`20`20`20`20Package`20all`20the`20files`20in`20all`20subdire
  791. Vctories`20below`20the
  792. X`20`20`20`20`20`20`20`20`20`20current`20one.`20Select`20logging,`20long`20line
  793. V`20support`20and`20run
  794. X`20`20`20`20`20`20`20`20`20`20length`20compression.
  795. X
  796. X2`20Compression_Overview
  797. XThe`20files`20being`20packaged`20may`20optionally`20be`20compressed`20using
  798. V`20one
  799. Xof`20two`20supported`20methods.`20`20The`20first`20method`20is`20run-length
  800. Xencoding,`20where`20sequences`20of`20the`20same`20character`20are`20encoded
  801. V`20into
  802. Xa`20byte`20count,`20the`20second`20method`20is`20a`20modified`20version`20of
  803. V`20the
  804. XLempel-Ziv`20encoding`20that`20looks`20for`20common`20substrings`20and`20encod
  805. Ves
  806. Xthem.
  807. X
  808. XBoth`20forms`20of`20compression`20cause`20significantly`20longer`20packaging
  809. Xtimes,`20with`20lempel-Ziv`20compression`20taking`20the`20longest,`20but
  810. Xgenerally`20producing`20the`20best`20compression.
  811. X
  812. XCompression`20should`20not`20automatically`20be`20selected.`20The`20additional
  813. V
  814. XCPU`20time`20is`20significant`20and`20only`20worth`20using`20if`20there`20is
  815. V`20some
  816. Xadded`20benefit,`20such`20as`20reducing`20disk`20storage`20used`20on`20a`20fil
  817. Ve
  818. Xserver,`20or`20reducing`20the`20network`20bandwidth`20inherent`20in`20sending
  819. V`20a
  820. Xpackage`20to`20several`20users.`20Each`20case`20should`20be`20looked`20at
  821. Xseparately.`20Also,`20some`20kinds`20of`20file`20may`20not`20benefit`20from
  822. Xcompression.
  823. X
  824. XSee`20the`20/COMPRESS`20qualifier`20for`20details`20of`20selecting`20compressi
  825. Von.
  826. X
  827. X2`20Filespec
  828. X
  829. X`20`20`20`20`20`20`20`20`20`20A`20comma-separated`20list`20of`20wildcarded`20f
  830. Vilename
  831. X`20`20`20`20`20`20`20`20`20`20specifications.`20All`20files`20which`20match
  832. V`20the`20pattern(s)
  833. X`20`20`20`20`20`20`20`20`20`20are`20packaged.`20
  834. X
  835. XThere`20are`20some`20restrictions:-
  836. X`20`20`20`20`20-`20The`20output`20share`20file`20name`20may`20not`20be`20inclu
  837. Vded`20in`20the`20list.
  838. X`20`20`20`20`20-`20files`20ending`20in`20.DIR`20(normally`20directory`20files)
  839. V`20are`20ignored.
  840. X`20`20`20`20`20-`20Files`20must`20exist`20in`20or`20below`20the`20current`20di
  841. Vrectory`20(this
  842. X`20`20`20`20`20`20`20restriction`20is`20relaxed`20if`20the`20/NODIRECTORY`20qu
  843. Valifier`20is`20used).
  844. X
  845. XA`20prompt`20is`20issued`20if`20no`20files`20are`20specified.
  846. X
  847. X2`20Logical_Names
  848. X
  849. XSeveral`20logical`20names`20can`20be`20configured`20to`20modify`20the`20defaul
  850. Vts
  851. Xbuilt-in`20to`20the`20VMS_SHARE`20package.`20Where`20a`20corresponding`20comma
  852. Vnd
  853. Xline`20qualifier`20exists,`20this`20will`20override`20the`20setting`20of`20the
  854. V
  855. Xlogical`20name.
  856. X
  857. X3`20SHARE_COMPRESS
  858. X
  859. XThis`20logical`20name`20may`20be`20defined`20with`20a`20TRUE`20or`20FALSE`20va
  860. Vlue,`20or
  861. Xwith`20a`20numeric`20integer`20value`200`20to`202,`20to`20set`20the`20default
  862. V`20for`20the
  863. Xcompression`20option.`20For`20full`20details`20of`20the`20compression`20option
  864. Vs,
  865. Xsee`20the`20/COMPRESS`20qualifier.
  866. X
  867. XIf`20not`20defined,`20no`20additional`20compression`20is`20the`20default.
  868. X
  869. X3`20SHARE_CONFIRM
  870. X
  871. XThis`20logical`20name`20may`20be`20defined`20with`20a`20TRUE`20or`20FALSE`20va
  872. Vlue,`20to
  873. Xset`20the`20default`20value`20for`20the`20file`20selection`20confirmation`20op
  874. Vtion,
  875. Xwhere`20the`20user`20is`20asked`20to`20confirm`20each`20file`20selected.`20For
  876. V`20full
  877. Xdetails`20of`20the`20confirmation`20option,`20see`20the`20/CONFIRM`20qualifier
  878. V.
  879. X
  880. XIf`20not`20defined,`20no`20confirmation`20is`20the`20default.
  881. X3`20SHARE_DEBUG
  882. X
  883. XThis`20logical`20name`20may`20be`20defined`20with`20a`20TRUE`20or`20FALSE`20va
  884. Vlue,`20or`20a
  885. Xnumeric`20integer`20value`200-4,`20to`20set`20the`20default`20value`20for`20th
  886. Ve
  887. Xdebugging`20option.`20For`20full`20details`20of`20the`20debugging`20option,
  888. V`20see
  889. Xthe`20/DEBUG`20qualifier.
  890. X
  891. XIf`20not`20defined,`20no`20debugging`20output`20is`20the`20default.
  892. X
  893. X3`20SHARE_DIRECTORY
  894. X
  895. XThis`20logical`20name`20may`20be`20defined`20with`20a`20TRUE`20or`20FALSE`20va
  896. Vlue,`20to
  897. Xset`20the`20default`20value`20for`20the`20directory`20preservation`20option.
  898. V`20For
  899. Xfull`20details,`20see`20the`20/DIRECTORY`20qualifier.
  900. X
  901. XIf`20not`20defined,`20preserving`20subdirectory`20names`20is`20the`20default.
  902. X
  903. X3`20SHARE_EXCLUDE
  904. X
  905. XThis`20logical`20name`20may`20be`20defined`20witha`20comma`20separated`20list
  906. V`20of
  907. Xdirectory,`20name,`20type`20and`20version`20specifications,`20to`20set`20the
  908. Xdefault`20value`20for`20excluded`20files.`20For`20full`20details,`20see`20the
  909. X/EXCLUDE`20qualifier.
  910. X
  911. XIf`20not`20defined,`20the`20default`20is`20to`20exclude`20no`20files.
  912. X
  913. X3`20SHARE_LOG
  914. X
  915. XThis`20logical`20name`20can`20be`20defined`20with`20a`20TRUE`20or`20FALSE`20va
  916. Vlue,`20or`20a
  917. Xnumeric`20integer`20value`20in`20the`20range`200-2.`20to`20set`20the`20default
  918. V`20value
  919. Xfor`20the`20logging`20option.`20For`20full`20details,`20see`20the`20/LOG`20qua
  920. Vlifier.
  921. X
  922. XIf`20not`20defined,`20then`20no`20logging`20messages`20are`20displayed.
  923. X3`20SHARE_LONGLINES
  924. X
  925. XThis`20logical`20name`20can`20be`20defined`20with`20a`20TRUE`20or`20FALSE`20va
  926. Vlue,`20to
  927. Xset`20the`20default`20value`20for`20the`20long`20lines`20option.`20For`20full
  928. Xdetails,`20see`20the`20/LONGLINES`20qualifier.
  929. X
  930. XThe`20option`20can`20be`20enabled`20only`20if`20running`20VMS`205.4`20or`20gre
  931. Vater.
  932. X
  933. XIf`20not`20defined,`20then`20the`20default`20is`20not`20to`20select`20long`20l
  934. Vine
  935. Xsupport.
  936. X
  937. X3`20SHARE_PACKAGE_INDEX
  938. X
  939. XThis`20logical`20name`20can`20be`20defined`20with`20a`20TRUE`20or`20FALSE`20va
  940. Vlue,`20or`20a
  941. Xfile`20type`20identifier,`20to`20set`20the`20default`20for`20the`20creation
  942. V`20of`20a
  943. Xpackage`20index`20file`20containing`20a`20list`20of`20all`20generated`20part
  944. V`20names.
  945. XThis`20is`20for`20use`20by`20mail`20based`20file`20servers.`20For`20full`20det
  946. Vails,`20see
  947. Xthe`20/PACKAGE_INDEX`20qualifier.
  948. X
  949. XIf`20not`20defined,`20the`20default`20is`20not`20to`20create`20a`20package`20i
  950. Vndex.
  951. X
  952. X3`20SHARE_PART_SIZE
  953. X
  954. XThis`20logical`20name`20can`20be`20defined`20with`20a`20positive`20integer`20v
  955. Value,
  956. Xto`20set`20the`20maximum`20part`20size.`20The`20value`20is`20specified`20in
  957. V`20blocks.
  958. XFor`20full`20details,`20see`20the`20/PART_SIZE`20qualifier.
  959. X
  960. XIf`20not`20defined,`20the`20default`20size`20is`2030`20blocks.
  961. X
  962. X3`20SHARE_REAL_NAME
  963. X
  964. XDefines`20a`20string`20which`20is`20included`20at`20the`20head`20of`20the`20cr
  965. Veated`20share`20file
  966. Xfollowing`20the`20username`20of`20the`20user`20who`20created`20it.`20`20It`20i
  967. Vs`20intended`20that
  968. Xit`20will`20contain`20the`20real`20name`20of`20the`20user`20(For`20example,
  969. V`20"FRED`20SMITH").`20
  970. X
  971. X3`20SHARE_VERSION
  972. X
  973. XThis`20logical`20name`20can`20be`20defined`20with`20a`20TRUE`20or`20FALSE`20va
  974. Vlue,`20to
  975. Xset`20the`20default`20for`20the`20version`20number`20preservation`20option.
  976. V`20For
  977. Xfull`20details,`20see`20the`20/VERSION`20qualifier.
  978. X
  979. XIf`20not`20defined,`20the`20default`20is`20to`20preserve`20version`20numbers.
  980. X
  981. X3`20SHARE_TEMP
  982. X
  983. XDefines`20the`20name`20of`20a`20file`20to`20be`20used`20as`20a`20scratch`20fil
  984. Ve`20during`20the
  985. Xpackaging`20operation.`20
  986. X
  987. XDefaults`20are`20taken`20from`20the`20name`20`20SYS$SCRATCH:SHARE_TEMP.'pid'
  988. V`20where
  989. X'pid'`20is`20the`20current`20Process`20Identification`20number.`20
  990. X
  991. X3`20SHARE_UNPACK_LOG
  992. X
  993. XIf`20defined`20with`20the`20value`20"TRUE",`20then`20logging`20of`20the`20shar
  994. Vefile
  995. Xunpacking`20operation`20is`20turned`20on,`20giving`20a`20display`20of`20each
  996. V`20file`20as`20it`20is
  997. Xunpacked.`20If`20defined`20with`20the`20value`20"FALSE",`20no`20display`20is
  998. Xissued.`20It`20is`20off`20by`20default.
  999. X
  1000. X3`20SHARE_UNPACK_TEMP
  1001. X
  1002. XDefines`20the`20name`20of`20a`20file`20to`20be`20used`20as`20a`20scratch`20fil
  1003. Ve`20during`20the
  1004. Xunpacking`20operation.`20
  1005. X
  1006. XDefaults`20are`20taken`20from`20the`20name`20`20SYS$SCRATCH:SHARE_UNPACK_TEMP.
  1007. V'pid'
  1008. Xwhere`20'pid'`20is`20the`20current`20Process`20Identification`20number.
  1009. X
  1010. X3`20SHARE_UNPACK_VERIFY
  1011. X
  1012. XIf`20defined`20with`20the`20value`20"TRUE",`20then`20verification`20of`20the
  1013. V`20sharefile
  1014. Xunpacking`20operation`20is`20turned`20on.`20If`20defined`20with`20the`20value
  1015. X"FALSE",`20verification`20is`20turned`20off.`20It`20is`20off`20by`20default.
  1016. X
  1017. XNote`20that`20verification`20here`20refers`20to`20DCL`20verfiication`20of`20th
  1018. Ve
  1019. Xshare`20file`20as`20the`20commands`20within`20it`20are`20executed.`20As`20such
  1020. V,`20the
  1021. Xuser`20must`20have`20read`20access`20to`20the`20file`20for`20this`20logical
  1022. V`20name`20to
  1023. Xbe`20effective.
  1024. X
  1025. X3`20SHARE_VERIFY
  1026. X
  1027. XIf`20defined`20with`20the`20value`20"TRUE"`20then`20verification`20of`20the
  1028. V`20VMS_SHARE
  1029. Xprocedure`20is`20turned`20on.`20If`20defined`20with`20"FALSE",`20verification
  1030. V`20is`20turned
  1031. Xoff.`20It`20is`20off`20by`20default.
  1032. X
  1033. XNote`20that`20verification`20here`20refers`20to`20DCL`20verfiication`20of`20th
  1034. Ve
  1035. XVMS_SHARE`20procedure`20as`20the`20commands`20within`20it`20are`20executed.
  1036. V`20As
  1037. Xsuch,`20the`20user`20must`20have`20read`20access`20to`20the`20file`20for`20thi
  1038. Vs`20logical
  1039. Xname`20to`20be`20effective.
  1040. X
  1041. X2`20Old_Logical_Names
  1042. X
  1043. XThese`20logical`20names`20are`20still`20recognized`20but`20have`20been`20super
  1044. Vceded.
  1045. XThey`20may`20be`20withdrawn`20in`20a`20future`20release`20of`20the`20software.
  1046. V
  1047. X
  1048. X3`20SHARE_EXCLUDE_DIRS
  1049. X
  1050. XIf`20defined`20with`20a`20comma`20separated`20list`20of`20directory`20specific
  1051. Vations,
  1052. Xenclosed`20in`20quotes,`20any`20file`20matching`20any`20of`20the`20listed`20di
  1053. Vrectories`20will
  1054. Xbe`20excluded`20from`20the`20packaging`20operation.
  1055. X
  1056. XWildcards`20are`20not`20permitted;`20all`20directories`20must`20be`20listed
  1057. V`20in`20full.`20
  1058. X
  1059. XNote`20that`20this`20qualifier,`20while`20still`20valid,`20is`20redundant`20an
  1060. Vd`20has`20been
  1061. Xfunctionally`20replaced`20by`20the`20SHARE_EXCLUDE`20logical`20name.`20Unlike
  1062. XSHARE_EXCLUDE`20however,`20use`20of`20the`20/EXCLUDE`20qualifier`20adds`20to,
  1063. Xrather`20than`20overriding,`20the`20effect`20of`20this`20logical`20name.
  1064. X
  1065. X3`20SHARE_EXCLUDE_FILES
  1066. X
  1067. XIf`20defined`20with`20a`20comma`20separated`20list`20of`20file`20names`20(NAME
  1068. V`20and`20TYPE
  1069. Xonly)`20then`20any`20file`20whose`20combined`20name`20and`20type`20matches`20a
  1070. Vny`20of`20those
  1071. Xlisted`20will`20be`20excluded`20from`20the`20packaging`20operation.
  1072. X
  1073. XWildcards`20are`20not`20permitted.
  1074. X
  1075. XNote`20that`20this`20qualifier,`20while`20still`20valid,`20is`20redundant`20an
  1076. Vd`20has`20been
  1077. Xfunctionally`20replaced`20by`20the`20SHARE_EXCLUDE`20logical`20name.`20Unlike
  1078. XSHARE_EXCLUDE`20however,`20use`20of`20the`20/EXCLUDE`20qualifier`20adds`20to,
  1079. Xrather`20than`20overriding,`20the`20effect`20of`20this`20logical`20name.
  1080. X
  1081. X3`20SHARE_EXCLUDE_NAMES
  1082. X
  1083. XIf`20defined`20with`20a`20comma`20separated`20list`20of`20names,`20enclosed
  1084. V`20in`20quotes,`20any
  1085. Xfile`20whose`20NAME`20part`20matches`20any`20of`20the`20listed`20names`20will
  1086. V`20be`20excluded
  1087. Xfrom`20the`20packaging`20operation.`20
  1088. X
  1089. XWildcards`20are`20not`20permitted.
  1090. X
  1091. XNote`20that`20this`20qualifier,`20while`20still`20valid,`20is`20redundant`20an
  1092. Vd`20has`20been
  1093. Xfunctionally`20replaced`20by`20the`20SHARE_EXCLUDE`20logical`20name.`20Unlike
  1094. XSHARE_EXCLUDE`20however,`20use`20of`20the`20/EXCLUDE`20qualifier`20adds`20to,
  1095. Xrather`20than`20overriding,`20the`20effect`20of`20this`20logical`20name.
  1096. X
  1097. X3`20SHARE_EXCLUDE_TYPES
  1098. X
  1099. XIf`20defined`20with`20a`20comma`20separated`20list`20of`20file`20types,`20encl
  1100. Vosed`20in
  1101. Xquotes,`20any`20file`20whose`20TYPE`20part`20matches`20any`20of`20the`20listed
  1102. V`20types`20will`20be
  1103. Xexcluded`20from`20the`20packaging`20operation.`20
  1104. X
  1105. XWildcards`20are`20not`20permitted.
  1106. X
  1107. XNote`20that`20this`20qualifier,`20while`20still`20valid,`20is`20redundant`20an
  1108. Vd`20has`20been
  1109. Xfunctionally`20replaced`20by`20the`20SHARE_EXCLUDE`20logical`20name.`20Unlike
  1110. XSHARE_EXCLUDE`20however,`20use`20of`20the`20/EXCLUDE`20qualifier`20adds`20to,
  1111. Xrather`20than`20overriding,`20the`20effect`20of`20this`20logical`20name.
  1112. X
  1113. X2`20Operational_Notes
  1114. X
  1115. XVMS_SHARE`20packages`20all`20the`20specified`20files`20into`20one`20or`20more
  1116. V`20parts`20having
  1117. Xa`20common`20filename`20prefix`20and`20a`20suffix`20of`20the`20form
  1118. X
  1119. X`20`20`20nnn-OF-mmm
  1120. X
  1121. Xwhere`20nnn`20is`20the`20part`20number`20and`20mmm`20is`20the`20total`20number
  1122. V`20of`20parts.
  1123. XMultiple`20parts`20will`20be`20created`20if`20the`20total`20size`20of`20a`20pa
  1124. Vrt`20exceeds`20the
  1125. Xspecified`20maximum`20size`20(taken`20from`20the`20logical`20SHARE_PART_SIZE
  1126. V`20or
  1127. Xfrom`20the`20qualifier`20/PART_SIZE).`20
  1128. X
  1129. XEach`20part`20is`20encoded`20so`20that`20it`20can`20survive`20destruction`20wh
  1130. Ven`20mailed
  1131. Xacross`20the`20network`20through`20unfriendly`20mailers`20which`20wrap`20lines
  1132. V,
  1133. Xtranspose`20characters`20etc.`20A`20checksum`20is`20included`20which`20can`20d
  1134. Vetect`20damage
  1135. Xat`20the`20receiving`20end.`20
  1136. X
  1137. XTo`20unpack,`20all`20parts`20must`20be`20concatenated`20in`20order`20and`20the
  1138. V`20whole
  1139. Xexecuted`20as`20a`20command`20procedure.`20It`20is`20preferable`20to`20be`20in
  1140. V`20an`20empty
  1141. Xscratch`20directory`20when`20doing`20this.`20If`20the`20parts`20have`20been
  1142. V`20received`20via
  1143. Xmail`20then`20it`20is`20NOT`20necessary`20to`20remove`20the`20mail`20headers
  1144. V`20between`20parts
  1145. Xbefore`20concatenating`20them.`20`20The`20unpack`20code`20will`20ignore`20them
  1146. V`20if`20present.
  1147. XHowever,`20mail`20headers`20should`20be`20removed`20from`20the`20initial`20par
  1148. Vt.`20
  1149. X
  1150. X2`20Qualifiers
  1151. X
  1152. XA`20number`20of`20qualifiers`20may`20be`20specified`20to`20override`20the`20de
  1153. Vfault`20settings
  1154. Xand`20specify`20some`20options.
  1155. X
  1156. X/BACKUP
  1157. X
  1158. X`20`20/BACKUP
  1159. X
  1160. X`20`20Specifies`20that`20files`20selected`20on`20the`20basis`20of`20date`20(vi
  1161. Va`20the
  1162. X`20`20/BEFORE`20and/or`20/SINCE`20qualifiers)`20should`20use`20the`20`60last
  1163. V`20backup
  1164. X`20`20date'`20as`20the`20basis`20of`20selection.
  1165. X
  1166. X`20`20If`20any`20combination`20of`20/BACKUP,`20/CREATED,`20EXPIRED`20and`20/MO
  1167. VDIFIED
  1168. X`20`20are`20specified`20together,`20then`20only`20the`20last`20one`20specified
  1169. V`20takes
  1170. X`20`20effect.
  1171. X
  1172. X`20`20The`20default`20is`20to`20use`20the`20`60last`20modified`20date'.
  1173. X
  1174. X/BEFORE
  1175. X
  1176. X`20`20/BEFORE`5B=date`5D
  1177. X
  1178. X`20`20Selects`20only`20files`20with`20access`20dates`20before`20the`20date`20s
  1179. Vpecified.
  1180. X`20`20By`20default,`20the`20date`20does`20not`20have`20to`20be`20before`20any
  1181. V`20specific
  1182. X`20`20date`20to`20be`20selected.
  1183. X
  1184. X`20`20The`20date`20specification`20can`20be`20any`20absolute`20or`20delta`20ti
  1185. Vme
  1186. X`20`20combination`20normally`20acceptable`20to`20VMS`20with`20ONE`20exception
  1187. V`20-`20it
  1188. X`20`20may`20not`20contain`20any`20spaces.`20`20To`20enter`20a`20combined`20dat
  1189. Ve`20and`20time,
  1190. X`20`20use`20a`20colon`20to`20separate`20to`20two`20E.G.`20`2010-AUG-1992:15:00
  1191. V:00.00.
  1192. X`20`20Any`20missing`20field`20is`20taken`20to`20be`20that`20of`20the`20CURRENT
  1193. V`20time.
  1194. +-+-+-+-+-+-+-+-  END  OF PART 4 +-+-+-+-+-+-+-+-
  1195.