home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / x / volume20 / mrolo / part01 < prev    next >
Encoding:
Text File  |  1993-07-14  |  46.9 KB  |  1,652 lines

  1. Newsgroups: comp.sources.x
  2. From: gregor@asdi.saic.com (Gregg Hanna x6033)
  3. Subject: v20i096:  mrolo - Motif rolodex, Part01/02
  4. Message-ID: <csx-v20i096=mrolo.164513@sparky.Sterling.COM>
  5. X-Md4-Signature: 5801732e417267feea0b1a4d425fe273
  6. Sender: chris@sparky.sterling.com (Chris Olson)
  7. Organization: Sterling Software
  8. Date: Thu, 15 Jul 1993 21:45:30 GMT
  9. Approved: chris@sterling.com
  10.  
  11. Submitted-by: gregor@asdi.saic.com (Gregg Hanna x6033)
  12. Posting-number: Volume 20, Issue 96
  13. Archive-name: mrolo/part01
  14. Environment: X11, OSF/Motif
  15.  
  16. MRolo is a Motif based cardfile program.  It was designed to
  17. be as simple as possible, and was born out of frustration with
  18. xrolo's and xrolodex's many menus.  Even if you love xrolo or
  19. xrolodex, you might want to look at prolo in this distribution,
  20. which is a program for generating PostScript versions of
  21. a card file database.
  22.  
  23. Some features of mrolo:
  24.  
  25.   o From the main screen you see a list of all cards and
  26.     may scroll through them viewing/editing cards as desired.
  27.  
  28.   o You may jump to a section of the card file by clicking on
  29.     a lettered tab on the edge of the screen (A-Z).
  30.  
  31.   o You can search cards quickly by simply entering text
  32.     in a text field on the main screen.
  33.  
  34.   o There are no explicit save/load operations, the current
  35.     display reflects the disk file's contents and changes
  36.     are verified and written at the time of the change.
  37.  
  38. The program uses a disk format identical to xrolo, so if you use
  39. that it should be an easy switch.  A program is supplied to convert
  40. xrolodex files to mrolo, so that's not too hard either.
  41.  
  42. This software was developed on a Sun4 running SunOS 4.1.1.
  43. It should run on other systems, but it is not tested.
  44.  
  45. Please send bug reports, feedback, and suggestions
  46. to gregor@kafka.saic.com
  47.  
  48. Copyright 1993 by gregg hanna.  Permission is granted
  49. to use, modify, and distribute this program.  Basically
  50. do anything you want with it, but if you want to use
  51. it or any part of it to make money you must get further
  52. permission from me.
  53.  
  54. #! /bin/sh
  55. # This is a shell archive.  Remove anything before this line, then unpack
  56. # it by saving it into a file and typing "sh file".  To overwrite existing
  57. # files, type "sh file -c".  You can also feed this as standard input via
  58. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  59. # will see the following message at the end:
  60. #        "End of archive 1 (of 2)."
  61. # Contents:  mrolo mrolo/Imakefile mrolo/MRolo.ad mrolo/Makefile.std
  62. #   mrolo/README mrolo/callback.c mrolo/mcard.bm mrolo/mrolo.bm
  63. #   mrolo/mrolo.c mrolo/mrolo.man mrolo/patchlevel.h mrolo/prolo.c
  64. #   mrolo/prolo.man mrolo/rolo.h mrolo/roloP.h mrolo/rolox.c
  65. #   mrolo/rolox.h mrolo/xr2mr mrolo/xr2mr.man
  66. # Wrapped by gregor@asdi on Wed Jun 23 19:55:48 1993
  67. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  68. if test ! -d 'mrolo' ; then
  69.     echo shar: Creating directory \"'mrolo'\"
  70.     mkdir 'mrolo'
  71. fi
  72. if test -f 'mrolo/Imakefile' -a "${1}" != "-c" ; then 
  73.   echo shar: Will not clobber existing file \"'mrolo/Imakefile'\"
  74. else
  75. echo shar: Extracting \"'mrolo/Imakefile'\" \(490 characters\)
  76. sed "s/^X//" >'mrolo/Imakefile' <<'END_OF_FILE'
  77. XSRCS = callback.c creation.c mrolo.c rolo.c rolox.c
  78. XOBJS = callback.o creation.o mrolo.o rolo.o rolox.o
  79. XLDLIBS = -lXm $(SYSLIBS)
  80. X
  81. XComplexProgramTarget(mrolo)
  82. XInstallAppDefaults(MRolo)
  83. X
  84. Xall:: prolo
  85. X
  86. Xprolo: prolo.c rolo.o
  87. X    $(LINK.c) -o prolo prolo.c rolo.o
  88. X
  89. Xclean::
  90. X    $(RM) prolo xdef
  91. X
  92. XInstallProgram(prolo,$(BINDIR))
  93. XInstallProgram(xr2mr,$(BINDIR))
  94. XInstallManPage(prolo,$(MANDIR))
  95. XInstallManPage(xr2mr,$(MANDIR))
  96. X
  97. Xxdef: MRolo.ad
  98. X    sed -e '1,$$s/^#/!/g' -e '1,$$s/^*/mrolo*/g' MRolo.ad > xdef
  99. X
  100. END_OF_FILE
  101. if test 490 -ne `wc -c <'mrolo/Imakefile'`; then
  102.     echo shar: \"'mrolo/Imakefile'\" unpacked with wrong size!
  103. fi
  104. # end of 'mrolo/Imakefile'
  105. fi
  106. if test -f 'mrolo/MRolo.ad' -a "${1}" != "-c" ; then 
  107.   echo shar: Will not clobber existing file \"'mrolo/MRolo.ad'\"
  108. else
  109. echo shar: Extracting \"'mrolo/MRolo.ad'\" \(1403 characters\)
  110. sed "s/^X//" >'mrolo/MRolo.ad' <<'END_OF_FILE'
  111. X# fonts:  note that addressList ought to have a fixed width font
  112. X*fontList: -*-helvetica-*-r-*-*-14-*-*-*-*-*-*-*
  113. X*addressList*fontList: -*-fixed-*-r-*-*-14-*-*-*-*-*-*-*
  114. X
  115. X# default size of the comment box on the card info screen
  116. X*commentText.rows: 10
  117. X*commentText.cols: 80
  118. X
  119. X# size of the filter text field
  120. X*filterText.columns:    11
  121. X
  122. X# these control the way buttons look, if you change to
  123. X# XmPACK_TIGHT you probably want to make resizeWidth False
  124. X*XmRowColumn*packing:    XmPACK_COLUMN
  125. X*rowColumn.resizeWidth:    True
  126. X*rowColumn.width:    500
  127. X
  128. X# custom resources, shown here with default values
  129. X*showSecondary:    True
  130. X*sizePrimary:    20
  131. X
  132. X# colors you *might* like
  133. X*foreground:    black
  134. X*background:    white
  135. X*XmPushButton*foreground:    black
  136. X*XmPushButton*background:    pink
  137. X*XmText*foreground:    black
  138. X*XmText*background:    alice blue
  139. X*addressList*foreground:    black
  140. X*addressList*background:    honeydew
  141. X
  142. X# labels
  143. X*quitButton.labelString:    Quit
  144. X*addCardButton.labelString:    Add Card
  145. X*clearButton.labelString:    Clear Filter
  146. X*deleteCardButton.labelString:    Delete Card
  147. X*okButton.labelString:        OK
  148. X*cancelButton.labelString:    Cancel
  149. X*primaryLabel.labelString:    Phone
  150. X*secondaryLabel.labelString:    Phone #2
  151. X*nameLabel.labelString:        Name
  152. X*messageBox.okLabelString:    Yes
  153. X*messageBox.cancelLabelString:    No
  154. X*messageBox.helpLabelString:    Help
  155. X
  156. X# tranversals
  157. X*quitButton.traversalOn:    True
  158. X*addCardButton.traversalOn:    True
  159. X*clearButton.traversalOn:    True
  160. X
  161. END_OF_FILE
  162. if test 1403 -ne `wc -c <'mrolo/MRolo.ad'`; then
  163.     echo shar: \"'mrolo/MRolo.ad'\" unpacked with wrong size!
  164. fi
  165. # end of 'mrolo/MRolo.ad'
  166. fi
  167. if test -f 'mrolo/Makefile.std' -a "${1}" != "-c" ; then 
  168.   echo shar: Will not clobber existing file \"'mrolo/Makefile.std'\"
  169. else
  170. echo shar: Extracting \"'mrolo/Makefile.std'\" \(731 characters\)
  171. sed "s/^X//" >'mrolo/Makefile.std' <<'END_OF_FILE'
  172. XCFLAGS = -O -D_NO_PROTO
  173. XBINDIR = /usr/bin/X11
  174. XAPPDIR = /usr/lib/X11/app-defaults
  175. XMANDIR = /usr/man/mann
  176. XMANEXT = n
  177. XLDLIBS = -lXm -lXt -lX11
  178. X
  179. Xall: mrolo prolo
  180. X
  181. Xmrolo: callback.o creation.o mrolo.o rolo.o rolox.o
  182. X    $(COMPILE.c) -o mrolo mrolo.o rolo.o rolox.o creation.o callback.o $(LDLIBS)
  183. X
  184. Xprolo: prolo.c rolo.o
  185. X    $(COMPILE.c) -o prolo prolo.c rolo.o
  186. X
  187. Xxdef: MRolo.ad
  188. X    sed -e '1,$$s/^#/!/g' -e '1,$$s/^*/mrolo*/g' MRolo.ad > xdef
  189. X
  190. Xinstall: all
  191. X    cp mrolo $(BINDIR)
  192. X    cp prolo $(BINDIR)
  193. X    cp xr2mr $(BINDIR)
  194. X    chmod +x $(BINDIR)/xr2mr
  195. X    cp MRolo.ad $(APPDIR)/MRolo
  196. X
  197. Xinstall.man:
  198. X    cp mrolo.man $(MANDIR)/mrolo.$(MANEXT)
  199. X    cp prolo.man $(MANDIR)/prolo.$(MANEXT)
  200. X    cp xr2mr.man $(MANDIR)/xr2mr.$(MANEXT)
  201. X
  202. Xclean:
  203. X    $(RM) *.o prolo mrolo xdef *~
  204. X
  205. END_OF_FILE
  206. if test 731 -ne `wc -c <'mrolo/Makefile.std'`; then
  207.     echo shar: \"'mrolo/Makefile.std'\" unpacked with wrong size!
  208. fi
  209. # end of 'mrolo/Makefile.std'
  210. fi
  211. if test -f 'mrolo/README' -a "${1}" != "-c" ; then 
  212.   echo shar: Will not clobber existing file \"'mrolo/README'\"
  213. else
  214. echo shar: Extracting \"'mrolo/README'\" \(2114 characters\)
  215. sed "s/^X//" >'mrolo/README' <<'END_OF_FILE'
  216. XMRolo is a Motif based cardfile program.  It was designed to
  217. Xbe as simple as possible, and was born out of frustration with
  218. Xxrolo's and xrolodex's many menus.
  219. X
  220. XSome features of mrolo:
  221. X
  222. X  o From the main screen you see a list of all cards and
  223. X    may scroll through them viewing/editing cards as desired.
  224. X
  225. X  o You may jump to a section of the card file by clicking on
  226. X    a lettered tab on the edge of the screen (A-Z).
  227. X
  228. X  o You can search cards quickly by simply entering text
  229. X    in a text field on the main screen.
  230. X
  231. X  o There are no explicit save/load operations, the current
  232. X    display reflects the disk file's contents and changes
  233. X    are verified and written at the time of the change.
  234. X
  235. XThe program uses a disk format identical to xrolo, so if you use
  236. Xthat it should be an easy switch.  See the manpage for lots of
  237. Xdetails.
  238. X
  239. XThe package contains three programs:
  240. X
  241. X    mrolo - the Motif cardfile program
  242. X    prolo - a program to print the cardfile
  243. X    xr2mr - a script to convert xrolodex files to
  244. X                mrolo/xrolo format
  245. X
  246. XTo compile the programs do as follows:
  247. X
  248. X    xmkmf
  249. X    make
  250. X
  251. XIf you do not have xmkmf or imake, edit and use Makefile.std.
  252. XIf you want to try the program out without installing
  253. Xit then do the following:
  254. X
  255. X    make xdef
  256. X
  257. XThen merge the file xdef with your X defaults.  The file
  258. Xxdef is a slightly massaged version of the MRolo.ad
  259. Xfile.  If you don't already have a .rolo file in your
  260. Xhome directory an empty file will be created for you.
  261. X
  262. XTo install the applications and the app-defaults file:
  263. X
  264. X    make install
  265. X
  266. XTo install the man-page:
  267. X
  268. X    make install.man
  269. X
  270. XIf you hack this program, good luck.  It was originally
  271. Xgenerated with Builder Xcessory, but I changed it quite
  272. Xa bit from that.  You probably want to do a "make depend"
  273. Xbefore changing anything, just to keep 'make' honest.
  274. X
  275. XPlease send bug reports, feedback, and suggestions
  276. Xto gregor@kafka.saic.com
  277. X
  278. XCopyright 1993 by gregg hanna.  Permission is granted
  279. Xto use, modify, and distribute this program.  Basically
  280. Xdo anything you want with it, but if you want to use
  281. Xit or any part of it to make money you must get further
  282. Xpermission from me.
  283. X
  284. END_OF_FILE
  285. if test 2114 -ne `wc -c <'mrolo/README'`; then
  286.     echo shar: \"'mrolo/README'\" unpacked with wrong size!
  287. fi
  288. # end of 'mrolo/README'
  289. fi
  290. if test -f 'mrolo/callback.c' -a "${1}" != "-c" ; then 
  291.   echo shar: Will not clobber existing file \"'mrolo/callback.c'\"
  292. else
  293. echo shar: Extracting \"'mrolo/callback.c'\" \(4976 characters\)
  294. sed "s/^X//" >'mrolo/callback.c' <<'END_OF_FILE'
  295. X/* Copyright 1993 by gregg hanna */
  296. X/*
  297. X * Generated by the ICS builderXcessory (BX).
  298. X *
  299. X *
  300. X * Builder Xcessory 1.0.1.
  301. X *
  302. X */
  303. X#include <Xm/Xm.h>
  304. X#include <Xm/Text.h>
  305. X#include "rolo.h"
  306. X
  307. Xint DisplayedCard;
  308. Xint DialogForDelete = 0;
  309. X
  310. X
  311. Xvoid SetDialogDelete()
  312. X{
  313. X  Arg args[1];
  314. X  XmString xmstr;
  315. X  extern Widget MessageBox;
  316. X
  317. X  DialogForDelete = 1;
  318. X
  319. X  xmstr = XmStringCreateSimple("Delete this card?");
  320. X  XtSetArg(args[0],XmNmessageString,xmstr);
  321. X  XtSetValues(MessageBox,args,1);
  322. X
  323. X  XmStringFree(xmstr);
  324. X}
  325. X
  326. Xvoid SetDialogUpdate()
  327. X{
  328. X  Arg args[2];
  329. X  XmString xmstr;
  330. X  extern Widget MessageBox;
  331. X
  332. X  DialogForDelete = 0;
  333. X  
  334. X  xmstr = XmStringCreateSimple("Save changes to this card?");
  335. X  XtSetArg(args[0],XmNmessageString,xmstr);
  336. X  XtSetValues(MessageBox,args,1);
  337. X
  338. X  XmStringFree(xmstr);
  339. X}
  340. X
  341. Xvoid
  342. XActuallyDeleteCard(w, client, call)
  343. XWidget w;
  344. Xcaddr_t client;
  345. Xcaddr_t call;
  346. X{
  347. X  XmAnyCallbackStruct *acs=(XmAnyCallbackStruct*)call;
  348. X  extern Widget Shell001, Shell002, ListForRolo;
  349. X  void OKCard();
  350. X  Arg arg[1];
  351. X  int n;
  352. X
  353. X  DeleteRoloCard(DisplayedCard);
  354. X  if ( DialogForDelete ) { /* The dialog was a delete dialog */
  355. X    XmListDeletePos(ListForRolo,DisplayedCard+1);
  356. X    WriteRolo();
  357. X  } else {  /* we were using the delete dialog as an update dialog */
  358. X    XtSetArg(arg[0],XmNtopItemPosition,&n);
  359. X    XtGetValues(ListForRolo,arg,1);
  360. X    DisplayedCard = -1;
  361. X    OKCard(NULL,NULL,NULL); /* will re-add this rec and update */
  362. X    XmListSetPos(ListForRolo,n);
  363. X  }
  364. X
  365. X  XtUnmapWidget(Shell001);
  366. X  XtUnmapWidget(Shell002);
  367. X}
  368. X
  369. X
  370. Xvoid
  371. XAddCard(w, client, call)
  372. XWidget w;
  373. Xcaddr_t client;
  374. Xcaddr_t call;
  375. X{
  376. X  extern Widget nameText, numberText, numberText2, commentText, Shell001, deleteCardButton;
  377. X  Arg args[1];
  378. X
  379. X  XmTextSetString(nameText,"");
  380. X  XmTextSetString(numberText,"");
  381. X  XmTextSetString(numberText2,"");
  382. X  XmTextSetString(commentText,"");
  383. X
  384. X  XtSetArg(args[0],XmNsensitive,False);
  385. X  XtSetValues(deleteCardButton,args,1);
  386. X
  387. X  DisplayedCard = -1;
  388. X  
  389. X  XtMapWidget(Shell001);
  390. X}
  391. X
  392. Xvoid
  393. XCancelCard(w, client, call)
  394. XWidget w;
  395. Xcaddr_t client;
  396. Xcaddr_t call;
  397. X{
  398. X  extern Widget Shell001;
  399. X  XtUnmapWidget(Shell001);
  400. X}
  401. X
  402. Xvoid
  403. XDeleteCard(w, client, call)
  404. XWidget w;
  405. Xcaddr_t client;
  406. Xcaddr_t call;
  407. X{
  408. X  extern Widget Shell002;
  409. X  SetDialogDelete();
  410. X  XtMapWidget(Shell002);
  411. X}
  412. X
  413. Xvoid
  414. XDontDeleteCard(w, client, call)
  415. XWidget w;
  416. Xcaddr_t client;
  417. Xcaddr_t call;
  418. X{
  419. X  extern Widget Shell002;
  420. X  XtUnmapWidget(Shell002);
  421. X}
  422. X
  423. Xvoid
  424. XOKCard(w, client, call)
  425. XWidget w;
  426. Xcaddr_t client;
  427. Xcaddr_t call;
  428. X{
  429. X  extern Widget nameText, numberText, numberText2, commentText, Shell002;
  430. X  extern Widget Shell001, ListForRolo;
  431. X  char *a, *b, *c, *d;
  432. X  int same;
  433. X
  434. X  a = XmTextGetString(nameText);
  435. X  b = XmTextGetString(numberText);
  436. X  c = XmTextGetString(commentText);
  437. X  d = XmTextGetString(numberText2);
  438. X
  439. X  if ( DisplayedCard < 0 ) {
  440. X    MakeNewRolo(a,b,d,c);
  441. X    WriteRolo();
  442. X    PutListOnScreen();
  443. X    XtUnmapWidget(Shell001);
  444. X    XmListSetPos(ListForRolo,GetIndex(a)+1);
  445. X  } else {
  446. X    same = ( strcmp(a,GetName(DisplayedCard)) == 0 ) &&
  447. X           ( strcmp(b,GetNumber(DisplayedCard)) == 0 ) &&
  448. X           ( strcmp(d,GetNumber2(DisplayedCard)) == 0 ) &&
  449. X           ( strcmp(c,GetText(DisplayedCard)) == 0 );
  450. X    if ( ! same ) {
  451. X      SetDialogUpdate();
  452. X      XtMapWidget(Shell002);
  453. X    } else {
  454. X      XtUnmapWidget(Shell001);
  455. X    }
  456. X  }
  457. X}
  458. X
  459. Xvoid
  460. XQuitProg(w, client, call)
  461. XWidget w;
  462. Xcaddr_t client;
  463. Xcaddr_t call;
  464. X{
  465. X  exit(0);
  466. X}
  467. X
  468. Xvoid
  469. XSelected(w, client, call)
  470. XWidget w;
  471. Xcaddr_t client;
  472. Xcaddr_t call;
  473. X{
  474. X  XmListCallbackStruct *list=(XmListCallbackStruct*)call;
  475. X  extern Widget nameText, numberText, numberText2, commentText, Shell001, deleteCardButton;
  476. X  extern Widget filterText;
  477. X  Arg args[1];
  478. X  char *s;
  479. X  int n;
  480. X
  481. X  n = list->item_position - 1;
  482. X  if ( n < 0 ) return;
  483. X
  484. X  XmProcessTraversal(filterText,XmTRAVERSE_CURRENT);
  485. X
  486. X  s = GetName(n);
  487. X  XmTextSetString(nameText,s);
  488. X  s = GetNumber(n);
  489. X  XmTextSetString(numberText,s);
  490. X  s = GetNumber2(n);
  491. X  XmTextSetString(numberText2,s);
  492. X  s = GetText(n);
  493. X  XmTextSetString(commentText,s);
  494. X
  495. X  XtSetArg(args[0],XmNsensitive,True);
  496. X  XtSetValues(deleteCardButton,args,1);
  497. X
  498. X  DisplayedCard = n;
  499. X  
  500. X  XtMapWidget(Shell001);
  501. X}
  502. X
  503. Xvoid
  504. XSpinRolo(w, client, call)
  505. XWidget w;
  506. Xcaddr_t client;
  507. Xcaddr_t call;
  508. X{
  509. X  XmListCallbackStruct *list=(XmListCallbackStruct*)call;
  510. X  extern Widget ListForRolo;
  511. X  char A[2];
  512. X  int n;
  513. X
  514. X  A[0] = (char)((list->item_position) + (int)'A' - 1);
  515. X  A[1] = '\0';
  516. X  n = GetIndex(A);
  517. X  XmListSetPos(ListForRolo,n+1);
  518. X}
  519. X
  520. X
  521. Xvoid ChangeFilter(w, client, call)
  522. X     Widget w;
  523. X     caddr_t client;
  524. X     caddr_t call;
  525. X{
  526. X  XmAnyCallbackStruct *acs=(XmAnyCallbackStruct*)call;
  527. X  char *s;
  528. X  
  529. X  s = XmTextGetString(w);
  530. X  RoloFilter(s);
  531. X  PutListOnScreen();
  532. X}
  533. X
  534. Xvoid ClearFilter(w, client, call)
  535. X     Widget w;
  536. X     caddr_t client;
  537. X     caddr_t call;
  538. X{
  539. X  extern Widget filterText;
  540. X
  541. X  XmTextSetString(filterText,"");
  542. X  RoloFilter(NULL);
  543. X  PutListOnScreen();
  544. X}
  545. X
  546. Xvoid ReturnHit(w, client, call)
  547. X     Widget w;
  548. X     caddr_t client;
  549. X     caddr_t call;
  550. X{
  551. X  XmProcessTraversal(w,XmTRAVERSE_NEXT_TAB_GROUP);
  552. X}
  553. X
  554. END_OF_FILE
  555. if test 4976 -ne `wc -c <'mrolo/callback.c'`; then
  556.     echo shar: \"'mrolo/callback.c'\" unpacked with wrong size!
  557. fi
  558. # end of 'mrolo/callback.c'
  559. fi
  560. if test -f 'mrolo/mcard.bm' -a "${1}" != "-c" ; then 
  561.   echo shar: Will not clobber existing file \"'mrolo/mcard.bm'\"
  562. else
  563. echo shar: Extracting \"'mrolo/mcard.bm'\" \(1877 characters\)
  564. sed "s/^X//" >'mrolo/mcard.bm' <<'END_OF_FILE'
  565. X#define mcard_width 48
  566. X#define mcard_height 48
  567. Xstatic char mcard_bits[] = {
  568. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  569. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x3f,
  570. X   0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20,
  571. X   0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0xfc, 0xff, 0xff, 0xff, 0x0f, 0x20,
  572. X   0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20,
  573. X   0x04, 0x00, 0x1e, 0x00, 0x01, 0x20, 0x04, 0x00, 0x22, 0x00, 0x01, 0x20,
  574. X   0x04, 0x00, 0x22, 0x00, 0x01, 0x20, 0x04, 0x00, 0x22, 0x00, 0x01, 0x20,
  575. X   0x84, 0x1b, 0x12, 0x0c, 0x61, 0x20, 0x84, 0x24, 0x0e, 0x12, 0x91, 0x20,
  576. X   0x84, 0x24, 0x12, 0x21, 0x09, 0x21, 0x84, 0x24, 0x22, 0x21, 0x09, 0x21,
  577. X   0x84, 0x24, 0x22, 0x21, 0x09, 0x21, 0x84, 0x24, 0x22, 0x12, 0x91, 0x20,
  578. X   0x84, 0x24, 0x22, 0x0c, 0x61, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20,
  579. X   0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20,
  580. X   0x04, 0x1c, 0x00, 0x00, 0x38, 0x20, 0x04, 0x08, 0x00, 0x00, 0x10, 0x20,
  581. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  582. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  583. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  584. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  585. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  586. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  587. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  588. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  589. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  590. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  591. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  592. END_OF_FILE
  593. if test 1877 -ne `wc -c <'mrolo/mcard.bm'`; then
  594.     echo shar: \"'mrolo/mcard.bm'\" unpacked with wrong size!
  595. fi
  596. # end of 'mrolo/mcard.bm'
  597. fi
  598. if test -f 'mrolo/mrolo.bm' -a "${1}" != "-c" ; then 
  599.   echo shar: Will not clobber existing file \"'mrolo/mrolo.bm'\"
  600. else
  601. echo shar: Extracting \"'mrolo/mrolo.bm'\" \(1877 characters\)
  602. sed "s/^X//" >'mrolo/mrolo.bm' <<'END_OF_FILE'
  603. X#define mrolo_width 48
  604. X#define mrolo_height 48
  605. Xstatic char mrolo_bits[] = {
  606. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  607. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x3f,
  608. X   0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20,
  609. X   0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0xfc, 0xff, 0xff, 0xff, 0x0f, 0x20,
  610. X   0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20,
  611. X   0x04, 0x00, 0x1e, 0x00, 0x01, 0x20, 0x04, 0x00, 0x22, 0x00, 0x01, 0x20,
  612. X   0x04, 0x00, 0x22, 0x00, 0x01, 0x20, 0x04, 0x00, 0x22, 0x00, 0x01, 0x20,
  613. X   0x84, 0x1b, 0x12, 0x0c, 0x61, 0x20, 0x84, 0x24, 0x0e, 0x12, 0x91, 0x20,
  614. X   0x84, 0x24, 0x12, 0x21, 0x09, 0x21, 0x84, 0x24, 0x22, 0x21, 0x09, 0x21,
  615. X   0x84, 0x24, 0x22, 0x21, 0x09, 0x21, 0x84, 0x24, 0x22, 0x12, 0x91, 0x20,
  616. X   0x84, 0x24, 0x22, 0x0c, 0x61, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20,
  617. X   0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20,
  618. X   0x04, 0x1c, 0x00, 0x00, 0x38, 0x20, 0x04, 0x08, 0x00, 0x00, 0x10, 0x20,
  619. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00,
  620. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x04, 0x08, 0x00, 0x00, 0x10, 0x20,
  621. X   0x04, 0x1c, 0x00, 0x00, 0x38, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20,
  622. X   0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20,
  623. X   0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20,
  624. X   0xfc, 0xff, 0xff, 0xff, 0x0f, 0x20, 0x04, 0x00, 0x00, 0x00, 0x08, 0x20,
  625. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x04, 0x00, 0x00, 0x00, 0x08, 0x20,
  626. X   0xfc, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20,
  627. X   0x00, 0x00, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  628. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  629. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  630. END_OF_FILE
  631. if test 1877 -ne `wc -c <'mrolo/mrolo.bm'`; then
  632.     echo shar: \"'mrolo/mrolo.bm'\" unpacked with wrong size!
  633. fi
  634. # end of 'mrolo/mrolo.bm'
  635. fi
  636. if test -f 'mrolo/mrolo.c' -a "${1}" != "-c" ; then 
  637.   echo shar: Will not clobber existing file \"'mrolo/mrolo.c'\"
  638. else
  639. echo shar: Extracting \"'mrolo/mrolo.c'\" \(3587 characters\)
  640. sed "s/^X//" >'mrolo/mrolo.c' <<'END_OF_FILE'
  641. X/* Copyright 1993 by gregg hanna */
  642. X/*
  643. X * Generated by the ICS builderXcessory (BX).
  644. X *
  645. X *
  646. X * Builder Xcessory 1.0.1.
  647. X *
  648. X */
  649. X/*
  650. X * REQUIRED MOTIF INCLUDE FILES
  651. X */
  652. X#include <Xm/Xm.h>
  653. X#include <X11/Shell.h>
  654. X#include <Xm/DialogS.h>
  655. X#include <X11/StringDefs.h>
  656. X
  657. X/* GLOBAL WIDGET VARIABLES */
  658. XWidget Shell000;
  659. XWidget Form;
  660. XWidget Createform();
  661. XWidget Shell001;
  662. XWidget Form1;
  663. XWidget Createform1();
  664. XWidget Shell002;
  665. XWidget MessageBox;
  666. XWidget CreatemessageBox();
  667. X
  668. Xvoid dumpcore(){char *s; s = 0; *s = 'x'; }
  669. X
  670. X#include "mrolo.bm"
  671. X#include "mcard.bm"
  672. X
  673. Xtypedef struct {
  674. X  Boolean showSecondary;
  675. X  int     sizePrimary;
  676. X} mroloAppResources, *mroloAppResourcesP;
  677. X
  678. X#define MOffset(x) XtOffset(mroloAppResourcesP, x)
  679. X
  680. Xstatic XtResource resources[] = {
  681. X  {"showSecondary", "ShowSecondary", XtRBoolean, sizeof(Boolean),
  682. X     MOffset(showSecondary), XtRImmediate, (XtPointer) True},
  683. X  {"sizePrimary", "SizePrimary", XtRInt, sizeof(int),
  684. X     MOffset(sizePrimary), XtRImmediate, (XtPointer) 20},
  685. X};
  686. X
  687. XBoolean showSecondary;
  688. Xint sizePrimary;
  689. X
  690. Xvoid SetResources(w)
  691. X   Widget  w;
  692. X{
  693. X  mroloAppResources appResources;
  694. X  XtGetApplicationResources(w, (XtPointer) &appResources,
  695. X            resources, XtNumber(resources), NULL, 0);
  696. X  showSecondary = appResources.showSecondary;
  697. X  sizePrimary = appResources.sizePrimary;
  698. X}
  699. X
  700. Xvoid SetIcon(w)
  701. X    Widget w;
  702. X{
  703. X  Pixmap p;
  704. X  Arg arg[1];
  705. X
  706. X  p = XCreateBitmapFromData(XtDisplay(w),XtWindow(w),mrolo_bits,mrolo_width,mrolo_height);
  707. X  XtSetArg(arg[0],XmNiconPixmap,p);
  708. X  XtSetValues(w,arg,1);
  709. X}
  710. X
  711. Xvoid SetIcon2(w)
  712. X    Widget w;
  713. X{
  714. X  Pixmap p;
  715. X  Arg arg[1];
  716. X
  717. X  p = XCreateBitmapFromData(XtDisplay(w),XtWindow(w),mcard_bits,mcard_width,mcard_height);
  718. X  XtSetArg(arg[0],XmNiconPixmap,p);
  719. X  XtSetValues(w,arg,1);
  720. X}
  721. X
  722. X#define APP_NAME "mrolo"
  723. X
  724. X/* MAIN PROGRAM */
  725. Xmain(argc, argv)
  726. Xint argc;
  727. Xchar **argv;
  728. X{
  729. X    Display *display;
  730. X    Arg     args[256];
  731. X    int     argcnt;
  732. X    XtAppContext context;
  733. X    extern Widget filterText;
  734. X
  735. X    InitRolo(argc,argv,1);
  736. X    SetupRolo();
  737. X
  738. X    XtToolkitInitialize();
  739. X    context = XtCreateApplicationContext();
  740. X    display = XtOpenDisplay(context, 0, "mrolo", "MRolo",
  741. X        0, 0, &argc, argv);
  742. X    if(display == NULL)
  743. X    {
  744. X    XtWarning("cannot open display");
  745. X    exit(1);
  746. X    }
  747. X    XmRegisterConverters();
  748. X    argcnt = 0;
  749. X    XtSetArg(args[argcnt], XmNtitle, "Rolodex"); argcnt++;
  750. X    Shell000 = XtAppCreateShell( APP_NAME, "MRolo",
  751. X        applicationShellWidgetClass, display, args, argcnt);
  752. X    argcnt = 0;
  753. X    XtSetArg(args[argcnt], XmNmappedWhenManaged, False); argcnt++;
  754. X    XtSetArg(args[argcnt], XmNtitle, "Card View"); argcnt++;
  755. X    Shell001 = XtAppCreateShell( APP_NAME, "MRolo",
  756. X        applicationShellWidgetClass, display, args, argcnt);
  757. X    argcnt = 0;
  758. X    XtSetArg(args[argcnt], XmNmappedWhenManaged, False); argcnt++;
  759. X    XtSetArg(args[argcnt], XmNtitle, "Confirmation Dialog"); argcnt++;
  760. X    Shell002 = XtAppCreateShell( APP_NAME, "MRolo",
  761. X        applicationShellWidgetClass, display, args, argcnt);
  762. X    Form = Createform(Shell000);
  763. X    XtManageChild(Form);
  764. X    Form1 = Createform1(Shell001);
  765. X    XtManageChild(Form1);
  766. X    MessageBox = CreatemessageBox(Shell002);
  767. X    XtManageChild(MessageBox);
  768. X    XtRealizeWidget(Shell000);
  769. X    XtRealizeWidget(Shell001);
  770. X    XtRealizeWidget(Shell002);
  771. X
  772. X    SetResources(Shell000);
  773. X
  774. X    SetIcon(Shell000);
  775. X    SetIcon2(Shell001);
  776. X    SetIcon(Shell002);
  777. X
  778. X    PutListOnScreen();
  779. X
  780. X    XmProcessTraversal(filterText,XmTRAVERSE_CURRENT);
  781. X
  782. X    XtAppMainLoop(context);
  783. X
  784. X    /* Note:  Shell000 is main selection window,
  785. X     *        Shell001 is the card display,
  786. X     *        Shell002 is the confirm box.
  787. X     */
  788. X}
  789. END_OF_FILE
  790. if test 3587 -ne `wc -c <'mrolo/mrolo.c'`; then
  791.     echo shar: \"'mrolo/mrolo.c'\" unpacked with wrong size!
  792. fi
  793. # end of 'mrolo/mrolo.c'
  794. fi
  795. if test -f 'mrolo/mrolo.man' -a "${1}" != "-c" ; then 
  796.   echo shar: Will not clobber existing file \"'mrolo/mrolo.man'\"
  797. else
  798. echo shar: Extracting \"'mrolo/mrolo.man'\" \(6456 characters\)
  799. sed "s/^X//" >'mrolo/mrolo.man' <<'END_OF_FILE'
  800. X.TH mrolo L "19 April 1993"
  801. X.SH NAME
  802. Xmrolo \- Motif-based card file manager
  803. X.SH SYNOPSIS
  804. X.B mrolo
  805. X[
  806. X.B -h
  807. X] [
  808. X.B -f filename
  809. X]
  810. X.SH DESCRIPTION
  811. X.LP
  812. X.I MRolo
  813. Xis a program for maintaining a simple cardfile,
  814. Xspecifically oriented for saving address-book
  815. Xinformation.
  816. X.LP
  817. XThe default database file read is
  818. X.IR $HOME/.rolo ,
  819. Xalthough this can be overridden with the
  820. X.B ROLODEX
  821. Xenvironment variable or the
  822. X.B -f
  823. Xcommand-line argument.
  824. XIf the file does not exist, it is created empty.
  825. XThe database is stored in a format similar to that of the
  826. X.I xrolo
  827. Xprogram:  Blocks of text separated by lines containing just
  828. Xa ctrl-L.  In addition,
  829. X.I MRolo
  830. Xassumes that the first line in a block is the primary name,
  831. Xthe second line is the primary number, the third line
  832. Xis a secondary number, and the rest is for other names,
  833. Xnumbers, and comments.  (You don't need
  834. Xto understand the file format to use
  835. X.IR MRolo .)
  836. X.LP
  837. XWhen invoked
  838. X.I MRolo
  839. Xwill present the user with a screen summarizing the database.
  840. XThe user may scroll through the summary with the scroll-bar,
  841. Xor they may click on one of the large letters along the left
  842. Xedge of the window and jump right to that part of the database.
  843. XSelecting an individual summary entry
  844. Xwill display a window containing the full information of
  845. Xthat entry, ready for editing or viewing.
  846. X.LP
  847. XOn the main
  848. X.I MRolo
  849. Xscreen there are three buttons and a text field.
  850. XThe three buttons are as follows:
  851. X.TP 2
  852. X.B Quit
  853. XExit the
  854. X.I MRolo
  855. Xprogram immediately.
  856. X.TP 2
  857. X.B "Add Card"
  858. XDisplay a blank detail window, into which new card information
  859. Xmay be entered.
  860. X.TP 2
  861. X.B "Clear Filter"
  862. XClear the selection filter, as described in the next paragraph.
  863. X.LP
  864. XTyping some text in the text field and pressing
  865. X.I return
  866. Xwill limit the summary display to only those cards which contain
  867. Xthat text somewhere in their entry (the entire entry,
  868. Xnot just the summary).  All of the cards are still in the database,
  869. Xthey just aren't all accessible.  To see all of the cards again,
  870. Xdelete all the text from the text field and press
  871. X.I return
  872. Xor just press the
  873. X.B "Clear Filter"
  874. Xbutton.
  875. X.LP
  876. XAny time you change a card, add a new card, or delete a card
  877. X(by pressing "Delete Card" on the detail screen), you will
  878. Xbe asked before the data is written to the disk.  You never
  879. Xhave to explicitly save the database, it is done by validating
  880. Xthe individual changes.  Likewise the screen always reflects
  881. Xthe current contents of the database, except when a filter has
  882. Xbeen applied thus hiding some of the database from view.
  883. X.LP
  884. XThere is a companion program for printing your card file called
  885. X.I prolo
  886. Xand a program to convert
  887. X.I xrolodex
  888. Xcard files to
  889. X.I mrolo
  890. Xformat called
  891. X.IR xr2mr .
  892. XThese programs are documented separately.
  893. X.SH OPTIONS
  894. X.TP
  895. X.B \-f filename
  896. XRun using the specified file as the default database.
  897. X.SH ADVANCED TECHNIQUES
  898. X.LP
  899. XIf you like using
  900. X.I mrolo
  901. Xthen there are some "advanced" techniques you might
  902. Xwant to know about.  These tricks allow you to
  903. Xget more power and flexibility out of the simple
  904. X.I mrolo
  905. Xinterface.
  906. X.LP
  907. XRemember that everything is optional and the program doesn't
  908. Xcare what is where.  You can put text in the slots traditionally
  909. Xused for phone numbers, so if there is no secondary number some
  910. Xadditional descriptive text can go there.
  911. X.LP
  912. XWhile the program was developed for an address book, exploit
  913. Xit for whatever you need, for example record or video collection
  914. Xdatabases would work well.
  915. X.LP
  916. XYou can simulate having several address books by including codes
  917. Xin the comment section of the cards.  For example, I use
  918. Xthe code "~p" for personal entries, and "~w" for work
  919. Xrelated entries.
  920. XIf I want to see just work entries I can
  921. Xenter "~w" in the filter.
  922. XNote that cards can appear in multiple lists by including
  923. Xall applicable codes:  for example, Karen's entry has a "~p~w"
  924. Xcode since she is my friend and I work with her.
  925. X.LP
  926. XPeople who use
  927. X.I mrolo
  928. Xalot will want to know about
  929. X.IR prolo ,
  930. Xwhich is used for printing card file databases.  Once you
  931. Xknow how this program works (see the manpage for
  932. X.IR prolo )
  933. Xyou can optimize your entries to look better on paper.
  934. X.SH XDEFAULTS
  935. X.LP
  936. XThere are a number of values you may wish to tweek in your
  937. XX-Defaults.  Look at the app defaults file for a more complete
  938. Xlist than is given here.
  939. X.TP
  940. Xmrolo*showSecondary
  941. XIf set to True (the default) the main screen will
  942. Xshow both primary and secondary numbers, if False
  943. Xonly the primary number will be shown.  This does
  944. Xnot affect the card screen or the file format.
  945. X.TP
  946. Xmrolo*sizePrimary
  947. XIf showSecondary is True then this resource defines
  948. Xhow wide the column containing the primary number
  949. Xis.  The default is 20 characters.
  950. X.TP
  951. Xmrolo*fontList
  952. XThe default font for everything in
  953. X.IR mrolo .
  954. X.TP
  955. Xmrolo*addressList*fontList
  956. XFont used in address list on main screen.  This
  957. Xshould be a fixed width font if you want the
  958. Xcolumns to line up.
  959. X.TP
  960. Xmrolo*commentText.rows and mrolo*commentText.cols
  961. XThe default size of the card text area.  You can
  962. Xscroll beyond this size or resize the window,
  963. Xbut you might want to change this if you have alot
  964. Xof extremely large cards.
  965. X.TP
  966. Xmrolo*filterText.columns
  967. XThis is the size of the text field on the main screen.
  968. X.TP
  969. Xmrolo*{various}.foreground and mrolo*{various}.background
  970. XChange the colors to suit your tastes; some
  971. Xgood values for {various} are:
  972. Xnothing (default colors for application),
  973. XXmPushButton (all buttons),
  974. XXmText (all text fields),
  975. XaddressList (main screen).
  976. X.TP
  977. Xmrolo*XmRowColumn*packing
  978. XIf you like your buttons only as big as the text they
  979. Xhold, try XmPACK_TIGHT here.  If you do that, you will
  980. Xwant to do the following also...
  981. X.TP
  982. Xmrolo*rowColumn*resizeWidth and mrolo*rowColumn*width
  983. XExplicitly set the width of the main screen, it usually
  984. Xdefaults to size based on the buttons and input field
  985. Xon the main screen.
  986. X.SH FILES
  987. X.TP 20
  988. X.B ~/.rolo
  989. XDefault database.
  990. X.SH ENVIRONMENT
  991. X.TP 20
  992. XROLODEX
  993. XDefault database, overrides ~/.rolo, but not the -f option.
  994. X.SH "SEE ALSO"
  995. X.PD
  996. X.BR xr2mr (1),
  997. X.BR prolo (1),
  998. X.BR xrolo (1)
  999. X.br
  1000. X.ne 5
  1001. X.SH BUGS
  1002. X.LP
  1003. XNone known.  Report bugs to gregor@kafka.saic.com
  1004. X.SH AUTHOR
  1005. X.nf
  1006. X.LP
  1007. Xgregg hanna (gregor@kafka.saic.com)
  1008. XScience Applications International Corporation
  1009. X10260 Campus Point Drive, MS C3
  1010. XSan Diego, California  92121
  1011. X.fi
  1012. X.LP
  1013. XCopyright 1993 by gregg hanna.  Permission is granted
  1014. Xto use, modify, and distribute this program.  Basically
  1015. Xdo anything you want with it, but if you want to use
  1016. Xit or any part of it to make money you must get further
  1017. Xpermission from me.
  1018. X
  1019. X
  1020. END_OF_FILE
  1021. if test 6456 -ne `wc -c <'mrolo/mrolo.man'`; then
  1022.     echo shar: \"'mrolo/mrolo.man'\" unpacked with wrong size!
  1023. fi
  1024. # end of 'mrolo/mrolo.man'
  1025. fi
  1026. if test -f 'mrolo/patchlevel.h' -a "${1}" != "-c" ; then 
  1027.   echo shar: Will not clobber existing file \"'mrolo/patchlevel.h'\"
  1028. else
  1029. echo shar: Extracting \"'mrolo/patchlevel.h'\" \(21 characters\)
  1030. sed "s/^X//" >'mrolo/patchlevel.h' <<'END_OF_FILE'
  1031. X#define PATCHLEVEL 0
  1032. END_OF_FILE
  1033. if test 21 -ne `wc -c <'mrolo/patchlevel.h'`; then
  1034.     echo shar: \"'mrolo/patchlevel.h'\" unpacked with wrong size!
  1035. fi
  1036. # end of 'mrolo/patchlevel.h'
  1037. fi
  1038. if test -f 'mrolo/prolo.c' -a "${1}" != "-c" ; then 
  1039.   echo shar: Will not clobber existing file \"'mrolo/prolo.c'\"
  1040. else
  1041. echo shar: Extracting \"'mrolo/prolo.c'\" \(6520 characters\)
  1042. sed "s/^X//" >'mrolo/prolo.c' <<'END_OF_FILE'
  1043. X#include <stdio.h>
  1044. X#include "rolo.h"
  1045. X#include "roloP.h"
  1046. X
  1047. Xint complines(rr)
  1048. X    RoloRec *rr;
  1049. X{
  1050. X  int n;
  1051. X  char *s;
  1052. X  for ( n = 1, s = rr->text; *s != '\0'; s++ )
  1053. X    if ( *s == '\n' ) n++;
  1054. X  if ( s != rr->text )
  1055. X    if ( *(s-1) != '\n' ) n++;
  1056. X  return n;
  1057. X}
  1058. X
  1059. Xint box, equal, fontsize, card;
  1060. Xchar *filtertext;
  1061. X
  1062. Xvoid InitProlo(argc,argv)
  1063. X     int argc;
  1064. X     char *argv[];
  1065. X{
  1066. X  int c, n;
  1067. X  char buf[255];
  1068. X  extern char *optarg;
  1069. X
  1070. X  box = equal = card = 0;
  1071. X  filtertext = NULL;
  1072. X  fontsize = 5;
  1073. X
  1074. X  while ((c = getopt(argc, argv, "cf:beF:hs:")) != -1) {
  1075. X    switch (c) {
  1076. X    case 'c':
  1077. X      card = 1;
  1078. X      break;
  1079. X    case 'f':
  1080. X      sprintf(buf,"ROLODEX=%s",optarg);
  1081. X      putenv(buf);
  1082. X      break;
  1083. X    case 'b':
  1084. X      box = 1;
  1085. X      break;
  1086. X    case 'e':
  1087. X      equal = 1;
  1088. X      break;
  1089. X    case 'F':
  1090. X      filtertext = optarg;
  1091. X      break;
  1092. X    case 'h':
  1093. X      fprintf(stderr,"%s [-c] [-b] [-e] [-F filtertext] [-h] [-f rolofile] [-s fontsize]\n",argv[0]);
  1094. X      exit(1);
  1095. X      break;
  1096. X    case 's':
  1097. X      n = sscanf(optarg,"%d",&fontsize);
  1098. X      if ( n == 0 ) fontsize = 5;
  1099. X      break;
  1100. X    }
  1101. X  }
  1102. X}
  1103. X
  1104. Xmain(argc,argv)
  1105. X     int argc;
  1106. X     char *argv[];
  1107. X{
  1108. X  char *text;
  1109. X  RoloRec *rr;
  1110. X  int high, height;
  1111. X
  1112. X  InitProlo(argc,argv);
  1113. X  InitRolo(argc,argv,0);
  1114. X  SetupRolo();
  1115. X
  1116. X  RoloFilter(filtertext);
  1117. X
  1118. X  /* find tallest entry */
  1119. X  high = 0;
  1120. X  for ( rr = RoloList; rr != NULL; rr = rr->next ) {
  1121. X    if ( ! rr->on ) continue;
  1122. X    height = complines(rr);
  1123. X    if ( height > high ) high = height;
  1124. X  }
  1125. X
  1126. X  printf("%%!\n\n");
  1127. X  printf("\n%% user parameters:  feel free to change the following parameters\n");
  1128. X  printf("/fontsize %d def  %% size for font, play with this!\n",fontsize);
  1129. X  printf("/equalbox %d def  %% if 1, put each entry in equal sized boxes\n",equal);
  1130. X  printf("/boxmode %d def   %% if 1, draw boxes around each entry\n",box);
  1131. X  printf("/cardinfo %d def  %% if 1, print card contents\n",card);
  1132. X  printf("\n%% other parameters\n");
  1133. X  printf("/ystart 750 def\n");
  1134. X  printf("/xwidth 525 def\n");
  1135. X  printf("/tallest %d def   %% tallest entry in # of lines\n",high);
  1136. X  printf("cardinfo 0 eq { /tallest 1 def } if\n");
  1137. X  printf("0.1 setlinewidth\n");
  1138. X  printf("/Times-Roman findfont fontsize scalefont setfont\n");
  1139. X  printf("/mw 0 def\n");
  1140. X  printf("/mw2 0 def\n\n");
  1141. X  printf("/mw3 0 def\n\n");
  1142. X  printf("/mw4 0 def\n\n");
  1143. X
  1144. X  printf("\n%% define procedures\n");
  1145. X  printf("/newpage { showpage fontsize 5 mul 750 moveto } def\n");
  1146. X  printf("/movecol { currentpoint pop mw add mw2 add ystart moveto } def\n");
  1147. X  printf("\n/newcol {  %% shift to a new column, if no more columns shift to new page\n");
  1148. X  printf("  movecol\n");
  1149. X  printf("  currentpoint pop mw2 add\n");
  1150. X  printf("  xwidth gt { newpage } if\n");
  1151. X  printf("} def\n");
  1152. X
  1153. X  printf("\n/checkloc {  %% given # of lines, check if we can fit in this column\n");
  1154. X  printf("  equalbox 1 eq { pop tallest } if  %% if in equal box mode, ignore # lines tall\n");
  1155. X  printf("  height mul 100 add      %% projected location after next printing (with padding)\n");
  1156. X  printf("  currentpoint exch pop   %% space left in column\n");
  1157. X  printf("  gt { newcol } if        %% if it won't fit, start new column\n");
  1158. X  printf("} def\n");
  1159. X
  1160. X  printf("\n/boxit {  %% given # of lines, draw a box mw+mw2 wide and # lines tall\n");
  1161. X  printf("  boxmode 1 eq {\n");
  1162. X  printf("    equalbox 1 eq { pop tallest } if  %% if in equal box mode, ignore # lines tall\n");
  1163. X  printf("    gsave\n");
  1164. X  printf("      currentpoint\n");
  1165. X  printf("      newpath\n");
  1166. X  printf("        exch 1 sub exch height sub 1 sub moveto\n");
  1167. X  printf("        height mul\n");
  1168. X  printf("        dup 0 exch rlineto\n");
  1169. X  printf("        mw mw2 add 0 rlineto\n");
  1170. X  printf("        neg 0 exch rlineto\n");
  1171. X  printf("      closepath\n");
  1172. X  printf("      stroke\n");
  1173. X  printf("    grestore\n");
  1174. X  printf("  } if\n");
  1175. X  printf("} def\n");
  1176. X
  1177. X  printf("\n/fixloc { %% # of lines just printed, adjust for equalbox\n");
  1178. X  printf("  equalbox 1 eq {\n");
  1179. X  printf("    height mul neg vjump add  %% compute how much farther down we need to go\n");
  1180. X  printf("    0 exch rmoveto\n");
  1181. X  printf("  } if\n");
  1182. X  printf("} def\n");
  1183. X
  1184. X  printf("\n");
  1185. X  printf("/sizestr { stringwidth /h exch def /w exch def } def\n");
  1186. X  printf("/chmax { w mw gt { /mw w def } if } def\n");
  1187. X  printf("/chmax2 { w mw2 gt { /mw2 w def } if } def\n");
  1188. X  printf("/chmax3 { w mw3 gt { /mw3 w def } if } def\n");
  1189. X  printf("/chmax4 { w mw4 gt { /mw4 w def } if } def\n");
  1190. X  printf("/nshow { dup show sizestr mw w sub 0 rmoveto } def\n");
  1191. X  printf("/tshow { cardinfo 1 eq { dup show sizestr w neg height rmoveto } if } def\n");
  1192. X  printf("/pshow1 { dup show sizestr mw3 w sub 0 rmoveto } def\n");
  1193. X  printf("/pshow2 { dup show sizestr mw3 w add neg height rmoveto } def\n");
  1194. X  printf("/height fontsize neg def\n");
  1195. X  printf("/vjump height tallest mul def\n");
  1196. X
  1197. X  printf("\n%% find widest entry\n");
  1198. X  for ( rr = RoloList; rr != NULL; rr = rr->next )
  1199. X    if ( rr->on ) printf("(%s) sizestr chmax\n",rr->name);
  1200. X
  1201. X  printf("/mw mw fontsize add def\n");
  1202. X
  1203. X  printf("\n%% find widest text\n");
  1204. X  for ( rr = RoloList; rr != NULL; rr = rr->next ) {
  1205. X    if ( ! rr->on ) continue;
  1206. X    text = rr->text;
  1207. X    while ( *text != '\0' ) {
  1208. X      printf("(");
  1209. X      while (*text != '\n' && *text != '\0') putc(*text++,stdout);
  1210. X      printf(") sizestr chmax2\n");
  1211. X      if ( *text != '\0' ) text++;
  1212. X    }
  1213. X  }
  1214. X
  1215. X  printf("\n%% find widest primary number\n");
  1216. X  for ( rr = RoloList; rr != NULL; rr = rr->next ) {
  1217. X    if ( ! rr->on ) continue;
  1218. X    printf("(%s) sizestr chmax3\n",rr->number);
  1219. X  }
  1220. X
  1221. X  printf("/mw3 mw3 fontsize add def\n");
  1222. X
  1223. X  printf("\n%% find widest secondary number\n");
  1224. X  for ( rr = RoloList; rr != NULL; rr = rr->next ) {
  1225. X    if ( ! rr->on ) continue;
  1226. X    printf("(%s) sizestr chmax4\n",rr->number2);
  1227. X  }
  1228. X
  1229. X  printf("mw3 mw4 add mw2 gt { /mw2 mw3 mw4 add def } if\n");
  1230. X
  1231. X  printf("/mw2 mw2 fontsize add def\n");
  1232. X
  1233. X  printf("\n%% setup and print\n");
  1234. X  printf("fontsize 5 mul 750 moveto\n");
  1235. X
  1236. X  for ( rr = RoloList; rr != NULL; rr = rr->next ) {
  1237. X    if ( ! rr->on ) continue;
  1238. X    height = complines(rr);
  1239. X    printf("%d checkloc\n",height);
  1240. X    printf("%d boxit\n",height);
  1241. X    printf("(%s) nshow\n",rr->name);
  1242. X    printf("(%s) pshow1\n",rr->number);
  1243. X    printf("(%s) pshow2\n",rr->number2);
  1244. X    text = rr->text;
  1245. X    while ( *text != '\0' ) {
  1246. X      printf("(");
  1247. X      while (*text != '\n' && *text != '\0') putc(*text++,stdout);
  1248. X      printf(") tshow\n");
  1249. X      if ( *text != '\0' ) text++;
  1250. X    }
  1251. X    printf("mw neg 0 rmoveto\n");
  1252. X    printf("%d fixloc\n",height);
  1253. X  }
  1254. X
  1255. X  printf("showpage\n");
  1256. X}
  1257. X
  1258. END_OF_FILE
  1259. if test 6520 -ne `wc -c <'mrolo/prolo.c'`; then
  1260.     echo shar: \"'mrolo/prolo.c'\" unpacked with wrong size!
  1261. fi
  1262. # end of 'mrolo/prolo.c'
  1263. fi
  1264. if test -f 'mrolo/prolo.man' -a "${1}" != "-c" ; then 
  1265.   echo shar: Will not clobber existing file \"'mrolo/prolo.man'\"
  1266. else
  1267. echo shar: Extracting \"'mrolo/prolo.man'\" \(3489 characters\)
  1268. sed "s/^X//" >'mrolo/prolo.man' <<'END_OF_FILE'
  1269. X.TH prolo L "13 May 1993"
  1270. X.SH NAME
  1271. Xprolo \- card file database printer
  1272. X.SH SYNOPSIS
  1273. X.B prolo
  1274. X[
  1275. X.B \-cbeh
  1276. X] [
  1277. X.B \-F filtertext
  1278. X] [
  1279. X.B \-f rolofile
  1280. X] [
  1281. X.B \-f fontsize
  1282. X]
  1283. X.SH DESCRIPTION
  1284. X.LP
  1285. X.I PRolo
  1286. Xis a program for printing a simple cardfile,
  1287. Xgenerating PostScript output.
  1288. X.LP
  1289. XThe default database file read is
  1290. X.IR $HOME/.rolo ,
  1291. Xalthough this can be overridden with the
  1292. X.B ROLODEX
  1293. Xenvironment variable or the
  1294. X.B -f
  1295. Xcommand-line argument.
  1296. XIf the file does not exist, it is created empty.
  1297. XThe database is assumed to be in the format of
  1298. Xthe
  1299. X.I mrolo
  1300. Xor
  1301. X.I xrolo
  1302. Xprograms.
  1303. X.LP
  1304. XThe output will be a PostScript program.  Most of the options
  1305. Xset from the command line can also be set by editing this
  1306. Xprogram before printing.  The basic, unchangeable format
  1307. Xfor the individual records is:
  1308. X.nf
  1309. XFirst Line  Second Line  Third Line
  1310. X            Fourth Line
  1311. X            Fifth Line
  1312. X              .
  1313. X              .
  1314. X              .
  1315. X.fi
  1316. X.LP
  1317. XWhen used with
  1318. X.I mrolo
  1319. XThe first line is usually a name, the second the primary
  1320. Xphone number, the third the secondary phone number,
  1321. Xand others are descriptive text (address, other
  1322. Xnumbers, etc.).  The PostScript program will organize these
  1323. Xentries in columns and the columns into pages, if needed.
  1324. X.LP
  1325. XNote that lines are sized and spaced based on the largest
  1326. Xentries, so you might want to edit your cardfile to have
  1327. Xfairly consistent field lengths.  For example, if you use
  1328. Xthe secondary number to store a very long string or
  1329. Xhave one name which is particularly long then 
  1330. X.B all
  1331. Xof the
  1332. Xprinted entries will be very wide.
  1333. X.SH OPTIONS
  1334. X.TP
  1335. X.B \-c
  1336. XInclude card info, by default only name, primary and secondary
  1337. Xnumbers are printed.
  1338. X.TP
  1339. X.B \-b
  1340. XDraw a box around each entry.
  1341. X.TP
  1342. X.B \-e
  1343. XMake all entries the same size.  Each entry will take up
  1344. Xas much space as the largest entry, using more space
  1345. Xbut looking neat and tidy.  This only makes sense with
  1346. Xthe -c option.
  1347. X.TP
  1348. X.B \-F filertext
  1349. XOnly emit entries which contain
  1350. X.I filtertext
  1351. Xsomewhere in the entry.  This option cannot be changed
  1352. Xin the PostScript program, it must be specified on
  1353. Xthe command line.
  1354. X.TP
  1355. X.B \-f filename
  1356. XRun using the specified file as the default database.
  1357. XThis option cannot be changed in the PostScript program,
  1358. Xit must be specified on the command line.
  1359. X.TP
  1360. X.B \-s fontsize
  1361. XThe font size used to print the entries.  The default is 5
  1362. X(small for pocket lists).
  1363. X
  1364. X.SH POSTSCRIPT OPTIONS
  1365. X.LP
  1366. XMost of the command-line options (the exceptions are noted above)
  1367. Xcan be changed and played with in the output file.  Each option
  1368. Xhas a corresponding variable set at the beginning of the PostScript,
  1369. Xthe following table describes the mappings:
  1370. X.TP
  1371. X.B -c
  1372. Xcardinfo
  1373. X.TP
  1374. X.B -b
  1375. Xboxmode
  1376. X.TP
  1377. X.B -e
  1378. Xequalbox
  1379. X.TP
  1380. X.B -s
  1381. Xfontsize
  1382. X
  1383. X.SH FILES
  1384. X.TP 20
  1385. X.B ~/.rolo
  1386. XDefault database.
  1387. X.SH ENVIRONMENT
  1388. X.TP 20
  1389. XROLODEX
  1390. XDefault database, overrides ~/.rolo, but not the -f option.
  1391. X.SH "SEE ALSO"
  1392. X.PD
  1393. X.BR xrolo (1),
  1394. X.BR mrolo (1)
  1395. X.br
  1396. X.ne 5
  1397. X.SH BUGS
  1398. X.LP
  1399. XThis program makes assumptions about the size of the
  1400. Xoutput paper.  It was developed for 8.5x11 paper, your milage
  1401. Xmay vary.
  1402. X.LP
  1403. XReport bugs to gregor@kafka.saic.com
  1404. X.SH AUTHOR
  1405. X.nf
  1406. X.LP
  1407. Xgregg hanna (gregor@kafka.saic.com)
  1408. XScience Applications International Corporation
  1409. X10260 Campus Point Drive, MS C3
  1410. XSan Diego, California  92121
  1411. X.fi
  1412. X.LP
  1413. XCopyright 1993 by gregg hanna.  Permission is granted
  1414. Xto use, modify, and distribute this program.  Basically
  1415. Xdo anything you want with it, but if you want to use
  1416. Xit or any part of it to make money you must get further
  1417. Xpermission from me.
  1418. X
  1419. X
  1420. END_OF_FILE
  1421. if test 3489 -ne `wc -c <'mrolo/prolo.man'`; then
  1422.     echo shar: \"'mrolo/prolo.man'\" unpacked with wrong size!
  1423. fi
  1424. # end of 'mrolo/prolo.man'
  1425. fi
  1426. if test -f 'mrolo/rolo.h' -a "${1}" != "-c" ; then 
  1427.   echo shar: Will not clobber existing file \"'mrolo/rolo.h'\"
  1428. else
  1429. echo shar: Extracting \"'mrolo/rolo.h'\" \(280 characters\)
  1430. sed "s/^X//" >'mrolo/rolo.h' <<'END_OF_FILE'
  1431. X#ifndef _ROLO_H
  1432. X#define _ROLO_H
  1433. X
  1434. X#define VERSION_MAJOR 1
  1435. X#define VERSION_MINOR 2
  1436. X
  1437. Xvoid InitRolo();
  1438. Xvoid SortRolo();
  1439. Xvoid SetupRolo();
  1440. Xvoid PutListOnScreen();
  1441. Xvoid DeleteRoloCard();
  1442. Xvoid WriteRolo();
  1443. Xchar *GetName();
  1444. Xchar *GetNumber();
  1445. Xchar *GetNumber2();
  1446. Xchar *GetText();
  1447. X
  1448. X#endif
  1449. END_OF_FILE
  1450. if test 280 -ne `wc -c <'mrolo/rolo.h'`; then
  1451.     echo shar: \"'mrolo/rolo.h'\" unpacked with wrong size!
  1452. fi
  1453. # end of 'mrolo/rolo.h'
  1454. fi
  1455. if test -f 'mrolo/roloP.h' -a "${1}" != "-c" ; then 
  1456.   echo shar: Will not clobber existing file \"'mrolo/roloP.h'\"
  1457. else
  1458. echo shar: Extracting \"'mrolo/roloP.h'\" \(228 characters\)
  1459. sed "s/^X//" >'mrolo/roloP.h' <<'END_OF_FILE'
  1460. X#ifndef _ROLOP_H
  1461. X#define _ROLOP_H
  1462. X
  1463. Xtypedef struct _RoloRec {
  1464. X  char *name;
  1465. X  char *number;
  1466. X  char *number2;
  1467. X  char *text;
  1468. X  int on;
  1469. X  struct _RoloRec *next;
  1470. X} RoloRec;
  1471. X
  1472. X#define BUFSIZE 100000
  1473. X
  1474. Xextern RoloRec *RoloList;
  1475. X
  1476. X#endif
  1477. X
  1478. END_OF_FILE
  1479. if test 228 -ne `wc -c <'mrolo/roloP.h'`; then
  1480.     echo shar: \"'mrolo/roloP.h'\" unpacked with wrong size!
  1481. fi
  1482. # end of 'mrolo/roloP.h'
  1483. fi
  1484. if test -f 'mrolo/rolox.c' -a "${1}" != "-c" ; then 
  1485.   echo shar: Will not clobber existing file \"'mrolo/rolox.c'\"
  1486. else
  1487. echo shar: Extracting \"'mrolo/rolox.c'\" \(1114 characters\)
  1488. sed "s/^X//" >'mrolo/rolox.c' <<'END_OF_FILE'
  1489. X/* Copyright 1993 by gregg hanna */
  1490. X#include <stdio.h>
  1491. X#include <stdlib.h>
  1492. X#include <ctype.h>
  1493. X#include <X11/Xos.h>
  1494. X#include <Xm/Xm.h>
  1495. X#include <Xm/List.h>
  1496. X
  1497. X#include "patchlevel.h"
  1498. X#include "rolo.h"
  1499. X#include "roloP.h"
  1500. X
  1501. Xextern Boolean showSecondary;
  1502. Xextern int sizePrimary;
  1503. X
  1504. Xvoid PutListOnScreen()
  1505. X{
  1506. X  RoloRec *rr;
  1507. X  char buf[500];
  1508. X  int n, i;
  1509. X  extern Widget ListForRolo;
  1510. X  XmString *xmtable;
  1511. X
  1512. X  n = 0;
  1513. X  for ( rr = RoloList; rr != NULL; rr = rr->next )
  1514. X    if ( rr->on ) n++;
  1515. X
  1516. X  xmtable = (XmString*)calloc(n,sizeof(XmString));
  1517. X  for ( rr = RoloList, i = 0; rr != NULL; rr = rr->next )
  1518. X    if ( rr->on ) {
  1519. X      sprintf(buf,"%-30s",rr->name);
  1520. X      buf[30] = ' ';
  1521. X      if ( showSecondary ) {
  1522. X        sprintf(&buf[31],"%-*s",sizePrimary,rr->number);
  1523. X        buf[31+sizePrimary] = ' ';
  1524. X        strcpy(&buf[31+sizePrimary+1],rr->number2);
  1525. X      } else {
  1526. X        strcpy(&buf[31],rr->number);
  1527. X      }
  1528. X      xmtable[i] = XmStringCreateSimple(buf);
  1529. X      i++;
  1530. X    }
  1531. X  XmListDeleteAllItems(ListForRolo);
  1532. X  XmListAddItems(ListForRolo,xmtable,n,0);
  1533. X  for ( i = 0; i < n; i++ ) XmStringFree(xmtable[i]);
  1534. X  free(xmtable);
  1535. X}
  1536. X
  1537. END_OF_FILE
  1538. if test 1114 -ne `wc -c <'mrolo/rolox.c'`; then
  1539.     echo shar: \"'mrolo/rolox.c'\" unpacked with wrong size!
  1540. fi
  1541. # end of 'mrolo/rolox.c'
  1542. fi
  1543. if test -f 'mrolo/rolox.h' -a "${1}" != "-c" ; then 
  1544.   echo shar: Will not clobber existing file \"'mrolo/rolox.h'\"
  1545. else
  1546. echo shar: Extracting \"'mrolo/rolox.h'\" \(67 characters\)
  1547. sed "s/^X//" >'mrolo/rolox.h' <<'END_OF_FILE'
  1548. X#ifndef _ROLOX_H
  1549. X#define _ROLOX_H
  1550. X
  1551. Xvoid PutListOnScreen();
  1552. X
  1553. X#endif
  1554. END_OF_FILE
  1555. if test 67 -ne `wc -c <'mrolo/rolox.h'`; then
  1556.     echo shar: \"'mrolo/rolox.h'\" unpacked with wrong size!
  1557. fi
  1558. # end of 'mrolo/rolox.h'
  1559. fi
  1560. if test -f 'mrolo/xr2mr' -a "${1}" != "-c" ; then 
  1561.   echo shar: Will not clobber existing file \"'mrolo/xr2mr'\"
  1562. else
  1563. echo shar: Extracting \"'mrolo/xr2mr'\" \(60 characters\)
  1564. sed "s/^X//" >'mrolo/xr2mr' <<'END_OF_FILE'
  1565. X#!/bin/sh
  1566. Xsed '1,$s/^####$/\014/g' $1 | tail +2
  1567. Xecho "\014"
  1568. END_OF_FILE
  1569. if test 60 -ne `wc -c <'mrolo/xr2mr'`; then
  1570.     echo shar: \"'mrolo/xr2mr'\" unpacked with wrong size!
  1571. fi
  1572. chmod +x 'mrolo/xr2mr'
  1573. # end of 'mrolo/xr2mr'
  1574. fi
  1575. if test -f 'mrolo/xr2mr.man' -a "${1}" != "-c" ; then 
  1576.   echo shar: Will not clobber existing file \"'mrolo/xr2mr.man'\"
  1577. else
  1578. echo shar: Extracting \"'mrolo/xr2mr.man'\" \(775 characters\)
  1579. sed "s/^X//" >'mrolo/xr2mr.man' <<'END_OF_FILE'
  1580. X.TH xr2mr L "19 May 1993"
  1581. X.SH NAME
  1582. Xxr2mr \- Convert xrolodex file to mrolo format
  1583. X.SH SYNOPSIS
  1584. X.B xr2mr
  1585. X[
  1586. X.B filename
  1587. X]
  1588. X.SH DESCRIPTION
  1589. X.LP
  1590. X.I xr2mr
  1591. Xis a UNIX shell script which will read a xrolodex
  1592. Xfile and emit on standard output an equivalent
  1593. X.I mrolo
  1594. Xfile.  If no file is given on the command line
  1595. Xthen standard input is used.
  1596. X.LP
  1597. XThe format for
  1598. X.I mrolo
  1599. Xis detailed in it's own manpage, but the format
  1600. Xis compatible with xrolo.
  1601. X.SH EXAMPLE
  1602. X.LP
  1603. Xxr2mr .rolodex > .rolo
  1604. X.SH "SEE ALSO"
  1605. X.PD
  1606. X.BR mrolo (1),
  1607. X.BR prolo (1),
  1608. X.BR xrolo (1)
  1609. X.br
  1610. X.ne 5
  1611. X.SH BUGS
  1612. X.LP
  1613. XNone known.  Report bugs to gregor@kafka.saic.com
  1614. X.SH AUTHOR
  1615. X.nf
  1616. X.LP
  1617. Xgregg hanna (gregor@kafka.saic.com)
  1618. XScience Applications International Corporation
  1619. X10260 Campus Point Drive, MS C3
  1620. XSan Diego, California  92121
  1621. X.fi
  1622. END_OF_FILE
  1623. if test 775 -ne `wc -c <'mrolo/xr2mr.man'`; then
  1624.     echo shar: \"'mrolo/xr2mr.man'\" unpacked with wrong size!
  1625. fi
  1626. # end of 'mrolo/xr2mr.man'
  1627. fi
  1628. echo shar: End of archive 1 \(of 2\).
  1629. cp /dev/null ark1isdone
  1630. MISSING=""
  1631. for I in 1 2 ; do
  1632.     if test ! -f ark${I}isdone ; then
  1633.     MISSING="${MISSING} ${I}"
  1634.     fi
  1635. done
  1636. if test "${MISSING}" = "" ; then
  1637.     echo You have unpacked both archives.
  1638.     rm -f ark[1-9]isdone
  1639. else
  1640.     echo You still need to unpack the following archives:
  1641.     echo "        " ${MISSING}
  1642. fi
  1643. ##  End of shell archive.
  1644. exit 0
  1645.  
  1646. exit 0 # Just in case...
  1647. -- 
  1648.   // chris@Sterling.COM           | Send comp.sources.x submissions to:
  1649. \X/  Amiga - The only way to fly! |    sources-x@sterling.com
  1650.  "It's intuitively obvious to the |
  1651.   most casual observer..."        | GCS d+/-- p+ c++ l+ m+ s++/+ g+ w+ t+ r+ x+
  1652.