home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume27 / mthreads / part02 < prev    next >
SHell self-extracting ARchive  |  1993-11-20  |  83.9 KB

open in: MacOS 8.1     |     Win98     |     DOS

browse contents    |     view JSON data     |     view as text


This file was processed as: SHell self-extracting ARchive (archive/shar).

ConfidenceProgramDetectionMatch TypeSupport
100% dexvert SHell self-extracting ARchive (archive/shar) magic Supported
1% dexvert Text File (text/txt) fallback Supported
100% file ASCII text default
100% checkBytes Printable ASCII default
100% perlTextCheck Likely Text (Perl) default
100% siegfried fmt/329 Shell Archive Format default
100% detectItEasy Format: plain text[LF] default (weak)



hex view
+--------+-------------------------+-------------------------+--------+--------+
|00000000| 4e 65 77 73 67 72 6f 75 | 70 73 3a 20 63 6f 6d 70 |Newsgrou|ps: comp|
|00000010| 2e 73 6f 75 72 63 65 73 | 2e 75 6e 69 78 0a 46 72 |.sources|.unix.Fr|
|00000020| 6f 6d 3a 20 64 61 76 69 | 73 6f 6e 40 62 6f 72 6c |om: davi|son@borl|
|00000030| 61 6e 64 2e 63 6f 6d 20 | 28 57 61 79 6e 65 20 44 |and.com |(Wayne D|
|00000040| 61 76 69 73 6f 6e 29 0a | 53 75 62 6a 65 63 74 3a |avison).|Subject:|
|00000050| 20 76 32 37 69 30 39 31 | 3a 20 6d 74 68 72 65 61 | v27i091|: mthrea|
|00000060| 64 73 20 2d 20 6e 65 74 | 6e 65 77 73 20 64 61 74 |ds - net|news dat|
|00000070| 61 62 61 73 65 20 67 65 | 6e 65 72 61 74 6f 72 2f |abase ge|nerator/|
|00000080| 6d 61 6e 61 67 65 72 2c | 20 56 33 2e 31 2c 20 50 |manager,| V3.1, P|
|00000090| 61 72 74 30 32 2f 30 34 | 0a 52 65 66 65 72 65 6e |art02/04|.Referen|
|000000a0| 63 65 73 3a 20 3c 31 2e | 37 35 33 38 37 33 37 37 |ces: <1.|75387377|
|000000b0| 39 2e 31 33 36 31 31 40 | 67 77 2e 68 6f 6d 65 2e |9.13611@|gw.home.|
|000000c0| 76 69 78 2e 63 6f 6d 3e | 0a 53 65 6e 64 65 72 3a |vix.com>|.Sender:|
|000000d0| 20 75 6e 69 78 2d 73 6f | 75 72 63 65 73 2d 6d 6f | unix-so|urces-mo|
|000000e0| 64 65 72 61 74 6f 72 40 | 67 77 2e 68 6f 6d 65 2e |derator@|gw.home.|
|000000f0| 76 69 78 2e 63 6f 6d 0a | 41 70 70 72 6f 76 65 64 |vix.com.|Approved|
|00000100| 3a 20 76 69 78 69 65 40 | 67 77 2e 68 6f 6d 65 2e |: vixie@|gw.home.|
|00000110| 76 69 78 2e 63 6f 6d 0a | 0a 53 75 62 6d 69 74 74 |vix.com.|.Submitt|
|00000120| 65 64 2d 42 79 3a 20 64 | 61 76 69 73 6f 6e 40 62 |ed-By: d|avison@b|
|00000130| 6f 72 6c 61 6e 64 2e 63 | 6f 6d 20 28 57 61 79 6e |orland.c|om (Wayn|
|00000140| 65 20 44 61 76 69 73 6f | 6e 29 0a 50 6f 73 74 69 |e Daviso|n).Posti|
|00000150| 6e 67 2d 4e 75 6d 62 65 | 72 3a 20 56 6f 6c 75 6d |ng-Numbe|r: Volum|
|00000160| 65 20 32 37 2c 20 49 73 | 73 75 65 20 39 31 0a 41 |e 27, Is|sue 91.A|
|00000170| 72 63 68 69 76 65 2d 4e | 61 6d 65 3a 20 6d 74 68 |rchive-N|ame: mth|
|00000180| 72 65 61 64 73 2f 70 61 | 72 74 30 32 0a 0a 23 21 |reads/pa|rt02..#!|
|00000190| 20 2f 62 69 6e 2f 73 68 | 0a 23 20 54 68 69 73 20 | /bin/sh|.# This |
|000001a0| 69 73 20 61 20 73 68 65 | 6c 6c 20 61 72 63 68 69 |is a she|ll archi|
|000001b0| 76 65 2e 20 20 52 65 6d | 6f 76 65 20 61 6e 79 74 |ve. Rem|ove anyt|
|000001c0| 68 69 6e 67 20 62 65 66 | 6f 72 65 20 74 68 69 73 |hing bef|ore this|
|000001d0| 20 6c 69 6e 65 2c 20 74 | 68 65 6e 20 75 6e 70 61 | line, t|hen unpa|
|000001e0| 63 6b 0a 23 20 69 74 20 | 62 79 20 73 61 76 69 6e |ck.# it |by savin|
|000001f0| 67 20 69 74 20 69 6e 74 | 6f 20 61 20 66 69 6c 65 |g it int|o a file|
|00000200| 20 61 6e 64 20 74 79 70 | 69 6e 67 20 22 73 68 20 | and typ|ing "sh |
|00000210| 66 69 6c 65 22 2e 20 20 | 54 6f 20 6f 76 65 72 77 |file". |To overw|
|00000220| 72 69 74 65 20 65 78 69 | 73 74 69 6e 67 0a 23 20 |rite exi|sting.# |
|00000230| 66 69 6c 65 73 2c 20 74 | 79 70 65 20 22 73 68 20 |files, t|ype "sh |
|00000240| 66 69 6c 65 20 2d 63 22 | 2e 20 20 59 6f 75 20 63 |file -c"|. You c|
|00000250| 61 6e 20 61 6c 73 6f 20 | 66 65 65 64 20 74 68 69 |an also |feed thi|
|00000260| 73 20 61 73 20 73 74 61 | 6e 64 61 72 64 20 69 6e |s as sta|ndard in|
|00000270| 70 75 74 20 76 69 61 0a | 23 20 75 6e 73 68 61 72 |put via.|# unshar|
|00000280| 2c 20 6f 72 20 62 79 20 | 74 79 70 69 6e 67 20 22 |, or by |typing "|
|00000290| 73 68 20 3c 66 69 6c 65 | 22 2c 20 65 2e 67 2e 2e |sh <file|", e.g..|
|000002a0| 20 20 49 66 20 74 68 69 | 73 20 61 72 63 68 69 76 | If thi|s archiv|
|000002b0| 65 20 69 73 20 63 6f 6d | 70 6c 65 74 65 2c 20 79 |e is com|plete, y|
|000002c0| 6f 75 0a 23 20 77 69 6c | 6c 20 73 65 65 20 74 68 |ou.# wil|l see th|
|000002d0| 65 20 66 6f 6c 6c 6f 77 | 69 6e 67 20 6d 65 73 73 |e follow|ing mess|
|000002e0| 61 67 65 20 61 74 20 74 | 68 65 20 65 6e 64 3a 0a |age at t|he end:.|
|000002f0| 23 09 09 22 45 6e 64 20 | 6f 66 20 61 72 63 68 69 |#.."End |of archi|
|00000300| 76 65 20 32 20 28 6f 66 | 20 34 29 2e 22 0a 23 20 |ve 2 (of| 4).".# |
|00000310| 43 6f 6e 74 65 6e 74 73 | 3a 20 20 6d 74 2d 72 65 |Contents|: mt-re|
|00000320| 61 64 2e 63 20 6d 74 68 | 72 65 61 64 73 2e 38 20 |ad.c mth|reads.8 |
|00000330| 6d 74 68 72 65 61 64 73 | 2e 63 20 70 61 72 73 65 |mthreads|.c parse|
|00000340| 64 61 74 65 2e 79 0a 23 | 20 57 72 61 70 70 65 64 |date.y.#| Wrapped|
|00000350| 20 62 79 20 76 69 78 69 | 65 40 67 77 2e 68 6f 6d | by vixi|e@gw.hom|
|00000360| 65 2e 76 69 78 2e 63 6f | 6d 20 6f 6e 20 53 75 6e |e.vix.co|m on Sun|
|00000370| 20 4e 6f 76 20 32 31 20 | 30 31 3a 31 32 3a 30 31 | Nov 21 |01:12:01|
|00000380| 20 31 39 39 33 0a 50 41 | 54 48 3d 2f 62 69 6e 3a | 1993.PA|TH=/bin:|
|00000390| 2f 75 73 72 2f 62 69 6e | 3a 2f 75 73 72 2f 75 63 |/usr/bin|:/usr/uc|
|000003a0| 62 20 3b 20 65 78 70 6f | 72 74 20 50 41 54 48 0a |b ; expo|rt PATH.|
|000003b0| 69 66 20 74 65 73 74 20 | 2d 66 20 27 6d 74 2d 72 |if test |-f 'mt-r|
|000003c0| 65 61 64 2e 63 27 20 2d | 61 20 22 24 7b 31 7d 22 |ead.c' -|a "${1}"|
|000003d0| 20 21 3d 20 22 2d 63 22 | 20 3b 20 74 68 65 6e 20 | != "-c"| ; then |
|000003e0| 0a 20 20 65 63 68 6f 20 | 73 68 61 72 3a 20 57 69 |. echo |shar: Wi|
|000003f0| 6c 6c 20 6e 6f 74 20 63 | 6c 6f 62 62 65 72 20 65 |ll not c|lobber e|
|00000400| 78 69 73 74 69 6e 67 20 | 66 69 6c 65 20 5c 22 27 |xisting |file \"'|
|00000410| 6d 74 2d 72 65 61 64 2e | 63 27 5c 22 0a 65 6c 73 |mt-read.|c'\".els|
|00000420| 65 0a 65 63 68 6f 20 73 | 68 61 72 3a 20 45 78 74 |e.echo s|har: Ext|
|00000430| 72 61 63 74 69 6e 67 20 | 5c 22 27 6d 74 2d 72 65 |racting |\"'mt-re|
|00000440| 61 64 2e 63 27 5c 22 20 | 5c 28 31 35 33 31 34 20 |ad.c'\" |\(15314 |
|00000450| 63 68 61 72 61 63 74 65 | 72 73 5c 29 0a 73 65 64 |characte|rs\).sed|
|00000460| 20 22 73 2f 5e 58 2f 2f | 22 20 3e 27 6d 74 2d 72 | "s/^X//|" >'mt-r|
|00000470| 65 61 64 2e 63 27 20 3c | 3c 27 45 4e 44 5f 4f 46 |ead.c' <|<'END_OF|
|00000480| 5f 46 49 4c 45 27 0a 58 | 2f 2a 20 24 49 64 3a 20 |_FILE'.X|/* $Id: |
|00000490| 6d 74 2d 72 65 61 64 2e | 63 2c 76 20 33 2e 30 20 |mt-read.|c,v 3.0 |
|000004a0| 31 39 39 32 2f 31 30 2f | 30 31 20 30 30 3a 31 34 |1992/10/|01 00:14|
|000004b0| 3a 30 34 20 64 61 76 69 | 73 6f 6e 20 54 72 6e 20 |:04 davi|son Trn |
|000004c0| 24 0a 58 2a 2f 0a 58 2f | 2a 20 54 68 65 20 61 75 |$.X*/.X/|* The au|
|000004d0| 74 68 6f 72 73 20 6d 61 | 6b 65 20 6e 6f 20 63 6c |thors ma|ke no cl|
|000004e0| 61 69 6d 73 20 61 73 20 | 74 6f 20 74 68 65 20 66 |aims as |to the f|
|000004f0| 69 74 6e 65 73 73 20 6f | 72 20 63 6f 72 72 65 63 |itness o|r correc|
|00000500| 74 6e 65 73 73 20 6f 66 | 20 74 68 69 73 20 73 6f |tness of| this so|
|00000510| 66 74 77 61 72 65 0a 58 | 20 2a 20 66 6f 72 20 61 |ftware.X| * for a|
|00000520| 6e 79 20 75 73 65 20 77 | 68 61 74 73 6f 65 76 65 |ny use w|hatsoeve|
|00000530| 72 2c 20 61 6e 64 20 69 | 74 20 69 73 20 70 72 6f |r, and i|t is pro|
|00000540| 76 69 64 65 64 20 61 73 | 20 69 73 2e 20 41 6e 79 |vided as| is. Any|
|00000550| 20 75 73 65 20 6f 66 20 | 74 68 69 73 20 73 6f 66 | use of |this sof|
|00000560| 74 77 61 72 65 0a 58 20 | 2a 20 69 73 20 61 74 20 |tware.X |* is at |
|00000570| 74 68 65 20 75 73 65 72 | 27 73 20 6f 77 6e 20 72 |the user|'s own r|
|00000580| 69 73 6b 2e 20 0a 58 20 | 2a 2f 0a 58 0a 58 23 69 |isk. .X |*/.X.X#i|
|00000590| 6e 63 6c 75 64 65 20 22 | 45 58 54 45 52 4e 2e 68 |nclude "|EXTERN.h|
|000005a0| 22 0a 58 23 69 6e 63 6c | 75 64 65 20 22 63 6f 6d |".X#incl|ude "com|
|000005b0| 6d 6f 6e 2e 68 22 0a 58 | 23 69 6e 63 6c 75 64 65 |mon.h".X|#include|
|000005c0| 20 22 74 68 72 65 61 64 | 2e 68 22 0a 58 23 69 6e | "thread|.h".X#in|
|000005d0| 63 6c 75 64 65 20 22 6d | 74 68 72 65 61 64 73 2e |clude "m|threads.|
|000005e0| 68 22 0a 58 0a 58 65 78 | 74 65 72 6e 20 6c 6f 6e |h".X.Xex|tern lon|
|000005f0| 67 20 66 69 72 73 74 3b | 0a 58 0a 58 73 74 61 74 |g first;|.X.Xstat|
|00000600| 69 63 20 46 49 4c 45 20 | 2a 66 70 5f 69 6e 3b 0a |ic FILE |*fp_in;.|
|00000610| 58 0a 58 69 6e 74 20 72 | 65 61 64 5f 61 75 74 68 |X.Xint r|ead_auth|
|00000620| 6f 72 73 20 5f 28 28 76 | 6f 69 64 29 29 3b 0a 58 |ors _((v|oid));.X|
|00000630| 69 6e 74 20 72 65 61 64 | 5f 73 75 62 6a 65 63 74 |int read|_subject|
|00000640| 73 20 5f 28 28 76 6f 69 | 64 29 29 3b 0a 58 69 6e |s _((voi|d));.Xin|
|00000650| 74 20 72 65 61 64 5f 72 | 6f 6f 74 73 20 5f 28 28 |t read_r|oots _((|
|00000660| 76 6f 69 64 29 29 3b 0a | 58 69 6e 74 20 72 65 61 |void));.|Xint rea|
|00000670| 64 5f 61 72 74 69 63 6c | 65 73 20 5f 28 28 76 6f |d_articl|es _((vo|
|00000680| 69 64 29 29 3b 0a 58 69 | 6e 74 20 72 65 61 64 5f |id));.Xi|nt read_|
|00000690| 69 64 73 20 5f 28 28 76 | 6f 69 64 29 29 3b 0a 58 |ids _((v|oid));.X|
|000006a0| 69 6e 74 20 72 65 61 64 | 5f 69 74 65 6d 20 5f 28 |int read|_item _(|
|000006b0| 28 63 68 61 72 20 2a 2a | 2c 20 4d 45 4d 5f 53 49 |(char **|, MEM_SI|
|000006c0| 5a 45 29 29 3b 0a 58 76 | 6f 69 64 20 74 77 65 61 |ZE));.Xv|oid twea|
|000006d0| 6b 5f 72 6f 6f 74 73 20 | 5f 28 28 76 6f 69 64 29 |k_roots |_((void)|
|000006e0| 29 3b 0a 58 0a 58 2f 2a | 20 41 74 74 65 6d 70 74 |);.X.X/*| Attempt|
|000006f0| 20 74 6f 20 6f 70 65 6e | 20 74 68 65 20 74 68 72 | to open| the thr|
|00000700| 65 61 64 20 66 69 6c 65 | 2e 20 20 49 66 20 69 74 |ead file|. If it|
|00000710| 27 73 20 74 68 65 72 65 | 2c 20 6f 6e 6c 79 20 67 |'s there|, only g|
|00000720| 72 61 62 20 74 68 65 20 | 74 6f 74 61 6c 73 0a 58 |rab the |totals.X|
|00000730| 2a 2a 20 66 72 6f 6d 20 | 74 68 65 20 73 74 61 72 |** from |the star|
|00000740| 74 20 6f 66 20 74 68 65 | 20 66 69 6c 65 2e 20 20 |t of the| file. |
|00000750| 54 68 69 73 20 73 68 6f | 75 6c 64 20 67 69 76 65 |This sho|uld give|
|00000760| 20 74 68 65 6d 20 65 6e | 6f 75 67 68 20 69 6e 66 | them en|ough inf|
|00000770| 6f 72 6d 61 74 69 6f 6e | 0a 58 2a 2a 20 74 6f 20 |ormation|.X** to |
|00000780| 64 65 63 69 64 65 20 69 | 66 20 74 68 65 79 20 6e |decide i|f they n|
|00000790| 65 65 64 20 74 6f 20 72 | 65 61 64 20 74 68 65 20 |eed to r|ead the |
|000007a0| 77 68 6f 6c 65 20 74 68 | 69 6e 67 20 69 6e 74 6f |whole th|ing into|
|000007b0| 20 6d 65 6d 6f 72 79 2e | 0a 58 2a 2f 0a 58 69 6e | memory.|.X*/.Xin|
|000007c0| 74 0a 58 69 6e 69 74 5f | 64 61 74 61 28 66 69 6c |t.Xinit_|data(fil|
|000007d0| 65 6e 61 6d 65 29 0a 58 | 63 68 61 72 20 2a 66 69 |ename).X|char *fi|
|000007e0| 6c 65 6e 61 6d 65 3b 0a | 58 7b 0a 58 20 20 20 20 |lename;.|X{.X |
|000007f0| 72 6f 6f 74 5f 72 6f 6f | 74 20 3d 20 4e 75 6c 6c |root_roo|t = Null|
|00000800| 28 52 4f 4f 54 2a 29 3b | 0a 58 20 20 20 20 61 75 |(ROOT*);|.X au|
|00000810| 74 68 6f 72 5f 72 6f 6f | 74 20 3d 20 4e 75 6c 6c |thor_roo|t = Null|
|00000820| 28 41 55 54 48 4f 52 2a | 29 3b 0a 58 20 20 20 20 |(AUTHOR*|);.X |
|00000830| 75 6e 6b 5f 64 6f 6d 61 | 69 6e 2e 69 64 73 20 3d |unk_doma|in.ids =|
|00000840| 20 4e 75 6c 6c 61 72 74 | 3b 0a 58 20 20 20 20 75 | Nullart|;.X u|
|00000850| 6e 6b 5f 64 6f 6d 61 69 | 6e 2e 6c 69 6e 6b 20 3d |nk_domai|n.link =|
|00000860| 20 4e 75 6c 6c 28 44 4f | 4d 41 49 4e 2a 29 3b 0a | Null(DO|MAIN*);.|
|00000870| 58 0a 58 20 20 20 20 69 | 66 20 28 66 69 6c 65 6e |X.X i|f (filen|
|00000880| 61 6d 65 20 26 26 20 28 | 66 70 5f 69 6e 20 3d 20 |ame && (|fp_in = |
|00000890| 66 6f 70 65 6e 28 66 69 | 6c 65 6e 61 6d 65 2c 20 |fopen(fi|lename, |
|000008a0| 46 4f 50 45 4e 5f 52 42 | 29 29 20 21 3d 20 4e 75 |FOPEN_RB|)) != Nu|
|000008b0| 6c 6c 66 70 29 20 7b 0a | 58 23 69 66 64 65 66 20 |llfp) {.|X#ifdef |
|000008c0| 53 45 54 42 55 46 46 45 | 52 0a 58 09 73 65 74 62 |SETBUFFE|R.X.setb|
|000008d0| 75 66 66 65 72 28 66 70 | 5f 69 6e 2c 20 72 77 62 |uffer(fp|_in, rwb|
|000008e0| 75 66 2c 20 52 57 42 55 | 46 53 49 5a 29 3b 0a 58 |uf, RWBU|FSIZ);.X|
|000008f0| 23 65 6c 73 65 0a 58 23 | 20 69 66 64 65 66 20 53 |#else.X#| ifdef S|
|00000900| 45 54 56 42 55 46 0a 58 | 09 73 65 74 76 62 75 66 |ETVBUF.X|.setvbuf|
|00000910| 28 66 70 5f 69 6e 2c 20 | 72 77 62 75 66 2c 20 5f |(fp_in, |rwbuf, _|
|00000920| 49 4f 46 42 46 2c 20 52 | 57 42 55 46 53 49 5a 29 |IOFBF, R|WBUFSIZ)|
|00000930| 3b 0a 58 23 20 65 6e 64 | 69 66 0a 58 23 65 6e 64 |;.X# end|if.X#end|
|00000940| 69 66 0a 58 09 69 66 20 | 28 66 72 65 61 64 28 28 |if.X.if |(fread((|
|00000950| 63 68 61 72 2a 29 26 74 | 6f 74 61 6c 2c 31 2c 73 |char*)&t|otal,1,s|
|00000960| 69 7a 65 6f 66 20 28 54 | 4f 54 41 4c 29 2c 66 70 |izeof (T|OTAL),fp|
|00000970| 5f 69 6e 29 20 3d 3d 20 | 73 69 7a 65 6f 66 20 28 |_in) == |sizeof (|
|00000980| 54 4f 54 41 4c 29 29 20 | 7b 0a 58 09 20 20 20 20 |TOTAL)) |{.X. |
|00000990| 2f 2a 20 49 66 20 74 68 | 65 20 64 61 74 61 20 6c |/* If th|e data l|
|000009a0| 6f 6f 6b 73 20 6f 6b 2c | 20 72 65 74 75 72 6e 20 |ooks ok,| return |
|000009b0| 73 75 63 63 65 73 73 2e | 20 2a 2f 0a 58 09 20 20 |success.| */.X. |
|000009c0| 20 20 69 66 20 28 74 6f | 74 61 6c 2e 6c 61 73 74 | if (to|tal.last|
|000009d0| 20 2d 20 74 6f 74 61 6c | 2e 66 69 72 73 74 20 3e | - total|.first >|
|000009e0| 3d 20 30 20 26 26 20 74 | 6f 74 61 6c 2e 61 75 74 |= 0 && t|otal.aut|
|000009f0| 68 6f 72 20 3e 20 30 0a | 58 09 20 20 20 20 20 26 |hor > 0.|X. &|
|00000a00| 26 20 74 6f 74 61 6c 2e | 61 72 74 69 63 6c 65 20 |& total.|article |
|00000a10| 3e 20 30 20 26 26 20 74 | 6f 74 61 6c 2e 73 75 62 |> 0 && t|otal.sub|
|00000a20| 6a 65 63 74 20 3e 20 30 | 20 26 26 20 74 6f 74 61 |ject > 0| && tota|
|00000a30| 6c 2e 64 6f 6d 61 69 6e | 20 3e 20 30 0a 58 09 20 |l.domain| > 0.X. |
|00000a40| 20 20 20 20 26 26 20 74 | 6f 74 61 6c 2e 73 75 62 | && t|otal.sub|
|00000a50| 6a 65 63 74 20 3c 3d 20 | 74 6f 74 61 6c 2e 61 72 |ject <= |total.ar|
|00000a60| 74 69 63 6c 65 20 26 26 | 20 74 6f 74 61 6c 2e 61 |ticle &&| total.a|
|00000a70| 75 74 68 6f 72 20 3c 3d | 20 74 6f 74 61 6c 2e 61 |uthor <=| total.a|
|00000a80| 72 74 69 63 6c 65 0a 58 | 09 20 20 20 20 20 26 26 |rticle.X|. &&|
|00000a90| 20 74 6f 74 61 6c 2e 72 | 6f 6f 74 20 3c 3d 20 74 | total.r|oot <= t|
|00000aa0| 6f 74 61 6c 2e 61 72 74 | 69 63 6c 65 20 26 26 20 |otal.art|icle && |
|00000ab0| 74 6f 74 61 6c 2e 64 6f | 6d 61 69 6e 20 3c 3d 20 |total.do|main <= |
|00000ac0| 74 6f 74 61 6c 2e 61 72 | 74 69 63 6c 65 0a 58 09 |total.ar|ticle.X.|
|00000ad0| 20 20 20 20 20 26 26 20 | 74 6f 74 61 6c 2e 73 74 | && |total.st|
|00000ae0| 72 69 6e 67 31 20 3e 20 | 30 20 26 26 20 74 6f 74 |ring1 > |0 && tot|
|00000af0| 61 6c 2e 73 74 72 69 6e | 67 32 20 3e 20 30 29 20 |al.strin|g2 > 0) |
|00000b00| 7b 0a 58 09 09 72 65 74 | 75 72 6e 20 31 3b 0a 58 |{.X..ret|urn 1;.X|
|00000b10| 09 20 20 20 20 7d 0a 58 | 09 7d 0a 58 09 62 7a 65 |. }.X|.}.X.bze|
|00000b20| 72 6f 28 26 74 6f 74 61 | 6c 2c 20 73 69 7a 65 6f |ro(&tota|l, sizeo|
|00000b30| 66 20 28 54 4f 54 41 4c | 29 29 3b 0a 58 09 74 6f |f (TOTAL|));.X.to|
|00000b40| 74 61 6c 2e 66 69 72 73 | 74 20 3d 20 66 69 72 73 |tal.firs|t = firs|
|00000b50| 74 3b 0a 58 09 74 6f 74 | 61 6c 2e 6c 61 73 74 20 |t;.X.tot|al.last |
|00000b60| 3d 20 66 69 72 73 74 20 | 2d 20 31 3b 0a 58 09 72 |= first |- 1;.X.r|
|00000b70| 65 74 75 72 6e 20 31 3b | 0a 58 20 20 20 20 7d 0a |eturn 1;|.X }.|
|00000b80| 58 20 20 20 20 62 7a 65 | 72 6f 28 26 74 6f 74 61 |X bze|ro(&tota|
|00000b90| 6c 2c 20 73 69 7a 65 6f | 66 20 28 54 4f 54 41 4c |l, sizeo|f (TOTAL|
|00000ba0| 29 29 3b 0a 58 20 20 20 | 20 72 65 74 75 72 6e 20 |));.X | return |
|00000bb0| 30 3b 0a 58 7d 0a 58 0a | 58 2f 2a 20 54 68 65 79 |0;.X}.X.|X/* They|
|00000bc0| 20 77 61 6e 74 20 65 76 | 65 72 79 74 68 69 6e 67 | want ev|erything|
|00000bd0| 2e 20 20 52 65 61 64 20 | 69 6e 20 74 68 65 20 70 |. Read |in the p|
|00000be0| 61 63 6b 65 64 20 69 6e | 66 6f 72 6d 61 74 69 6f |acked in|formatio|
|00000bf0| 6e 20 61 6e 64 20 74 72 | 61 6e 73 66 6f 72 6d 20 |n and tr|ansform |
|00000c00| 69 74 0a 58 2a 2a 20 69 | 6e 74 6f 20 61 20 73 65 |it.X** i|nto a se|
|00000c10| 74 20 6f 66 20 6c 69 6e | 6b 65 64 20 73 74 72 75 |t of lin|ked stru|
|00000c20| 63 74 75 72 65 73 20 74 | 68 61 74 20 69 73 20 65 |ctures t|hat is e|
|00000c30| 61 73 69 6c 79 20 6d 61 | 6e 69 70 75 6c 61 74 65 |asily ma|nipulate|
|00000c40| 64 2e 0a 58 2a 2f 0a 58 | 69 6e 74 0a 58 72 65 61 |d..X*/.X|int.Xrea|
|00000c50| 64 5f 64 61 74 61 28 29 | 0a 58 7b 0a 58 20 20 20 |d_data()|.X{.X |
|00000c60| 20 2f 2a 20 49 66 20 74 | 68 69 73 20 69 73 20 61 | /* If t|his is a|
|00000c70| 6e 20 65 6d 70 74 79 20 | 74 68 72 65 61 64 20 66 |n empty |thread f|
|00000c80| 69 6c 65 2c 20 73 69 6d | 70 6c 79 20 72 65 74 75 |ile, sim|ply retu|
|00000c90| 72 6e 20 73 75 63 63 65 | 73 73 2e 20 2a 2f 0a 58 |rn succe|ss. */.X|
|00000ca0| 20 20 20 20 69 66 20 28 | 21 74 6f 74 61 6c 2e 72 | if (|!total.r|
|00000cb0| 6f 6f 74 29 20 7b 0a 58 | 09 66 63 6c 6f 73 65 28 |oot) {.X|.fclose(|
|00000cc0| 66 70 5f 69 6e 29 3b 0a | 58 09 72 65 74 75 72 6e |fp_in);.|X.return|
|00000cd0| 20 31 3b 0a 58 20 20 20 | 20 7d 0a 58 0a 58 20 20 | 1;.X | }.X.X |
|00000ce0| 20 20 69 66 20 28 72 65 | 61 64 5f 61 75 74 68 6f | if (re|ad_autho|
|00000cf0| 72 73 28 29 0a 58 20 20 | 20 20 20 26 26 20 72 65 |rs().X | && re|
|00000d00| 61 64 5f 73 75 62 6a 65 | 63 74 73 28 29 0a 58 20 |ad_subje|cts().X |
|00000d10| 20 20 20 20 26 26 20 72 | 65 61 64 5f 72 6f 6f 74 | && r|ead_root|
|00000d20| 73 28 29 0a 58 20 20 20 | 20 20 26 26 20 72 65 61 |s().X | && rea|
|00000d30| 64 5f 61 72 74 69 63 6c | 65 73 28 29 0a 58 20 20 |d_articl|es().X |
|00000d40| 20 20 20 26 26 20 72 65 | 61 64 5f 69 64 73 28 29 | && re|ad_ids()|
|00000d50| 29 0a 58 20 20 20 20 7b | 0a 58 09 74 77 65 61 6b |).X {|.X.tweak|
|00000d60| 5f 72 6f 6f 74 73 28 29 | 3b 0a 58 09 66 63 6c 6f |_roots()|;.X.fclo|
|00000d70| 73 65 28 66 70 5f 69 6e | 29 3b 0a 58 09 72 65 74 |se(fp_in|);.X.ret|
|00000d80| 75 72 6e 20 31 3b 0a 58 | 20 20 20 20 7d 0a 58 20 |urn 1;.X| }.X |
|00000d90| 20 20 20 2f 2a 20 53 6f | 6d 65 74 68 69 6e 67 20 | /* So|mething |
|00000da0| 66 61 69 6c 65 64 2e 20 | 20 53 61 66 65 66 72 65 |failed. | Safefre|
|00000db0| 65 20 74 61 6b 65 73 20 | 63 61 72 65 20 6f 66 20 |e takes |care of |
|00000dc0| 63 68 65 63 6b 69 6e 67 | 20 69 66 20 73 6f 6d 65 |checking| if some|
|00000dd0| 20 69 74 65 6d 73 0a 58 | 20 20 20 20 2a 2a 20 77 | items.X| ** w|
|00000de0| 65 72 65 20 61 6c 72 65 | 61 64 79 20 66 72 65 65 |ere alre|ady free|
|00000df0| 64 2e 20 20 41 6e 79 20 | 70 61 72 74 69 61 6c 6c |d. Any |partiall|
|00000e00| 79 2d 61 6c 6c 6f 63 61 | 74 65 64 20 73 74 72 75 |y-alloca|ted stru|
|00000e10| 63 74 75 72 65 73 20 77 | 65 72 65 20 66 72 65 65 |ctures w|ere free|
|00000e20| 64 0a 58 20 20 20 20 2a | 2a 20 62 65 66 6f 72 65 |d.X *|* before|
|00000e30| 20 77 65 20 67 6f 74 20 | 68 65 72 65 2e 20 20 41 | we got |here. A|
|00000e40| 6c 6c 20 6f 74 68 65 72 | 20 73 74 72 75 63 74 75 |ll other| structu|
|00000e50| 72 65 73 20 61 72 65 20 | 63 6c 65 61 6e 65 64 20 |res are |cleaned |
|00000e60| 75 70 2e 0a 58 20 20 20 | 20 2a 2f 0a 58 20 20 20 |up..X | */.X |
|00000e70| 20 69 66 20 28 72 6f 6f | 74 5f 72 6f 6f 74 29 20 | if (roo|t_root) |
|00000e80| 7b 0a 58 09 72 65 67 69 | 73 74 65 72 20 52 4f 4f |{.X.regi|ster ROO|
|00000e90| 54 20 2a 72 6f 6f 74 2c | 20 2a 6e 65 78 74 5f 72 |T *root,| *next_r|
|00000ea0| 6f 6f 74 3b 0a 58 09 72 | 65 67 69 73 74 65 72 20 |oot;.X.r|egister |
|00000eb0| 53 55 42 4a 45 43 54 20 | 2a 73 75 62 6a 2c 20 2a |SUBJECT |*subj, *|
|00000ec0| 6e 65 78 74 5f 73 75 62 | 6a 3b 0a 58 0a 58 09 66 |next_sub|j;.X.X.f|
|00000ed0| 6f 72 20 28 72 6f 6f 74 | 20 3d 20 72 6f 6f 74 5f |or (root| = root_|
|00000ee0| 72 6f 6f 74 3b 20 72 6f | 6f 74 3b 20 72 6f 6f 74 |root; ro|ot; root|
|00000ef0| 20 3d 20 6e 65 78 74 5f | 72 6f 6f 74 29 20 7b 0a | = next_|root) {.|
|00000f00| 58 09 20 20 20 20 66 6f | 72 20 28 73 75 62 6a 20 |X. fo|r (subj |
|00000f10| 3d 20 72 6f 6f 74 2d 3e | 73 75 62 6a 65 63 74 73 |= root->|subjects|
|00000f20| 3b 20 73 75 62 6a 3b 20 | 73 75 62 6a 20 3d 20 6e |; subj; |subj = n|
|00000f30| 65 78 74 5f 73 75 62 6a | 29 20 7b 0a 58 09 09 6e |ext_subj|) {.X..n|
|00000f40| 65 78 74 5f 73 75 62 6a | 20 3d 20 73 75 62 6a 2d |ext_subj| = subj-|
|00000f50| 3e 6c 69 6e 6b 3b 0a 58 | 09 09 66 72 65 65 28 73 |>link;.X|..free(s|
|00000f60| 75 62 6a 2d 3e 73 74 72 | 29 3b 0a 58 09 09 66 72 |ubj->str|);.X..fr|
|00000f70| 65 65 28 73 75 62 6a 29 | 3b 0a 58 09 20 20 20 20 |ee(subj)|;.X. |
|00000f80| 7d 0a 58 09 20 20 20 20 | 6e 65 78 74 5f 72 6f 6f |}.X. |next_roo|
|00000f90| 74 20 3d 20 72 6f 6f 74 | 2d 3e 6c 69 6e 6b 3b 0a |t = root|->link;.|
|00000fa0| 58 09 20 20 20 20 66 72 | 65 65 28 72 6f 6f 74 29 |X. fr|ee(root)|
|00000fb0| 3b 0a 58 09 7d 0a 58 09 | 72 6f 6f 74 5f 72 6f 6f |;.X.}.X.|root_roo|
|00000fc0| 74 20 3d 20 4e 75 6c 6c | 28 52 4f 4f 54 2a 29 3b |t = Null|(ROOT*);|
|00000fd0| 0a 58 20 20 20 20 7d 0a | 58 20 20 20 20 69 66 20 |.X }.|X if |
|00000fe0| 28 61 75 74 68 6f 72 5f | 61 72 72 61 79 29 20 7b |(author_|array) {|
|00000ff0| 0a 58 09 72 65 67 69 73 | 74 65 72 20 69 6e 74 20 |.X.regis|ter int |
|00001000| 63 6f 75 6e 74 3b 0a 58 | 0a 58 09 66 6f 72 20 28 |count;.X|.X.for (|
|00001010| 63 6f 75 6e 74 20 3d 20 | 74 6f 74 61 6c 2e 61 75 |count = |total.au|
|00001020| 74 68 6f 72 3b 20 63 6f | 75 6e 74 2d 2d 3b 29 20 |thor; co|unt--;) |
|00001030| 7b 0a 58 09 20 20 20 20 | 66 72 65 65 28 61 75 74 |{.X. |free(aut|
|00001040| 68 6f 72 5f 61 72 72 61 | 79 5b 63 6f 75 6e 74 5d |hor_arra|y[count]|
|00001050| 2d 3e 6e 61 6d 65 29 3b | 0a 58 09 20 20 20 20 66 |->name);|.X. f|
|00001060| 72 65 65 28 61 75 74 68 | 6f 72 5f 61 72 72 61 79 |ree(auth|or_array|
|00001070| 5b 63 6f 75 6e 74 5d 29 | 3b 0a 58 09 7d 0a 58 09 |[count])|;.X.}.X.|
|00001080| 73 61 66 65 66 72 65 65 | 28 26 61 75 74 68 6f 72 |safefree|(&author|
|00001090| 5f 61 72 72 61 79 29 3b | 0a 58 09 61 75 74 68 6f |_array);|.X.autho|
|000010a0| 72 5f 72 6f 6f 74 20 3d | 20 4e 75 6c 6c 28 41 55 |r_root =| Null(AU|
|000010b0| 54 48 4f 52 2a 29 3b 0a | 58 20 20 20 20 7d 0a 58 |THOR*);.|X }.X|
|000010c0| 20 20 20 20 69 66 20 28 | 61 72 74 69 63 6c 65 5f | if (|article_|
|000010d0| 61 72 72 61 79 29 20 7b | 0a 58 09 72 65 67 69 73 |array) {|.X.regis|
|000010e0| 74 65 72 20 69 6e 74 20 | 63 6f 75 6e 74 3b 0a 58 |ter int |count;.X|
|000010f0| 0a 58 09 66 6f 72 20 28 | 63 6f 75 6e 74 20 3d 20 |.X.for (|count = |
|00001100| 74 6f 74 61 6c 2e 61 72 | 74 69 63 6c 65 3b 20 63 |total.ar|ticle; c|
|00001110| 6f 75 6e 74 2d 2d 3b 29 | 20 7b 0a 58 09 20 20 20 |ount--;)| {.X. |
|00001120| 20 66 72 65 65 28 61 72 | 74 69 63 6c 65 5f 61 72 | free(ar|ticle_ar|
|00001130| 72 61 79 5b 63 6f 75 6e | 74 5d 29 3b 0a 58 09 7d |ray[coun|t]);.X.}|
|00001140| 0a 58 09 73 61 66 65 66 | 72 65 65 28 26 61 72 74 |.X.safef|ree(&art|
|00001150| 69 63 6c 65 5f 61 72 72 | 61 79 29 3b 0a 58 20 20 |icle_arr|ay);.X |
|00001160| 20 20 7d 0a 58 20 20 20 | 20 73 61 66 65 66 72 65 | }.X | safefre|
|00001170| 65 28 26 73 74 72 69 6e | 67 73 29 3b 0a 58 20 20 |e(&strin|gs);.X |
|00001180| 20 20 73 61 66 65 66 72 | 65 65 28 26 73 75 62 6a | safefr|ee(&subj|
|00001190| 65 63 74 5f 63 6e 74 73 | 29 3b 0a 58 20 20 20 20 |ect_cnts|);.X |
|000011a0| 73 61 66 65 66 72 65 65 | 28 26 73 75 62 6a 65 63 |safefree|(&subjec|
|000011b0| 74 5f 61 72 72 61 79 29 | 3b 0a 58 20 20 20 20 73 |t_array)|;.X s|
|000011c0| 61 66 65 66 72 65 65 28 | 26 61 75 74 68 6f 72 5f |afefree(|&author_|
|000011d0| 63 6e 74 73 29 3b 0a 58 | 20 20 20 20 73 61 66 65 |cnts);.X| safe|
|000011e0| 66 72 65 65 28 26 72 6f | 6f 74 5f 61 72 72 61 79 |free(&ro|ot_array|
|000011f0| 29 3b 0a 58 20 20 20 20 | 73 61 66 65 66 72 65 65 |);.X |safefree|
|00001200| 28 26 69 64 73 29 3b 0a | 58 20 20 20 20 75 6e 6b |(&ids);.|X unk|
|00001210| 5f 64 6f 6d 61 69 6e 2e | 69 64 73 20 3d 20 4e 75 |_domain.|ids = Nu|
|00001220| 6c 6c 61 72 74 3b 0a 58 | 20 20 20 20 75 6e 6b 5f |llart;.X| unk_|
|00001230| 64 6f 6d 61 69 6e 2e 6c | 69 6e 6b 20 3d 20 4e 75 |domain.l|ink = Nu|
|00001240| 6c 6c 28 44 4f 4d 41 49 | 4e 2a 29 3b 0a 58 20 20 |ll(DOMAI|N*);.X |
|00001250| 20 20 66 63 6c 6f 73 65 | 28 66 70 5f 69 6e 29 3b | fclose|(fp_in);|
|00001260| 0a 58 20 20 20 20 72 65 | 74 75 72 6e 20 30 3b 0a |.X re|turn 0;.|
|00001270| 58 7d 0a 58 0a 58 2f 2a | 20 54 68 65 79 20 64 6f |X}.X.X/*| They do|
|00001280| 6e 27 74 20 77 61 6e 74 | 20 74 6f 20 72 65 61 64 |n't want| to read|
|00001290| 20 74 68 65 20 64 61 74 | 61 2e 20 20 43 6c 6f 73 | the dat|a. Clos|
|000012a0| 65 20 74 68 65 20 66 69 | 6c 65 20 69 66 20 77 65 |e the fi|le if we|
|000012b0| 20 6f 70 65 6e 65 64 20 | 69 74 2e 0a 58 2a 2f 0a | opened |it..X*/.|
|000012c0| 58 76 6f 69 64 0a 58 64 | 6f 6e 74 5f 72 65 61 64 |Xvoid.Xd|ont_read|
|000012d0| 5f 64 61 74 61 28 6f 70 | 65 6e 5f 66 6c 61 67 29 |_data(op|en_flag)|
|000012e0| 0a 58 69 6e 74 20 6f 70 | 65 6e 5f 66 6c 61 67 3b |.Xint op|en_flag;|
|000012f0| 09 09 2f 2a 20 30 20 3d | 3d 20 6e 6f 74 20 6f 70 |../* 0 =|= not op|
|00001300| 65 6e 65 64 2c 20 31 20 | 3d 3d 20 6f 70 65 6e 20 |ened, 1 |== open |
|00001310| 66 61 69 6c 65 64 2c 20 | 32 20 3d 3d 20 6f 70 65 |failed, |2 == ope|
|00001320| 6e 20 2a 2f 0a 58 7b 0a | 58 20 20 20 20 69 66 20 |n */.X{.|X if |
|00001330| 28 6f 70 65 6e 5f 66 6c | 61 67 20 3d 3d 20 32 29 |(open_fl|ag == 2)|
|00001340| 20 7b 0a 58 09 66 63 6c | 6f 73 65 28 66 70 5f 69 | {.X.fcl|ose(fp_i|
|00001350| 6e 29 3b 0a 58 09 62 7a | 65 72 6f 28 26 74 6f 74 |n);.X.bz|ero(&tot|
|00001360| 61 6c 2c 20 73 69 7a 65 | 6f 66 20 28 54 4f 54 41 |al, size|of (TOTA|
|00001370| 4c 29 29 3b 0a 58 20 20 | 20 20 7d 0a 58 7d 0a 58 |L));.X | }.X}.X|
|00001380| 0a 58 23 64 65 66 69 6e | 65 20 67 69 76 65 5f 73 |.X#defin|e give_s|
|00001390| 74 72 69 6e 67 5f 74 6f | 28 64 65 73 74 29 09 2f |tring_to|(dest)./|
|000013a0| 2a 20 43 6f 6d 6d 65 6e | 74 20 66 6f 72 20 6d 61 |* Commen|t for ma|
|000013b0| 6b 65 64 65 70 65 6e 64 | 20 74 6f 09 20 5c 0a 58 |kedepend| to. \.X|
|000013c0| 09 09 09 09 2a 2a 20 69 | 67 6e 6f 72 65 20 74 68 |....** i|gnore th|
|000013d0| 65 20 62 61 63 6b 73 6c | 61 73 68 20 61 62 6f 76 |e backsl|ash abov|
|000013e0| 65 20 2a 2f 20 5c 0a 58 | 7b 5c 0a 58 20 20 20 20 |e */ \.X|{\.X |
|000013f0| 72 65 67 69 73 74 65 72 | 20 4d 45 4d 5f 53 49 5a |register| MEM_SIZ|
|00001400| 45 20 6c 65 6e 20 3d 20 | 73 74 72 6c 65 6e 28 73 |E len = |strlen(s|
|00001410| 74 72 69 6e 67 5f 70 74 | 72 29 20 2b 20 31 3b 5c |tring_pt|r) + 1;\|
|00001420| 0a 58 20 20 20 20 64 65 | 73 74 20 3d 20 73 61 66 |.X de|st = saf|
|00001430| 65 6d 61 6c 6c 6f 63 28 | 6c 65 6e 29 3b 5c 0a 58 |emalloc(|len);\.X|
|00001440| 20 20 20 20 62 63 6f 70 | 79 28 73 74 72 69 6e 67 | bcop|y(string|
|00001450| 5f 70 74 72 2c 20 64 65 | 73 74 2c 20 28 69 6e 74 |_ptr, de|st, (int|
|00001460| 29 6c 65 6e 29 3b 5c 0a | 58 20 20 20 20 73 74 72 |)len);\.|X str|
|00001470| 69 6e 67 5f 70 74 72 20 | 2b 3d 20 6c 65 6e 3b 5c |ing_ptr |+= len;\|
|00001480| 0a 58 7d 0a 58 0a 58 63 | 68 61 72 20 2a 73 75 62 |.X}.X.Xc|har *sub|
|00001490| 6a 65 63 74 5f 73 74 72 | 69 6e 67 73 2c 20 2a 73 |ject_str|ings, *s|
|000014a0| 74 72 69 6e 67 5f 65 6e | 64 3b 0a 58 0a 58 2f 2a |tring_en|d;.X.X/*|
|000014b0| 20 54 68 65 20 61 75 74 | 68 6f 72 20 69 6e 66 6f | The aut|hor info|
|000014c0| 72 6d 61 74 69 6f 6e 20 | 69 73 20 61 6e 20 61 72 |rmation |is an ar|
|000014d0| 72 61 79 20 6f 66 20 75 | 73 65 2d 63 6f 75 6e 74 |ray of u|se-count|
|000014e0| 73 2c 20 66 6f 6c 6c 6f | 77 65 64 20 62 79 20 61 |s, follo|wed by a|
|000014f0| 6c 6c 20 74 68 65 0a 58 | 2a 2a 20 6e 75 6c 6c 2d |ll the.X|** null-|
|00001500| 74 65 72 6d 69 6e 61 74 | 65 64 20 73 74 72 69 6e |terminat|ed strin|
|00001510| 67 73 20 63 72 61 6d 6d | 65 64 20 74 6f 67 65 74 |gs cramm|ed toget|
|00001520| 68 65 72 2e 20 20 54 68 | 65 20 73 75 62 6a 65 63 |her. Th|e subjec|
|00001530| 74 20 73 74 72 69 6e 67 | 73 20 61 72 65 20 72 65 |t string|s are re|
|00001540| 61 64 0a 58 2a 2a 20 69 | 6e 20 61 74 20 74 68 65 |ad.X** i|n at the|
|00001550| 20 73 61 6d 65 20 74 69 | 6d 65 2c 20 73 69 6e 63 | same ti|me, sinc|
|00001560| 65 20 74 68 65 79 20 61 | 72 65 20 61 70 70 65 6e |e they a|re appen|
|00001570| 64 65 64 20 74 6f 20 74 | 68 65 20 65 6e 64 20 6f |ded to t|he end o|
|00001580| 66 20 74 68 65 20 61 75 | 74 68 6f 72 0a 58 2a 2a |f the au|thor.X**|
|00001590| 20 73 74 72 69 6e 67 73 | 2e 0a 58 2a 2f 0a 58 69 | strings|..X*/.Xi|
|000015a0| 6e 74 0a 58 72 65 61 64 | 5f 61 75 74 68 6f 72 73 |nt.Xread|_authors|
|000015b0| 28 29 0a 58 7b 0a 58 20 | 20 20 20 72 65 67 69 73 |().X{.X | regis|
|000015c0| 74 65 72 20 69 6e 74 20 | 63 6f 75 6e 74 2c 20 61 |ter int |count, a|
|000015d0| 75 74 68 6f 72 5f 74 61 | 6c 6c 79 3b 0a 58 20 20 |uthor_ta|lly;.X |
|000015e0| 20 20 72 65 67 69 73 74 | 65 72 20 63 68 61 72 20 | regist|er char |
|000015f0| 2a 73 74 72 69 6e 67 5f | 70 74 72 3b 0a 58 20 20 |*string_|ptr;.X |
|00001600| 20 20 72 65 67 69 73 74 | 65 72 20 57 4f 52 44 20 | regist|er WORD |
|00001610| 2a 61 75 74 68 70 3b 0a | 58 20 20 20 20 72 65 67 |*authp;.|X reg|
|00001620| 69 73 74 65 72 20 41 55 | 54 48 4f 52 20 2a 61 75 |ister AU|THOR *au|
|00001630| 74 68 6f 72 2c 20 2a 6c | 61 73 74 5f 61 75 74 68 |thor, *l|ast_auth|
|00001640| 6f 72 2c 20 2a 2a 61 75 | 74 68 6f 72 5f 70 74 72 |or, **au|thor_ptr|
|00001650| 3b 0a 58 0a 58 20 20 20 | 20 69 66 20 28 21 72 65 |;.X.X | if (!re|
|00001660| 61 64 5f 69 74 65 6d 28 | 28 63 68 61 72 20 2a 2a |ad_item(|(char **|
|00001670| 29 26 61 75 74 68 6f 72 | 5f 63 6e 74 73 2c 0a 58 |)&author|_cnts,.X|
|00001680| 09 09 20 20 20 28 4d 45 | 4d 5f 53 49 5a 45 29 28 |.. (ME|M_SIZE)(|
|00001690| 74 6f 74 61 6c 2e 61 75 | 74 68 6f 72 20 2a 20 73 |total.au|thor * s|
|000016a0| 69 7a 65 6f 66 20 28 57 | 4f 52 44 29 29 29 0a 58 |izeof (W|ORD))).X|
|000016b0| 20 20 20 20 20 7c 7c 20 | 21 72 65 61 64 5f 69 74 | || |!read_it|
|000016c0| 65 6d 28 28 63 68 61 72 | 20 2a 2a 29 26 73 74 72 |em((char| **)&str|
|000016d0| 69 6e 67 73 2c 20 74 6f | 74 61 6c 2e 73 74 72 69 |ings, to|tal.stri|
|000016e0| 6e 67 31 29 29 20 7b 0a | 58 09 2f 2a 20 28 45 72 |ng1)) {.|X./* (Er|
|000016f0| 72 6f 72 20 61 6c 72 65 | 61 64 79 20 6c 6f 67 67 |ror alre|ady logg|
|00001700| 65 64 2e 29 20 2a 2f 0a | 58 09 72 65 74 75 72 6e |ed.) */.|X.return|
|00001710| 20 30 3b 0a 58 20 20 20 | 20 7d 0a 58 0a 58 20 20 | 0;.X | }.X.X |
|00001720| 20 20 73 74 72 69 6e 67 | 5f 70 74 72 20 3d 20 73 | string|_ptr = s|
|00001730| 74 72 69 6e 67 73 3b 0a | 58 20 20 20 20 73 74 72 |trings;.|X str|
|00001740| 69 6e 67 5f 65 6e 64 20 | 3d 20 73 74 72 69 6e 67 |ing_end |= string|
|00001750| 5f 70 74 72 20 2b 20 74 | 6f 74 61 6c 2e 73 74 72 |_ptr + t|otal.str|
|00001760| 69 6e 67 31 3b 0a 58 20 | 20 20 20 69 66 20 28 73 |ing1;.X | if (s|
|00001770| 74 72 69 6e 67 5f 65 6e | 64 5b 2d 31 5d 20 21 3d |tring_en|d[-1] !=|
|00001780| 20 27 5c 30 27 29 20 7b | 0a 58 09 6c 6f 67 5f 65 | '\0') {|.X.log_e|
|00001790| 72 72 6f 72 28 22 66 69 | 72 73 74 20 73 74 72 69 |rror("fi|rst stri|
|000017a0| 6e 67 20 74 61 62 6c 65 | 20 69 73 20 69 6e 76 61 |ng table| is inva|
|000017b0| 6c 69 64 2e 5c 6e 22 29 | 3b 0a 58 09 72 65 74 75 |lid.\n")|;.X.retu|
|000017c0| 72 6e 20 30 3b 0a 58 20 | 20 20 20 7d 0a 58 0a 58 |rn 0;.X | }.X.X|
|000017d0| 20 20 20 20 2f 2a 20 57 | 65 27 6c 6c 20 75 73 65 | /* W|e'll use|
|000017e0| 20 74 68 69 73 20 61 72 | 72 61 79 20 74 6f 20 70 | this ar|ray to p|
|000017f0| 6f 69 6e 74 20 65 61 63 | 68 20 61 72 74 69 63 6c |oint eac|h articl|
|00001800| 65 20 61 74 20 69 74 73 | 20 70 72 6f 70 65 72 20 |e at its| proper |
|00001810| 61 75 74 68 6f 72 0a 58 | 20 20 20 20 2a 2a 20 28 |author.X| ** (|
|00001820| 70 61 63 6b 65 64 20 76 | 61 6c 75 65 73 20 61 72 |packed v|alues ar|
|00001830| 65 20 73 61 76 65 64 20 | 61 73 20 69 6e 64 65 78 |e saved |as index|
|00001840| 65 73 29 2e 0a 58 20 20 | 20 20 2a 2f 0a 58 20 20 |es)..X | */.X |
|00001850| 20 20 61 75 74 68 6f 72 | 5f 61 72 72 61 79 20 3d | author|_array =|
|00001860| 20 28 41 55 54 48 4f 52 | 2a 2a 29 73 61 66 65 6d | (AUTHOR|**)safem|
|00001870| 61 6c 6c 6f 63 28 74 6f | 74 61 6c 2e 61 75 74 68 |alloc(to|tal.auth|
|00001880| 6f 72 20 2a 20 73 69 7a | 65 6f 66 20 28 41 55 54 |or * siz|eof (AUT|
|00001890| 48 4f 52 2a 29 29 3b 0a | 58 20 20 20 20 61 75 74 |HOR*));.|X aut|
|000018a0| 68 6f 72 5f 70 74 72 20 | 3d 20 61 75 74 68 6f 72 |hor_ptr |= author|
|000018b0| 5f 61 72 72 61 79 3b 0a | 58 0a 58 20 20 20 20 61 |_array;.|X.X a|
|000018c0| 75 74 68 70 20 3d 20 61 | 75 74 68 6f 72 5f 63 6e |uthp = a|uthor_cn|
|000018d0| 74 73 3b 0a 58 0a 58 20 | 20 20 20 61 75 74 68 6f |ts;.X.X | autho|
|000018e0| 72 5f 74 61 6c 6c 79 20 | 3d 20 30 3b 0a 58 23 69 |r_tally |= 0;.X#i|
|000018f0| 66 6e 64 65 66 20 6c 69 | 6e 74 0a 58 20 20 20 20 |fndef li|nt.X |
|00001900| 6c 61 73 74 5f 61 75 74 | 68 6f 72 20 3d 20 28 41 |last_aut|hor = (A|
|00001910| 55 54 48 4f 52 2a 29 26 | 61 75 74 68 6f 72 5f 72 |UTHOR*)&|author_r|
|00001920| 6f 6f 74 3b 0a 58 23 65 | 6c 73 65 0a 58 20 20 20 |oot;.X#e|lse.X |
|00001930| 20 6c 61 73 74 5f 61 75 | 74 68 6f 72 20 3d 20 4e | last_au|thor = N|
|00001940| 75 6c 6c 28 41 55 54 48 | 4f 52 2a 29 3b 0a 58 23 |ull(AUTH|OR*);.X#|
|00001950| 65 6e 64 69 66 0a 58 20 | 20 20 20 66 6f 72 20 28 |endif.X | for (|
|00001960| 63 6f 75 6e 74 20 3d 20 | 74 6f 74 61 6c 2e 61 75 |count = |total.au|
|00001970| 74 68 6f 72 3b 20 63 6f | 75 6e 74 3b 20 63 6f 75 |thor; co|unt; cou|
|00001980| 6e 74 2d 2d 29 20 7b 0a | 58 09 69 66 20 28 73 74 |nt--) {.|X.if (st|
|00001990| 72 69 6e 67 5f 70 74 72 | 20 3e 3d 20 73 74 72 69 |ring_ptr| >= stri|
|000019a0| 6e 67 5f 65 6e 64 29 20 | 7b 0a 58 09 20 20 20 20 |ng_end) |{.X. |
|000019b0| 62 72 65 61 6b 3b 0a 58 | 09 7d 0a 58 09 2a 61 75 |break;.X|.}.X.*au|
|000019c0| 74 68 6f 72 5f 70 74 72 | 2b 2b 20 3d 20 61 75 74 |thor_ptr|++ = aut|
|000019d0| 68 6f 72 20 3d 20 28 41 | 55 54 48 4f 52 2a 29 73 |hor = (A|UTHOR*)s|
|000019e0| 61 66 65 6d 61 6c 6c 6f | 63 28 73 69 7a 65 6f 66 |afemallo|c(sizeof|
|000019f0| 20 28 41 55 54 48 4f 52 | 29 29 3b 0a 58 09 6c 61 | (AUTHOR|));.X.la|
|00001a00| 73 74 5f 61 75 74 68 6f | 72 2d 3e 6c 69 6e 6b 20 |st_autho|r->link |
|00001a10| 3d 20 61 75 74 68 6f 72 | 3b 0a 58 09 67 69 76 65 |= author|;.X.give|
|00001a20| 5f 73 74 72 69 6e 67 5f | 74 6f 28 61 75 74 68 6f |_string_|to(autho|
|00001a30| 72 2d 3e 6e 61 6d 65 29 | 3b 0a 58 09 61 75 74 68 |r->name)|;.X.auth|
|00001a40| 6f 72 5f 74 61 6c 6c 79 | 20 2b 3d 20 2a 61 75 74 |or_tally| += *aut|
|00001a50| 68 70 3b 0a 58 09 61 75 | 74 68 6f 72 2d 3e 63 6f |hp;.X.au|thor->co|
|00001a60| 75 6e 74 20 3d 20 2a 61 | 75 74 68 70 2b 2b 3b 0a |unt = *a|uthp++;.|
|00001a70| 58 09 6c 61 73 74 5f 61 | 75 74 68 6f 72 20 3d 20 |X.last_a|uthor = |
|00001a80| 61 75 74 68 6f 72 3b 0a | 58 20 20 20 20 7d 0a 58 |author;.|X }.X|
|00001a90| 20 20 20 20 6c 61 73 74 | 5f 61 75 74 68 6f 72 2d | last|_author-|
|00001aa0| 3e 6c 69 6e 6b 20 3d 20 | 4e 75 6c 6c 28 41 55 54 |>link = |Null(AUT|
|00001ab0| 48 4f 52 2a 29 3b 0a 58 | 0a 58 20 20 20 20 73 75 |HOR*);.X|.X su|
|00001ac0| 62 6a 65 63 74 5f 73 74 | 72 69 6e 67 73 20 3d 20 |bject_st|rings = |
|00001ad0| 73 74 72 69 6e 67 5f 70 | 74 72 3b 0a 58 0a 58 20 |string_p|tr;.X.X |
|00001ae0| 20 20 20 73 61 66 65 66 | 72 65 65 28 26 61 75 74 | safef|ree(&aut|
|00001af0| 68 6f 72 5f 63 6e 74 73 | 29 3b 0a 58 0a 58 20 20 |hor_cnts|);.X.X |
|00001b00| 20 20 69 66 20 28 63 6f | 75 6e 74 20 7c 7c 20 61 | if (co|unt || a|
|00001b10| 75 74 68 6f 72 5f 74 61 | 6c 6c 79 20 3e 20 74 6f |uthor_ta|lly > to|
|00001b20| 74 61 6c 2e 61 72 74 69 | 63 6c 65 29 20 7b 0a 58 |tal.arti|cle) {.X|
|00001b30| 09 6c 6f 67 5f 65 72 72 | 6f 72 28 22 61 75 74 68 |.log_err|or("auth|
|00001b40| 6f 72 20 75 6e 70 61 63 | 6b 69 6e 67 20 66 61 69 |or unpac|king fai|
|00001b50| 6c 65 64 2e 5c 6e 22 29 | 3b 0a 58 09 66 6f 72 20 |led.\n")|;.X.for |
|00001b60| 28 3b 20 63 6f 75 6e 74 | 20 3c 20 74 6f 74 61 6c |(; count| < total|
|00001b70| 2e 61 75 74 68 6f 72 3b | 20 63 6f 75 6e 74 2b 2b |.author;| count++|
|00001b80| 29 20 7b 0a 58 09 20 20 | 20 20 66 72 65 65 28 28 |) {.X. | free((|
|00001b90| 2a 2d 2d 61 75 74 68 6f | 72 5f 70 74 72 29 2d 3e |*--autho|r_ptr)->|
|00001ba0| 6e 61 6d 65 29 3b 0a 58 | 09 20 20 20 20 66 72 65 |name);.X|. fre|
|00001bb0| 65 28 2a 61 75 74 68 6f | 72 5f 70 74 72 29 3b 0a |e(*autho|r_ptr);.|
|00001bc0| 58 09 7d 0a 58 09 73 61 | 66 65 66 72 65 65 28 26 |X.}.X.sa|fefree(&|
|00001bd0| 61 75 74 68 6f 72 5f 61 | 72 72 61 79 29 3b 0a 58 |author_a|rray);.X|
|00001be0| 09 72 65 74 75 72 6e 20 | 30 3b 0a 58 20 20 20 20 |.return |0;.X |
|00001bf0| 7d 0a 58 20 20 20 20 72 | 65 74 75 72 6e 20 31 3b |}.X r|eturn 1;|
|00001c00| 0a 58 7d 0a 58 0a 58 2f | 2a 20 54 68 65 20 73 75 |.X}.X.X/|* The su|
|00001c10| 62 6a 65 63 74 20 76 61 | 6c 75 65 73 20 63 6f 6e |bject va|lues con|
|00001c20| 73 69 73 74 20 6f 66 20 | 74 68 65 20 63 72 61 6d |sist of |the cram|
|00001c30| 6d 65 64 2d 74 6f 67 65 | 74 68 65 72 20 6e 75 6c |med-toge|ther nul|
|00001c40| 6c 2d 74 65 72 6d 69 6e | 61 74 65 64 20 73 74 72 |l-termin|ated str|
|00001c50| 69 6e 67 73 0a 58 2a 2a | 20 28 61 6c 72 65 61 64 |ings.X**| (alread|
|00001c60| 79 20 72 65 61 64 20 69 | 6e 20 61 62 6f 76 65 29 |y read i|n above)|
|00001c70| 20 61 6e 64 20 74 68 65 | 20 75 73 65 2d 63 6f 75 | and the| use-cou|
|00001c80| 6e 74 20 61 72 72 61 79 | 2e 20 20 54 68 65 79 20 |nt array|. They |
|00001c90| 77 65 72 65 20 73 61 76 | 65 64 20 69 6e 20 74 68 |were sav|ed in th|
|00001ca0| 65 0a 58 2a 2a 20 6f 72 | 64 65 72 20 74 68 61 74 |e.X** or|der that|
|00001cb0| 20 74 68 65 20 72 6f 6f | 74 73 20 72 65 71 75 69 | the roo|ts requi|
|00001cc0| 72 65 20 77 68 69 6c 65 | 20 62 65 69 6e 67 20 75 |re while| being u|
|00001cd0| 6e 70 61 63 6b 65 64 2e | 0a 58 2a 2f 0a 58 69 6e |npacked.|.X*/.Xin|
|00001ce0| 74 0a 58 72 65 61 64 5f | 73 75 62 6a 65 63 74 73 |t.Xread_|subjects|
|00001cf0| 28 29 0a 58 7b 0a 58 20 | 20 20 20 69 66 20 28 21 |().X{.X | if (!|
|00001d00| 72 65 61 64 5f 69 74 65 | 6d 28 28 63 68 61 72 20 |read_ite|m((char |
|00001d10| 2a 2a 29 26 73 75 62 6a | 65 63 74 5f 63 6e 74 73 |**)&subj|ect_cnts|
|00001d20| 2c 0a 58 09 09 20 20 20 | 28 4d 45 4d 5f 53 49 5a |,.X.. |(MEM_SIZ|
|00001d30| 45 29 28 74 6f 74 61 6c | 2e 73 75 62 6a 65 63 74 |E)(total|.subject|
|00001d40| 20 2a 20 73 69 7a 65 6f | 66 20 28 57 4f 52 44 29 | * sizeo|f (WORD)|
|00001d50| 29 29 29 20 7b 0a 58 09 | 2f 2a 20 28 45 72 72 6f |))) {.X.|/* (Erro|
|00001d60| 72 20 61 6c 72 65 61 64 | 79 20 6c 6f 67 67 65 64 |r alread|y logged|
|00001d70| 2e 29 20 2a 2f 0a 58 09 | 72 65 74 75 72 6e 20 30 |.) */.X.|return 0|
|00001d80| 3b 0a 58 20 20 20 20 7d | 0a 58 20 20 20 20 72 65 |;.X }|.X re|
|00001d90| 74 75 72 6e 20 31 3b 0a | 58 7d 0a 58 0a 58 2f 2a |turn 1;.|X}.X.X/*|
|00001da0| 20 52 65 61 64 20 69 6e | 20 74 68 65 20 70 61 63 | Read in| the pac|
|00001db0| 6b 65 64 20 72 6f 6f 74 | 20 73 74 72 75 63 74 75 |ked root| structu|
|00001dc0| 72 65 73 20 61 6e 64 20 | 72 65 63 72 65 61 74 65 |res and |recreate|
|00001dd0| 20 74 68 65 20 6c 69 6e | 6b 65 64 20 6c 69 73 74 | the lin|ked list|
|00001de0| 20 76 65 72 73 69 6f 6e | 73 2c 0a 58 2a 2a 20 70 | version|s,.X** p|
|00001df0| 72 6f 63 65 73 73 69 6e | 67 20 65 61 63 68 20 72 |rocessin|g each r|
|00001e00| 6f 6f 74 27 73 20 73 75 | 62 6a 65 63 74 73 20 61 |oot's su|bjects a|
|00001e10| 73 20 77 65 20 67 6f 2e | 20 20 44 65 66 65 72 20 |s we go.| Defer |
|00001e20| 69 6e 74 65 72 70 72 65 | 74 61 74 69 6f 6e 20 6f |interpre|tation o|
|00001e30| 66 20 61 72 74 69 63 6c | 65 0a 58 2a 2a 20 6f 66 |f articl|e.X** of|
|00001e40| 66 73 65 74 73 20 75 6e | 74 69 6c 20 77 65 20 75 |fsets un|til we u|
|00001e50| 6e 70 61 63 6b 20 74 68 | 65 20 61 72 74 69 63 6c |npack th|e articl|
|00001e60| 65 20 73 74 72 75 63 74 | 75 72 65 73 2e 0a 58 2a |e struct|ures..X*|
|00001e70| 2f 0a 58 69 6e 74 0a 58 | 72 65 61 64 5f 72 6f 6f |/.Xint.X|read_roo|
|00001e80| 74 73 28 29 0a 58 7b 0a | 58 20 20 20 20 72 65 67 |ts().X{.|X reg|
|00001e90| 69 73 74 65 72 20 69 6e | 74 20 63 6f 75 6e 74 2c |ister in|t count,|
|00001ea0| 20 73 75 62 6a 5f 74 61 | 6c 6c 79 3b 0a 58 20 20 | subj_ta|lly;.X |
|00001eb0| 20 20 72 65 67 69 73 74 | 65 72 20 63 68 61 72 20 | regist|er char |
|00001ec0| 2a 73 74 72 69 6e 67 5f | 70 74 72 3b 0a 58 20 20 |*string_|ptr;.X |
|00001ed0| 20 20 72 65 67 69 73 74 | 65 72 20 57 4f 52 44 20 | regist|er WORD |
|00001ee0| 2a 73 75 62 6a 70 3b 0a | 58 20 20 20 20 52 4f 4f |*subjp;.|X ROO|
|00001ef0| 54 20 2a 72 6f 6f 74 2c | 20 2a 6c 61 73 74 5f 72 |T *root,| *last_r|
|00001f00| 6f 6f 74 2c 20 2a 2a 72 | 6f 6f 74 5f 70 74 72 3b |oot, **r|oot_ptr;|
|00001f10| 0a 58 20 20 20 20 53 55 | 42 4a 45 43 54 20 2a 73 |.X SU|BJECT *s|
|00001f20| 75 62 6a 65 63 74 2c 20 | 2a 6c 61 73 74 5f 73 75 |ubject, |*last_su|
|00001f30| 62 6a 65 63 74 2c 20 2a | 2a 73 75 62 6a 5f 70 74 |bject, *|*subj_pt|
|00001f40| 72 3b 0a 58 20 20 20 20 | 69 6e 74 20 72 65 74 3b |r;.X |int ret;|
|00001f50| 0a 58 0a 58 20 20 20 20 | 2f 2a 20 55 73 65 20 74 |.X.X |/* Use t|
|00001f60| 68 69 73 20 61 72 72 61 | 79 20 77 68 65 6e 20 75 |his arra|y when u|
|00001f70| 6e 70 61 63 6b 69 6e 67 | 20 74 68 65 20 61 72 74 |npacking| the art|
|00001f80| 69 63 6c 65 27 73 20 73 | 75 62 6a 65 63 74 20 6f |icle's s|ubject o|
|00001f90| 66 66 73 65 74 2e 20 2a | 2f 0a 58 20 20 20 20 73 |ffset. *|/.X s|
|00001fa0| 75 62 6a 65 63 74 5f 61 | 72 72 61 79 20 3d 20 28 |ubject_a|rray = (|
|00001fb0| 53 55 42 4a 45 43 54 2a | 2a 29 73 61 66 65 6d 61 |SUBJECT*|*)safema|
|00001fc0| 6c 6c 6f 63 28 74 6f 74 | 61 6c 2e 73 75 62 6a 65 |lloc(tot|al.subje|
|00001fd0| 63 74 20 2a 20 73 69 7a | 65 6f 66 20 28 53 55 42 |ct * siz|eof (SUB|
|00001fe0| 4a 45 43 54 2a 29 29 3b | 0a 58 20 20 20 20 73 75 |JECT*));|.X su|
|00001ff0| 62 6a 5f 70 74 72 20 3d | 20 73 75 62 6a 65 63 74 |bj_ptr =| subject|
|00002000| 5f 61 72 72 61 79 3b 0a | 58 20 20 20 20 2f 2a 20 |_array;.|X /* |
|00002010| 41 6e 64 20 74 68 69 73 | 20 61 72 72 61 79 20 70 |And this| array p|
|00002020| 6f 69 6e 74 73 20 74 68 | 65 20 61 72 74 69 63 6c |oints th|e articl|
|00002030| 65 27 73 20 72 6f 6f 74 | 20 6f 66 66 73 65 74 20 |e's root| offset |
|00002040| 61 74 20 74 68 65 20 72 | 69 67 68 74 20 73 70 6f |at the r|ight spo|
|00002050| 74 2e 20 2a 2f 0a 58 20 | 20 20 20 72 6f 6f 74 5f |t. */.X | root_|
|00002060| 61 72 72 61 79 20 3d 20 | 28 52 4f 4f 54 2a 2a 29 |array = |(ROOT**)|
|00002070| 73 61 66 65 6d 61 6c 6c | 6f 63 28 74 6f 74 61 6c |safemall|oc(total|
|00002080| 2e 72 6f 6f 74 20 2a 20 | 73 69 7a 65 6f 66 20 28 |.root * |sizeof (|
|00002090| 52 4f 4f 54 2a 29 29 3b | 0a 58 20 20 20 20 72 6f |ROOT*));|.X ro|
|000020a0| 6f 74 5f 70 74 72 20 3d | 20 72 6f 6f 74 5f 61 72 |ot_ptr =| root_ar|
|000020b0| 72 61 79 3b 0a 58 0a 58 | 20 20 20 20 73 75 62 6a |ray;.X.X| subj|
|000020c0| 70 20 3d 20 73 75 62 6a | 65 63 74 5f 63 6e 74 73 |p = subj|ect_cnts|
|000020d0| 3b 0a 58 20 20 20 20 73 | 74 72 69 6e 67 5f 70 74 |;.X s|tring_pt|
|000020e0| 72 20 3d 20 73 75 62 6a | 65 63 74 5f 73 74 72 69 |r = subj|ect_stri|
|000020f0| 6e 67 73 3b 09 2f 2a 20 | 73 74 72 69 6e 67 5f 65 |ngs;./* |string_e|
|00002100| 6e 64 20 69 73 20 61 6c | 72 65 61 64 79 20 73 65 |nd is al|ready se|
|00002110| 74 20 2a 2f 0a 58 0a 58 | 20 20 20 20 73 75 62 6a |t */.X.X| subj|
|00002120| 5f 74 61 6c 6c 79 20 3d | 20 30 3b 0a 58 23 69 66 |_tally =| 0;.X#if|
|00002130| 6e 64 65 66 20 6c 69 6e | 74 0a 58 20 20 20 20 6c |ndef lin|t.X l|
|00002140| 61 73 74 5f 72 6f 6f 74 | 20 3d 20 28 52 4f 4f 54 |ast_root| = (ROOT|
|00002150| 2a 29 26 72 6f 6f 74 5f | 72 6f 6f 74 3b 0a 58 23 |*)&root_|root;.X#|
|00002160| 65 6c 73 65 0a 58 20 20 | 20 20 6c 61 73 74 5f 72 |else.X | last_r|
|00002170| 6f 6f 74 20 3d 20 4e 75 | 6c 6c 28 52 4f 4f 54 2a |oot = Nu|ll(ROOT*|
|00002180| 29 3b 0a 58 23 65 6e 64 | 69 66 0a 58 20 20 20 20 |);.X#end|if.X |
|00002190| 66 6f 72 20 28 63 6f 75 | 6e 74 20 3d 20 74 6f 74 |for (cou|nt = tot|
|000021a0| 61 6c 2e 72 6f 6f 74 3b | 20 63 6f 75 6e 74 2d 2d |al.root;| count--|
|000021b0| 3b 29 20 7b 0a 58 09 72 | 65 74 20 3d 20 66 72 65 |;) {.X.r|et = fre|
|000021c0| 61 64 28 28 63 68 61 72 | 2a 29 26 70 5f 72 6f 6f |ad((char|*)&p_roo|
|000021d0| 74 2c 20 31 2c 20 73 69 | 7a 65 6f 66 20 28 50 41 |t, 1, si|zeof (PA|
|000021e0| 43 4b 45 44 5f 52 4f 4f | 54 29 2c 20 66 70 5f 69 |CKED_ROO|T), fp_i|
|000021f0| 6e 29 3b 0a 58 09 69 66 | 20 28 72 65 74 20 21 3d |n);.X.if| (ret !=|
|00002200| 20 73 69 7a 65 6f 66 20 | 28 50 41 43 4b 45 44 5f | sizeof |(PACKED_|
|00002210| 52 4f 4f 54 29 29 20 7b | 0a 58 09 20 20 20 20 6c |ROOT)) {|.X. l|
|00002220| 6f 67 5f 65 72 72 6f 72 | 28 22 66 61 69 6c 65 64 |og_error|("failed|
|00002230| 20 72 6f 6f 74 20 72 65 | 61 64 20 2d 2d 20 25 64 | root re|ad -- %d|
|00002240| 20 62 79 74 65 73 20 69 | 6e 73 74 65 61 64 20 6f | bytes i|nstead o|
|00002250| 66 20 25 64 2e 5c 6e 22 | 2c 0a 58 09 09 72 65 74 |f %d.\n"|,.X..ret|
|00002260| 2c 20 73 69 7a 65 6f 66 | 20 28 50 41 43 4b 45 44 |, sizeof| (PACKED|
|00002270| 5f 52 4f 4f 54 29 29 3b | 0a 58 09 20 20 20 20 72 |_ROOT));|.X. r|
|00002280| 65 74 75 72 6e 20 30 3b | 0a 58 09 7d 0a 58 09 69 |eturn 0;|.X.}.X.i|
|00002290| 66 20 28 70 5f 72 6f 6f | 74 2e 61 72 74 69 63 6c |f (p_roo|t.articl|
|000022a0| 65 73 20 3c 20 30 20 7c | 7c 20 70 5f 72 6f 6f 74 |es < 0 ||| p_root|
|000022b0| 2e 61 72 74 69 63 6c 65 | 73 20 3e 3d 20 74 6f 74 |.article|s >= tot|
|000022c0| 61 6c 2e 61 72 74 69 63 | 6c 65 0a 58 09 20 7c 7c |al.artic|le.X. |||
|000022d0| 20 73 75 62 6a 5f 70 74 | 72 20 2d 20 73 75 62 6a | subj_pt|r - subj|
|000022e0| 65 63 74 5f 61 72 72 61 | 79 20 2b 20 70 5f 72 6f |ect_arra|y + p_ro|
|000022f0| 6f 74 2e 73 75 62 6a 65 | 63 74 5f 63 6e 74 20 3e |ot.subje|ct_cnt >|
|00002300| 20 74 6f 74 61 6c 2e 73 | 75 62 6a 65 63 74 29 20 | total.s|ubject) |
|00002310| 7b 0a 58 09 20 20 20 20 | 6c 6f 67 5f 65 72 72 6f |{.X. |log_erro|
|00002320| 72 28 22 72 6f 6f 74 20 | 68 61 73 20 69 6e 76 61 |r("root |has inva|
|00002330| 6c 69 64 20 76 61 6c 75 | 65 73 2e 5c 6e 22 29 3b |lid valu|es.\n");|
|00002340| 0a 58 09 20 20 20 20 72 | 65 74 75 72 6e 20 30 3b |.X. r|eturn 0;|
|00002350| 0a 58 09 7d 0a 58 09 2a | 72 6f 6f 74 5f 70 74 72 |.X.}.X.*|root_ptr|
|00002360| 2b 2b 20 3d 20 72 6f 6f | 74 20 3d 20 28 52 4f 4f |++ = roo|t = (ROO|
|00002370| 54 2a 29 73 61 66 65 6d | 61 6c 6c 6f 63 28 73 69 |T*)safem|alloc(si|
|00002380| 7a 65 6f 66 20 28 52 4f | 4f 54 29 29 3b 0a 58 09 |zeof (RO|OT));.X.|
|00002390| 72 6f 6f 74 2d 3e 6c 69 | 6e 6b 20 3d 20 4e 75 6c |root->li|nk = Nul|
|000023a0| 6c 28 52 4f 4f 54 2a 29 | 3b 0a 58 09 72 6f 6f 74 |l(ROOT*)|;.X.root|
|000023b0| 2d 3e 61 72 74 69 63 6c | 65 73 20 3d 20 4e 75 6c |->articl|es = Nul|
|000023c0| 6c 61 72 74 3b 0a 58 09 | 72 6f 6f 74 2d 3e 73 65 |lart;.X.|root->se|
|000023d0| 71 20 3d 20 70 5f 72 6f | 6f 74 2e 61 72 74 69 63 |q = p_ro|ot.artic|
|000023e0| 6c 65 73 3b 0a 58 09 72 | 6f 6f 74 2d 3e 72 6f 6f |les;.X.r|oot->roo|
|000023f0| 74 5f 6e 75 6d 20 3d 20 | 70 5f 72 6f 6f 74 2e 72 |t_num = |p_root.r|
|00002400| 6f 6f 74 5f 6e 75 6d 3b | 0a 58 09 72 6f 6f 74 2d |oot_num;|.X.root-|
|00002410| 3e 74 68 72 65 61 64 5f | 63 6e 74 20 3d 20 70 5f |>thread_|cnt = p_|
|00002420| 72 6f 6f 74 2e 74 68 72 | 65 61 64 5f 63 6e 74 3b |root.thr|ead_cnt;|
|00002430| 0a 58 09 72 6f 6f 74 2d | 3e 73 75 62 6a 65 63 74 |.X.root-|>subject|
|00002440| 5f 63 6e 74 20 3d 20 70 | 5f 72 6f 6f 74 2e 73 75 |_cnt = p|_root.su|
|00002450| 62 6a 65 63 74 5f 63 6e | 74 3b 0a 58 09 6c 61 73 |bject_cn|t;.X.las|
|00002460| 74 5f 72 6f 6f 74 2d 3e | 6c 69 6e 6b 20 3d 20 72 |t_root->|link = r|
|00002470| 6f 6f 74 3b 0a 58 09 6c | 61 73 74 5f 72 6f 6f 74 |oot;.X.l|ast_root|
|00002480| 20 3d 20 72 6f 6f 74 3b | 0a 58 0a 58 23 69 66 6e | = root;|.X.X#ifn|
|00002490| 64 65 66 20 6c 69 6e 74 | 0a 58 09 6c 61 73 74 5f |def lint|.X.last_|
|000024a0| 73 75 62 6a 65 63 74 20 | 3d 20 28 53 55 42 4a 45 |subject |= (SUBJE|
|000024b0| 43 54 2a 29 26 72 6f 6f | 74 2d 3e 73 75 62 6a 65 |CT*)&roo|t->subje|
|000024c0| 63 74 73 3b 0a 58 23 65 | 6c 73 65 0a 58 09 6c 61 |cts;.X#e|lse.X.la|
|000024d0| 73 74 5f 73 75 62 6a 65 | 63 74 20 3d 20 4e 75 6c |st_subje|ct = Nul|
|000024e0| 6c 28 53 55 42 4a 45 43 | 54 2a 29 3b 0a 58 23 65 |l(SUBJEC|T*);.X#e|
|000024f0| 6e 64 69 66 0a 58 09 77 | 68 69 6c 65 20 28 70 5f |ndif.X.w|hile (p_|
|00002500| 72 6f 6f 74 2e 73 75 62 | 6a 65 63 74 5f 63 6e 74 |root.sub|ject_cnt|
|00002510| 2d 2d 29 20 7b 0a 58 09 | 20 20 20 20 69 66 20 28 |--) {.X.| if (|
|00002520| 73 74 72 69 6e 67 5f 70 | 74 72 20 3e 3d 20 73 74 |string_p|tr >= st|
|00002530| 72 69 6e 67 5f 65 6e 64 | 29 20 7b 0a 58 09 09 6c |ring_end|) {.X..l|
|00002540| 6f 67 5f 65 72 72 6f 72 | 28 22 65 72 72 6f 72 20 |og_error|("error |
|00002550| 75 6e 70 61 63 6b 69 6e | 67 20 73 75 62 6a 65 63 |unpackin|g subjec|
|00002560| 74 20 73 74 72 69 6e 67 | 73 2e 5c 6e 22 29 3b 0a |t string|s.\n");.|
|00002570| 58 09 09 6c 61 73 74 5f | 73 75 62 6a 65 63 74 2d |X..last_|subject-|
|00002580| 3e 6c 69 6e 6b 20 3d 20 | 4e 75 6c 6c 28 53 55 42 |>link = |Null(SUB|
|00002590| 4a 45 43 54 2a 29 3b 0a | 58 09 09 72 65 74 75 72 |JECT*);.|X..retur|
|000025a0| 6e 20 30 3b 0a 58 09 20 | 20 20 20 7d 0a 58 09 20 |n 0;.X. | }.X. |
|000025b0| 20 20 20 2a 73 75 62 6a | 5f 70 74 72 2b 2b 20 3d | *subj|_ptr++ =|
|000025c0| 20 73 75 62 6a 65 63 74 | 20 3d 20 28 53 55 42 4a | subject| = (SUBJ|
|000025d0| 45 43 54 2a 29 73 61 66 | 65 6d 61 6c 6c 6f 63 28 |ECT*)saf|emalloc(|
|000025e0| 73 69 7a 65 6f 66 20 28 | 53 55 42 4a 45 43 54 29 |sizeof (|SUBJECT)|
|000025f0| 29 3b 0a 58 09 20 20 20 | 20 6c 61 73 74 5f 73 75 |);.X. | last_su|
|00002600| 62 6a 65 63 74 2d 3e 6c | 69 6e 6b 20 3d 20 73 75 |bject->l|ink = su|
|00002610| 62 6a 65 63 74 3b 0a 58 | 09 20 20 20 20 67 69 76 |bject;.X|. giv|
|00002620| 65 5f 73 74 72 69 6e 67 | 5f 74 6f 28 73 75 62 6a |e_string|_to(subj|
|00002630| 65 63 74 2d 3e 73 74 72 | 29 3b 0a 58 09 20 20 20 |ect->str|);.X. |
|00002640| 20 73 75 62 6a 5f 74 61 | 6c 6c 79 20 2b 3d 20 2a | subj_ta|lly += *|
|00002650| 73 75 62 6a 70 3b 0a 58 | 09 20 20 20 20 73 75 62 |subjp;.X|. sub|
|00002660| 6a 65 63 74 2d 3e 63 6f | 75 6e 74 20 3d 20 2a 73 |ject->co|unt = *s|
|00002670| 75 62 6a 70 2b 2b 3b 0a | 58 09 20 20 20 20 6c 61 |ubjp++;.|X. la|
|00002680| 73 74 5f 73 75 62 6a 65 | 63 74 20 3d 20 73 75 62 |st_subje|ct = sub|
|00002690| 6a 65 63 74 3b 0a 58 09 | 7d 0a 58 09 6c 61 73 74 |ject;.X.|}.X.last|
|000026a0| 5f 73 75 62 6a 65 63 74 | 2d 3e 6c 69 6e 6b 20 3d |_subject|->link =|
|000026b0| 20 4e 75 6c 6c 28 53 55 | 42 4a 45 43 54 2a 29 3b | Null(SU|BJECT*);|
|000026c0| 0a 58 20 20 20 20 7d 0a | 58 20 20 20 20 69 66 20 |.X }.|X if |
|000026d0| 28 73 75 62 6a 5f 70 74 | 72 20 21 3d 20 73 75 62 |(subj_pt|r != sub|
|000026e0| 6a 65 63 74 5f 61 72 72 | 61 79 20 2b 20 74 6f 74 |ject_arr|ay + tot|
|000026f0| 61 6c 2e 73 75 62 6a 65 | 63 74 0a 58 20 20 20 20 |al.subje|ct.X |
|00002700| 20 7c 7c 20 73 75 62 6a | 5f 74 61 6c 6c 79 20 3e | || subj|_tally >|
|00002710| 20 74 6f 74 61 6c 2e 61 | 72 74 69 63 6c 65 0a 58 | total.a|rticle.X|
|00002720| 20 20 20 20 20 7c 7c 20 | 73 74 72 69 6e 67 5f 70 | || |string_p|
|00002730| 74 72 20 21 3d 20 73 74 | 72 69 6e 67 5f 65 6e 64 |tr != st|ring_end|
|00002740| 29 20 7b 0a 58 09 6c 6f | 67 5f 65 72 72 6f 72 28 |) {.X.lo|g_error(|
|00002750| 22 73 75 62 6a 65 63 74 | 20 64 61 74 61 20 69 73 |"subject| data is|
|00002760| 20 69 6e 76 61 6c 69 64 | 2e 5c 6e 22 29 3b 0a 58 | invalid|.\n");.X|
|00002770| 09 72 65 74 75 72 6e 20 | 30 3b 0a 58 20 20 20 20 |.return |0;.X |
|00002780| 7d 0a 58 20 20 20 20 73 | 61 66 65 66 72 65 65 28 |}.X s|afefree(|
|00002790| 26 73 75 62 6a 65 63 74 | 5f 63 6e 74 73 29 3b 0a |&subject|_cnts);.|
|000027a0| 58 20 20 20 20 73 61 66 | 65 66 72 65 65 28 26 73 |X saf|efree(&s|
|000027b0| 74 72 69 6e 67 73 29 3b | 0a 58 0a 58 20 20 20 20 |trings);|.X.X |
|000027c0| 72 65 74 75 72 6e 20 31 | 3b 0a 58 7d 0a 58 0a 58 |return 1|;.X}.X.X|
|000027d0| 62 6f 6f 6c 20 69 6e 76 | 61 6c 69 64 5f 64 61 74 |bool inv|alid_dat|
|000027e0| 61 3b 0a 58 0a 58 2f 2a | 20 41 20 73 69 6d 70 6c |a;.X.X/*| A simpl|
|000027f0| 65 20 72 6f 75 74 69 6e | 65 20 74 68 61 74 20 63 |e routin|e that c|
|00002800| 68 65 63 6b 73 20 74 68 | 65 20 76 61 6c 69 64 69 |hecks th|e validi|
|00002810| 74 79 20 6f 66 20 74 68 | 65 20 61 72 74 69 63 6c |ty of th|e articl|
|00002820| 65 27 73 20 73 75 62 6a | 65 63 74 20 76 61 6c 75 |e's subj|ect valu|
|00002830| 65 2e 0a 58 2a 2a 20 41 | 20 2d 31 20 6d 65 61 6e |e..X** A| -1 mean|
|00002840| 73 20 74 68 61 74 20 69 | 74 20 69 73 20 4e 55 4c |s that i|t is NUL|
|00002850| 4c 2c 20 6f 74 68 65 72 | 77 69 73 65 20 69 74 20 |L, other|wise it |
|00002860| 73 68 6f 75 6c 64 20 62 | 65 20 61 6e 20 6f 66 66 |should b|e an off|
|00002870| 73 65 74 20 69 6e 74 6f | 20 74 68 65 0a 58 2a 2a |set into| the.X**|
|00002880| 20 73 75 62 6a 65 63 74 | 20 61 72 72 61 79 20 77 | subject| array w|
|00002890| 65 20 6a 75 73 74 20 75 | 6e 70 61 63 6b 65 64 2e |e just u|npacked.|
|000028a0| 0a 58 2a 2f 0a 58 53 55 | 42 4a 45 43 54 20 2a 0a |.X*/.XSU|BJECT *.|
|000028b0| 58 76 61 6c 69 64 5f 73 | 75 62 6a 65 63 74 28 6e |Xvalid_s|ubject(n|
|000028c0| 75 6d 2c 20 61 72 74 5f | 6e 75 6d 29 0a 58 57 4f |um, art_|num).XWO|
|000028d0| 52 44 20 6e 75 6d 3b 0a | 58 6c 6f 6e 67 20 61 72 |RD num;.|Xlong ar|
|000028e0| 74 5f 6e 75 6d 3b 0a 58 | 7b 0a 58 20 20 20 20 69 |t_num;.X|{.X i|
|000028f0| 66 20 28 6e 75 6d 20 3d | 3d 20 2d 31 29 20 7b 0a |f (num =|= -1) {.|
|00002900| 58 09 72 65 74 75 72 6e | 20 4e 75 6c 6c 28 53 55 |X.return| Null(SU|
|00002910| 42 4a 45 43 54 2a 29 3b | 0a 58 20 20 20 20 7d 0a |BJECT*);|.X }.|
|00002920| 58 20 20 20 20 69 66 20 | 28 6e 75 6d 20 3c 20 30 |X if |(num < 0|
|00002930| 20 7c 7c 20 6e 75 6d 20 | 3e 3d 20 74 6f 74 61 6c | || num |>= total|
|00002940| 2e 73 75 62 6a 65 63 74 | 29 20 7b 0a 58 09 6c 6f |.subject|) {.X.lo|
|00002950| 67 5f 65 72 72 6f 72 28 | 22 69 6e 76 61 6c 69 64 |g_error(|"invalid|
|00002960| 20 73 75 62 6a 65 63 74 | 20 69 6e 20 74 68 72 65 | subject| in thre|
|00002970| 61 64 20 66 69 6c 65 3a | 20 25 64 20 5b 25 6c 64 |ad file:| %d [%ld|
|00002980| 5d 5c 6e 22 2c 20 6e 75 | 6d 2c 20 61 72 74 5f 6e |]\n", nu|m, art_n|
|00002990| 75 6d 29 3b 0a 58 09 69 | 6e 76 61 6c 69 64 5f 64 |um);.X.i|nvalid_d|
|000029a0| 61 74 61 20 3d 20 54 52 | 55 45 3b 0a 58 09 72 65 |ata = TR|UE;.X.re|
|000029b0| 74 75 72 6e 20 4e 75 6c | 6c 28 53 55 42 4a 45 43 |turn Nul|l(SUBJEC|
|000029c0| 54 2a 29 3b 0a 58 20 20 | 20 20 7d 0a 58 20 20 20 |T*);.X | }.X |
|000029d0| 20 72 65 74 75 72 6e 20 | 73 75 62 6a 65 63 74 5f | return |subject_|
|000029e0| 61 72 72 61 79 5b 6e 75 | 6d 5d 3b 0a 58 7d 0a 58 |array[nu|m];.X}.X|
|000029f0| 0a 58 2f 2a 20 44 69 74 | 74 6f 20 66 6f 72 20 61 |.X/* Dit|to for a|
|00002a00| 75 74 68 6f 72 20 63 68 | 65 63 6b 69 6e 67 2e 20 |uthor ch|ecking. |
|00002a10| 2a 2f 0a 58 41 55 54 48 | 4f 52 20 2a 0a 58 76 61 |*/.XAUTH|OR *.Xva|
|00002a20| 6c 69 64 5f 61 75 74 68 | 6f 72 28 6e 75 6d 2c 20 |lid_auth|or(num, |
|00002a30| 61 72 74 5f 6e 75 6d 29 | 0a 58 57 4f 52 44 20 6e |art_num)|.XWORD n|
|00002a40| 75 6d 3b 0a 58 6c 6f 6e | 67 20 61 72 74 5f 6e 75 |um;.Xlon|g art_nu|
|00002a50| 6d 3b 0a 58 7b 0a 58 20 | 20 20 20 69 66 20 28 6e |m;.X{.X | if (n|
|00002a60| 75 6d 20 3d 3d 20 2d 31 | 29 20 7b 0a 58 09 72 65 |um == -1|) {.X.re|
|00002a70| 74 75 72 6e 20 4e 75 6c | 6c 28 41 55 54 48 4f 52 |turn Nul|l(AUTHOR|
|00002a80| 2a 29 3b 0a 58 20 20 20 | 20 7d 0a 58 20 20 20 20 |*);.X | }.X |
|00002a90| 69 66 20 28 6e 75 6d 20 | 3c 20 30 20 7c 7c 20 6e |if (num |< 0 || n|
|00002aa0| 75 6d 20 3e 3d 20 74 6f | 74 61 6c 2e 61 75 74 68 |um >= to|tal.auth|
|00002ab0| 6f 72 29 20 7b 0a 58 09 | 6c 6f 67 5f 65 72 72 6f |or) {.X.|log_erro|
|00002ac0| 72 28 22 69 6e 76 61 6c | 69 64 20 61 75 74 68 6f |r("inval|id autho|
|00002ad0| 72 20 69 6e 20 74 68 72 | 65 61 64 20 66 69 6c 65 |r in thr|ead file|
|00002ae0| 3a 20 25 64 20 5b 25 6c | 64 5d 5c 6e 22 2c 20 6e |: %d [%l|d]\n", n|
|00002af0| 75 6d 2c 20 61 72 74 5f | 6e 75 6d 29 3b 0a 58 09 |um, art_|num);.X.|
|00002b00| 69 6e 76 61 6c 69 64 5f | 64 61 74 61 20 3d 20 54 |invalid_|data = T|
|00002b10| 52 55 45 3b 0a 58 09 72 | 65 74 75 72 6e 20 4e 75 |RUE;.X.r|eturn Nu|
|00002b20| 6c 6c 28 41 55 54 48 4f | 52 2a 29 3b 0a 58 20 20 |ll(AUTHO|R*);.X |
|00002b30| 20 20 7d 0a 58 20 20 20 | 20 72 65 74 75 72 6e 20 | }.X | return |
|00002b40| 61 75 74 68 6f 72 5f 61 | 72 72 61 79 5b 6e 75 6d |author_a|rray[num|
|00002b50| 5d 3b 0a 58 7d 0a 58 0a | 58 2f 2a 20 4f 75 72 20 |];.X}.X.|X/* Our |
|00002b60| 70 61 72 65 6e 74 2f 73 | 69 62 6c 69 6e 67 20 69 |parent/s|ibling i|
|00002b70| 6e 66 6f 72 6d 61 74 69 | 6f 6e 20 69 73 20 61 20 |nformati|on is a |
|00002b80| 72 65 6c 61 74 69 76 65 | 20 6f 66 66 73 65 74 20 |relative| offset |
|00002b90| 69 6e 20 74 68 65 20 61 | 72 74 69 63 6c 65 20 61 |in the a|rticle a|
|00002ba0| 72 72 61 79 2e 0a 58 2a | 2a 20 7a 65 72 6f 20 66 |rray..X*|* zero f|
|00002bb0| 6f 72 20 6e 6f 6e 65 2e | 20 20 43 68 69 6c 64 20 |or none.| Child |
|00002bc0| 76 61 6c 75 65 73 20 61 | 72 65 20 61 6c 77 61 79 |values a|re alway|
|00002bd0| 73 20 66 6f 75 6e 64 20 | 69 6e 20 74 68 65 20 76 |s found |in the v|
|00002be0| 65 72 79 20 6e 65 78 74 | 20 61 72 72 61 79 0a 58 |ery next| array.X|
|00002bf0| 2a 2a 20 65 6c 65 6d 65 | 6e 74 20 69 66 20 63 68 |** eleme|nt if ch|
|00002c00| 69 6c 64 5f 63 6e 74 20 | 69 73 20 6e 6f 6e 2d 7a |ild_cnt |is non-z|
|00002c10| 65 72 6f 2e 0a 58 2a 2f | 0a 58 41 52 54 49 43 4c |ero..X*/|.XARTICL|
|00002c20| 45 20 2a 0a 58 76 61 6c | 69 64 5f 6e 6f 64 65 28 |E *.Xval|id_node(|
|00002c30| 72 65 6c 61 74 69 76 65 | 5f 6f 66 66 73 65 74 2c |relative|_offset,|
|00002c40| 20 6e 75 6d 29 0a 58 57 | 4f 52 44 20 72 65 6c 61 | num).XW|ORD rela|
|00002c50| 74 69 76 65 5f 6f 66 66 | 73 65 74 3b 0a 58 69 6e |tive_off|set;.Xin|
|00002c60| 74 20 6e 75 6d 3b 0a 58 | 7b 0a 58 20 20 20 20 69 |t num;.X|{.X i|
|00002c70| 66 20 28 21 72 65 6c 61 | 74 69 76 65 5f 6f 66 66 |f (!rela|tive_off|
|00002c80| 73 65 74 29 20 7b 0a 58 | 09 72 65 74 75 72 6e 20 |set) {.X|.return |
|00002c90| 4e 75 6c 6c 61 72 74 3b | 0a 58 20 20 20 20 7d 0a |Nullart;|.X }.|
|00002ca0| 58 20 20 20 20 6e 75 6d | 20 2b 3d 20 72 65 6c 61 |X num| += rela|
|00002cb0| 74 69 76 65 5f 6f 66 66 | 73 65 74 3b 0a 58 20 20 |tive_off|set;.X |
|00002cc0| 20 20 69 66 20 28 6e 75 | 6d 20 3c 20 30 20 7c 7c | if (nu|m < 0 |||
|00002cd0| 20 6e 75 6d 20 3e 3d 20 | 74 6f 74 61 6c 2e 61 72 | num >= |total.ar|
|00002ce0| 74 69 63 6c 65 29 20 7b | 0a 58 09 6c 6f 67 5f 65 |ticle) {|.X.log_e|
|00002cf0| 72 72 6f 72 28 22 69 6e | 76 61 6c 69 64 20 6e 6f |rror("in|valid no|
|00002d00| 64 65 20 6f 66 66 73 65 | 74 20 69 6e 20 74 68 72 |de offse|t in thr|
|00002d10| 65 61 64 20 66 69 6c 65 | 2e 5c 6e 22 29 3b 0a 58 |ead file|.\n");.X|
|00002d20| 09 69 6e 76 61 6c 69 64 | 5f 64 61 74 61 20 3d 20 |.invalid|_data = |
|00002d30| 54 52 55 45 3b 0a 58 09 | 72 65 74 75 72 6e 20 4e |TRUE;.X.|return N|
|00002d40| 75 6c 6c 61 72 74 3b 0a | 58 20 20 20 20 7d 0a 58 |ullart;.|X }.X|
|00002d50| 20 20 20 20 72 65 74 75 | 72 6e 20 61 72 74 69 63 | retu|rn artic|
|00002d60| 6c 65 5f 61 72 72 61 79 | 5b 6e 75 6d 5d 3b 0a 58 |le_array|[num];.X|
|00002d70| 7d 0a 58 0a 58 2f 2a 20 | 52 65 61 64 20 74 68 65 |}.X.X/* |Read the|
|00002d80| 20 61 72 74 69 63 6c 65 | 73 20 69 6e 74 6f 20 74 | article|s into t|
|00002d90| 68 65 69 72 20 6c 69 6e | 6b 65 64 20 6c 69 73 74 |heir lin|ked list|
|00002da0| 73 2e 20 20 50 6f 69 6e | 74 20 65 76 65 72 79 74 |s. Poin|t everyt|
|00002db0| 68 69 6e 67 20 65 76 65 | 72 79 77 68 65 72 65 2e |hing eve|rywhere.|
|00002dc0| 20 2a 2f 0a 58 69 6e 74 | 0a 58 72 65 61 64 5f 61 | */.Xint|.Xread_a|
|00002dd0| 72 74 69 63 6c 65 73 28 | 29 0a 58 7b 0a 58 20 20 |rticles(|).X{.X |
|00002de0| 20 20 72 65 67 69 73 74 | 65 72 20 69 6e 74 20 63 | regist|er int c|
|00002df0| 6f 75 6e 74 3b 0a 58 20 | 20 20 20 72 65 67 69 73 |ount;.X | regis|
|00002e00| 74 65 72 20 41 52 54 49 | 43 4c 45 20 2a 61 72 74 |ter ARTI|CLE *art|
|00002e10| 69 63 6c 65 2c 20 2a 2a | 61 72 74 69 63 6c 65 5f |icle, **|article_|
|00002e20| 70 74 72 3b 0a 58 20 20 | 20 20 69 6e 74 20 72 65 |ptr;.X | int re|
|00002e30| 74 3b 0a 58 0a 58 20 20 | 20 20 2f 2a 20 42 75 69 |t;.X.X | /* Bui|
|00002e40| 6c 64 20 61 6e 20 61 72 | 72 61 79 20 74 6f 20 69 |ld an ar|ray to i|
|00002e50| 6e 74 65 72 70 72 65 74 | 20 69 6e 74 65 72 6c 69 |nterpret| interli|
|00002e60| 6e 6b 61 67 65 73 20 6f | 66 20 61 72 74 69 63 6c |nkages o|f articl|
|00002e70| 65 73 2e 20 2a 2f 0a 58 | 20 20 20 20 61 72 74 69 |es. */.X| arti|
|00002e80| 63 6c 65 5f 61 72 72 61 | 79 20 3d 20 28 41 52 54 |cle_arra|y = (ART|
|00002e90| 49 43 4c 45 2a 2a 29 73 | 61 66 65 6d 61 6c 6c 6f |ICLE**)s|afemallo|
|00002ea0| 63 28 74 6f 74 61 6c 2e | 61 72 74 69 63 6c 65 20 |c(total.|article |
|00002eb0| 2a 20 73 69 7a 65 6f 66 | 20 28 41 52 54 49 43 4c |* sizeof| (ARTICL|
|00002ec0| 45 2a 29 29 3b 0a 58 20 | 20 20 20 61 72 74 69 63 |E*));.X | artic|
|00002ed0| 6c 65 5f 70 74 72 20 3d | 20 61 72 74 69 63 6c 65 |le_ptr =| article|
|00002ee0| 5f 61 72 72 61 79 3b 0a | 58 0a 58 20 20 20 20 2f |_array;.|X.X /|
|00002ef0| 2a 20 41 6c 6c 6f 63 61 | 74 65 20 61 6c 6c 20 74 |* Alloca|te all t|
|00002f00| 68 65 20 73 74 72 75 63 | 74 75 72 65 73 20 75 70 |he struc|tures up|
|00002f10| 2d 66 72 6f 6e 74 20 73 | 6f 20 74 68 61 74 20 77 |-front s|o that w|
|00002f20| 65 20 63 61 6e 20 70 6f | 69 6e 74 20 74 6f 20 75 |e can po|int to u|
|00002f30| 6e 72 65 61 64 0a 58 20 | 20 20 20 2a 2a 20 73 69 |nread.X | ** si|
|00002f40| 62 6c 69 6e 67 73 20 61 | 73 20 77 65 20 67 6f 2e |blings a|s we go.|
|00002f50| 0a 58 20 20 20 20 2a 2f | 0a 58 20 20 20 20 66 6f |.X */|.X fo|
|00002f60| 72 20 28 63 6f 75 6e 74 | 20 3d 20 74 6f 74 61 6c |r (count| = total|
|00002f70| 2e 61 72 74 69 63 6c 65 | 3b 20 63 6f 75 6e 74 2d |.article|; count-|
|00002f80| 2d 3b 29 20 7b 0a 58 09 | 2a 61 72 74 69 63 6c 65 |-;) {.X.|*article|
|00002f90| 5f 70 74 72 2b 2b 20 3d | 20 28 41 52 54 49 43 4c |_ptr++ =| (ARTICL|
|00002fa0| 45 2a 29 73 61 66 65 6d | 61 6c 6c 6f 63 28 73 69 |E*)safem|alloc(si|
|00002fb0| 7a 65 6f 66 20 28 41 52 | 54 49 43 4c 45 29 29 3b |zeof (AR|TICLE));|
|00002fc0| 0a 58 20 20 20 20 7d 0a | 58 20 20 20 20 69 6e 76 |.X }.|X inv|
|00002fd0| 61 6c 69 64 5f 64 61 74 | 61 20 3d 20 46 41 4c 53 |alid_dat|a = FALS|
|00002fe0| 45 3b 0a 58 20 20 20 20 | 61 72 74 69 63 6c 65 5f |E;.X |article_|
|00002ff0| 70 74 72 20 3d 20 61 72 | 74 69 63 6c 65 5f 61 72 |ptr = ar|ticle_ar|
|00003000| 72 61 79 3b 0a 58 20 20 | 20 20 66 6f 72 20 28 63 |ray;.X | for (c|
|00003010| 6f 75 6e 74 20 3d 20 30 | 3b 20 63 6f 75 6e 74 20 |ount = 0|; count |
|00003020| 3c 20 74 6f 74 61 6c 2e | 61 72 74 69 63 6c 65 3b |< total.|article;|
|00003030| 20 63 6f 75 6e 74 2b 2b | 29 20 7b 0a 58 09 72 65 | count++|) {.X.re|
|00003040| 74 20 3d 20 66 72 65 61 | 64 28 28 63 68 61 72 2a |t = frea|d((char*|
|00003050| 29 26 70 5f 61 72 74 69 | 63 6c 65 2c 20 31 2c 20 |)&p_arti|cle, 1, |
|00003060| 73 69 7a 65 6f 66 20 28 | 50 41 43 4b 45 44 5f 41 |sizeof (|PACKED_A|
|00003070| 52 54 49 43 4c 45 29 2c | 20 66 70 5f 69 6e 29 3b |RTICLE),| fp_in);|
|00003080| 0a 58 09 69 66 20 28 72 | 65 74 20 21 3d 20 73 69 |.X.if (r|et != si|
|00003090| 7a 65 6f 66 20 28 50 41 | 43 4b 45 44 5f 41 52 54 |zeof (PA|CKED_ART|
|000030a0| 49 43 4c 45 29 29 20 7b | 0a 58 09 20 20 20 20 6c |ICLE)) {|.X. l|
|000030b0| 6f 67 5f 65 72 72 6f 72 | 28 22 66 61 69 6c 65 64 |og_error|("failed|
|000030c0| 20 61 72 74 69 63 6c 65 | 20 72 65 61 64 20 2d 2d | article| read --|
|000030d0| 20 25 64 20 62 79 74 65 | 73 20 69 6e 73 74 65 61 | %d byte|s instea|
|000030e0| 64 20 6f 66 20 25 64 2e | 5c 6e 22 2c 20 72 65 74 |d of %d.|\n", ret|
|000030f0| 2c 20 73 69 7a 65 6f 66 | 20 28 50 41 43 4b 45 44 |, sizeof| (PACKED|
|00003100| 5f 41 52 54 49 43 4c 45 | 29 29 3b 0a 58 09 20 20 |_ARTICLE|));.X. |
|00003110| 20 20 72 65 74 75 72 6e | 20 30 3b 0a 58 09 7d 0a | return| 0;.X.}.|
|00003120| 58 0a 58 09 61 72 74 69 | 63 6c 65 20 3d 20 2a 61 |X.X.arti|cle = *a|
|00003130| 72 74 69 63 6c 65 5f 70 | 74 72 2b 2b 3b 0a 58 09 |rticle_p|tr++;.X.|
|00003140| 61 72 74 69 63 6c 65 2d | 3e 6e 75 6d 20 3d 20 70 |article-|>num = p|
|00003150| 5f 61 72 74 69 63 6c 65 | 2e 6e 75 6d 3b 0a 58 09 |_article|.num;.X.|
|00003160| 61 72 74 69 63 6c 65 2d | 3e 64 61 74 65 20 3d 20 |article-|>date = |
|00003170| 70 5f 61 72 74 69 63 6c | 65 2e 64 61 74 65 3b 0a |p_articl|e.date;.|
|00003180| 58 09 61 72 74 69 63 6c | 65 2d 3e 73 75 62 6a 65 |X.articl|e->subje|
|00003190| 63 74 20 3d 20 76 61 6c | 69 64 5f 73 75 62 6a 65 |ct = val|id_subje|
|000031a0| 63 74 28 70 5f 61 72 74 | 69 63 6c 65 2e 73 75 62 |ct(p_art|icle.sub|
|000031b0| 6a 65 63 74 2c 20 70 5f | 61 72 74 69 63 6c 65 2e |ject, p_|article.|
|000031c0| 6e 75 6d 29 3b 0a 58 09 | 61 72 74 69 63 6c 65 2d |num);.X.|article-|
|000031d0| 3e 61 75 74 68 6f 72 20 | 3d 20 76 61 6c 69 64 5f |>author |= valid_|
|000031e0| 61 75 74 68 6f 72 28 70 | 5f 61 72 74 69 63 6c 65 |author(p|_article|
|000031f0| 2e 61 75 74 68 6f 72 2c | 20 70 5f 61 72 74 69 63 |.author,| p_artic|
|00003200| 6c 65 2e 6e 75 6d 29 3b | 0a 58 09 61 72 74 69 63 |le.num);|.X.artic|
|00003210| 6c 65 2d 3e 66 6c 61 67 | 73 20 3d 20 70 5f 61 72 |le->flag|s = p_ar|
|00003220| 74 69 63 6c 65 2e 66 6c | 61 67 73 3b 0a 58 09 61 |ticle.fl|ags;.X.a|
|00003230| 72 74 69 63 6c 65 2d 3e | 63 68 69 6c 64 5f 63 6e |rticle->|child_cn|
|00003240| 74 20 3d 20 70 5f 61 72 | 74 69 63 6c 65 2e 63 68 |t = p_ar|ticle.ch|
|00003250| 69 6c 64 5f 63 6e 74 3b | 0a 58 09 61 72 74 69 63 |ild_cnt;|.X.artic|
|00003260| 6c 65 2d 3e 70 61 72 65 | 6e 74 20 3d 20 76 61 6c |le->pare|nt = val|
|00003270| 69 64 5f 6e 6f 64 65 28 | 70 5f 61 72 74 69 63 6c |id_node(|p_articl|
|00003280| 65 2e 70 61 72 65 6e 74 | 2c 20 63 6f 75 6e 74 29 |e.parent|, count)|
|00003290| 3b 0a 58 09 61 72 74 69 | 63 6c 65 2d 3e 63 68 69 |;.X.arti|cle->chi|
|000032a0| 6c 64 72 65 6e 20 3d 20 | 76 61 6c 69 64 5f 6e 6f |ldren = |valid_no|
|000032b0| 64 65 28 61 72 74 69 63 | 6c 65 2d 3e 63 68 69 6c |de(artic|le->chil|
|000032c0| 64 5f 63 6e 74 20 3f 20 | 31 20 3a 20 30 2c 20 63 |d_cnt ? |1 : 0, c|
|000032d0| 6f 75 6e 74 29 3b 0a 58 | 09 61 72 74 69 63 6c 65 |ount);.X|.article|
|000032e0| 2d 3e 73 69 62 6c 69 6e | 67 73 20 3d 20 76 61 6c |->siblin|gs = val|
|000032f0| 69 64 5f 6e 6f 64 65 28 | 70 5f 61 72 74 69 63 6c |id_node(|p_articl|
|00003300| 65 2e 73 69 62 6c 69 6e | 67 73 2c 20 63 6f 75 6e |e.siblin|gs, coun|
|00003310| 74 29 3b 0a 58 09 69 66 | 20 28 70 5f 61 72 74 69 |t);.X.if| (p_arti|
|00003320| 63 6c 65 2e 72 6f 6f 74 | 20 3c 20 30 20 7c 7c 20 |cle.root| < 0 || |
|00003330| 70 5f 61 72 74 69 63 6c | 65 2e 72 6f 6f 74 20 3e |p_articl|e.root >|
|00003340| 3d 20 74 6f 74 61 6c 2e | 72 6f 6f 74 29 20 7b 0a |= total.|root) {.|
|00003350| 58 09 20 20 20 20 6c 6f | 67 5f 65 72 72 6f 72 28 |X. lo|g_error(|
|00003360| 22 69 6e 76 61 6c 69 64 | 20 72 6f 6f 74 20 6f 66 |"invalid| root of|
|00003370| 66 73 65 74 20 69 6e 20 | 74 68 72 65 61 64 20 66 |fset in |thread f|
|00003380| 69 6c 65 2e 5c 6e 22 29 | 3b 0a 58 09 20 20 20 20 |ile.\n")|;.X. |
|00003390| 72 65 74 75 72 6e 20 30 | 3b 0a 58 09 7d 0a 58 09 |return 0|;.X.}.X.|
|000033a0| 61 72 74 69 63 6c 65 2d | 3e 72 6f 6f 74 20 3d 20 |article-|>root = |
|000033b0| 72 6f 6f 74 5f 61 72 72 | 61 79 5b 70 5f 61 72 74 |root_arr|ay[p_art|
|000033c0| 69 63 6c 65 2e 72 6f 6f | 74 5d 3b 0a 58 09 69 66 |icle.roo|t];.X.if|
|000033d0| 20 28 69 6e 76 61 6c 69 | 64 5f 64 61 74 61 29 20 | (invali|d_data) |
|000033e0| 7b 0a 58 09 20 20 20 20 | 2f 2a 20 28 45 72 72 6f |{.X. |/* (Erro|
|000033f0| 72 20 61 6c 72 65 61 64 | 79 20 6c 6f 67 67 65 64 |r alread|y logged|
|00003400| 2e 29 20 2a 2f 0a 58 09 | 20 20 20 20 72 65 74 75 |.) */.X.| retu|
|00003410| 72 6e 20 30 3b 0a 58 09 | 7d 0a 58 20 20 20 20 7d |rn 0;.X.|}.X }|
|00003420| 0a 58 0a 58 20 20 20 20 | 2f 2a 20 57 65 27 72 65 |.X.X |/* We're|
|00003430| 20 64 6f 6e 65 20 77 69 | 74 68 20 6d 6f 73 74 20 | done wi|th most |
|00003440| 6f 66 20 74 68 65 20 70 | 6f 69 6e 74 65 72 20 61 |of the p|ointer a|
|00003450| 72 72 61 79 73 2e 20 2a | 2f 0a 58 20 20 20 20 73 |rrays. *|/.X s|
|00003460| 61 66 65 66 72 65 65 28 | 26 72 6f 6f 74 5f 61 72 |afefree(|&root_ar|
|00003470| 72 61 79 29 3b 0a 58 20 | 20 20 20 73 61 66 65 66 |ray);.X | safef|
|00003480| 72 65 65 28 26 73 75 62 | 6a 65 63 74 5f 61 72 72 |ree(&sub|ject_arr|
|00003490| 61 79 29 3b 0a 58 0a 58 | 20 20 20 20 72 65 74 75 |ay);.X.X| retu|
|000034a0| 72 6e 20 31 3b 0a 58 7d | 0a 58 0a 58 2f 2a 20 52 |rn 1;.X}|.X.X/* R|
|000034b0| 65 61 64 20 74 68 65 20 | 6d 65 73 73 61 67 65 2d |ead the |message-|
|000034c0| 69 64 20 73 74 72 69 6e | 67 73 20 61 6e 64 20 61 |id strin|gs and a|
|000034d0| 74 74 61 63 68 20 74 68 | 65 6d 20 74 6f 20 65 61 |ttach th|em to ea|
|000034e0| 63 68 20 61 72 74 69 63 | 6c 65 2e 20 20 54 68 65 |ch artic|le. The|
|000034f0| 20 64 61 74 61 0a 58 2a | 2a 20 66 6f 72 6d 61 74 | data.X*|* format|
|00003500| 20 63 6f 6e 73 69 73 74 | 73 20 6f 66 20 74 68 65 | consist|s of the|
|00003510| 20 6d 75 73 68 65 64 2d | 74 6f 67 65 74 68 65 72 | mushed-|together|
|00003520| 20 6e 75 6c 6c 2d 74 65 | 72 6d 69 6e 61 74 65 64 | null-te|rminated|
|00003530| 20 73 74 72 69 6e 67 73 | 20 28 61 20 64 6f 6d 61 | strings| (a doma|
|00003540| 69 6e 0a 58 2a 2a 20 6e | 61 6d 65 20 66 6f 6c 6c |in.X** n|ame foll|
|00003550| 6f 77 65 64 20 62 79 20 | 61 6c 6c 20 69 74 73 20 |owed by |all its |
|00003560| 75 6e 69 71 75 65 2d 69 | 64 20 70 72 65 66 69 78 |unique-i|d prefix|
|00003570| 65 73 29 20 61 6e 64 20 | 74 68 65 6e 20 74 68 65 |es) and |then the|
|00003580| 20 61 72 74 69 63 6c 65 | 20 6f 66 66 73 65 74 73 | article| offsets|
|00003590| 0a 58 2a 2a 20 74 6f 20 | 77 68 69 63 68 20 74 68 |.X** to |which th|
|000035a0| 65 79 20 62 65 6c 6f 6e | 67 2e 20 20 54 68 65 20 |ey belon|g. The |
|000035b0| 66 69 72 73 74 20 64 6f | 6d 61 69 6e 20 6e 61 6d |first do|main nam|
|000035c0| 65 20 77 61 73 20 6f 6d | 69 74 74 65 64 2c 20 61 |e was om|itted, a|
|000035d0| 73 20 69 74 20 69 73 20 | 74 68 65 0a 58 2a 2a 20 |s it is |the.X** |
|000035e0| 22 2e 75 6e 6b 6e 6f 77 | 6e 2e 22 20 64 6f 6d 61 |".unknow|n." doma|
|000035f0| 69 6e 20 66 6f 72 20 74 | 68 6f 73 65 20 74 72 75 |in for t|hose tru|
|00003600| 6c 79 20 77 65 69 72 64 | 20 6d 65 73 73 61 67 65 |ly weird| message|
|00003610| 2d 69 64 27 73 20 77 69 | 74 68 6f 75 74 20 27 40 |-id's wi|thout '@|
|00003620| 27 73 2e 0a 58 2a 2f 0a | 58 69 6e 74 0a 58 72 65 |'s..X*/.|Xint.Xre|
|00003630| 61 64 5f 69 64 73 28 29 | 0a 58 7b 0a 58 20 20 20 |ad_ids()|.X{.X |
|00003640| 20 72 65 67 69 73 74 65 | 72 20 44 4f 4d 41 49 4e | registe|r DOMAIN|
|00003650| 20 2a 64 6f 6d 61 69 6e | 2c 20 2a 6c 61 73 74 3b | *domain|, *last;|
|00003660| 0a 58 20 20 20 20 72 65 | 67 69 73 74 65 72 20 41 |.X re|gister A|
|00003670| 52 54 49 43 4c 45 20 2a | 61 72 74 69 63 6c 65 3b |RTICLE *|article;|
|00003680| 0a 58 20 20 20 20 72 65 | 67 69 73 74 65 72 20 63 |.X re|gister c|
|00003690| 68 61 72 20 2a 73 74 72 | 69 6e 67 5f 70 74 72 3b |har *str|ing_ptr;|
|000036a0| 0a 58 20 20 20 20 72 65 | 67 69 73 74 65 72 20 69 |.X re|gister i|
|000036b0| 6e 74 20 69 2c 20 63 6f | 75 6e 74 3b 0a 58 0a 58 |nt i, co|unt;.X.X|
|000036c0| 20 20 20 20 69 66 20 28 | 21 72 65 61 64 5f 69 74 | if (|!read_it|
|000036d0| 65 6d 28 26 73 74 72 69 | 6e 67 73 2c 20 74 6f 74 |em(&stri|ngs, tot|
|000036e0| 61 6c 2e 73 74 72 69 6e | 67 32 29 0a 58 20 20 20 |al.strin|g2).X |
|000036f0| 20 20 7c 7c 20 21 72 65 | 61 64 5f 69 74 65 6d 28 | || !re|ad_item(|
|00003700| 28 63 68 61 72 20 2a 2a | 29 26 69 64 73 2c 0a 58 |(char **|)&ids,.X|
|00003710| 09 09 20 20 20 28 4d 45 | 4d 5f 53 49 5a 45 29 28 |.. (ME|M_SIZE)(|
|00003720| 28 74 6f 74 61 6c 2e 61 | 72 74 69 63 6c 65 20 2b |(total.a|rticle +|
|00003730| 20 74 6f 74 61 6c 2e 64 | 6f 6d 61 69 6e 20 2b 20 | total.d|omain + |
|00003740| 31 29 0a 58 09 09 09 20 | 20 20 20 20 20 2a 20 73 |1).X... | * s|
|00003750| 69 7a 65 6f 66 20 28 57 | 4f 52 44 29 29 29 29 20 |izeof (W|ORD)))) |
|00003760| 7b 0a 58 09 72 65 74 75 | 72 6e 20 30 3b 0a 58 20 |{.X.retu|rn 0;.X |
|00003770| 20 20 20 7d 0a 58 0a 58 | 20 20 20 20 73 74 72 69 | }.X.X| stri|
|00003780| 6e 67 5f 70 74 72 20 3d | 20 73 74 72 69 6e 67 73 |ng_ptr =| strings|
|00003790| 3b 0a 58 20 20 20 20 73 | 74 72 69 6e 67 5f 65 6e |;.X s|tring_en|
|000037a0| 64 20 3d 20 73 74 72 69 | 6e 67 5f 70 74 72 20 2b |d = stri|ng_ptr +|
|000037b0| 20 74 6f 74 61 6c 2e 73 | 74 72 69 6e 67 32 3b 0a | total.s|tring2;.|
|000037c0| 58 0a 58 20 20 20 20 69 | 66 20 28 73 74 72 69 6e |X.X i|f (strin|
|000037d0| 67 5f 65 6e 64 5b 2d 31 | 5d 20 21 3d 20 27 5c 30 |g_end[-1|] != '\0|
|000037e0| 27 29 20 7b 0a 58 09 6c | 6f 67 5f 65 72 72 6f 72 |') {.X.l|og_error|
|000037f0| 28 22 73 65 63 6f 6e 64 | 20 73 74 72 69 6e 67 20 |("second| string |
|00003800| 74 61 62 6c 65 20 69 73 | 20 69 6e 76 61 6c 69 64 |table is| invalid|
|00003810| 2e 5c 6e 22 29 3b 0a 58 | 09 72 65 74 75 72 6e 20 |.\n");.X|.return |
|00003820| 30 3b 0a 58 20 20 20 20 | 7d 0a 58 0a 58 20 20 20 |0;.X |}.X.X |
|00003830| 20 6c 61 73 74 20 3d 20 | 26 75 6e 6b 5f 64 6f 6d | last = |&unk_dom|
|00003840| 61 69 6e 3b 0a 58 20 20 | 20 20 66 6f 72 20 28 69 |ain;.X | for (i|
|00003850| 20 3d 20 30 2c 20 63 6f | 75 6e 74 20 3d 20 74 6f | = 0, co|unt = to|
|00003860| 74 61 6c 2e 64 6f 6d 61 | 69 6e 20 2b 20 31 3b 20 |tal.doma|in + 1; |
|00003870| 63 6f 75 6e 74 2d 2d 3b | 20 69 2b 2b 29 20 7b 0a |count--;| i++) {.|
|00003880| 58 09 69 66 20 28 69 29 | 20 7b 0a 58 09 20 20 20 |X.if (i)| {.X. |
|00003890| 20 69 66 20 28 73 74 72 | 69 6e 67 5f 70 74 72 20 | if (str|ing_ptr |
|000038a0| 3e 3d 20 73 74 72 69 6e | 67 5f 65 6e 64 29 20 7b |>= strin|g_end) {|
|000038b0| 0a 58 09 09 6c 6f 67 5f | 65 72 72 6f 72 28 22 65 |.X..log_|error("e|
|000038c0| 72 72 6f 72 20 75 6e 70 | 61 63 6b 69 6e 67 20 64 |rror unp|acking d|
|000038d0| 6f 6d 61 69 6e 20 73 74 | 72 69 6e 67 73 2e 5c 6e |omain st|rings.\n|
|000038e0| 22 29 3b 0a 58 09 20 20 | 20 20 20 20 66 72 65 65 |");.X. | free|
|000038f0| 5f 70 61 72 74 69 61 6c | 3a 0a 58 09 09 6c 61 73 |_partial|:.X..las|
|00003900| 74 2d 3e 6c 69 6e 6b 20 | 3d 20 4e 75 6c 6c 28 44 |t->link |= Null(D|
|00003910| 4f 4d 41 49 4e 2a 29 3b | 0a 58 09 09 61 72 74 69 |OMAIN*);|.X..arti|
|00003920| 63 6c 65 20 3d 20 75 6e | 6b 5f 64 6f 6d 61 69 6e |cle = un|k_domain|
|00003930| 2e 69 64 73 3b 0a 58 09 | 09 77 68 69 6c 65 20 28 |.ids;.X.|.while (|
|00003940| 61 72 74 69 63 6c 65 29 | 20 7b 0a 58 09 09 20 20 |article)| {.X.. |
|00003950| 20 20 73 61 66 65 66 72 | 65 65 28 26 61 72 74 69 | safefr|ee(&arti|
|00003960| 63 6c 65 2d 3e 69 64 29 | 3b 0a 58 09 09 20 20 20 |cle->id)|;.X.. |
|00003970| 20 61 72 74 69 63 6c 65 | 20 3d 20 61 72 74 69 63 | article| = artic|
|00003980| 6c 65 2d 3e 69 64 5f 6c | 69 6e 6b 3b 0a 58 09 09 |le->id_l|ink;.X..|
|00003990| 7d 0a 58 09 09 64 6f 6d | 61 69 6e 20 3d 20 75 6e |}.X..dom|ain = un|
|000039a0| 6b 5f 64 6f 6d 61 69 6e | 2e 6c 69 6e 6b 3b 0a 58 |k_domain|.link;.X|
|000039b0| 09 09 77 68 69 6c 65 20 | 28 64 6f 6d 61 69 6e 29 |..while |(domain)|
|000039c0| 20 7b 0a 58 09 09 20 20 | 20 20 66 72 65 65 28 64 | {.X.. | free(d|
|000039d0| 6f 6d 61 69 6e 2d 3e 6e | 61 6d 65 29 3b 0a 58 09 |omain->n|ame);.X.|
|000039e0| 09 20 20 20 20 61 72 74 | 69 63 6c 65 20 3d 20 64 |. art|icle = d|
|000039f0| 6f 6d 61 69 6e 2d 3e 69 | 64 73 3b 0a 58 09 09 20 |omain->i|ds;.X.. |
|00003a00| 20 20 20 77 68 69 6c 65 | 20 28 61 72 74 69 63 6c | while| (articl|
|00003a10| 65 29 20 7b 0a 58 09 09 | 09 73 61 66 65 66 72 65 |e) {.X..|.safefre|
|00003a20| 65 28 26 61 72 74 69 63 | 6c 65 2d 3e 69 64 29 3b |e(&artic|le->id);|
|00003a30| 0a 58 09 09 09 61 72 74 | 69 63 6c 65 20 3d 20 61 |.X...art|icle = a|
|00003a40| 72 74 69 63 6c 65 2d 3e | 69 64 5f 6c 69 6e 6b 3b |rticle->|id_link;|
|00003a50| 0a 58 09 09 20 20 20 20 | 7d 0a 58 09 09 20 20 20 |.X.. |}.X.. |
|00003a60| 20 6c 61 73 74 20 3d 20 | 64 6f 6d 61 69 6e 3b 0a | last = |domain;.|
|00003a70| 58 09 09 20 20 20 20 64 | 6f 6d 61 69 6e 20 3d 20 |X.. d|omain = |
|00003a80| 64 6f 6d 61 69 6e 2d 3e | 6c 69 6e 6b 3b 0a 58 09 |domain->|link;.X.|
|00003a90| 09 20 20 20 20 66 72 65 | 65 28 6c 61 73 74 29 3b |. fre|e(last);|
|00003aa0| 0a 58 09 09 7d 0a 58 09 | 09 72 65 74 75 72 6e 20 |.X..}.X.|.return |
|00003ab0| 30 3b 0a 58 09 20 20 20 | 20 7d 0a 58 09 20 20 20 |0;.X. | }.X. |
|00003ac0| 20 64 6f 6d 61 69 6e 20 | 3d 20 28 44 4f 4d 41 49 | domain |= (DOMAI|
|00003ad0| 4e 2a 29 73 61 66 65 6d | 61 6c 6c 6f 63 28 73 69 |N*)safem|alloc(si|
|00003ae0| 7a 65 6f 66 20 28 44 4f | 4d 41 49 4e 29 29 3b 0a |zeof (DO|MAIN));.|
|00003af0| 58 09 20 20 20 20 67 69 | 76 65 5f 73 74 72 69 6e |X. gi|ve_strin|
|00003b00| 67 5f 74 6f 28 64 6f 6d | 61 69 6e 2d 3e 6e 61 6d |g_to(dom|ain->nam|
|00003b10| 65 29 3b 0a 58 09 20 20 | 20 20 6c 61 73 74 2d 3e |e);.X. | last->|
|00003b20| 6c 69 6e 6b 20 3d 20 64 | 6f 6d 61 69 6e 3b 0a 58 |link = d|omain;.X|
|00003b30| 09 7d 20 65 6c 73 65 20 | 7b 0a 58 09 20 20 20 20 |.} else |{.X. |
|00003b40| 64 6f 6d 61 69 6e 20 3d | 20 26 75 6e 6b 5f 64 6f |domain =| &unk_do|
|00003b50| 6d 61 69 6e 3b 0a 58 09 | 7d 0a 58 09 69 66 20 28 |main;.X.|}.X.if (|
|00003b60| 69 64 73 5b 69 5d 20 3d | 3d 20 2d 31 29 20 7b 0a |ids[i] =|= -1) {.|
|00003b70| 58 09 20 20 20 20 64 6f | 6d 61 69 6e 2d 3e 69 64 |X. do|main->id|
|00003b80| 73 20 3d 20 4e 75 6c 6c | 61 72 74 3b 0a 58 09 7d |s = Null|art;.X.}|
|00003b90| 20 65 6c 73 65 20 7b 0a | 58 09 20 20 20 20 69 66 | else {.|X. if|
|00003ba0| 20 28 69 64 73 5b 69 5d | 20 3c 20 30 20 7c 7c 20 | (ids[i]| < 0 || |
|00003bb0| 69 64 73 5b 69 5d 20 3e | 3d 20 74 6f 74 61 6c 2e |ids[i] >|= total.|
|00003bc0| 61 72 74 69 63 6c 65 29 | 20 7b 0a 58 09 20 20 20 |article)| {.X. |
|00003bd0| 20 20 20 69 64 5f 65 72 | 72 6f 72 3a 0a 58 09 09 | id_er|ror:.X..|
|00003be0| 6c 6f 67 5f 65 72 72 6f | 72 28 22 65 72 72 6f 72 |log_erro|r("error|
|00003bf0| 20 69 6e 20 69 64 20 61 | 72 72 61 79 2e 5c 6e 22 | in id a|rray.\n"|
|00003c00| 29 3b 0a 58 09 09 64 6f | 6d 61 69 6e 2d 3e 69 64 |);.X..do|main->id|
|00003c10| 73 20 3d 20 4e 75 6c 6c | 61 72 74 3b 0a 58 09 09 |s = Null|art;.X..|
|00003c20| 67 6f 74 6f 20 66 72 65 | 65 5f 70 61 72 74 69 61 |goto fre|e_partia|
|00003c30| 6c 3b 0a 58 09 20 20 20 | 20 7d 0a 58 09 20 20 20 |l;.X. | }.X. |
|00003c40| 20 61 72 74 69 63 6c 65 | 20 3d 20 61 72 74 69 63 | article| = artic|
|00003c50| 6c 65 5f 61 72 72 61 79 | 5b 69 64 73 5b 69 5d 5d |le_array|[ids[i]]|
|00003c60| 3b 0a 58 09 20 20 20 20 | 64 6f 6d 61 69 6e 2d 3e |;.X. |domain->|
|00003c70| 69 64 73 20 3d 20 61 72 | 74 69 63 6c 65 3b 0a 58 |ids = ar|ticle;.X|
|00003c80| 09 20 20 20 20 66 6f 72 | 20 28 3b 3b 29 20 7b 0a |. for| (;;) {.|
|00003c90| 58 09 09 69 66 20 28 73 | 74 72 69 6e 67 5f 70 74 |X..if (s|tring_pt|
|00003ca0| 72 20 3e 3d 20 73 74 72 | 69 6e 67 5f 65 6e 64 29 |r >= str|ing_end)|
|00003cb0| 20 7b 0a 58 09 09 20 20 | 20 20 6c 6f 67 5f 65 72 | {.X.. | log_er|
|00003cc0| 72 6f 72 28 22 65 72 72 | 6f 72 20 75 6e 70 61 63 |ror("err|or unpac|
|00003cd0| 6b 69 6e 67 20 64 6f 6d | 61 69 6e 20 73 74 72 69 |king dom|ain stri|
|00003ce0| 6e 67 73 2e 5c 6e 22 29 | 3b 0a 58 09 09 20 20 20 |ngs.\n")|;.X.. |
|00003cf0| 20 61 72 74 69 63 6c 65 | 2d 3e 69 64 20 3d 20 4e | article|->id = N|
|00003d00| 75 6c 6c 63 68 3b 0a 58 | 09 09 20 20 20 20 61 72 |ullch;.X|.. ar|
|00003d10| 74 69 63 6c 65 2d 3e 69 | 64 5f 6c 69 6e 6b 20 3d |ticle->i|d_link =|
|00003d20| 20 4e 75 6c 6c 61 72 74 | 3b 0a 58 09 09 20 20 20 | Nullart|;.X.. |
|00003d30| 20 67 6f 74 6f 20 66 72 | 65 65 5f 70 61 72 74 69 | goto fr|ee_parti|
|00003d40| 61 6c 3b 0a 58 09 09 7d | 0a 58 09 09 67 69 76 65 |al;.X..}|.X..give|
|00003d50| 5f 73 74 72 69 6e 67 5f | 74 6f 28 61 72 74 69 63 |_string_|to(artic|
|00003d60| 6c 65 2d 3e 69 64 29 3b | 0a 58 09 09 61 72 74 69 |le->id);|.X..arti|
|00003d70| 63 6c 65 2d 3e 64 6f 6d | 61 69 6e 20 3d 20 64 6f |cle->dom|ain = do|
|00003d80| 6d 61 69 6e 3b 0a 58 09 | 09 69 66 20 28 2b 2b 69 |main;.X.|.if (++i|
|00003d90| 20 3e 3d 20 74 6f 74 61 | 6c 2e 61 72 74 69 63 6c | >= tota|l.articl|
|00003da0| 65 20 2b 20 74 6f 74 61 | 6c 2e 64 6f 6d 61 69 6e |e + tota|l.domain|
|00003db0| 20 2b 20 21 63 6f 75 6e | 74 29 20 7b 0a 58 09 09 | + !coun|t) {.X..|
|00003dc0| 20 20 20 20 6c 6f 67 5f | 65 72 72 6f 72 28 22 6f | log_|error("o|
|00003dd0| 76 65 72 72 61 6e 20 69 | 64 20 61 72 72 61 79 20 |verran i|d array |
|00003de0| 75 6e 70 61 63 6b 69 6e | 67 20 64 6f 6d 61 69 6e |unpackin|g domain|
|00003df0| 73 2e 5c 6e 22 29 3b 0a | 58 09 09 20 20 20 20 61 |s.\n");.|X.. a|
|00003e00| 72 74 69 63 6c 65 2d 3e | 69 64 5f 6c 69 6e 6b 20 |rticle->|id_link |
|00003e10| 3d 20 4e 75 6c 6c 61 72 | 74 3b 0a 58 09 09 20 20 |= Nullar|t;.X.. |
|00003e20| 20 20 67 6f 74 6f 20 66 | 72 65 65 5f 70 61 72 74 | goto f|ree_part|
|00003e30| 69 61 6c 3b 0a 58 09 09 | 7d 0a 58 09 09 69 66 20 |ial;.X..|}.X..if |
|00003e40| 28 69 64 73 5b 69 5d 20 | 21 3d 20 2d 31 29 20 7b |(ids[i] |!= -1) {|
|00003e50| 0a 58 09 09 20 20 20 20 | 69 66 20 28 69 64 73 5b |.X.. |if (ids[|
|00003e60| 69 5d 20 3c 20 30 20 7c | 7c 20 69 64 73 5b 69 5d |i] < 0 ||| ids[i]|
|00003e70| 20 3e 3d 20 74 6f 74 61 | 6c 2e 61 72 74 69 63 6c | >= tota|l.articl|
|00003e80| 65 29 20 7b 0a 58 09 09 | 09 67 6f 74 6f 20 69 64 |e) {.X..|.goto id|
|00003e90| 5f 65 72 72 6f 72 3b 0a | 58 09 09 20 20 20 20 7d |_error;.|X.. }|
|00003ea0| 0a 58 09 09 20 20 20 20 | 61 72 74 69 63 6c 65 20 |.X.. |article |
|00003eb0| 3d 20 61 72 74 69 63 6c | 65 2d 3e 69 64 5f 6c 69 |= articl|e->id_li|
|00003ec0| 6e 6b 20 3d 20 61 72 74 | 69 63 6c 65 5f 61 72 72 |nk = art|icle_arr|
|00003ed0| 61 79 5b 69 64 73 5b 69 | 5d 5d 3b 0a 58 09 09 7d |ay[ids[i|]];.X..}|
|00003ee0| 20 65 6c 73 65 20 7b 0a | 58 09 09 20 20 20 20 61 | else {.|X.. a|
|00003ef0| 72 74 69 63 6c 65 2d 3e | 69 64 5f 6c 69 6e 6b 20 |rticle->|id_link |
|00003f00| 3d 20 4e 75 6c 6c 61 72 | 74 3b 0a 58 09 09 20 20 |= Nullar|t;.X.. |
|00003f10| 20 20 62 72 65 61 6b 3b | 0a 58 09 09 7d 0a 58 09 | break;|.X..}.X.|
|00003f20| 20 20 20 20 7d 0a 58 09 | 7d 0a 58 09 6c 61 73 74 | }.X.|}.X.last|
|00003f30| 20 3d 20 64 6f 6d 61 69 | 6e 3b 0a 58 20 20 20 20 | = domai|n;.X |
|00003f40| 7d 0a 58 20 20 20 20 6c | 61 73 74 2d 3e 6c 69 6e |}.X l|ast->lin|
|00003f50| 6b 20 3d 20 4e 75 6c 6c | 28 44 4f 4d 41 49 4e 2a |k = Null|(DOMAIN*|
|00003f60| 29 3b 0a 58 20 20 20 20 | 73 61 66 65 66 72 65 65 |);.X |safefree|
|00003f70| 28 26 69 64 73 29 3b 0a | 58 20 20 20 20 73 61 66 |(&ids);.|X saf|
|00003f80| 65 66 72 65 65 28 26 73 | 74 72 69 6e 67 73 29 3b |efree(&s|trings);|
|00003f90| 0a 58 0a 58 20 20 20 20 | 72 65 74 75 72 6e 20 31 |.X.X |return 1|
|00003fa0| 3b 0a 58 7d 0a 58 0a 58 | 2f 2a 20 41 6e 64 20 66 |;.X}.X.X|/* And f|
|00003fb0| 69 6e 61 6c 6c 79 2c 20 | 70 6f 69 6e 74 20 61 6c |inally, |point al|
|00003fc0| 6c 20 74 68 65 20 72 6f | 6f 74 73 20 61 74 20 74 |l the ro|ots at t|
|00003fd0| 68 65 69 72 20 72 6f 6f | 74 20 61 72 74 69 63 6c |heir roo|t articl|
|00003fe0| 65 73 20 61 6e 64 20 67 | 65 74 20 72 69 64 0a 58 |es and g|et rid.X|
|00003ff0| 2a 2a 20 6f 66 20 61 6e | 79 74 68 69 6e 67 20 6c |** of an|ything l|
|00004000| 65 66 74 20 6f 76 65 72 | 20 74 68 61 74 20 77 61 |eft over| that wa|
|00004010| 73 20 75 73 65 64 20 74 | 6f 20 61 69 64 20 6f 75 |s used t|o aid ou|
|00004020| 72 20 75 6e 70 61 63 6b | 69 6e 67 2e 0a 58 2a 2f |r unpack|ing..X*/|
|00004030| 0a 58 76 6f 69 64 0a 58 | 74 77 65 61 6b 5f 72 6f |.Xvoid.X|tweak_ro|
|00004040| 6f 74 73 28 29 0a 58 7b | 0a 58 20 20 20 20 72 65 |ots().X{|.X re|
|00004050| 67 69 73 74 65 72 20 52 | 4f 4f 54 20 2a 72 6f 6f |gister R|OOT *roo|
|00004060| 74 3b 0a 58 0a 58 20 20 | 20 20 66 6f 72 20 28 72 |t;.X.X | for (r|
|00004070| 6f 6f 74 20 3d 20 72 6f | 6f 74 5f 72 6f 6f 74 3b |oot = ro|ot_root;|
|00004080| 20 72 6f 6f 74 3b 20 72 | 6f 6f 74 20 3d 20 72 6f | root; r|oot = ro|
|00004090| 6f 74 2d 3e 6c 69 6e 6b | 29 20 7b 0a 58 09 72 6f |ot->link|) {.X.ro|
|000040a0| 6f 74 2d 3e 61 72 74 69 | 63 6c 65 73 20 3d 20 61 |ot->arti|cles = a|
|000040b0| 72 74 69 63 6c 65 5f 61 | 72 72 61 79 5b 72 6f 6f |rticle_a|rray[roo|
|000040c0| 74 2d 3e 73 65 71 5d 3b | 0a 58 20 20 20 20 7d 0a |t->seq];|.X }.|
|000040d0| 58 20 20 20 20 73 61 66 | 65 66 72 65 65 28 26 61 |X saf|efree(&a|
|000040e0| 75 74 68 6f 72 5f 61 72 | 72 61 79 29 3b 0a 58 20 |uthor_ar|ray);.X |
|000040f0| 20 20 20 73 61 66 65 66 | 72 65 65 28 26 61 72 74 | safef|ree(&art|
|00004100| 69 63 6c 65 5f 61 72 72 | 61 79 29 3b 0a 58 7d 0a |icle_arr|ay);.X}.|
|00004110| 58 0a 58 2f 2a 20 41 20 | 73 68 6f 72 74 68 61 6e |X.X/* A |shorthan|
|00004120| 64 20 66 6f 72 20 72 65 | 61 64 69 6e 67 20 61 20 |d for re|ading a |
|00004130| 63 68 75 6e 6b 20 6f 66 | 20 74 68 65 20 66 69 6c |chunk of| the fil|
|00004140| 65 20 69 6e 74 6f 20 61 | 20 6d 61 6c 6c 6f 63 27 |e into a| malloc'|
|00004150| 65 64 20 61 72 72 61 79 | 2e 0a 58 2a 2f 0a 58 69 |ed array|..X*/.Xi|
|00004160| 6e 74 0a 58 72 65 61 64 | 5f 69 74 65 6d 28 64 65 |nt.Xread|_item(de|
|00004170| 73 74 2c 20 6c 65 6e 29 | 0a 58 63 68 61 72 20 2a |st, len)|.Xchar *|
|00004180| 2a 64 65 73 74 3b 0a 58 | 4d 45 4d 5f 53 49 5a 45 |*dest;.X|MEM_SIZE|
|00004190| 20 6c 65 6e 3b 0a 58 7b | 0a 58 20 20 20 20 69 6e | len;.X{|.X in|
|000041a0| 74 20 72 65 74 3b 0a 58 | 0a 58 20 20 20 20 2a 64 |t ret;.X|.X *d|
|000041b0| 65 73 74 20 3d 20 73 61 | 66 65 6d 61 6c 6c 6f 63 |est = sa|femalloc|
|000041c0| 28 6c 65 6e 29 3b 0a 58 | 20 20 20 20 72 65 74 20 |(len);.X| ret |
|000041d0| 3d 20 66 72 65 61 64 28 | 2a 64 65 73 74 2c 20 31 |= fread(|*dest, 1|
|000041e0| 2c 20 28 69 6e 74 29 6c | 65 6e 2c 20 66 70 5f 69 |, (int)l|en, fp_i|
|000041f0| 6e 29 3b 0a 58 20 20 20 | 20 69 66 20 28 72 65 74 |n);.X | if (ret|
|00004200| 20 21 3d 20 6c 65 6e 29 | 20 7b 0a 58 09 6c 6f 67 | != len)| {.X.log|
|00004210| 5f 65 72 72 6f 72 28 22 | 6f 6e 6c 79 20 72 65 61 |_error("|only rea|
|00004220| 64 20 25 6c 64 20 62 79 | 74 65 73 20 69 6e 73 74 |d %ld by|tes inst|
|00004230| 65 61 64 20 6f 66 20 25 | 6c 64 2e 5c 6e 22 2c 0a |ead of %|ld.\n",.|
|00004240| 58 09 09 28 6c 6f 6e 67 | 29 72 65 74 2c 20 28 6c |X..(long|)ret, (l|
|00004250| 6f 6e 67 29 6c 65 6e 29 | 3b 0a 58 09 66 72 65 65 |ong)len)|;.X.free|
|00004260| 28 2a 64 65 73 74 29 3b | 0a 58 09 2a 64 65 73 74 |(*dest);|.X.*dest|
|00004270| 20 3d 20 4e 75 6c 6c 63 | 68 3b 0a 58 09 72 65 74 | = Nullc|h;.X.ret|
|00004280| 75 72 6e 20 30 3b 0a 58 | 20 20 20 20 7d 0a 58 20 |urn 0;.X| }.X |
|00004290| 20 20 20 72 65 74 75 72 | 6e 20 31 3b 0a 58 7d 0a | retur|n 1;.X}.|
|000042a0| 45 4e 44 5f 4f 46 5f 46 | 49 4c 45 0a 69 66 20 74 |END_OF_F|ILE.if t|
|000042b0| 65 73 74 20 31 35 33 31 | 34 20 2d 6e 65 20 60 77 |est 1531|4 -ne `w|
|000042c0| 63 20 2d 63 20 3c 27 6d | 74 2d 72 65 61 64 2e 63 |c -c <'m|t-read.c|
|000042d0| 27 60 3b 20 74 68 65 6e | 0a 20 20 20 20 65 63 68 |'`; then|. ech|
|000042e0| 6f 20 73 68 61 72 3a 20 | 5c 22 27 6d 74 2d 72 65 |o shar: |\"'mt-re|
|000042f0| 61 64 2e 63 27 5c 22 20 | 75 6e 70 61 63 6b 65 64 |ad.c'\" |unpacked|
|00004300| 20 77 69 74 68 20 77 72 | 6f 6e 67 20 73 69 7a 65 | with wr|ong size|
|00004310| 21 0a 66 69 0a 23 20 65 | 6e 64 20 6f 66 20 27 6d |!.fi.# e|nd of 'm|
|00004320| 74 2d 72 65 61 64 2e 63 | 27 0a 66 69 0a 69 66 20 |t-read.c|'.fi.if |
|00004330| 74 65 73 74 20 2d 66 20 | 27 6d 74 68 72 65 61 64 |test -f |'mthread|
|00004340| 73 2e 38 27 20 2d 61 20 | 22 24 7b 31 7d 22 20 21 |s.8' -a |"${1}" !|
|00004350| 3d 20 22 2d 63 22 20 3b | 20 74 68 65 6e 20 0a 20 |= "-c" ;| then . |
|00004360| 20 65 63 68 6f 20 73 68 | 61 72 3a 20 57 69 6c 6c | echo sh|ar: Will|
|00004370| 20 6e 6f 74 20 63 6c 6f | 62 62 65 72 20 65 78 69 | not clo|bber exi|
|00004380| 73 74 69 6e 67 20 66 69 | 6c 65 20 5c 22 27 6d 74 |sting fi|le \"'mt|
|00004390| 68 72 65 61 64 73 2e 38 | 27 5c 22 0a 65 6c 73 65 |hreads.8|'\".else|
|000043a0| 0a 65 63 68 6f 20 73 68 | 61 72 3a 20 45 78 74 72 |.echo sh|ar: Extr|
|000043b0| 61 63 74 69 6e 67 20 5c | 22 27 6d 74 68 72 65 61 |acting \|"'mthrea|
|000043c0| 64 73 2e 38 27 5c 22 20 | 5c 28 31 30 31 35 33 20 |ds.8'\" |\(10153 |
|000043d0| 63 68 61 72 61 63 74 65 | 72 73 5c 29 0a 73 65 64 |characte|rs\).sed|
|000043e0| 20 22 73 2f 5e 58 2f 2f | 22 20 3e 27 6d 74 68 72 | "s/^X//|" >'mthr|
|000043f0| 65 61 64 73 2e 38 27 20 | 3c 3c 27 45 4e 44 5f 4f |eads.8' |<<'END_O|
|00004400| 46 5f 46 49 4c 45 27 0a | 58 2e 5c 22 20 24 49 64 |F_FILE'.|X.\" $Id|
|00004410| 3a 20 6d 74 68 72 65 61 | 64 73 2e 38 2c 76 20 33 |: mthrea|ds.8,v 3|
|00004420| 2e 30 20 31 39 39 33 2f | 30 39 2f 31 34 20 30 30 |.0 1993/|09/14 00|
|00004430| 3a 31 34 3a 31 31 20 64 | 61 76 69 73 6f 6e 20 54 |:14:11 d|avison T|
|00004440| 72 6e 20 24 0a 58 2e 5c | 22 20 0a 58 2e 64 65 20 |rn $.X.\|" .X.de |
|00004450| 53 68 0a 58 2e 62 72 0a | 58 2e 6e 65 20 35 0a 58 |Sh.X.br.|X.ne 5.X|
|00004460| 2e 50 50 0a 58 5c 66 42 | 5c 5c 24 31 5c 66 52 0a |.PP.X\fB|\\$1\fR.|
|00004470| 58 2e 50 50 0a 58 2e 2e | 0a 58 2e 64 65 20 53 70 |X.PP.X..|.X.de Sp|
|00004480| 0a 58 2e 69 66 20 74 20 | 2e 73 70 20 2e 35 76 0a |.X.if t |.sp .5v.|
|00004490| 58 2e 69 66 20 6e 20 2e | 73 70 0a 58 2e 2e 0a 58 |X.if n .|sp.X...X|
|000044a0| 2e 5c 22 20 75 6e 62 72 | 65 61 6b 61 62 6c 65 20 |.\" unbr|eakable |
|000044b0| 64 61 73 68 2e 0a 58 2e | 74 72 20 5c 28 2a 57 2d |dash..X.|tr \(*W-|
|000044c0| 7c 5c 28 62 76 5c 2a 28 | 54 72 0a 58 2e 69 65 20 ||\(bv\*(|Tr.X.ie |
|000044d0| 6e 20 5c 7b 5c 0a 58 2e | 64 73 20 2d 2d 20 5c 28 |n \{\.X.|ds -- \(|
|000044e0| 2a 57 2d 0a 58 2e 69 66 | 20 28 5c 6e 28 2e 48 3d |*W-.X.if| (\n(.H=|
|000044f0| 34 75 29 26 28 31 6d 3d | 32 34 75 29 20 2e 64 73 |4u)&(1m=|24u) .ds|
|00004500| 20 2d 2d 20 5c 28 2a 57 | 5c 68 27 2d 31 32 75 27 | -- \(*W|\h'-12u'|
|00004510| 5c 28 2a 57 5c 68 27 2d | 31 32 75 27 2d 5c 22 20 |\(*W\h'-|12u'-\" |
|00004520| 64 69 61 62 6c 6f 20 31 | 30 20 70 69 74 63 68 0a |diablo 1|0 pitch.|
|00004530| 58 2e 69 66 20 28 5c 6e | 28 2e 48 3d 34 75 29 26 |X.if (\n|(.H=4u)&|
|00004540| 28 31 6d 3d 32 30 75 29 | 20 2e 64 73 20 2d 2d 20 |(1m=20u)| .ds -- |
|00004550| 5c 28 2a 57 5c 68 27 2d | 31 32 75 27 5c 28 2a 57 |\(*W\h'-|12u'\(*W|
|00004560| 5c 68 27 2d 38 75 27 2d | 5c 22 20 64 69 61 62 6c |\h'-8u'-|\" diabl|
|00004570| 6f 20 31 32 20 70 69 74 | 63 68 0a 58 2e 64 73 20 |o 12 pit|ch.X.ds |
|00004580| 4c 22 20 22 22 0a 58 2e | 64 73 20 52 22 20 22 22 |L" "".X.|ds R" ""|
|00004590| 0a 58 2e 64 73 20 4c 27 | 20 27 0a 58 2e 64 73 20 |.X.ds L'| '.X.ds |
|000045a0| 52 27 20 27 0a 58 27 62 | 72 5c 7d 0a 58 2e 65 6c |R' '.X'b|r\}.X.el|
|000045b0| 5c 7b 5c 0a 58 2e 64 73 | 20 2d 2d 20 5c 28 65 6d |\{\.X.ds| -- \(em|
|000045c0| 5c 7c 0a 58 2e 74 72 20 | 5c 2a 28 54 72 0a 58 2e |\|.X.tr |\*(Tr.X.|
|000045d0| 64 73 20 4c 22 20 60 60 | 0a 58 2e 64 73 20 52 22 |ds L" ``|.X.ds R"|
|000045e0| 20 27 27 0a 58 2e 64 73 | 20 4c 27 20 60 0a 58 2e | ''.X.ds| L' `.X.|
|000045f0| 64 73 20 52 27 20 27 0a | 58 27 62 72 5c 7d 0a 58 |ds R' '.|X'br\}.X|
|00004600| 2e 54 48 20 4d 54 48 52 | 45 41 44 53 20 38 20 4c |.TH MTHR|EADS 8 L|
|00004610| 4f 43 41 4c 0a 58 2e 55 | 43 20 36 0a 58 2e 53 48 |OCAL.X.U|C 6.X.SH|
|00004620| 20 4e 41 4d 45 0a 58 6d | 74 68 72 65 61 64 73 20 | NAME.Xm|threads |
|00004630| 2d 20 74 68 72 65 61 64 | 65 64 20 64 61 74 61 62 |- thread|ed datab|
|00004640| 61 73 65 20 6d 61 6e 61 | 67 65 72 20 66 6f 72 20 |ase mana|ger for |
|00004650| 74 72 6e 0a 58 2e 53 48 | 20 53 59 4e 4f 50 53 49 |trn.X.SH| SYNOPSI|
|00004660| 53 0a 58 2e 42 20 6d 74 | 68 72 65 61 64 73 20 5b |S.X.B mt|hreads [|
|00004670| 2d 64 5b 4d 4d 5d 5d 20 | 5b 2d 65 5b 48 48 4d 4d |-d[MM]] |[-e[HHMM|
|00004680| 5d 5d 20 5b 2d 61 63 44 | 66 6b 6e 73 74 76 7a 5d |]] [-acD|fknstvz]|
|00004690| 20 5b 68 69 65 72 61 72 | 63 68 79 5f 6c 69 73 74 | [hierar|chy_list|
|000046a0| 5d 0a 58 2e 53 48 20 44 | 45 53 43 52 49 50 54 49 |].X.SH D|ESCRIPTI|
|000046b0| 4f 4e 0a 58 2e 49 20 4d | 74 68 72 65 61 64 73 0a |ON.X.I M|threads.|
|000046c0| 58 6d 61 6e 61 67 65 73 | 20 74 68 65 20 74 68 72 |Xmanages| the thr|
|000046d0| 65 61 64 20 66 69 6c 65 | 73 20 74 68 61 74 20 61 |ead file|s that a|
|000046e0| 72 65 20 75 73 65 64 20 | 62 79 20 74 68 65 0a 58 |re used |by the.X|
|000046f0| 2e 49 52 20 74 72 6e 20 | 28 31 29 0a 58 6e 65 77 |.IR trn |(1).Xnew|
|00004700| 73 72 65 61 64 65 72 2e | 0a 58 5c 2a 28 4c 22 54 |sreader.|.X\*(L"T|
|00004710| 68 72 65 61 64 20 66 69 | 6c 65 73 5c 2a 28 52 22 |hread fi|les\*(R"|
|00004720| 20 61 72 65 20 75 73 65 | 64 20 74 6f 20 73 74 6f | are use|d to sto|
|00004730| 72 65 20 69 6e 66 6f 72 | 6d 61 74 69 6f 6e 20 61 |re infor|mation a|
|00004740| 62 6f 75 74 20 74 68 65 | 20 6e 65 77 73 0a 58 61 |bout the| news.Xa|
|00004750| 72 74 69 63 6c 65 73 20 | 61 6e 64 20 68 6f 77 20 |rticles |and how |
|00004760| 74 68 65 79 20 61 72 65 | 20 61 6c 6c 20 72 65 6c |they are| all rel|
|00004770| 61 74 65 64 20 74 6f 20 | 6f 6e 65 20 61 6e 6f 74 |ated to |one anot|
|00004780| 68 65 72 2e 0a 58 2e 50 | 50 0a 58 2e 49 20 4d 74 |her..X.P|P.X.I Mt|
|00004790| 68 72 65 61 64 73 0a 58 | 73 68 6f 75 6c 64 20 62 |hreads.X|should b|
|000047a0| 65 20 72 75 6e 20 70 65 | 72 69 6f 64 69 63 61 6c |e run pe|riodical|
|000047b0| 6c 79 20 74 6f 20 75 70 | 64 61 74 65 20 74 68 65 |ly to up|date the|
|000047c0| 20 74 68 72 65 61 64 20 | 64 61 74 61 62 61 73 65 | thread |database|
|000047d0| 20 61 73 20 6e 65 77 20 | 6e 65 77 73 20 61 72 72 | as new |news arr|
|000047e0| 69 76 65 73 2e 0a 58 49 | 74 20 63 61 6e 20 62 65 |ives..XI|t can be|
|000047f0| 20 72 75 6e 20 69 6e 20 | 73 69 6e 67 6c 65 2d 70 | run in |single-p|
|00004800| 61 73 73 20 6d 6f 64 65 | 20 28 6f 75 74 20 6f 66 |ass mode| (out of|
|00004810| 20 63 72 6f 6e 29 2c 20 | 69 6e 20 64 61 65 6d 6f | cron), |in daemo|
|00004820| 6e 20 6d 6f 64 65 2c 20 | 6f 72 20 69 6e 20 61 0a |n mode, |or in a.|
|00004830| 58 63 6f 6d 62 69 6e 61 | 74 69 6f 6e 20 6f 66 20 |Xcombina|tion of |
|00004840| 74 68 65 20 74 77 6f 2e | 0a 58 41 20 73 69 74 65 |the two.|.XA site|
|00004850| 20 74 68 61 74 20 67 65 | 74 73 20 69 74 73 20 6e | that ge|ts its n|
|00004860| 65 77 73 20 66 65 65 64 | 20 64 75 72 69 6e 67 20 |ews feed| during |
|00004870| 74 68 65 20 6e 69 67 68 | 74 20 6d 61 79 20 6a 75 |the nigh|t may ju|
|00004880| 73 74 20 77 61 6e 74 20 | 74 6f 20 72 75 6e 20 6d |st want |to run m|
|00004890| 74 68 72 65 61 64 73 0a | 58 6f 6e 63 65 20 61 20 |threads.|Xonce a |
|000048a0| 64 61 79 20 28 74 72 6e | 20 77 69 6c 6c 20 68 61 |day (trn| will ha|
|000048b0| 6e 64 6c 65 20 61 6e 79 | 20 6c 6f 63 61 6c 20 70 |ndle any| local p|
|000048c0| 6f 73 74 69 6e 67 73 20 | 74 68 61 74 20 73 68 6f |ostings |that sho|
|000048d0| 77 20 75 70 20 62 65 74 | 77 65 65 6e 20 70 61 73 |w up bet|ween pas|
|000048e0| 73 65 73 29 2e 0a 58 49 | 66 20 6d 6f 72 65 20 70 |ses)..XI|f more p|
|000048f0| 72 6f 63 65 73 73 69 6e | 67 20 69 73 20 6e 65 65 |rocessin|g is nee|
|00004900| 64 65 64 2c 20 65 69 74 | 68 65 72 20 72 75 6e 20 |ded, eit|her run |
|00004910| 6d 74 68 72 65 61 64 73 | 0a 58 6d 6f 72 65 20 6f |mthreads|.Xmore o|
|00004920| 66 74 65 6e 20 6f 72 20 | 72 75 6e 20 69 74 20 69 |ften or |run it i|
|00004930| 6e 20 64 61 65 6d 6f 6e | 20 6d 6f 64 65 2e 0a 58 |n daemon| mode..X|
|00004940| 49 6e 20 64 61 65 6d 6f | 6e 20 6d 6f 64 65 2c 20 |In daemo|n mode, |
|00004950| 61 20 62 61 63 6b 67 72 | 6f 75 6e 64 20 70 72 6f |a backgr|ound pro|
|00004960| 63 65 73 73 20 69 73 20 | 66 6f 72 6b 65 64 20 6f |cess is |forked o|
|00004970| 66 66 20 74 68 61 74 20 | 77 61 6b 65 73 20 75 70 |ff that |wakes up|
|00004980| 20 65 76 65 72 79 20 31 | 30 0a 58 6d 69 6e 75 74 | every 1|0.Xminut|
|00004990| 65 73 20 28 62 79 20 64 | 65 66 61 75 6c 74 29 20 |es (by d|efault) |
|000049a0| 74 6f 20 63 68 65 63 6b | 20 69 66 20 74 68 65 20 |to check| if the |
|000049b0| 61 63 74 69 76 65 20 66 | 69 6c 65 20 68 61 73 20 |active f|ile has |
|000049c0| 62 65 65 6e 20 75 70 64 | 61 74 65 64 2e 0a 58 57 |been upd|ated..XW|
|000049d0| 68 65 6e 20 74 68 65 20 | 6d 74 68 72 65 61 64 73 |hen the |mthreads|
|000049e0| 20 64 61 65 6d 6f 6e 20 | 69 73 20 73 6c 65 65 70 | daemon |is sleep|
|000049f0| 69 6e 67 20 62 65 74 77 | 65 65 6e 20 70 61 73 73 |ing betw|een pass|
|00004a00| 65 73 2c 20 69 74 20 69 | 73 20 70 6f 73 73 69 62 |es, it i|s possib|
|00004a10| 6c 65 0a 58 74 6f 20 72 | 75 6e 20 61 6e 20 6d 74 |le.Xto r|un an mt|
|00004a20| 68 72 65 61 64 73 20 73 | 69 6e 67 6c 65 20 70 61 |hreads s|ingle pa|
|00004a30| 73 73 2e 0a 58 54 68 69 | 73 20 69 73 20 6f 66 74 |ss..XThi|s is oft|
|00004a40| 65 6e 20 75 73 65 66 75 | 6c 20 69 66 20 79 6f 75 |en usefu|l if you|
|00004a50| 20 77 69 73 68 20 74 6f | 20 72 75 6e 20 61 6e 20 | wish to| run an |
|00004a60| 65 6e 68 61 6e 63 65 64 | 20 65 78 70 69 72 65 20 |enhanced| expire |
|00004a70| 70 61 73 73 20 6d 6f 72 | 65 20 74 68 61 6e 0a 58 |pass mor|e than.X|
|00004a80| 6f 6e 63 65 20 61 20 64 | 61 79 20 28 73 65 65 20 |once a d|ay (see |
|00004a90| 74 68 65 20 5c 2d 63 20 | 61 6e 64 20 5c 2d 65 20 |the \-c |and \-e |
|00004aa0| 6f 70 74 69 6f 6e 73 29 | 2e 0a 58 2e 53 48 20 49 |options)|..X.SH I|
|00004ab0| 4e 53 54 41 4c 4c 41 54 | 49 4f 4e 0a 58 2e 49 20 |NSTALLAT|ION.X.I |
|00004ac0| 4d 74 68 72 65 61 64 73 | 0a 58 69 73 20 69 6e 73 |Mthreads|.Xis ins|
|00004ad0| 74 61 6c 6c 65 64 20 69 | 6e 20 74 68 65 20 50 52 |talled i|n the PR|
|00004ae0| 49 56 4c 49 42 20 64 69 | 72 65 63 74 6f 72 79 20 |IVLIB di|rectory |
|00004af0| 63 68 6f 73 65 6e 20 64 | 75 72 69 6e 67 20 63 6f |chosen d|uring co|
|00004b00| 6e 66 69 67 75 72 61 74 | 69 6f 6e 2e 0a 58 57 68 |nfigurat|ion..XWh|
|00004b10| 65 6e 20 69 74 20 69 73 | 20 72 75 6e 20 66 6f 72 |en it is| run for|
|00004b20| 20 74 68 65 20 66 69 72 | 73 74 20 74 69 6d 65 2c | the fir|st time,|
|00004b30| 20 69 74 20 77 69 6c 6c | 20 61 75 74 6f 6d 61 74 | it will| automat|
|00004b40| 69 63 61 6c 6c 79 20 63 | 72 65 61 74 65 20 61 20 |ically c|reate a |
|00004b50| 66 69 6c 65 20 63 61 6c | 6c 65 64 0a 58 2e 49 20 |file cal|led.X.I |
|00004b60| 61 63 74 69 76 65 32 0a | 58 69 6e 20 74 68 65 20 |active2.|Xin the |
|00004b70| 73 61 6d 65 20 64 69 72 | 65 63 74 6f 72 79 2e 0a |same dir|ectory..|
|00004b80| 58 54 68 69 73 20 66 69 | 6c 65 20 69 73 20 65 73 |XThis fi|le is es|
|00004b90| 73 65 6e 74 69 61 6c 6c | 79 20 61 20 63 6f 70 79 |sentiall|y a copy|
|00004ba0| 20 6f 66 20 74 68 65 20 | 61 63 74 69 76 65 20 66 | of the |active f|
|00004bb0| 69 6c 65 20 74 68 61 74 | 20 6b 65 65 70 73 20 74 |ile that| keeps t|
|00004bc0| 68 65 20 6e 65 77 73 67 | 72 6f 75 70 0a 58 74 6f |he newsg|roup.Xto|
|00004bd0| 74 61 6c 73 20 66 72 6f | 6d 20 74 68 65 20 6c 61 |tals fro|m the la|
|00004be0| 73 74 20 72 75 6e 20 69 | 6e 20 6f 6e 65 20 70 6c |st run i|n one pl|
|00004bf0| 61 63 65 2e 0a 58 49 74 | 20 69 73 20 61 6c 73 6f |ace..XIt| is also|
|00004c00| 20 75 73 65 64 20 74 6f | 20 63 68 6f 6f 73 65 20 | used to| choose |
|00004c10| 77 68 69 63 68 20 67 72 | 6f 75 70 73 20 61 72 65 |which gr|oups are|
|00004c20| 20 74 6f 20 62 65 20 70 | 72 6f 63 65 73 73 65 64 | to be p|rocessed|
|00004c30| 20 69 6e 74 6f 20 74 68 | 72 65 61 64 20 66 69 6c | into th|read fil|
|00004c40| 65 73 2e 0a 58 41 6c 6c | 20 67 72 6f 75 70 73 20 |es..XAll| groups |
|00004c50| 73 74 61 72 74 20 6f 75 | 74 20 61 73 20 5c 2a 28 |start ou|t as \*(|
|00004c60| 4c 22 75 6e 74 68 72 65 | 61 64 65 64 5c 2a 28 52 |L"unthre|aded\*(R|
|00004c70| 22 20 75 6e 6c 65 73 73 | 20 74 68 65 79 20 61 72 |" unless| they ar|
|00004c80| 65 20 74 75 72 6e 65 64 | 20 6f 6e 20 77 69 74 68 |e turned| on with|
|00004c90| 0a 58 61 20 63 6f 6d 6d | 61 6e 64 20 6c 69 6b 65 |.Xa comm|and like|
|00004ca0| 3a 0a 58 2e 49 50 0a 58 | 6d 74 68 72 65 61 64 73 |:.X.IP.X|mthreads|
|00004cb0| 20 61 6c 6c 0a 58 2e 50 | 50 0a 58 77 68 69 63 68 | all.X.P|P.Xwhich|
|00004cc0| 20 77 6f 75 6c 64 20 63 | 72 65 61 74 65 20 74 68 | would c|reate th|
|00004cd0| 72 65 61 64 20 66 69 6c | 65 20 66 6f 72 20 61 6c |read fil|e for al|
|00004ce0| 6c 20 74 68 65 20 67 72 | 6f 75 70 73 2e 0a 58 46 |l the gr|oups..XF|
|00004cf0| 6f 72 20 74 65 73 74 69 | 6e 67 20 70 75 72 70 6f |or testi|ng purpo|
|00004d00| 73 65 73 20 69 74 20 69 | 73 20 61 20 67 6f 6f 64 |ses it i|s a good|
|00004d10| 20 69 64 65 61 20 74 6f | 20 73 74 61 72 74 20 6f | idea to| start o|
|00004d20| 75 74 20 73 6d 61 6c 6c | 20 77 69 74 68 20 61 20 |ut small| with a |
|00004d30| 63 6f 6d 6d 61 6e 64 0a | 58 6c 69 6b 65 3a 0a 58 |command.|Xlike:.X|
|00004d40| 2e 49 50 0a 58 6d 74 68 | 72 65 61 64 73 20 6e 65 |.IP.Xmth|reads ne|
|00004d50| 77 73 0a 58 2e 50 50 0a | 58 77 68 69 63 68 20 77 |ws.X.PP.|Xwhich w|
|00004d60| 6f 75 6c 64 20 74 68 72 | 65 61 64 20 6f 6e 6c 79 |ould thr|ead only|
|00004d70| 20 74 68 65 20 6e 65 77 | 73 20 68 69 65 72 61 72 | the new|s hierar|
|00004d80| 63 68 79 2e 0a 58 54 68 | 72 65 61 64 20 70 72 6f |chy..XTh|read pro|
|00004d90| 63 65 73 73 69 6e 67 20 | 63 61 6e 20 62 65 20 74 |cessing |can be t|
|00004da0| 75 72 6e 65 64 20 6f 6e | 20 6f 72 20 6f 66 66 20 |urned on| or off |
|00004db0| 66 6f 72 20 69 6e 64 69 | 76 69 64 75 61 6c 20 67 |for indi|vidual g|
|00004dc0| 72 6f 75 70 73 20 6f 72 | 20 65 6e 74 69 72 65 0a |roups or| entire.|
|00004dd0| 58 68 69 65 72 61 72 63 | 68 69 65 73 20 62 79 20 |Xhierarc|hies by |
|00004de0| 73 70 65 63 69 66 79 69 | 6e 67 20 74 68 65 20 67 |specifyi|ng the g|
|00004df0| 72 6f 75 70 73 20 69 6e | 20 61 20 73 79 6e 74 61 |roups in| a synta|
|00004e00| 78 20 76 65 72 79 20 73 | 69 6d 69 6c 61 72 20 74 |x very s|imilar t|
|00004e10| 6f 20 74 68 61 74 20 75 | 73 65 64 0a 58 69 6e 20 |o that u|sed.Xin |
|00004e20| 74 68 65 20 73 79 73 20 | 66 69 6c 65 2e 0a 58 46 |the sys |file..XF|
|00004e30| 6f 72 20 65 78 61 6d 70 | 6c 65 2c 20 74 6f 20 74 |or examp|le, to t|
|00004e40| 75 72 6e 20 6f 6e 20 61 | 6c 6c 20 6f 66 20 73 6f |urn on a|ll of so|
|00004e50| 63 20 61 6e 64 20 74 61 | 6c 6b 20 65 78 63 65 70 |c and ta|lk excep|
|00004e60| 74 20 66 6f 72 20 74 61 | 6c 6b 2e 70 6f 6c 69 74 |t for ta|lk.polit|
|00004e70| 69 63 73 2c 20 61 6e 64 | 0a 58 74 6f 20 74 75 72 |ics, and|.Xto tur|
|00004e80| 6e 20 6f 66 66 20 6e 65 | 77 73 2e 6c 69 73 74 73 |n off ne|ws.lists|
|00004e90| 2c 20 75 73 65 20 74 68 | 65 20 66 6f 6c 6c 6f 77 |, use th|e follow|
|00004ea0| 69 6e 67 20 63 6f 6d 6d | 61 6e 64 20 6f 6e 63 65 |ing comm|and once|
|00004eb0| 3a 0a 58 2e 49 50 0a 58 | 6d 74 68 72 65 61 64 73 |:.X.IP.X|mthreads|
|00004ec0| 20 73 6f 63 2c 74 61 6c | 6b 2c 21 74 61 6c 6b 2e | soc,tal|k,!talk.|
|00004ed0| 70 6f 6c 69 74 69 63 73 | 2c 21 6e 65 77 73 2e 6c |politics|,!news.l|
|00004ee0| 69 73 74 73 0a 58 2e 50 | 50 0a 58 49 66 20 6d 74 |ists.X.P|P.XIf mt|
|00004ef0| 68 72 65 61 64 73 20 63 | 6f 6d 70 6c 61 69 6e 73 |hreads c|omplains|
|00004f00| 20 74 68 61 74 20 61 6e | 6f 74 68 65 72 20 6d 74 | that an|other mt|
|00004f10| 68 72 65 61 64 73 20 70 | 72 6f 63 65 73 73 20 69 |hreads p|rocess i|
|00004f20| 73 20 61 6c 72 65 61 64 | 79 20 72 75 6e 6e 69 6e |s alread|y runnin|
|00004f30| 67 2c 0a 58 79 6f 75 20 | 63 61 6e 20 75 73 65 20 |g,.Xyou |can use |
|00004f40| 74 68 65 20 5c 2d 63 20 | 6f 70 74 69 6f 6e 20 74 |the \-c |option t|
|00004f50| 6f 20 74 65 6c 6c 20 69 | 74 20 74 6f 20 63 6f 6e |o tell i|t to con|
|00004f60| 74 69 6e 75 65 20 74 72 | 79 69 6e 67 20 74 6f 20 |tinue tr|ying to |
|00004f70| 6c 6f 63 6b 20 69 6e 73 | 74 65 61 64 0a 58 6f 66 |lock ins|tead.Xof|
|00004f80| 20 67 69 76 69 6e 67 20 | 75 70 2e 0a 58 2e 50 50 | giving |up..X.PP|
|00004f90| 0a 58 4f 6e 63 65 20 61 | 6c 6c 20 74 68 65 20 64 |.XOnce a|ll the d|
|00004fa0| 65 73 69 72 65 64 20 67 | 72 6f 75 70 73 20 61 72 |esired g|roups ar|
|00004fb0| 65 20 74 75 72 6e 65 64 | 20 6f 6e 2c 20 74 68 65 |e turned| on, the|
|00004fc0| 20 68 69 65 72 61 72 63 | 68 79 20 6c 69 73 74 20 | hierarc|hy list |
|00004fd0| 73 68 6f 75 6c 64 20 62 | 65 0a 58 6f 6d 69 74 74 |should b|e.Xomitt|
|00004fe0| 65 64 20 74 6f 20 61 6c | 6c 6f 77 20 6d 74 68 72 |ed to al|low mthr|
|00004ff0| 65 61 64 73 20 74 6f 20 | 70 72 6f 63 65 73 73 20 |eads to |process |
|00005000| 61 6c 6c 20 65 6e 61 62 | 6c 65 64 20 67 72 6f 75 |all enab|led grou|
|00005010| 70 73 2e 0a 58 49 74 20 | 63 61 6e 20 62 65 20 75 |ps..XIt |can be u|
|00005020| 73 65 64 2c 20 68 6f 77 | 65 76 65 72 2c 20 69 6e |sed, how|ever, in|
|00005030| 20 63 6f 6e 6a 75 6e 63 | 74 69 6f 6e 20 77 69 74 | conjunc|tion wit|
|00005040| 68 20 74 68 65 20 5c 2d | 61 20 6f 70 74 69 6f 6e |h the \-|a option|
|00005050| 20 74 6f 20 63 75 73 74 | 6f 6d 69 7a 65 0a 58 77 | to cust|omize.Xw|
|00005060| 68 69 63 68 20 6e 65 77 | 20 67 72 6f 75 70 73 20 |hich new| groups |
|00005070| 67 65 74 20 74 75 72 6e | 65 64 20 6f 6e 20 61 73 |get turn|ed on as|
|00005080| 20 74 68 65 79 20 61 72 | 65 20 63 72 65 61 74 65 | they ar|e create|
|00005090| 64 2e 0a 58 2e 53 48 20 | 4c 4f 47 47 49 4e 47 0a |d..X.SH |LOGGING.|
|000050a0| 58 41 73 20 6d 74 68 72 | 65 61 64 73 20 65 78 65 |XAs mthr|eads exe|
|000050b0| 63 75 74 65 73 20 73 6f | 6d 65 20 73 74 61 74 75 |cutes so|me statu|
|000050c0| 73 20 69 6e 66 6f 72 6d | 61 74 69 6f 6e 20 28 69 |s inform|ation (i|
|000050d0| 6e 63 6c 75 64 69 6e 67 | 20 65 72 72 6f 72 20 6d |ncluding| error m|
|000050e0| 65 73 73 61 67 65 73 29 | 20 0a 58 69 73 20 70 6c |essages)| .Xis pl|
|000050f0| 61 63 65 64 20 69 6e 0a | 58 74 68 65 20 66 69 6c |aced in.|Xthe fil|
|00005100| 65 20 6d 74 2e 6c 6f 67 | 20 69 6e 20 74 68 65 20 |e mt.log| in the |
|00005110| 50 52 49 56 4c 49 42 20 | 64 69 72 65 63 74 6f 72 |PRIVLIB |director|
|00005120| 79 2c 20 75 6e 6c 65 73 | 73 20 79 6f 75 20 63 68 |y, unles|s you ch|
|00005130| 6f 73 65 20 74 6f 20 75 | 73 65 20 53 59 53 4c 4f |ose to u|se SYSLO|
|00005140| 47 2e 0a 58 54 68 69 73 | 20 66 69 6c 65 20 77 69 |G..XThis| file wi|
|00005150| 6c 6c 20 67 72 6f 77 20 | 77 69 74 68 6f 75 74 20 |ll grow |without |
|00005160| 62 6f 75 6e 64 73 2c 20 | 61 6e 64 20 73 68 6f 75 |bounds, |and shou|
|00005170| 6c 64 20 62 65 20 73 63 | 61 6e 6e 65 64 20 70 65 |ld be sc|anned pe|
|00005180| 72 69 6f 64 69 63 61 6c | 6c 79 20 66 6f 72 0a 58 |riodical|ly for.X|
|00005190| 65 72 72 6f 72 73 2c 20 | 61 6e 64 20 74 72 69 6d |errors, |and trim|
|000051a0| 6d 65 64 20 69 6e 20 73 | 69 7a 65 20 77 68 65 6e |med in s|ize when|
|000051b0| 20 69 74 20 67 72 6f 77 | 73 20 74 6f 6f 20 6c 61 | it grow|s too la|
|000051c0| 72 67 65 2e 0a 58 53 65 | 65 20 74 68 65 20 73 68 |rge..XSe|e the sh|
|000051d0| 65 6c 6c 20 73 63 72 69 | 70 74 0a 58 2e 49 20 6d |ell scri|pt.X.I m|
|000051e0| 74 2e 63 68 65 63 6b 0a | 58 66 6f 72 20 61 6e 20 |t.check.|Xfor an |
|000051f0| 6d 74 2e 6c 6f 67 20 6d | 61 69 6e 74 61 69 6e 65 |mt.log m|aintaine|
|00005200| 72 20 74 68 61 74 20 77 | 69 6c 6c 20 73 65 6e 64 |r that w|ill send|
|00005210| 20 6d 61 69 6c 20 69 66 | 20 69 74 20 66 69 6e 64 | mail if| it find|
|00005220| 73 20 64 61 74 61 62 61 | 73 65 20 65 72 72 6f 72 |s databa|se error|
|00005230| 73 2e 0a 58 2e 53 48 20 | 4f 50 54 49 4f 4e 53 0a |s..X.SH |OPTIONS.|
|00005240| 58 2e 54 50 20 35 0a 58 | 2e 42 20 5c 2d 61 0a 58 |X.TP 5.X|.B \-a.X|
|00005250| 69 73 20 75 73 65 64 20 | 74 6f 20 61 75 74 6f 6d |is used |to autom|
|00005260| 61 74 69 63 61 6c 6c 79 | 20 74 75 72 6e 20 6f 6e |atically| turn on|
|00005270| 20 74 68 72 65 61 64 20 | 70 72 6f 63 65 73 73 69 | thread |processi|
|00005280| 6e 67 20 66 6f 72 20 6e | 65 77 20 6e 65 77 73 20 |ng for n|ew news |
|00005290| 67 72 6f 75 70 73 20 61 | 73 0a 58 74 68 65 79 20 |groups a|s.Xthey |
|000052a0| 61 72 65 20 63 72 65 61 | 74 65 64 2e 0a 58 57 68 |are crea|ted..XWh|
|000052b0| 65 6e 20 74 68 69 73 20 | 6f 70 74 69 6f 6e 20 69 |en this |option i|
|000052c0| 73 20 73 70 65 63 69 66 | 69 65 64 2c 20 74 68 65 |s specif|ied, the|
|000052d0| 20 68 69 65 72 61 72 63 | 68 79 20 6c 69 73 74 20 | hierarc|hy list |
|000052e0| 69 73 20 75 73 65 64 20 | 74 6f 20 6c 69 6d 69 74 |is used |to limit|
|000052f0| 0a 58 77 68 69 63 68 20 | 6e 65 77 20 67 72 6f 75 |.Xwhich |new grou|
|00005300| 70 73 20 67 65 74 20 65 | 6e 61 62 6c 65 64 20 28 |ps get e|nabled (|
|00005310| 6f 6d 69 74 74 69 6e 67 | 20 74 68 65 20 68 69 65 |omitting| the hie|
|00005320| 72 61 72 63 68 79 20 6c | 69 73 74 20 69 73 20 74 |rarchy l|ist is t|
|00005330| 68 65 20 73 61 6d 65 0a | 58 61 73 20 73 70 65 63 |he same.|Xas spec|
|00005340| 69 66 79 69 6e 67 20 5c | 2a 28 4c 22 61 6c 6c 5c |ifying \|*(L"all\|
|00005350| 2a 28 52 22 29 2e 0a 58 | 54 68 65 20 64 65 66 61 |*(R")..X|The defa|
|00005360| 75 6c 74 20 77 69 74 68 | 6f 75 74 20 5c 2d 61 20 |ult with|out \-a |
|00005370| 69 73 20 74 6f 20 6c 65 | 61 76 65 20 6e 65 77 20 |is to le|ave new |
|00005380| 67 72 6f 75 70 73 20 75 | 6e 74 68 72 65 61 64 65 |groups u|nthreade|
|00005390| 64 2e 0a 58 2e 54 50 20 | 35 0a 58 2e 42 20 5c 2d |d..X.TP |5.X.B \-|
|000053a0| 63 0a 58 77 69 6c 6c 20 | 63 6f 6e 74 69 6e 75 65 |c.Xwill |continue|
|000053b0| 20 74 72 79 69 6e 67 20 | 74 6f 20 6c 6f 63 6b 20 | trying |to lock |
|000053c0| 74 68 65 20 6d 74 68 72 | 65 61 64 73 20 64 61 74 |the mthr|eads dat|
|000053d0| 61 62 61 73 65 20 66 6f | 72 20 61 20 73 69 6e 67 |abase fo|r a sing|
|000053e0| 6c 65 20 70 61 73 73 0a | 58 69 6e 73 74 65 61 64 |le pass.|Xinstead|
|000053f0| 20 6f 66 20 67 69 76 69 | 6e 67 20 75 70 2e 0a 58 | of givi|ng up..X|
|00005400| 54 68 69 73 20 69 73 20 | 75 73 65 66 75 6c 20 66 |This is |useful f|
|00005410| 6f 72 20 72 75 6e 6e 69 | 6e 67 20 73 70 65 63 69 |or runni|ng speci|
|00005420| 61 6c 20 63 6f 6d 6d 61 | 6e 64 73 20 6f 75 74 20 |al comma|nds out |
|00005430| 6f 66 20 63 72 6f 6e 20 | 77 68 69 6c 65 20 61 6e |of cron |while an|
|00005440| 20 6d 74 68 72 65 61 64 | 73 0a 58 64 61 65 6d 6f | mthread|s.Xdaemo|
|00005450| 6e 20 69 73 20 61 63 74 | 69 76 65 2e 0a 58 2e 54 |n is act|ive..X.T|
|00005460| 50 20 35 0a 58 2e 42 20 | 5c 2d 44 0a 58 73 70 65 |P 5.X.B |\-D.Xspe|
|00005470| 63 69 66 69 65 73 20 64 | 65 62 75 67 20 70 72 6f |cifies d|ebug pro|
|00005480| 63 65 73 73 69 6e 67 2e | 0a 58 41 6e 79 20 65 72 |cessing.|.XAny er|
|00005490| 72 6f 72 73 20 65 6e 63 | 6f 75 6e 74 65 72 65 64 |rors enc|ountered|
|000054a0| 20 72 65 61 64 69 6e 67 | 20 61 20 74 68 72 65 61 | reading| a threa|
|000054b0| 64 20 66 69 6c 65 20 77 | 69 6c 6c 20 72 65 6e 61 |d file w|ill rena|
|000054c0| 6d 65 20 74 68 65 20 6f | 66 66 65 6e 64 69 6e 67 |me the o|ffending|
|000054d0| 0a 58 66 69 6c 65 20 74 | 6f 20 5c 2a 28 4c 22 62 |.Xfile t|o \*(L"b|
|000054e0| 61 64 2e 72 65 61 64 5c | 2a 28 52 22 2e 0a 58 41 |ad.read\|*(R"..XA|
|000054f0| 6e 79 20 65 72 72 6f 72 | 73 20 64 65 74 65 63 74 |ny error|s detect|
|00005500| 65 64 20 77 68 69 6c 65 | 20 67 65 6e 65 72 61 74 |ed while| generat|
|00005510| 69 6e 67 20 61 20 6e 65 | 77 20 74 68 72 65 61 64 |ing a ne|w thread|
|00005520| 20 66 69 6c 65 20 77 69 | 6c 6c 20 72 65 6e 61 6d | file wi|ll renam|
|00005530| 65 20 74 68 65 0a 58 66 | 69 6c 65 20 74 6f 20 5c |e the.Xf|ile to \|
|00005540| 2a 28 4c 22 62 61 64 2e | 77 72 69 74 65 5c 2a 28 |*(L"bad.|write\*(|
|00005550| 52 22 2e 0a 58 49 66 20 | 6d 6f 72 65 20 74 68 61 |R"..XIf |more tha|
|00005560| 6e 20 6f 6e 65 20 27 44 | 27 20 69 73 20 73 70 65 |n one 'D|' is spe|
|00005570| 63 69 66 69 65 64 2c 20 | 65 61 63 68 20 67 72 6f |cified, |each gro|
|00005580| 75 70 27 73 20 6e 61 6d | 65 20 69 73 20 6f 75 74 |up's nam|e is out|
|00005590| 70 75 74 20 69 6e 74 6f | 0a 58 74 68 65 20 6c 6f |put into|.Xthe lo|
|000055a0| 67 20 66 69 6c 65 20 62 | 65 66 6f 72 65 20 69 74 |g file b|efore it|
|000055b0| 20 69 73 20 70 72 6f 63 | 65 73 73 65 64 2e 0a 58 | is proc|essed..X|
|000055c0| 2e 54 50 20 35 0a 58 2e | 42 20 5c 2d 64 0a 58 69 |.TP 5.X.|B \-d.Xi|
|000055d0| 73 20 75 73 65 64 20 74 | 6f 20 73 70 65 63 69 66 |s used t|o specif|
|000055e0| 79 20 74 68 65 20 64 61 | 65 6d 6f 6e 20 6d 6f 64 |y the da|emon mod|
|000055f0| 65 2c 20 77 68 65 72 65 | 0a 58 2e 49 20 6d 74 68 |e, where|.X.I mth|
|00005600| 72 65 61 64 73 0a 58 66 | 6f 72 6b 73 20 61 20 62 |reads.Xf|orks a b|
|00005610| 61 63 6b 67 72 6f 75 6e | 64 20 74 61 73 6b 20 74 |ackgroun|d task t|
|00005620| 68 61 74 20 70 65 72 69 | 6f 64 69 63 61 6c 6c 79 |hat peri|odically|
|00005630| 20 77 61 6b 65 73 20 75 | 70 20 61 6e 64 20 63 68 | wakes u|p and ch|
|00005640| 65 63 6b 73 20 66 6f 72 | 20 61 6e 20 75 70 64 61 |ecks for| an upda|
|00005650| 74 65 64 0a 58 61 63 74 | 69 76 65 20 66 69 6c 65 |ted.Xact|ive file|
|00005660| 2e 0a 58 54 68 65 20 6e | 75 6d 62 65 72 20 6f 66 |..XThe n|umber of|
|00005670| 20 6d 69 6e 75 74 65 73 | 20 74 6f 20 77 61 69 74 | minutes| to wait|
|00005680| 20 61 66 74 65 72 20 74 | 68 65 20 63 6f 6d 70 6c | after t|he compl|
|00005690| 65 74 69 6f 6e 20 6f 66 | 20 74 68 65 20 6c 61 73 |etion of| the las|
|000056a0| 74 20 70 61 73 73 20 63 | 61 6e 0a 58 62 65 20 73 |t pass c|an.Xbe s|
|000056b0| 70 65 63 69 66 69 65 64 | 20 61 66 74 65 72 20 74 |pecified| after t|
|000056c0| 68 65 20 27 2d 64 27 20 | 6f 70 74 69 6f 6e 20 28 |he '-d' |option (|
|000056d0| 65 2e 67 2e 20 2d 64 32 | 30 29 2c 20 6f 74 68 65 |e.g. -d2|0), othe|
|000056e0| 72 77 69 73 65 20 69 74 | 20 77 69 6c 6c 20 64 65 |rwise it| will de|
|000056f0| 66 61 75 6c 74 20 74 6f | 0a 58 31 30 20 6d 69 6e |fault to|.X10 min|
|00005700| 75 74 65 73 2e 0a 58 2e | 54 50 20 35 0a 58 2e 42 |utes..X.|TP 5.X.B|
|00005710| 20 5c 2d 65 0a 58 74 65 | 6c 6c 73 0a 58 2e 49 20 | \-e.Xte|lls.X.I |
|00005720| 6d 74 68 72 65 61 64 73 | 0a 58 74 6f 20 72 75 6e |mthreads|.Xto run|
|00005730| 20 61 6e 20 65 6e 68 61 | 6e 63 65 64 20 65 78 70 | an enha|nced exp|
|00005740| 69 72 61 74 69 6f 6e 20 | 63 68 65 63 6b 20 6f 6e |iration |check on|
|00005750| 20 74 68 65 20 64 61 74 | 61 62 61 73 65 2e 0a 58 | the dat|abase..X|
|00005760| 57 69 74 68 6f 75 74 20 | 74 68 69 73 20 6f 70 74 |Without |this opt|
|00005770| 69 6f 6e 2c 20 6f 6e 6c | 79 20 61 72 74 69 63 6c |ion, onl|y articl|
|00005780| 65 73 20 62 65 6c 6f 77 | 20 74 68 65 20 6d 69 6e |es below| the min|
|00005790| 69 6d 75 6d 20 66 69 65 | 6c 64 20 69 6e 20 74 68 |imum fie|ld in th|
|000057a0| 65 20 61 63 74 69 76 65 | 0a 58 66 69 6c 65 20 61 |e active|.Xfile a|
|000057b0| 72 65 20 65 78 70 69 72 | 65 64 2e 0a 58 57 69 74 |re expir|ed..XWit|
|000057c0| 68 20 74 68 69 73 20 6f | 70 74 69 6f 6e 2c 20 6d |h this o|ption, m|
|000057d0| 74 68 72 65 61 64 73 20 | 77 69 6c 6c 20 70 65 72 |threads |will per|
|000057e0| 69 6f 64 69 63 61 6c 6c | 79 20 6c 69 73 74 20 61 |iodicall|y list a|
|000057f0| 6c 6c 20 74 68 65 20 61 | 72 74 69 63 6c 65 20 6e |ll the a|rticle n|
|00005800| 75 6d 62 65 72 73 0a 58 | 74 6f 20 73 65 65 20 77 |umbers.X|to see w|
|00005810| 68 69 63 68 20 6f 6e 65 | 73 20 61 63 74 75 61 6c |hich one|s actual|
|00005820| 6c 79 20 65 78 69 73 74 | 2e 0a 58 49 6e 20 73 69 |ly exist|..XIn si|
|00005830| 6e 67 6c 65 2d 70 61 73 | 73 20 6d 6f 64 65 20 74 |ngle-pas|s mode t|
|00005840| 68 65 0a 58 2e 42 20 2d | 65 0a 58 6f 70 74 69 6f |he.X.B -|e.Xoptio|
|00005850| 6e 20 61 6c 77 61 79 73 | 20 61 66 66 65 63 74 73 |n always| affects|
|00005860| 20 74 68 65 20 63 75 72 | 72 65 6e 74 20 70 61 73 | the cur|rent pas|
|00005870| 73 20 5c 2a 28 2d 2d 20 | 75 73 65 20 69 74 0a 58 |s \*(-- |use it.X|
|00005880| 61 74 20 6c 65 61 73 65 | 20 6f 6e 63 65 20 61 20 |at lease| once a |
|00005890| 64 61 79 20 61 66 74 65 | 72 20 65 78 70 69 72 65 |day afte|r expire|
|000058a0| 20 68 61 73 20 72 75 6e | 2e 0a 58 49 6e 20 64 61 | has run|..XIn da|
|000058b0| 65 6d 6f 6e 20 6d 6f 64 | 65 2c 20 74 68 65 0a 58 |emon mod|e, the.X|
|000058c0| 2e 42 20 2d 65 0a 58 6f | 70 74 69 6f 6e 20 77 69 |.B -e.Xo|ption wi|
|000058d0| 6c 6c 20 63 61 75 73 65 | 20 6f 6e 65 20 70 61 73 |ll cause| one pas|
|000058e0| 73 20 61 20 64 61 79 20 | 74 6f 20 62 65 20 74 68 |s a day |to be th|
|000058f0| 65 20 65 6e 68 61 6e 63 | 65 64 20 65 78 70 69 72 |e enhanc|ed expir|
|00005900| 65 20 70 61 73 73 2e 0a | 58 42 79 20 64 65 66 61 |e pass..|XBy defa|
|00005910| 75 6c 74 2c 20 74 68 69 | 73 20 69 73 20 74 68 65 |ult, thi|s is the|
|00005920| 20 66 69 72 73 74 20 74 | 69 6d 65 20 6d 74 68 72 | first t|ime mthr|
|00005930| 65 61 64 73 20 77 61 6b | 65 73 20 75 70 20 61 66 |eads wak|es up af|
|00005940| 74 65 72 20 31 32 3a 33 | 30 20 61 6d 2e 0a 58 49 |ter 12:3|0 am..XI|
|00005950| 66 20 61 20 64 69 66 66 | 65 72 65 6e 74 20 74 69 |f a diff|erent ti|
|00005960| 6d 65 20 69 73 20 64 65 | 73 69 72 65 64 2c 20 69 |me is de|sired, i|
|00005970| 74 20 63 61 6e 20 62 65 | 20 73 70 65 63 69 66 69 |t can be| specifi|
|00005980| 65 64 20 69 6e 20 74 68 | 65 20 66 6f 72 6d 20 48 |ed in th|e form H|
|00005990| 48 4d 4d 20 0a 58 28 65 | 2e 67 2e 20 2d 65 32 33 |HMM .X(e|.g. -e23|
|000059a0| 35 39 29 2e 0a 58 2e 54 | 50 20 35 0a 58 2e 42 20 |59)..X.T|P 5.X.B |
|000059b0| 2d 66 0a 58 69 73 20 75 | 73 65 64 20 74 6f 20 66 |-f.Xis u|sed to f|
|000059c0| 6f 72 63 65 0a 58 2e 49 | 20 6d 74 68 72 65 61 64 |orce.X.I| mthread|
|000059d0| 73 0a 58 74 6f 20 6f 70 | 65 6e 20 65 61 63 68 20 |s.Xto op|en each |
|000059e0| 61 6e 64 20 65 76 65 72 | 79 20 74 68 72 65 61 64 |and ever|y thread|
|000059f0| 20 66 69 6c 65 20 74 6f | 20 73 65 65 20 77 68 69 | file to| see whi|
|00005a00| 63 68 20 6f 6e 65 73 20 | 72 65 61 6c 6c 79 20 6e |ch ones |really n|
|00005a10| 65 65 64 20 74 6f 20 62 | 65 0a 58 75 70 64 61 74 |eed to b|e.Xupdat|
|00005a20| 65 64 2c 20 6e 6f 74 20 | 6a 75 73 74 20 74 68 65 |ed, not |just the|
|00005a30| 20 6f 6e 65 73 20 74 68 | 61 74 20 64 69 66 66 65 | ones th|at diffe|
|00005a40| 72 20 69 6e 20 74 68 65 | 20 61 63 74 69 76 65 2f |r in the| active/|
|00005a50| 61 63 74 69 76 65 32 20 | 63 6f 6d 70 61 72 69 73 |active2 |comparis|
|00005a60| 6f 6e 2e 0a 58 49 74 20 | 77 69 6c 6c 20 61 6c 73 |on..XIt |will als|
|00005a70| 6f 20 72 65 6d 6f 76 65 | 20 61 6e 79 20 65 78 74 |o remove| any ext|
|00005a80| 72 61 6e 65 6f 75 73 20 | 74 68 72 65 61 64 20 66 |raneous |thread f|
|00005a90| 69 6c 65 73 20 66 72 6f | 6d 20 75 6e 74 68 72 65 |iles fro|m unthre|
|00005aa0| 61 64 65 64 20 67 72 6f | 75 70 73 0a 58 28 77 68 |aded gro|ups.X(wh|
|00005ab0| 69 63 68 20 73 68 6f 75 | 6c 64 20 6f 6e 6c 79 20 |ich shou|ld only |
|00005ac0| 6f 63 63 75 72 20 69 66 | 20 79 6f 75 20 6d 61 6e |occur if| you man|
|00005ad0| 75 61 6c 6c 79 20 63 68 | 61 6e 67 65 20 74 68 65 |ually ch|ange the|
|00005ae0| 20 61 63 74 69 76 65 32 | 20 66 69 6c 65 29 2e 0a | active2| file)..|
|00005af0| 58 54 68 69 73 20 6f 70 | 74 69 6f 6e 20 73 68 6f |XThis op|tion sho|
|00005b00| 75 6c 64 20 6f 6e 6c 79 | 20 62 65 20 75 73 65 64 |uld only| be used|
|00005b10| 20 77 68 65 6e 20 6d 61 | 6e 69 70 75 6c 61 74 69 | when ma|nipulati|
|00005b20| 6e 67 20 74 68 65 20 74 | 68 72 65 61 64 20 66 69 |ng the t|hread fi|
|00005b30| 6c 65 73 20 69 6e 0a 58 | 75 6e 6f 72 74 68 6f 64 |les in.X|unorthod|
|00005b40| 6f 78 20 77 61 79 73 2e | 0a 58 2e 54 50 20 35 0a |ox ways.|.X.TP 5.|
|00005b50| 58 2e 42 20 2d 6b 0a 58 | 63 61 6e 20 62 65 20 75 |X.B -k.X|can be u|
|00005b60| 73 65 64 20 74 6f 20 74 | 65 72 6d 69 6e 61 74 65 |sed to t|erminate|
|00005b70| 20 74 68 65 20 63 75 72 | 72 65 6e 74 6c 79 20 72 | the cur|rently r|
|00005b80| 75 6e 6e 69 6e 67 20 6d | 74 68 72 65 61 64 73 20 |unning m|threads |
|00005b90| 64 61 65 6d 6f 6e 2c 20 | 6a 75 73 74 20 61 73 20 |daemon, |just as |
|00005ba0| 69 66 20 69 74 0a 58 68 | 61 64 20 72 65 63 65 69 |if it.Xh|ad recei|
|00005bb0| 76 65 64 20 61 20 74 65 | 72 6d 69 6e 61 74 65 20 |ved a te|rminate |
|00005bc0| 73 69 67 6e 61 6c 2e 0a | 58 57 68 65 6e 20 74 68 |signal..|XWhen th|
|00005bd0| 69 73 20 6f 70 74 69 6f | 6e 20 69 73 20 73 70 65 |is optio|n is spe|
|00005be0| 63 69 66 69 65 64 2c 20 | 6e 6f 20 6f 74 68 65 72 |cified, |no other|
|00005bf0| 20 61 63 74 69 76 69 74 | 79 20 69 73 20 70 65 72 | activit|y is per|
|00005c00| 66 6f 72 6d 65 64 2e 0a | 58 2e 54 50 20 35 0a 58 |formed..|X.TP 5.X|
|00005c10| 2e 42 20 2d 6e 0a 58 74 | 65 6c 6c 73 0a 58 2e 49 |.B -n.Xt|ells.X.I|
|00005c20| 20 6d 74 68 72 65 61 64 | 73 0a 58 74 68 61 74 20 | mthread|s.Xthat |
|00005c30| 6e 6f 20 61 63 74 75 61 | 6c 20 70 72 6f 63 65 73 |no actua|l proces|
|00005c40| 73 69 6e 67 20 6f 66 20 | 74 68 72 65 61 64 20 66 |sing of |thread f|
|00005c50| 69 6c 65 73 20 69 73 20 | 74 6f 20 62 65 20 70 65 |iles is |to be pe|
|00005c60| 72 66 6f 72 6d 65 64 2e | 0a 58 54 68 69 73 20 63 |rformed.|.XThis c|
|00005c70| 61 6e 20 62 65 20 75 73 | 65 64 20 74 6f 20 6a 75 |an be us|ed to ju|
|00005c80| 73 74 20 61 64 6a 75 73 | 74 20 77 68 69 63 68 20 |st adjus|t which |
|00005c90| 67 72 6f 75 70 73 20 61 | 72 65 20 65 6e 61 62 6c |groups a|re enabl|
|00005ca0| 65 64 2c 20 77 69 74 68 | 6f 75 74 0a 58 61 63 74 |ed, with|out.Xact|
|00005cb0| 75 61 6c 6c 79 20 64 6f | 69 6e 67 20 61 6e 79 20 |ually do|ing any |
|00005cc0| 6f 66 20 74 68 65 20 70 | 72 6f 63 65 73 73 69 6e |of the p|rocessin|
|00005cd0| 67 20 72 69 67 68 74 20 | 61 77 61 79 2e 0a 58 2e |g right |away..X.|
|00005ce0| 54 50 20 35 0a 58 2e 42 | 20 2d 73 3c 75 73 65 63 |TP 5.X.B| -s<usec|
|00005cf0| 3e 0a 58 74 65 6c 6c 73 | 20 6d 74 68 72 65 61 64 |>.Xtells| mthread|
|00005d00| 73 20 74 6f 20 73 6c 65 | 65 70 20 66 6f 72 20 3c |s to sle|ep for <|
|00005d10| 75 73 65 63 3e 20 6d 69 | 63 72 6f 73 65 63 6f 6e |usec> mi|crosecon|
|00005d20| 64 73 20 62 65 66 6f 72 | 65 20 70 72 6f 63 65 73 |ds befor|e proces|
|00005d30| 73 69 6e 67 20 65 61 63 | 68 0a 58 61 72 74 69 63 |sing eac|h.Xartic|
|00005d40| 6c 65 2e 0a 58 54 68 69 | 73 20 69 73 20 75 73 65 |le..XThi|s is use|
|00005d50| 66 75 6c 20 69 66 20 79 | 6f 75 72 20 4e 4e 54 50 |ful if y|our NNTP|
|00005d60| 20 73 65 72 76 65 72 20 | 63 61 6e 6e 6f 74 20 68 | server |cannot h|
|00005d70| 61 6e 64 6c 65 20 6d 74 | 68 72 65 61 64 73 20 72 |andle mt|hreads r|
|00005d80| 75 6e 6e 69 6e 67 20 61 | 74 0a 58 66 75 6c 6c 20 |unning a|t.Xfull |
|00005d90| 73 70 65 65 64 2e 0a 58 | 55 73 69 6e 67 0a 58 2e |speed..X|Using.X.|
|00005da0| 42 20 2d 73 0a 58 62 79 | 20 69 74 73 65 6c 66 20 |B -s.Xby| itself |
|00005db0| 77 69 6c 6c 20 73 6c 65 | 65 70 20 66 6f 72 20 61 |will sle|ep for a|
|00005dc0| 6e 20 65 6e 74 69 72 65 | 20 73 65 63 6f 6e 64 20 |n entire| second |
|00005dd0| 74 6f 20 62 65 20 63 6f | 6d 70 61 74 69 62 6c 65 |to be co|mpatible|
|00005de0| 20 77 69 74 68 20 6f 6c | 64 65 72 0a 58 76 65 72 | with ol|der.Xver|
|00005df0| 73 69 6f 6e 73 20 6f 66 | 20 6d 74 68 72 65 61 64 |sions of| mthread|
|00005e00| 73 2e 0a 58 2e 54 50 20 | 35 0a 58 2e 42 20 2d 74 |s..X.TP |5.X.B -t|
|00005e10| 0a 58 69 73 20 75 73 65 | 64 20 74 6f 20 6d 61 6b |.Xis use|d to mak|
|00005e20| 65 20 6d 74 68 72 65 61 | 64 73 20 75 70 64 61 74 |e mthrea|ds updat|
|00005e30| 65 20 74 68 65 20 61 63 | 74 69 76 65 2e 74 69 6d |e the ac|tive.tim|
|00005e40| 65 73 20 66 69 6c 65 20 | 28 61 73 20 73 70 65 63 |es file |(as spec|
|00005e50| 69 66 69 65 64 0a 58 64 | 75 72 69 6e 67 20 63 6f |ified.Xd|uring co|
|00005e60| 6e 66 69 67 75 72 61 74 | 69 6f 6e 29 20 77 69 74 |nfigurat|ion) wit|
|00005e70| 68 20 6e 65 77 20 64 69 | 72 65 63 74 6f 72 79 20 |h new di|rectory |
|00005e80| 6e 61 6d 65 73 20 61 73 | 20 74 68 65 79 20 61 72 |names as| they ar|
|00005e90| 65 20 65 6e 63 6f 75 6e | 74 65 72 65 64 2e 0a 58 |e encoun|tered..X|
|00005ea0| 44 6f 6e 27 74 20 75 73 | 65 20 74 68 69 73 20 6f |Don't us|e this o|
|00005eb0| 70 74 69 6f 6e 20 69 66 | 20 79 6f 75 72 20 6e 65 |ption if| your ne|
|00005ec0| 77 73 20 73 6f 66 74 77 | 61 72 65 20 6d 61 69 6e |ws softw|are main|
|00005ed0| 74 61 69 6e 73 20 74 68 | 69 73 20 66 69 6c 65 20 |tains th|is file |
|00005ee0| 66 6f 72 0a 58 79 6f 75 | 20 28 61 73 20 43 20 6e |for.Xyou| (as C n|
|00005ef0| 65 77 73 20 61 6e 64 20 | 49 4e 4e 20 64 6f 29 2e |ews and |INN do).|
|00005f00| 0a 58 2e 54 50 20 35 0a | 58 2e 42 20 2d 76 0a 58 |.X.TP 5.|X.B -v.X|
|00005f10| 73 65 6c 65 63 74 73 20 | 61 64 64 69 74 69 6f 6e |selects |addition|
|00005f20| 61 6c 20 6c 65 76 65 6c | 73 20 6f 66 20 76 65 72 |al level|s of ver|
|00005f30| 62 6f 73 69 74 79 20 69 | 6e 20 74 68 65 20 6c 6f |bosity i|n the lo|
|00005f40| 67 20 66 69 6c 65 2e 0a | 58 54 68 65 20 64 65 66 |g file..|XThe def|
|00005f50| 61 75 6c 74 20 28 77 69 | 74 68 6f 75 74 20 2d 76 |ault (wi|thout -v|
|00005f60| 29 20 69 73 20 74 6f 20 | 6c 6f 67 20 6d 74 68 72 |) is to |log mthr|
|00005f70| 65 61 64 27 73 20 73 74 | 61 72 74 75 70 2c 20 74 |ead's st|artup, t|
|00005f80| 68 65 20 74 6f 74 61 6c | 73 20 66 6f 72 20 65 61 |he total|s for ea|
|00005f90| 63 68 0a 58 70 61 73 73 | 2c 20 61 6e 64 20 6d 61 |ch.Xpass|, and ma|
|00005fa0| 6a 6f 72 20 64 61 74 61 | 62 61 73 65 20 65 72 72 |jor data|base err|
|00005fb0| 6f 72 73 2e 0a 58 41 64 | 64 20 6f 6e 65 0a 58 2e |ors..XAd|d one.X.|
|00005fc0| 42 20 2d 76 0a 58 74 6f | 20 67 65 74 20 65 78 74 |B -v.Xto| get ext|
|00005fd0| 72 61 20 72 65 66 65 72 | 65 6e 63 65 20 6c 69 6e |ra refer|ence lin|
|00005fe0| 65 20 70 72 6f 62 6c 65 | 6d 73 20 6c 6f 67 67 65 |e proble|ms logge|
|00005ff0| 64 20 69 6e 74 6f 20 74 | 68 65 20 66 69 6c 65 2e |d into t|he file.|
|00006000| 0a 58 41 64 64 20 61 20 | 73 65 63 6f 6e 64 20 61 |.XAdd a |second a|
|00006010| 6e 64 20 61 20 74 68 69 | 72 64 20 66 6f 72 20 65 |nd a thi|rd for e|
|00006020| 76 65 6e 20 6d 6f 72 65 | 20 28 75 73 65 6c 65 73 |ven more| (useles|
|00006030| 73 3f 29 20 69 6e 66 6f | 72 6d 61 74 69 6f 6e 2e |s?) info|rmation.|
|00006040| 0a 58 41 20 66 6f 75 72 | 74 68 20 77 69 6c 6c 20 |.XA four|th will |
|00006050| 63 61 75 73 65 20 6d 74 | 68 72 65 61 64 73 20 74 |cause mt|hreads t|
|00006060| 6f 20 6f 75 74 70 75 74 | 20 65 61 63 68 20 67 72 |o output| each gr|
|00006070| 6f 75 70 27 73 20 6e 61 | 6d 65 20 69 6e 74 6f 20 |oup's na|me into |
|00006080| 74 68 65 20 6c 6f 67 20 | 66 69 6c 65 0a 58 62 65 |the log |file.Xbe|
|00006090| 66 6f 72 65 20 69 74 20 | 69 73 20 70 72 6f 63 65 |fore it |is proce|
|000060a0| 73 73 65 64 2e 0a 58 2e | 54 50 20 35 0a 58 2e 42 |ssed..X.|TP 5.X.B|
|000060b0| 20 2d 56 0a 58 64 69 73 | 70 6c 61 79 73 20 6d 74 | -V.Xdis|plays mt|
|000060c0| 68 72 65 61 64 73 27 20 | 76 65 72 73 69 6f 6e 20 |hreads' |version |
|000060d0| 6e 75 6d 62 65 72 20 61 | 6e 64 20 65 78 69 74 73 |number a|nd exits|
|000060e0| 2e 0a 58 2e 54 50 20 35 | 0a 58 2e 42 20 2d 7a 0a |..X.TP 5|.X.B -z.|
|000060f0| 58 74 65 6c 6c 73 20 6d | 74 68 72 65 61 64 73 20 |Xtells m|threads |
|00006100| 74 6f 20 27 7a 61 70 27 | 20 61 6e 79 20 74 68 72 |to 'zap'| any thr|
|00006110| 65 61 64 20 66 69 6c 65 | 20 69 74 20 62 65 6c 69 |ead file| it beli|
|00006120| 65 76 65 73 20 74 6f 20 | 62 65 20 63 6f 72 72 75 |eves to |be corru|
|00006130| 70 74 2e 0a 58 54 68 69 | 73 20 77 69 6c 6c 20 61 |pt..XThi|s will a|
|00006140| 6c 6c 6f 77 20 74 68 65 | 20 66 69 6c 65 20 74 6f |llow the| file to|
|00006150| 20 62 65 20 72 65 67 65 | 6e 65 72 61 74 65 64 20 | be rege|nerated |
|00006160| 66 72 6f 6d 20 73 63 72 | 61 74 63 68 20 6f 6e 20 |from scr|atch on |
|00006170| 74 68 65 20 6e 65 78 74 | 20 70 61 73 73 2e 0a 58 |the next| pass..X|
|00006180| 2e 54 50 20 35 0a 58 2e | 42 20 68 69 65 72 61 72 |.TP 5.X.|B hierar|
|00006190| 63 68 79 5f 6c 69 73 74 | 0a 58 54 68 65 20 68 69 |chy_list|.XThe hi|
|000061a0| 65 72 61 72 63 68 79 20 | 6c 69 73 74 20 69 73 20 |erarchy |list is |
|000061b0| 75 73 65 64 20 74 6f 20 | 74 75 72 6e 20 74 68 72 |used to |turn thr|
|000061c0| 65 61 64 20 70 72 6f 63 | 65 73 73 69 6e 67 20 6f |ead proc|essing o|
|000061d0| 6e 20 6f 72 20 6f 66 66 | 20 66 6f 72 20 74 68 65 |n or off| for the|
|000061e0| 20 6c 69 73 74 65 64 0a | 58 67 72 6f 75 70 73 20 | listed.|Xgroups |
|000061f0| 77 68 69 6c 65 20 6c 69 | 6d 69 74 69 6e 67 20 69 |while li|miting i|
|00006200| 74 73 65 6c 66 20 74 6f | 20 75 70 64 61 74 69 6e |tself to| updatin|
|00006210| 67 20 6f 6e 6c 79 20 74 | 68 65 20 6c 69 73 74 65 |g only t|he liste|
|00006220| 64 20 67 72 6f 75 70 73 | 2e 0a 58 49 66 20 73 70 |d groups|..XIf sp|
|00006230| 65 63 69 66 69 65 64 20 | 77 69 74 68 20 74 68 65 |ecified |with the|
|00006240| 20 5c 2d 61 20 6f 70 74 | 69 6f 6e 2c 20 68 6f 77 | \-a opt|ion, how|
|00006250| 65 76 65 72 2c 20 69 74 | 20 6f 6e 6c 79 20 6c 69 |ever, it| only li|
|00006260| 6d 69 74 73 20 77 68 69 | 63 68 20 6e 65 77 20 67 |mits whi|ch new g|
|00006270| 72 6f 75 70 73 0a 58 67 | 65 74 20 65 6e 61 62 6c |roups.Xg|et enabl|
|00006280| 65 64 2e 0a 58 54 68 65 | 20 67 72 6f 75 70 73 20 |ed..XThe| groups |
|00006290| 61 72 65 20 73 70 65 63 | 69 66 69 65 64 20 69 6e |are spec|ified in|
|000062a0| 20 61 20 6d 61 6e 6e 65 | 72 20 76 65 72 79 20 73 | a manne|r very s|
|000062b0| 69 6d 69 6c 61 72 20 74 | 6f 20 74 68 65 20 6e 65 |imilar t|o the ne|
|000062c0| 77 73 20 73 6f 66 74 77 | 61 72 65 27 73 0a 58 73 |ws softw|are's.Xs|
|000062d0| 79 73 20 66 69 6c 65 3a | 20 20 5c 2a 28 4c 22 6e |ys file:| \*(L"n|
|000062e0| 65 77 73 5c 2a 28 52 22 | 20 6d 61 74 63 68 65 73 |ews\*(R"| matches|
|000062f0| 20 61 6c 6c 20 67 72 6f | 75 70 73 20 69 6e 20 6e | all gro|ups in n|
|00006300| 65 77 73 3b 20 5c 2a 28 | 4c 22 21 6e 65 77 73 5c |ews; \*(|L"!news\|
|00006310| 2a 28 52 22 20 65 78 63 | 6c 75 64 65 73 0a 58 61 |*(R" exc|ludes.Xa|
|00006320| 6c 6c 20 67 72 6f 75 70 | 73 20 69 6e 20 6e 65 77 |ll group|s in new|
|00006330| 73 3b 20 5c 2a 28 4c 22 | 63 6f 6d 70 2e 61 6c 6c |s; \*(L"|comp.all|
|00006340| 2e 69 62 6d 2e 70 63 2c | 21 63 6f 6d 70 2e 61 6c |.ibm.pc,|!comp.al|
|00006350| 6c 2e 69 62 6d 2e 70 63 | 2e 61 6c 6c 5c 2a 28 4c |l.ibm.pc|.all\*(L|
|00006360| 22 20 6d 61 74 63 68 65 | 73 20 62 6f 74 68 0a 58 |" matche|s both.X|
|00006370| 63 6f 6d 70 2e 73 79 73 | 2e 69 62 6d 2e 70 63 20 |comp.sys|.ibm.pc |
|00006380| 61 6e 64 20 63 6f 6d 70 | 2e 62 69 6e 61 72 69 65 |and comp|.binarie|
|00006390| 73 2e 69 62 6d 2e 70 63 | 2c 20 62 75 74 20 6e 6f |s.ibm.pc|, but no|
|000063a0| 74 20 63 6f 6d 70 2e 62 | 69 6e 61 72 69 65 73 2e |t comp.b|inaries.|
|000063b0| 69 62 6d 2e 70 63 2e 64 | 2e 0a 58 2e 53 48 20 4f |ibm.pc.d|..X.SH O|
|000063c0| 55 54 50 55 54 0a 58 57 | 68 65 6e 0a 58 2e 49 20 |UTPUT.XW|hen.X.I |
|000063d0| 6d 74 68 72 65 61 64 73 | 0a 58 69 73 20 72 75 6e |mthreads|.Xis run|
|000063e0| 20 69 6e 20 73 69 6e 67 | 6c 65 2d 70 61 73 73 20 | in sing|le-pass |
|000063f0| 6d 6f 64 65 20 69 74 20 | 67 65 6e 65 72 61 74 65 |mode it |generate|
+--------+-------------------------+-------------------------+--------+--------+
Only 25.0 KB of data is shown above.