home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 2 / 2282 < prev    next >
SHell self-extracting ARchive  |  1990-12-28  |  18.7 KB

open in: MacOS 8.1     |     Win98     |     DOS

view JSON data     |     view as text

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

You can browse this item here: 2282

ConfidenceProgramDetectionMatch TypeSupport
100% dexvert Newsgroup Content (archive/news) magic Supported
100% dexvert SHell self-extracting ARchive (archive/shar) magic Supported
100% dexvert Internet Message Format (text/imf) magic Supported
1% dexvert Text File (text/txt) fallback Supported
100% file news or mail, ASCII text default
100% TrID E-Mail message (Var. 2) 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)
100% xdgMime message/rfc822 default



hex view
+--------+-------------------------+-------------------------+--------+--------+
|00000000| 46 72 6f 6d 3a 20 74 6f | 6d 40 73 73 64 2e 63 73 |From: to|m@ssd.cs|
|00000010| 64 2e 68 61 72 72 69 73 | 2e 63 6f 6d 20 28 54 6f |d.harris|.com (To|
|00000020| 6d 20 48 6f 72 73 6c 65 | 79 29 0a 4e 65 77 73 67 |m Horsle|y).Newsg|
|00000030| 72 6f 75 70 73 3a 20 61 | 6c 74 2e 73 6f 75 72 63 |roups: a|lt.sourc|
|00000040| 65 73 0a 53 75 62 6a 65 | 63 74 3a 20 6d 6b 69 64 |es.Subje|ct: mkid|
|00000050| 20 30 39 2f 31 31 20 28 | 69 64 65 6e 74 69 66 69 | 09/11 (|identifi|
|00000060| 65 72 20 63 72 6f 73 73 | 20 72 65 66 65 72 65 6e |er cross| referen|
|00000070| 63 65 20 74 6f 6f 6c 29 | 0a 4d 65 73 73 61 67 65 |ce tool)|.Message|
|00000080| 2d 49 44 3a 20 3c 54 4f | 4d 2e 39 30 44 65 63 31 |-ID: <TO|M.90Dec1|
|00000090| 32 30 39 34 37 32 31 40 | 68 63 78 32 2e 73 73 64 |2094721@|hcx2.ssd|
|000000a0| 2e 63 73 64 2e 68 61 72 | 72 69 73 2e 63 6f 6d 3e |.csd.har|ris.com>|
|000000b0| 0a 44 61 74 65 3a 20 31 | 32 20 44 65 63 20 39 30 |.Date: 1|2 Dec 90|
|000000c0| 20 31 34 3a 34 37 3a 32 | 31 20 47 4d 54 0a 0a 23 | 14:47:2|1 GMT..#|
|000000d0| 21 20 2f 62 69 6e 2f 73 | 68 0a 23 20 54 68 69 73 |! /bin/s|h.# This|
|000000e0| 20 69 73 20 61 20 73 68 | 65 6c 6c 20 61 72 63 68 | is a sh|ell arch|
|000000f0| 69 76 65 2e 20 20 52 65 | 6d 6f 76 65 20 61 6e 79 |ive. Re|move any|
|00000100| 74 68 69 6e 67 20 62 65 | 66 6f 72 65 20 74 68 69 |thing be|fore thi|
|00000110| 73 20 6c 69 6e 65 2c 20 | 74 68 65 6e 20 75 6e 70 |s line, |then unp|
|00000120| 61 63 6b 0a 23 20 69 74 | 20 62 79 20 73 61 76 69 |ack.# it| by savi|
|00000130| 6e 67 20 69 74 20 69 6e | 74 6f 20 61 20 66 69 6c |ng it in|to a fil|
|00000140| 65 20 61 6e 64 20 74 79 | 70 69 6e 67 20 22 73 68 |e and ty|ping "sh|
|00000150| 20 66 69 6c 65 22 2e 20 | 20 54 6f 20 6f 76 65 72 | file". | To over|
|00000160| 77 72 69 74 65 20 65 78 | 69 73 74 69 6e 67 0a 23 |write ex|isting.#|
|00000170| 20 66 69 6c 65 73 2c 20 | 74 79 70 65 20 22 73 68 | files, |type "sh|
|00000180| 20 66 69 6c 65 20 2d 63 | 22 2e 20 20 59 6f 75 20 | file -c|". You |
|00000190| 63 61 6e 20 61 6c 73 6f | 20 66 65 65 64 20 74 68 |can also| feed th|
|000001a0| 69 73 20 61 73 20 73 74 | 61 6e 64 61 72 64 20 69 |is as st|andard i|
|000001b0| 6e 70 75 74 20 76 69 61 | 0a 23 20 75 6e 73 68 61 |nput via|.# unsha|
|000001c0| 72 2c 20 6f 72 20 62 79 | 20 74 79 70 69 6e 67 20 |r, or by| typing |
|000001d0| 22 73 68 20 3c 66 69 6c | 65 22 2c 20 65 2e 67 2e |"sh <fil|e", e.g.|
|000001e0| 2e 20 20 49 66 20 74 68 | 69 73 20 61 72 63 68 69 |. If th|is archi|
|000001f0| 76 65 20 69 73 20 63 6f | 6d 70 6c 65 74 65 2c 20 |ve is co|mplete, |
|00000200| 79 6f 75 0a 23 20 77 69 | 6c 6c 20 73 65 65 20 74 |you.# wi|ll see t|
|00000210| 68 65 20 66 6f 6c 6c 6f | 77 69 6e 67 20 6d 65 73 |he follo|wing mes|
|00000220| 73 61 67 65 20 61 74 20 | 74 68 65 20 65 6e 64 3a |sage at |the end:|
|00000230| 0a 23 09 09 22 45 6e 64 | 20 6f 66 20 61 72 63 68 |.#.."End| of arch|
|00000240| 69 76 65 20 39 20 28 6f | 66 20 31 31 29 2e 22 0a |ive 9 (o|f 11).".|
|00000250| 23 20 43 6f 6e 74 65 6e | 74 73 3a 20 20 69 69 64 |# Conten|ts: iid|
|00000260| 66 75 6e 2e 63 0a 23 20 | 57 72 61 70 70 65 64 20 |fun.c.# |Wrapped |
|00000270| 62 79 20 74 6f 6d 40 68 | 63 78 32 20 6f 6e 20 57 |by tom@h|cx2 on W|
|00000280| 65 64 20 44 65 63 20 31 | 32 20 30 37 3a 32 31 3a |ed Dec 1|2 07:21:|
|00000290| 35 38 20 31 39 39 30 0a | 50 41 54 48 3d 2f 62 69 |58 1990.|PATH=/bi|
|000002a0| 6e 3a 2f 75 73 72 2f 62 | 69 6e 3a 2f 75 73 72 2f |n:/usr/b|in:/usr/|
|000002b0| 75 63 62 20 3b 20 65 78 | 70 6f 72 74 20 50 41 54 |ucb ; ex|port PAT|
|000002c0| 48 0a 69 66 20 74 65 73 | 74 20 2d 66 20 27 69 69 |H.if tes|t -f 'ii|
|000002d0| 64 66 75 6e 2e 63 27 20 | 2d 61 20 22 24 7b 31 7d |dfun.c' |-a "${1}|
|000002e0| 22 20 21 3d 20 22 2d 63 | 22 20 3b 20 74 68 65 6e |" != "-c|" ; then|
|000002f0| 20 0a 20 20 65 63 68 6f | 20 73 68 61 72 3a 20 57 | . echo| shar: W|
|00000300| 69 6c 6c 20 6e 6f 74 20 | 63 6c 6f 62 62 65 72 20 |ill not |clobber |
|00000310| 65 78 69 73 74 69 6e 67 | 20 66 69 6c 65 20 5c 22 |existing| file \"|
|00000320| 27 69 69 64 66 75 6e 2e | 63 27 5c 22 0a 65 6c 73 |'iidfun.|c'\".els|
|00000330| 65 0a 65 63 68 6f 20 73 | 68 61 72 3a 20 45 78 74 |e.echo s|har: Ext|
|00000340| 72 61 63 74 69 6e 67 20 | 5c 22 27 69 69 64 66 75 |racting |\"'iidfu|
|00000350| 6e 2e 63 27 5c 22 20 5c | 28 31 36 35 35 33 20 63 |n.c'\" \|(16553 c|
|00000360| 68 61 72 61 63 74 65 72 | 73 5c 29 0a 73 65 64 20 |haracter|s\).sed |
|00000370| 22 73 2f 5e 58 2f 2f 22 | 20 3e 27 69 69 64 66 75 |"s/^X//"| >'iidfu|
|00000380| 6e 2e 63 27 20 3c 3c 27 | 45 4e 44 5f 4f 46 5f 46 |n.c' <<'|END_OF_F|
|00000390| 49 4c 45 27 0a 58 2f 2a | 20 69 69 64 66 75 6e 2e |ILE'.X/*| iidfun.|
|000003a0| 63 20 2d 20 54 68 69 73 | 20 66 69 6c 65 20 68 6f |c - This| file ho|
|000003b0| 6c 64 73 20 74 68 65 20 | 75 74 69 6c 69 74 79 20 |lds the |utility |
|000003c0| 66 75 6e 63 74 69 6f 6e | 73 20 63 61 6c 6c 65 64 |function|s called|
|000003d0| 20 66 72 6f 6d 20 69 69 | 64 2e 79 0a 58 20 2a 2f | from ii|d.y.X */|
|000003e0| 0a 58 0a 58 23 69 6e 63 | 6c 75 64 65 20 22 69 69 |.X.X#inc|lude "ii|
|000003f0| 64 64 65 66 2e 68 22 0a | 58 0a 58 2f 2a 20 41 72 |ddef.h".|X.X/* Ar|
|00000400| 67 4c 69 73 74 53 69 7a | 65 20 2d 20 63 6f 75 6e |gListSiz|e - coun|
|00000410| 74 20 74 68 65 20 73 69 | 7a 65 20 6f 66 20 61 6e |t the si|ze of an|
|00000420| 20 61 72 67 20 6c 69 73 | 74 20 73 6f 20 63 61 6e | arg lis|t so can|
|00000430| 20 61 6c 6c 6f 63 61 28 | 29 20 65 6e 6f 75 67 68 | alloca(|) enough|
|00000440| 0a 58 20 2a 20 73 70 61 | 63 65 20 66 6f 72 20 74 |.X * spa|ce for t|
|00000450| 68 65 20 63 6f 6d 6d 61 | 6e 64 2e 0a 58 20 2a 2f |he comma|nd..X */|
|00000460| 0a 58 69 6e 74 0a 58 41 | 72 67 4c 69 73 74 53 69 |.Xint.XA|rgListSi|
|00000470| 7a 65 28 69 64 6c 70 29 | 0a 58 20 20 20 69 64 5f |ze(idlp)|.X id_|
|00000480| 6c 69 73 74 5f 74 79 70 | 65 20 2a 20 69 64 6c 70 |list_typ|e * idlp|
|00000490| 20 3b 0a 58 7b 0a 58 20 | 20 20 69 64 5f 74 79 70 | ;.X{.X | id_typ|
|000004a0| 65 20 2a 20 20 20 20 20 | 20 69 64 65 70 20 3b 0a |e * | idep ;.|
|000004b0| 58 20 20 20 69 6e 74 20 | 20 20 20 20 20 20 20 20 |X int | |
|000004c0| 20 20 20 73 69 7a 65 20 | 3d 20 30 3b 0a 58 20 20 | size |= 0;.X |
|000004d0| 20 0a 58 20 20 20 69 64 | 65 70 20 3d 20 69 64 6c | .X id|ep = idl|
|000004e0| 70 2d 3e 69 64 5f 6c 69 | 73 74 20 3b 0a 58 20 20 |p->id_li|st ;.X |
|000004f0| 20 77 68 69 6c 65 20 28 | 69 64 65 70 20 21 3d 20 | while (|idep != |
|00000500| 4e 55 4c 4c 29 20 7b 0a | 58 20 20 20 20 20 20 73 |NULL) {.|X s|
|00000510| 69 7a 65 20 2b 3d 20 31 | 20 2b 20 73 74 72 6c 65 |ize += 1| + strle|
|00000520| 6e 28 69 64 65 70 2d 3e | 69 64 29 3b 0a 58 20 20 |n(idep->|id);.X |
|00000530| 20 20 20 20 69 64 65 70 | 20 3d 20 69 64 65 70 2d | idep| = idep-|
|00000540| 3e 6e 65 78 74 5f 69 64 | 3b 0a 58 20 20 20 7d 0a |>next_id|;.X }.|
|00000550| 58 20 20 20 72 65 74 75 | 72 6e 20 73 69 7a 65 3b |X retu|rn size;|
|00000560| 0a 58 7d 0a 58 0a 58 2f | 2a 20 53 65 74 4c 69 73 |.X}.X.X/|* SetLis|
|00000570| 74 53 69 7a 65 20 2d 20 | 63 6f 75 6e 74 20 74 68 |tSize - |count th|
|00000580| 65 20 73 69 7a 65 20 6f | 66 20 61 20 73 74 72 69 |e size o|f a stri|
|00000590| 6e 67 20 62 75 69 6c 64 | 20 75 70 20 66 72 6f 6d |ng build| up from|
|000005a0| 20 61 20 73 65 74 20 73 | 6f 20 77 65 20 63 61 6e | a set s|o we can|
|000005b0| 0a 58 20 2a 20 61 6c 6c | 6f 63 61 28 29 20 65 6e |.X * all|oca() en|
|000005c0| 6f 75 67 68 20 73 70 61 | 63 65 20 66 6f 72 20 61 |ough spa|ce for a|
|000005d0| 72 67 73 2e 0a 58 20 2a | 2f 0a 58 69 6e 74 0a 58 |rgs..X *|/.Xint.X|
|000005e0| 53 65 74 4c 69 73 74 53 | 69 7a 65 28 73 70 29 0a |SetListS|ize(sp).|
|000005f0| 58 20 20 20 73 65 74 5f | 74 79 70 65 20 2a 20 73 |X set_|type * s|
|00000600| 70 20 3b 0a 58 7b 0a 58 | 20 20 20 69 6e 74 20 20 |p ;.X{.X| int |
|00000610| 20 20 20 20 20 20 20 20 | 20 20 69 20 3b 0a 58 20 | | i ;.X |
|00000620| 20 20 69 6e 74 20 20 20 | 20 20 20 20 20 20 20 20 | int | |
|00000630| 20 73 69 7a 65 20 3d 20 | 30 20 3b 0a 58 20 20 20 | size = |0 ;.X |
|00000640| 0a 58 20 20 20 66 6f 72 | 20 28 69 20 3d 20 30 3b |.X for| (i = 0;|
|00000650| 20 69 20 3c 20 4e 65 78 | 74 46 69 6c 65 4e 75 6d | i < Nex|tFileNum|
|00000660| 3b 20 2b 2b 69 29 20 7b | 0a 58 20 20 20 20 20 20 |; ++i) {|.X |
|00000670| 69 66 20 28 46 69 6c 65 | 4c 69 73 74 5b 69 5d 2d |if (File|List[i]-|
|00000680| 3e 6d 61 73 6b 5f 77 6f | 72 64 20 3c 20 73 70 2d |>mask_wo|rd < sp-|
|00000690| 3e 73 65 74 5f 73 69 7a | 65 29 20 7b 0a 58 20 20 |>set_siz|e) {.X |
|000006a0| 20 20 20 20 20 20 20 69 | 66 20 28 73 70 2d 3e 73 | i|f (sp->s|
|000006b0| 65 74 5f 64 61 74 61 5b | 46 69 6c 65 4c 69 73 74 |et_data[|FileList|
|000006c0| 5b 69 5d 2d 3e 6d 61 73 | 6b 5f 77 6f 72 64 5d 20 |[i]->mas|k_word] |
|000006d0| 26 20 46 69 6c 65 4c 69 | 73 74 5b 69 5d 2d 3e 6d |& FileLi|st[i]->m|
|000006e0| 61 73 6b 5f 62 69 74 29 | 20 7b 0a 58 20 20 20 20 |ask_bit)| {.X |
|000006f0| 20 20 20 20 20 20 20 20 | 73 69 7a 65 20 2b 3d 20 | |size += |
|00000700| 31 20 2b 20 73 74 72 6c | 65 6e 28 46 69 6c 65 4c |1 + strl|en(FileL|
|00000710| 69 73 74 5b 69 5d 2d 3e | 6e 61 6d 65 29 3b 0a 58 |ist[i]->|name);.X|
|00000720| 20 20 20 20 20 20 20 20 | 20 7d 0a 58 20 20 20 20 | | }.X |
|00000730| 20 20 7d 0a 58 20 20 20 | 7d 0a 58 20 20 20 72 65 | }.X |}.X re|
|00000740| 74 75 72 6e 20 73 69 7a | 65 3b 0a 58 7d 0a 58 0a |turn siz|e;.X}.X.|
|00000750| 58 2f 2a 20 46 6c 75 73 | 68 46 69 6c 65 73 20 2d |X/* Flus|hFiles -|
|00000760| 20 63 6c 65 61 72 20 6f | 75 74 20 74 68 65 20 54 | clear o|ut the T|
|00000770| 68 65 46 69 6c 65 73 20 | 61 72 72 61 79 20 66 6f |heFiles |array fo|
|00000780| 72 20 74 68 65 20 73 74 | 61 72 74 20 6f 66 20 61 |r the st|art of a|
|00000790| 20 6e 65 77 0a 58 20 2a | 20 71 75 65 72 79 2e 0a | new.X *| query..|
|000007a0| 58 20 2a 2f 0a 58 76 6f | 69 64 0a 58 46 6c 75 73 |X */.Xvo|id.XFlus|
|000007b0| 68 46 69 6c 65 73 28 29 | 0a 58 7b 0a 58 20 20 20 |hFiles()|.X{.X |
|000007c0| 69 6e 74 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |int | |
|000007d0| 69 20 3b 0a 58 20 20 20 | 0a 58 20 20 20 69 66 20 |i ;.X |.X if |
|000007e0| 28 54 68 65 46 69 6c 65 | 73 20 21 3d 20 4e 55 4c |(TheFile|s != NUL|
|000007f0| 4c 29 20 7b 0a 58 20 20 | 20 20 20 20 66 6f 72 20 |L) {.X | for |
|00000800| 28 69 20 3d 20 30 3b 20 | 69 20 3c 3d 20 4d 61 78 |(i = 0; |i <= Max|
|00000810| 43 75 72 46 69 6c 65 3b | 20 2b 2b 69 29 20 7b 0a |CurFile;| ++i) {.|
|00000820| 58 20 20 20 20 20 20 20 | 20 20 54 68 65 46 69 6c |X | TheFil|
|00000830| 65 73 5b 69 5d 20 3d 20 | 30 20 3b 0a 58 20 20 20 |es[i] = |0 ;.X |
|00000840| 20 20 20 7d 0a 58 20 20 | 20 7d 0a 58 20 20 20 4d | }.X | }.X M|
|00000850| 61 78 43 75 72 46 69 6c | 65 20 3d 20 30 20 3b 0a |axCurFil|e = 0 ;.|
|00000860| 58 7d 0a 58 0a 58 2f 2a | 20 66 61 74 61 6c 20 2d |X}.X.X/*| fatal -|
|00000870| 20 73 6f 6d 65 74 69 6d | 65 73 20 74 68 65 20 6f | sometim|es the o|
|00000880| 6e 6c 79 20 74 68 69 6e | 67 20 74 6f 20 64 6f 20 |nly thin|g to do |
|00000890| 69 73 20 64 69 65 2e 2e | 2e 0a 58 20 2a 2f 0a 58 |is die..|..X */.X|
|000008a0| 76 6f 69 64 0a 58 66 61 | 74 61 6c 28 73 29 0a 58 |void.Xfa|tal(s).X|
|000008b0| 7b 0a 58 20 20 20 66 70 | 72 69 6e 74 66 28 73 74 |{.X fp|rintf(st|
|000008c0| 64 65 72 72 2c 22 46 61 | 74 61 6c 20 65 72 72 6f |derr,"Fa|tal erro|
|000008d0| 72 3a 20 25 73 5c 6e 22 | 2c 73 29 20 3b 0a 58 20 |r: %s\n"|,s) ;.X |
|000008e0| 20 20 65 78 69 74 28 31 | 29 20 3b 0a 58 7d 0a 58 | exit(1|) ;.X}.X|
|000008f0| 0a 58 2f 2a 20 43 6f 75 | 6e 74 42 69 74 73 20 2d |.X/* Cou|ntBits -|
|00000900| 20 63 6f 75 6e 74 20 74 | 68 65 20 6e 75 6d 62 65 | count t|he numbe|
|00000910| 72 20 6f 66 20 62 69 74 | 73 20 69 6e 20 61 20 62 |r of bit|s in a b|
|00000920| 69 74 20 73 65 74 2e 20 | 41 63 74 75 61 6c 6c 79 |it set. |Actually|
|00000930| 20 66 61 69 72 6c 79 0a | 58 20 2a 20 74 72 69 63 | fairly.|X * tric|
|00000940| 6b 79 20 73 69 6e 63 65 | 20 69 74 20 6e 65 65 64 |ky since| it need|
|00000950| 73 20 74 6f 20 64 65 61 | 6c 20 77 69 74 68 20 73 |s to dea|l with s|
|00000960| 65 74 73 20 68 61 76 69 | 6e 67 20 69 6e 66 69 6e |ets havi|ng infin|
|00000970| 69 74 65 20 74 61 69 6c | 73 0a 58 20 2a 20 61 73 |ite tail|s.X * as|
|00000980| 20 61 20 72 65 73 75 6c | 74 20 6f 66 20 61 20 4e | a resul|t of a N|
|00000990| 4f 54 20 6f 70 65 72 61 | 74 69 6f 6e 2e 0a 58 20 |OT opera|tion..X |
|000009a0| 2a 2f 0a 58 69 6e 74 0a | 58 43 6f 75 6e 74 42 69 |*/.Xint.|XCountBi|
|000009b0| 74 73 28 73 70 29 0a 58 | 20 20 20 73 65 74 5f 74 |ts(sp).X| set_t|
|000009c0| 79 70 65 20 2a 20 73 70 | 20 3b 0a 58 7b 0a 58 20 |ype * sp| ;.X{.X |
|000009d0| 20 20 75 6e 73 69 67 6e | 65 64 20 6c 6f 6e 67 20 | unsign|ed long |
|000009e0| 20 20 20 20 20 62 69 74 | 5f 6d 61 73 6b 20 3b 0a | bit|_mask ;.|
|000009f0| 58 20 20 20 69 6e 74 20 | 20 20 20 20 20 20 20 20 |X int | |
|00000a00| 20 20 20 20 20 20 20 63 | 6f 75 6e 74 20 3d 20 30 | c|ount = 0|
|00000a10| 20 3b 0a 58 20 20 20 69 | 6e 74 20 20 20 20 20 20 | ;.X i|nt |
|00000a20| 20 20 20 20 20 20 20 20 | 20 20 69 20 3b 0a 58 20 | | i ;.X |
|00000a30| 20 20 0a 58 20 20 20 69 | 20 3d 20 30 3b 0a 58 20 | .X i| = 0;.X |
|00000a40| 20 20 66 6f 72 20 28 20 | 3b 20 3b 20 29 20 7b 0a | for ( |; ; ) {.|
|00000a50| 58 20 20 20 20 20 20 66 | 6f 72 20 28 62 69 74 5f |X f|or (bit_|
|00000a60| 6d 61 73 6b 20 3d 20 68 | 69 67 68 5f 62 69 74 3b |mask = h|igh_bit;|
|00000a70| 20 62 69 74 5f 6d 61 73 | 6b 20 21 3d 20 30 3b 20 | bit_mas|k != 0; |
|00000a80| 62 69 74 5f 6d 61 73 6b | 20 3e 3e 3d 20 31 29 20 |bit_mask| >>= 1) |
|00000a90| 7b 0a 58 20 20 20 20 20 | 20 20 20 20 69 66 20 28 |{.X | if (|
|00000aa0| 62 69 74 5f 6d 61 73 6b | 20 3d 3d 20 4e 65 78 74 |bit_mask| == Next|
|00000ab0| 4d 61 73 6b 42 69 74 20 | 26 26 20 69 20 3d 3d 20 |MaskBit |&& i == |
|00000ac0| 4e 65 78 74 4d 61 73 6b | 57 6f 72 64 29 20 7b 0a |NextMask|Word) {.|
|00000ad0| 58 20 20 20 20 20 20 20 | 20 20 20 20 20 72 65 74 |X | ret|
|00000ae0| 75 72 6e 28 63 6f 75 6e | 74 29 20 3b 0a 58 20 20 |urn(coun|t) ;.X |
|00000af0| 20 20 20 20 20 20 20 7d | 0a 58 20 20 20 20 20 20 | }|.X |
|00000b00| 20 20 20 69 66 20 28 69 | 20 3c 20 73 70 2d 3e 73 | if (i| < sp->s|
|00000b10| 65 74 5f 73 69 7a 65 29 | 20 7b 0a 58 20 20 20 20 |et_size)| {.X |
|00000b20| 20 20 20 20 20 20 20 20 | 69 66 20 28 73 70 2d 3e | |if (sp->|
|00000b30| 73 65 74 5f 64 61 74 61 | 5b 69 5d 20 26 20 62 69 |set_data|[i] & bi|
|00000b40| 74 5f 6d 61 73 6b 29 20 | 7b 0a 58 20 20 20 20 20 |t_mask) |{.X |
|00000b50| 20 20 20 20 20 20 20 20 | 20 20 2b 2b 63 6f 75 6e | | ++coun|
|00000b60| 74 20 3b 0a 58 20 20 20 | 20 20 20 20 20 20 20 20 |t ;.X | |
|00000b70| 20 7d 0a 58 20 20 20 20 | 20 20 20 20 20 7d 20 65 | }.X | } e|
|00000b80| 6c 73 65 20 7b 0a 58 20 | 20 20 20 20 20 20 20 20 |lse {.X | |
|00000b90| 20 20 20 69 66 20 28 73 | 70 2d 3e 73 65 74 5f 74 | if (s|p->set_t|
|00000ba0| 61 69 6c 20 3d 3d 20 30 | 29 20 72 65 74 75 72 6e |ail == 0|) return|
|00000bb0| 20 63 6f 75 6e 74 3b 0a | 58 20 20 20 20 20 20 20 | count;.|X |
|00000bc0| 20 20 20 20 20 69 66 20 | 28 73 70 2d 3e 73 65 74 | if |(sp->set|
|00000bd0| 5f 74 61 69 6c 20 26 20 | 62 69 74 5f 6d 61 73 6b |_tail & |bit_mask|
|00000be0| 29 20 7b 0a 58 20 20 20 | 20 20 20 20 20 20 20 20 |) {.X | |
|00000bf0| 20 20 20 20 2b 2b 63 6f | 75 6e 74 3b 0a 58 20 20 | ++co|unt;.X |
|00000c00| 20 20 20 20 20 20 20 20 | 20 20 7d 0a 58 20 20 20 | | }.X |
|00000c10| 20 20 20 20 20 20 7d 0a | 58 20 20 20 20 20 20 7d | }.|X }|
|00000c20| 0a 58 20 20 20 20 20 20 | 2b 2b 69 3b 0a 58 20 20 |.X |++i;.X |
|00000c30| 20 7d 0a 58 7d 0a 58 0a | 58 2f 2a 20 4f 6e 65 44 | }.X}.X.|X/* OneD|
|00000c40| 65 73 63 72 69 70 74 69 | 6f 6e 20 2d 20 50 72 69 |escripti|on - Pri|
|00000c50| 6e 74 20 61 20 64 65 73 | 63 72 69 70 74 69 6f 6e |nt a des|cription|
|00000c60| 20 6f 66 20 61 20 73 65 | 74 2e 20 54 68 69 73 20 | of a se|t. This |
|00000c70| 69 6e 63 6c 75 64 65 73 | 0a 58 20 2a 20 74 68 65 |includes|.X * the|
|00000c80| 20 73 65 74 20 6e 75 6d | 62 65 72 2c 20 74 68 65 | set num|ber, the|
|00000c90| 20 6e 75 6d 62 65 72 20 | 6f 66 20 66 69 6c 65 73 | number |of files|
|00000ca0| 20 69 6e 20 74 68 65 20 | 73 65 74 2c 20 61 6e 64 | in the |set, and|
|00000cb0| 20 74 68 65 0a 58 20 2a | 20 73 65 74 20 64 65 73 | the.X *| set des|
|00000cc0| 63 72 69 70 74 69 6f 6e | 20 73 74 72 69 6e 67 2e |cription| string.|
|00000cd0| 0a 58 20 2a 2f 0a 58 76 | 6f 69 64 0a 58 4f 6e 65 |.X */.Xv|oid.XOne|
|00000ce0| 44 65 73 63 72 69 70 74 | 69 6f 6e 28 73 70 29 0a |Descript|ion(sp).|
|00000cf0| 58 20 20 20 73 65 74 5f | 74 79 70 65 20 2a 20 73 |X set_|type * s|
|00000d00| 70 20 3b 0a 58 7b 0a 58 | 20 20 20 69 6e 74 20 20 |p ;.X{.X| int |
|00000d10| 20 20 20 20 20 20 65 6c | 74 5f 63 6f 75 6e 74 20 | el|t_count |
|00000d20| 3b 0a 58 20 20 20 63 68 | 61 72 20 20 20 20 20 20 |;.X ch|ar |
|00000d30| 20 73 65 74 6e 75 6d 5b | 32 30 5d 20 3b 0a 58 20 | setnum[|20] ;.X |
|00000d40| 20 20 0a 58 20 20 20 73 | 70 72 69 6e 74 66 28 73 | .X s|printf(s|
|00000d50| 65 74 6e 75 6d 2c 22 53 | 25 64 22 2c 73 70 2d 3e |etnum,"S|%d",sp->|
|00000d60| 73 65 74 5f 6e 75 6d 29 | 20 3b 0a 58 20 20 20 65 |set_num)| ;.X e|
|00000d70| 6c 74 5f 63 6f 75 6e 74 | 20 3d 20 43 6f 75 6e 74 |lt_count| = Count|
|00000d80| 42 69 74 73 28 73 70 29 | 20 3b 0a 58 20 20 20 70 |Bits(sp)| ;.X p|
|00000d90| 72 69 6e 74 66 28 22 25 | 35 73 20 25 36 64 20 20 |rintf("%|5s %6d |
|00000da0| 25 73 5c 6e 22 2c 73 65 | 74 6e 75 6d 2c 65 6c 74 |%s\n",se|tnum,elt|
|00000db0| 5f 63 6f 75 6e 74 2c 73 | 70 2d 3e 73 65 74 5f 64 |_count,s|p->set_d|
|00000dc0| 65 73 63 29 20 3b 0a 58 | 7d 0a 58 0a 58 2f 2a 20 |esc) ;.X|}.X.X/* |
|00000dd0| 44 65 73 63 72 69 62 65 | 53 65 74 73 20 2d 20 50 |Describe|Sets - P|
|00000de0| 72 69 6e 74 20 64 65 73 | 63 72 69 70 74 69 6f 6e |rint des|cription|
|00000df0| 20 6f 66 20 61 6c 6c 20 | 74 68 65 20 73 65 74 73 | of all |the sets|
|00000e00| 2e 0a 58 20 2a 2f 0a 58 | 76 6f 69 64 0a 58 44 65 |..X */.X|void.XDe|
|00000e10| 73 63 72 69 62 65 53 65 | 74 73 28 29 0a 58 7b 0a |scribeSe|ts().X{.|
|00000e20| 58 20 20 20 69 6e 74 20 | 20 20 20 20 20 20 20 20 |X int | |
|00000e30| 20 20 20 69 20 3b 0a 58 | 0a 58 20 20 20 69 66 20 | i ;.X|.X if |
|00000e40| 28 4e 65 78 74 53 65 74 | 4e 75 6d 20 3e 20 30 29 |(NextSet|Num > 0)|
|00000e50| 20 7b 0a 58 20 20 20 20 | 20 20 66 6f 72 20 28 69 | {.X | for (i|
|00000e60| 20 3d 20 30 3b 20 69 20 | 3c 20 4e 65 78 74 53 65 | = 0; i |< NextSe|
|00000e70| 74 4e 75 6d 3b 20 2b 2b | 69 29 20 7b 0a 58 20 20 |tNum; ++|i) {.X |
|00000e80| 20 20 20 20 20 20 20 4f | 6e 65 44 65 73 63 72 69 | O|neDescri|
|00000e90| 70 74 69 6f 6e 28 54 68 | 65 53 65 74 73 5b 69 5d |ption(Th|eSets[i]|
|00000ea0| 29 20 3b 0a 58 20 20 20 | 20 20 20 7d 0a 58 20 20 |) ;.X | }.X |
|00000eb0| 20 7d 20 65 6c 73 65 20 | 7b 0a 58 20 20 20 20 20 | } else |{.X |
|00000ec0| 20 70 72 69 6e 74 66 28 | 22 4e 6f 20 73 65 74 73 | printf(|"No sets|
|00000ed0| 20 64 65 66 69 6e 65 64 | 20 79 65 74 2e 5c 6e 22 | defined| yet.\n"|
|00000ee0| 29 20 3b 0a 58 20 20 20 | 7d 0a 58 7d 0a 58 0a 58 |) ;.X |}.X}.X.X|
|00000ef0| 2f 2a 20 53 65 74 4c 69 | 73 74 20 2d 20 47 6f 20 |/* SetLi|st - Go |
|00000f00| 74 68 72 6f 75 67 68 20 | 74 68 65 20 62 69 74 20 |through |the bit |
|00000f10| 73 65 74 20 61 6e 64 20 | 61 64 64 20 74 68 65 20 |set and |add the |
|00000f20| 66 69 6c 65 20 6e 61 6d | 65 73 20 69 6e 0a 58 20 |file nam|es in.X |
|00000f30| 2a 20 69 74 20 74 6f 20 | 61 6e 20 69 64 65 6e 74 |* it to |an ident|
|00000f40| 69 66 69 65 72 20 6c 69 | 73 74 2e 0a 58 20 2a 2f |ifier li|st..X */|
|00000f50| 0a 58 69 64 5f 6c 69 73 | 74 5f 74 79 70 65 20 2a |.Xid_lis|t_type *|
|00000f60| 0a 58 53 65 74 4c 69 73 | 74 28 69 64 6c 70 2c 20 |.XSetLis|t(idlp, |
|00000f70| 73 70 29 0a 58 20 20 20 | 69 64 5f 6c 69 73 74 5f |sp).X |id_list_|
|00000f80| 74 79 70 65 20 2a 20 20 | 69 64 6c 70 20 3b 0a 58 |type * |idlp ;.X|
|00000f90| 20 20 20 73 65 74 5f 74 | 79 70 65 20 2a 20 20 20 | set_t|ype * |
|00000fa0| 20 20 20 73 70 20 3b 0a | 58 7b 0a 58 20 20 20 69 | sp ;.|X{.X i|
|00000fb0| 6e 74 20 20 20 20 20 20 | 20 20 69 20 3b 0a 58 20 |nt | i ;.X |
|00000fc0| 20 20 69 64 5f 74 79 70 | 65 20 2a 20 20 69 64 65 | id_typ|e * ide|
|00000fd0| 70 20 3b 0a 58 20 20 20 | 0a 58 20 20 20 66 6f 72 |p ;.X |.X for|
|00000fe0| 20 28 69 20 3d 20 30 3b | 20 69 20 3c 20 4e 65 78 | (i = 0;| i < Nex|
|00000ff0| 74 46 69 6c 65 4e 75 6d | 3b 20 2b 2b 69 29 20 7b |tFileNum|; ++i) {|
|00001000| 0a 58 20 20 20 20 20 20 | 69 66 20 28 46 69 6c 65 |.X |if (File|
|00001010| 4c 69 73 74 5b 69 5d 2d | 3e 6d 61 73 6b 5f 77 6f |List[i]-|>mask_wo|
|00001020| 72 64 20 3c 20 73 70 2d | 3e 73 65 74 5f 73 69 7a |rd < sp-|>set_siz|
|00001030| 65 29 20 7b 0a 58 20 20 | 20 20 20 20 20 20 20 69 |e) {.X | i|
|00001040| 66 20 28 73 70 2d 3e 73 | 65 74 5f 64 61 74 61 5b |f (sp->s|et_data[|
|00001050| 46 69 6c 65 4c 69 73 74 | 5b 69 5d 2d 3e 6d 61 73 |FileList|[i]->mas|
|00001060| 6b 5f 77 6f 72 64 5d 20 | 26 20 46 69 6c 65 4c 69 |k_word] |& FileLi|
|00001070| 73 74 5b 69 5d 2d 3e 6d | 61 73 6b 5f 62 69 74 29 |st[i]->m|ask_bit)|
|00001080| 20 7b 0a 58 20 20 20 20 | 20 20 20 20 20 20 20 20 | {.X | |
|00001090| 69 64 65 70 20 3d 20 28 | 69 64 5f 74 79 70 65 20 |idep = (|id_type |
|000010a0| 2a 29 6d 61 6c 6c 6f 63 | 28 73 69 7a 65 6f 66 28 |*)malloc|(sizeof(|
|000010b0| 69 64 5f 74 79 70 65 29 | 20 2b 0a 58 20 20 20 20 |id_type)| +.X |
|000010c0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000010d0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000010e0| 20 73 74 72 6c 65 6e 28 | 46 69 6c 65 4c 69 73 74 | strlen(|FileList|
|000010f0| 5b 69 5d 2d 3e 6e 61 6d | 65 29 29 20 3b 0a 58 20 |[i]->nam|e)) ;.X |
|00001100| 20 20 20 20 20 20 20 20 | 20 20 20 69 66 20 28 69 | | if (i|
|00001110| 64 65 70 20 3d 3d 20 4e | 55 4c 4c 29 20 7b 0a 58 |dep == N|ULL) {.X|
|00001120| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 66 | | f|
|00001130| 61 74 61 6c 28 22 4f 75 | 74 20 6f 66 20 6d 65 6d |atal("Ou|t of mem|
|00001140| 6f 72 79 20 69 6e 20 53 | 65 74 4c 69 73 74 22 29 |ory in S|etList")|
|00001150| 20 3b 0a 58 20 20 20 20 | 20 20 20 20 20 20 20 20 | ;.X | |
|00001160| 7d 0a 58 20 20 20 20 20 | 20 20 20 20 20 20 20 69 |}.X | i|
|00001170| 64 65 70 2d 3e 6e 65 78 | 74 5f 69 64 20 3d 20 4e |dep->nex|t_id = N|
|00001180| 55 4c 4c 20 3b 0a 58 20 | 20 20 20 20 20 20 20 20 |ULL ;.X | |
|00001190| 20 20 20 73 74 72 63 70 | 79 28 69 64 65 70 2d 3e | strcp|y(idep->|
|000011a0| 69 64 2c 20 46 69 6c 65 | 4c 69 73 74 5b 69 5d 2d |id, File|List[i]-|
|000011b0| 3e 6e 61 6d 65 29 20 3b | 0a 58 20 20 20 20 20 20 |>name) ;|.X |
|000011c0| 20 20 20 20 20 20 69 64 | 6c 70 20 3d 20 45 78 74 | id|lp = Ext|
|000011d0| 65 6e 64 4c 69 73 74 28 | 69 64 6c 70 2c 20 69 64 |endList(|idlp, id|
|000011e0| 65 70 29 20 3b 0a 58 20 | 20 20 20 20 20 20 20 20 |ep) ;.X | |
|000011f0| 7d 0a 58 20 20 20 20 20 | 20 7d 0a 58 20 20 20 7d |}.X | }.X }|
|00001200| 0a 58 20 20 20 72 65 74 | 75 72 6e 28 69 64 6c 70 |.X ret|urn(idlp|
|00001210| 29 20 3b 0a 58 7d 0a 58 | 0a 58 2f 2a 20 50 72 69 |) ;.X}.X|.X/* Pri|
|00001220| 6e 74 53 65 74 20 2d 20 | 47 6f 20 74 68 72 6f 75 |ntSet - |Go throu|
|00001230| 67 68 20 74 68 65 20 62 | 69 74 20 73 65 74 20 61 |gh the b|it set a|
|00001240| 6e 64 20 70 72 69 6e 74 | 20 74 68 65 20 66 69 6c |nd print| the fil|
|00001250| 65 20 6e 61 6d 65 73 0a | 58 20 2a 20 63 6f 72 72 |e names.|X * corr|
|00001260| 65 73 70 6f 6e 64 69 6e | 67 20 74 6f 20 61 6c 6c |espondin|g to all|
|00001270| 20 74 68 65 20 73 65 74 | 20 62 69 74 73 2e 0a 58 | the set| bits..X|
|00001280| 20 2a 2f 0a 58 76 6f 69 | 64 0a 58 50 72 69 6e 74 | */.Xvoi|d.XPrint|
|00001290| 53 65 74 28 73 70 29 0a | 58 20 20 20 73 65 74 5f |Set(sp).|X set_|
|000012a0| 74 79 70 65 20 2a 20 73 | 70 20 3b 0a 58 7b 0a 58 |type * s|p ;.X{.X|
|000012b0| 20 20 20 69 6e 74 20 20 | 20 20 20 20 20 20 69 20 | int | i |
|000012c0| 3b 0a 58 20 20 20 0a 58 | 20 20 20 66 6f 72 20 28 |;.X .X| for (|
|000012d0| 69 20 3d 20 30 3b 20 69 | 20 3c 20 4e 65 78 74 46 |i = 0; i| < NextF|
|000012e0| 69 6c 65 4e 75 6d 3b 20 | 2b 2b 69 29 20 7b 0a 58 |ileNum; |++i) {.X|
|000012f0| 20 20 20 20 20 20 69 66 | 20 28 46 69 6c 65 4c 69 | if| (FileLi|
|00001300| 73 74 5b 69 5d 2d 3e 6d | 61 73 6b 5f 77 6f 72 64 |st[i]->m|ask_word|
|00001310| 20 3c 20 73 70 2d 3e 73 | 65 74 5f 73 69 7a 65 29 | < sp->s|et_size)|
|00001320| 20 7b 0a 58 20 20 20 20 | 20 20 20 20 20 69 66 20 | {.X | if |
|00001330| 28 73 70 2d 3e 73 65 74 | 5f 64 61 74 61 5b 46 69 |(sp->set|_data[Fi|
|00001340| 6c 65 4c 69 73 74 5b 69 | 5d 2d 3e 6d 61 73 6b 5f |leList[i|]->mask_|
|00001350| 77 6f 72 64 5d 20 26 20 | 46 69 6c 65 4c 69 73 74 |word] & |FileList|
|00001360| 5b 69 5d 2d 3e 6d 61 73 | 6b 5f 62 69 74 29 20 7b |[i]->mas|k_bit) {|
|00001370| 0a 58 20 20 20 20 20 20 | 20 20 20 20 20 20 70 72 |.X | pr|
|00001380| 69 6e 74 66 28 22 25 73 | 5c 6e 22 2c 46 69 6c 65 |intf("%s|\n",File|
|00001390| 4c 69 73 74 5b 69 5d 2d | 3e 6e 61 6d 65 29 20 3b |List[i]-|>name) ;|
|000013a0| 0a 58 20 20 20 20 20 20 | 20 20 20 7d 0a 58 20 20 |.X | }.X |
|000013b0| 20 20 20 20 7d 0a 58 20 | 20 20 7d 0a 58 7d 0a 58 | }.X | }.X}.X|
|000013c0| 0a 58 2f 2a 20 46 72 65 | 65 20 75 70 20 61 6c 6c |.X/* Fre|e up all|
|000013d0| 20 73 70 61 63 65 20 75 | 73 65 64 20 62 79 20 63 | space u|sed by c|
|000013e0| 75 72 72 65 6e 74 20 73 | 65 74 20 6f 66 20 73 65 |urrent s|et of se|
|000013f0| 74 73 20 61 6e 64 20 72 | 65 73 65 74 20 61 6c 6c |ts and r|eset all|
|00001400| 0a 58 20 2a 20 73 65 74 | 20 6e 75 6d 62 65 72 73 |.X * set| numbers|
|00001410| 2e 0a 58 20 2a 2f 0a 58 | 76 6f 69 64 0a 58 46 6c |..X */.X|void.XFl|
|00001420| 75 73 68 53 65 74 73 28 | 29 0a 58 7b 0a 58 20 20 |ushSets(|).X{.X |
|00001430| 20 69 6e 74 20 20 20 20 | 20 20 20 20 20 69 20 3b | int | i ;|
|00001440| 0a 58 20 20 20 0a 58 20 | 20 20 66 6f 72 20 28 69 |.X .X | for (i|
|00001450| 20 3d 20 30 3b 20 69 20 | 3c 20 4e 65 78 74 53 65 | = 0; i |< NextSe|
|00001460| 74 4e 75 6d 3b 20 2b 2b | 69 29 20 7b 0a 58 20 20 |tNum; ++|i) {.X |
|00001470| 20 20 20 20 66 72 65 65 | 28 54 68 65 53 65 74 73 | free|(TheSets|
|00001480| 5b 69 5d 2d 3e 73 65 74 | 5f 64 65 73 63 29 20 3b |[i]->set|_desc) ;|
|00001490| 0a 58 20 20 20 20 20 20 | 66 72 65 65 28 54 68 65 |.X |free(The|
|000014a0| 53 65 74 73 5b 69 5d 29 | 20 3b 0a 58 20 20 20 7d |Sets[i])| ;.X }|
|000014b0| 0a 58 20 20 20 4e 65 78 | 74 53 65 74 4e 75 6d 20 |.X Nex|tSetNum |
|000014c0| 3d 20 30 20 3b 0a 58 7d | 0a 58 0a 58 2f 2a 20 49 |= 0 ;.X}|.X.X/* I|
|000014d0| 6e 69 74 4c 69 73 74 20 | 2d 20 63 72 65 61 74 65 |nitList |- create|
|000014e0| 20 61 6e 20 65 6d 70 74 | 79 20 69 64 65 6e 74 69 | an empt|y identi|
|000014f0| 66 69 65 72 20 6c 69 73 | 74 2e 0a 58 20 2a 2f 0a |fier lis|t..X */.|
|00001500| 58 69 64 5f 6c 69 73 74 | 5f 74 79 70 65 20 2a 0a |Xid_list|_type *.|
|00001510| 58 49 6e 69 74 4c 69 73 | 74 28 29 0a 58 7b 0a 58 |XInitLis|t().X{.X|
|00001520| 20 20 20 69 64 5f 6c 69 | 73 74 5f 74 79 70 65 20 | id_li|st_type |
|00001530| 2a 20 20 20 69 64 6c 70 | 20 3b 0a 58 20 20 20 0a |* idlp| ;.X .|
|00001540| 58 20 20 20 69 64 6c 70 | 20 3d 20 28 69 64 5f 6c |X idlp| = (id_l|
|00001550| 69 73 74 5f 74 79 70 65 | 20 2a 29 6d 61 6c 6c 6f |ist_type| *)mallo|
|00001560| 63 28 73 69 7a 65 6f 66 | 28 69 64 5f 6c 69 73 74 |c(sizeof|(id_list|
|00001570| 5f 74 79 70 65 29 29 20 | 3b 0a 58 20 20 20 69 66 |_type)) |;.X if|
|00001580| 20 28 69 64 6c 70 20 3d | 3d 20 4e 55 4c 4c 29 20 | (idlp =|= NULL) |
|00001590| 7b 0a 58 20 20 20 20 20 | 20 66 61 74 61 6c 28 22 |{.X | fatal("|
|000015a0| 4f 75 74 20 6f 66 20 6d | 65 6d 6f 72 79 20 69 6e |Out of m|emory in|
|000015b0| 20 49 6e 69 74 4c 69 73 | 74 22 29 20 3b 0a 58 20 | InitLis|t") ;.X |
|000015c0| 20 20 7d 0a 58 20 20 20 | 69 64 6c 70 2d 3e 69 64 | }.X |idlp->id|
|000015d0| 5f 63 6f 75 6e 74 20 3d | 20 30 20 3b 0a 58 20 20 |_count =| 0 ;.X |
|000015e0| 20 69 64 6c 70 2d 3e 65 | 6e 64 5f 70 74 72 5f 70 | idlp->e|nd_ptr_p|
|000015f0| 74 72 20 3d 20 26 20 28 | 69 64 6c 70 2d 3e 69 64 |tr = & (|idlp->id|
|00001600| 5f 6c 69 73 74 29 20 3b | 0a 58 20 20 20 69 64 6c |_list) ;|.X idl|
|00001610| 70 2d 3e 69 64 5f 6c 69 | 73 74 20 3d 20 4e 55 4c |p->id_li|st = NUL|
|00001620| 4c 20 3b 0a 58 20 20 20 | 72 65 74 75 72 6e 28 69 |L ;.X |return(i|
|00001630| 64 6c 70 29 20 3b 0a 58 | 7d 0a 58 0a 58 2f 2a 20 |dlp) ;.X|}.X.X/* |
|00001640| 45 78 74 65 6e 64 4c 69 | 73 74 20 2d 20 61 64 64 |ExtendLi|st - add|
|00001650| 20 6f 6e 65 20 69 64 65 | 6e 74 69 66 69 65 72 20 | one ide|ntifier |
|00001660| 74 6f 20 61 6e 20 49 44 | 20 6c 69 73 74 2e 0a 58 |to an ID| list..X|
|00001670| 20 2a 2f 0a 58 69 64 5f | 6c 69 73 74 5f 74 79 70 | */.Xid_|list_typ|
|00001680| 65 20 2a 0a 58 45 78 74 | 65 6e 64 4c 69 73 74 28 |e *.XExt|endList(|
|00001690| 69 64 6c 70 2c 20 69 64 | 70 29 0a 58 20 20 20 69 |idlp, id|p).X i|
|000016a0| 64 5f 6c 69 73 74 5f 74 | 79 70 65 20 2a 20 69 64 |d_list_t|ype * id|
|000016b0| 6c 70 20 3b 0a 58 20 20 | 20 69 64 5f 74 79 70 65 |lp ;.X | id_type|
|000016c0| 20 2a 20 20 20 20 20 20 | 69 64 70 20 3b 0a 58 7b | * |idp ;.X{|
|000016d0| 0a 58 20 20 20 2a 28 69 | 64 6c 70 2d 3e 65 6e 64 |.X *(i|dlp->end|
|000016e0| 5f 70 74 72 5f 70 74 72 | 29 20 3d 20 69 64 70 20 |_ptr_ptr|) = idp |
|000016f0| 3b 0a 58 20 20 20 69 64 | 6c 70 2d 3e 65 6e 64 5f |;.X id|lp->end_|
|00001700| 70 74 72 5f 70 74 72 20 | 3d 20 26 28 69 64 70 2d |ptr_ptr |= &(idp-|
|00001710| 3e 6e 65 78 74 5f 69 64 | 29 20 3b 0a 58 20 20 20 |>next_id|) ;.X |
|00001720| 72 65 74 75 72 6e 28 69 | 64 6c 70 29 20 3b 0a 58 |return(i|dlp) ;.X|
|00001730| 7d 0a 58 0a 58 2f 2a 20 | 49 6e 69 74 49 69 64 20 |}.X.X/* |InitIid |
|00001740| 2d 20 64 6f 20 61 6c 6c | 20 69 6e 69 74 69 61 6c |- do all| initial|
|00001750| 20 70 72 6f 63 65 73 73 | 69 6e 67 20 66 6f 72 20 | process|ing for |
|00001760| 69 69 64 2e 0a 58 20 2a | 20 20 20 31 29 20 44 65 |iid..X *| 1) De|
|00001770| 74 65 72 6d 69 6e 65 20 | 74 68 65 20 73 69 7a 65 |termine |the size|
|00001780| 20 6f 66 20 61 20 75 6e | 73 69 67 6e 65 64 20 6c | of a un|signed l|
|00001790| 6f 6e 67 20 66 6f 72 20 | 62 69 74 20 73 65 74 20 |ong for |bit set |
|000017a0| 73 74 75 66 66 2e 0a 58 | 20 2a 20 20 20 32 29 20 |stuff..X| * 2) |
|000017b0| 46 69 6e 64 20 6f 75 74 | 20 74 68 65 20 6e 61 6d |Find out| the nam|
|000017c0| 65 20 6f 66 20 74 68 65 | 20 70 61 67 65 72 20 70 |e of the| pager p|
|000017d0| 72 6f 67 72 61 6d 20 74 | 6f 20 75 73 65 2e 0a 58 |rogram t|o use..X|
|000017e0| 20 2a 20 20 20 33 29 20 | 43 72 65 61 74 65 20 74 | * 3) |Create t|
|000017f0| 68 65 20 48 65 6c 70 53 | 65 74 20 28 70 6f 69 6e |he HelpS|et (poin|
|00001800| 74 69 6e 67 20 74 6f 20 | 74 68 65 20 68 65 6c 70 |ting to |the help|
|00001810| 20 66 69 6c 65 29 2e 0a | 58 20 2a 20 20 20 34 29 | file)..|X * 4)|
|00001820| 20 53 65 74 75 70 20 74 | 68 65 20 70 72 6f 6d 70 | Setup t|he promp|
|00001830| 74 2e 0a 58 20 2a 2f 0a | 58 76 6f 69 64 0a 58 49 |t..X */.|Xvoid.XI|
|00001840| 6e 69 74 49 69 64 28 29 | 0a 58 7b 0a 58 20 20 20 |nitIid()|.X{.X |
|00001850| 75 6e 73 69 67 6e 65 64 | 20 6c 6f 6e 67 20 20 20 |unsigned| long |
|00001860| 20 20 20 62 69 74 5f 6d | 61 73 6b 20 3d 20 31 20 | bit_m|ask = 1 |
|00001870| 3b 20 20 20 2f 2a 20 66 | 69 6e 64 20 6e 75 6d 62 |; /* f|ind numb|
|00001880| 65 72 20 6f 66 20 62 69 | 74 73 20 69 6e 20 6c 6f |er of bi|ts in lo|
|00001890| 6e 67 20 2a 2f 0a 58 20 | 20 20 69 6e 74 20 20 20 |ng */.X | int |
|000018a0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 69 20 3b | | i ;|
|000018b0| 0a 58 20 20 20 63 68 61 | 72 20 2a 20 20 20 20 20 |.X cha|r * |
|000018c0| 20 20 20 20 20 20 20 20 | 70 61 67 65 20 3b 20 20 | |page ; |
|000018d0| 20 20 20 20 20 20 20 20 | 20 2f 2a 20 70 61 67 65 | | /* page|
|000018e0| 72 20 70 72 6f 67 72 61 | 6d 20 2a 2f 0a 58 20 20 |r progra|m */.X |
|000018f0| 20 0a 58 20 20 20 64 6f | 20 7b 0a 58 20 20 20 20 | .X do| {.X |
|00001900| 20 20 68 69 67 68 5f 62 | 69 74 20 3d 20 62 69 74 | high_b|it = bit|
|00001910| 5f 6d 61 73 6b 20 3b 0a | 58 20 20 20 20 20 20 62 |_mask ;.|X b|
|00001920| 69 74 5f 6d 61 73 6b 20 | 3c 3c 3d 20 31 20 3b 0a |it_mask |<<= 1 ;.|
|00001930| 58 20 20 20 7d 20 77 68 | 69 6c 65 20 28 62 69 74 |X } wh|ile (bit|
|00001940| 5f 6d 61 73 6b 20 21 3d | 20 30 29 20 3b 0a 58 20 |_mask !=| 0) ;.X |
|00001950| 20 20 0a 58 20 20 20 4e | 65 78 74 4d 61 73 6b 42 | .X N|extMaskB|
|00001960| 69 74 20 3d 20 68 69 67 | 68 5f 62 69 74 20 3b 0a |it = hig|h_bit ;.|
|00001970| 58 20 20 20 0a 58 20 20 | 20 70 61 67 65 20 3d 20 |X .X | page = |
|00001980| 67 65 74 65 6e 76 28 22 | 50 41 47 45 52 22 29 20 |getenv("|PAGER") |
|00001990| 3b 0a 58 20 20 20 69 66 | 20 28 70 61 67 65 20 3d |;.X if| (page =|
|000019a0| 3d 20 4e 55 4c 4c 29 20 | 7b 0a 58 20 20 20 20 20 |= NULL) |{.X |
|000019b0| 20 70 61 67 65 20 3d 20 | 50 41 47 45 52 20 3b 0a | page = |PAGER ;.|
|000019c0| 58 20 20 20 7d 0a 58 20 | 20 20 73 74 72 63 70 79 |X }.X | strcpy|
|000019d0| 28 50 61 67 65 72 2c 20 | 70 61 67 65 29 20 3b 0a |(Pager, |page) ;.|
|000019e0| 58 20 20 20 0a 58 20 20 | 20 46 6c 75 73 68 46 69 |X .X | FlushFi|
|000019f0| 6c 65 73 28 29 20 3b 0a | 58 20 20 20 49 6e 73 74 |les() ;.|X Inst|
|00001a00| 61 6c 6c 46 69 6c 65 28 | 48 45 4c 50 46 49 4c 45 |allFile(|HELPFILE|
|00001a10| 29 20 3b 0a 58 20 20 20 | 48 65 6c 70 53 65 74 20 |) ;.X |HelpSet |
|00001a20| 3d 20 28 73 65 74 5f 74 | 79 70 65 20 2a 29 0a 58 |= (set_t|ype *).X|
|00001a30| 20 20 20 20 20 20 6d 61 | 6c 6c 6f 63 28 73 69 7a | ma|lloc(siz|
|00001a40| 65 6f 66 28 73 65 74 5f | 74 79 70 65 29 20 2b 20 |eof(set_|type) + |
|00001a50| 73 69 7a 65 6f 66 28 75 | 6e 73 69 67 6e 65 64 20 |sizeof(u|nsigned |
|00001a60| 6c 6f 6e 67 29 20 2a 20 | 4d 61 78 43 75 72 46 69 |long) * |MaxCurFi|
|00001a70| 6c 65 29 20 3b 0a 58 20 | 20 20 69 66 20 28 48 65 |le) ;.X | if (He|
|00001a80| 6c 70 53 65 74 20 3d 3d | 20 4e 55 4c 4c 29 20 7b |lpSet ==| NULL) {|
|00001a90| 0a 58 20 20 20 20 20 20 | 66 61 74 61 6c 28 22 4e |.X |fatal("N|
|00001aa0| 6f 20 6d 65 6d 6f 72 79 | 20 66 6f 72 20 73 65 74 |o memory| for set|
|00001ab0| 20 69 6e 20 49 6e 69 74 | 49 69 64 22 29 20 3b 0a | in Init|Iid") ;.|
|00001ac0| 58 20 20 20 7d 0a 58 20 | 20 20 48 65 6c 70 53 65 |X }.X | HelpSe|
|00001ad0| 74 2d 3e 73 65 74 5f 74 | 61 69 6c 20 3d 20 30 20 |t->set_t|ail = 0 |
|00001ae0| 3b 0a 58 20 20 20 48 65 | 6c 70 53 65 74 2d 3e 73 |;.X He|lpSet->s|
|00001af0| 65 74 5f 64 65 73 63 20 | 3d 20 4e 55 4c 4c 20 3b |et_desc |= NULL ;|
|00001b00| 0a 58 20 20 20 48 65 6c | 70 53 65 74 2d 3e 73 65 |.X Hel|pSet->se|
|00001b10| 74 5f 73 69 7a 65 20 3d | 20 4d 61 78 43 75 72 46 |t_size =| MaxCurF|
|00001b20| 69 6c 65 20 2b 20 31 20 | 3b 0a 58 20 20 20 66 6f |ile + 1 |;.X fo|
|00001b30| 72 20 28 69 20 3d 20 30 | 3b 20 69 20 3c 3d 20 4d |r (i = 0|; i <= M|
|00001b40| 61 78 43 75 72 46 69 6c | 65 3b 20 2b 2b 69 29 20 |axCurFil|e; ++i) |
|00001b50| 7b 0a 58 20 20 20 20 20 | 20 48 65 6c 70 53 65 74 |{.X | HelpSet|
|00001b60| 2d 3e 73 65 74 5f 64 61 | 74 61 5b 69 5d 20 3d 20 |->set_da|ta[i] = |
|00001b70| 54 68 65 46 69 6c 65 73 | 5b 69 5d 20 3b 0a 58 20 |TheFiles|[i] ;.X |
|00001b80| 20 20 7d 0a 58 20 20 20 | 0a 58 20 20 20 70 61 67 | }.X |.X pag|
|00001b90| 65 20 3d 20 67 65 74 65 | 6e 76 28 22 50 53 31 22 |e = gete|nv("PS1"|
|00001ba0| 29 20 3b 0a 58 20 20 20 | 69 66 20 28 70 61 67 65 |) ;.X |if (page|
|00001bb0| 20 3d 3d 20 4e 55 4c 4c | 29 20 7b 0a 58 20 20 20 | == NULL|) {.X |
|00001bc0| 20 20 20 70 61 67 65 20 | 3d 20 50 52 4f 4d 50 54 | page |= PROMPT|
|00001bd0| 20 3b 0a 58 20 20 20 7d | 0a 58 20 20 20 73 74 72 | ;.X }|.X str|
|00001be0| 63 70 79 28 50 72 6f 6d | 70 74 2c 20 70 61 67 65 |cpy(Prom|pt, page|
|00001bf0| 29 20 3b 0a 58 7d 0a 58 | 0a 58 2f 2a 20 49 6e 73 |) ;.X}.X|.X/* Ins|
|00001c00| 74 61 6c 6c 46 69 6c 65 | 20 2d 20 69 6e 73 74 61 |tallFile| - insta|
|00001c10| 6c 6c 20 61 20 66 69 6c | 65 20 6e 61 6d 65 20 69 |ll a fil|e name i|
|00001c20| 6e 20 74 68 65 20 73 79 | 6d 74 61 62 2e 20 52 65 |n the sy|mtab. Re|
|00001c30| 74 75 72 6e 20 74 68 65 | 0a 58 20 2a 20 73 79 6d |turn the|.X * sym|
|00001c40| 62 6f 6c 20 74 61 62 6c | 65 20 70 6f 69 6e 74 65 |bol tabl|e pointe|
|00001c50| 72 20 6f 66 20 74 68 65 | 20 66 69 6c 65 2e 0a 58 |r of the| file..X|
|00001c60| 20 2a 2f 0a 58 73 79 6d | 74 61 62 5f 74 79 70 65 | */.Xsym|tab_type|
|00001c70| 20 2a 0a 58 49 6e 73 74 | 61 6c 6c 46 69 6c 65 28 | *.XInst|allFile(|
|00001c80| 66 70 29 0a 58 20 20 20 | 63 68 61 72 20 2a 20 20 |fp).X |char * |
|00001c90| 20 20 20 20 66 70 20 3b | 0a 58 7b 0a 58 20 20 20 | fp ;|.X{.X |
|00001ca0| 63 68 61 72 20 20 20 20 | 20 20 20 20 20 20 20 20 |char | |
|00001cb0| 20 63 20 3b 0a 58 20 20 | 20 75 6e 73 69 67 6e 65 | c ;.X | unsigne|
|00001cc0| 64 20 6c 6f 6e 67 20 20 | 20 20 68 61 73 68 5f 63 |d long | hash_c|
|00001cd0| 6f 64 65 20 3b 0a 58 20 | 20 20 69 6e 74 20 20 20 |ode ;.X | int |
|00001ce0| 20 20 20 20 20 20 20 20 | 20 20 20 69 20 3b 0a 58 | | i ;.X|
|00001cf0| 20 20 20 63 68 61 72 20 | 2a 20 20 20 20 20 20 20 | char |* |
|00001d00| 20 20 20 20 73 70 20 3b | 0a 58 20 20 20 73 79 6d | sp ;|.X sym|
|00001d10| 74 61 62 5f 74 79 70 65 | 20 2a 20 20 20 20 73 79 |tab_type| * sy|
|00001d20| 6d 70 20 3b 0a 58 20 20 | 20 0a 58 20 20 20 68 61 |mp ;.X | .X ha|
|00001d30| 73 68 5f 63 6f 64 65 20 | 3d 20 30 20 3b 0a 58 20 |sh_code |= 0 ;.X |
|00001d40| 20 20 73 70 20 3d 20 66 | 70 20 3b 0a 58 20 20 20 | sp = f|p ;.X |
|00001d50| 77 68 69 6c 65 20 28 28 | 63 20 3d 20 2a 73 70 2b |while ((|c = *sp+|
|00001d60| 2b 29 20 21 3d 20 27 5c | 30 27 29 20 7b 0a 58 20 |+) != '\|0') {.X |
|00001d70| 20 20 20 20 20 68 61 73 | 68 5f 63 6f 64 65 20 3c | has|h_code <|
|00001d80| 3c 3d 20 31 20 3b 0a 58 | 20 20 20 20 20 20 68 61 |<= 1 ;.X| ha|
|00001d90| 73 68 5f 63 6f 64 65 20 | 5e 3d 20 28 75 6e 73 69 |sh_code |^= (unsi|
|00001da0| 67 6e 65 64 20 6c 6f 6e | 67 29 28 63 29 20 3b 0a |gned lon|g)(c) ;.|
|00001db0| 58 20 20 20 20 20 20 69 | 66 20 28 68 61 73 68 5f |X i|f (hash_|
|00001dc0| 63 6f 64 65 20 26 20 68 | 69 67 68 5f 62 69 74 29 |code & h|igh_bit)|
|00001dd0| 20 7b 0a 58 20 20 20 20 | 20 20 20 20 20 68 61 73 | {.X | has|
|00001de0| 68 5f 63 6f 64 65 20 26 | 3d 20 7e 20 68 69 67 68 |h_code &|= ~ high|
|00001df0| 5f 62 69 74 20 3b 0a 58 | 20 20 20 20 20 20 20 20 |_bit ;.X| |
|00001e00| 20 68 61 73 68 5f 63 6f | 64 65 20 5e 3d 20 31 20 | hash_co|de ^= 1 |
|00001e10| 3b 0a 58 20 20 20 20 20 | 20 7d 0a 58 20 20 20 7d |;.X | }.X }|
|00001e20| 0a 58 20 20 20 68 61 73 | 68 5f 63 6f 64 65 20 25 |.X has|h_code %|
|00001e30| 3d 20 48 41 53 48 5f 53 | 49 5a 45 20 3b 0a 58 20 |= HASH_S|IZE ;.X |
|00001e40| 20 20 73 79 6d 70 20 3d | 20 48 61 73 68 54 61 62 | symp =| HashTab|
|00001e50| 6c 65 5b 68 61 73 68 5f | 63 6f 64 65 5d 20 3b 0a |le[hash_|code] ;.|
|00001e60| 58 20 20 20 77 68 69 6c | 65 20 28 73 79 6d 70 20 |X whil|e (symp |
|00001e70| 21 3d 20 4e 55 4c 4c 20 | 26 26 20 73 74 72 63 6d |!= NULL |&& strcm|
|00001e80| 70 28 73 79 6d 70 2d 3e | 6e 61 6d 65 2c 20 66 70 |p(symp->|name, fp|
|00001e90| 29 29 20 7b 0a 58 20 20 | 20 20 20 20 73 79 6d 70 |)) {.X | symp|
|00001ea0| 20 3d 20 73 79 6d 70 2d | 3e 68 61 73 68 5f 6c 69 | = symp-|>hash_li|
|00001eb0| 6e 6b 20 3b 0a 58 20 20 | 20 7d 0a 58 20 20 20 69 |nk ;.X | }.X i|
|00001ec0| 66 20 28 73 79 6d 70 20 | 3d 3d 20 4e 55 4c 4c 29 |f (symp |== NULL)|
|00001ed0| 20 7b 0a 58 20 20 20 20 | 20 20 73 79 6d 70 20 3d | {.X | symp =|
|00001ee0| 20 28 73 79 6d 74 61 62 | 5f 74 79 70 65 20 2a 29 | (symtab|_type *)|
|00001ef0| 6d 61 6c 6c 6f 63 28 73 | 69 7a 65 6f 66 28 73 79 |malloc(s|izeof(sy|
|00001f00| 6d 74 61 62 5f 74 79 70 | 65 29 20 2b 20 73 74 72 |mtab_typ|e) + str|
|00001f10| 6c 65 6e 28 66 70 29 29 | 20 3b 0a 58 20 20 20 20 |len(fp))| ;.X |
|00001f20| 20 20 69 66 20 28 73 79 | 6d 70 20 3d 3d 20 4e 55 | if (sy|mp == NU|
|00001f30| 4c 4c 29 20 7b 0a 58 20 | 20 20 20 20 20 20 20 20 |LL) {.X | |
|00001f40| 66 61 74 61 6c 28 22 4e | 6f 20 6d 65 6d 6f 72 79 |fatal("N|o memory|
|00001f50| 20 66 6f 72 20 73 79 6d | 62 6f 6c 20 74 61 62 6c | for sym|bol tabl|
|00001f60| 65 20 65 6e 74 72 79 20 | 69 6e 20 49 6e 73 74 61 |e entry |in Insta|
|00001f70| 6c 6c 46 69 6c 65 22 29 | 20 3b 0a 58 20 20 20 20 |llFile")| ;.X |
|00001f80| 20 20 7d 0a 58 20 20 20 | 20 20 20 73 74 72 63 70 | }.X | strcp|
|00001f90| 79 28 73 79 6d 70 2d 3e | 6e 61 6d 65 2c 20 66 70 |y(symp->|name, fp|
|00001fa0| 29 20 3b 0a 58 20 20 20 | 20 20 20 73 79 6d 70 2d |) ;.X | symp-|
|00001fb0| 3e 68 61 73 68 5f 6c 69 | 6e 6b 20 3d 20 48 61 73 |>hash_li|nk = Has|
|00001fc0| 68 54 61 62 6c 65 5b 68 | 61 73 68 5f 63 6f 64 65 |hTable[h|ash_code|
|00001fd0| 5d 20 3b 0a 58 20 20 20 | 20 20 20 48 61 73 68 54 |] ;.X | HashT|
|00001fe0| 61 62 6c 65 5b 68 61 73 | 68 5f 63 6f 64 65 5d 20 |able[has|h_code] |
|00001ff0| 3d 20 73 79 6d 70 20 3b | 0a 58 20 20 20 20 20 20 |= symp ;|.X |
|00002000| 69 66 20 28 4e 65 78 74 | 4d 61 73 6b 57 6f 72 64 |if (Next|MaskWord|
|00002010| 20 3e 3d 20 46 69 6c 65 | 53 70 61 63 65 29 20 7b | >= File|Space) {|
|00002020| 0a 58 20 20 20 20 20 20 | 20 20 20 46 69 6c 65 53 |.X | FileS|
|00002030| 70 61 63 65 20 2b 3d 20 | 31 30 30 30 20 3b 0a 58 |pace += |1000 ;.X|
|00002040| 20 20 20 20 20 20 20 20 | 20 69 66 20 28 54 68 65 | | if (The|
|00002050| 46 69 6c 65 73 20 21 3d | 20 4e 55 4c 4c 29 20 7b |Files !=| NULL) {|
|00002060| 0a 58 20 20 20 20 20 20 | 20 20 20 20 20 20 54 68 |.X | Th|
|00002070| 65 46 69 6c 65 73 20 3d | 20 28 75 6e 73 69 67 6e |eFiles =| (unsign|
|00002080| 65 64 20 6c 6f 6e 67 20 | 2a 29 0a 58 20 20 20 20 |ed long |*).X |
|00002090| 20 20 20 20 20 20 20 20 | 20 20 20 72 65 61 6c 6c | | reall|
|000020a0| 6f 63 28 54 68 65 46 69 | 6c 65 73 2c 20 73 69 7a |oc(TheFi|les, siz|
|000020b0| 65 6f 66 28 75 6e 73 69 | 67 6e 65 64 20 6c 6f 6e |eof(unsi|gned lon|
|000020c0| 67 29 20 2a 20 46 69 6c | 65 53 70 61 63 65 29 20 |g) * Fil|eSpace) |
|000020d0| 3b 0a 58 20 20 20 20 20 | 20 20 20 20 7d 20 65 6c |;.X | } el|
|000020e0| 73 65 20 7b 0a 58 20 20 | 20 20 20 20 20 20 20 20 |se {.X | |
|000020f0| 20 20 54 68 65 46 69 6c | 65 73 20 3d 20 28 75 6e | TheFil|es = (un|
|00002100| 73 69 67 6e 65 64 20 6c | 6f 6e 67 20 2a 29 0a 58 |signed l|ong *).X|
|00002110| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 6d | | m|
|00002120| 61 6c 6c 6f 63 28 73 69 | 7a 65 6f 66 28 75 6e 73 |alloc(si|zeof(uns|
|00002130| 69 67 6e 65 64 20 6c 6f | 6e 67 29 20 2a 20 46 69 |igned lo|ng) * Fi|
|00002140| 6c 65 53 70 61 63 65 29 | 20 3b 0a 58 20 20 20 20 |leSpace)| ;.X |
|00002150| 20 20 20 20 20 7d 0a 58 | 20 20 20 20 20 20 20 20 | }.X| |
|00002160| 20 69 66 20 28 54 68 65 | 46 69 6c 65 73 20 3d 3d | if (The|Files ==|
|00002170| 20 4e 55 4c 4c 29 20 7b | 0a 58 20 20 20 20 20 20 | NULL) {|.X |
|00002180| 20 20 20 20 20 20 66 61 | 74 61 6c 28 22 4e 6f 20 | fa|tal("No |
|00002190| 6d 65 6d 6f 72 79 20 66 | 6f 72 20 54 68 65 46 69 |memory f|or TheFi|
|000021a0| 6c 65 73 20 69 6e 20 49 | 6e 73 74 61 6c 6c 46 69 |les in I|nstallFi|
|000021b0| 6c 65 22 29 20 3b 0a 58 | 20 20 20 20 20 20 20 20 |le") ;.X| |
|000021c0| 20 7d 0a 58 20 20 20 20 | 20 20 20 20 20 66 6f 72 | }.X | for|
|000021d0| 20 28 69 20 3d 20 4e 65 | 78 74 4d 61 73 6b 57 6f | (i = Ne|xtMaskWo|
|000021e0| 72 64 3b 20 69 20 3c 20 | 46 69 6c 65 53 70 61 63 |rd; i < |FileSpac|
|000021f0| 65 3b 20 2b 2b 69 29 20 | 7b 0a 58 20 20 20 20 20 |e; ++i) |{.X |
|00002200| 20 20 20 20 20 20 20 54 | 68 65 46 69 6c 65 73 5b | T|heFiles[|
|00002210| 69 5d 20 3d 20 30 20 3b | 0a 58 20 20 20 20 20 20 |i] = 0 ;|.X |
|00002220| 20 20 20 7d 0a 58 20 20 | 20 20 20 20 7d 0a 58 20 | }.X | }.X |
|00002230| 20 20 20 20 20 73 79 6d | 70 2d 3e 6d 61 73 6b 5f | sym|p->mask_|
|00002240| 77 6f 72 64 20 3d 20 4e | 65 78 74 4d 61 73 6b 57 |word = N|extMaskW|
|00002250| 6f 72 64 20 3b 0a 58 20 | 20 20 20 20 20 73 79 6d |ord ;.X | sym|
|00002260| 70 2d 3e 6d 61 73 6b 5f | 62 69 74 20 3d 20 4e 65 |p->mask_|bit = Ne|
|00002270| 78 74 4d 61 73 6b 42 69 | 74 20 3b 0a 58 20 20 20 |xtMaskBi|t ;.X |
|00002280| 20 20 20 4e 65 78 74 4d | 61 73 6b 42 69 74 20 3e | NextM|askBit >|
|00002290| 3e 3d 20 31 20 3b 0a 58 | 20 20 20 20 20 20 69 66 |>= 1 ;.X| if|
|000022a0| 20 28 4e 65 78 74 4d 61 | 73 6b 42 69 74 20 3d 3d | (NextMa|skBit ==|
|000022b0| 20 30 29 20 7b 0a 58 20 | 20 20 20 20 20 20 20 20 | 0) {.X | |
|000022c0| 4e 65 78 74 4d 61 73 6b | 42 69 74 20 3d 20 68 69 |NextMask|Bit = hi|
|000022d0| 67 68 5f 62 69 74 20 3b | 0a 58 20 20 20 20 20 20 |gh_bit ;|.X |
|000022e0| 20 20 20 2b 2b 4e 65 78 | 74 4d 61 73 6b 57 6f 72 | ++Nex|tMaskWor|
|000022f0| 64 20 3b 0a 58 20 20 20 | 20 20 20 7d 0a 58 20 20 |d ;.X | }.X |
|00002300| 20 20 20 20 69 66 20 28 | 4e 65 78 74 46 69 6c 65 | if (|NextFile|
|00002310| 4e 75 6d 20 3e 3d 20 4c | 69 73 74 53 70 61 63 65 |Num >= L|istSpace|
|00002320| 29 20 7b 0a 58 20 20 20 | 20 20 20 20 20 20 4c 69 |) {.X | Li|
|00002330| 73 74 53 70 61 63 65 20 | 2b 3d 20 31 30 30 30 20 |stSpace |+= 1000 |
|00002340| 3b 0a 58 20 20 20 20 20 | 20 20 20 20 69 66 20 28 |;.X | if (|
|00002350| 46 69 6c 65 4c 69 73 74 | 20 3d 3d 20 4e 55 4c 4c |FileList| == NULL|
|00002360| 29 20 7b 0a 58 20 20 20 | 20 20 20 20 20 20 20 20 |) {.X | |
|00002370| 20 46 69 6c 65 4c 69 73 | 74 20 3d 20 28 73 79 6d | FileLis|t = (sym|
|00002380| 74 61 62 5f 74 79 70 65 | 20 2a 2a 29 0a 58 20 20 |tab_type| **).X |
|00002390| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 6d 61 6c | | mal|
|000023a0| 6c 6f 63 28 73 69 7a 65 | 6f 66 28 73 79 6d 74 61 |loc(size|of(symta|
|000023b0| 62 5f 74 79 70 65 20 2a | 29 20 2a 20 4c 69 73 74 |b_type *|) * List|
|000023c0| 53 70 61 63 65 29 20 3b | 0a 58 20 20 20 20 20 20 |Space) ;|.X |
|000023d0| 20 20 20 7d 20 65 6c 73 | 65 20 7b 0a 58 20 20 20 | } els|e {.X |
|000023e0| 20 20 20 20 20 20 20 20 | 20 46 69 6c 65 4c 69 73 | | FileLis|
|000023f0| 74 20 3d 20 28 73 79 6d | 74 61 62 5f 74 79 70 65 |t = (sym|tab_type|
|00002400| 20 2a 2a 29 0a 58 20 20 | 20 20 20 20 20 20 20 20 | **).X | |
|00002410| 20 20 20 20 20 72 65 61 | 6c 6c 6f 63 28 46 69 6c | rea|lloc(Fil|
|00002420| 65 4c 69 73 74 2c 20 4c | 69 73 74 53 70 61 63 65 |eList, L|istSpace|
|00002430| 20 2a 20 73 69 7a 65 6f | 66 28 73 79 6d 74 61 62 | * sizeo|f(symtab|
|00002440| 5f 74 79 70 65 20 2a 29 | 29 20 3b 0a 58 20 20 20 |_type *)|) ;.X |
|00002450| 20 20 20 20 20 20 7d 0a | 58 20 20 20 20 20 20 20 | }.|X |
|00002460| 20 20 69 66 20 28 46 69 | 6c 65 4c 69 73 74 20 3d | if (Fi|leList =|
|00002470| 3d 20 4e 55 4c 4c 29 20 | 7b 0a 58 20 20 20 20 20 |= NULL) |{.X |
|00002480| 20 20 20 20 20 20 20 66 | 61 74 61 6c 28 22 4e 6f | f|atal("No|
|00002490| 20 6d 65 6d 6f 72 79 20 | 66 6f 72 20 46 69 6c 65 | memory |for File|
|000024a0| 4c 69 73 74 20 69 6e 20 | 49 6e 73 74 61 6c 6c 46 |List in |InstallF|
|000024b0| 69 6c 65 22 29 20 3b 0a | 58 20 20 20 20 20 20 20 |ile") ;.|X |
|000024c0| 20 20 7d 0a 58 20 20 20 | 20 20 20 7d 0a 58 20 20 | }.X | }.X |
|000024d0| 20 20 20 20 46 69 6c 65 | 4c 69 73 74 5b 4e 65 78 | File|List[Nex|
|000024e0| 74 46 69 6c 65 4e 75 6d | 2b 2b 5d 20 3d 20 73 79 |tFileNum|++] = sy|
|000024f0| 6d 70 20 3b 0a 58 20 20 | 20 20 20 20 2f 2a 20 70 |mp ;.X | /* p|
|00002500| 75 74 20 63 6f 64 65 20 | 68 65 72 65 20 74 6f 20 |ut code |here to |
|00002510| 73 6f 72 74 20 74 68 65 | 20 66 69 6c 65 20 6c 69 |sort the| file li|
|00002520| 73 74 20 62 79 20 6e 61 | 6d 65 20 73 6f 6d 65 64 |st by na|me somed|
|00002530| 61 79 20 2a 2f 0a 58 20 | 20 20 7d 0a 58 20 20 20 |ay */.X | }.X |
|00002540| 54 68 65 46 69 6c 65 73 | 5b 73 79 6d 70 2d 3e 6d |TheFiles|[symp->m|
|00002550| 61 73 6b 5f 77 6f 72 64 | 5d 20 7c 3d 20 73 79 6d |ask_word|] |= sym|
|00002560| 70 2d 3e 6d 61 73 6b 5f | 62 69 74 20 3b 0a 58 20 |p->mask_|bit ;.X |
|00002570| 20 20 69 66 20 28 73 79 | 6d 70 2d 3e 6d 61 73 6b | if (sy|mp->mask|
|00002580| 5f 77 6f 72 64 20 3e 20 | 4d 61 78 43 75 72 46 69 |_word > |MaxCurFi|
|00002590| 6c 65 29 20 7b 0a 58 20 | 20 20 20 20 20 4d 61 78 |le) {.X | Max|
|000025a0| 43 75 72 46 69 6c 65 20 | 3d 20 73 79 6d 70 2d 3e |CurFile |= symp->|
|000025b0| 6d 61 73 6b 5f 77 6f 72 | 64 20 3b 0a 58 20 20 20 |mask_wor|d ;.X |
|000025c0| 7d 0a 58 20 20 20 72 65 | 74 75 72 6e 28 73 79 6d |}.X re|turn(sym|
|000025d0| 70 29 20 3b 0a 58 7d 0a | 58 0a 58 2f 2a 20 52 75 |p) ;.X}.|X.X/* Ru|
|000025e0| 6e 50 61 67 65 72 20 2d | 20 72 75 6e 20 74 68 65 |nPager -| run the|
|000025f0| 20 75 73 65 72 73 20 70 | 61 67 65 72 20 70 72 6f | users p|ager pro|
|00002600| 67 72 61 6d 20 6f 6e 20 | 74 68 65 20 6c 69 73 74 |gram on |the list|
|00002610| 20 6f 66 20 66 69 6c 65 | 73 0a 58 20 2a 20 69 6e | of file|s.X * in|
|00002620| 20 74 68 65 20 73 65 74 | 2e 0a 58 20 2a 2f 0a 58 | the set|..X */.X|
|00002630| 76 6f 69 64 0a 58 52 75 | 6e 50 61 67 65 72 28 70 |void.XRu|nPager(p|
|00002640| 70 2c 20 73 70 29 0a 58 | 20 20 20 63 68 61 72 20 |p, sp).X| char |
|00002650| 2a 20 20 20 20 20 70 70 | 20 3b 0a 58 20 20 20 73 |* pp| ;.X s|
|00002660| 65 74 5f 74 79 70 65 20 | 2a 20 73 70 20 3b 0a 58 |et_type |* sp ;.X|
|00002670| 7b 0a 58 20 20 20 63 68 | 61 72 20 2a 20 20 20 20 |{.X ch|ar * |
|00002680| 20 20 20 20 20 63 6d 64 | 20 3d 20 28 63 68 61 72 | cmd| = (char|
|00002690| 20 2a 29 61 6c 6c 6f 63 | 61 28 53 65 74 4c 69 73 | *)alloc|a(SetLis|
|000026a0| 74 53 69 7a 65 28 73 70 | 29 20 2b 20 73 74 72 6c |tSize(sp|) + strl|
|000026b0| 65 6e 28 70 70 29 20 2b | 20 32 29 3b 0a 58 20 20 |en(pp) +| 2);.X |
|000026c0| 20 69 6e 74 20 20 20 20 | 20 20 20 20 20 20 20 20 | int | |
|000026d0| 69 20 3b 0a 58 20 20 20 | 69 64 5f 74 79 70 65 20 |i ;.X |id_type |
|000026e0| 2a 20 20 20 20 20 20 69 | 64 65 70 20 3b 0a 58 20 |* i|dep ;.X |
|000026f0| 20 20 0a 58 20 20 20 73 | 74 72 63 70 79 28 63 6d | .X s|trcpy(cm|
|00002700| 64 2c 20 70 70 29 20 3b | 0a 58 20 20 20 66 6f 72 |d, pp) ;|.X for|
|00002710| 20 28 69 20 3d 20 30 3b | 20 69 20 3c 20 4e 65 78 | (i = 0;| i < Nex|
|00002720| 74 46 69 6c 65 4e 75 6d | 3b 20 2b 2b 69 29 20 7b |tFileNum|; ++i) {|
|00002730| 0a 58 20 20 20 20 20 20 | 69 66 20 28 46 69 6c 65 |.X |if (File|
|00002740| 4c 69 73 74 5b 69 5d 2d | 3e 6d 61 73 6b 5f 77 6f |List[i]-|>mask_wo|
|00002750| 72 64 20 3c 20 73 70 2d | 3e 73 65 74 5f 73 69 7a |rd < sp-|>set_siz|
|00002760| 65 29 20 7b 0a 58 20 20 | 20 20 20 20 20 20 20 69 |e) {.X | i|
|00002770| 66 20 28 73 70 2d 3e 73 | 65 74 5f 64 61 74 61 5b |f (sp->s|et_data[|
|00002780| 46 69 6c 65 4c 69 73 74 | 5b 69 5d 2d 3e 6d 61 73 |FileList|[i]->mas|
|00002790| 6b 5f 77 6f 72 64 5d 20 | 26 20 46 69 6c 65 4c 69 |k_word] |& FileLi|
|000027a0| 73 74 5b 69 5d 2d 3e 6d | 61 73 6b 5f 62 69 74 29 |st[i]->m|ask_bit)|
|000027b0| 20 7b 0a 58 20 20 20 20 | 20 20 20 20 20 20 20 20 | {.X | |
|000027c0| 73 74 72 63 61 74 28 63 | 6d 64 2c 20 22 20 22 29 |strcat(c|md, " ")|
|000027d0| 20 3b 0a 58 20 20 20 20 | 20 20 20 20 20 20 20 20 | ;.X | |
|000027e0| 73 74 72 63 61 74 28 63 | 6d 64 2c 20 46 69 6c 65 |strcat(c|md, File|
|000027f0| 4c 69 73 74 5b 69 5d 2d | 3e 6e 61 6d 65 29 20 3b |List[i]-|>name) ;|
|00002800| 0a 58 20 20 20 20 20 20 | 20 20 20 7d 0a 58 20 20 |.X | }.X |
|00002810| 20 20 20 20 7d 0a 58 20 | 20 20 7d 0a 58 20 20 20 | }.X | }.X |
|00002820| 73 79 73 74 65 6d 28 63 | 6d 64 29 20 3b 0a 58 7d |system(c|md) ;.X}|
|00002830| 0a 58 0a 58 2f 2a 20 41 | 64 64 53 65 74 20 2d 20 |.X.X/* A|ddSet - |
|00002840| 61 64 64 20 61 20 6e 65 | 77 20 73 65 74 20 74 6f |add a ne|w set to|
|00002850| 20 74 68 65 20 75 6e 69 | 76 65 72 73 61 6c 20 6c | the uni|versal l|
|00002860| 69 73 74 20 6f 66 20 73 | 65 74 73 2e 20 41 73 73 |ist of s|ets. Ass|
|00002870| 69 67 6e 0a 58 20 2a 20 | 69 74 20 74 68 65 20 6e |ign.X * |it the n|
|00002880| 65 78 74 20 73 65 74 20 | 6e 75 6d 62 65 72 2e 0a |ext set |number..|
|00002890| 58 20 2a 2f 0a 58 76 6f | 69 64 0a 58 41 64 64 53 |X */.Xvo|id.XAddS|
|000028a0| 65 74 28 73 70 29 0a 58 | 20 20 20 73 65 74 5f 74 |et(sp).X| set_t|
|000028b0| 79 70 65 20 2a 20 20 20 | 73 70 20 3b 0a 58 7b 0a |ype * |sp ;.X{.|
|000028c0| 58 20 20 20 69 66 20 28 | 4e 65 78 74 53 65 74 4e |X if (|NextSetN|
|000028d0| 75 6d 20 3e 3d 20 53 65 | 74 53 70 61 63 65 29 20 |um >= Se|tSpace) |
|000028e0| 7b 0a 58 20 20 20 20 20 | 20 53 65 74 53 70 61 63 |{.X | SetSpac|
|000028f0| 65 20 2b 3d 20 31 30 30 | 30 20 3b 0a 58 20 20 20 |e += 100|0 ;.X |
|00002900| 20 20 20 69 66 20 28 54 | 68 65 53 65 74 73 20 21 | if (T|heSets !|
|00002910| 3d 20 4e 55 4c 4c 29 20 | 7b 0a 58 20 20 20 20 20 |= NULL) |{.X |
|00002920| 20 20 20 20 54 68 65 53 | 65 74 73 20 3d 20 28 73 | TheS|ets = (s|
|00002930| 65 74 5f 74 79 70 65 20 | 2a 2a 29 0a 58 20 20 20 |et_type |**).X |
|00002940| 20 20 20 20 20 20 20 20 | 20 72 65 61 6c 6c 6f 63 | | realloc|
|00002950| 28 54 68 65 53 65 74 73 | 2c 20 73 69 7a 65 6f 66 |(TheSets|, sizeof|
|00002960| 28 73 65 74 5f 74 79 70 | 65 20 2a 29 20 2a 20 53 |(set_typ|e *) * S|
|00002970| 65 74 53 70 61 63 65 29 | 20 3b 0a 58 20 20 20 20 |etSpace)| ;.X |
|00002980| 20 20 7d 20 65 6c 73 65 | 20 7b 0a 58 20 20 20 20 | } else| {.X |
|00002990| 20 20 20 20 20 54 68 65 | 53 65 74 73 20 3d 20 28 | The|Sets = (|
|000029a0| 73 65 74 5f 74 79 70 65 | 20 2a 2a 29 0a 58 20 20 |set_type| **).X |
|000029b0| 20 20 20 20 20 20 20 20 | 20 20 6d 61 6c 6c 6f 63 | | malloc|
|000029c0| 28 73 69 7a 65 6f 66 28 | 73 65 74 5f 74 79 70 65 |(sizeof(|set_type|
|000029d0| 20 2a 29 20 2a 20 53 65 | 74 53 70 61 63 65 29 20 | *) * Se|tSpace) |
|000029e0| 3b 0a 58 20 20 20 20 20 | 20 7d 0a 58 20 20 20 20 |;.X | }.X |
|000029f0| 20 20 69 66 20 28 54 68 | 65 53 65 74 73 20 3d 3d | if (Th|eSets ==|
|00002a00| 20 4e 55 4c 4c 29 20 7b | 0a 58 20 20 20 20 20 20 | NULL) {|.X |
|00002a10| 20 20 20 66 61 74 61 6c | 28 22 4e 6f 20 6d 65 6d | fatal|("No mem|
|00002a20| 6f 72 79 20 66 6f 72 20 | 54 68 65 53 65 74 73 20 |ory for |TheSets |
|00002a30| 69 6e 20 41 64 64 53 65 | 74 22 29 20 3b 0a 58 20 |in AddSe|t") ;.X |
|00002a40| 20 20 20 20 20 7d 0a 58 | 20 20 20 7d 0a 58 20 20 | }.X| }.X |
|00002a50| 20 73 70 2d 3e 73 65 74 | 5f 6e 75 6d 20 3d 20 4e | sp->set|_num = N|
|00002a60| 65 78 74 53 65 74 4e 75 | 6d 20 3b 0a 58 20 20 20 |extSetNu|m ;.X |
|00002a70| 54 68 65 53 65 74 73 5b | 4e 65 78 74 53 65 74 4e |TheSets[|NextSetN|
|00002a80| 75 6d 2b 2b 5d 20 3d 20 | 73 70 20 3b 0a 58 7d 0a |um++] = |sp ;.X}.|
|00002a90| 58 0a 58 2f 2a 20 52 75 | 6e 50 72 6f 67 20 2d 20 |X.X/* Ru|nProg - |
|00002aa0| 72 75 6e 20 61 20 70 72 | 6f 67 72 61 6d 20 77 69 |run a pr|ogram wi|
|00002ab0| 74 68 20 61 72 67 75 6d | 65 6e 74 73 20 66 72 6f |th argum|ents fro|
|00002ac0| 6d 20 69 64 5f 6c 69 73 | 74 20 61 6e 64 0a 58 20 |m id_lis|t and.X |
|00002ad0| 2a 20 61 63 63 65 70 74 | 20 6c 69 73 74 20 6f 66 |* accept| list of|
|00002ae0| 20 66 69 6c 65 20 6e 61 | 6d 65 73 20 62 61 63 6b | file na|mes back|
|00002af0| 20 66 72 6f 6d 20 74 68 | 65 20 70 72 6f 67 72 61 | from th|e progra|
|00002b00| 6d 20 77 68 69 63 68 0a | 58 20 2a 20 61 72 65 20 |m which.|X * are |
|00002b10| 69 6e 73 74 61 6c 6c 65 | 64 20 69 6e 20 74 68 65 |installe|d in the|
|00002b20| 20 73 79 6d 62 6f 6c 20 | 74 61 62 6c 65 20 61 6e | symbol |table an|
|00002b30| 64 20 75 73 65 64 20 74 | 6f 20 63 6f 6e 73 74 72 |d used t|o constr|
|00002b40| 75 63 74 0a 58 20 2a 20 | 61 20 6e 65 77 20 73 65 |uct.X * |a new se|
|00002b50| 74 2e 0a 58 20 2a 2f 0a | 58 73 65 74 5f 74 79 70 |t..X */.|Xset_typ|
|00002b60| 65 20 2a 0a 58 52 75 6e | 50 72 6f 67 28 70 70 2c |e *.XRun|Prog(pp,|
|00002b70| 20 69 64 6c 70 29 0a 58 | 20 20 20 63 68 61 72 20 | idlp).X| char |
|00002b80| 2a 20 20 20 20 20 20 20 | 20 20 70 70 20 3b 0a 58 |* | pp ;.X|
|00002b90| 20 20 20 69 64 5f 6c 69 | 73 74 5f 74 79 70 65 20 | id_li|st_type |
|00002ba0| 2a 20 69 64 6c 70 20 3b | 0a 58 7b 0a 58 20 20 20 |* idlp ;|.X{.X |
|00002bb0| 69 6e 74 20 20 20 20 20 | 20 20 20 20 20 20 20 63 |int | c|
|00002bc0| 20 3b 0a 58 20 20 20 63 | 68 61 72 20 2a 20 20 20 | ;.X c|har * |
|00002bd0| 20 20 20 20 20 20 63 6d | 64 20 3d 20 28 63 68 61 | cm|d = (cha|
|00002be0| 72 20 2a 29 61 6c 6c 6f | 63 61 28 41 72 67 4c 69 |r *)allo|ca(ArgLi|
|00002bf0| 73 74 53 69 7a 65 28 69 | 64 6c 70 29 20 2b 20 73 |stSize(i|dlp) + s|
|00002c00| 74 72 6c 65 6e 28 70 70 | 29 20 2b 20 32 29 3b 0a |trlen(pp|) + 2);.|
|00002c10| 58 20 20 20 63 68 61 72 | 20 2a 20 20 20 20 20 20 |X char| * |
|00002c20| 20 20 20 64 70 20 3b 0a | 58 20 20 20 63 68 61 72 | dp ;.|X char|
|00002c30| 20 20 20 20 20 20 20 20 | 20 20 20 66 69 6c 65 20 | | file |
|00002c40| 5b 20 4d 41 58 43 4d 44 | 20 5d 20 3b 0a 58 20 20 |[ MAXCMD| ] ;.X |
|00002c50| 20 69 6e 74 20 20 20 20 | 20 20 20 20 20 20 20 20 | int | |
|00002c60| 69 20 3b 0a 58 20 20 20 | 69 64 5f 74 79 70 65 20 |i ;.X |id_type |
|00002c70| 2a 20 20 20 20 20 20 69 | 64 65 70 20 3b 0a 58 20 |* i|dep ;.X |
|00002c80| 20 20 69 64 5f 74 79 70 | 65 20 2a 20 20 20 20 20 | id_typ|e * |
|00002c90| 20 6e 65 78 74 5f 69 64 | 20 3b 0a 58 20 20 20 46 | next_id| ;.X F|
|00002ca0| 49 4c 45 20 2a 20 20 20 | 20 20 20 20 20 20 70 72 |ILE * | pr|
|00002cb0| 6f 67 20 3b 0a 58 20 20 | 20 73 65 74 5f 74 79 70 |og ;.X | set_typ|
|00002cc0| 65 20 2a 20 20 20 20 20 | 73 70 20 3b 0a 58 20 20 |e * |sp ;.X |
|00002cd0| 20 0a 58 20 20 20 46 6c | 75 73 68 46 69 6c 65 73 | .X Fl|ushFiles|
|00002ce0| 28 29 20 3b 0a 58 20 20 | 20 73 74 72 63 70 79 28 |() ;.X | strcpy(|
|00002cf0| 63 6d 64 2c 20 70 70 29 | 20 3b 0a 58 20 20 20 69 |cmd, pp)| ;.X i|
|00002d00| 64 65 70 20 3d 20 69 64 | 6c 70 2d 3e 69 64 5f 6c |dep = id|lp->id_l|
|00002d10| 69 73 74 20 3b 0a 58 20 | 20 20 77 68 69 6c 65 20 |ist ;.X | while |
|00002d20| 28 69 64 65 70 20 21 3d | 20 4e 55 4c 4c 29 20 7b |(idep !=| NULL) {|
|00002d30| 0a 58 20 20 20 20 20 20 | 73 74 72 63 61 74 28 63 |.X |strcat(c|
|00002d40| 6d 64 2c 20 22 20 22 29 | 20 3b 0a 58 20 20 20 20 |md, " ")| ;.X |
|00002d50| 20 20 73 74 72 63 61 74 | 28 63 6d 64 2c 20 69 64 | strcat|(cmd, id|
|00002d60| 65 70 2d 3e 69 64 29 20 | 3b 0a 58 20 20 20 20 20 |ep->id) |;.X |
|00002d70| 20 6e 65 78 74 5f 69 64 | 20 3d 20 69 64 65 70 2d | next_id| = idep-|
|00002d80| 3e 6e 65 78 74 5f 69 64 | 20 3b 0a 58 20 20 20 20 |>next_id| ;.X |
|00002d90| 20 20 66 72 65 65 28 69 | 64 65 70 29 20 3b 0a 58 | free(i|dep) ;.X|
|00002da0| 20 20 20 20 20 20 69 64 | 65 70 20 3d 20 6e 65 78 | id|ep = nex|
|00002db0| 74 5f 69 64 20 3b 0a 58 | 20 20 20 7d 0a 58 20 20 |t_id ;.X| }.X |
|00002dc0| 20 66 72 65 65 28 69 64 | 6c 70 29 20 3b 0a 58 20 | free(id|lp) ;.X |
|00002dd0| 20 20 0a 58 20 20 20 2f | 2a 20 72 75 6e 20 70 72 | .X /|* run pr|
|00002de0| 6f 67 72 61 6d 20 77 69 | 74 68 20 70 6f 70 65 6e |ogram wi|th popen|
|00002df0| 2c 20 72 65 61 64 69 6e | 67 20 74 68 65 20 6f 75 |, readin|g the ou|
|00002e00| 74 70 75 74 2e 20 41 73 | 73 75 6d 65 20 65 61 63 |tput. As|sume eac|
|00002e10| 68 0a 58 20 20 20 20 2a | 20 77 68 69 74 65 20 73 |h.X *| white s|
|00002e20| 70 61 63 65 20 74 65 72 | 6d 69 6e 61 74 65 64 20 |pace ter|minated |
|00002e30| 73 74 72 69 6e 67 20 69 | 73 20 61 20 66 69 6c 65 |string i|s a file|
|00002e40| 20 6e 61 6d 65 2e 0a 58 | 20 20 20 20 2a 2f 0a 58 | name..X| */.X|
|00002e50| 20 20 20 70 72 6f 67 20 | 3d 20 70 6f 70 65 6e 28 | prog |= popen(|
|00002e60| 63 6d 64 2c 20 22 72 22 | 29 20 3b 0a 58 20 20 20 |cmd, "r"|) ;.X |
|00002e70| 64 70 20 3d 20 66 69 6c | 65 20 3b 0a 58 20 20 20 |dp = fil|e ;.X |
|00002e80| 77 68 69 6c 65 20 28 28 | 63 20 3d 20 67 65 74 63 |while ((|c = getc|
|00002e90| 28 70 72 6f 67 29 29 20 | 21 3d 20 45 4f 46 29 20 |(prog)) |!= EOF) |
|00002ea0| 7b 0a 58 20 20 20 20 20 | 20 69 66 20 28 69 73 73 |{.X | if (iss|
|00002eb0| 70 61 63 65 28 63 29 29 | 20 7b 0a 58 20 20 20 20 |pace(c))| {.X |
|00002ec0| 20 20 20 20 20 69 66 20 | 28 64 70 20 21 3d 20 66 | if |(dp != f|
|00002ed0| 69 6c 65 29 20 7b 0a 58 | 20 20 20 20 20 20 20 20 |ile) {.X| |
|00002ee0| 20 20 20 20 2a 64 70 2b | 2b 20 3d 20 27 5c 30 27 | *dp+|+ = '\0'|
|00002ef0| 20 3b 0a 58 20 20 20 20 | 20 20 20 20 20 20 20 20 | ;.X | |
|00002f00| 49 6e 73 74 61 6c 6c 46 | 69 6c 65 28 66 69 6c 65 |InstallF|ile(file|
|00002f10| 29 20 3b 0a 58 20 20 20 | 20 20 20 20 20 20 20 20 |) ;.X | |
|00002f20| 20 64 70 20 3d 20 66 69 | 6c 65 20 3b 0a 58 20 20 | dp = fi|le ;.X |
|00002f30| 20 20 20 20 20 20 20 7d | 0a 58 20 20 20 20 20 20 | }|.X |
|00002f40| 7d 20 65 6c 73 65 20 7b | 0a 58 20 20 20 20 20 20 |} else {|.X |
|00002f50| 20 20 20 2a 64 70 2b 2b | 20 3d 20 63 20 3b 0a 58 | *dp++| = c ;.X|
|00002f60| 20 20 20 20 20 20 7d 0a | 58 20 20 20 7d 0a 58 20 | }.|X }.X |
|00002f70| 20 20 69 66 20 28 64 70 | 20 21 3d 20 66 69 6c 65 | if (dp| != file|
|00002f80| 29 20 7b 0a 58 20 20 20 | 20 20 20 2a 64 70 2b 2b |) {.X | *dp++|
|00002f90| 20 3d 20 27 5c 30 27 20 | 3b 0a 58 20 20 20 20 20 | = '\0' |;.X |
|00002fa0| 20 49 6e 73 74 61 6c 6c | 46 69 6c 65 28 66 69 6c | Install|File(fil|
|00002fb0| 65 29 20 3b 0a 58 20 20 | 20 7d 0a 58 20 20 20 69 |e) ;.X | }.X i|
|00002fc0| 66 20 28 70 63 6c 6f 73 | 65 28 70 72 6f 67 29 20 |f (pclos|e(prog) |
|00002fd0| 21 3d 20 30 29 20 7b 0a | 58 20 20 20 20 20 20 2f |!= 0) {.|X /|
|00002fe0| 2a 20 69 66 20 74 68 65 | 72 65 20 77 61 73 20 61 |* if the|re was a|
|00002ff0| 6e 20 65 72 72 6f 72 20 | 6d 61 6b 65 20 61 6e 20 |n error |make an |
|00003000| 65 6d 70 74 79 20 73 65 | 74 2c 20 77 68 6f 20 6b |empty se|t, who k|
|00003010| 6e 6f 77 73 20 77 68 61 | 74 0a 58 20 20 20 20 20 |nows wha|t.X |
|00003020| 20 20 2a 20 67 61 72 62 | 61 67 65 20 74 68 65 20 | * garb|age the |
|00003030| 70 72 6f 67 72 61 6d 20 | 70 72 69 6e 74 65 64 2e |program |printed.|
|00003040| 0a 58 20 20 20 20 20 20 | 20 2a 2f 0a 58 20 20 20 |.X | */.X |
|00003050| 20 20 20 46 6c 75 73 68 | 46 69 6c 65 73 28 29 20 | Flush|Files() |
|00003060| 3b 0a 58 20 20 20 7d 0a | 58 20 20 20 0a 58 20 20 |;.X }.|X .X |
|00003070| 20 73 70 20 3d 20 28 73 | 65 74 5f 74 79 70 65 20 | sp = (s|et_type |
|00003080| 2a 29 0a 58 20 20 20 20 | 20 20 6d 61 6c 6c 6f 63 |*).X | malloc|
|00003090| 28 73 69 7a 65 6f 66 28 | 73 65 74 5f 74 79 70 65 |(sizeof(|set_type|
|000030a0| 29 20 2b 20 73 69 7a 65 | 6f 66 28 75 6e 73 69 67 |) + size|of(unsig|
|000030b0| 6e 65 64 20 6c 6f 6e 67 | 29 20 2a 20 4d 61 78 43 |ned long|) * MaxC|
|000030c0| 75 72 46 69 6c 65 29 20 | 3b 0a 58 20 20 20 69 66 |urFile) |;.X if|
|000030d0| 20 28 73 70 20 3d 3d 20 | 4e 55 4c 4c 29 20 7b 0a | (sp == |NULL) {.|
|000030e0| 58 20 20 20 20 20 20 66 | 61 74 61 6c 28 22 4e 6f |X f|atal("No|
|000030f0| 20 6d 65 6d 6f 72 79 20 | 66 6f 72 20 73 65 74 20 | memory |for set |
|00003100| 69 6e 20 52 75 6e 50 72 | 6f 67 22 29 20 3b 0a 58 |in RunPr|og") ;.X|
|00003110| 20 20 20 7d 0a 58 20 20 | 20 73 70 2d 3e 73 65 74 | }.X | sp->set|
|00003120| 5f 74 61 69 6c 20 3d 20 | 30 20 3b 0a 58 20 20 20 |_tail = |0 ;.X |
|00003130| 73 70 2d 3e 73 65 74 5f | 64 65 73 63 20 3d 20 28 |sp->set_|desc = (|
|00003140| 63 68 61 72 20 2a 29 6d | 61 6c 6c 6f 63 28 73 74 |char *)m|alloc(st|
|00003150| 72 6c 65 6e 28 63 6d 64 | 29 20 2b 20 31 29 20 3b |rlen(cmd|) + 1) ;|
|00003160| 0a 58 20 20 20 69 66 20 | 28 73 70 2d 3e 73 65 74 |.X if |(sp->set|
|00003170| 5f 64 65 73 63 20 3d 3d | 20 4e 55 4c 4c 29 20 7b |_desc ==| NULL) {|
|00003180| 0a 58 20 20 20 20 20 20 | 66 61 74 61 6c 28 22 4e |.X |fatal("N|
|00003190| 6f 20 6d 65 6d 6f 72 79 | 20 66 6f 72 20 73 65 74 |o memory| for set|
|000031a0| 20 64 65 73 63 72 69 70 | 74 69 6f 6e 20 69 6e 20 | descrip|tion in |
|000031b0| 52 75 6e 50 72 6f 67 22 | 29 20 3b 0a 58 20 20 20 |RunProg"|) ;.X |
|000031c0| 7d 0a 58 20 20 20 73 74 | 72 63 70 79 28 73 70 2d |}.X st|rcpy(sp-|
|000031d0| 3e 73 65 74 5f 64 65 73 | 63 2c 20 63 6d 64 29 20 |>set_des|c, cmd) |
|000031e0| 3b 0a 58 20 20 20 73 70 | 2d 3e 73 65 74 5f 73 69 |;.X sp|->set_si|
|000031f0| 7a 65 20 3d 20 4d 61 78 | 43 75 72 46 69 6c 65 20 |ze = Max|CurFile |
|00003200| 2b 20 31 20 3b 0a 58 20 | 20 20 66 6f 72 20 28 69 |+ 1 ;.X | for (i|
|00003210| 20 3d 20 30 3b 20 69 20 | 3c 3d 20 4d 61 78 43 75 | = 0; i |<= MaxCu|
|00003220| 72 46 69 6c 65 3b 20 2b | 2b 69 29 20 7b 0a 58 20 |rFile; +|+i) {.X |
|00003230| 20 20 20 20 20 73 70 2d | 3e 73 65 74 5f 64 61 74 | sp-|>set_dat|
|00003240| 61 5b 69 5d 20 3d 20 54 | 68 65 46 69 6c 65 73 5b |a[i] = T|heFiles[|
|00003250| 69 5d 20 3b 0a 58 20 20 | 20 7d 0a 58 20 20 20 41 |i] ;.X | }.X A|
|00003260| 64 64 53 65 74 28 73 70 | 29 20 3b 0a 58 20 20 20 |ddSet(sp|) ;.X |
|00003270| 72 65 74 75 72 6e 28 73 | 70 29 20 3b 0a 58 7d 0a |return(s|p) ;.X}.|
|00003280| 58 0a 58 2f 2a 20 53 65 | 74 44 69 72 65 63 74 6f |X.X/* Se|tDirecto|
|00003290| 72 79 20 2d 20 63 68 61 | 6e 67 65 20 74 68 65 20 |ry - cha|nge the |
|000032a0| 77 6f 72 6b 69 6e 67 20 | 64 69 72 65 63 74 6f 72 |working |director|
|000032b0| 79 2e 20 54 68 69 73 20 | 77 69 6c 6c 0a 58 20 2a |y. This |will.X *|
|000032c0| 20 64 65 74 65 72 6d 69 | 6e 65 20 77 68 69 63 68 | determi|ne which|
|000032d0| 20 49 44 20 66 69 6c 65 | 20 69 73 20 66 6f 75 6e | ID file| is foun|
|000032e0| 64 20 62 79 20 74 68 65 | 20 73 75 62 70 72 6f 67 |d by the| subprog|
|000032f0| 72 61 6d 73 2e 0a 58 20 | 2a 2f 0a 58 76 6f 69 64 |rams..X |*/.Xvoid|
|00003300| 0a 58 53 65 74 44 69 72 | 65 63 74 6f 72 79 28 64 |.XSetDir|ectory(d|
|00003310| 69 72 29 0a 58 20 20 20 | 69 64 5f 74 79 70 65 20 |ir).X |id_type |
|00003320| 2a 20 20 20 20 20 20 64 | 69 72 20 3b 0a 58 7b 0a |* d|ir ;.X{.|
|00003330| 58 20 20 20 69 66 20 28 | 63 68 64 69 72 28 64 69 |X if (|chdir(di|
|00003340| 72 2d 3e 69 64 29 20 21 | 3d 20 30 29 20 7b 0a 58 |r->id) !|= 0) {.X|
|00003350| 20 20 20 20 20 20 66 70 | 72 69 6e 74 66 28 73 74 | fp|rintf(st|
|00003360| 64 65 72 72 2c 22 44 69 | 72 65 63 74 6f 72 79 20 |derr,"Di|rectory |
|00003370| 25 73 20 6e 6f 74 20 61 | 63 63 65 73 73 69 62 6c |%s not a|ccessibl|
|00003380| 65 2e 5c 6e 22 2c 64 69 | 72 29 20 3b 0a 58 20 20 |e.\n",di|r) ;.X |
|00003390| 20 7d 0a 58 20 20 20 66 | 72 65 65 28 64 69 72 29 | }.X f|ree(dir)|
|000033a0| 20 3b 0a 58 7d 0a 58 0a | 58 2f 2a 20 53 65 74 49 | ;.X}.X.|X/* SetI|
|000033b0| 6e 74 65 72 73 65 63 74 | 20 2d 20 63 6f 6e 73 74 |ntersect| - const|
|000033c0| 72 75 63 74 20 61 20 6e | 65 77 20 73 65 74 20 66 |ruct a n|ew set f|
|000033d0| 72 6f 6d 20 74 68 65 20 | 69 6e 74 65 72 73 65 63 |rom the |intersec|
|000033e0| 74 69 6f 6e 0a 58 20 2a | 20 6f 66 20 74 77 6f 20 |tion.X *| of two |
|000033f0| 6f 74 68 65 72 73 2e 20 | 41 6c 73 6f 20 63 6f 6e |others. |Also con|
|00003400| 73 74 72 75 63 74 20 61 | 20 6e 65 77 20 64 65 73 |struct a| new des|
|00003410| 63 72 69 70 74 69 6f 6e | 20 73 74 72 69 6e 67 2e |cription| string.|
|00003420| 0a 58 20 2a 2f 0a 58 73 | 65 74 5f 74 79 70 65 20 |.X */.Xs|et_type |
|00003430| 2a 0a 58 53 65 74 49 6e | 74 65 72 73 65 63 74 28 |*.XSetIn|tersect(|
|00003440| 73 70 31 2c 20 73 70 32 | 29 0a 58 20 20 20 73 65 |sp1, sp2|).X se|
|00003450| 74 5f 74 79 70 65 20 2a | 20 73 70 31 20 3b 0a 58 |t_type *| sp1 ;.X|
|00003460| 20 20 20 73 65 74 5f 74 | 79 70 65 20 2a 20 73 70 | set_t|ype * sp|
|00003470| 32 20 3b 0a 58 7b 0a 58 | 20 20 20 63 68 61 72 20 |2 ;.X{.X| char |
|00003480| 2a 20 20 20 20 20 64 65 | 73 63 20 3b 0a 58 20 20 |* de|sc ;.X |
|00003490| 20 69 6e 74 20 20 20 20 | 20 20 20 20 69 20 3b 0a | int | i ;.|
|000034a0| 58 20 20 20 69 6e 74 20 | 20 20 20 20 20 20 20 6c |X int | l|
|000034b0| 65 6e 31 20 3b 0a 58 20 | 20 20 69 6e 74 20 20 20 |en1 ;.X | int |
|000034c0| 20 20 20 20 20 6c 65 6e | 32 20 3b 0a 58 20 20 20 | len|2 ;.X |
|000034d0| 73 65 74 5f 74 79 70 65 | 20 2a 20 6e 65 77 5f 73 |set_type| * new_s|
|000034e0| 65 74 20 3b 0a 58 20 20 | 20 69 6e 74 20 20 20 20 |et ;.X | int |
|000034f0| 20 20 20 20 6e 65 77 5f | 73 69 7a 65 20 3b 0a 58 | new_|size ;.X|
|00003500| 20 20 20 0a 58 20 20 20 | 69 66 20 28 73 70 31 2d | .X |if (sp1-|
|00003510| 3e 73 65 74 5f 74 61 69 | 6c 20 7c 7c 20 73 70 32 |>set_tai|l || sp2|
|00003520| 2d 3e 73 65 74 5f 74 61 | 69 6c 29 20 7b 0a 58 20 |->set_ta|il) {.X |
|00003530| 20 20 20 20 20 6e 65 77 | 5f 73 69 7a 65 20 3d 20 | new|_size = |
|00003540| 4d 41 58 28 73 70 31 2d | 3e 73 65 74 5f 73 69 7a |MAX(sp1-|>set_siz|
|00003550| 65 2c 20 73 70 32 2d 3e | 73 65 74 5f 73 69 7a 65 |e, sp2->|set_size|
|00003560| 29 20 3b 0a 58 20 20 20 | 7d 20 65 6c 73 65 20 7b |) ;.X |} else {|
|00003570| 0a 58 20 20 20 20 20 20 | 6e 65 77 5f 73 69 7a 65 |.X |new_size|
|00003580| 20 3d 20 4d 49 4e 28 73 | 70 31 2d 3e 73 65 74 5f | = MIN(s|p1->set_|
|00003590| 73 69 7a 65 2c 20 73 70 | 32 2d 3e 73 65 74 5f 73 |size, sp|2->set_s|
|000035a0| 69 7a 65 29 20 3b 0a 58 | 20 20 20 7d 0a 58 20 20 |ize) ;.X| }.X |
|000035b0| 20 6e 65 77 5f 73 65 74 | 20 3d 20 28 73 65 74 5f | new_set| = (set_|
|000035c0| 74 79 70 65 20 2a 29 6d | 61 6c 6c 6f 63 28 73 69 |type *)m|alloc(si|
|000035d0| 7a 65 6f 66 28 73 65 74 | 5f 74 79 70 65 29 20 2b |zeof(set|_type) +|
|000035e0| 0a 58 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |.X | |
|000035f0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00003600| 20 20 28 6e 65 77 5f 73 | 69 7a 65 20 2d 20 31 29 | (new_s|ize - 1)|
|00003610| 20 2a 20 73 69 7a 65 6f | 66 28 75 6e 73 69 67 6e | * sizeo|f(unsign|
|00003620| 65 64 20 6c 6f 6e 67 29 | 29 20 3b 0a 58 20 20 20 |ed long)|) ;.X |
|00003630| 69 66 20 28 6e 65 77 5f | 73 65 74 20 3d 3d 20 4e |if (new_|set == N|
|00003640| 55 4c 4c 29 20 7b 0a 58 | 20 20 20 20 20 20 66 61 |ULL) {.X| fa|
|00003650| 74 61 6c 28 22 4e 6f 20 | 6d 65 6d 6f 72 79 20 66 |tal("No |memory f|
|00003660| 6f 72 20 73 65 74 20 69 | 6e 20 53 65 74 49 6e 74 |or set i|n SetInt|
|00003670| 65 72 73 65 63 74 22 29 | 20 3b 0a 58 20 20 20 7d |ersect")| ;.X }|
|00003680| 0a 58 20 20 20 6c 65 6e | 31 20 3d 20 73 74 72 6c |.X len|1 = strl|
|00003690| 65 6e 28 73 70 31 2d 3e | 73 65 74 5f 64 65 73 63 |en(sp1->|set_desc|
|000036a0| 29 20 3b 0a 58 20 20 20 | 6c 65 6e 32 20 3d 20 73 |) ;.X |len2 = s|
|000036b0| 74 72 6c 65 6e 28 73 70 | 32 2d 3e 73 65 74 5f 64 |trlen(sp|2->set_d|
|000036c0| 65 73 63 29 20 3b 0a 58 | 20 20 20 64 65 73 63 20 |esc) ;.X| desc |
|000036d0| 3d 20 28 63 68 61 72 20 | 2a 29 6d 61 6c 6c 6f 63 |= (char |*)malloc|
|000036e0| 28 6c 65 6e 31 20 2b 20 | 6c 65 6e 32 20 2b 20 31 |(len1 + |len2 + 1|
|000036f0| 30 29 20 3b 0a 58 20 20 | 20 69 66 20 28 64 65 73 |0) ;.X | if (des|
|00003700| 63 20 3d 3d 20 4e 55 4c | 4c 29 20 7b 0a 58 20 20 |c == NUL|L) {.X |
|00003710| 20 20 20 20 66 61 74 61 | 6c 28 22 4e 6f 20 6d 65 | fata|l("No me|
|00003720| 6d 6f 72 79 20 66 6f 72 | 20 73 65 74 20 64 65 73 |mory for| set des|
|00003730| 63 72 69 70 74 69 6f 6e | 20 69 6e 20 53 65 74 49 |cription| in SetI|
|00003740| 6e 74 65 72 73 65 63 74 | 22 29 20 3b 0a 58 20 20 |ntersect|") ;.X |
|00003750| 20 7d 0a 58 20 20 20 6e | 65 77 5f 73 65 74 2d 3e | }.X n|ew_set->|
|00003760| 73 65 74 5f 64 65 73 63 | 20 3d 20 64 65 73 63 20 |set_desc| = desc |
|00003770| 3b 0a 58 20 20 20 73 74 | 72 63 70 79 28 64 65 73 |;.X st|rcpy(des|
|00003780| 63 2c 22 28 22 29 20 3b | 0a 58 20 20 20 2b 2b 64 |c,"(") ;|.X ++d|
|00003790| 65 73 63 20 3b 0a 58 20 | 20 20 73 74 72 63 70 79 |esc ;.X | strcpy|
|000037a0| 28 64 65 73 63 2c 20 73 | 70 31 2d 3e 73 65 74 5f |(desc, s|p1->set_|
|000037b0| 64 65 73 63 29 20 3b 0a | 58 20 20 20 64 65 73 63 |desc) ;.|X desc|
|000037c0| 20 2b 3d 20 6c 65 6e 31 | 20 3b 0a 58 20 20 20 73 | += len1| ;.X s|
|000037d0| 74 72 63 70 79 28 64 65 | 73 63 2c 20 22 29 20 41 |trcpy(de|sc, ") A|
|000037e0| 4e 44 20 28 22 29 20 3b | 0a 58 20 20 20 64 65 73 |ND (") ;|.X des|
|000037f0| 63 20 2b 3d 20 37 20 3b | 0a 58 20 20 20 73 74 72 |c += 7 ;|.X str|
|00003800| 63 70 79 28 64 65 73 63 | 2c 20 73 70 32 2d 3e 73 |cpy(desc|, sp2->s|
|00003810| 65 74 5f 64 65 73 63 29 | 20 3b 0a 58 20 20 20 64 |et_desc)| ;.X d|
|00003820| 65 73 63 20 2b 3d 20 6c | 65 6e 32 20 3b 0a 58 20 |esc += l|en2 ;.X |
|00003830| 20 20 73 74 72 63 70 79 | 28 64 65 73 63 2c 20 22 | strcpy|(desc, "|
|00003840| 29 22 29 20 3b 0a 58 20 | 20 20 41 64 64 53 65 74 |)") ;.X | AddSet|
|00003850| 28 6e 65 77 5f 73 65 74 | 29 20 3b 0a 58 20 20 20 |(new_set|) ;.X |
|00003860| 6e 65 77 5f 73 65 74 2d | 3e 73 65 74 5f 73 69 7a |new_set-|>set_siz|
|00003870| 65 20 3d 20 6e 65 77 5f | 73 69 7a 65 20 3b 0a 58 |e = new_|size ;.X|
|00003880| 20 20 20 66 6f 72 20 28 | 69 20 3d 20 30 3b 20 69 | for (|i = 0; i|
|00003890| 20 3c 20 6e 65 77 5f 73 | 69 7a 65 3b 20 2b 2b 69 | < new_s|ize; ++i|
|000038a0| 29 20 7b 0a 58 20 20 20 | 20 20 20 6e 65 77 5f 73 |) {.X | new_s|
|000038b0| 65 74 2d 3e 73 65 74 5f | 64 61 74 61 5b 69 5d 20 |et->set_|data[i] |
|000038c0| 3d 20 0a 58 20 20 20 20 | 20 20 20 20 20 28 28 69 |= .X | ((i|
|000038d0| 20 3c 20 73 70 31 2d 3e | 73 65 74 5f 73 69 7a 65 | < sp1->|set_size|
|000038e0| 29 20 3f 20 73 70 31 2d | 3e 73 65 74 5f 64 61 74 |) ? sp1-|>set_dat|
|000038f0| 61 5b 69 5d 20 3a 20 73 | 70 31 2d 3e 73 65 74 5f |a[i] : s|p1->set_|
|00003900| 74 61 69 6c 29 20 26 20 | 0a 58 20 20 20 20 20 20 |tail) & |.X |
|00003910| 20 20 20 28 28 69 20 3c | 20 73 70 32 2d 3e 73 65 | ((i <| sp2->se|
|00003920| 74 5f 73 69 7a 65 29 20 | 3f 20 73 70 32 2d 3e 73 |t_size) |? sp2->s|
|00003930| 65 74 5f 64 61 74 61 5b | 69 5d 20 3a 20 73 70 32 |et_data[|i] : sp2|
|00003940| 2d 3e 73 65 74 5f 74 61 | 69 6c 29 20 3b 0a 58 20 |->set_ta|il) ;.X |
|00003950| 20 20 7d 0a 58 20 20 20 | 6e 65 77 5f 73 65 74 2d | }.X |new_set-|
|00003960| 3e 73 65 74 5f 74 61 69 | 6c 20 3d 20 73 70 31 2d |>set_tai|l = sp1-|
|00003970| 3e 73 65 74 5f 74 61 69 | 6c 20 26 20 73 70 32 2d |>set_tai|l & sp2-|
|00003980| 3e 73 65 74 5f 74 61 69 | 6c 20 3b 0a 58 20 20 20 |>set_tai|l ;.X |
|00003990| 72 65 74 75 72 6e 28 6e | 65 77 5f 73 65 74 29 20 |return(n|ew_set) |
|000039a0| 3b 0a 58 7d 0a 58 0a 58 | 2f 2a 20 53 65 74 55 6e |;.X}.X.X|/* SetUn|
|000039b0| 69 6f 6e 20 2d 20 63 6f | 6e 73 74 72 75 63 74 20 |ion - co|nstruct |
|000039c0| 61 20 6e 65 77 20 73 65 | 74 20 66 72 6f 6d 20 74 |a new se|t from t|
|000039d0| 68 65 20 75 6e 69 6f 6e | 20 6f 66 20 74 77 6f 20 |he union| of two |
|000039e0| 6f 74 68 65 72 73 2e 0a | 58 20 2a 20 41 6c 73 6f |others..|X * Also|
|000039f0| 20 63 6f 6e 73 74 72 75 | 63 74 20 61 20 6e 65 77 | constru|ct a new|
|00003a00| 20 64 65 73 63 72 69 70 | 74 69 6f 6e 20 73 74 72 | descrip|tion str|
|00003a10| 69 6e 67 2e 0a 58 20 2a | 2f 0a 58 73 65 74 5f 74 |ing..X *|/.Xset_t|
|00003a20| 79 70 65 20 2a 0a 58 53 | 65 74 55 6e 69 6f 6e 28 |ype *.XS|etUnion(|
|00003a30| 73 70 31 2c 20 73 70 32 | 29 0a 58 20 20 20 73 65 |sp1, sp2|).X se|
|00003a40| 74 5f 74 79 70 65 20 2a | 20 73 70 31 20 3b 0a 58 |t_type *| sp1 ;.X|
|00003a50| 20 20 20 73 65 74 5f 74 | 79 70 65 20 2a 20 73 70 | set_t|ype * sp|
|00003a60| 32 20 3b 0a 58 7b 0a 58 | 20 20 20 63 68 61 72 20 |2 ;.X{.X| char |
|00003a70| 2a 20 20 20 20 20 64 65 | 73 63 20 3b 0a 58 20 20 |* de|sc ;.X |
|00003a80| 20 69 6e 74 20 20 20 20 | 20 20 20 20 69 20 3b 0a | int | i ;.|
|00003a90| 58 20 20 20 69 6e 74 20 | 20 20 20 20 20 20 20 6c |X int | l|
|00003aa0| 65 6e 31 20 3b 0a 58 20 | 20 20 69 6e 74 20 20 20 |en1 ;.X | int |
|00003ab0| 20 20 20 20 20 6c 65 6e | 32 20 3b 0a 58 20 20 20 | len|2 ;.X |
|00003ac0| 73 65 74 5f 74 79 70 65 | 20 2a 20 6e 65 77 5f 73 |set_type| * new_s|
|00003ad0| 65 74 20 3b 0a 58 20 20 | 20 69 6e 74 20 20 20 20 |et ;.X | int |
|00003ae0| 20 20 20 20 6e 65 77 5f | 73 69 7a 65 20 3b 0a 58 | new_|size ;.X|
|00003af0| 20 20 20 0a 58 20 20 20 | 6e 65 77 5f 73 69 7a 65 | .X |new_size|
|00003b00| 20 3d 20 4d 41 58 28 73 | 70 31 2d 3e 73 65 74 5f | = MAX(s|p1->set_|
|00003b10| 73 69 7a 65 2c 20 73 70 | 32 2d 3e 73 65 74 5f 73 |size, sp|2->set_s|
|00003b20| 69 7a 65 29 20 3b 0a 58 | 20 20 20 6e 65 77 5f 73 |ize) ;.X| new_s|
|00003b30| 65 74 20 3d 20 28 73 65 | 74 5f 74 79 70 65 20 2a |et = (se|t_type *|
|00003b40| 29 6d 61 6c 6c 6f 63 28 | 73 69 7a 65 6f 66 28 73 |)malloc(|sizeof(s|
|00003b50| 65 74 5f 74 79 70 65 29 | 20 2b 0a 58 20 20 20 20 |et_type)| +.X |
|00003b60| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00003b70| 20 20 20 20 20 20 20 20 | 20 20 20 20 28 6e 65 77 | | (new|
|00003b80| 5f 73 69 7a 65 20 2d 20 | 31 29 20 2a 20 73 69 7a |_size - |1) * siz|
|00003b90| 65 6f 66 28 75 6e 73 69 | 67 6e 65 64 20 6c 6f 6e |eof(unsi|gned lon|
|00003ba0| 67 29 29 20 3b 0a 58 20 | 20 20 69 66 20 28 6e 65 |g)) ;.X | if (ne|
|00003bb0| 77 5f 73 65 74 20 3d 3d | 20 4e 55 4c 4c 29 20 7b |w_set ==| NULL) {|
|00003bc0| 0a 58 20 20 20 20 20 20 | 66 61 74 61 6c 28 22 4e |.X |fatal("N|
|00003bd0| 6f 20 6d 65 6d 6f 72 79 | 20 66 6f 72 20 73 65 74 |o memory| for set|
|00003be0| 20 69 6e 20 53 65 74 55 | 6e 69 6f 6e 22 29 20 3b | in SetU|nion") ;|
|00003bf0| 0a 58 20 20 20 7d 0a 58 | 20 20 20 6c 65 6e 31 20 |.X }.X| len1 |
|00003c00| 3d 20 73 74 72 6c 65 6e | 28 73 70 31 2d 3e 73 65 |= strlen|(sp1->se|
|00003c10| 74 5f 64 65 73 63 29 20 | 3b 0a 58 20 20 20 6c 65 |t_desc) |;.X le|
|00003c20| 6e 32 20 3d 20 73 74 72 | 6c 65 6e 28 73 70 32 2d |n2 = str|len(sp2-|
|00003c30| 3e 73 65 74 5f 64 65 73 | 63 29 20 3b 0a 58 20 20 |>set_des|c) ;.X |
|00003c40| 20 64 65 73 63 20 3d 20 | 28 63 68 61 72 20 2a 29 | desc = |(char *)|
|00003c50| 6d 61 6c 6c 6f 63 28 6c | 65 6e 31 20 2b 20 6c 65 |malloc(l|en1 + le|
|00003c60| 6e 32 20 2b 20 39 29 20 | 3b 0a 58 20 20 20 69 66 |n2 + 9) |;.X if|
|00003c70| 20 28 64 65 73 63 20 3d | 3d 20 4e 55 4c 4c 29 20 | (desc =|= NULL) |
|00003c80| 7b 0a 58 20 20 20 20 20 | 20 66 61 74 61 6c 28 22 |{.X | fatal("|
|00003c90| 4e 6f 20 6d 65 6d 6f 72 | 79 20 66 6f 72 20 73 65 |No memor|y for se|
|00003ca0| 74 20 64 65 73 63 72 69 | 70 74 69 6f 6e 20 69 6e |t descri|ption in|
|00003cb0| 20 53 65 74 55 6e 69 6f | 6e 22 29 20 3b 0a 58 20 | SetUnio|n") ;.X |
|00003cc0| 20 20 7d 0a 58 20 20 20 | 6e 65 77 5f 73 65 74 2d | }.X |new_set-|
|00003cd0| 3e 73 65 74 5f 64 65 73 | 63 20 3d 20 64 65 73 63 |>set_des|c = desc|
|00003ce0| 20 3b 0a 58 20 20 20 73 | 74 72 63 70 79 28 64 65 | ;.X s|trcpy(de|
|00003cf0| 73 63 2c 22 28 22 29 20 | 3b 0a 58 20 20 20 2b 2b |sc,"(") |;.X ++|
|00003d00| 64 65 73 63 20 3b 0a 58 | 20 20 20 73 74 72 63 70 |desc ;.X| strcp|
|00003d10| 79 28 64 65 73 63 2c 20 | 73 70 31 2d 3e 73 65 74 |y(desc, |sp1->set|
|00003d20| 5f 64 65 73 63 29 20 3b | 0a 58 20 20 20 64 65 73 |_desc) ;|.X des|
|00003d30| 63 20 2b 3d 20 6c 65 6e | 31 20 3b 0a 58 20 20 20 |c += len|1 ;.X |
|00003d40| 73 74 72 63 70 79 28 64 | 65 73 63 2c 20 22 29 20 |strcpy(d|esc, ") |
|00003d50| 4f 52 20 28 22 29 20 3b | 0a 58 20 20 20 64 65 73 |OR (") ;|.X des|
|00003d60| 63 20 2b 3d 20 36 20 3b | 0a 58 20 20 20 73 74 72 |c += 6 ;|.X str|
|00003d70| 63 70 79 28 64 65 73 63 | 2c 20 73 70 32 2d 3e 73 |cpy(desc|, sp2->s|
|00003d80| 65 74 5f 64 65 73 63 29 | 20 3b 0a 58 20 20 20 64 |et_desc)| ;.X d|
|00003d90| 65 73 63 20 2b 3d 20 6c | 65 6e 32 20 3b 0a 58 20 |esc += l|en2 ;.X |
|00003da0| 20 20 73 74 72 63 70 79 | 28 64 65 73 63 2c 20 22 | strcpy|(desc, "|
|00003db0| 29 22 29 20 3b 0a 58 20 | 20 20 41 64 64 53 65 74 |)") ;.X | AddSet|
|00003dc0| 28 6e 65 77 5f 73 65 74 | 29 20 3b 0a 58 20 20 20 |(new_set|) ;.X |
|00003dd0| 6e 65 77 5f 73 65 74 2d | 3e 73 65 74 5f 73 69 7a |new_set-|>set_siz|
|00003de0| 65 20 3d 20 6e 65 77 5f | 73 69 7a 65 20 3b 0a 58 |e = new_|size ;.X|
|00003df0| 20 20 20 66 6f 72 20 28 | 69 20 3d 20 30 3b 20 69 | for (|i = 0; i|
|00003e00| 20 3c 20 6e 65 77 5f 73 | 69 7a 65 3b 20 2b 2b 69 | < new_s|ize; ++i|
|00003e10| 29 20 7b 0a 58 20 20 20 | 20 20 20 6e 65 77 5f 73 |) {.X | new_s|
|00003e20| 65 74 2d 3e 73 65 74 5f | 64 61 74 61 5b 69 5d 20 |et->set_|data[i] |
|00003e30| 3d 0a 58 20 20 20 20 20 | 20 20 20 20 28 28 69 20 |=.X | ((i |
|00003e40| 3c 20 73 70 31 2d 3e 73 | 65 74 5f 73 69 7a 65 29 |< sp1->s|et_size)|
|00003e50| 20 3f 20 28 73 70 31 2d | 3e 73 65 74 5f 64 61 74 | ? (sp1-|>set_dat|
|00003e60| 61 5b 69 5d 29 20 3a 20 | 73 70 31 2d 3e 73 65 74 |a[i]) : |sp1->set|
|00003e70| 5f 74 61 69 6c 29 20 7c | 0a 58 20 20 20 20 20 20 |_tail) ||.X |
|00003e80| 20 20 20 28 28 69 20 3c | 20 73 70 32 2d 3e 73 65 | ((i <| sp2->se|
|00003e90| 74 5f 73 69 7a 65 29 20 | 3f 20 28 73 70 32 2d 3e |t_size) |? (sp2->|
|00003ea0| 73 65 74 5f 64 61 74 61 | 5b 69 5d 29 20 3a 20 73 |set_data|[i]) : s|
|00003eb0| 70 32 2d 3e 73 65 74 5f | 74 61 69 6c 29 20 3b 0a |p2->set_|tail) ;.|
|00003ec0| 58 20 20 20 7d 0a 58 20 | 20 20 6e 65 77 5f 73 65 |X }.X | new_se|
|00003ed0| 74 2d 3e 73 65 74 5f 74 | 61 69 6c 20 3d 20 73 70 |t->set_t|ail = sp|
|00003ee0| 31 2d 3e 73 65 74 5f 74 | 61 69 6c 20 7c 20 73 70 |1->set_t|ail | sp|
|00003ef0| 32 2d 3e 73 65 74 5f 74 | 61 69 6c 20 3b 0a 58 20 |2->set_t|ail ;.X |
|00003f00| 20 20 72 65 74 75 72 6e | 28 6e 65 77 5f 73 65 74 | return|(new_set|
|00003f10| 29 20 3b 0a 58 7d 0a 58 | 0a 58 2f 2a 20 53 65 74 |) ;.X}.X|.X/* Set|
|00003f20| 49 6e 76 65 72 73 65 20 | 2d 20 63 6f 6e 73 74 72 |Inverse |- constr|
|00003f30| 75 63 74 20 61 20 6e 65 | 77 20 73 65 74 20 66 72 |uct a ne|w set fr|
|00003f40| 6f 6d 20 74 68 65 20 69 | 6e 76 65 72 73 65 20 6f |om the i|nverse o|
|00003f50| 66 20 61 6e 6f 74 68 65 | 72 2e 0a 58 20 2a 20 41 |f anothe|r..X * A|
|00003f60| 6c 73 6f 20 63 6f 6e 73 | 74 72 75 63 74 20 61 20 |lso cons|truct a |
|00003f70| 6e 65 77 20 64 65 73 63 | 72 69 70 74 69 6f 6e 20 |new desc|ription |
|00003f80| 73 74 72 69 6e 67 2e 0a | 58 20 2a 0a 58 20 2a 20 |string..|X *.X * |
|00003f90| 54 68 69 73 20 69 73 20 | 6b 69 6e 64 20 6f 66 20 |This is |kind of |
|00003fa0| 74 72 69 63 6b 79 2e 20 | 41 6e 20 69 6e 76 65 72 |tricky. |An inver|
|00003fb0| 73 65 20 73 65 74 20 69 | 6e 20 69 69 64 20 6d 61 |se set i|n iid ma|
|00003fc0| 79 20 67 72 6f 77 20 64 | 75 72 69 6e 67 0a 58 20 |y grow d|uring.X |
|00003fd0| 2a 20 74 68 65 20 63 6f | 75 72 73 65 20 6f 66 20 |* the co|urse of |
|00003fe0| 61 20 73 65 73 73 69 6f | 6e 2e 20 42 79 20 4e 4f |a sessio|n. By NO|
|00003ff0| 54 69 6e 67 20 74 68 65 | 20 73 65 74 5f 74 61 69 |Ting the| set_tai|
|00004000| 6c 20 65 78 74 65 6e 73 | 69 6f 6e 20 74 68 65 0a |l extens|ion the.|
|00004010| 58 20 2a 20 69 6e 76 65 | 72 73 65 20 61 74 20 61 |X * inve|rse at a|
|00004020| 6e 79 20 67 69 76 65 6e | 20 74 69 6d 65 20 77 69 |ny given| time wi|
|00004030| 6c 6c 20 62 65 20 64 65 | 66 69 6e 65 64 20 61 73 |ll be de|fined as|
|00004040| 20 74 68 65 20 69 6e 76 | 65 72 73 65 20 61 67 61 | the inv|erse aga|
|00004050| 69 6e 73 74 0a 58 20 2a | 20 61 20 75 6e 69 76 65 |inst.X *| a unive|
|00004060| 72 73 65 20 74 68 61 74 | 20 67 72 6f 77 73 20 61 |rse that| grows a|
|00004070| 73 20 61 64 64 69 74 69 | 6f 6e 61 6c 20 71 75 65 |s additi|onal que|
|00004080| 72 69 65 73 20 61 72 65 | 20 6d 61 64 65 20 61 6e |ries are| made an|
|00004090| 64 20 6e 65 77 20 66 69 | 6c 65 73 0a 58 20 2a 20 |d new fi|les.X * |
|000040a0| 61 72 65 20 61 64 64 65 | 64 20 74 6f 20 74 68 65 |are adde|d to the|
|000040b0| 20 64 61 74 61 62 61 73 | 65 2e 0a 58 20 2a 0a 58 | databas|e..X *.X|
|000040c0| 20 2a 20 53 65 76 65 72 | 61 6c 20 61 6c 74 65 72 | * Sever|al alter|
|000040d0| 6e 61 74 69 76 65 20 64 | 65 66 69 6e 69 74 69 6f |native d|efinitio|
|000040e0| 6e 73 20 77 65 72 65 20 | 70 6f 73 73 69 62 6c 65 |ns were |possible|
|000040f0| 20 28 73 6e 61 70 73 68 | 6f 74 20 74 68 65 0a 58 | (snapsh|ot the.X|
|00004100| 20 2a 20 75 6e 69 76 65 | 72 73 65 20 61 74 20 74 | * unive|rse at t|
|00004110| 68 65 20 74 69 6d 65 20 | 6f 66 20 74 68 65 20 4e |he time |of the N|
|00004120| 4f 54 2c 20 67 6f 20 72 | 65 61 64 20 74 68 65 20 |OT, go r|ead the |
|00004130| 49 44 20 66 69 6c 65 20 | 74 6f 0a 58 20 2a 20 64 |ID file |to.X * d|
|00004140| 65 74 65 72 6d 69 6e 65 | 20 74 68 65 20 63 6f 6d |etermine| the com|
|00004150| 70 6c 65 74 65 20 75 6e | 69 76 65 72 73 65 29 2c |plete un|iverse),|
|00004160| 20 62 75 74 20 74 68 69 | 73 20 6f 6e 65 20 77 61 | but thi|s one wa|
|00004170| 73 20 74 68 65 20 6f 6e | 65 0a 58 20 2a 20 49 20 |s the on|e.X * I |
|00004180| 70 69 63 6b 65 64 2e 0a | 58 20 2a 2f 0a 58 73 65 |picked..|X */.Xse|
|00004190| 74 5f 74 79 70 65 20 2a | 0a 58 53 65 74 49 6e 76 |t_type *|.XSetInv|
|000041a0| 65 72 73 65 28 73 70 29 | 0a 58 20 20 20 73 65 74 |erse(sp)|.X set|
|000041b0| 5f 74 79 70 65 20 2a 20 | 73 70 20 3b 0a 58 7b 0a |_type * |sp ;.X{.|
|000041c0| 58 20 20 20 63 68 61 72 | 20 2a 20 20 20 20 20 64 |X char| * d|
|000041d0| 65 73 63 20 3b 0a 58 20 | 20 20 69 6e 74 20 20 20 |esc ;.X | int |
|000041e0| 20 20 20 20 20 69 20 3b | 0a 58 20 20 20 73 65 74 | i ;|.X set|
|000041f0| 5f 74 79 70 65 20 2a 20 | 6e 65 77 5f 73 65 74 20 |_type * |new_set |
|00004200| 3b 0a 58 20 20 20 0a 58 | 20 20 20 6e 65 77 5f 73 |;.X .X| new_s|
|00004210| 65 74 20 3d 20 28 73 65 | 74 5f 74 79 70 65 20 2a |et = (se|t_type *|
|00004220| 29 6d 61 6c 6c 6f 63 28 | 73 69 7a 65 6f 66 28 73 |)malloc(|sizeof(s|
|00004230| 65 74 5f 74 79 70 65 29 | 20 2b 0a 58 20 20 20 20 |et_type)| +.X |
|00004240| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00004250| 20 20 20 20 20 20 20 20 | 20 20 20 20 28 73 70 2d | | (sp-|
|00004260| 3e 73 65 74 5f 73 69 7a | 65 20 2d 20 31 29 20 2a |>set_siz|e - 1) *|
|00004270| 20 73 69 7a 65 6f 66 28 | 75 6e 73 69 67 6e 65 64 | sizeof(|unsigned|
|00004280| 20 6c 6f 6e 67 29 29 20 | 3b 0a 58 20 20 20 69 66 | long)) |;.X if|
|00004290| 20 28 6e 65 77 5f 73 65 | 74 20 3d 3d 20 4e 55 4c | (new_se|t == NUL|
|000042a0| 4c 29 20 7b 0a 58 20 20 | 20 20 20 20 66 61 74 61 |L) {.X | fata|
|000042b0| 6c 28 22 4e 6f 20 6d 65 | 6d 6f 72 79 20 66 6f 72 |l("No me|mory for|
|000042c0| 20 73 65 74 20 69 6e 20 | 53 65 74 49 6e 76 65 72 | set in |SetInver|
|000042d0| 73 65 22 29 20 3b 0a 58 | 20 20 20 7d 0a 58 20 20 |se") ;.X| }.X |
|000042e0| 20 64 65 73 63 20 3d 20 | 28 63 68 61 72 20 2a 29 | desc = |(char *)|
|000042f0| 6d 61 6c 6c 6f 63 28 73 | 74 72 6c 65 6e 28 73 70 |malloc(s|trlen(sp|
|00004300| 2d 3e 73 65 74 5f 64 65 | 73 63 29 20 2b 20 35 29 |->set_de|sc) + 5)|
|00004310| 20 3b 0a 58 20 20 20 69 | 66 20 28 64 65 73 63 20 | ;.X i|f (desc |
|00004320| 3d 3d 20 4e 55 4c 4c 29 | 20 7b 0a 58 20 20 20 20 |== NULL)| {.X |
|00004330| 20 20 66 61 74 61 6c 28 | 22 4e 6f 20 6d 65 6d 6f | fatal(|"No memo|
|00004340| 72 79 20 66 6f 72 20 73 | 65 74 20 64 65 73 63 72 |ry for s|et descr|
|00004350| 69 70 74 69 6f 6e 20 69 | 6e 20 53 65 74 49 6e 76 |iption i|n SetInv|
|00004360| 65 72 73 65 22 29 20 3b | 0a 58 20 20 20 7d 0a 58 |erse") ;|.X }.X|
|00004370| 20 20 20 6e 65 77 5f 73 | 65 74 2d 3e 73 65 74 5f | new_s|et->set_|
|00004380| 64 65 73 63 20 3d 20 64 | 65 73 63 20 3b 0a 58 20 |desc = d|esc ;.X |
|00004390| 20 20 73 74 72 63 70 79 | 28 64 65 73 63 2c 22 4e | strcpy|(desc,"N|
|000043a0| 4f 54 20 22 29 20 3b 0a | 58 20 20 20 64 65 73 63 |OT ") ;.|X desc|
|000043b0| 20 2b 3d 20 34 20 3b 0a | 58 20 20 20 73 74 72 63 | += 4 ;.|X strc|
|000043c0| 70 79 28 64 65 73 63 2c | 20 73 70 2d 3e 73 65 74 |py(desc,| sp->set|
|000043d0| 5f 64 65 73 63 29 20 3b | 0a 58 20 20 20 41 64 64 |_desc) ;|.X Add|
|000043e0| 53 65 74 28 6e 65 77 5f | 73 65 74 29 20 3b 0a 58 |Set(new_|set) ;.X|
|000043f0| 20 20 20 6e 65 77 5f 73 | 65 74 2d 3e 73 65 74 5f | new_s|et->set_|
|00004400| 73 69 7a 65 20 3d 20 73 | 70 2d 3e 73 65 74 5f 73 |size = s|p->set_s|
|00004410| 69 7a 65 20 3b 0a 58 20 | 20 20 66 6f 72 20 28 69 |ize ;.X | for (i|
|00004420| 20 3d 20 30 3b 20 69 20 | 3c 20 73 70 2d 3e 73 65 | = 0; i |< sp->se|
|00004430| 74 5f 73 69 7a 65 3b 20 | 2b 2b 69 29 20 7b 0a 58 |t_size; |++i) {.X|
|00004440| 20 20 20 20 20 20 6e 65 | 77 5f 73 65 74 2d 3e 73 | ne|w_set->s|
|00004450| 65 74 5f 64 61 74 61 5b | 69 5d 20 3d 20 7e 20 73 |et_data[|i] = ~ s|
|00004460| 70 2d 3e 73 65 74 5f 64 | 61 74 61 5b 69 5d 20 3b |p->set_d|ata[i] ;|
|00004470| 0a 58 20 20 20 7d 0a 58 | 20 20 20 6e 65 77 5f 73 |.X }.X| new_s|
|00004480| 65 74 2d 3e 73 65 74 5f | 74 61 69 6c 20 3d 20 7e |et->set_|tail = ~|
|00004490| 20 73 70 2d 3e 73 65 74 | 5f 74 61 69 6c 20 3b 0a | sp->set|_tail ;.|
|000044a0| 58 20 20 20 72 65 74 75 | 72 6e 28 6e 65 77 5f 73 |X retu|rn(new_s|
|000044b0| 65 74 29 20 3b 0a 58 7d | 0a 58 0a 58 2f 2a 20 52 |et) ;.X}|.X.X/* R|
|000044c0| 75 6e 53 68 65 6c 6c 20 | 2d 20 72 75 6e 20 61 20 |unShell |- run a |
|000044d0| 70 72 6f 67 72 61 6d 20 | 77 69 74 68 20 61 72 67 |program |with arg|
|000044e0| 75 6d 65 6e 74 73 20 66 | 72 6f 6d 20 69 64 5f 6c |uments f|rom id_l|
|000044f0| 69 73 74 2e 0a 58 20 2a | 2f 0a 58 76 6f 69 64 0a |ist..X *|/.Xvoid.|
|00004500| 58 52 75 6e 53 68 65 6c | 6c 28 70 70 2c 20 69 64 |XRunShel|l(pp, id|
|00004510| 6c 70 29 0a 58 20 20 20 | 63 68 61 72 20 2a 20 20 |lp).X |char * |
|00004520| 20 20 20 20 20 20 20 70 | 70 20 3b 0a 58 20 20 20 | p|p ;.X |
|00004530| 69 64 5f 6c 69 73 74 5f | 74 79 70 65 20 2a 20 69 |id_list_|type * i|
|00004540| 64 6c 70 20 3b 0a 58 7b | 0a 58 20 20 20 63 68 61 |dlp ;.X{|.X cha|
|00004550| 72 20 2a 20 20 20 20 20 | 20 20 20 20 63 6d 64 20 |r * | cmd |
|00004560| 3d 20 28 63 68 61 72 20 | 2a 29 61 6c 6c 6f 63 61 |= (char |*)alloca|
|00004570| 28 41 72 67 4c 69 73 74 | 53 69 7a 65 28 69 64 6c |(ArgList|Size(idl|
|00004580| 70 29 20 2b 20 73 74 72 | 6c 65 6e 28 70 70 29 20 |p) + str|len(pp) |
|00004590| 2b 20 32 29 3b 0a 58 20 | 20 20 69 64 5f 74 79 70 |+ 2);.X | id_typ|
|000045a0| 65 20 2a 20 20 20 20 20 | 20 69 64 65 70 20 3b 0a |e * | idep ;.|
|000045b0| 58 20 20 20 69 64 5f 74 | 79 70 65 20 2a 20 20 20 |X id_t|ype * |
|000045c0| 20 20 20 6e 65 78 74 5f | 69 64 20 3b 0a 58 20 20 | next_|id ;.X |
|000045d0| 20 0a 58 20 20 20 73 74 | 72 63 70 79 28 63 6d 64 | .X st|rcpy(cmd|
|000045e0| 2c 20 70 70 29 20 3b 0a | 58 20 20 20 69 64 65 70 |, pp) ;.|X idep|
|000045f0| 20 3d 20 69 64 6c 70 2d | 3e 69 64 5f 6c 69 73 74 | = idlp-|>id_list|
|00004600| 20 3b 0a 58 20 20 20 77 | 68 69 6c 65 20 28 69 64 | ;.X w|hile (id|
|00004610| 65 70 20 21 3d 20 4e 55 | 4c 4c 29 20 7b 0a 58 20 |ep != NU|LL) {.X |
|00004620| 20 20 20 20 20 73 74 72 | 63 61 74 28 63 6d 64 2c | str|cat(cmd,|
|00004630| 20 22 20 22 29 20 3b 0a | 58 20 20 20 20 20 20 73 | " ") ;.|X s|
|00004640| 74 72 63 61 74 28 63 6d | 64 2c 20 69 64 65 70 2d |trcat(cm|d, idep-|
|00004650| 3e 69 64 29 20 3b 0a 58 | 20 20 20 20 20 20 6e 65 |>id) ;.X| ne|
|00004660| 78 74 5f 69 64 20 3d 20 | 69 64 65 70 2d 3e 6e 65 |xt_id = |idep->ne|
|00004670| 78 74 5f 69 64 20 3b 0a | 58 20 20 20 20 20 20 66 |xt_id ;.|X f|
|00004680| 72 65 65 28 69 64 65 70 | 29 20 3b 0a 58 20 20 20 |ree(idep|) ;.X |
|00004690| 20 20 20 69 64 65 70 20 | 3d 20 6e 65 78 74 5f 69 | idep |= next_i|
|000046a0| 64 20 3b 0a 58 20 20 20 | 7d 0a 58 20 20 20 66 72 |d ;.X |}.X fr|
|000046b0| 65 65 28 69 64 6c 70 29 | 20 3b 0a 58 20 20 20 73 |ee(idlp)| ;.X s|
|000046c0| 79 73 74 65 6d 28 63 6d | 64 29 20 3b 0a 58 7d 0a |ystem(cm|d) ;.X}.|
|000046d0| 45 4e 44 5f 4f 46 5f 46 | 49 4c 45 0a 69 66 20 74 |END_OF_F|ILE.if t|
|000046e0| 65 73 74 20 31 36 35 35 | 33 20 2d 6e 65 20 60 77 |est 1655|3 -ne `w|
|000046f0| 63 20 2d 63 20 3c 27 69 | 69 64 66 75 6e 2e 63 27 |c -c <'i|idfun.c'|
|00004700| 60 3b 20 74 68 65 6e 0a | 20 20 20 20 65 63 68 6f |`; then.| echo|
|00004710| 20 73 68 61 72 3a 20 5c | 22 27 69 69 64 66 75 6e | shar: \|"'iidfun|
|00004720| 2e 63 27 5c 22 20 75 6e | 70 61 63 6b 65 64 20 77 |.c'\" un|packed w|
|00004730| 69 74 68 20 77 72 6f 6e | 67 20 73 69 7a 65 21 0a |ith wron|g size!.|
|00004740| 66 69 0a 23 20 65 6e 64 | 20 6f 66 20 27 69 69 64 |fi.# end| of 'iid|
|00004750| 66 75 6e 2e 63 27 0a 66 | 69 0a 65 63 68 6f 20 73 |fun.c'.f|i.echo s|
|00004760| 68 61 72 3a 20 45 6e 64 | 20 6f 66 20 61 72 63 68 |har: End| of arch|
|00004770| 69 76 65 20 39 20 5c 28 | 6f 66 20 31 31 5c 29 2e |ive 9 \(|of 11\).|
|00004780| 0a 63 70 20 2f 64 65 76 | 2f 6e 75 6c 6c 20 61 72 |.cp /dev|/null ar|
|00004790| 6b 39 69 73 64 6f 6e 65 | 0a 4d 49 53 53 49 4e 47 |k9isdone|.MISSING|
|000047a0| 3d 22 22 0a 66 6f 72 20 | 49 20 69 6e 20 31 20 32 |="".for |I in 1 2|
|000047b0| 20 33 20 34 20 35 20 36 | 20 37 20 38 20 39 20 31 | 3 4 5 6| 7 8 9 1|
|000047c0| 30 20 31 31 20 3b 20 64 | 6f 0a 20 20 20 20 69 66 |0 11 ; d|o. if|
|000047d0| 20 74 65 73 74 20 21 20 | 2d 66 20 61 72 6b 24 7b | test ! |-f ark${|
|000047e0| 49 7d 69 73 64 6f 6e 65 | 20 3b 20 74 68 65 6e 0a |I}isdone| ; then.|
|000047f0| 09 4d 49 53 53 49 4e 47 | 3d 22 24 7b 4d 49 53 53 |.MISSING|="${MISS|
|00004800| 49 4e 47 7d 20 24 7b 49 | 7d 22 0a 20 20 20 20 66 |ING} ${I|}". f|
|00004810| 69 0a 64 6f 6e 65 0a 69 | 66 20 74 65 73 74 20 22 |i.done.i|f test "|
|00004820| 24 7b 4d 49 53 53 49 4e | 47 7d 22 20 3d 20 22 22 |${MISSIN|G}" = ""|
|00004830| 20 3b 20 74 68 65 6e 0a | 20 20 20 20 65 63 68 6f | ; then.| echo|
|00004840| 20 59 6f 75 20 68 61 76 | 65 20 75 6e 70 61 63 6b | You hav|e unpack|
|00004850| 65 64 20 61 6c 6c 20 31 | 31 20 61 72 63 68 69 76 |ed all 1|1 archiv|
|00004860| 65 73 2e 0a 20 20 20 20 | 72 6d 20 2d 66 20 61 72 |es.. |rm -f ar|
|00004870| 6b 5b 31 2d 39 5d 69 73 | 64 6f 6e 65 20 61 72 6b |k[1-9]is|done ark|
|00004880| 5b 31 2d 39 5d 5b 30 2d | 39 5d 69 73 64 6f 6e 65 |[1-9][0-|9]isdone|
|00004890| 0a 65 6c 73 65 0a 20 20 | 20 20 65 63 68 6f 20 59 |.else. | echo Y|
|000048a0| 6f 75 20 73 74 69 6c 6c | 20 6e 65 65 64 20 74 6f |ou still| need to|
|000048b0| 20 75 6e 70 61 63 6b 20 | 74 68 65 20 66 6f 6c 6c | unpack |the foll|
|000048c0| 6f 77 69 6e 67 20 61 72 | 63 68 69 76 65 73 3a 0a |owing ar|chives:.|
|000048d0| 20 20 20 20 65 63 68 6f | 20 22 20 20 20 20 20 20 | echo| " |
|000048e0| 20 20 22 20 24 7b 4d 49 | 53 53 49 4e 47 7d 0a 66 | " ${MI|SSING}.f|
|000048f0| 69 0a 23 23 20 20 45 6e | 64 20 6f 66 20 73 68 65 |i.## En|d of she|
|00004900| 6c 6c 20 61 72 63 68 69 | 76 65 2e 0a 65 78 69 74 |ll archi|ve..exit|
|00004910| 20 30 0a 2d 2d 0a 3d 3d | 3d 3d 3d 3d 3d 3d 3d 3d | 0.--.==|========|
|00004920| 3d 3d 3d 3d 3d 3d 3d 3d | 3d 3d 3d 3d 3d 3d 3d 3d |========|========|
|00004930| 3d 3d 3d 3d 3d 3d 3d 3d | 3d 3d 3d 3d 3d 3d 3d 3d |========|========|
|00004940| 3d 3d 3d 3d 3d 3d 3d 3d | 3d 3d 3d 3d 3d 3d 3d 3d |========|========|
|00004950| 3d 3d 3d 3d 3d 3d 3d 3d | 3d 3d 3d 3d 0a 64 6f 6d |========|====.dom|
|00004960| 61 69 6e 3a 20 74 61 68 | 6f 72 73 6c 65 79 40 63 |ain: tah|orsley@c|
|00004970| 73 64 2e 68 61 72 72 69 | 73 2e 63 6f 6d 20 20 20 |sd.harri|s.com |
|00004980| 20 20 20 20 55 53 4d 61 | 69 6c 3a 20 54 6f 6d 20 | USMa|il: Tom |
|00004990| 48 6f 72 73 6c 65 79 0a | 20 20 75 75 63 70 3a 20 |Horsley.| uucp: |
|000049a0| 2e 2e 2e 21 75 75 6e 65 | 74 21 68 63 78 31 21 74 |...!uune|t!hcx1!t|
|000049b0| 61 68 6f 72 73 6c 65 79 | 20 20 20 20 20 20 20 20 |ahorsley| |
|000049c0| 20 20 20 20 20 20 20 35 | 31 31 20 4b 69 6e 67 62 | 5|11 Kingb|
|000049d0| 69 72 64 20 43 69 72 63 | 6c 65 0a 20 20 20 20 20 |ird Circ|le. |
|000049e0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000049f0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00004a00| 20 20 20 20 20 20 20 20 | 20 20 44 65 6c 72 61 79 | | Delray|
|00004a10| 20 42 65 61 63 68 2c 20 | 46 4c 20 20 33 33 34 34 | Beach, |FL 3344|
|00004a20| 34 0a 2b 3d 3d 3d 3d 20 | 43 65 6e 73 6f 72 73 68 |4.+==== |Censorsh|
|00004a30| 69 70 20 69 73 20 74 68 | 65 20 6f 6e 6c 79 20 66 |ip is th|e only f|
|00004a40| 6f 72 6d 20 6f 66 20 4f | 62 73 63 65 6e 69 74 79 |orm of O|bscenity|
|00004a50| 20 3d 3d 3d 3d 3d 3d 3d | 3d 3d 3d 3d 3d 3d 3d 3d | =======|========|
|00004a60| 3d 3d 3d 3d 3d 3d 3d 2b | 0a 7c 20 20 20 20 20 28 |=======+|.| (|
|00004a70| 57 61 69 74 2c 20 49 20 | 66 6f 72 67 6f 74 20 67 |Wait, I |forgot g|
|00004a80| 6f 76 65 72 6e 6d 65 6e | 74 20 74 6f 62 61 63 63 |overnmen|t tobacc|
|00004a90| 6f 20 73 75 62 73 69 64 | 69 65 73 2e 2e 2e 29 20 |o subsid|ies...) |
|00004aa0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 7c 0a | | |.|
|00004ab0| 2b 3d 3d 3d 3d 3d 3d 3d | 3d 3d 3d 3d 3d 3d 3d 3d |+=======|========|
|00004ac0| 3d 3d 3d 3d 3d 3d 3d 3d | 3d 3d 3d 3d 3d 3d 3d 3d |========|========|
|00004ad0| 3d 3d 3d 3d 3d 3d 3d 3d | 3d 3d 3d 3d 3d 3d 3d 3d |========|========|
|00004ae0| 3d 3d 3d 3d 3d 3d 3d 3d | 3d 3d 3d 3d 3d 3d 3d 3d |========|========|
|00004af0| 3d 3d 3d 3d 3d 2b 0a | |=====+. | |
+--------+-------------------------+-------------------------+--------+--------+