home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / x / volume16 / pan / part01 < prev    next >
Encoding:
Text File  |  1992-03-06  |  30.2 KB  |  1,154 lines

  1. Newsgroups: comp.sources.x
  2. Path: uunet!think.com!mips!msi!dcmartin
  3. From: jeff@rd1.interlan.com (Jeff Bailey)
  4. Subject: v16i137: pan - Post A Note (for Open Windows), Part01/06
  5. Message-ID: <csx-16i137-pan@uunet.UU.NET>
  6. Originator: dcmartin@fascet
  7. Sender: dcmartin@msi.com (David C. Martin - Moderator)
  8. Organization: Molecular Simulations, Inc.
  9. Date: Fri, 6 Mar 1992 20:03:09 GMT
  10. Approved: dcmartin@msi.com
  11.  
  12. Submitted-by: jeff@rd1.interlan.com (Jeff Bailey)
  13. Posting-number: Volume 16, Issue 137
  14. Archive-name: pan/part01
  15.  
  16.  
  17.  
  18. ---- Cut Here and feed the following to sh ----
  19. #!/bin/sh
  20. # This is a shell archive (produced by shar 3.49)
  21. # To extract the files from this archive, save it to a file, remove
  22. # everything above the "!/bin/sh" line above, and type "sh file_name".
  23. #
  24. # made 02/25/1992 22:06 UTC by jeff@tasslehoff
  25. # Source directory /users/jeff/c/pan/new
  26. #
  27. # existing files will NOT be overwritten unless -c is specified
  28. #
  29. # This shar contains:
  30. # length  mode       name
  31. # ------ ---------- ------------------------------------------
  32. #    822 -rw-r--r-- COPYRIGHT
  33. #   2102 -rw-r--r-- README
  34. #    168 -rw-r--r-- MANIFEST
  35. #    428 -rw-r--r-- Makefile
  36. #   7160 -rw-r--r-- event.c
  37. #   6605 -rw-r--r-- hidexp.c
  38. #   8172 -rw-r--r-- llm.c
  39. #  12600 -rw-r--r-- menu.c
  40. #   1777 -rw-r--r-- misc.c
  41. #  14223 -rw-r--r-- move.c
  42. #  16239 -rw-r--r-- note.c
  43. #  15901 -rw-r--r-- pan.c
  44. #   6718 -rw-r--r-- pan.h
  45. #   1997 -rw-r--r-- pan.icon
  46. #  10032 -rw-r--r-- pan.man
  47. #   8055 -rw-r--r-- parser.c
  48. #   8786 -rw-r--r-- rmfolder.c
  49. #   2035 -rw-r--r-- rmnote.c
  50. #   9860 -rw-r--r-- search.c
  51. #   3574 -rw-r--r-- update.c
  52. #   1960 -rw-r--r-- win.c
  53. #
  54. # ============= COPYRIGHT ==============
  55. if test -f 'COPYRIGHT' -a X"$1" != X"-c"; then
  56.     echo 'x - skipping COPYRIGHT (File already exists)'
  57. else
  58. echo 'x - extracting COPYRIGHT (Text)'
  59. sed 's/^X//' << 'SHAR_EOF' > 'COPYRIGHT' &&
  60. Post A Note V2.4
  61. Copyright (c) 1992, Jeffrey W. Bailey
  62. All rights reserved.
  63. X
  64. Permission is granted to distribute this program in exact, complete
  65. source form, which includes this copyright notice, as long as no fee
  66. other than media and distribution cost is charged.
  67. X
  68. This program may not be used in whole, or in part, in any other manner
  69. without prior written permission from the author.
  70. X
  71. This program may not be distributed in modified form without prior
  72. written permission from the author.  In other words, patches may be
  73. distributed, but modified source may not be distributed.
  74. X
  75. If there are any questions, comments or suggestions, the author may be
  76. contacted at:
  77. X
  78. X    jeff@rd1.interlan.com
  79. X
  80. X    or
  81. X
  82. X    Jeffrey Bailey
  83. X    Racal-Datacom, Inc.
  84. X    Mail Stop E-110
  85. X    1601 N. Harrison Parkway
  86. X    Sunrise, FL  33323-2899
  87. SHAR_EOF
  88. chmod 0644 COPYRIGHT ||
  89. echo 'restore of COPYRIGHT failed'
  90. Wc_c="`wc -c < 'COPYRIGHT'`"
  91. test 822 -eq "$Wc_c" ||
  92.     echo 'COPYRIGHT: original size 822, current size' "$Wc_c"
  93. fi
  94. # ============= README ==============
  95. if test -f 'README' -a X"$1" != X"-c"; then
  96.     echo 'x - skipping README (File already exists)'
  97. else
  98. echo 'x - extracting README (Text)'
  99. sed 's/^X//' << 'SHAR_EOF' > 'README' &&
  100. History:
  101. X
  102. I wrote this program after seeing a couple of X based post-it style programs
  103. and deciding that none of them did what I wanted.  It has gone through several
  104. in-house revisions.  Some of the available options were requested by individual
  105. users of the program.  Because of this, they may not seem generally useful.
  106. X
  107. Version 2.4 is the first version that I have publicly distributed.  This is
  108. due mostly to apathy.  Recently, some people have prodded me to distribute
  109. pan to the net.  So here it is.  I hope someone finds it useful.
  110. X
  111. If you find bugs, or mis-features, or want enhancements, feel free to send
  112. me e-mail.  Note, however, that I promise nothing.  I may or may not do
  113. what you request.  It depends upon my available free time, current work
  114. load, and whether I want to or not.
  115. X
  116. Caveats:
  117. X
  118. A lot of people have been using this program for quite a while, and I haven't
  119. gotten a single complaint about a lost note due to program error (or
  120. due to any other reason).  However, as we all know, there is always a first.
  121. In other words, I think pan is pretty trustworthy, but I wouldn't bet my 
  122. life on it!
  123. X
  124. I've only ever built this under Open Windows (v2 & v3) on a sun4 platform.
  125. I don't know whether it will build and run under any other configuration.
  126. If you have a different configuration, let me know how things work out (good
  127. or bad).
  128. X
  129. Sorry about the lack of an Imakefile, but I've never needed to use one, so
  130. I haven't learned the syntax.  Basically, pan needs the xview library, the
  131. olgx library, and the X11 library.  It also needs the X and xview include
  132. files.
  133. X
  134. Building pan:
  135. X
  136. To build pan, make sure OPENWINHOME is set in the environment and
  137. then run make.  If this doesn't work, take a look at the Makefile and
  138. see if you can modify it for your configuration.  The included Makefile
  139. is pathetically simple.
  140. X
  141. Note that if you use a more strict (or ANSI) compiler, you might get lots
  142. of warnings.  I haven't gone through and made sure that I always cast the
  143. return value from xv_get() everywhere and I might have been sloppy elsewhere
  144. too.  I apologize if this causes any grief.
  145. SHAR_EOF
  146. chmod 0644 README ||
  147. echo 'restore of README failed'
  148. Wc_c="`wc -c < 'README'`"
  149. test 2102 -eq "$Wc_c" ||
  150.     echo 'README: original size 2102, current size' "$Wc_c"
  151. fi
  152. # ============= MANIFEST ==============
  153. if test -f 'MANIFEST' -a X"$1" != X"-c"; then
  154.     echo 'x - skipping MANIFEST (File already exists)'
  155. else
  156. echo 'x - extracting MANIFEST (Text)'
  157. sed 's/^X//' << 'SHAR_EOF' > 'MANIFEST' &&
  158. COPYRIGHT
  159. README
  160. MANIFEST
  161. Makefile
  162. event.c
  163. hidexp.c
  164. llm.c
  165. menu.c
  166. misc.c
  167. move.c
  168. note.c
  169. pan.c
  170. pan.h
  171. pan.icon
  172. pan.man
  173. parser.c
  174. rmfolder.c
  175. rmnote.c
  176. search.c
  177. update.c
  178. win.c
  179. SHAR_EOF
  180. chmod 0644 MANIFEST ||
  181. echo 'restore of MANIFEST failed'
  182. Wc_c="`wc -c < 'MANIFEST'`"
  183. test 168 -eq "$Wc_c" ||
  184.     echo 'MANIFEST: original size 168, current size' "$Wc_c"
  185. fi
  186. # ============= Makefile ==============
  187. if test -f 'Makefile' -a X"$1" != X"-c"; then
  188.     echo 'x - skipping Makefile (File already exists)'
  189. else
  190. echo 'x - extracting Makefile (Text)'
  191. sed 's/^X//' << 'SHAR_EOF' > 'Makefile' &&
  192. CFLAGS=-I$(OPENWINHOME)/include -O
  193. SRCS=pan.c event.c hidexp.c llm.c menu.c misc.c move.c note.c parser.c \
  194. X    rmfolder.c rmnote.c search.c update.c win.c
  195. OBJS=pan.o event.o hidexp.o llm.o menu.o misc.o move.o note.o parser.o \
  196. X    rmfolder.o rmnote.o search.o update.o win.o
  197. LIBS=-L$(OPENWINHOME)/lib -lxview -lolgx -lX11
  198. X
  199. pan : $(OBJS)
  200. X    cc -o pan $(OBJS) $(LIBS)
  201. X
  202. pan.o : pan.c pan.icon
  203. X
  204. $(OBJS) : pan.h
  205. X
  206. clean:
  207. X    rm -f pan $(OBJS)
  208. SHAR_EOF
  209. chmod 0644 Makefile ||
  210. echo 'restore of Makefile failed'
  211. Wc_c="`wc -c < 'Makefile'`"
  212. test 428 -eq "$Wc_c" ||
  213.     echo 'Makefile: original size 428, current size' "$Wc_c"
  214. fi
  215. # ============= event.c ==============
  216. if test -f 'event.c' -a X"$1" != X"-c"; then
  217.     echo 'x - skipping event.c (File already exists)'
  218. else
  219. echo 'x - extracting event.c (Text)'
  220. sed 's/^X//' << 'SHAR_EOF' > 'event.c' &&
  221. /*
  222. Post A Note V2.4
  223. Copyright (c) 1992, Jeffrey W. Bailey
  224. All rights reserved.
  225. X
  226. Permission is granted to distribute this program in exact, complete
  227. source form, which includes this copyright notice, as long as no fee
  228. other than media and distribution cost is charged.
  229. X
  230. This program may not be used in whole, or in part, in any other manner
  231. without prior written permission from the author.
  232. X
  233. This program may not be distributed in modified form without prior
  234. written permission from the author.  In other words, patches may be
  235. distributed, but modified source may not be distributed.
  236. X
  237. If there are any questions, comments or suggestions, the author may be
  238. contacted at:
  239. X
  240. X    jeff@rd1.interlan.com
  241. X
  242. X    or
  243. X
  244. X    Jeffrey Bailey
  245. X    Racal-Datacom, Inc.
  246. X    Mail Stop E-110
  247. X    1601 N. Harrison Parkway
  248. X    Sunrise, FL  33323-2899
  249. */
  250. X
  251. #include "pan.h"
  252. X
  253. extern char *malloc();
  254. extern char *getenv();
  255. X
  256. extern int errno;
  257. extern char *sys_errlist[];
  258. X
  259. /*
  260. X    Handle the window exit event of the mouse pointer.  Used to do auto-saves.
  261. X    This trick on a frame is not specifically documented, but seems to work.
  262. X    I hope it doesn't break in the future.
  263. */
  264. frameexit(frame, event, arg)
  265. X    Frame frame;
  266. X    Event *event;
  267. X    Notify_arg arg;
  268. X    {
  269. X    int  found = 0;
  270. X    struct SubDir *sp;
  271. X    struct Note *np;
  272. X
  273. X    if(event_id(event) != LOC_WINEXIT) return;
  274. X    if(debug_on) fprintf(stderr, "Got LOC_WINEXIT\n");
  275. X
  276. X    sp = (struct SubDir *) LLM_first(&subdir_rt);
  277. X    while(sp != NULL && !found)
  278. X        {
  279. X        np = (struct Note *) LLM_first(&sp->note_rt);
  280. X        while(np != NULL && !found)
  281. X            {
  282. X            if(np->frame == frame && np->mapped)
  283. X                {
  284. X                update(np);
  285. X                updateinfo(np, NOFORCE);
  286. X                found = 1;
  287. X                }
  288. X            np = (struct Note *) LLM_next(&sp->note_rt);
  289. X            }
  290. X        sp = (struct SubDir *) LLM_next(&subdir_rt);
  291. X        }
  292. X
  293. X    }
  294. X
  295. /*
  296. X    Handles a drag & drop event from the file manager into a note, retrieving
  297. X    the path & file name and inserting it into the note text.
  298. */
  299. dragdrop(window, event, arg)
  300. X    Xv_Window window;
  301. X    Event *event;
  302. X    Notify_arg arg;
  303. X    {
  304. X    int  found = 0;
  305. X    struct SubDir *sp;
  306. X    struct Note *np;
  307. X    Xv_Window twin;
  308. X    int  n;
  309. X    int  amount;
  310. X    char buf[SELN_BUFSIZE];
  311. X
  312. X    if(debug_on)
  313. X        {
  314. X        if(event_action(event) == ACTION_DRAG_MOVE)
  315. X            fprintf(stderr, "Got ACTION_DRAG_MOVE event\n");
  316. X        if(event_action(event) == ACTION_DRAG_LOAD)
  317. X            fprintf(stderr, "Got ACTION_DRAG_LOAD event\n");
  318. X        if(event_action(event) == ACTION_DRAG_COPY)
  319. X            fprintf(stderr, "Got ACTION_DRAG_COPY event\n");
  320. X        }
  321. X    if(event_action(event) == ACTION_DRAG_LOAD)
  322. X        {
  323. X        sp = (struct SubDir *)LLM_first(&subdir_rt);
  324. X        while(sp != NULL && !found)
  325. X            {
  326. X            np = (struct Note *) LLM_first(&sp->note_rt);
  327. X            while(np != NULL && !found)
  328. X                {
  329. X                if(np->mapped)
  330. X                    {
  331. X                    twin = (Xv_Window) xv_get(np->textsw, OPENWIN_NTH_VIEW, 0);
  332. X                    if(twin == window)
  333. X                        {
  334. X                        found = 1;
  335. X                        n = xv_decode_drop(event, buf, sizeof(buf));
  336. X                        buf[sizeof(buf) - 1] = 0;
  337. X                        if(debug_on) fprintf(stderr, "buf {%s}\n", buf);
  338. X                        if(n > 0)
  339. X                            textsw_insert(np->textsw, buf, strlen(buf));
  340. X                        }
  341. X                    }
  342. X                np = (struct Note *) LLM_next(&sp->note_rt);
  343. X                }
  344. X            sp = (struct SubDir *)LLM_next(&subdir_rt);
  345. X            }
  346. X        }
  347. X    if((event_action(event) == ACTION_GO_PAGE_FORWARD || 
  348. X       event_action(event) == ACTION_GO_PAGE_BACKWARD) && event_is_down(event))
  349. X        {
  350. X        if(debug_on) fprintf(stderr, "Got PAGE event\n");
  351. X        sp = (struct SubDir *)LLM_first(&subdir_rt);
  352. X        while(sp != NULL && !found)
  353. X            {
  354. X            np = (struct Note *) LLM_first(&sp->note_rt);
  355. X            while(np != NULL && !found)
  356. X                {
  357. X                if(np->mapped)
  358. X                    {
  359. X                    twin = (Xv_Window) xv_get(np->textsw, OPENWIN_NTH_VIEW, 0);
  360. X                    if(twin == window)
  361. X                        {
  362. X                        Textsw_index t_ndx;
  363. X                        int  top, bottom;
  364. X                        int  len;
  365. X
  366. X                        found = 1;
  367. X                        textsw_file_lines_visible(np->textsw, &top, &bottom);
  368. X                        len = xv_get(np->textsw, TEXTSW_LENGTH);
  369. X                        if(debug_on)
  370. X                            fprintf(stderr, "len %d\n", len);
  371. X                        amount = bottom - top + 1;
  372. X                        if(event_action(event) == ACTION_GO_PAGE_BACKWARD)
  373. X                            amount = -(amount);
  374. X                        if(debug_on)
  375. X                            fprintf(stderr, "top %d, bot %d\n", top, bottom);
  376. X                        top += amount;
  377. X                        if(top < 0) top = 0;
  378. X                        t_ndx = textsw_index_for_file_line(np->textsw, top);
  379. X                        if(debug_on)
  380. X                            fprintf(stderr, "t_ndx %d\n",
  381. X                                    t_ndx);
  382. X                        if(t_ndx >= 0)
  383. X                            {
  384. X                            xv_set(np->textsw,
  385. X                                   TEXTSW_INSERTION_POINT, t_ndx,
  386. X                                   TEXTSW_UPPER_CONTEXT, 0,
  387. X                                   NULL);
  388. X                            textsw_normalize_view(np->textsw, t_ndx);
  389. X                            }
  390. X                        }
  391. X                    }
  392. X                np = (struct Note *) LLM_next(&sp->note_rt);
  393. X                }
  394. X            sp = (struct SubDir *)LLM_next(&subdir_rt);
  395. X            }
  396. X        }
  397. X    if(event_id(event) == KBD_DONE)
  398. X        {
  399. X        if(debug_on) fprintf(stderr, "Got KBD_DONE event\n");
  400. X        sp = (struct SubDir *)LLM_first(&subdir_rt);
  401. X        while(sp != NULL && !found)
  402. X            {
  403. X            np = (struct Note *) LLM_first(&sp->note_rt);
  404. X            while(np != NULL && !found)
  405. X                {
  406. X                if(np->mapped)
  407. X                    {
  408. X                    twin = (Xv_Window) xv_get(np->textsw, OPENWIN_NTH_VIEW, 0);
  409. X                    if(twin == window)
  410. X                        {
  411. X                        found = 1;
  412. X                        update(np);
  413. X                        updateinfo(np, NOFORCE);
  414. X                        }
  415. X                    }
  416. X                np = (struct Note *) LLM_next(&sp->note_rt);
  417. X                }
  418. X            sp = (struct SubDir *)LLM_next(&subdir_rt);
  419. X            }
  420. X        }
  421. X    }
  422. X
  423. /*
  424. X    Handles child process death notification.  Used with the print note
  425. X    action.
  426. */
  427. Notify_value child_death(me, pid, status, rusage)
  428. X    Notify_client me;
  429. X    int  pid;
  430. X    union wait *status;
  431. X    struct rusage *rusage;
  432. X    {
  433. X    if(WIFEXITED(*status))
  434. X        {
  435. X        if(debug_on) fprintf(stderr, "Got child death\n");
  436. X        return(NOTIFY_DONE);
  437. X        }
  438. X    return(NOTIFY_IGNORED);
  439. X    }
  440. SHAR_EOF
  441. chmod 0644 event.c ||
  442. echo 'restore of event.c failed'
  443. Wc_c="`wc -c < 'event.c'`"
  444. test 7160 -eq "$Wc_c" ||
  445.     echo 'event.c: original size 7160, current size' "$Wc_c"
  446. fi
  447. # ============= hidexp.c ==============
  448. if test -f 'hidexp.c' -a X"$1" != X"-c"; then
  449.     echo 'x - skipping hidexp.c (File already exists)'
  450. else
  451. echo 'x - extracting hidexp.c (Text)'
  452. sed 's/^X//' << 'SHAR_EOF' > 'hidexp.c' &&
  453. /*
  454. Post A Note V2.4
  455. Copyright (c) 1992, Jeffrey W. Bailey
  456. All rights reserved.
  457. X
  458. Permission is granted to distribute this program in exact, complete
  459. source form, which includes this copyright notice, as long as no fee
  460. other than media and distribution cost is charged.
  461. X
  462. This program may not be used in whole, or in part, in any other manner
  463. without prior written permission from the author.
  464. X
  465. This program may not be distributed in modified form without prior
  466. written permission from the author.  In other words, patches may be
  467. distributed, but modified source may not be distributed.
  468. X
  469. If there are any questions, comments or suggestions, the author may be
  470. contacted at:
  471. X
  472. X    jeff@rd1.interlan.com
  473. X
  474. X    or
  475. X
  476. X    Jeffrey Bailey
  477. X    Racal-Datacom, Inc.
  478. X    Mail Stop E-110
  479. X    1601 N. Harrison Parkway
  480. X    Sunrise, FL  33323-2899
  481. */
  482. X
  483. #include "pan.h"
  484. X
  485. extern char *malloc();
  486. extern char *getenv();
  487. X
  488. extern int errno;
  489. extern char *sys_errlist[];
  490. X
  491. /*
  492. X    Routine called when hide notes button is selected.  Hides ALL notes.
  493. */
  494. hideall()
  495. X    {
  496. X    struct SubDir *sp;
  497. X    struct Note *np;
  498. X
  499. X    sp = (struct SubDir *) LLM_first(&subdir_rt);
  500. X    while(sp != NULL)
  501. X        {
  502. X        np = (struct Note *) LLM_first(&sp->note_rt);
  503. X        while(np != NULL)
  504. X            {
  505. X            if(np->mapped && np->state != Hidden)
  506. X                {
  507. X                np->state = Hidden;
  508. X                update(np);
  509. X                updateinfo(np, FORCE);
  510. X                textsw_reset(np->textsw, 0, 0);
  511. X                put_win(np);
  512. X                np->mapped = 0;
  513. X                }
  514. X            np = (struct Note *) LLM_next(&sp->note_rt);
  515. X            }
  516. X        sp = (struct SubDir *) LLM_next(&subdir_rt);
  517. X        }
  518. X    refresh_popups();
  519. X    }
  520. X
  521. /*
  522. X    Routine called when expose notes button menu selection All is selected.
  523. X    Exposes ALL notes.
  524. */
  525. exposeall()
  526. X    {
  527. X    struct SubDir *sp;
  528. X    struct Note *np;
  529. X
  530. X    sp = (struct SubDir *) LLM_first(&subdir_rt);
  531. X    while(sp != NULL)
  532. X        {
  533. X        np = (struct Note *) LLM_first(&sp->note_rt);
  534. X        while(np != NULL)
  535. X            {
  536. X            if(np->state != Visible)
  537. X                {
  538. X                if(!np->mapped)
  539. X                    {
  540. X                    buildnote(np);
  541. X                    xv_set(np->title, PANEL_VALUE, np->ntitle, NULL);
  542. X                    xv_set(np->frame, XV_LABEL, np->ntitle, NULL);
  543. X                    reseticon(np);
  544. X                    np->state = Visible;
  545. X                    update(np);
  546. X                    updateinfo(np, FORCE);
  547. X                    }
  548. X                }
  549. X            np = (struct Note *) LLM_next(&sp->note_rt);
  550. X            }
  551. X        sp = (struct SubDir *) LLM_next(&subdir_rt);
  552. X        }
  553. X    refresh_popups();
  554. X    }
  555. X
  556. /*
  557. X    Routine called when expose notes button menu selection All is selected
  558. X    from within a folder.  Exposes ALL notes in the folder.
  559. */
  560. exposefolder(sp)
  561. X    struct SubDir *sp;
  562. X    {
  563. X    struct Note *np;
  564. X
  565. X    np = (struct Note *) LLM_first(&sp->note_rt);
  566. X    while(np != NULL)
  567. X        {
  568. X        if(np->state != Visible)
  569. X            {
  570. X            if(!np->mapped)
  571. X                {
  572. X                buildnote(np);
  573. X                xv_set(np->title, PANEL_VALUE, np->ntitle, NULL);
  574. X                xv_set(np->frame, XV_LABEL, np->ntitle, NULL);
  575. X                reseticon(np);
  576. X                np->state = Visible;
  577. X                update(np);
  578. X                updateinfo(np, FORCE);
  579. X                }
  580. X            }
  581. X        np = (struct Note *) LLM_next(&sp->note_rt);
  582. X        }
  583. X    refresh_popups();
  584. X    }
  585. X
  586. /*
  587. X    Routine called when the hide button on a note is selected.  Hides the
  588. X    selected note.
  589. */
  590. hidenote(item, event)
  591. X    Panel_item item;
  592. X    Event *event;
  593. X    {
  594. X    struct Note *np;
  595. X
  596. X    np = (struct Note *) xv_get(item, PANEL_CLIENT_DATA);
  597. X
  598. X    np->state = Hidden;
  599. X    update(np);
  600. X    updateinfo(np, FORCE);
  601. X    textsw_reset(np->textsw, 0, 0);
  602. X    put_win(np);
  603. X
  604. X    np->mapped = 0;
  605. X    refresh_popups();
  606. X    }
  607. X
  608. /*
  609. X    Called when the window border menu Quit item is selected on a note.
  610. X    Veils the note.
  611. */
  612. dismissed(frame)
  613. X    Frame frame;
  614. X    {
  615. X    int  found = 0;
  616. X    struct SubDir *sp;
  617. X    struct Note *np;
  618. X
  619. X    sp = (struct SubDir *) LLM_first(&subdir_rt);
  620. X    while(sp != NULL && !found)
  621. X        {
  622. X        np = (struct Note *) LLM_first(&sp->note_rt);
  623. X        while(np != NULL && !found)
  624. X            {
  625. X            if(np->mapped && np->frame == frame)
  626. X                {
  627. X                np->state = Veiled;
  628. X                updateinfo(np, NOFORCE);
  629. X                update(np);
  630. X                textsw_reset(np->textsw, 0, 0);
  631. X                put_win(np);
  632. X                np->mapped = 0;
  633. X                found = 1;
  634. X                }
  635. X            np = (struct Note *) LLM_next(&sp->note_rt);
  636. X            }
  637. X        sp = (struct SubDir *) LLM_next(&subdir_rt);
  638. X        }
  639. X    refresh_popups();
  640. X    }
  641. X
  642. /*
  643. X    Called when an expose menu item is chosen.  Figures out which note
  644. X    to expose, then does it.
  645. */
  646. exposemenu(menu, mitem)
  647. X    Menu menu;
  648. X    Menu_item mitem;
  649. X    {
  650. X    struct SubDir *sp;
  651. X    struct Note *np;
  652. X    char *ptext;
  653. X    Menu_item pullright;
  654. X
  655. X    np = (struct Note *)xv_get(mitem, MENU_CLIENT_DATA);
  656. X    if(np == NULL &&
  657. X       strcmp((char *)xv_get(mitem, MENU_STRING), CHOICE_ALL) == 0)
  658. X        {
  659. X        exposeall();
  660. X        }
  661. X    else if((long) np == 0xFFFFFFFF &&
  662. X       strcmp((char *)xv_get(mitem, MENU_STRING), CHOICE_ALL) == 0)
  663. X        {
  664. X        pullright = (Menu_item) xv_get(menu, MENU_PARENT);
  665. X        ptext = (char *)xv_get(pullright, MENU_STRING);
  666. X        sp = (struct SubDir *) LLM_first(&subdir_rt);
  667. X        while(sp != NULL)
  668. X            {
  669. X            if(strcmp(sp->subdir, ptext) == 0)
  670. X                exposefolder(sp);
  671. X            sp = (struct SubDir *) LLM_next(&subdir_rt);
  672. X            }
  673. X        }
  674. X    else
  675. X        {
  676. X        if(np == NULL)
  677. X            {
  678. X            notice_prompt(main_frame, NULL,
  679. X                NOTICE_MESSAGE_STRINGS,
  680. X                    "No notes to expose",
  681. X                    NULL,
  682. X                NOTICE_BUTTON_YES, "Acknowledge",
  683. X                NOTICE_NO_BEEPING, noticenobeep,
  684. X                NULL);
  685. X            return;
  686. X            }
  687. X        if(!np->mapped)
  688. X            {
  689. X            buildnote(np);
  690. X            xv_set(np->title, PANEL_VALUE, np->ntitle, NULL);
  691. X            xv_set(np->frame, XV_LABEL, np->ntitle, NULL);
  692. X            reseticon(np);
  693. X            np->state = Visible;
  694. X            update(np);
  695. X            updateinfo(np, FORCE);
  696. X            }
  697. X        refresh_popups();
  698. X        }
  699. X    }
  700. X
  701. /* refresh any pop up windows as necessary */
  702. refresh_popups()
  703. X    {
  704. X    refresh_move();
  705. X    refresh_destroy();
  706. X    refresh_search();
  707. X    }
  708. SHAR_EOF
  709. chmod 0644 hidexp.c ||
  710. echo 'restore of hidexp.c failed'
  711. Wc_c="`wc -c < 'hidexp.c'`"
  712. test 6605 -eq "$Wc_c" ||
  713.     echo 'hidexp.c: original size 6605, current size' "$Wc_c"
  714. fi
  715. # ============= llm.c ==============
  716. if test -f 'llm.c' -a X"$1" != X"-c"; then
  717.     echo 'x - skipping llm.c (File already exists)'
  718. else
  719. echo 'x - extracting llm.c (Text)'
  720. sed 's/^X//' << 'SHAR_EOF' > 'llm.c' &&
  721. /*
  722. Post A Note V2.4
  723. Copyright (c) 1992, Jeffrey W. Bailey
  724. All rights reserved.
  725. X
  726. Permission is granted to distribute this program in exact, complete
  727. source form, which includes this copyright notice, as long as no fee
  728. other than media and distribution cost is charged.
  729. X
  730. This program may not be used in whole, or in part, in any other manner
  731. without prior written permission from the author.
  732. X
  733. This program may not be distributed in modified form without prior
  734. written permission from the author.  In other words, patches may be
  735. distributed, but modified source may not be distributed.
  736. X
  737. If there are any questions, comments or suggestions, the author may be
  738. contacted at:
  739. X
  740. X    jeff@rd1.interlan.com
  741. X
  742. X    or
  743. X
  744. X    Jeffrey Bailey
  745. X    Racal-Datacom, Inc.
  746. X    Mail Stop E-110
  747. X    1601 N. Harrison Parkway
  748. X    Sunrise, FL  33323-2899
  749. */
  750. X
  751. #include <stdio.h>
  752. #include "pan.h"
  753. X
  754. extern char *malloc();
  755. X
  756. LLM_init(root, size)
  757. X    struct LLM_root *root;
  758. X    int  size;
  759. X    {
  760. X    if(root == NULL)
  761. X        {
  762. X        return(NULL);
  763. X        }
  764. X    root->First   = NULL;
  765. X    root->Last    = NULL;
  766. X    root->Current = NULL;
  767. X    root->Size    = size + sizeof(struct LLM_node);
  768. X    root->Init    = 1;
  769. X    return(1);
  770. X    }
  771. X
  772. char *LLM_add(root)
  773. X    struct LLM_root *root;
  774. X    {
  775. X    struct LLM_node *hold, *temp;
  776. X
  777. X    if(root == NULL)
  778. X        {
  779. X        return(NULL);
  780. X        }
  781. X    if(root->Init != 1)
  782. X        {
  783. X        return(NULL);
  784. X        }
  785. X    hold = (struct LLM_node *) malloc(root->Size);
  786. X    if(hold == NULL)
  787. X        {
  788. X        return(NULL);
  789. X        }
  790. X    if(root->First == NULL)
  791. X        {
  792. X        root->First = hold;
  793. X        root->Last = hold;
  794. X        root->Current = hold;
  795. X        hold->Next = NULL;
  796. X        hold->Prev = NULL;
  797. X        }
  798. X    else
  799. X        {
  800. X        temp = root->Last;
  801. X        temp->Next = hold;
  802. X        hold->Next = NULL;
  803. X        hold->Prev = temp;
  804. X        root->Last = hold;
  805. X        }
  806. X    return( (char *) (hold + 1));
  807. X    }
  808. X
  809. char *LLM_first(root)
  810. X    struct LLM_root *root;
  811. X    {
  812. X    if(root == NULL)
  813. X        {
  814. X        return(NULL);
  815. X        }
  816. X    if(root->Init != 1)
  817. X        {
  818. X        return(NULL);
  819. X        }
  820. X    if(root->First == NULL)
  821. X        {
  822. X        return(NULL);
  823. X        }
  824. X    root->Current = root->First;
  825. X    return((char *) (root->Current + 1));
  826. X    }
  827. X
  828. char *LLM_last(root)
  829. X    struct LLM_root *root;
  830. X    {
  831. X    if(root == NULL)
  832. X        {
  833. X        return(NULL);
  834. X        }
  835. X    if(root->Init != 1)
  836. X        {
  837. X        return(NULL);
  838. X        }
  839. X    if(root->Last == NULL)
  840. X        {
  841. X        return(NULL);
  842. X        }
  843. X    root->Current = root->Last;
  844. X    return((char *) (root->Current + 1));
  845. X    }
  846. X
  847. char *LLM_next(root)
  848. X    struct LLM_root *root;
  849. X    {
  850. X    if(root == NULL)
  851. X        {
  852. X        return(NULL);
  853. X        }
  854. X    if(root->Init != 1)
  855. X        {
  856. X        return(NULL);
  857. X        }
  858. X    if(root->First == NULL)
  859. X        {
  860. X        return(NULL);
  861. X        }
  862. X    if(root->Current == NULL)
  863. X        {
  864. X        return(NULL);
  865. X        }
  866. X    if(root->Current == root->Last)
  867. X        {
  868. X        return(NULL);
  869. X        }
  870. X    root->Current = root->Current->Next;
  871. X    return((char *) (root->Current + 1));
  872. X    }
  873. X
  874. char *LLM_previous(root)
  875. X    struct LLM_root *root;
  876. X    {
  877. X    if(root == NULL)
  878. X        {
  879. X        return(NULL);
  880. X        }
  881. X    if(root->Init != 1)
  882. X        {
  883. X        return(NULL);
  884. X        }
  885. X    if(root->First == NULL)
  886. X        {
  887. X        return(NULL);
  888. X        }
  889. X    if(root->Current == NULL)
  890. X        {
  891. X        return(NULL);
  892. X        }
  893. X    if(root->Current == root->First)
  894. X        {
  895. X        return(NULL);
  896. X        }
  897. X    root->Current = root->Current->Prev;
  898. X    return((char *) (root->Current + 1));
  899. X    }
  900. X
  901. LLM_free(root)
  902. X    struct LLM_root *root;
  903. X    {
  904. X    struct LLM_node *temp, *hold;
  905. X
  906. X    if(root == NULL)
  907. X        {
  908. X        return(NULL);
  909. X        }
  910. X    if(root->Init != 1)
  911. X        {
  912. X        return(NULL);
  913. X        }
  914. X    temp = root->First;
  915. X    while(temp != NULL)   /* Loop until we're at the end. */
  916. X        {
  917. X        hold = temp;
  918. X        temp = temp->Next;
  919. X        (void)free((char *)hold);       /* Free up our current node. */
  920. X        }
  921. X    root->First   = NULL;
  922. X    root->Last    = NULL;
  923. X    root->Current = NULL;
  924. X    return(1);
  925. X    }
  926. X
  927. LLM_delete(root, node)
  928. X    struct LLM_root *root;
  929. X    char *node;
  930. X    {
  931. X    struct LLM_node *temp;
  932. X
  933. X    if(root == NULL)
  934. X        {
  935. X        return(NULL);
  936. X        }
  937. X    if(root->Init != 1)
  938. X        {
  939. X        return(NULL);
  940. X        }
  941. X    if(node == NULL)
  942. X        {
  943. X        return(NULL);
  944. X        }
  945. X    temp = (struct LLM_node *) node;
  946. X    temp--;
  947. X
  948. X    if(temp->Prev != NULL)
  949. X        temp->Prev->Next = temp->Next;
  950. X    else
  951. X        root->First = temp->Next;
  952. X
  953. X    if(temp->Next != NULL)
  954. X        temp->Next->Prev = temp->Prev;
  955. X    else
  956. X        root->Last = temp->Prev;
  957. X
  958. X    if(temp == root->Current) root->Current = root->First;
  959. X
  960. X    (void)free((char *)temp);
  961. X    return(1);
  962. X    }
  963. X
  964. char *LLM_insert(root, node)
  965. X    struct LLM_root *root;
  966. X    char *node;
  967. X    {
  968. X    struct LLM_node *temp, *hold;
  969. X
  970. X    if(root == NULL)
  971. X        {
  972. X        return(NULL);
  973. X        }
  974. X    if(root->Init != 1)
  975. X        {
  976. X        return(NULL);
  977. X        }
  978. X    if(node == NULL)
  979. X        {
  980. X        return(NULL);
  981. X        }
  982. X    temp = (struct LLM_node *) node;
  983. X    temp--;
  984. X    hold = (struct LLM_node *) malloc(root->Size);
  985. X    if(hold == NULL)
  986. X        {
  987. X        return(NULL);
  988. X        }
  989. X    if(temp == root->First)
  990. X        {
  991. X        hold->Next = root->First;
  992. X        hold->Next->Prev = hold;
  993. X        root->First = hold;
  994. X        hold->Prev = NULL;
  995. X        return( (char *) (hold + 1));
  996. X        }
  997. X    hold->Next = temp;
  998. X    hold->Prev = temp->Prev;
  999. X    temp->Prev = hold;
  1000. X    hold->Prev->Next = hold;
  1001. X
  1002. X    return( (char *) (hold + 1));
  1003. X    }
  1004. X
  1005. LLM_position(root, node)
  1006. X    struct LLM_root *root;
  1007. X    char *node;
  1008. X    {
  1009. X    struct LLM_node *temp;
  1010. X
  1011. X    if(root == NULL)
  1012. X        {
  1013. X        return(NULL);
  1014. X        }
  1015. X    if(node == NULL)
  1016. X        {
  1017. X        return(NULL);
  1018. X        }
  1019. X    if(root->Init != 1)
  1020. X        {
  1021. X        return(NULL);
  1022. X        }
  1023. X    temp = (struct LLM_node *) node;
  1024. X    temp--;
  1025. X    root->Current = temp;
  1026. X    return(1);
  1027. X    }
  1028. X
  1029. char *LLM_current(root)
  1030. X    struct LLM_root *root;
  1031. X    {
  1032. X    if(root == NULL)
  1033. X        {
  1034. X        return(NULL);
  1035. X        }
  1036. X    if(root->Init != 1)
  1037. X        {
  1038. X        return(NULL);
  1039. X        }
  1040. X    if(root->Current == NULL)
  1041. X        {
  1042. X        return(NULL);
  1043. X        }
  1044. X    return((char *) (root->Current + 1));
  1045. X    }
  1046. X
  1047. LLM_unlink(root, node)
  1048. X    struct LLM_root *root;
  1049. X    char *node;
  1050. X    {
  1051. X    struct LLM_node *temp;
  1052. X
  1053. X    if(root == NULL)
  1054. X        {
  1055. X        return(NULL);
  1056. X        }
  1057. X    if(root->Init != 1)
  1058. X        {
  1059. X        return(NULL);
  1060. X        }
  1061. X    if(node == NULL)
  1062. X        {
  1063. X        return(NULL);
  1064. X        }
  1065. X    temp = (struct LLM_node *) node;
  1066. X    temp--;
  1067. X
  1068. X    if(temp->Prev != NULL)
  1069. X        temp->Prev->Next = temp->Next;
  1070. X    else
  1071. X        root->First = temp->Next;
  1072. X
  1073. X    if(temp->Next != NULL)
  1074. X        temp->Next->Prev = temp->Prev;
  1075. X    else
  1076. X        root->Last = temp->Prev;
  1077. X
  1078. X    if(temp == root->Current) root->Current = root->First;
  1079. X
  1080. X    return(1);
  1081. X    }
  1082. X
  1083. LLM_link(root, node, newnode)
  1084. X    struct LLM_root *root;
  1085. X    char *node;
  1086. X    char *newnode;
  1087. X    {
  1088. X    struct LLM_node *temp, *hold;
  1089. X
  1090. X    if(root == NULL)
  1091. X        {
  1092. X        return(NULL);
  1093. X        }
  1094. X    if(root->Init != 1)
  1095. X        {
  1096. X        return(NULL);
  1097. X        }
  1098. X    if(newnode == NULL)
  1099. X        {
  1100. X        return(NULL);
  1101. X        }
  1102. X    hold = (struct LLM_node *) newnode;
  1103. X    hold--;
  1104. X    if(node == NULL && root->First != NULL) /* link at end */
  1105. X        {
  1106. X        temp = root->Last;
  1107. X        temp->Next = hold;
  1108. X        hold->Next = NULL;
  1109. X        hold->Prev = temp;
  1110. X        root->Last = hold;
  1111. X        return(1);
  1112. X        }
  1113. X    if(node == NULL && root->First == NULL) /* first node */
  1114. X        {
  1115. X        root->First = hold;
  1116. X        root->Last = hold;
  1117. X        root->Current = hold;
  1118. X        hold->Next = NULL;
  1119. X        hold->Prev = NULL;
  1120. X        return(1);
  1121. X        }
  1122. X    temp = (struct LLM_node *) node;
  1123. X    temp--;
  1124. X    if(temp == root->First)
  1125. X        {
  1126. X        hold->Next = root->First;
  1127. X        hold->Next->Prev = hold;
  1128. X        root->First = hold;
  1129. X        hold->Prev = NULL;
  1130. X        return(1);
  1131. X        }
  1132. X    hold->Next = temp;
  1133. X    hold->Prev = temp->Prev;
  1134. X    temp->Prev = hold;
  1135. X    hold->Prev->Next = hold;
  1136. X
  1137. X    return(1);
  1138. X    }
  1139. SHAR_EOF
  1140. chmod 0644 llm.c ||
  1141. echo 'restore of llm.c failed'
  1142. Wc_c="`wc -c < 'llm.c'`"
  1143. test 8172 -eq "$Wc_c" ||
  1144.     echo 'llm.c: original size 8172, current size' "$Wc_c"
  1145. fi
  1146. true || echo 'restore of menu.c failed'
  1147. echo End of part 1, continue with part 2
  1148. exit 0
  1149. -- 
  1150. --
  1151. Molecular Simulations, Inc.            mail: dcmartin@msi.com
  1152. 796 N. Pastoria Avenue                uucp: uunet!dcmartin
  1153. Sunnyvale, California 94086            at&t: 408/522-9236
  1154.