home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume6 / mti.roff < prev    next >
Text File  |  1989-04-23  |  29KB  |  875 lines

  1. Newsgroups: comp.sources.misc
  2. Subject: v06i087: mti, travel itinerary macros for *roff, version 2.0
  3. From: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
  4. Reply-To: jdpeek@rodan.acs.syr.edu (Jerry Peek)
  5.  
  6. Posting-number: Volume 6, Issue 87
  7. Submitted-by: jdpeek@rodan.acs.syr.edu (Jerry Peek)
  8. Archive-name: mti.roff
  9.  
  10. [Apologies for disappearing, folks -- shock brought on by the phone bill.
  11. ;-) :-(  I'll try to get stuff out on a weekly basis from now on; perhaps
  12. I'll be able to make other arrangements later.  But long-distance phone
  13. calls to Virginia aren't cheap -- not on a daily basis.  ++bsa]
  14.  
  15. If you're planning a road trip, these macros for {n,t,di,etc}roff can
  16. help.  You plug in the timepoints, distance between the timepoints,
  17. your gas/oil costs per mile/km, and any other expenses (like food).
  18. They print a formatted itinerary, including daily and grand totals of the
  19. distance travelled and your expenses.  They're real nice for long trips
  20. because it's easy to scope out an itinerary, let *roff calculate the
  21. costs and distances, then rearrange things if you need to.
  22. Plus, you get a nice itinerary printout to give friends/boss/parents.
  23.  
  24. I released the first version of these a few years ago.  This shar file
  25. includes a man page with examples and a short sample itinerary for you
  26. to format.  The shar file has a "tr" command in it, so if you're not
  27. using a UNIX-like shell to un-shar it, see README.mti for help.
  28. Enjoy, happy travels, etc.  Let me know how you like these.
  29.  
  30. --Jerry Peek; Syracuse University Academic Computing Services; Syracuse, NY
  31.   jdpeek@rodan.acs.syr.edu, jdpeek@suvm.bitnet
  32.   +1 315 443-3995
  33.  
  34. # This is a shell archive.  Remove anything before this line,
  35. # then unpack it by saving it in a file and typing "sh file".
  36. #
  37. # Wrapped by rodan.acs.syr.edu!jdpeek on Thu Apr  6 22:17:30 EDT 1989
  38. # Contents:  README.mti mti.7 sample.mti tmac.ti
  39.  
  40. echo extracting - README.mti
  41. sed 's/^X//' > "README.mti" <<'X//E*O*F README.mti//'
  42. XThe -mti macros make formatted travel itineraries.  This is version 2.0.
  43. XI released an earlier version a few years ago.  This one has more
  44. Xerror-checking and some bug fixes.
  45. X
  46. XThis shar file has:
  47. X    tmac.ti        The *roff formatter macro package
  48. X    mti.7        The manual page source for tmac.ti
  49. X    sample.mti    Sample itinerary source file
  50. X    README.mti    This file
  51. X
  52. XNOTE: The real tmac.ti file has some control-G characters in it.  But,
  53. Xsome mail/news handlers strip out these control characters.  So, in
  54. Xthis shar file, they're packed as capital Z characters.  A "tr" command
  55. Xtranslates the Z's back to ^G's.  If you don't have "tr", use an editor
  56. Xto change each Z into ^G (or any non-text character).
  57. X
  58. XThe sample.mti file is an itinerary I made up to show what a source
  59. Xfile might look like.  I use one like it as a template; when I want a
  60. Xnew itinerary, I just plug in the new starting day/date and change the
  61. Xentries.  The comments in the file make it so easy that I never look at
  62. Xthe man page.
  63. X
  64. XYou might start by un-sharing these files and formatting the man page:
  65. X    Xroff -man mti.7 > somefile
  66. X(If you need a formatted copy of the man page, let me know.)
  67. X
  68. XNext, try feeding the sample.mti file to your version of *roff.
  69. XIf you put tmac.ti in your /usr/lib/tmac directory, you can do:
  70. X    Xroff -mti sample.mti > itinerary
  71. XOr, you can feed the macro file to *roff directly:
  72. X    Xroff tmac.ti sample.mti > itinerary
  73. X
  74. XThen look at the output "itinerary" file.  It should have a title page
  75. Xand two more pages.  The last day's entry should start:
  76. X    DAY #5 OF TRIP: Monday, 5/22
  77. Xand end:
  78. X    TODAY: travel 473 miles in 13 hours for $15; other costs $8; total $23
  79. X    TO DATE: 1331 miles, $215
  80. Xif not, your formatter might have some math troubles.
  81. X
  82. XFinally, compare the itinerary to the sample output in the manual
  83. Xpage.  If they have the same format, you're probably all set.  If you
  84. Xhave trouble -- or, if you find bugs and fix them -- PLEASE tell me.
  85. X
  86. XBy the way, do whatever you want with these macros.  If you
  87. Xredistribute them or edit them, please give me credit.  If you sell
  88. Xthem, I wouldn't mind a share of the proceeds. :-)
  89. X
  90. X                Jerry Peek, Syracuse University
  91. X                jdpeek@rodan.acs.syr.edu, jdpeek@suvm.bitnet
  92. X//E*O*F README.mti//
  93. chmod u=rw,g=r,o=r README.mti
  94.  
  95. echo extracting - mti.7
  96. sed 's/^X//' > "mti.7" <<'X//E*O*F mti.7//'
  97. X.de xX    \" automatic revision-date macro
  98. X.ds Da \\$4
  99. X..
  100. X.xX $Header: /u3/acs/jdpeek/.man/man7/mti.7,v 2.0 89/04/06 20:55:47 jdpeek Exp $
  101. X.\"
  102. X.TH MTI 7 "\*(Da"
  103. X.UC 4
  104. X.SH NAME
  105. Xmti \- travel-itinerary formatting macros
  106. X.SH SYNOPSIS
  107. X\fBnroff  \-mti\fP  [ \-rQ2 ]  [ options ]  file  ...
  108. X.br
  109. X\fBtroff  \-mti\fP  [ \-rQ2 ]  [ options ]  file  ...
  110. X.SH DESCRIPTION
  111. XThis package of \fInroff\fP\| and \fItroff\fP\|
  112. Xmacro definitions makes formatted travel itineraries.
  113. XThey're especially designed for road trips \(em 
  114. Xthrough they'll work for other kinds of travel, too.
  115. X.PP
  116. XYou give them the starting date, the time and mileage points you'll
  117. Xhit each day, and each food/lodging expense you plan.
  118. X(You also need to store the cost of travelling \(em usually fuel economy,
  119. Xwith other fixed traveling expenses optional).
  120. XThey'll output an itinerary that lists each timepoint and expense,
  121. Xas well as daily and running totals of cost and distance.
  122. X.SH EXAMPLE
  123. XHere's a small part of a finished (fictional) itinerary, with `. . .' in place
  124. Xof the omitted lines:
  125. X.nf
  126. X'\" kludges to make .tl titles line up with current margins:
  127. X.lt -0.5i
  128. X.po +0.5i
  129. X.ft B
  130. X      .
  131. X      .
  132. X.tl'ITINERARY'Page 6'CROSS-COUNTRY MOVE'
  133. X      .
  134. X      .
  135. X.in -0.5i
  136. X6 PM  Camp near Dustbowl, NM
  137. XLODGING: Camping fee  $8.
  138. X
  139. XTODAY: 415 mi. in 9 hours for $18; other costs $8; total $26
  140. XTO DATE: 1690 miles, $77
  141. X\l'6i'
  142. XDAY #7 OF TRIP: Friday, 6/21
  143. X.in
  144. X
  145. X.tl '7 AM  NM-18, US-87 to Dalhart, TX''129 mi'
  146. X.tl '9 AM  Time-zone change from MDT to CDT'''
  147. X.tl '10 AM  TX-297, TX-281, US-22, US-83 to Canadian, TX''135 mi'
  148. X.tl 'FOOD: Lunch in Canadian?  $6.'''
  149. X.tl '1 PM  US-83, OK-54, I-40 to Oklahoma City''140 mi'
  150. X.in -0.5i
  151. X4 PM  Arrive at Fred Smith's home
  152. X
  153. XTODAY: 404 mi. in 8 hours for $17; other costs $6; total $23
  154. XTO DATE: 2094 miles, $100
  155. X\l'6i'
  156. XDAY #8 OF TRIP: Saturday, 6/22
  157. X      .
  158. X      .
  159. X'\" if this line crosses a page boundary, page footer/header will be indented!
  160. X.ft P
  161. X.in
  162. X.lt +0.5i
  163. X.po -0.5i
  164. X.fi
  165. X.ad
  166. X.PP
  167. XThe source (unformatted) itinerary commands are flexible enough that it's easy
  168. Xto rearrange your itinerary, try alternate routes, etc... after you've set up
  169. Xan itinerary, the macros will calculate the total trip length and expenses.
  170. X.PP
  171. XFor example, here are the lines that produced the itinerary above.
  172. XStart each day with \fI.SD\fR, use \fI.EN\fR for each entry, and
  173. Xuse \fI.ED\fR at the end of each day.
  174. XLodging expenses are marked with \fI.LO\fR, and \fI.FO\fR is for food:
  175. X.nf
  176. X.na
  177. X.ft B
  178. X.sp
  179. X  .EN 6 PM "Camp near Dustbowl, NM"
  180. X  .LO "Camping fee" 8
  181. X  .ED 9
  182. X  .SD
  183. X  .EN 7 AM "NM-18, US-87 to Dalhart, TX" 129
  184. X  .EN 9 AM "Time-zone change from MDT to CDT" 0
  185. X  .EN 10 AM "TX-297, TX-281, US-22, US-83 to Canadian, TX" 135
  186. X  .FO "Lunch in Canadian?" 6
  187. X  .EN 1 PM "US-83, OK-54, I-40 to Oklahoma City" 140
  188. X  .EN 4 PM "Arrive at Fred Smith's home" 0
  189. X  .ED 8
  190. X  .SD
  191. X.ft P
  192. X.fi
  193. X.ad
  194. X.sp
  195. XThe argument to ED is the number of hours spent traveling that day.
  196. XThe last argument to EN is the number of miles driven since the previous
  197. Xtimepoint.
  198. X.PP
  199. XAll the \fI\-mti\fR macros are defined below.
  200. XIt's okay to use most \fInroff\fP\| and \fItroff\fP\| requests
  201. Xwith this package.
  202. XHowever, watch out for fill- and non-fill modes, because
  203. Xthe macros switch back and forth between the two modes.
  204. XSee the individual macro descriptions below.
  205. XAlso, be careful about setting number and string registers:
  206. Xthe macros use a few of them (see the list below).
  207. X.PP
  208. XFont and point size changes with \ef and \es are also allowed;
  209. Xfor example, ``\efIword\efR'' will italicize \fIword.\fP
  210. X.SH OPTION
  211. XIf you use \fI\-rQ2\fR on the command line, the macros won't print the
  212. X\fBTODAY:\fR and \fBTO DATE:\fR summaries at the end of each day.
  213. XOther command-line options go directly to \fInroff\fR or \fItroff\fR.
  214. X.SH REGISTERS AND MACROS
  215. XHere's a summary of the number and string registers \(em and the macros \(em
  216. Xthat make up the
  217. X.I \-mti
  218. Xmacros.
  219. XAfter the summary are detailed explanations and examples of each.
  220. XSo, beginners can safely skip this reference section for now.
  221. XThis list doesn't include internal macros and registers.
  222. X.if n .in 0
  223. X.tr _.
  224. X.ta \w'Regist.Nam'u +\w'InitialVal'u +\w'String/ 'u
  225. X.sp
  226. X.ne 2
  227. X.nf
  228. XRegist.    Initial    String/    \0 Explanation
  229. XName    Value    Number
  230. X.sp .3
  231. XCS    $    str    currency-unit symbol
  232. XDT    \-    num    numerical date of trip start
  233. XDU    \-    num    distance per currency unit
  234. XDY    \-    str    name of day when trip starts
  235. XFD    \-    num    number of days in February
  236. XMN    \_    num    numerical month of trip start
  237. XTI    \_    str    title for top corner each page
  238. XUL    miles    str    distance unit name, long
  239. XUS    mi    str    distance unit name, short
  240. X.sp 2
  241. X.ta \w'MacroNam'u +\w'NumberAr'u +\w'ReqdOptl 'u
  242. X.sp .3
  243. XMacro    Number    Req'd/    \0 Explanation
  244. XName    Args.    Opt'nl
  245. X.sp .3
  246. X_ED    1    reqd    end of day
  247. X_EN    4    reqd    timepoint entry
  248. X_ET    0    reqd    end of title page
  249. X_FO    2    optl    food expense
  250. X_LO    2    optl    lodging expense
  251. X_OE    2    optl    other expenses
  252. X_SD    0    reqd    start of daily entry
  253. X_ST    2    reqd    start of title block
  254. X.fi
  255. X.SH "SOURCE-FILE DESCRIPTION"
  256. XThis part of the manual describes what you should put in a
  257. Xsource (unformatted) itinerary file.
  258. X.sp 2
  259. XThe \fBFIRST SECTION\fR of each file stores numbers and strings (words) that
  260. Xset the initial conditions (starting date, fuel economy, etc.).
  261. XYou can put these first few lines in any order, as long as they're all at
  262. Xthe top of the file.
  263. XIndividual descriptions:
  264. X.TP 12
  265. X.B \&.ds DY Day
  266. X.I Required:
  267. Xday of the week that trip starts.
  268. XFirst letter of day must be capitalized, rest lower-case.
  269. XNo abbreviations.
  270. XExample:
  271. X.br
  272. X    \fB.ds DY Saturday\fR
  273. X.TP 12
  274. X.B \&.nr DT Date
  275. X.I Required:
  276. Xnumerical date when the trip starts.
  277. XFor example, if the trip started on August 15th:
  278. X.br
  279. X    \fB.nr DT 15\fR
  280. X.TP 12
  281. X.B \&.nr MN Month\fR
  282. X.I Required:
  283. Xnumerical month that the trip starts (January = 1, February = 2, etc.).
  284. XExample:
  285. X.br
  286. X    \fB.nr MN 8\fR
  287. X.TP 12
  288. X.B \&.nr DU xx
  289. X.I Required:
  290. XDistance you can travel for each currency-unit you spend (in the U.S.,
  291. Xnumber of miles that cost one dollar; in France, kilometres you can travel for
  292. Xone Franc; etc.).
  293. XThis rather weird number was designed to get around a problem:
  294. X.I nroff
  295. Xand
  296. X.I troff
  297. Xcan't do decimal arithmetic -- only integers.
  298. XHere are two examples that should clear things up:
  299. X.sp
  300. XOn your trip across the U.S., you guess that you'll get 30 miles/gallon,
  301. Xand that gas will cost $1.25 per gallon.
  302. XSo, the miles per dollar are:
  303. X.ft B
  304. X.nf
  305. X.na
  306. X.sp
  307. X        30 miles/gallon
  308. X    -----------------------\0=\024\0miles/dollar
  309. X      1.25 dollars/gallon
  310. X.ad
  311. X.fi
  312. X.ft P
  313. X.sp
  314. X\&...which means that you'd put this line in your source file:
  315. X.br
  316. X    \fB.nr DU 24\fR
  317. X.sp
  318. XOr, if you were driving across Europe, getting 17 kilometres/litre and
  319. Xspending DKK 6- per litre, the setting of \fBDU\fP should be 17 divided by 6,
  320. Xor about 3 kilometres per DKK.
  321. XSo, you'd put this line in your itinerary:
  322. X.br
  323. X    \fB.nr DU 3\fR
  324. X.TP 12
  325. X.B \&.nr FD 2x
  326. X.I Required:
  327. XNumber of days in February \(em 28 or 29.
  328. XTells program whether this is a leap year.
  329. XMust be set, even if your itinerary doesn't include February.
  330. XFor example, if there are 28 days in February during the year of your trip (a
  331. Xnon-leap year):
  332. X.br
  333. X    \fB.nr FD 28\fR
  334. X.sp
  335. XIf your trip crosses two years but only one February, set FD for the 
  336. Xnumber of days in the February when you'll be traveling.
  337. X.TP 12
  338. X.B \&.ds TI TITLE
  339. X.I Optional:
  340. Xtitle for upper right-hand corner of each page.
  341. XIf you don't define it, it'll be blank.
  342. XHere's how you could define it:
  343. X.br
  344. X    \fB.ds TI CROSS-COUNTRY TRIP\fR
  345. X.TP 12
  346. X.B \&.ds CS xxx
  347. X.I Optional:
  348. Xcurrency symbol (default = \fB$\fR).
  349. XCan be set to other currency names, like \fISKR\fR, this way:
  350. X.br
  351. X    \fB.ds CR SKR\fR
  352. X.sp
  353. XThis is used in the \fBTODAY:\fR and \fBTO DATE:\fR lines printed at the end
  354. Xof each day.
  355. X.sp
  356. XNormally, the currency symbol and the cost are printed touching each other,
  357. Xlike \fB$123\fR or \fBhfl162\fR (Dutch Guilder).
  358. XIf you want space after the currency symbol (like \fBhfl\ 162\fR),
  359. Xuse a backslash and a trailing blank when you define the currency symbol.
  360. XFor example,
  361. X.br
  362. X    \fB.ds CR hfl\e\ \fR
  363. X.br
  364. XJust be sure to put the blank after the backslash!
  365. X.TP 12
  366. X.B \&.ds US units
  367. X.I Optional:
  368. Xthe units of distance, short name.
  369. XThe default is \fImi\fR (miles).
  370. XTo change it to, say, \fIkm\fR:
  371. X.br
  372. X    \fB.ds US km\fR
  373. X.TP 12
  374. X.B \&.ds UL units
  375. X.I Optional:
  376. Xthe units of distance, long name, plural.
  377. XThe default is \fImiles\fR.
  378. XTo change it to, say, \fIkilometers\fR:
  379. X.br
  380. X    \fB.ds UL kilometers\fR
  381. X.PP
  382. X.sp
  383. XThe \fBTITLE SECTION\fR is usually short.
  384. XIt starts with the \fI.ST\fR macro, and ends with \fI.ET\fR.
  385. XIf you want other text on the title page, you can put it between the macro
  386. Xcalls.
  387. X.TP 12
  388. X\fB\&.ST\0"First line"\0"Second line"\fR
  389. X.I Required:
  390. Xafter you've set the number and string registers in the first section,
  391. Xyou must use \fI.ST\fR (start title page).
  392. XIf you want a title on the first page, it can have one or two lines...
  393. Xthe macros will make it in larger type and center each line.
  394. X.sp
  395. XQuote each line of the title, and put the text on the same line as
  396. Xthe \fI.ST\fR call.
  397. XIf you don't want one or both lines, just leave them out.
  398. XExample:
  399. X.br
  400. X    \fB.ST\0"Our trip"\0"to Lower Slobovia"\fR
  401. X.sp
  402. XAfter the \fI.ST\fP, you can put text for the title page.
  403. XYou'll usually want to skip down a few lines (say, \fB.sp 5\fR)
  404. Xbefore starting the text.
  405. XThe title page is made in no-fill mode, so what you type in will be exactly
  406. Xwhat appears on the title page.
  407. XYou can start fill mode (\fB.fi\fR and maybe \fB.ad\fR), but BE SURE to
  408. Xgo back to non-fill mode (\fB.nf\fR) before you use the \fB.ET\fR macro!
  409. X.TP 12
  410. X.B \&.ET
  411. X.I Required:
  412. XAt the end of the title page (after the \fB.ST\fP and the optional text),
  413. Xend the title page with \fB.ET\fR.
  414. X.PP
  415. X.sp 2
  416. XThe last part of the file are the \fBDAILY ENTRIES\fR, which are enclosed
  417. Xwith \fB.SD\fR and \fB.ED\fR macro calls.  Here are the details:
  418. X.TP 12
  419. X.B \&.SD
  420. XEach day's entry must start with the \fI.SD\fR macro.
  421. XPut it on a line by itself.
  422. X.TP 12
  423. X\fB\&.EN time AM/PM "description" distance
  424. X.I Required:
  425. XFor each timepoint in a day, use the \fI.EN\fR (entry) macro.
  426. XThe first argument is the clock time, a number between 1 and 12 (though
  427. X24-hour time will work fine here).
  428. X.sp
  429. XIf you use a 12-hour clock, the second argument should be AM, PM, NOON, or
  430. Xsomething like that.
  431. XOn a 24-hour clock, use your imagination.
  432. X.sp
  433. XYou should put quotes around the third argument, which is usually the
  434. Xdescription of a route you're taking since the last timepoint.
  435. XIt can also hold the name of a destination.
  436. X.sp
  437. XThe fourth argument must be a number \(em the distance travelled
  438. Xduring this entry.
  439. X(Or, in other words, the distance travelled since the previous entry.)
  440. X.sp
  441. XHere's an example.
  442. XIt's 10 AM and you're about to leave Auckland, New Zealand for a trip to
  443. XRotorua.
  444. XThe trip is via highways 3 and 12 and is 200 kilometres long (I'm making this
  445. Xup!).
  446. XYou'd write this \fI.EN\fP macro:
  447. X.br
  448. X    \fB.EN\010\0AM\0"Hwys. 3, 12 to Rotorua"\0200\fR
  449. X.sp
  450. XYou can omit the fourth argument in places where it isn't needed:
  451. X.br
  452. X    \fB.EN\04\0PM\0"Arrive in Timbuktu"\fR
  453. X.TP 12
  454. X\fB\&.FO "description" cost\fR
  455. X.I Optional:
  456. XWhen you plan to spend money for food, note it with \fI.FO\fR.
  457. XYou must use \fI.FO\fR between a pair of \fI.SD\fR and \fI.ED\fR macros.
  458. X.sp
  459. XExample: in the middle of the day, you plan to spend $55 for lunch for your tour
  460. Xgroup.
  461. XYou might use this entry:
  462. X.br
  463. X    \fB.FO "lunch at Grease Cafe, El Paso" 55\fR
  464. X.TP 12
  465. X\fB\&.LO "description" cost\fR
  466. X.I Optional:
  467. XWhen you plan lodging expenses, note them with \fI.LO\fR.
  468. XUse \fI.LO\fR between a pair of \fI.SD\fR and \fI.ED\fR macros.
  469. X.sp
  470. XExample: You'll be staying at the Waldorf-Astoria tonight, spending $1000.
  471. XYou might use this entry, including the phone number for convenience:
  472. X.br
  473. X    \fB.LO "Waldorf-Astoria, 212/345-2999" 1000\fR
  474. X.TP 12
  475. X\fB\&.OE "description" cost\fR
  476. X.I Optional:
  477. XThe \fI.OE\fR (capital letter O) macro is for expenses besides food and
  478. Xlodging.
  479. XYou have to use \fI.OE\fR between a pair of \fI.SD\fR and \fI.ED\fR macros.
  480. X.sp
  481. XExample: You expect a transmission overhaul in Nairobi:
  482. X.br
  483. X    \fB.OE "Rebuild transmission" 550\fR
  484. X.TP 12
  485. X.B \&.ED total-time
  486. X.I Required:
  487. XAt the end of each day's entries, use \fI.ED\fR with the total time spent
  488. Xtraveling that day.
  489. XThis is usually the elapsed time between the first and last timepoints in the
  490. Xday \(em unless you're crossing time zones.
  491. X.sp
  492. XExample: If you started traveling at 9 AM and finished at 5 PM, that's 8
  493. Xhours of traveling:
  494. X.br
  495. X    \fB.ED 8\fR
  496. X.TP 12
  497. X.B \&.HL
  498. X.I Optional:
  499. XDraws a horizontal dashed line across the page.
  500. X.TP 12
  501. X.B lines with no macros
  502. XIf you don't use a macro on a line, the line will be copied directly
  503. Xto the itinerary without filling, adjusting, or wrapping.
  504. XThe lines may look better if you indent them with a tab character.
  505. X.SH FILES
  506. X/u3/acs/jdpeek/.lib/tmac/tmac.ti
  507. X.SH SEE ALSO
  508. X.IR ms (7),
  509. X.IR nroff (1),
  510. X.IR troff (1).
  511. X.SH BUGS
  512. XMore default settings might be nice.
  513. XSome parts could be shortened by using subroutines.
  514. XInternal register names aren't unique enough and may conflict with any
  515. Xregisters that the user defines.
  516. X.SH AUTHOR
  517. XJerry Peek; Syracuse University; Syracuse, New York.
  518. X.PP
  519. XI'm not an expert at formatter macros, so use these at your own risk.
  520. XI'll take no responsibility for their accuracy or suitability for any purpose.
  521. X.PP
  522. XBugs (and kudos) to jdpeek@rodan.acs.syr.edu or jdpeek@suvm.bitnet.
  523. XFlames will probably be ".ig"'ed. :-)
  524. X//E*O*F mti.7//
  525. chmod u=rw,g=r,o=r mti.7
  526.  
  527. echo extracting - sample.mti
  528. sed 's/^X//' > "sample.mti" <<'X//E*O*F sample.mti//'
  529. X.ds TI TRIP TO WASHINGTON, DC
  530. X.nr FD 28    \" number of days in February (29 on leap years, 28 non-leap)
  531. X.nr MN 5    \" month (1 = January, etc.) of first day of trip
  532. X.nr DT 18    \" date of month for first day of trip
  533. X'\" Distance traveled per currency unit (here, miles/dollar).
  534. X'\" To calculate, divide the distance/fuel-unit by the cost/fuel-unit.
  535. X'\" For example, if you get 35 miles/gallon and gas costs $1.50/gallon,
  536. X'\" DU would be 35 divided by 1.5, or 23 miles/dollar.
  537. X'\" Make sure that units here are the same as the units shown in the CS string.
  538. X'\" You can also include costs for oil, tires, etc. if you want.
  539. X.nr DU 30
  540. X'\" day of month of first day of trip:
  541. X.ds DY Thursday
  542. X.ST "Trip to Washington, DC" "(camping by the coast in Maryland)"
  543. X.HL
  544. XBefore trip:
  545. X.sp
  546. X\(sq  Remember tarp and shovel
  547. X\(sq  Take good clothes for dinner out
  548. X.ET
  549. X.SD
  550. X.EN 7 AM "I-81 to Harrisburg, PA" 273
  551. X.EN 12 NOON "I-83 to Baltimore, MD" 87
  552. X.FO "Lunch on the road" 5
  553. X.EN 2 PM "I-695 westbound, MD-3, MD-4, MD-497 to Calvert Cliffs Park" 95
  554. X.EN 4 PM "Get to Calvert Cliffs"
  555. X.LO "Camp at Calvert Cliffs State Park, Maryland; (301)456-7890" 10
  556. X.ED 9
  557. X.SD
  558. X.FO "Breakfast" 4
  559. X.EN 8 AM "MD-4, MD-235 to Maryland's first Capitol" 20
  560. X.EN 9 AM "MD-235, MD-5, MD-234, US-301, MD-5 to Washington" 78
  561. X.EN 11 AM "Get to Washington"
  562. X.FO "Picnic lunch" 6
  563. X.FO "Dinner" 15
  564. X.EN 8 PM "Pennsylvania Ave., MD-4 to campground" 60
  565. X.EN 9 PM "Get to campground"
  566. X.LO "Calvert Cliffs State Park" 10
  567. X.ED 13
  568. X.SD
  569. X.FO "Breakfast" 4
  570. X.EN 9 AM "MD-4, some street to Washington" 60
  571. X.EN 10 AM "Get to Washington"
  572. X.FO "Lunch at sidewalk stand or ?" 10
  573. X.FO "Dinner" 20
  574. X.EN 8 PM "Pennsylvania Ave., MD-4 to campground" 60
  575. X.EN 9 PM "Get to campground"
  576. X.LO "Calvert Cliffs State Park" 10
  577. X.ED 12
  578. X.SD
  579. X.FO "Breakfast" 4
  580. X.EN 8 AM "MD-4, MD-506, MD-231, MD-5, Suitland Pkwy. to Washington, DC" 65
  581. X.EN 10 AM "Get to Washington"
  582. X.FO "Picnic lunch" 6
  583. X.FO "Dinner someplace nice" 50
  584. X.EN 8 PM "Pennsylvania Ave., MD-4 to campground" 60
  585. X.EN 9 PM "Get to campground"
  586. X.LO "Calvert Cliffs State Park" 10
  587. X.ED 13
  588. X.SD
  589. X.EN 8 AM "MD-4 to Prince Frederick; MD-402&261 to Friendship; MD-2 to Annapolis" 56
  590. X.EN 9 AM "Get to Annapolis"
  591. X.OE "Museum admission" 8
  592. X.EN 12 NOON "US-301, I-97, MD-3 to Baltimore; I-695 west to Timonium" 47
  593. X.EN 1 PM "Lunch at Rax Restaurant" 10
  594. X.EN 2 PM "I-83 to Harrisburg, PA" 87
  595. X.EN 4 PM "I-81 to Syracuse" 273
  596. X.EN 9 PM "Get to Syracuse"
  597. X.ED 13
  598. X//E*O*F sample.mti//
  599. chmod u=rw,g=r,o=r sample.mti
  600.  
  601. echo extracting - tmacTEMP.ti
  602. sed 's/^X//' <<'X//E*O*F tmac.ti//' > "tmacTEMP.ti"
  603. X'\" $Header: /u3/acs/jdpeek/.lib/tmac/tmac.ti,v 2.0 89/04/06 10:50:14 jdpeek Exp $
  604. X'\"
  605. X'\"      ti travel-itinerary macros for nroff/troff
  606. X'\"    Jerry Peek; Syracuse, NY; jdpeek@rodan.acs.syr.edu, jdpeek@suvm.bitnet
  607. X'\"
  608. X'\"    If you make changes or bug fixes, please send me a copy so I can
  609. X'\"    pass them on to other people...
  610. X'\"
  611. X.nf
  612. X.na
  613. X'\" Set line length to 8 inches (nroff only) so ".EN" entries can be longer:
  614. X.nr St 0    \" dumb register that counts use of ST and ET macros
  615. X.if n \{\
  616. X.ll 8i
  617. X.lt 8i \}
  618. X.nr MI 0    \" total miles/kilometers
  619. X.nr MT 0    \" miles or km today
  620. X.nr CO 0    \" total cost
  621. X.nr CT 0    \" cost today
  622. X.nr DA 0 1    \" total number of days and amount (1 day) to increment by
  623. X'\" Units to use: miles or km.  UL is long, for daily summaries; US is short,
  624. X'\" used on each line.  User can re-define in file; should be lower-case:
  625. X.ds UL miles
  626. X.ds US mi
  627. X'\" Currency symbol.  User can re-define in file.
  628. X'\" Can have several characters, including trailing blanks:
  629. X.ds CS $
  630. X'\" Start-itinerary macro.  $1 = title for first page.
  631. X'\" $2 = optional second title line.
  632. X.de ST
  633. X'\" Check flag to see if user has already invoked ST macro.  If so, scream.
  634. X'\" If not, set flag:
  635. X.if !\\n(sT=0 .ER "only one .ST per file, please."
  636. X.nr sT 1
  637. X.if !\\n(eT=0 .ER "You must use the .ET macro after the .ST"
  638. X.if \\n(.$>2 .ER ".ST: you can't use more than two arguments."
  639. X'\" Because first .SD will increment starting day, decrement it here.
  640. X'\" Also, be sure starting day name is valid (if valid, set cK to 0):
  641. X.nr cK 1
  642. X.if '\\*(DY'Sunday' \{\
  643. X.ds Dy Saturday
  644. X.nr cK 0\}
  645. X.if '\\*(DY'Monday' \{\
  646. X.ds Dy Sunday
  647. X.nr cK 0\}
  648. X.if '\\*(DY'Tuesday' \{\
  649. X.ds Dy Monday
  650. X.nr cK 0\}
  651. X.if '\\*(DY'Wednesday' \{\
  652. X.ds Dy Tuesday
  653. X.nr cK 0\}
  654. X.if '\\*(DY'Thursday' \{\
  655. X.ds Dy Wednesday
  656. X.nr cK 0\}
  657. X.if '\\*(DY'Friday' \{\
  658. X.ds Dy Thursday
  659. X.nr cK 0\}
  660. X.if '\\*(DY'Saturday' \{\
  661. X.ds Dy Friday
  662. X.nr cK 0\}
  663. X.if \\n(cK .ER ".ST: day name DY is missing or invalid."
  664. X.rr cK
  665. X.rm DY
  666. X.if \\n(DU<1 .ER ".ST: DU undefined or less than 1.  Can't calculate fuel cost."
  667. X.if (\\n(FD<28):(\\n(FD>29) .ER ".ST: FD undefined, or not 28 or 29."
  668. X.if (\\n(MN<1):(\\n(MN>12) .ER ".ST: MN (\\n(MN) undefined, less than 1 or more than 12."
  669. X.if \\n(DT<1 .ER ".ST: starting date DT is less than 1 or not defined."
  670. X'\" Put DT (starting date: 1, 2, ..., 31) in Dt (date register);
  671. X'\" set Dt to one day before start of trip because first .SD will increment it:
  672. X.nr Dt \\n(DT-1 1
  673. X.rm DT
  674. X.sp 1i
  675. X.ps +4
  676. X.ce 3
  677. XITINERARY \(em
  678. X.sp 2
  679. X\\$1
  680. X.sp
  681. X\\$2
  682. X.ps
  683. X'\" Don't print info below if user put -rQn on commandline:
  684. X.if \\nQ=0 \{\
  685. X.sp 2
  686. X.ce 2
  687. XThe traveling costs in this itinerary are based on the assumption that
  688. Xeach \\n(DU \*(UL travelled will cost one \\*(CS for gas, oil, etc.
  689. X.sp \}
  690. X..
  691. X.de ET    \" end of title page macro
  692. X.ie !\\n(sT=1 .ER ".ET: You must use the ST macro first."
  693. X.el .nr sT 0
  694. X.ie !\\n(eT=0 .ER ".ET: Only one .ET per file."
  695. X.el .nr eT 1
  696. X'\" set eD register so that first .SD doesn't say "missing .ED":
  697. X.nr eD 1
  698. X.nr sD 0
  699. X'\" Set page number to one so first page of itinerary will have that number:
  700. X.pn 1
  701. X.bp
  702. X..
  703. X.de ER
  704. X.fl
  705. X.ab*** ERROR at input line \\n(.c: \\$1 ***
  706. X..
  707. X.de NP    \" new-page macro (from Kernighan tutorial, pg. 8)
  708. X'bp
  709. X.ps +2
  710. X'sp 0.5i
  711. X.if t .sp 0.3i    \" more space if using troff
  712. X'tl ZITINERARYZPage %Z\\*(TIZ
  713. X'sp 0.3i
  714. X.ps
  715. X..
  716. X.wh -1i NP    \" when get within 1 inch of page bottom, do NP (no . needed)
  717. X.de EM    \" end-of-input macro (called by the ".em EM" trap)
  718. X.ie !\\n(eD=1 .ER "Missing .ED at end of file"
  719. X..
  720. X.em EM
  721. X'\" .HL draws em-dashes margin-to-margin.
  722. X.de HL
  723. X.br
  724. X\l'\\n(.lu-\\n(.iu\&\(em'
  725. X.br
  726. X..
  727. X'\" Start-of-day macro
  728. X.de SD
  729. X.if !\\n(.$=0 .ER "Don't use any argument with .SD."
  730. X.if !\\n(eT=1 .ER ".SD: You must use .ET first."
  731. X.ie !\\n(eD=1 .ER ".SD: Missing .ED"
  732. X.el .nr eD 0
  733. X.ie !\\n(sD=0 .ER ".SD: Two .SD's with no .ED between"
  734. X.el .nr sD 1
  735. X.nr MT 0    \" set today's mileage (kilometrage?)  to zero
  736. X.nr CT 0    \" set today's cost to zero
  737. X'\" handle month changes
  738. X.if \\n(MN=1  .if \\n(Dt>30\{
  739. X.nr MN 2
  740. X.nr Dt 0\}
  741. X.if \\n(MN=2 .if \\n(Dt>(\\n(FD-1)\{\
  742. X.nr MN 3
  743. X.nr Dt 0\}
  744. X.if \\n(MN=3  .if \\n(Dt>30\{
  745. X.nr MN 4
  746. X.nr Dt 0\}
  747. X.if \\n(MN=4  .if \\n(Dt>29\{
  748. X.nr MN 5
  749. X.nr Dt 0\}
  750. X.if \\n(MN=5  .if \\n(Dt>30\{
  751. X.nr MN 6
  752. X.nr Dt 0\}
  753. X.if \\n(MN=6  .if \\n(Dt>29\{
  754. X.nr MN 7
  755. X.nr Dt 0\}
  756. X.if \\n(MN=7  .if \\n(Dt>30\{
  757. X.nr MN 8
  758. X.nr Dt 0\}
  759. X.if \\n(MN=8  .if \\n(Dt>30\{
  760. X.nr MN 9
  761. X.nr Dt 0\}
  762. X.if \\n(MN=9  .if \\n(Dt>29\{
  763. X.nr MN 10
  764. X.nr Dt 0\}
  765. X.if \\n(MN=10  .if \\n(Dt>30\{
  766. X.nr MN 11
  767. X.nr Dt 0\}
  768. X.if \\n(MN=11  .if \\n(Dt>29\{
  769. X.nr MN 12
  770. X.nr Dt 0\}
  771. X.if \\n(MN=12  .if \\n(Dt>30\{
  772. X.nr MN 1
  773. X.nr Dt 0\}
  774. X'\" change day
  775. X.ie '\\*(Dy'Sunday' .ds Dy Monday
  776. X.el .ie '\\*(Dy'Monday' .ds Dy Tuesday
  777. X.el .ie '\\*(Dy'Tuesday' .ds Dy Wednesday
  778. X.el .ie '\\*(Dy'Wednesday' .ds Dy Thursday
  779. X.el .ie '\\*(Dy'Thursday' .ds Dy Friday
  780. X.el .ie '\\*(Dy'Friday' .ds Dy Saturday
  781. X.el .ds Dy Sunday
  782. X'\" start keep (from Kernighan tutorial, pg. 12)
  783. X.br    \" start fresh line
  784. X.di Xx    \" collect text in diversion (macro) Xx
  785. XDAY #\\n+(DA OF TRIP: \\*(Dy, \\n(MN/\\n+(Dt
  786. X.sp
  787. X..
  788. X'\" Entry macro.  $1 = hour, $2 = AM/PM/etc., "$3" = description, $4 = miles/km
  789. X.de EN
  790. X.if !\\n(sD=1 .ER ".EN: Missing .SD"
  791. X.if \\n(.$<3 .ER ".EN: Not enough arguments"
  792. X'\" THIS NEXT TEST IS SORT OF A PAIN.  COMMENTED OUT FOR NOW:
  793. X'\".ie ((\\$1=0):(\\$1=1):(\\$1=2):(\\$1=3):(\\$1=4):(\\$1=5):(\\$1=6):(\\$1=7):(\\$1=8):(\\$1=9):(\\$1=10):(\\$1=11):(\\$1=12)) '\" Do nothing
  794. X'\".el .ER ".EN: first argument has to be hour digit"
  795. X.ie \\$4>0 .tl Z\\$1 \\$2\0\0\\$3ZZ\\$4 \*(USZ
  796. X.el \\$1 \\$2\0\0\\$3
  797. X.nr MT +\\$4
  798. X..
  799. X'\" Food macro.  $1 = Description; $2 = cost in CS units, decimals truncated:
  800. X.de FO
  801. X.if !\\n(sD=1 .ER ".FO: Missing .SD"
  802. X.if !\\n(.$=2 .ER "Usage is:  .FO description cost"
  803. X.nr CT +\\$2
  804. X.br
  805. XFOOD: \\$1  \\*(CS\\$2.
  806. X..
  807. X'\" Lodging macro.  $1 = Description; $2 = cost in CS units, decimals truncated:
  808. X.de LO
  809. X.if !\\n(sD=1 .ER ".LO: Missing .SD"
  810. X.if !\\n(.$=2 .ER "Usage is:  .LO description cost"
  811. X.nr CT +\\$2
  812. X.br
  813. XLODGING: \\$1  \\*(CS\\$2.
  814. X..
  815. X'\" Other-expense macro.  $1 = Description; $2 = cost in CS units:
  816. X.de OE
  817. X.if !\\n(sD=1 .ER ".OE: Missing .SD"
  818. X.if !\\n(.$=2 .ER "Usage is:  .OE description cost"
  819. X.nr CT +\\$2
  820. X.br
  821. XOTHER: \\$1  \\*(CS\\$2.
  822. X..
  823. X'\" End of day macro.  $1 = number of hours today
  824. X.de ED
  825. X.ie !\\n(sD=1 .ER ".ED: Missing .SD"
  826. X.el .nr sD 0
  827. X.ie !\\n(eD=0 .ER ".ED: Two .ED's with no .SD between."
  828. X.el .nr eD 1
  829. X.if !\\n(.$=1 .ER ".ED: missing or too many arguments."
  830. X.nr TT (\\n(MT/\\n(DU)    \" total travel cost = miles divided by miles/dollar 
  831. X.nr OT \\n(CT        \" other total (TT not added in yet)
  832. X.nr CT (\\n(TT+\\n(OT)    \" overwrite CT to hold total cost today: TT + OT
  833. X.nr CO +\\n(CT        \" add today's cost to total trip cost
  834. X.nr MI +\\n(MT        \" add today's miles (MT) to total trip miles (MI)
  835. X.sp
  836. X.fi
  837. X'\" If -rQ1 was used on commandline, don't print lines:
  838. X.if \\nQ=0 \{\
  839. XTODAY:\0travel \\n(MT \\*(UL in \\$1
  840. X.ie '\\$1'1' hour
  841. X.el hours
  842. Xfor \\*(CS\\n(TT; other costs \\*(CS\\n(OT; total \\*(CS\\n(CT
  843. X.nf
  844. XTO DATE:\0\\n(MI \\*(UL, \\*(CS\\n(CO \}
  845. X.HL
  846. X'\" end keep
  847. X.br    \" get last partial line
  848. X.di    \" end diversion
  849. X.if \\n(dn>=\\n(.t .bp    \" do .bp if text doesn't fit on current page
  850. X.Xx    \" bring back text stored in Xx macro
  851. X..
  852. X//E*O*F tmac.ti//
  853. echo making tmacTEMP.ti into tmac.ti
  854. tr Z '\007' < "tmacTEMP.ti" > "tmac.ti"
  855. rm tmacTEMP.ti
  856. chmod u=rw,g=r,o=r tmac.ti
  857.  
  858. echo Inspecting for damage in transit...
  859. temp=/tmp/shar$$; dtemp=/tmp/.shar$$
  860. trap "rm -f $temp $dtemp; exit" 0 1 2 3 15
  861. cat > $temp <<\!!!
  862.       50     383    2186 README.mti
  863.      427    2304   13238 mti.7
  864.       69     453    2390 sample.mti
  865.      249    1305    7129 tmac.ti
  866.      795    4445   24943 total
  867. !!!
  868. wc  README.mti mti.7 sample.mti tmac.ti | sed 's/^X//' | diff -b $temp - >$dtemp
  869. if [ -s $dtemp ]
  870. then echo "Ouch [diff of wc output]:" ; cat $dtemp
  871. else echo "No problems found."
  872. fi
  873. exit 0
  874.  
  875.