home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1993 #1 / NN_1993_1.iso / spool / comp / os / vms / 20363 < prev    next >
Encoding:
Internet Message Format  |  1993-01-05  |  18.2 KB

  1. Path: sparky!uunet!noc.near.net!hri.com!spool.mu.edu!uwm.edu!linac!att!ucbvax!PFC.MIT.EDU!MRL
  2. From: MRL@PFC.MIT.EDU (Mark London)
  3. Newsgroups: comp.os.vms
  4. Subject: VACATION program.
  5. Message-ID: <9D8EF627D28340209A@NERUS.PFC.MIT.EDU>
  6. Date: 5 Jan 93 16:00:00 GMT
  7. Sender: daemon@ucbvax.BERKELEY.EDU
  8. Organization: The Internet
  9. Lines: 565
  10.  
  11. Anyone running the latest PMDF can ignore this posting as the software is meant
  12. for people without PMDF (or with an old PD version like myself.)
  13.  
  14. The following software works with DELIVER to send reply messages to mail when
  15. the user is away.  It's main feature which DELIVER presently does not have (at
  16. least I've not found it) is that the message is also delivered as new mail with
  17. the FROM address being preserved.  Without this software, the message gets
  18. delivered with the user's name as the FROM address, and the real sender's
  19. address is placed in the subject line instead, making it impossible to use the
  20. REPLY command on it.
  21.                                                                            
  22. $ v='f$verify(f$trnlnm("SHARE_VERIFY"))'
  23. $!
  24. $! This archive created by VMS_SHARE Version 7.2-007  22-FEB-1990
  25. $!   On  5-JAN-1993 10:34:10.39   By user MRL 
  26. $!
  27. $! This VMS_SHARE Written by:
  28. $!    Andy Harper, Kings College London UK
  29. $!
  30. $! Acknowledgements to:
  31. $!    James Gray       - Original VMS_SHARE
  32. $!    Michael Bednarek - Original Concept and implementation
  33. $!
  34. $! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER
  35. $! AND EXECUTE AS A COMMAND PROCEDURE  (  @name  )
  36. $!
  37. $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING:
  38. $!       1. VACATION.BUILD;3
  39. $!       2. VACATION.COM;4
  40. $!       3. VACATION.DELIVERY;4
  41. $!       4. VACATION.FOR;26
  42. $!       5. VACATION.HLP;5
  43. $!       6. VACATION.LNK;8
  44. $!       7. VACATION_CLD.CLD;3
  45. $!
  46. $set="set"
  47. $set symbol/scope=(nolocal,noglobal)
  48. $f=f$parse("SHARE_TEMP","SYS$SCRATCH:.TMP_"+f$getjpi("","PID"))
  49. $e="write sys$error  ""%UNPACK"", "
  50. $w="write sys$output ""%UNPACK"", "
  51. $ if f$trnlnm("SHARE_LOG") then $ w = "!"
  52. $ ve=f$getsyi("version")
  53. $ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto START
  54. $ e "-E-OLDVER, Must run at least VMS 4.4"
  55. $ v=f$verify(v)
  56. $ exit 44
  57. $UNPACK: SUBROUTINE ! P1=filename, P2=checksum
  58. $ if f$search(P1) .eqs. "" then $ goto file_absent
  59. $ e "-W-EXISTS, File ''P1' exists. Skipped."
  60. $ delete 'f'*
  61. $ exit
  62. $file_absent:
  63. $ if f$parse(P1) .nes. "" then $ goto dirok
  64. $ dn=f$parse(P1,,,"DIRECTORY")
  65. $ w "-I-CREDIR, Creating directory ''dn'."
  66. $ create/dir 'dn'
  67. $ if $status then $ goto dirok
  68. $ e "-E-CREDIRFAIL, Unable to create ''dn'. File skipped."
  69. $ delete 'f'*
  70. $ exit
  71. $dirok:
  72. $ w "-I-PROCESS, Processing file ''P1'."
  73. $ if .not. f$verify() then $ define/user sys$output nl:
  74. $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT 'f'/OUT='P1'
  75. PROCEDURE Unpacker ON_ERROR ENDON_ERROR;SET(FACILITY_NAME,"UNPACK");SET(
  76. SUCCESS,OFF);SET(INFORMATIONAL,OFF);f:=GET_INFO(COMMAND_LINE,"file_name");b:=
  77. CREATE_BUFFER(f,f);p:=SPAN(" ")@r&LINE_END;POSITION(BEGINNING_OF(b));
  78. LOOP EXITIF SEARCH(p,FORWARD)=0;POSITION(r);ERASE(r);ENDLOOP;POSITION(
  79. BEGINNING_OF(b));g:=0;LOOP EXITIF MARK(NONE)=END_OF(b);x:=ERASE_CHARACTER(1);
  80. IF g=0 THEN IF x="X" THEN MOVE_VERTICAL(1);ENDIF;IF x="V" THEN APPEND_LINE;
  81. MOVE_HORIZONTAL(-CURRENT_OFFSET);MOVE_VERTICAL(1);ENDIF;IF x="+" THEN g:=1;
  82. ERASE_LINE;ENDIF;ELSE IF x="-" THEN IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+")=
  83. 1 THEN g:=0;ENDIF;ENDIF;ERASE_LINE;ENDIF;ENDLOOP;t:="0123456789ABCDEF";
  84. POSITION(BEGINNING_OF(b));LOOP r:=SEARCH("`",FORWARD);EXITIF r=0;POSITION(r);
  85. ERASE(r);x1:=INDEX(t,ERASE_CHARACTER(1))-1;x2:=INDEX(t,ERASE_CHARACTER(1))-1;
  86. COPY_TEXT(ASCII(16*x1+x2));ENDLOOP;WRITE_FILE(b,GET_INFO(COMMAND_LINE,
  87. "output_file"));ENDPROCEDURE;Unpacker;QUIT;
  88. $ delete/nolog 'f'*
  89. $ CHECKSUM 'P1'
  90. $ IF CHECKSUM$CHECKSUM .eqs. P2 THEN $ EXIT
  91. $ e "-E-CHKSMFAIL, Checksum of ''P1' failed."
  92. $ ENDSUBROUTINE
  93. $START:
  94. $ create 'f'
  95. X$!
  96. X$! NOTE: The following command should be executed at startup:
  97. X$! MCR INSTALL PMDF_ROOT:`5BEXE`5DVACATION/PRIV=(SYSPRV,SETPRV)
  98. X$!
  99. X$ FOR VACATION
  100. X$ SET COMMAND /OBJ VACATION_CLD
  101. X$ @VACATION.LNK
  102. $ CALL UNPACK VACATION.BUILD;3 943790897
  103. $ create 'f'
  104. X$ !
  105. X$ ! VACATION.COM sends the file SYS$LOGIN:VACATION.TXT to any user
  106. X$ ! who sends mail. Only one copy of VACATION.TXT is sent to a given
  107. X$ ! user no matter how many messages he or she sends.
  108. X$ !
  109. X$ ! Check for replies sent list's presence
  110. X$ if F$SEARCH("SYS$LOGIN:VACATION.REPLY") .nes "" then goto search_list
  111. X$ open/write tr SYS$LOGIN:VACATION.REPLY
  112. X$ goto add_list
  113. X$ !
  114. X$ ! Check the list for this sender
  115. X$ search_list:
  116. X$ search/nooutput SYS$LOGIN:VACATION.REPLY "''QFROM'"
  117. X$ if $status .eq. 1 then GOTO exit
  118. X$ open/append tr SYS$LOGIN:VACATION.REPLY
  119. X$ !
  120. X$ add_list:
  121. X$ write tr FROM
  122. X$ close tr
  123. X$ mail/noself/subject="Away." SYS$LOGIN:VACATION.TXT -
  124. X  "''F$ELEMENT(0," ",QFROM)'"
  125. X$exit:
  126. X$ !  `20
  127. X$ ! Mail message so it shows up as new mail from the actual user.
  128. X$ VACATION := $PMDF_ROOT:`5BEXE`5DVACATION
  129. X$ VACATION 'f$element(0," ",message_file) "''QFROM'" "''QSUBJECT'"
  130. $ CALL UNPACK VACATION.COM;4 1815303466
  131. $ create 'f'
  132. X! VACATION.DELIVERY`20
  133. X!`20
  134. X! Sends a reply saying this user is on vacation.  Place this file in your
  135. X! SYS$LOGIN directory and name it MAIL.DELIVERY.  When you do a VACATION/ENA
  136. VBLE`20
  137. X! it will send one copy of the reply message contained in the file`20
  138. X! SYS$LOGIN:VACATION.TXT to each sender, regardless of how many messages the
  139. Vy
  140. X! send.  This is done by the command procedure PMDF_ROOT:`5BDELIVER`5DVACATI
  141. VON.COM
  142. X! which stores the senders's names in the file SYS$LOGIN:VACATION.REPLY.
  143. X! That file is deleted when you execute VACATION/DISABLE.  The subject of th
  144. Ve
  145. X! reply message is "Away."  This is set in the command procedure`20
  146. X! PMDF_ROOT:`5BDELIVER`5DVACATION.COM.  If you want to specify a different s
  147. Vubject,
  148. X! you will have to have your own copy of that file in your SYS$LOGIN directo
  149. Vry,
  150. X! and remove the PMDF_ROOT:`5BDELIVER`5D from the reference to that file at
  151. V the end
  152. X! of this file so that your copy will be executed instead.
  153. X!
  154. X! The following lines select which command procedure to run based on message
  155. V's
  156. X! FROM, TO, or SUBJECT.  VACATION.COM will send a reply to the user and put
  157. V the`20
  158. X! message in your NEWMAIL folder.  CONTINUE.COM is similar but avoids sendin
  159. Vg
  160. X! a reply.  The first line shown here avoids sending a reply to any address
  161. X! which starts with the string Postmaster (the Postmaster username is usuall
  162. Vy
  163. X! used by mail sf in order to alert users that mail that they have sent coul
  164. Vd`20
  165. X! not be deliered.  Thus, you don't want to send reply messages to them.)
  166. X! Similarly, you might also want to place lines that avoid replying to maili
  167. Vng
  168. X! lists that you are on.
  169. X!
  170. X! FROM                     TO   SUBJECT
  171. X!
  172. X"Postmaster*"              *      *      T E @PMDF_ROOT:`5BDELIVER`5DCONTINU
  173. VE.COM
  174. X    *`09                   *      *      O E @PMDF_ROOT:`5BDELIVER`5DVACATIO
  175. VN.COM
  176. $ CALL UNPACK VACATION.DELIVERY;4 158149221
  177. $ create 'f'
  178. X`09IMPLICIT INTEGER (A-Z)
  179. X
  180. X`09INCLUDE '($MAILDEF)'
  181. X`09INCLUDE '($JPIDEF)'
  182. X
  183. X`09EXTERNAL VACATION_MAINCOMMANDS
  184. X
  185. X`09EXTERNAL ENABLE_CTRL_EXIT
  186. X
  187. X`09COMMON /CTRLY/ CTRLY
  188. X
  189. X`09CHARACTER FILE*132,SUBJECT*132,SENDTO*13,FROM*132
  190. X`09CHARACTER INCMD*274
  191. X
  192. X`09COMMON /PRIV/ PROCPRIV,SETPRV
  193. X`09DIMENSION PROCPRIV(2),SETPRV(2)
  194. X
  195. X`09PARAMETER LIB$M_CLI_CTRLY = '2000000'X
  196. X
  197. X`09CALL LIB$GET_FOREIGN(INCMD)
  198. X`09INCMD = 'VACATION '//INCMD
  199. X`09CALL CLI$DCL_PARSE(INCMD(:TRIM(INCMD)),VACATION_MAINCOMMANDS)
  200. X
  201. X`09IF (CLI$PRESENT('ENABLE')) THEN
  202. X`09   CALL GETUSER(SENDTO)
  203. X`09   INCMD = 'DELIVER%'//SENDTO(:TRIM(SENDTO))
  204. X`09   C = 0
  205. X
  206. X`09   STATUS = MAIL$USER_BEGIN(C,0,0)
  207. X`09   IF (.NOT.STATUS) CALL EXIT
  208. X
  209. X`09   CALL INIT_ITMLST
  210. X`09   CALL ADD_2_ITMLST(TRIM(SENDTO)+8,MAIL$_USER_SET_FORWARDING,
  211. X     &`09`09`09   %LOC(INCMD))
  212. X`09   CALL END_ITMLST(ADDRESS_ITMLST)
  213. X
  214. X`09   STATUS = MAIL$USER_SET_INFO(C,%VAL(ADDRESS_ITMLST),0)
  215. X`09   CALL EXIT
  216. X`09ELSE IF (CLI$PRESENT('DISABLE')) THEN
  217. X`09   C = 0
  218. X
  219. X`09   STATUS = MAIL$USER_BEGIN(C,0,0)
  220. X`09   IF (.NOT.STATUS) CALL EXIT
  221. X
  222. X`09   CALL INIT_ITMLST
  223. X`09   CALL ADD_2_ITMLST(0,MAIL$_USER_SET_NO_FORWARDING,0)
  224. X`09   CALL END_ITMLST(ADDRESS_ITMLST)
  225. X
  226. X`09   STATUS = MAIL$USER_SET_INFO(C,%VAL(ADDRESS_ITMLST),0)
  227. X`09   CALL LIB$DELETE_FILE('SYS$LOGIN:VACATION.REPLY;*')
  228. X`09   CALL EXIT
  229. X`09END IF
  230. X
  231. X`09CALL CLI$GET_VALUE('FILE',FILE,I)
  232. X`09CALL CLI$GET_VALUE('FROM',FROM,I)
  233. X`09CALL CLI$GET_VALUE('SUBJECT',SUBJECT,I)
  234. X
  235. X`09CALL DCLEXH(%LOC(ENABLE_CTRL_EXIT))`09`09! Declare exit handler
  236. X
  237. X`09CALL LIB$DISABLE_CTRL(LIB$M_CLI_CTRLY,CTRLY)`09! Disable CTRL-Y & -C
  238. X`09CTRLY = CTRLY .AND. LIB$M_CLI_CTRLY
  239. X
  240. X`09CALL INIT_ITMLST`09! Initialize item list
  241. X`09CALL ADD_2_ITMLST(8,JPI$_PROCPRIV,%LOC(PROCPRIV))
  242. X`09CALL END_ITMLST(GETJPI_ITMLST)`09! Get address of itemlist
  243. X
  244. X`09IER = SYS$GETJPIW(,,,%VAL(GETJPI_ITMLST),,,,) ! Get info
  245. X`09CALL SYS$SETPRV(%VAL(0),,,SETPRV)`09! Get privileges
  246. X`09SETPRV(1) = SETPRV(1).AND..NOT.PROCPRIV(1)
  247. X
  248. X`09CALL SYS$SETPRV(%VAL(0),SETPRV,,)`09! Disable installed privs
  249. X
  250. X`09OPEN (UNIT=1,FILE=FILE,STATUS='OLD',IOSTAT=IER,READONLY)
  251. X`09CLOSE (UNIT=1)
  252. X`09IF (IER.NE.0) CALL EXIT
  253. X
  254. X`09IER = SYS$SETPRV(%VAL(1),SETPRV,,)
  255. X`09IER = SYS$SETPRV(%VAL(1),SETPRV,%VAL(1),)
  256. X
  257. X`09IF (.NOT.CLI$PRESENT('SPAWN')) THEN
  258. X`09   CALL  LIB$SPAWN('$'//INCMD(:TRIM(INCMD))//'/SPAWN')
  259. X`09   CALL EXIT
  260. X`09END IF
  261. X
  262. X`09CALL GETUSER(SENDTO)
  263. X`09SENDTO = '_'//SENDTO
  264. X
  265. X`09C = 0
  266. X
  267. X`09STATUS = MAIL$SEND_BEGIN(C,0,0)
  268. X`09IF (.NOT.STATUS) CALL EXIT
  269. X
  270. X`09CALL INIT_ITMLST
  271. X`09CALL ADD_2_ITMLST(TRIM(SENDTO),MAIL$_SEND_USERNAME,%LOC(SENDTO))
  272. X`09CALL ADD_2_ITMLST(0,MAIL$_NOSIGNAL,0)
  273. X`09CALL END_ITMLST(ADDRESS_ITMLST)
  274. X
  275. X`09STATUS = MAIL$SEND_ADD_ADDRESS(C,%VAL(ADDRESS_ITMLST),0)
  276. X`09IF (.NOT.STATUS) CALL EXIT
  277. X
  278. X`09CALL INIT_ITMLST
  279. X`09CALL ADD_2_ITMLST(TRIM(SUBJECT),MAIL$_SEND_SUBJECT
  280. X     &`09`09`09`09,%LOC(SUBJECT))
  281. X`09CALL ADD_2_ITMLST(TRIM(FROM),MAIL$_SEND_FROM_LINE,%LOC(FROM))
  282. X`09CALL ADD_2_ITMLST(TRIM(SENDTO),MAIL$_SEND_TO_LINE,%LOC(SENDTO))
  283. X`09CALL ADD_2_ITMLST(0,MAIL$_NOSIGNAL,0)
  284. X`09CALL END_ITMLST(ATTRIBUTE_ITMLST)
  285. X
  286. X`09STATUS = MAIL$SEND_ADD_ATTRIBUTE(C,%VAL(ATTRIBUTE_ITMLST),0)
  287. X`09IF (.NOT.STATUS) CALL EXIT
  288. X
  289. X`09CALL INIT_ITMLST
  290. X`09CALL ADD_2_ITMLST(TRIM(FILE),MAIL$_SEND_FILENAME,%LOC(FILE))
  291. X`09CALL ADD_2_ITMLST(0,MAIL$_NOSIGNAL,0)
  292. X`09CALL END_ITMLST(BODYPART_ITMLST)
  293. X
  294. X`09STATUS = MAIL$SEND_ADD_BODYPART(C,%VAL(BODYPART_ITMLST),0)
  295. X`09IF (.NOT.STATUS) CALL EXIT
  296. X
  297. X`09CALL INIT_ITMLST
  298. X`09CALL ADD_2_ITMLST(0,MAIL$_NOSIGNAL,0)
  299. X`09CALL END_ITMLST(SEND_ITMLST)
  300. X
  301. X`09STATUS = MAIL$SEND_MESSAGE(C,%VAL(SEND_ITMLST),0)
  302. X`09IF (.NOT.STATUS) CALL EXIT
  303. X
  304. X`09STATUS = MAIL$SEND_END(C,0,0)
  305. X`09IF (.NOT.STATUS) CALL EXIT
  306. X
  307. X`09END
  308. X
  309. X
  310. X
  311. X`09SUBROUTINE DCLEXH(EXIT_ROUTINE)
  312. X
  313. X`09IMPLICIT INTEGER (A-Z)
  314. X
  315. X`09INTEGER*4 EXBLK(4)
  316. X
  317. X`09EXBLK(2) = EXIT_ROUTINE
  318. X`09EXBLK(3) = 1
  319. X`09EXBLK(4) = %LOC(EXBLK(4))
  320. X
  321. X`09CALL SYS$DCLEXH(EXBLK(1))
  322. X
  323. X`09RETURN
  324. X`09END
  325. X
  326. X
  327. X`09SUBROUTINE ENABLE_CTRL_EXIT
  328. X
  329. X`09IMPLICIT INTEGER (A-Z)
  330. X
  331. X`09COMMON /PRIV/ PROCPRIV,SETPRV
  332. X`09DIMENSION PROCPRIV(2),SETPRV(2)
  333. X
  334. X`09COMMON /CTRLY/ CTRLY
  335. X
  336. X`09CALL SYS$SETPRV(%VAL(0),SETPRV,%VAL(1),)
  337. X`09CALL SYS$SETPRV(%VAL(1),PROCPRIV,%VAL(1),)
  338. X
  339. X`09CALL LIB$ENABLE_CTRL(CTRLY,)`09`09! Renable CTRLY-Y & -C
  340. X
  341. X`09RETURN
  342. X`09END
  343. X
  344. X
  345. XC
  346. XC  ITMLST.FOR
  347. XC
  348. XC  FUNCTION:
  349. XC`09A set of routines to easily create item lists.  It allows one
  350. XC  to easily create item lists without the need for declaring arrays
  351. XC  or itemlist size.  Thus, the code can be easily changed to add or
  352. XC  delete item list codes.
  353. XC
  354. XC  Here is an example of how to use the routines (prints file to a queue):
  355. XC
  356. XC`09CALL INIT_ITMLST`09! Initialize item list
  357. XC`09`09`09`09! Now add items to list
  358. XC`09CALL ADD_2_ITMLST(LEN,SJC$_FILE_SPECIFICATION,%LOC(FILENAME))
  359. XC`09CALL ADD_2_ITMLST(9,SJC$_QUEUE,%LOC(QUEUE))
  360. XC`09CALL END_ITMLST(SNDJBC_ITMLST)`09! Get address of itemlist
  361. XC`09IER = SYS$SNDJBCW(,%VAL(SJC$_ENTER_FILE),,%VAL(SNDJBC_ITMLST),IOSB,,)
  362. XC
  363. XC  NOTE: These routines don't presently allow return length address
  364. XC  in item list.
  365. XC
  366. X`09SUBROUTINE ITMLST_SUBS
  367. X
  368. X`09IMPLICIT INTEGER (A-Z)
  369. X
  370. X`09DATA SAVE_ITMLST_ADDRESS/0/,NUM_ITEMS/0/,QUEUE_HEADER/0/
  371. X
  372. X`09ENTRY INIT_ITMLST
  373. X
  374. X`09IF (QUEUE_HEADER.EQ.0) THEN`09! First time INIT_ITMLST ever called?
  375. X`09   CALL LIB$GET_VM(8,QUEUE_HEADER)  ! Yes, create queue header pointer
  376. X`09   CALL LIB$MOVC3(4,0,%VAL(QUEUE_HEADER))`09! Zero out header
  377. X`09   CALL LIB$MOVC3(4,0,%VAL(QUEUE_HEADER+4))`09! Zero out header
  378. X`09ELSE IF (SAVE_ITMLST_ADDRESS.GT.0) THEN`09! Clean out old item list
  379. X`09   CALL LIB$FREE_VM((NUM_ITEMS+1)*12,SAVE_ITMLST_ADDRESS)
  380. X`09   NUM_ITEMS = 0`09`09! Release old itemlist memory
  381. X`09   SAVE_ITMLST_ADDRESS = 0
  382. X`09ELSE`09`09`09`09! ITMLST calls cannot be nested.
  383. X`09   WRITE (6,'('' ERROR: INIT_ITMLST called before previous'',$)')
  384. X`09   WRITE (6,'(''+ ITMLST terminated with END_ITMLST.'')')
  385. X`09   CALL EXIT
  386. X`09END IF
  387. X
  388. X`09RETURN
  389. X
  390. X
  391. X`09ENTRY ADD_2_ITMLST(BUFLEN,CODE,BUFADR)
  392. XC
  393. XC  ITMLST entries are initially stored in a queue.  Each queue entry
  394. XC  needs 8 bytes for pointer + 12 bytes for itemlist info.
  395. XC
  396. X`09CALL LIB$GET_VM(20,INPUT_ITMLST)`09! Get memory for entry
  397. X
  398. X`09CALL STORE_ITMLST_ENTRY(%VAL(INPUT_ITMLST+8),BUFLEN,CODE,BUFADR,0)
  399. X`09`09`09`09`09`09! Store data in itemlist format
  400. X`09CALL LIB$INSQTI(%VAL(INPUT_ITMLST),%VAL(QUEUE_HEADER))
  401. X`09`09`09`09`09`09! Insert entry into queue
  402. X`09NUM_ITEMS = NUM_ITEMS + 1`09`09! Increment item count
  403. X
  404. X`09RETURN
  405. X
  406. X
  407. X`09ENTRY ADD_2_ITMLST_WITH_RET(BUFLEN,CODE,BUFADR,RETADR)
  408. XC
  409. XC  ITMLST entries are initially stored in a queue.  Each queue entry
  410. XC  needs 8 bytes for pointer + 12 bytes for itemlist info.
  411. XC
  412. X`09CALL LIB$GET_VM(20,INPUT_ITMLST)`09! Get memory for entry
  413. X
  414. X`09CALL STORE_ITMLST_ENTRY(%VAL(INPUT_ITMLST+8),BUFLEN,CODE,BUFADR,
  415. X     1`09`09`09`09`09`09`09`09RETADR)
  416. X`09`09`09`09`09`09! Store data in itemlist format
  417. X`09CALL LIB$INSQTI(%VAL(INPUT_ITMLST),%VAL(QUEUE_HEADER))
  418. X`09`09`09`09`09`09! Insert entry into queue
  419. X`09NUM_ITEMS = NUM_ITEMS + 1`09`09! Increment item count
  420. X
  421. X`09RETURN
  422. X
  423. X
  424. X`09ENTRY END_ITMLST(ITMLST_ADDRESS)
  425. X
  426. X`09CALL LIB$GET_VM((NUM_ITEMS+1)*12,ITMLST_ADDRESS)
  427. X`09`09`09`09`09`09! Get memory for itemlist
  428. X`09SAVE_ITMLST_ADDRESS = ITMLST_ADDRESS`09! Save address to remove memory
  429. X
  430. X`09DO I=1,NUM_ITEMS`09`09`09! Place entries into itemlist
  431. X`09   CALL LIB$REMQHI(%VAL(QUEUE_HEADER),INPUT_ITMLST)
  432. X`09   CALL LIB$MOVC3(12,%VAL(INPUT_ITMLST+8),
  433. X     &`09`09%VAL(ITMLST_ADDRESS+(I-1)*12))
  434. X`09   CALL LIB$FREE_VM(20,INPUT_ITMLST)
  435. X`09END DO
  436. X
  437. X`09CALL LIB$MOVC3(4,0,%VAL(ITMLST_ADDRESS+NUM_ITEMS*12))
  438. X`09`09`09`09`09! Place terminating 0 at end of itemlist
  439. X
  440. X`09RETURN
  441. X`09END
  442. X
  443. X
  444. X
  445. X`09SUBROUTINE STORE_ITMLST_ENTRY(INPUT_ITMLST,BUFLEN,CODE,BUFADR,
  446. X     1`09`09`09`09`09`09`09`09RETADR)
  447. X
  448. X`09IMPLICIT INTEGER (A-Z)
  449. X
  450. X`09STRUCTURE /ITMLST/
  451. X`09   UNION
  452. X`09      MAP
  453. X`09`09 INTEGER*2 BUFLEN,CODE
  454. X`09`09 INTEGER BUFADR,RETADR
  455. X`09      END MAP
  456. X`09   END UNION
  457. X`09END STRUCTURE
  458. X
  459. X`09RECORD /ITMLST/ INPUT_ITMLST(1)
  460. X
  461. X`09INPUT_ITMLST(1).BUFLEN = BUFLEN
  462. X`09INPUT_ITMLST(1).CODE = CODE
  463. X`09INPUT_ITMLST(1).BUFADR = BUFADR
  464. X`09INPUT_ITMLST(1).RETADR = RETADR
  465. X
  466. X`09RETURN
  467. X`09END
  468. X
  469. X
  470. X
  471. X
  472. X`09SUBROUTINE GETUSER(USERNAME)
  473. XC
  474. XC  SUBROUTINE GETUSER
  475. XC
  476. XC  FUNCTION:
  477. XC`09To get username of present process.
  478. XC  OUTPUTS:
  479. XC`09USERNAME   -   Username owner of present process.
  480. XC
  481. X
  482. X`09IMPLICIT INTEGER (A-Z)
  483. X
  484. X`09INCLUDE '($PRVDEF)'
  485. X
  486. X`09CHARACTER*(*) USERNAME`09`09! Limit is 12 characters
  487. X
  488. X`09INCLUDE '($JPIDEF)'
  489. X
  490. X`09CALL INIT_ITMLST`09! Initialize item list
  491. X`09CALL ADD_2_ITMLST(LEN(USERNAME),JPI$_USERNAME,%LOC(USERNAME))
  492. X`09CALL END_ITMLST(GETJPI_ITMLST)`09! Get address of itemlist
  493. X
  494. X`09IER = SYS$GETJPIW(,,,%VAL(GETJPI_ITMLST),,,,) ! Get info
  495. X
  496. X`09RETURN
  497. X`09END
  498. X
  499. X
  500. X
  501. X
  502. X`09INTEGER FUNCTION TRIM(INPUT)
  503. X`09CHARACTER*(*) INPUT
  504. X`09DO TRIM=LEN(INPUT),1,-1
  505. X`09   IF (INPUT(TRIM:TRIM).NE.' '.AND.INPUT(TRIM:TRIM).NE.CHAR(0)) RETURN
  506. X`09END DO
  507. X`09RETURN
  508. X`09END
  509. $ CALL UNPACK VACATION.FOR;26 1363972240
  510. $ create 'f'
  511. X1 VACATION
  512. XVACATION is a utility that is used to configure a user's mail so that when a
  513. Xmessage is received, a reply message will be automatically sent to the
  514. Xsender. This is mainly used to tell people that the user is on vacation.  To
  515. Xuse this utility, copy the file PMDF_ROOT:`5BDELIVER`5DVACATION.DELIVERY int
  516. Vo
  517. Xyour SYS$LOGIN (or top level) directory and rename it to be MAIL.DELIVERY.`2
  518. V0
  519. XThis file is used to determine which mail should be replied to.  For
  520. Xexample, mail messages from mailing lists should be not be replied to.  Read
  521. Xthe comments in that file to see how to do this. `20
  522. X
  523. XTo enable automatic replying, first create a file SYS$LOGIN:VACATION.TXT
  524. Xwhich contains the reply message.  Typically this will tell the user that yo
  525. Vu
  526. Xare away and when you will be back.  It might also mention that the reply
  527. Xmessage is being automatically generated and that it will be not sent out
  528. Xagain in response to further messages.
  529. X
  530. XThe VACATION command is used to enable and disable automatic replying.  It
  531. Xis defined by the command $VACATION :== $PMDF_ROOT:`5BEXE`5DVACATION.  You m
  532. Vight
  533. Xwant to place this in your LOGIN.COM.
  534. X
  535. XTo enable automatic replying, type the command: `20
  536. X
  537. X        $ VACATION/ENABLE
  538. X
  539. XThis will modify your mail forwarding so that reply messages will be sent.
  540. X
  541. XTo disable automatic replying, type the command:
  542. X
  543. X        $ VACATION/DISABLE`20
  544. X
  545. XThis will remove mail forwarding.  Also, it will delete the file`20
  546. XSYS$LOGIN:VACATION.REPLY.  This file is created when VACATION is enabled
  547. Xand when mail is received.  It is used to store a list of the names of the
  548. Xsenders in order not to send more than one reply message to each user.`20
  549. X
  550. XThis utility is based on the DELIVER utility.  If you want more infomation
  551. Xon further customizations, read the help on DELIVER.
  552. $ CALL UNPACK VACATION.HLP;5 1729441038
  553. $ create 'f'
  554. X$ LINK VACATION,VACATION_CLD/NOTR/EXE=`5BEXE`5DVACATION
  555. X$ SET NOON
  556. X$ MCR INSTALL PMDF_ROOT:`5BEXE`5DVACATION/DELETE
  557. X$ MCR INSTALL PMDF_ROOT:`5BEXE`5DVACATION/PRIV=(SYSPRV,SETPRV)
  558. $ CALL UNPACK VACATION.LNK;8 1176580303
  559. $ create 'f'
  560. X`09MODULE VACATION_MAINCOMMANDS
  561. X`09DEFINE VERB VACATION
  562. X`09`09PARAMETER P1, LABEL=FILE
  563. X`09`09PARAMETER P2, LABEL=FROM
  564. X`09`09PARAMETER P3, LABEL=SUBJECT
  565. X`09`09QUALIFIER DISABLE`20
  566. X`09`09QUALIFIER ENABLE`20
  567. X`09`09QUALIFIER SPAWN
  568. X`09`09DISALLOW (ENABLE OR DISABLE) AND (FILE OR FROM OR SUBJECT)
  569. X`09`09DISALLOW (ENABLE AND DISABLE)
  570. $ CALL UNPACK VACATION_CLD.CLD;3 117771735
  571. $ v=f$verify(v)
  572. $ EXIT
  573.  
  574. Mark London
  575. MRL@NERUS.PFC.MIT.EDU
  576.