home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #26 / NN_1992_26.iso / spool / vmsnet / sources / 437 < prev    next >
Encoding:
Internet Message Format  |  1992-11-10  |  35.5 KB

  1. Path: sparky!uunet!stanford.edu!agate!spool.mu.edu!sol.ctr.columbia.edu!usc!news.service.uci.edu!unogate!mvb.saic.com!vmsnet-sources
  2. Newsgroups: vmsnet.sources
  3. From: "would rather be skiing ..." <DWING@UH01.Colorado.EDU>
  4. Subject: DSNlink_NEW.COM, V1.35, part 01/01
  5. Date: Wed, 11 Nov 1992 00:54:55 GMT
  6. Message-ID: <9086330@MVB.SAIC.COM>
  7. Lines: 943
  8. Approved: Mark.Berryman@Mvb.Saic.Com
  9.  
  10. Submitted-by: "would rather be skiing ..." <DWING@UH01.Colorado.EDU>
  11. Posting-number: Volume 3, Issue 242
  12. Archive-name: dsnlink_new/part01
  13. Supersedes: dsnlink_new: Volume 3, Issue 90,190,210
  14.  
  15. Newest version of DSNlink_NEW.COM.  Corrects bug with the code to
  16. automatically re-submit itself.
  17.  
  18. DSNlink_NEW.COM, V1.35:
  19.  
  20.   Get list of new DSNlink articles, and mail them to a user or group of
  21.   users.  (DSNlink is a service offered by DEC for software support.)
  22.  
  23. -Dan Wing, dwing@uh01.colorado.edu or wing_d@ucolmcc.bitnet (DGW11)
  24.  Systems Programmer, University Hospital, Denver
  25.  
  26. $! ------------------ CUT HERE -----------------------
  27. $ v='f$verify(f$trnlnm("SHARE_UNPACK_VERIFY"))'
  28. $!
  29. $! This archive created by VMS_SHARE Version 8.1
  30. $!   On  4-NOV-1992 14:40:37.65   By user DWING (DWING@UH01.Colorado.EDU)
  31. $!
  32. $! The VMS_SHARE software that created this archive
  33. $!    was written by  Andy Harper, Kings College London UK
  34. $!    -- September 1992
  35. $!
  36. $! Credit is due to these people for their original ideas:
  37. $!    James Gray, Michael Bednarek 
  38. $!
  39. $! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER
  40. $! AND EXECUTE AS A COMMAND PROCEDURE  (  @name  )
  41. $!
  42. $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING:
  43. $!       1. DSNLINK_NEW.COM;188
  44. $!
  45. $set="set"
  46. $set symbol/scope=(nolocal,noglobal)
  47. $f=f$parse("SHARE_UNPACK_TEMP","SYS$SCRATCH:."+f$getjpi("","PID"))
  48. $e="write sys$error  ""%UNPACK"", "
  49. $w="write sys$output ""%UNPACK"", "
  50. $ if .not. f$trnlnm("SHARE_UNPACK_LOG") then $ w = "!"
  51. $ ve=f$getsyi("version")
  52. $ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto start
  53. $ e "-E-OLDVER, Must run at least VMS 4.4"
  54. $ v=f$verify(v)
  55. $ exit 44
  56. $unpack: subroutine ! P1=filename, P2=checksum, P3=attributes
  57. $ if f$search(P1) .eqs. "" then $ goto file_absent
  58. $ e "-W-EXISTS, File ''P1' exists. Skipped."
  59. $ delete 'f'*
  60. $ exit
  61. $file_absent:
  62. $ if f$parse(P1) .nes. "" then $ goto dirok
  63. $ dn=f$parse(P1,,,"DIRECTORY")
  64. $ w "-I-CREDIR, Creating directory ''dn'"
  65. $ create/dir 'dn'
  66. $ if $status then $ goto dirok
  67. $ e "-E-CREDIRFAIL, Unable to create ''dn' File skipped."
  68. $ delete 'f'*
  69. $ exit
  70. $dirok:
  71. $ w "-I-UNPACK, Unpacking file ''P1'"
  72. $ n=P1
  73. $ if P3 .nes. "" then $ n=f
  74. $ if .not. f$verify() then $ define/user sys$output nl:
  75. $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT 'f'/OUT='n'
  76. PROCEDURE GetHex LOCAL x1,x2;x1:=INDEX(t,ERASE_CHARACTER(1))-1;x2:=INDEX(t,
  77. ERASE_CHARACTER(1))-1;RETURN 16*x1+x2;ENDPROCEDURE;
  78. PROCEDURE SkipPartsep LOOP EXITIF INDEX(ERASE_LINE,"-+-+-+-+-+-+-+-+")=1;
  79. ENDLOOP;ENDPROCEDURE;
  80. PROCEDURE ExpandChar CASE CURRENT_CHARACTER FROM ' ' TO 'z' ["&"]
  81. :ERASE_CHARACTER(1);x:=GetHex;COPY_TEXT(ASCII(GetHex)*x);["`"]:ERASE_CHARACTER(
  82. 1);COPY_TEXT(ASCII(GetHex));[" "]:ERASE_CHARACTER(1);[OUTRANGE,INRANGE]
  83. :MOVE_HORIZONTAL(1);ENDCASE;ENDPROCEDURE;PROCEDURE ProcessLine s:=
  84. ERASE_CHARACTER(1);LOOP EXITIF CURRENT_OFFSET>=LENGTH(CURRENT_LINE);ExpandChar;
  85. ENDLOOP;IF s="V" THEN APPEND_LINE;ENDIF;ENDPROCEDURE;
  86. PROCEDURE AdvanceLine MOVE_HORIZONTAL(-CURRENT_OFFSET);MOVE_VERTICAL(1);
  87. ENDPROCEDURE;PROCEDURE Decode POSITION(BEGINNING_OF(b));LOOP EXITIF MARK(NONE)=
  88. END_OF(b);IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+-")=1 THEN SkipPartSep;
  89. ELSE ProcessLine;AdvanceLine;ENDIF;ENDLOOP;ENDPROCEDURE;SET(FACILITY_NAME,
  90. "UNPACK");SET(SUCCESS,OFF);SET(INFORMATIONAL,OFF);t:="0123456789ABCDEF";f:=
  91. GET_INFO(COMMAND_LINE,"file_name");b:=CREATE_BUFFER(f,f);Decode;WRITE_FILE(b,
  92. GET_INFO(COMMAND_LINE,"output_file"));QUIT;
  93. $ if p3 .eqs. "" then $ goto dl
  94. $ open/write fdl &f
  95. $ write fdl "RECORD"
  96. $ write fdl P3
  97. $ close fdl
  98. $ w "-I-CONVRFM, Converting record format to ", P3
  99. $ convert/fdl=&f &f-1 &P1
  100. $dl: delete 'f'*
  101. $ if P2 .eqs. "" then $ goto ckskip
  102. $ checksum 'P1'
  103. $ if checksum$checksum .nes. P2 then $ -
  104.   e "-E-CHKSMFAIL, Checksum of ''P1' failed."
  105. $ exit
  106. $ckskip: e "-W-CHKSUMSKIP, checksum validation unavailable for ''P1'"
  107. $ endsubroutine
  108. $start:
  109. $!
  110. $ create 'f'
  111. X$!&0220DSNlink_NEW.COM
  112. X$`20VERIFY`20=`20'F$VERIFY(F$TRNLNM("DSNlinkNEW_VERIFY"))'
  113. X$`20IF`20P1`20.EQS.`20"?"`20THEN`20SET`20VERIFY
  114. X$!
  115. X$!&0220FUNCTION:
  116. X$!&0420Get`20list`20of`20new`20DSNlink`20articles,`20and`20mail`20them`20to
  117. V`20a`20user`20or`20group`20of
  118. X$!&0420users.&0220(DSNlink`20is`20a`20service`20offered`20by`20DEC`20for`20sof
  119. Vtware`20support.)
  120. X$!
  121. X$!&0220PARAMETERS:
  122. X$!&0520P1`20-`20`5Bopt`5D&0220maximum`20retry`20count.&0220DEFAULT`20=`205
  123. X$!&0520P2`20-`20`5Bopt`5D&0220username`20to`20send`20mail`20to.&0220DEFAULT
  124. V`20=`20current`20user
  125. X$!&0520P3`20-`20`5Bopt`5D&0220Since`20criteria.&0220DEFAULT`20=`20YESTERDAY
  126. X$!&0520P4`20-`20`5Bopt`5D&0220databases`20to`20search.&0220DEFAULT`20=`20list
  127. V`20of`20default`20
  128. X$!&1620databases`20are`20used`20(see`20code`20below)
  129. X$!&0520P5`20-`20`5Bopt`5D&0220If`20TRUE`20and`20no`20new`20articles,`20don't
  130. V`20send`20Email.
  131. X$!&1620DEFAULT`20=`20FALSE`20(send`20Email`20even`20if`20there`20are`20no
  132. X$!&1620new`20articles).
  133. X$!&0520P6`20-`20`5Bopt`5D&0220Specifies`20when`20DSNlink_NEW`20should`20be`20r
  134. Ve-submitted.
  135. X$!&1120Should`20be`20a`20delta`20time.&0220If`20blank,`20and`20running`20batch
  136. V,
  137. X$!&1120DSNlink_NEW.COM`20will`20not`20be`20re-submitted`20to`20batch.
  138. X$!
  139. X$!&0520If`20invoked`20interactively,`20DSNlink_NEW.COM`20will`20prompt`20the
  140. V`20user`20for
  141. X$!&0520all`20the`20non-specified`20parameters.
  142. X$!
  143. X$!&0220PRIVILEGES:
  144. X$!&0520NONE,`20except`20if`20the`20System`20Manager`20has`20established`20ACLs
  145. V`20on`20the
  146. X$!&0520"DSN`20ITS"`20function,`20or`20on`20the`20DSN$BATCH`20queue`20if`20you
  147. V`20submit`20to`20batch.
  148. X$!
  149. X$!&0220ENVIRONMENT:
  150. X$!&0520VMS`20version`205.0`20or`20greater`20required
  151. X$!&0720If`20this`20node`20isn't`20the`20DCN,`20version`205.2`20or`20greater
  152. V`20is`20required`20to`20
  153. X$!&0920check`20if`20the`20DCN`20is`20running`20DSNlink.
  154. X$!&0520DSNlink`20for`20VMS,`20version`201.1`20or`201.1-1
  155. X$!
  156. X$!&4C2A
  157. X$!*
  158. X$!*&0220SITE-DEPENDENT`20LOGICAL`20NAME`20SETTINGS:
  159. X$!*&0220
  160. X$!*&0220These`20logical`20names`20can`20be`20in`20any`20logical`20name`20table
  161. V.&0220If`20you`20start`20
  162. X$!*&0220DSNlink_NEW`20interactively,`20it`20will`20prompt`20you`20for`20these
  163. V`20settings,`20and`20
  164. X$!*&0220your`20logicals`20will`20control`20the`20default`20values`20(indicated
  165. V`20in`20brackets).
  166. X$!*
  167. X$!*&0220The`20following`20precedence`20is`20observed`20by`20DSNlink_NEW:
  168. X$!*&0520first`20:`20parameters`20(on`20the`20command`20line,`20or`20via`20/PAR
  169. VAMETERS`20if`20batch)
  170. X$!*&0620.&0420:`20user-supplied`20responses`20to`20prompts`20(only`20interacti
  171. Vve)
  172. X$!*&0620.&0420:`20logical`20names
  173. X$!*&0520last&0220:`20hard-coded`20defaults
  174. X$!*
  175. X$!*&0320Logical`20name&0A20Description
  176. X$!*&0320&0C2D&0A20&0B2D
  177. X$!*&0320DSNlinkNEW_RETRY&0620Retry`20limit.&0220This`20can`20be`20over-ridden
  178. V`20by`20specifying
  179. X$!*&1920the`20retry-limit`20(if`20Interactive),`20or`20submitting`20to
  180. X$!*&1920batch`20with`20parameter`20P1.
  181. X$!*&0320DSNlinkNEW_MAIL_USER&0220The`20usernames`20to`20receive`20list`20of
  182. V`20new`20DSNlink
  183. X$!*&1920articles.&0220This`20can`20be`20over-ridden`20by`20specifying
  184. X$!*&1920the`20usernames`20(if`20Interactive),`20or`20submitting`20to
  185. X$!*&1920batch`20with`20parameter`20P2.&0220Default`20is`20the`20current
  186. X$!*&1920username.
  187. X$!*&0320DSNlinkNEW_SINCE&0620Since`20value.&0220Can`20specify`20delta`20time
  188. V`20(such`20as
  189. X$!*&1920TODAY-7-00:00:00`20for`20a`20week`20ago).&0220This`20can`20be
  190. X$!*&1920over-ridden`20by`20specifying`20the`20since`20value`20(if
  191. X$!*&1920Interactive),`20or`20submitting`20to`20batch`20with`20parameter
  192. X$!*&1920P3.&0220Default`20is`20YESTERDAY.
  193. X$!*&0320DSNlinkNEW_DATABASES&0220The`20DSNlink`20databases`20that`20you`20have
  194. V`20access`20to,`20or
  195. X$!*&1920are`20interested`20in.&0220This`20can`20be`20over-ridden`20by
  196. X$!*&1920specifying`20another`20list`20(if`20Interactive),`20or`20
  197. X$!*&1920submitting`20to`20batch`20with`20parameter`20P4.&0220Default`20
  198. X$!*&1920databases`20are`20VMS,`20VMS-RN-NF-DOC`20(to`20which`20every
  199. X$!*&1920site`20running`20`60DSNlink`20for`20VMS'`20has`20access).
  200. X$!*&0320DSNlinkNEW_SUPRESS&0420If`20TRUE,`20supress`20Email`20if`20there`20are
  201. V`20no`20new`20
  202. X$!*&1920articles.&0220This`20can`20be`20over-ridden`20by`20specifying
  203. X$!*&1920the`20desired`20option`20(if`20Interactive),`20or`20submitting
  204. X$!*&1920to`20batch`20with`20parameter`20P5.&0220Default`20is`20FALSE`20if`20
  205. X$!*&1920Interactive,`20TRUE`20if`20Batch.
  206. X$!*&0320DSNlinkNEW_AFTER&0620Specify`20default`20time`20to`20re-submit`20to
  207. V`20batch.
  208. X$!*&1920Default`20is`20TOMRROW+01:00:00`20(1:00am`20tomorrow`20
  209. X$!*&1920morning).
  210. X$!*
  211. X$!*&0320DSNlinkNEW_PROMPT&0520If`20TRUE,`20prompt`20user`20for`20values.&0220I
  212. Vf`20FALSE,`20use
  213. X$!*&1920the`20default`20values.&0220Only`20used`20if`20Interacative.
  214. X$!*&1920Default`20is`20TRUE.
  215. X$!*&0320DSNlinkNEW_RETRY_WAIT`20Delta`20time`20to`20wait`20between`20retries.
  216. V&0220This`20can`20only
  217. X$!*&1920be`20specified`20with`20a`20logial`20name.&0220You`20may`20need`20to
  218. V`20
  219. X$!*&1920increase`20this`20value`20at`20your`20site.&0220The`20default
  220. X$!*&1920value`20is`2030`20seconds,`20which`20usually`20gives`20enough`20
  221. X$!*&1920time`20for`20the`20DSNlink`20software`20and`20modem`20to`20settle
  222. X$!*&1920between`20retries.
  223. X$!*&0320DSNlinkNEW_VERIFY&0520If`20TRUE,`20then`20DCL`20verification`20is`20tu
  224. Vrned`20on.&0220
  225. X$!*&1920Default`20is`20FALSE.
  226. X$!*
  227. X$!&4C2A
  228. X$!
  229. X$!&0220EXAMPLES:
  230. X$!
  231. X$!&0420The`20following`20code`20fragment,`20in`20you`20nightly`20system-manage
  232. Vment`20batch`20job,
  233. X$!&0420will`20Email`20you`20when`20there`20are`20new`20articles`20any`20of`20t
  234. Vhe`20databases
  235. X$!&0420VMS,`20VMS-RN-NF-DOC,`20or`20DSNLINK-DOC.
  236. X$!&0620$`20DEFINE`20DSNlinkNEW_DATABASES&0220"VMS,VMS-RN-NF-DOC,DSNLINK-DOC"
  237. X$!&0620$`20DEFINE`20DSNlinkNEW_MAIL_USER&0220SYSTEM
  238. X$!&0620$`20DEFINE`20DSNlinkNEW_SINCE&0620YESTERDAY
  239. X$!&0620$`20DEFINE`20DSNlinkNEW_SUPRESS&0420TRUE
  240. X$!&0620$`20@DSNLINK_NEW`20
  241. X$!
  242. X$!&0420Or,`20if`20you`20only`20want`20to`20see`20new`20articles`20once`20a`20w
  243. Veek,`20put`20the`20following
  244. X$!&0420code`20into`20your`20nightly`20system-management`20batch`20job:
  245. X$!&0620$`20IF`20F$CVTIME(,,"WEEKDAY")`20.EQS.`20"Sunday"
  246. X$!&0620$`20THEN
  247. X$!&0620$&0320DEFINE`20DSNlinkNEW_SINCE&0620"TODAY-7-00:00:00"
  248. X$!&0620$&0320DEFINE`20DSNlinkNEW_SUPRESS&0420TRUE
  249. X$!&0620$&0320DEFINE`20DSNlinkNEW_DATABASES&0220"VMS,VMS-RN-NF-DOC,DSNLINK-DOC"
  250. V
  251. X$!&0620$&0320@DSNLINK_NEW
  252. X$!&0620$`20ENDIF
  253. X$!
  254. X$!&0420The`20following`20command,`20entered`20from`20the`20DCL`20prompt,`20wil
  255. Vl`20run`20the`20
  256. X$!&0420program.&0220It`20will`20prompt`20you`20for`20all`20necessary`20informa
  257. Vtion.&0220If`20you`20
  258. X$!&0420tell`20it`20to`20run`20in`20Batch,`20you`20wont`20have`20to`20wait`20fo
  259. Vr`20DSNlink_NEW`20to
  260. X$!&0420retreive`20the`20articles.
  261. X$!&0620$`20@DSNLINK_NEW
  262. X$!
  263. X$!!!!!
  264. X$!
  265. X$!&0220Idea`20for`20this`20code`20taken`20from`20DSNlink`20article`20"`5BDSNli
  266. Vnk`5D`20V1.n`20How`20To`20Get`20
  267. X$!&0220Daily`20List`20of`20New`20Database`20Articles"`20in`20the`20DSNLINK`20d
  268. Vatabase.
  269. X$!
  270. X$!&0220Copyright`20`A9`201991,`201992`20by`20Dan`20Wing.&0220This`20code`20may
  271. V`20be`20freely`20distributed`20
  272. X$!&0220and`20modified`20for`20no`20commercial`20gain`20as`20long`20as`20this
  273. V`20copyright`20notice`20is`20
  274. X$!&0220retained.&0220This`20program`20is`20supplied`20'as-is',`20and`20with
  275. V`20no`20warranty.
  276. X$!
  277. X$!&0220Written`20by`20Dan`20Wing,`20Systems`20Programmer,`20University`20Hospi
  278. Vtal,`20Denver.
  279. X$!&0220<DWING@UH01.Colorado.EDU>`20or`20<WING@Eisner.DECUS.ORG>
  280. X$!
  281. X$`20NO_MORE_HELP`20=`20'F$VERIFY(F$TRNLNM("DSNlinkNEW_VERIFY"))'&0420!`20for
  282. V`20"?"`20help
  283. X$!
  284. X$!!!!!
  285. X$!
  286. X$!&0220REVERSE`20CHRONOLOGICAL`20MODIFICATION`20HISTORY
  287. X$!
  288. X$!&0220EDIT`20DATE&0220VERS&0220BY&0320DESCRIPTION
  289. X$!&0220&092D&0220----&0220---&0220&272D
  290. X$!&03204-NOV-92&0220135&0320DGW&0220Correct`20automatic-resubmit`20code`20to
  291. V`20resubmit`20after
  292. X$!&1820the`20first`20time.
  293. X$!&03203-NOV-92&0220134&0320DGW&0220Send`20Email`20if`20DSNlink`20isn't`20avai
  294. Vlable`20when`20the`20batch
  295. X$!&1820job`20runs.
  296. X$!&022031-OCT-92&0220133&0320DGW&0220Allow`20DETACHED`20execution`20(for`20DEC
  297. Vscheduler)
  298. X$!&03206-OCT-92&0220132&0320DGW&0220Only`20prompt`20user`20if`20necessary.
  299. X$!&03205-OCT-92&0220131&0320DGW&0220Allow`20auto-submit`20if`20logical`20DSNli
  300. VnkNEW_AFTER`20is
  301. X$!&1820defined,`20or`20if`20user`20specifies`20a`20time`20when`20prompted.
  302. X$!&03201-OCT-92&02201302b`20DGW&0220Invalid`20syntax`20on`20SUBMIT`20corrected
  303. V.&0220Handle`20case`20
  304. X$!&1820where`20DAN`20isn't`20clustered`20with`20the`20DCN.
  305. X$!&022026-SEP-92&0220130&0320DGW&0220Fixed`20to`20operate`20correctly`20if`20w
  306. Ve're`20running`20on`20a`20DAN
  307. X$!&1820instead`20of`20the`20DCN,`20and`20still`20sense`20if`20DSNlink`20is`20
  308. X$!&1820operating`20on`20the`20DCN.&0220Handle`20DSNlink`20error`20'unknown
  309. X$!&1820database'`20as`20a`20special`20case.&0220Logical`20names`20added.
  310. X$!&1820Don't`20Email`20if`20there's`20no`20new`20articles.&0220(From`20Andy
  311. X$!&1820Harper,`20<udaa055@elm.cc.kcl.ac.uk>).&0220Also`20cosmetic`20
  312. X$!&1820changes,`20error`20handling,`20parameter`20validation,`20and
  313. X$!&1820documentation.
  314. X$!&022014-SEP-92&0220120&0320DGW&0220Break`20list`20of`20databases`20at`2080
  315. V`20columns`20(symbol`20WIDTH)
  316. X$!&1820Some`20cosmetic`20changes.
  317. X$!&03206-JUL-92&0220111&0320DGW&0220Only`20need`20edit`20110`20if`20INTERACTIV
  318. VE.
  319. X$!&022030-JUN-92&0220110&0320DGW&0220Added`20SET`20SCREEN/noPAGE,`20as`20DIR
  320. V`20would`20loop`20forever
  321. X$!&1820if`20more`20than`20a`20screenful`20of`20subjects`20was`20displayed
  322. X$!&1820(from`20Rand`20Hall,`20<rand@merrimack.edu>)
  323. X$!&03202-FEB-92&0220006&0320DGW&0220Use`20RESTART_VALUE`20to`20indicate`20how
  324. V`20many`20
  325. X$!&1820retries`20have`20been`20done.
  326. X$!&022027-JAN-92&0220005&0320DGW&0220If`20interactive,`20prompt`20for`20all
  327. V`20parameters,`20and`20
  328. X$!&1820allow`20user`20to`20submit`20to`20batch.
  329. X$!&022017-JAN-92&0220004&0320DGW&0220Retry`20limit`20=`205
  330. X$!&03205-JAN-92&0220003&0320DGW&0220The`20"NO"`20after`20the`20"DSN`20ITS"`20m
  331. Vust`20be`20there`20in`20case`20
  332. X$!&1820DSNlink`20enters`20its`20question-mode.&0220DSNlink`20was`20
  333. X$!&1820returning`20"Your`20response`20is`20ambiguous.`20Please`20
  334. X$!&1820re-enter"`20if`20the`20"NO"`20was`20in`20the`20DSN$ITS_INIT`20file.
  335. X$!&03204-JAN-92&0220002&0320DGW&0220Add`20check`20for`20"%DSN-E-"`20errors`20a
  336. Vs`20well`20as`20"%DSN-F-"`20
  337. X$!&1820errors`20to`20decide`20to`20retry.
  338. X$!&022031-DEC-91&0220001&0320DGW&0220Created.
  339. X$!&0220
  340. X$!
  341. X$&4A21
  342. X$
  343. X$&0220SET`20SYMBOL/SCOPE=(noGLOBAL)
  344. X$
  345. X$&0220ON`20WARNING`20THEN`20GOTO`20_ERROR
  346. X$&0220ON`20CONTROL_Y`20THEN`20GOTO`20_ABORT
  347. X$
  348. X$&0220DSNlink_NEW$VERSION`20=`20"V1.35"
  349. X$
  350. X$&0220WRITE`20SYS$OUTPUT`20F$FAO("!/DSNlink_NEW&0220version`20!AS!/",`20DSNlin
  351. Vk_NEW$VERSION)
  352. X$
  353. X$!
  354. X$!!!`20Get`20default`20values
  355. X$!
  356. X$
  357. X$&0220DSN_RETRY_DEFAULT`20=`205
  358. X$&0220IF`20F$TRNLNM("DSNlinkNEW_RETRY")`20.NES.`20""`20THEN`20-
  359. X&0520DSN_RETRY_DEFAULT`20=`20F$TRNLNM("DSNlinkNEW_RETRY")
  360. X$
  361. X$&0220MAIL_USER_DEFAULT`20=`20F$EDIT(F$GETJPI(0,"USERNAME"),"TRIM")
  362. X$&0220IF`20F$TRNLNM("DSNlinkNEW_MAIL_USER")`20.NES.`20""`20THEN`20-
  363. X&0520MAIL_USER_DEFAULT`20=`20F$TRNLNM("DSNlinkNEW_MAIL_USER")
  364. X$
  365. X$&0220DSN_SINCE_DEFAULT`20=`20"YESTERDAY"
  366. X$&0220IF`20F$TRNLNM("DSNlinkNEW_SINCE")`20.NES.`20""`20THEN`20-
  367. X&0520DSN_SINCE_DEFAULT`20=`20F$TRNLNM("DSNlinkNEW_SINCE")
  368. X$
  369. X$&0220DSN_DATABASES_DEFAULT`20=`20"vms,vms-rn-nf-doc"
  370. X$&0220IF`20F$TRNLNM("DSNlinkNEW_DATABASES")`20.NES.`20""`20THEN`20-
  371. X&0520DSN_DATABASES_DEFAULT`20=`20F$TRNLNM("DSNlinkNEW_DATABASES")
  372. X$
  373. X$&0220DSN_SUPRESS_DEFAULT`20=`20F$MODE()`20.EQS.`20"BATCH"
  374. X$&0220IF`20F$TRNLNM("DSNlinkNEW_SUPRESS")`20.NES.`20""`20THEN`20-
  375. X&0520DSN_SUPRESS_DEFAULT`20=`20F$TRNLNM("DSNlinkNEW_SUPRESS")
  376. X$
  377. X$&0220DSN_AFTER_DEFAULT`20=`20"TOMORROW+01:00:00"
  378. X$&0220IF`20F$TRNLNM("DSNlinkNEW_AFTER")`20.NES.`20""`20THEN`20-
  379. X&0520DSN_AFTER_DEFAULT`20=`20F$TRNLNM("DSNlinkNEW_AFTER")
  380. X$
  381. X$&0220DSN_RETRY_WAIT_TIME`20=`20"00:00:30"&0220!`2030`20seconds
  382. X$&0220IF`20F$TRNLNM("DSNlinkNEW_RETRY_WAIT")`20.NES.`20""`20THEN`20-
  383. X&0520DSN_RETRY_WAIT_TIME`20=`20F$TRNLNM("DSNlinkNEW_RETRY_WAIT")
  384. X$
  385. X$&0220DSN_PROMPT`20=`201
  386. X$&0220IF`20F$TRNLNM("DSNlinkNEW_PROMPT")`20.NES.`20""`20THEN`20-
  387. X&0520DSN_PROMPT`20=`20F$TRNLNM("DSNlinkNEW_PROMPT")
  388. X$
  389. X$
  390. X$!!!
  391. X$
  392. X$&0220WIDTH`20=`2080
  393. X$
  394. X$&0220VMS_VERSION`20=`20F$GETSYI("VERSION")
  395. X$&0220VMS_N_VERSION`20=`20F$EXTRACT(1,F$LENGTH(VMS_VERSION)-1,VMS_VERSION)
  396. X$&0220CLUSTER_SERVER_AVAIL`20=`20VMS_N_VERSION`20.GES.`20"5.2"&0220!`20for`20S
  397. VHOW`20SYSTEM/NODE
  398. X$
  399. X$&0220ERROR_MESSAGE`20=`20"%DSNlink_NEW-?-UNK,`20Unknown/unexpected`20error.
  400. V&0220Please`20investigate"
  401. X$
  402. X$&0220TMP_DIRFILE&0320=`20"SYS$SCRATCH:DSNLINK_NEW_1_"`20+`20F$GETJPI(0,"PID")
  403. V`20+`20".TMP"
  404. X$&0220TMP_ERRORFILE`20=`20"SYS$SCRATCH:DSNLINK_NEW_2_"`20+`20F$GETJPI(0,"PID")
  405. V`20+`20".TMP"
  406. X$&0220TMP_DSNFILE&0320=`20"SYS$SCRATCH:DSNLINK_NEW_3_"`20+`20F$GETJPI(0,"PID")
  407. V`20+`20".TMP"
  408. X$&0220TMP_CHECKFILE`20=`20"SYS$SCRATCH:DSNLINK_NEW_4_"`20+`20F$GETJPI(0,"PID")
  409. V`20+`20".TMP"
  410. X$&0220TMP_OUTFILE&0320=`20"SYS$SCRATCH:DSNLINK_NEW_5_"`20+`20F$GETJPI(0,"PID")
  411. V`20+`20".TMP"
  412. X$
  413. X$&0220INTERACTIVE`20=`20F$MODE()`20.EQS.`20"INTERACTIVE"
  414. X$&0220BATCH`20=`20F$MODE()`20.EQS.`20"BATCH"
  415. X$&0220ASK`20:=`20READ`20SYS$COMMAND/END_OF_FILE=_ABORT/PROMPT=
  416. X$
  417. X$&0220THIS_NODE`20=`20F$GETSYI("NODENAME")
  418. X$&0220WEEKDAY`20=`20F$CVTIME(,,"WEEKDAY")
  419. X$
  420. X$&0220PROMPT_USER`20=`20INTERACTIVE`20.AND.`20DSN_PROMPT
  421. X$
  422. X$&0220SS$_NORMAL`20=`20%X&07301
  423. X$
  424. X$!!!
  425. X$
  426. X$&0220IF`20P1`20.EQS.`20"?"`20THEN`20GOTO`20_EXIT_NOCLEANUP
  427. X$
  428. X$&0220IF`20F$SEARCH("SYS$SYSTEM:DSN$MAIN.EXE")`20.EQS.`20""`20THEN`20GOTO`20_N
  429. VO_DSNLINK
  430. X$
  431. X$&0220IF`20P1`20.EQS.`20""`20
  432. X$&0220THEN`20
  433. X$&0220_PROMPT_RETRY:
  434. X$&0420IF`20PROMPT_USER`20THEN`20ASK`20"`20*`20How`20many`20retries?`20`5B''DSN
  435. V_RETRY_DEFAULT'`5D`20"`20P1
  436. X$&0420IF`20P1`20.EQS.`20""`20THEN`20P1`20=`20DSN_RETRY_DEFAULT
  437. X$&0420IF`20(F$INTEGER(P1)`20.LT.`200)`20.OR.`20(F$INTEGER(P1)`20.NE.`20P1)
  438. X$&0420THEN
  439. X$&0620WRITE`20SYS$OUTPUT`20F$FAO("Retry`20value`20must`20be`20an`20integer`20>
  440. V=`200!/")
  441. X$&0620IF`20PROMPT_USER`20THEN`20GOTO`20_PROMPT_RETRY
  442. X$&0620ERROR_MESSAGE`20=`20"%DSNlink_NEW-E-INTEGER,`20RETRY`20value`20must`20be
  443. V`20an`20integer`20>=`200"
  444. X$&0620GOTO`20_EXIT_ERROR
  445. X$&0420ENDIF
  446. X$&0420P1`20=`20F$INTEGER(P1)
  447. X$&0220ENDIF
  448. X$&0220DSN_RETRY_MAX`20=`20F$INTEGER(P1)
  449. X$
  450. X$&0220IF`20P2`20.EQS.`20""`20
  451. X$&0220THEN
  452. X$&0420IF`20PROMPT_USER`20THEN`20ASK`20"`20*`20Send`20mail`20to?`20`5B''MAIL_US
  453. VER_DEFAULT'`5D`20"`20P2
  454. X$&0420P2`20=`20F$EDIT(P2,"UPCASE,COLLAPSE")
  455. X$&0420IF`20P2`20.EQS.`20""`20THEN`20P2`20=`20MAIL_USER_DEFAULT
  456. X$&0220ENDIF
  457. X$&0220MAIL_USER`20=`20P2
  458. X$&0420
  459. X$&0220IF`20P3`20.EQS.`20""`20
  460. X$&0220THEN
  461. X$&0220_PROMPT_SINCE:
  462. X$&0420IF`20PROMPT_USER`20THEN`20ASK`20"`20*`20/SINCE=value?`20`5B''DSN_SINCE_D
  463. VEFAULT'`5D`20"`20P3
  464. X$&0420P3`20=`20F$EDIT(P3,"UPCASE,COLLAPSE")
  465. X$&0420IF`20P3`20.EQS.`20""`20THEN`20P3`20=`20DSN_SINCE_DEFAULT
  466. X$&0420SET`20noON
  467. X$&0420TEST`20=`20F$CVTIME(P3)
  468. X$&0420STATUS`20=`20$STATUS
  469. X$&0420SET`20ON
  470. X$&0420IF`20.NOT.`20STATUS`20
  471. X$&0420THEN`20
  472. X$&0620IF`20PROMPT_USER`20THEN`20GOTO`20_PROMPT_SINCE
  473. X$&0620ERROR_MESSAGE`20=`20"%DSNlink_NEW-E-IVTIME,`20SINCE`20value`20must`20be
  474. V`20a`20valid`20time`20format"
  475. X$&0620GOTO`20_EXIT_ERROR
  476. X$&0420ENDIF
  477. X$&0420IF`20F$CVTIME(P3)`20.GTS.`20F$CVTIME()
  478. X$&0420THEN
  479. X$&0620WRITE`20SYS$OUTPUT`20F$FAO("Must`20specify`20a`20time`20before`20current
  480. V`20time!/")
  481. X$&0620IF`20PROMPT_USER`20THEN`20GOTO`20_PROMPT_SINCE
  482. X$&0420ENDIF
  483. X$&0220ENDIF
  484. X$&0220DSN_SINCE`20=`20P3
  485. X$
  486. X$&0220IF`20P4`20.EQS.`20""
  487. X$&0220THEN
  488. X$&0420IF`20PROMPT_USER
  489. X$&0420THEN
  490. X$&0620WRITE`20SYS$OUTPUT`20"`20*`20Databases?`20(prefix`20response`20with`20+
  491. V`20to`20add`20databases`20to`20this`20list)"
  492. X$&0620ASK`20"&0220`5B''DSN_DATABASES_DEFAULT'`5D`20"`20P4
  493. X$&0620P4`20=`20F$EDIT(P4,"UPCASE,COLLAPSE")
  494. X$&0420ENDIF
  495. X$&0420IF`20P4`20.EQS.`20""`20THEN`20P4`20=`20DSN_DATABASES_DEFAULT
  496. X$&0220ENDIF
  497. X$&0220IF`20F$LOCATE("+",P4)`20.NE.`20F$LENGTH(P4)`20THEN`20P4`20=`20-
  498. X&0520F$ELEMENT(1,"+",P4)`20+`20","`20+`20DSN_DATABASES_DEFAULT
  499. X$&0220DSN_DATABASES`20=`20P4
  500. X$
  501. X$&0220IF`20P5`20.EQS.`20""
  502. X$&0220THEN
  503. X$&0420IF`20PROMPT_USER`20THEN`20-
  504. X&0A20ASK`20"`20*`20Supress`20Email`20message`20if`20no`20articles`20found?`20
  505. V`5BN`5D`20"`20P5
  506. X$&0420IF`20P5`20.EQS.`20""`20THEN`20P5`20=`20"0"
  507. X$&0420P5`20=`20F$EDIT(P5,"UPCASE,COLLAPSE")
  508. X$&0220ENDIF
  509. X$&0220DSN_MAIL_SUPRESS`20=`20P5
  510. X$
  511. X$_PROMPT_RUN_HOW:
  512. X$&0220IF`20PROMPT_USER
  513. X$&0220THEN
  514. X$&0420ASK`20"`20*`20Run`20Interactive,`20submit`20to`20Batch,`20or`20Abort`20(
  515. VI,B,A)?`20`5BB`5D`20"`20RUN_MODE
  516. X$&0420RUN_MODE`20=`20F$EXTRACT(0,1,F$EDIT(RUN_MODE,"UPCASE,TRIM"))
  517. X$&0420IF`20RUN_MODE`20.EQS.`20""`20THEN`20RUN_MODE`20=`20"B"
  518. X$&0420IF`20F$LOCATE(RUN_MODE,"IBA")`20.EQ.`203
  519. X$&0420THEN
  520. X$&0620WRITE`20SYS$OUTPUT`20"Must`20be`20one`20of`20I,`20B,`20or`20A"
  521. X$&0620GOTO`20_PROMPT_RUN_HOW
  522. X$&0420ENDIF
  523. X$&0220ELSE
  524. X$&0420IF`20F$MODE()`20.EQS.`20"INTERACTIVE"
  525. X$&0420THEN
  526. X$&0620RUN_MODE`20=`20"B"
  527. X$&0420ELSE
  528. X$&0620RUN_MODE`20=`20"-"
  529. X$&0420ENDIF
  530. X$&0220ENDIF
  531. X$
  532. X$&0220IF`20P6`20.EQS.`20""`20.AND.`20RUN_MODE`20.EQS.`20"B"
  533. X$&0220THEN
  534. X$&0220_GET_AFTER:
  535. X$&0420IF`20PROMPT_USER`20
  536. X$&0420THEN`20
  537. X$&0620ASK`20"`20*`20Automatic`20resubmit,`20or`20ONE`20for`20one`20run`20only?
  538. V`20`5B''DSN_AFTER_DEFAULT'`5D`20"`20P6
  539. X$&0420ENDIF
  540. X$&0420IF`20P6`20.EQS.`20""`20.AND.`20INTERACTIVE`20
  541. X$&0420THEN`20
  542. X$&0620P6`20=`20DSN_AFTER_DEFAULT
  543. X$&0420ELSE
  544. X$&0620P6`20=`20"ONE"&0F20!`20if`20BATCH`20and`20P6`20is`20empty,`20don't`20re-
  545. Vsubmit
  546. X$&0420ENDIF
  547. X$&0420P6`20=`20F$EDIT(P6,"UPCASE")
  548. X$&0420IF`20P6`20.NES.`20"ONE"
  549. X$&0420THEN
  550. X$&0620IF`20(F$CVTIME(P6)`20.LTS.`20F$CVTIME())
  551. X$&0620THEN
  552. X$&0820WRITE`20SYS$OUTPUT`20F$FAO("!/Time`20must`20be`20in`20the`20future`20(an
  553. Vd`20should`20be`20a`20delta`20value)")
  554. X$&0820GOTO`20_GET_AFTER
  555. X$&0620ENDIF
  556. X$&0420ENDIF
  557. X$&0220ELSE
  558. X$&0420IF`20P6`20.EQS.`20""`20THEN`20P6`20=`20"ONE"
  559. X$&0220ENDIF
  560. X$&0220DSN_AFTER`20=`20P6
  561. X$
  562. X$!
  563. X$!!
  564. X$!!!
  565. X$!!
  566. X$!
  567. X$
  568. X$&0220WRITE`20SYS$OUTPUT`20-
  569. X&0520F$FAO("!/!/Ready`20to`20mail`20all`20articles`20since`20!AS`20in`20databa
  570. Vse!0SL!0%C!%Es!%F:",`20-
  571. X&0520DSN_SINCE,`20(F$LENGTH(DSN_DATABASES)`20-`20F$LOCATE(",",DSN_DATABASES)))
  572. V
  573. X$&0220CALL`20_BREAK_AT_COMMA`20"''DSN_DATABASES'"`20SYS$OUTPUT`202
  574. X$&0220WRITE`20SYS$OUTPUT`20-
  575. X&0520F$FAO("to`20user!0SL!0%C!%Es!%F`20!AS`20with`20!UL`20DSNlink`20connection
  576. V`20attempt!%S.",`20-
  577. X&0520(F$LENGTH(MAIL_USER)`20-`20F$LOCATE(",",MAIL_USER)),`20-
  578. X&0520MAIL_USER,`20DSN_RETRY_MAX)
  579. X$&0220IF`20RUN_MODE`20.EQS.`20"B"`20THEN`20-
  580. X&0520WRITE`20SYS$OUTPUT`20"Will`20submit`20the`20DSNlink_NEW`20job`20to`20batc
  581. Vh."
  582. X$&0220IF`20DSN_AFTER`20.NES.`20"ONE"`20THEN`20-
  583. X&0520WRITE`20SYS$OUTPUT`20"Will`20auto-submit`20to`20run`20next`20at`20",`20F$
  584. VCVTIME(DSN_AFTER,"ABSOLUTE"),`20"`20(",`20DSN_AFTER,`20")"
  585. X$&0220IF`20RUN_MODE`20.EQS.`20"I"`20THEN`20-
  586. X&0520WRITE`20SYS$OUTPUT`20"Will`20run`20the`20DSNlink_NEW`20job`20interactivel
  587. Vy."
  588. X$&0220WRITE`20SYS$OUTPUT`20""
  589. X$&0220IF`20BATCH`20THEN`20SET`20OUTPUT_RATE
  590. X$
  591. X$&0220IF`20PROMPT_USER`20
  592. X$&0220THEN
  593. X$&0420ASK`20"`20*`20Is`20this`20correct?`20`5BY`5D`20"`20OK_TO_CONTINUE
  594. X$&0420IF`20(.NOT.`20OK_TO_CONTINUE)`20.AND.`20(OK_TO_CONTINUE`20.NES.`20"")
  595. V`20THEN`20GOTO`20_ABORT
  596. X$&0220ENDIF
  597. X$
  598. X$!
  599. X$
  600. X$&0220IF`20F$VERIFY()`20THEN`20SHOW`20SYMBOL`20*
  601. X$
  602. X$&0220IF`20RUN_MODE`20.EQS.`20"A"`20THEN`20GOTO`20_ABORT
  603. X$&0220IF`20(RUN_MODE`20.EQS.`20"B")`20.OR.`20(DSN_AFTER`20.NES.`20"ONE")
  604. X$&0220THEN
  605. X$&0420THIS_PROCEDURE`20=`20F$PARSE(";",F$ENVIRONMENT("PROCEDURE"))
  606. X$&0220_SUBMIT_TO_BATCH:
  607. X$&0420IF`20DSN_AFTER`20.EQS.`20"ONE"
  608. X$&0420THEN
  609. X$&0620AFTER_TIME`20=`20F$CVTIME(,"ABSOLUTE")&0420!`20right`20now
  610. X$&0420ELSE
  611. X$&0620AFTER_TIME`20=`20F$CVTIME(DSN_AFTER,"ABSOLUTE")
  612. X$&0620IF`20F$CVTIME(AFTER_TIME,"COMPARISON")`20.LTS.`20F$CVTIME()
  613. X$&0620THEN
  614. X$&0820ERROR_MESSAGE`20=`20"%DSNlink_NEW-E-TIME,`20Batch`20job`20after`20time
  615. V`20is`20before`20current`20time"
  616. X$&0820GOTO`20_EXIT_ERROR
  617. X$&0620ENDIF
  618. X$&0420ENDIF
  619. X$&0420SUBMIT`20-
  620. X&0520/NOTIFY`20-
  621. X&0520/QUEUE=DSN$BATCH`20-
  622. X&0520/noPRINTER`20-
  623. X&0520/KEEP`20-
  624. X&0520/AFTER="''AFTER_TIME'"`20-
  625. X&0520/PARAMETERS=("''DSN_RETRY_MAX'",`20-&0620!`20P1
  626. X&1220"''MAIL_USER'",`20-&0A20!`20P2
  627. X&1220"''DSN_SINCE'",`20-&0A20!`20P3
  628. X&1220"''DSN_DATABASES'",`20-&0620!`20P4
  629. X&1220"''DSN_MAIL_SUPRESS'",`20-&0320!`20P5
  630. X&1220"''DSN_AFTER'")`20-&0A20!`20P6
  631. X&0520/NAME="DSNlink_NEW"`20-
  632. X&0520/LOG=SYS$LOGIN:DSNLINK_NEW.LOG`20-
  633. X&0520'THIS_PROCEDURE'
  634. X$&0420IF`20DSN_AFTER`20.EQS.`20"ONE"`20THEN`20GOTO`20_EXIT
  635. X$&0420IF`20INTERACTIVE
  636. X$&0420THEN
  637. X$&0620DSN_AFTER`20=`20"ONE"&0820!`20submit`20to`20batch`20(and`20run`20now)
  638. X$&0620GOTO`20_SUBMIT_TO_BATCH
  639. X$&0420ENDIF
  640. X$&0220ENDIF
  641. X$
  642. X$!!!
  643. X$!!!!!&0220Connect`20to`20DSNlink`20and`20get`20the`20articles
  644. X$!!!
  645. X$
  646. X$&0220GOSUB`20_CLEAN_TMP_FILES
  647. X$&0220FINISHED_OK`20=`200
  648. X$&0220
  649. X$&0220IF`20F$TRNLNM("DSN$COPY_DIRECTORY","LNM$SYSTEM",,"EXECUTIVE")`20.NES.
  650. V`20""
  651. X$&0220THEN
  652. X$&0420!`20determine`20DCN
  653. X$&0420IF`20F$TRNLNM("DSN$NETWORK_PROCESS","LNM$SYSTEM",,"EXECUTIVE")`20.EQS.
  654. V`20""`20
  655. X$&0420THEN
  656. X$&0620DCN`20=`20THIS_NODE
  657. X$&0620SHOW`20SYSTEM/OUTPUT='TMP_CHECKFILE'`20
  658. X$&0420ELSE
  659. X$&0620DCN`20=`20F$ELEMENT(0,":",F$TRNLNM("DSN$NETWORK_PROCESS","LNM$SYSTEM",,"
  660. VEXECUTIVE"))
  661. X$&0620DCN_CLUSTERED`20=`20F$GETSYI("CLUSTER_MEMBER",DCN)
  662. X$&0620IF`20(.NOT.`20CLUSTER_SERVER_AVAIL)`20.OR.`20(.NOT.`20DCN_CLUSTERED))
  663. X$&0620THEN`20
  664. X$&0820WRITE`20SYS$OUTPUT`20"%DSNlink_NEW-W-CANTSEE,`20Can't`20check`20if`20DCN
  665. V`20(node`20",`20DCN,`20")`20is`20running`20DSNlink"
  666. X$&0820IF`20(.NOT.`20CLUSTER_SERVER_AVAIL)`20.AND.`20(.NOT.`20DCN_CLUSTERED)
  667. V`20THEN`20-
  668. X&0F20WRITE`20SYS$OUTPUT`20"-DSNlink_NEW-W-CANTSEE,`20VMS`205.2`20required`20to
  669. V`20check`20VAXcluster`20member"
  670. X$&0820IF`20.NOT.`20DCN_CLUSTERED`20THEN`20-
  671. X&0F20WRITE`20SYS$OUTPUT`20"-DSNlink_NEW-W-CANTSEE,`20The`20DCN`20isn't`20clust
  672. Vered`20with`20this`20node"
  673. X$&0620ELSE
  674. X$&0820SHOW`20SYSTEM/NODE='DCN'/OUTPUT='TMP_CHECKFILE'
  675. X$&0620ENDIF
  676. X$&0420ENDIF`20!`20Running`20on`20DAN/DCN
  677. X$
  678. X$&0420IF`20F$SEARCH(TMP_CHECKFILE)`20.EQS.`20""
  679. X$&0420THEN
  680. X$&0620!`20couldn't`20check`20if`20DSNlink`20wasn`20running`20because`20not`20c
  681. Vlustered`20with
  682. X$&0620!`20DCN,`20or`20VMS`20<`205.2.&0220So`20we'll`20assume`20it`20is`20runni
  683. Vng
  684. X$&0620STATUS`20=`20SS$_NORMAL
  685. X$&0420ELSE
  686. X$&0620DEFINE/USER_MODE`20SYS$ERROR`20NLA0:&0820!`20hide`20any`20%SEARCH`20mess
  687. Vages
  688. X$&0620DEFINE/USER_MODE`20SYS$OUTPUT`20NLA0:
  689. X$&0620SEARCH/EXACT`20'TMP_CHECKFILE'`20"DSN$NETWORK"
  690. X$&0620STATUS`20=`20$STATUS
  691. X$&0620DELETE`20'TMP_CHECKFILE';
  692. X$&0420ENDIF
  693. X$
  694. X$&0420IF`20STATUS`20.EQ.`20SS$_NORMAL&0520!`20string`20found`20
  695. X$&0420THEN`20!`20DSNlink`20is`20running`20on`20the`20DCN
  696. X$
  697. X$&0620OPEN/WRITE`20OUTFILE`20'TMP_DSNFILE'
  698. X$&0620IF`20INTERACTIVE`20THEN`20WRITE`20OUTFILE`20"set`20screen/NOpage"
  699. X$&0620WRITE`20OUTFILE`20"open`20",`20DSN_DATABASES
  700. X$&0620WRITE`20OUTFILE`20"dir/all/since=",`20DSN_SINCE
  701. X$&0620WRITE`20OUTFILE`20"extract/dir`20",`20TMP_DIRFILE
  702. X$&0620WRITE`20OUTFILE`20"exit"
  703. X$&0620CLOSE`20OUTFILE
  704. X$
  705. X$&0620DSN_RETRY_COUNT`20=`200
  706. X$
  707. X$_DSN_RETRY:
  708. X$&0620WRITE`20SYS$OUTPUT`20"%DSNlink_NEW-I-ATTCONN,`20Attempting`20connection
  709. V`20at`20",`20F$TIME()
  710. X$&0620IF`20F$SEARCH(TMP_ERRORFILE)`20.NES.`20""`20THEN`20DELETE`20'TMP_ERRORFI
  711. VLE';*
  712. X$
  713. X$&0620DEFINE/USER_MODE`20DSN$ITS_INIT`20'TMP_DSNFILE'
  714. X$&0620DEFINE/USER_MODE`20SYS$ERROR`20'TMP_ERRORFILE'
  715. X$&0620DEFINE/USER_MODE`20SYS$OUTPUT`20'TMP_OUTFILE'
  716. X$
  717. X$!`20The`20"NO"`20is`20in`20case`20DSNlink`20enters`20its`20question-mode.
  718. V&0220See`20edit`20003.
  719. X$
  720. X$&0620SET`20noON
  721. X$&0620DSN`20ITS
  722. XNO
  723. X$&0620SET`20ON
  724. X$
  725. X$&0620IF`20F$SEARCH(TMP_DIRFILE)`20.NES.`20""
  726. X$&0620THEN`20
  727. X$&0820CALL`20_GENERATE_MAIL_MESSAGE`20'TMP_DIRFILE'`20"New`20DSNlink`20article
  728. Vs`20on`20''WEEKDAY'"
  729. X$&0820FINISHED_OK`20=`201
  730. X$&0620ELSE&0220!`20it`20is`20empty
  731. X$
  732. X$&0820RETRY_OPERATION`20=`200
  733. X$&0820!`20see`20if`20we`20encountered`20any`20errors
  734. X$&0820DEFINE/USER_MODE`20SYS$OUTPUT`20NLA0:
  735. X$&0820DEFINE/USER_MODE`20SYS$ERROR`20NLA0:
  736. X$&0820SEARCH`20'TMP_ERRORFILE'/EXACT`20-
  737. X&0F20"%DSN-F-","%DSN-E-","-DSN-E-","-DSN-F-"
  738. X$&0820IF`20$STATUS`20.EQ.`20SS$_NORMAL`20THEN`20RETRY_OPERATION`20=`201
  739. X$
  740. X$&0820!`20if`20error`20was`20UNKDBNAM`20(unknown`20database),`20pretend`20it
  741. V`20worked
  742. X$&0820IF`20RETRY_OPERATION
  743. X$&0820THEN&0220!`20we`20found`20an`20error`20message
  744. X$&0A20DEFINE/USER_MODE`20SYS$OUTPUT`20NLA0:
  745. X$&0A20DEFINE/USER_MODE`20SYS$ERROR`20NLA0:
  746. X$&0A20SEARCH`20'TMP_ERRORFILE'`20"%DSN-E-UNKDBNAM"`20/EXACT
  747. X$&0A20IF`20$STATUS`20.EQ.`20SS$_NORMAL`20THEN`20RETRY_OPERATION`20=`200
  748. X$&0820ENDIF
  749. X$
  750. X$&0820IF`20RETRY_OPERATION
  751. X$&0820THEN&0720!`20some`20sort`20of`20DSNlink`20failure
  752. X$&0A20SEARCH`20'TMP_ERRORFILE'/EXACT/noHIGHLIGHT`20-
  753. X&0F20"%DSN-F-","%DSN-E-","-DSN-E-","-DSN-F-"&0220!`20show`20the`20error
  754. X$&0A20WRITE`20SYS$OUTPUT`20""
  755. X$&0A20IF`20(DSN_RETRY_COUNT`20+`201)`20.LE.`20DSN_RETRY_MAX`20
  756. X$&0A20THEN`20
  757. X$&0C20DSN_RETRY_COUNT`20=`20DSN_RETRY_COUNT`20+`201
  758. X$&0C20IF`20BATCH`20THEN`20SET`20RESTART_VALUE`20=`20"Retry`20count`20=`20''DSN
  759. V_RETRY_COUNT'"
  760. X$&0C20WRITE`20SYS$OUTPUT`20"%DSNlink_NEW-W-RETRY,`20Retrying`20connection`20in
  761. V`20",`20DSN_RETRY_WAIT_TIME
  762. X$&0C20WRITE`20SYS$OUTPUT`20"-DSNlink_NEW-I-RETRY,`20Retry`20number`20",`20DSN_
  763. VRETRY_COUNT
  764. X$&0C20WAIT`20'DSN_RETRY_WAIT_TIME'
  765. X$&0C20GOTO`20_DSN_RETRY
  766. X$&0A20ELSE
  767. X$&0C20WRITE`20SYS$OUTPUT`20"%DSNlink_NEW-E-RETRYLIM,`20Exceeded`20maximum`20re
  768. Vtry`20limit"
  769. X$&0A20ENDIF
  770. X$&0820ENDIF`20!`20status`20.eq.`20ss$_normal
  771. X$&0820!`20no`20new`20articles`20were`20found`20(could`20have`20been`20bad`20co
  772. Vnnection)
  773. X$&0820DEFINE/USER_MODE`20SYS$OUTPUT`20NLA0:
  774. X$&0820DEFINE/USER_MODE`20SYS$ERROR`20NLA0:
  775. X$&0820SEARCH/EXACT`20'TMP_ERRORFILE'`20"Connection`20established"
  776. X$&0820IF`20$STATUS`20.EQ.`20SS$_NORMAL
  777. X$&0820THEN
  778. X$&0A20IF`20.NOT.`20DSN_MAIL_SUPRESS`20THEN`20-
  779. X&0520CALL`20_GENERATE_MAIL_MESSAGE`20'TMP_OUTFILE'`20"NO`20new`20DSNlink`20art
  780. Vicles`20''WEEKDAY'"
  781. X$&0A20FINISHED_OK`20=`201
  782. X$&0820ELSE
  783. X$&0A20CALL`20_GENERATE_MAIL_MESSAGE`20'TMP_ERRORFILE'`20"Error`20-`20DSNlink
  784. V`20articles`20on`20''WEEKDAY'"
  785. X$&0820ENDIF
  786. X$&0620ENDIF&0320!`20if`20directory`20file`20(TMP_DIRFILE)`20exists
  787. X$&0420ELSE&0220!`20the`20SEARCH`20didn't`20find`20the`20DSN$NETWORK`20process
  788. X$
  789. X$&0620ERROR_MESSAGE`20=`20"%DSNlink_NEW-E-NOTPRESENT,`20DSNlink`20isn't`20runn
  790. Ving`20on`20the`20DCN`20(node`20"`20+`20DCN`20+`20")"
  791. X$&0620GOTO`20_EXIT_ERROR
  792. X$&0420ENDIF&0220!`20if`20DSN$NETWORK`20process`20exists
  793. X$&0220ELSE
  794. X$&0420ERROR_MESSAGE`20=`20"%DSNlink_NEW-E-NOTPRESENT,`20DSNlink`20has`20never
  795. V`20been`20installed`20on`20node",`20THIS_NODE
  796. X$&0420GOTO`20_EXIT_ERROR
  797. X$&0220ENDIF&0220!`20if`20DSN$COPY_DIRECTORY`20is`20a`20logical
  798. X$
  799. X$&0220IF`20FINISHED_OK
  800. X$&0220THEN`20
  801. X$&0420WRITE`20SYS$OUTPUT`20F$FAO("!/%DSNlink_NEW-S-OK,`20DSNlink_NEW`20complet
  802. Ved`20successfully.")
  803. X$&0220ELSE
  804. X$&0420WRITE`20SYS$OUTPUT`20F$FAO("!/%DSNlink_NEW-E-NOTOK,`20DSNlink_NEW`20enco
  805. Vuntered`20errors.")
  806. X$&0420WRITE`20SYS$OUTPUT`20"-DSNlink_NEW-E-NOTOK,`20No`20new`20DSNlink`20artic
  807. Vles`20were`20retrieved."
  808. X$&0220ENDIF
  809. X$
  810. X$_EXIT:
  811. X$&0220GOSUB`20_CLEAN_TMP_FILES
  812. X$_EXIT_NOCLEANUP:
  813. X$&0220VERIFY`20=`20F$VERIFY(VERIFY)
  814. X$&0220EXIT&0220!`20Leaving`20DSNlink_NEW.COM`20...
  815. X$
  816. X$_EXIT_ERROR:
  817. X$&0220IF`20ERROR_MESSAGE`20.EQS.`20""`20THEN`20-
  818. X&0520ERROR_MESSAGE`20=`20"Unexpected`20condition;`20exact`20error`20unknown."
  819. X$&0220WRITE`20SYS$OUTPUT`20"DSNlink_NEW`20error`20occurred;`20error`20was:"
  820. X$&0220WRITE`20SYS$OUTPUT`20"&0220",`20ERROR_MESSAGE
  821. X$
  822. X$&0220IF`20(.NOT.`20INTERACTIVE)`20.AND.`20("''MAIL_USER'"`20.NES.`20"")
  823. X$&0220THEN
  824. X$&0420WRITE`20SYS$OUTPUT`20"Informing`20''MAIL_USER'`20of`20error"
  825. X$&0420SET`20noON&0720!`20in`20case`20error-handler`20dies
  826. X$&0420OPEN/WRITE`20FILE`20'TMP_ERRORFILE'
  827. X$&0420WRITE`20FILE`20"***`20An`20error`20caused`20DSNlink_NEW.COM`20to`20fail
  828. V`20***"
  829. X$&0420WRITE`20FILE`20""
  830. X$&0420WRITE`20FILE`20"The`20error`20detected`20by`20DSNlink_NEW.COM`20was:"
  831. X$&0420WRITE`20FILE`20"&0220",`20ERROR_MESSAGE
  832. X$&0420WRITE`20FILE`20""
  833. X$&0420CLOSE`20FILE
  834. X$&0420
  835. X$&0420CALL`20_GENERATE_MAIL_MESSAGE`20'TMP_ERRORFILE'`20"Error`20-`20DSNlink_N
  836. VEW.COM`20didn't`20run`20correctly"
  837. X$&0220ENDIF
  838. X$&0220GOSUB`20_CLEAN_TMP_FILES
  839. X$&0220VERIFY`20=`20F$VERIFY(VERIFY)
  840. X$&0220EXIT`20%X02A&0220!`20Leaving`20DSNlink_NEW.COM`20(on`20error`20status)
  841. V`20...
  842. X$
  843. X$_CLEAN_TMP_FILES:
  844. X$&0220IF`20F$TRNLNM("OUTFILE")`20.NES.`20""`20THEN`20CLOSE`20OUTFILE
  845. X$&0220IF`20F$SEARCH(TMP_DIRFILE)`20.NES.`20""`20THEN`20DELETE`20'TMP_DIRFILE';
  846. V*
  847. X$&0220IF`20F$SEARCH(TMP_ERRORFILE)`20.NES.`20""`20THEN`20DELETE`20'TMP_ERRORFI
  848. VLE';*
  849. X$&0220IF`20F$SEARCH(TMP_DSNFILE)`20.NES.`20""`20THEN`20DELETE`20'TMP_DSNFILE';
  850. V*
  851. X$&0220IF`20F$SEARCH(TMP_CHECKFILE)`20.NES.`20""`20THEN`20DELETE`20'TMP_CHECKFI
  852. VLE';*
  853. X$&0220IF`20F$SEARCH(TMP_OUTFILE)`20.NES.`20""`20THEN`20DELETE`20'TMP_OUTFILE';
  854. V*
  855. X$&0220IF`20F$SEARCH("SYS$LOGIN:DSNLINK_NEW.LOG")`20.NES.`20""`20.AND.`20BATCH
  856. V`20THEN`20-
  857. X&0520PURGE/KEEP=5`20SYS$LOGIN:DSNLINK_NEW.LOG
  858. X$&0220RETURN
  859. X$
  860. X$_ERROR:
  861. X$&0220WRITE`20SYS$OUTPUT`20"%DSNlink_NEW-E-ERROR,`20Unexpected`20error`20occur
  862. Vred`20in`20DSNlink_NEW.COM"
  863. X$&0220GOTO`20_EXIT_ERROR
  864. X$
  865. X$_ABORT:
  866. X$&0220WRITE`20SYS$OUTPUT`20"%DSNlink_NEW-E-ABORT,`20User`20aborted`20DSNlink_N
  867. VEW.COM"
  868. X$&0220GOTO`20_EXIT
  869. X$
  870. X$_NO_DSNLINK:
  871. X$&0220WRITE`20SYS$OUTPUT`20"%DSNlink_NEW-E-NOTPRESENT,`20You`20do`20not`20have
  872. V`20DSNlink`20software`20on`20this`20node"
  873. X$&0220WRITE`20SYS$OUTPUT`20"-DSNlink_NEW-E-NOTPRESENT,`20Contact`20your`20loca
  874. Vl`20DEC`20office`20to`20obtain`20DSNlink"
  875. X$&0220GOTO`20_EXIT_ERROR
  876. X$
  877. X$&4621
  878. X$
  879. X$_BREAK_AT_COMMA:`20SUBROUTINE&0720
  880. X$!`20P1`20=`20string`20to`20parse
  881. X$!`20P2`20=`20output`20file`20(for`20WRITE`20commands)
  882. X$!`20P3`20=`20number`20spaces`20at`20beginning`20of`20each`20line
  883. X$!`20symbol`20WIDTH`20(from`20main`20routine)`20to`20specify`20line`20width.
  884. X$
  885. X$&0220IF`20P3`20.EQS.`20""`20THEN`20P3`20=`200
  886. X$&0220P3`20=`20F$INTEGER(P3)
  887. X$&0220AVAILABLE_WIDTH`20=`20WIDTH`20-`20P3
  888. X$&0220ELEMENT_NUMBER`20=`200
  889. X$&0220OUTPUT_STRING`20=`20""
  890. X$_BREAK_LOOP:
  891. X$&0220ADDITIONAL_STRING`20=`20F$ELEMENT(ELEMENT_NUMBER,",",P1)
  892. X$&0220IF`20ADDITIONAL_STRING`20.EQS.`20","`20THEN`20GOTO`20_BREAK_LOOP_EXIT
  893. X$&0220IF`20F$LENGTH("''OUTPUT_STRING'''ADDITIONAL_STRING'")`20.GE.`20AVAILABLE
  894. V_WIDTH
  895. X$&0220THEN
  896. X$&0420WRITE`20'P2'`20F$FAO("!#*`20!AS,",`20P3,`20OUTPUT_STRING)
  897. X$&0420OUTPUT_STRING`20=`20ADDITIONAL_STRING
  898. X$&0220ELSE
  899. X$&0420IF`20OUTPUT_STRING`20.EQS.`20""
  900. X$&0420THEN
  901. X$&0620OUTPUT_STRING`20=`20ADDITIONAL_STRING
  902. X$&0420ELSE
  903. X$&0620OUTPUT_STRING`20=`20OUTPUT_STRING`20+`20","`20+`20ADDITIONAL_STRING
  904. X$&0420ENDIF
  905. X$&0220ENDIF
  906. X$&0220ELEMENT_NUMBER`20=`20ELEMENT_NUMBER`20+`201
  907. X$&0220GOTO`20_BREAK_LOOP
  908. X$
  909. X$_BREAK_LOOP_EXIT:
  910. X$&0220WRITE`20'P2'`20F$FAO("!#*`20!AS",`20P3,`20OUTPUT_STRING)
  911. X$&0220EXIT
  912. X$&0220ENDSUBROUTINE&0220!`20break_at_comma
  913. X$
  914. X$&4621
  915. X$
  916. X$_GENERATE_MAIL_MESSAGE:`20SUBROUTINE
  917. X$!`20P1`20=`20append`20information`20to`20this`20file,`20then`20Email`20it
  918. X$!`20P2`20=`20Subject`20to`20use`20for`20Mail`20message
  919. X$
  920. X$&0220OPEN/APPEND`20OUTFILE`20'P1'
  921. X$&0220WRITE`20OUTFILE`20"_____"
  922. X$&0220WRITE`20OUTFILE`20""
  923. X$&0220WRITE`20OUTFILE`20"The`20above`20listing`20was`20generated`20with`20the
  924. V`20following`20DSNlink_NEW`20parameters:"
  925. X$&0220CALL`20_BREAK_AT_COMMA`20"Databases`20=`20''DSN_DATABASES'"`20OUTFILE
  926. V`202
  927. X$&0220WRITE`20OUTFILE`20"&0220Since&0520=`20",`20DSN_SINCE
  928. X$&0220WRITE`20OUTFILE`20F$FAO("A`20total`20of`20!UL`20retr!1%Cy!%Eies!%F`20!1%
  929. VCwas!%Ewere!%F`20attempted`20(maximum`20!UL`20retr!-!0UL!1%Cy!%Eies!%F).",`20-
  930. V
  931. X&0520DSN_RETRY_COUNT,`20DSN_RETRY_MAX)
  932. X$&0220WRITE`20OUTFILE`20""
  933. X$&0220WRITE`20OUTFILE`20"This`20mail`20message`20sent`20by`20code`20within`20D
  934. VSNlink_NEW.COM`20version`20",`20DSNlink_NEW$VERSION
  935. X$&0220CLOSE`20OUTFILE
  936. X$
  937. X$&0220MAIL`20-
  938. X&0520'P1'`20-
  939. X&0520'MAIL_USER'`20-
  940. X&0520/SUBJECT="''P2'"`20-
  941. X&0520/PERSONAL="DSNlink`20articles"
  942. X$
  943. X$&0220WRITE`20SYS$OUTPUT`20F$FAO("Message`20sent`20to`20user!0UL!0%C!1%C!%Es!%
  944. VF`20!AS`20(!%T)",`20-
  945. X&0520(F$LENGTH(MAIL_USER)`20-`20F$LOCATE(",",MAIL_USER)),`20-
  946. X&0520MAIL_USER,`200)
  947. X$&0220
  948. X$&0220EXIT
  949. X$&0220ENDSUBROUTINE&0220!`20generate_mail_message
  950. $ call unpack DSNLINK_NEW.COM;188 1653221916 ""
  951. $ v=f$verify(v)
  952. $ exit
  953.