home *** CD-ROM | disk | FTP | other *** search
/ APDL Public Domain 1 / APDL_PD1A.iso / program / c / c_utils < prev    next >
ArcFS Archive  |  1995-10-01  |  478.0 KB

open in: MacOS 8.1     |     Win98     |     DOS

browse contents    |     view JSON data     |     view as text


This file was processed as: ArcFS Archive (archive/arcFS).

ConfidenceProgramDetectionMatch TypeSupport
100% dexvert ArcFS Archive (archive/arcFS) magic Supported
100% file RISC OS archive (ArcFS format) default
99% file data default
100% TrID Acorn ArcFS Archive default
100% gt2 Kopftext: 'Archive' default (weak)
100% detectItEasy Archive: ArcFS default



hex view
+--------+-------------------------+-------------------------+--------+--------+
|00000000| 41 72 63 68 69 76 65 00 | 44 13 00 00 a4 13 00 00 |Archive.|D.......|
|00000010| 28 00 00 00 64 00 00 00 | 00 00 00 00 00 00 00 00 |(...d...|........|
|00000020| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000030| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000040| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000050| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000060| 82 43 5f 55 74 69 6c 73 | 00 00 00 00 ff ff ff ff |.C_Utils|........|
|00000070| 44 fd ff ff 47 20 d3 fe | 00 00 00 00 ff ff ff ff |D...G ..|........|
|00000080| 20 13 00 80 82 43 00 00 | c3 00 04 00 74 65 72 0d | ....C..|....ter.|
|00000090| ff ff ff ff 44 fd ff ff | c9 68 09 fa 00 00 00 00 |....D...|.h......|
|000000a0| ff ff ff ff 9c 06 00 80 | 82 41 6c 6c 6f 63 61 00 |........|.Alloca.|
|000000b0| 00 00 00 00 b7 13 00 00 | 43 ff ff ff 43 ba a6 5a |........|C...C..Z|
|000000c0| 03 00 2f d7 b7 13 00 00 | 24 00 00 00 82 42 61 67 |../.....|$....Bag|
|000000d0| 00 00 00 00 00 00 00 00 | 91 32 00 00 42 ff ff ff |........|.2..B...|
|000000e0| 45 ee b2 05 03 00 ea 34 | 91 32 00 00 ff 13 00 00 |E......4|.2......|
|000000f0| 82 42 69 74 73 65 74 00 | 00 00 00 00 69 16 00 00 |.Bitset.|....i...|
|00000100| 41 ff ff ff 79 bc 33 8d | 03 00 f9 34 69 16 00 00 |A...y.3.|...4i...|
|00000110| b4 46 00 00 82 43 68 64 | 69 72 00 00 00 00 00 00 |.F...Chd|ir......|
|00000120| 6c 01 00 00 42 ff ff ff | 34 5e 54 0e 03 00 c0 d3 |l...B...|4^T.....|
|00000130| 6c 01 00 00 41 5d 00 00 | 82 43 6f 72 6f 75 74 69 |l...A]..|.Corouti|
|00000140| 6e 65 73 00 ab 0f 00 00 | 43 ff ff ff 9f 95 7e 27 |nes.....|C.....~'|
|00000150| 03 00 65 69 ab 0f 00 00 | d1 5e 00 00 82 44 65 71 |..ei....|.^...Deq|
|00000160| 75 65 00 00 00 00 00 00 | 5f 1c 00 00 41 ff ff ff |ue......|_...A...|
|00000170| 32 27 de 93 03 00 f1 01 | 5f 1c 00 00 a0 6e 00 00 |2'......|_....n..|
|00000180| 82 44 69 72 00 00 00 00 | 00 00 00 00 54 0e 00 00 |.Dir....|....T...|
|00000190| 43 ff ff ff 71 33 04 15 | 03 00 1b 01 54 0e 00 00 |C...q3..|....T...|
|000001a0| 23 8b 00 00 82 44 69 72 | 73 63 61 6e 00 00 00 00 |#....Dir|scan....|
|000001b0| a1 13 00 00 43 ff ff ff | e2 f6 03 15 03 00 a9 be |....C...|........|
|000001c0| a1 13 00 00 9b 99 00 00 | 82 45 66 6f 70 65 6e 00 |........|.Efopen.|
|000001d0| 00 00 00 00 11 02 00 00 | 42 ff ff ff 12 dc 5c 85 |........|B.....\.|
|000001e0| 03 00 3a ee 11 02 00 00 | 60 ad 00 00 82 45 6d 61 |..:.....|`....Ema|
|000001f0| 6c 6c 6f 63 00 00 00 00 | 72 02 00 00 42 ff ff ff |lloc....|r...B...|
|00000200| c4 ee 5c 85 03 00 d9 83 | 72 02 00 00 95 af 00 00 |..\.....|r.......|
|00000210| 82 46 63 72 79 70 74 00 | 00 00 00 00 99 63 00 00 |.Fcrypt.|.....c..|
|00000220| 43 ff ff ff 2c 0a 34 73 | 03 00 88 d3 99 63 00 00 |C...,.4s|.....c..|
|00000230| 2b b2 00 00 82 46 69 6c | 65 6c 65 6e 00 00 00 00 |+....Fil|elen....|
|00000240| 1c 01 00 00 42 ff ff ff | f9 1e 5c 52 03 00 e0 63 |....B...|..\R...c|
|00000250| 1c 01 00 00 e8 15 01 00 | 82 46 69 6c 65 74 69 6d |........|.Filetim|
|00000260| 65 00 00 00 42 02 00 00 | 42 ff ff ff df 11 4f 0e |e...B...|B.....O.|
|00000270| 03 00 17 68 42 02 00 00 | 28 17 01 00 82 46 69 6c |...hB...|(....Fil|
|00000280| 65 74 79 70 65 00 00 00 | ca 01 00 00 42 ff ff ff |etype...|....B...|
|00000290| ed 0b 4e 0e 03 00 f9 8b | ca 01 00 00 8e 19 01 00 |..N.....|........|
|000002a0| 82 46 69 6c 74 65 72 00 | 00 00 00 00 d7 1e 00 00 |.Filter.|........|
|000002b0| 43 ff ff ff 41 23 53 20 | 03 00 a6 93 d7 1e 00 00 |C...A#S |........|
|000002c0| 7c 1b 01 00 82 46 72 65 | 6e 61 6d 65 00 00 00 00 ||....Fre|name....|
|000002d0| e5 09 00 00 43 ff ff ff | a3 12 8d 15 03 00 87 1f |....C...|........|
|000002e0| e5 09 00 00 77 3a 01 00 | 82 47 65 74 77 64 00 00 |....w:..|.Getwd..|
|000002f0| 00 00 00 00 89 16 00 00 | 42 ff ff ff b8 ff 6f 3f |........|B.....o?|
|00000300| 03 00 c1 cf 89 16 00 00 | 80 44 01 00 82 49 73 61 |........|.D...Isa|
|00000310| 74 74 79 00 00 00 00 00 | 53 02 00 00 42 ff ff ff |tty.....|S...B...|
|00000320| 1c 57 7d 65 03 00 b0 5c | 53 02 00 00 2d 5b 01 00 |.W}e...\|S...-[..|
|00000330| 82 4d 61 70 00 00 00 00 | 00 00 00 00 7c 2c 00 00 |.Map....|....|,..|
|00000340| 41 ff ff ff ce 0e e2 93 | 03 00 ac 84 7c 2c 00 00 |A.......|....|,..|
|00000350| a4 5d 01 00 82 4d 65 73 | 73 61 67 65 00 00 00 00 |.]...Mes|sage....|
|00000360| 0d 01 00 00 43 ff ff ff | b4 54 54 20 03 00 14 e1 |....C...|.TT ....|
|00000370| 0d 01 00 00 44 8a 01 00 | 82 4d 6b 74 65 6d 70 00 |....D...|.Mktemp.|
|00000380| 00 00 00 00 d0 0d 00 00 | 42 ff ff ff f6 39 66 73 |........|B....9fs|
|00000390| 03 00 fa b2 d0 0d 00 00 | 75 8b 01 00 82 4f 73 43 |........|u....OsC|
|000003a0| 6d 64 00 00 00 00 00 00 | 2a 08 00 00 43 ff ff ff |md......|*...C...|
|000003b0| d3 67 53 20 03 00 65 b6 | 2a 08 00 00 69 99 01 00 |.gS ..e.|*...i...|
|000003c0| 82 50 61 6e 69 63 00 00 | 00 00 00 00 c0 01 00 00 |.Panic..|........|
|000003d0| 43 ff ff ff 78 54 54 20 | 03 00 71 27 c0 01 00 00 |C...xTT |..q'....|
|000003e0| b7 a1 01 00 82 50 6f 70 | 65 6e 00 00 00 00 00 00 |.....Pop|en......|
|000003f0| 21 13 00 00 43 ff ff ff | ad 23 53 20 03 00 1d c8 |!...C...|.#S ....|
|00000400| 21 13 00 00 9b a3 01 00 | 82 51 75 65 75 65 00 00 |!.......|.Queue..|
|00000410| 00 00 00 00 86 17 00 00 | 41 ff ff ff e4 f6 dd 93 |........|A.......|
|00000420| 03 00 51 61 86 17 00 00 | e0 b6 01 00 82 52 61 6e |..Qa....|.....Ran|
|00000430| 64 6f 6d 00 00 00 00 00 | c1 2f 00 00 42 ff ff ff |dom.....|./..B...|
|00000440| c6 56 cb 3e 03 00 42 eb | c1 2f 00 00 8a ce 01 00 |.V.>..B.|./......|
|00000450| 82 52 69 6e 67 00 00 00 | 00 00 00 00 ad 26 00 00 |.Ring...|.....&..|
|00000460| 41 ff ff ff 3b 90 de 93 | 03 00 2f 87 ad 26 00 00 |A...;...|../..&..|
|00000470| 6f fe 01 00 82 53 65 74 | 00 00 00 00 00 00 00 00 |o....Set|........|
|00000480| f2 2b 00 00 41 ff ff ff | 2b 85 e9 93 03 00 bc 74 |.+..A...|+......t|
|00000490| f2 2b 00 00 40 25 02 00 | 82 53 74 61 63 6b 00 00 |.+..@%..|.Stack..|
|000004a0| 00 00 00 00 9a 16 00 00 | 41 ff ff ff 4b d3 dd 93 |........|A...K...|
|000004b0| 03 00 dd 55 9a 16 00 00 | 56 51 02 00 82 53 74 61 |...U....|VQ...Sta|
|000004c0| 74 00 00 00 00 00 00 00 | 5c 0f 00 00 43 ff ff ff |t.......|\...C...|
|000004d0| ce 43 2c 73 03 00 bb 35 | 5c 0f 00 00 14 68 02 00 |.C,s...5|\....h..|
|000004e0| 82 53 74 72 63 63 68 72 | 00 00 00 00 43 01 00 00 |.Strcchr|....C...|
|000004f0| 41 ff ff ff 80 84 46 91 | 03 00 37 8f 43 01 00 00 |A.....F.|..7.C...|
|00000500| 94 77 02 00 82 53 74 72 | 64 75 70 00 00 00 00 00 |.w...Str|dup.....|
|00000510| 5d 01 00 00 42 ff ff ff | d4 fb 5c 85 03 00 f8 ca |]...B...|..\.....|
|00000520| 5d 01 00 00 fb 78 02 00 | 82 53 74 72 6c 63 6d 70 |]....x..|.Strlcmp|
|00000530| 00 00 00 00 4a 01 00 00 | 43 ff ff ff ed 06 05 15 |....J...|C.......|
|00000540| 03 00 dc 75 4a 01 00 00 | 7c 7a 02 00 82 53 74 72 |...uJ...||z...Str|
|00000550| 6c 6f 77 65 72 00 00 00 | 30 01 00 00 43 ff ff ff |lower...|0...C...|
|00000560| fd 06 05 15 03 00 71 0c | 30 01 00 00 ea 7b 02 00 |......q.|0....{..|
|00000570| 82 53 74 72 6e 64 75 70 | 00 00 00 00 7e 01 00 00 |.Strndup|....~...|
|00000580| 42 ff ff ff f1 fb 5c 85 | 03 00 42 d7 7e 01 00 00 |B.....\.|..B.~...|
|00000590| 3e 7d 02 00 82 53 74 72 | 6e 6c 63 6d 70 00 00 00 |>}...Str|nlcmp...|
|000005a0| b1 01 00 00 43 ff ff ff | 0c 07 05 15 03 00 62 03 |....C...|......b.|
|000005b0| b1 01 00 00 e0 7e 02 00 | 82 53 74 72 6e 70 63 70 |.....~..|.Strnpcp|
|000005c0| 79 00 00 00 2b 01 00 00 | 41 ff ff ff d5 75 2e 8b |y...+...|A....u..|
|000005d0| 03 00 46 e6 2b 01 00 00 | b5 80 02 00 82 53 74 72 |..F.+...|.....Str|
|000005e0| 6e 75 63 6d 70 00 00 00 | b1 01 00 00 43 ff ff ff |nucmp...|....C...|
|000005f0| 1b 07 05 15 03 00 ca 78 | b1 01 00 00 04 82 02 00 |.......x|........|
|00000600| 82 53 74 72 70 63 70 79 | 00 00 00 00 17 01 00 00 |.Strpcpy|........|
|00000610| 41 ff ff ff f6 7a 2e 8b | 03 00 54 2b 17 01 00 00 |A....z..|..T+....|
|00000620| d9 83 02 00 82 53 74 72 | 75 63 6d 70 00 00 00 00 |.....Str|ucmp....|
|00000630| 4b 01 00 00 43 ff ff ff | f0 37 09 15 03 00 d0 77 |K...C...|.7.....w|
|00000640| 4b 01 00 00 14 85 02 00 | 82 53 74 72 75 70 70 65 |K.......|.Struppe|
|00000650| 72 00 00 00 30 01 00 00 | 43 ff ff ff 32 07 05 15 |r...0...|C...2...|
|00000660| 03 00 7c a2 30 01 00 00 | 83 86 02 00 82 54 69 6d |..|.0...|.....Tim|
|00000670| 65 00 00 00 00 00 00 00 | 23 14 00 00 42 ff ff ff |e.......|#...B...|
|00000680| 18 0a 5a 0e 03 00 c1 37 | 23 14 00 00 d7 87 02 00 |..Z....7|#.......|
|00000690| 82 54 6f 75 63 68 00 00 | 00 00 00 00 50 01 00 00 |.Touch..|....P...|
|000006a0| 42 ff ff ff 18 7b 54 0e | 03 00 48 cc 50 01 00 00 |B....{T.|..H.P...|
|000006b0| 1e 9c 02 00 82 55 6e 65 | 78 65 63 00 00 00 00 00 |.....Une|xec.....|
|000006c0| 76 0b 00 00 43 ff ff ff | bd 03 ba 5e 03 00 f0 51 |v...C...|...^...Q|
|000006d0| 76 0b 00 00 92 9d 02 00 | 00 00 00 00 00 00 00 00 |v.......|........|
|000006e0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|000006f0| 00 00 00 00 00 00 00 00 | 90 00 00 00 82 44 65 73 |........|.....Des|
|00000700| 63 00 04 00 74 65 72 0d | 79 01 00 00 43 ff ff ff |c...ter.|y...C...|
|00000710| 40 58 b9 28 03 00 51 93 | 79 01 00 00 2c a9 02 00 |@X.(..Q.|y...,...|
|00000720| 82 44 65 76 00 00 04 00 | 74 65 72 0d ff ff ff ff |.Dev....|ter.....|
|00000730| 44 fd ff ff e6 72 09 fa | 00 00 00 00 ff ff ff ff |D....r..|........|
|00000740| 28 08 00 80 82 43 00 00 | 00 00 00 00 00 00 00 00 |(....C..|........|
|00000750| ff ff ff ff 44 fd ff ff | f1 72 09 fa 00 00 00 00 |....D...|.r......|
|00000760| ff ff ff ff 74 07 00 80 | 82 47 72 61 70 68 00 00 |....t...|.Graph..|
|00000770| 74 65 72 0d 77 1b 00 00 | 41 ff ff ff 81 6d 3e 8d |ter.w...|A....m>.|
|00000780| 03 00 77 6b 77 1b 00 00 | c9 aa 02 00 82 58 00 00 |..wkw...|.....X..|
|00000790| c3 00 04 00 74 65 72 0d | fb 08 00 00 41 ff ff ff |....ter.|....A...|
|000007a0| 64 db 25 8d 03 00 bc 8c | fb 08 00 00 64 c6 02 00 |d.%.....|....d...|
|000007b0| 00 6c 73 00 c3 00 04 00 | 74 65 72 0d 59 00 00 00 |.ls.....|ter.Y...|
|000007c0| 45 eb ff ff 1c 4a 56 99 | 03 0c 71 a5 54 00 00 00 |E....JV.|..q.T...|
|000007d0| b4 00 00 00 82 48 00 00 | 00 00 00 00 00 00 00 00 |.....H..|........|
|000007e0| ff ff ff ff 44 fd ff ff | 45 73 09 fa 00 00 00 00 |....D...|Es......|
|000007f0| ff ff ff ff 04 08 00 80 | 82 47 72 61 70 68 00 00 |........|.Graph..|
|00000800| 74 65 72 0d e0 06 00 00 | 41 ff ff ff 3b 7b 3b 8d |ter.....|A...;{;.|
|00000810| 03 00 b9 0a e0 06 00 00 | 83 cf 02 00 82 58 00 00 |........|.....X..|
|00000820| c3 00 04 00 74 65 72 0d | 73 02 00 00 41 ff ff ff |....ter.|s...A...|
|00000830| 01 ec 25 8d 03 00 2a 7b | 73 02 00 00 87 d6 02 00 |..%...*{|s.......|
|00000840| 00 6c 73 00 c3 00 04 00 | 74 65 72 0d 59 00 00 00 |.ls.....|ter.Y...|
|00000850| 45 eb ff ff 1c 4a 56 99 | 03 0c 71 a5 54 00 00 00 |E....JV.|..q.T...|
|00000860| b4 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000870| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000880| 00 00 00 00 90 00 00 00 | 82 47 65 74 6f 70 74 00 |........|.Getopt.|
|00000890| 74 65 72 0d ff ff ff ff | 44 dc fd ff 67 a6 d3 fe |ter.....|D...g...|
|000008a0| 03 00 00 00 ff ff ff ff | b4 09 00 80 82 47 65 74 |........|.....Get|
|000008b0| 6f 70 74 00 d4 ff ff ff | ff ff ff ff 44 ff ff ff |opt.....|....D...|
|000008c0| 25 a3 d3 fe 03 00 00 00 | ff ff ff ff 90 09 00 80 |%.......|........|
|000008d0| 82 43 00 ff 18 00 00 00 | d4 ff ff ff ff ff ff ff |.C......|........|
|000008e0| 44 fd ff ff 8d 73 09 fa | 00 00 00 00 ff ff ff ff |D....s..|........|
|000008f0| 00 09 00 80 82 47 65 74 | 6f 70 74 00 00 00 00 00 |.....Get|opt.....|
|00000900| ba 41 00 00 43 ff ff ff | 49 e5 8f 68 03 00 38 1e |.A..C...|I..h..8.|
|00000910| ba 41 00 00 1e d9 02 00 | 82 47 65 74 6f 70 74 31 |.A......|.Getopt1|
|00000920| 00 00 00 00 6b 0c 00 00 | 43 ff ff ff ee 30 8c 68 |....k...|C....0.h|
|00000930| 03 00 b9 c8 6b 0c 00 00 | fc 1a 03 00 00 00 00 00 |....k...|........|
|00000940| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000950| 00 00 00 00 00 00 00 00 | 00 00 00 00 44 70 02 00 |........|....Dp..|
|00000960| 82 48 00 ff 18 00 00 00 | d4 ff ff ff ff ff ff ff |.H......|........|
|00000970| 44 fd ff ff 58 75 09 fa | 00 00 00 00 ff ff ff ff |D...Xu..|........|
|00000980| 6c 09 00 80 82 47 65 74 | 6f 70 74 00 00 00 00 00 |l....Get|opt.....|
|00000990| 6a 0d 00 00 43 ff ff ff | 28 04 89 68 03 00 14 c9 |j...C...|(..h....|
|000009a0| 6a 0d 00 00 8b 27 03 00 | 00 00 00 00 00 00 00 00 |j....'..|........|
|000009b0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|000009c0| 00 00 00 00 00 00 00 00 | 44 70 02 00 00 ff ff ff |........|Dp......|
|000009d0| 18 00 00 00 d4 ff ff ff | 38 00 0e 07 00 0d 00 00 |........|8.......|
|000009e0| 00 00 00 00 10 00 00 00 | 18 00 00 00 08 6d 7a be |........|.....mz.|
|000009f0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000a00| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000a10| 44 70 02 00 82 47 4d 61 | 6b 65 66 69 6c 65 00 0d |Dp...GMa|kefile..|
|00000a20| c4 06 00 00 43 ff ff ff | 62 d4 33 73 03 00 9c d5 |....C...|b.3s....|
|00000a30| c4 06 00 00 19 35 03 00 | 82 48 00 00 c3 00 04 00 |.....5..|.H......|
|00000a40| 74 65 72 0d ff ff ff ff | 44 fd ff ff 9e 75 09 fa |ter.....|D....u..|
|00000a50| 00 00 00 00 ff ff ff ff | 18 0c 00 80 82 42 61 67 |........|.....Bag|
|00000a60| 00 00 00 00 00 00 00 00 | e4 04 00 00 41 ff ff ff |........|....A...|
|00000a70| a4 ff ec 93 03 00 f3 d1 | e4 04 00 00 01 3c 03 00 |........|.....<..|
|00000a80| 82 42 69 74 73 65 74 00 | 00 00 00 00 c1 03 00 00 |.Bitset.|........|
|00000a90| 41 ff ff ff d2 ef 31 8d | 03 00 c4 16 c1 03 00 00 |A.....1.|........|
|00000aa0| 09 41 03 00 82 43 68 75 | 6e 6b 46 69 6c 65 00 00 |.A...Chu|nkFile..|
|00000ab0| 1f 07 00 00 43 ff ff ff | fd df 28 73 03 00 61 39 |....C...|..(s..a9|
|00000ac0| 1f 07 00 00 ee 44 03 00 | 82 44 65 71 75 65 00 00 |.....D..|.Deque..|
|00000ad0| 00 00 00 00 04 04 00 00 | 41 ff ff ff 40 21 de 93 |........|A...@!..|
|00000ae0| 03 00 bb 4f 04 04 00 00 | 31 4c 03 00 82 46 63 72 |...O....|1L...Fcr|
|00000af0| 79 70 74 00 00 00 00 00 | 7c 00 00 00 43 ff ff ff |ypt.....||...C...|
|00000b00| b6 d8 31 73 03 00 63 30 | 7c 00 00 00 59 50 03 00 |..1s..c0||...YP..|
|00000b10| 82 46 69 6c 74 65 72 00 | 00 00 00 00 b7 03 00 00 |.Filter.|........|
|00000b20| 42 ff ff ff c8 cf 40 82 | 03 00 4d 15 b7 03 00 00 |B.....@.|..M.....|
|00000b30| f9 50 03 00 82 4d 61 70 | 00 00 00 00 00 00 00 00 |.P...Map|........|
|00000b40| 76 05 00 00 41 ff ff ff | 74 2d df 93 03 00 22 ae |v...A...|t-....".|
|00000b50| 76 05 00 00 d4 54 03 00 | 82 51 75 65 75 65 00 00 |v....T..|.Queue..|
|00000b60| 00 00 00 00 9d 03 00 00 | 41 ff ff ff 40 ef dd 93 |........|A...@...|
|00000b70| 03 00 46 48 9d 03 00 00 | 6e 5a 03 00 82 52 69 6e |..FH....|nZ...Rin|
|00000b80| 67 00 00 00 00 00 00 00 | 4e 04 00 00 41 ff ff ff |g.......|N...A...|
|00000b90| bf 67 de 93 03 00 4e da | 4e 04 00 00 2f 5e 03 00 |.g....N.|N.../^..|
|00000ba0| 82 53 65 74 00 00 00 00 | 00 00 00 00 81 04 00 00 |.Set....|........|
|00000bb0| 41 ff ff ff c7 6b e8 93 | 03 00 32 9c 81 04 00 00 |A....k..|..2.....|
|00000bc0| a1 62 03 00 82 53 74 61 | 63 6b 00 00 00 00 00 00 |.b...Sta|ck......|
|00000bd0| 78 03 00 00 41 ff ff ff | d7 bf dd 93 03 00 6b 45 |x...A...|......kE|
|00000be0| 78 03 00 00 46 67 03 00 | 82 53 77 69 00 00 00 00 |x...Fg..|.Swi....|
|00000bf0| 00 00 00 00 fb 0b 00 00 | 43 ff ff ff 80 ca 28 73 |........|C.....(s|
|00000c00| 03 00 78 95 fb 0b 00 00 | e2 6a 03 00 82 55 6e 65 |..x.....|.j...Une|
|00000c10| 78 65 63 00 00 00 00 00 | 30 01 00 00 43 ff ff ff |xec.....|0...C...|
|00000c20| 75 35 b1 5a 03 00 db 79 | 30 01 00 00 01 77 03 00 |u5.Z...y|0....w..|
|00000c30| 82 55 74 69 6c 73 00 00 | 00 00 00 00 f1 1c 00 00 |.Utils..|........|
|00000c40| 43 ff ff ff c2 ca 28 73 | 03 00 b3 e7 f1 1c 00 00 |C.....(s|........|
|00000c50| 55 78 03 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |Ux......|........|
|00000c60| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000c70| 00 00 00 00 90 00 00 00 | 82 4d 61 6b 65 66 69 6c |........|.Makefil|
|00000c80| 65 00 72 0d 51 22 00 00 | 43 e1 ff ff 6e 45 34 73 |e.r.Q"..|C...nE4s|
|00000c90| 03 00 12 50 51 22 00 00 | 6a 95 03 00 82 4f 00 00 |...PQ"..|j....O..|
|00000ca0| c3 00 04 00 74 65 72 0d | ff ff ff ff 44 fd ff ff |....ter.|....D...|
|00000cb0| a5 78 09 fa 00 00 00 00 | ff ff ff ff 84 0c 00 80 |.x......|........|
|00000cc0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000cd0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000ce0| 90 00 00 00 82 50 72 6f | 66 69 6c 65 00 65 72 0d |.....Pro|file.er.|
|00000cf0| ff ff ff ff 44 dc fd ff | 33 b5 d3 fe 03 00 00 00 |....D...|3.......|
|00000d00| ff ff ff ff 54 0f 00 80 | 82 50 72 6f 66 69 6c 65 |....T...|.Profile|
|00000d10| 00 00 00 00 ff ff ff ff | 44 ff ff ff 72 b2 d3 fe |........|D...r...|
|00000d20| 03 00 00 00 ff ff ff ff | 30 0f 00 80 82 43 00 70 |........|0....C.p|
|00000d30| 79 72 69 67 68 74 00 00 | ff ff ff ff 44 fd ff ff |yright..|....D...|
|00000d40| b8 78 09 fa 00 00 00 00 | ff ff ff ff 5c 0d 00 80 |.x......|....\...|
|00000d50| 82 50 72 6f 66 69 6c 65 | 43 00 00 00 b0 04 00 00 |.Profile|C.......|
|00000d60| 43 ff ff ff 0a 76 1c 2b | 03 00 57 c1 b0 04 00 00 |C....v.+|..W.....|
|00000d70| df b7 03 00 82 50 72 6f | 66 69 6c 65 54 00 00 00 |.....Pro|fileT...|
|00000d80| d7 16 00 00 43 ff ff ff | 43 68 1c 2b 03 00 64 7e |....C...|Ch.+..d~|
|00000d90| d7 16 00 00 b3 bc 03 00 | 00 44 6f 63 00 69 6c 65 |........|.Doc.ile|
|00000da0| 43 00 00 00 77 18 00 00 | 43 ff ff ff ee 67 1c 2b |C...w...|C....g.+|
|00000db0| 03 0c 00 00 34 0d 00 00 | ad 1b 03 00 82 43 6f 70 |....4...|.....Cop|
|00000dc0| 79 72 69 67 68 74 00 00 | 9a 03 00 00 42 ff ff ff |yright..|....B...|
|00000dd0| 60 4b 6b 71 03 00 59 0b | 9a 03 00 00 ae d3 03 00 |`Kkq..Y.|........|
|00000de0| 82 44 6f 63 00 69 6c 65 | 43 00 00 00 77 18 00 00 |.Doc.ile|C...w...|
|00000df0| 43 ff ff ff ee 67 1c 2b | 03 00 e8 4d 77 18 00 00 |C....g.+|...Mw...|
|00000e00| 6c d7 03 00 82 48 00 6b | 65 66 69 6c 65 00 00 00 |l....H.k|efile...|
|00000e10| ff ff ff ff 44 fd ff ff | 4e 79 09 fa 00 00 00 00 |....D...|Ny......|
|00000e20| ff ff ff ff 34 0e 00 80 | 82 50 72 6f 66 69 6c 65 |....4...|.Profile|
|00000e30| 00 00 00 00 6d 02 00 00 | 43 ff ff ff 73 73 19 2b |....m...|C...ss.+|
|00000e40| 03 00 9d 77 6d 02 00 00 | 07 f0 03 00 82 50 72 6f |...wm...|.....Pro|
|00000e50| 66 69 6c 65 41 73 6d 00 | 26 02 00 00 43 ff ff ff |fileAsm.|&...C...|
|00000e60| da 25 18 2b 03 00 a0 8e | 26 02 00 00 98 f2 03 00 |.%.+....|&.......|
|00000e70| 00 50 72 6f 66 69 6c 65 | 43 00 00 00 b0 04 00 00 |.Profile|C.......|
|00000e80| 43 ff ff ff 0a 76 1c 2b | 03 0c 00 00 00 03 00 00 |C....v.+|........|
|00000e90| 8c 29 03 00 82 4d 61 6b | 65 66 69 6c 65 00 00 00 |.)...Mak|efile...|
|00000ea0| 11 01 00 00 43 ff ff ff | ec 21 1a 2b 03 00 96 64 |....C...|.!.+...d|
|00000eb0| 11 01 00 00 e2 f4 03 00 | 82 4f 00 6f 66 69 6c 65 |........|.O.ofile|
|00000ec0| 43 00 00 00 ff ff ff ff | 44 fd ff ff a3 79 09 fa |C.......|D....y..|
|00000ed0| 00 00 00 00 ff ff ff ff | a0 0e 00 80 00 00 00 00 |........|........|
|00000ee0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000ef0| 00 00 00 00 00 00 00 00 | 00 00 00 00 09 1c 03 00 |........|........|
|00000f00| 82 53 00 6f 66 69 6c 65 | 43 00 00 00 ff ff ff ff |.S.ofile|C.......|
|00000f10| 44 fd ff ff ac 79 09 fa | 00 00 00 00 ff ff ff ff |D....y..|........|
|00000f20| 0c 0f 00 80 82 50 72 6f | 66 69 6c 65 41 73 6d 00 |.....Pro|fileAsm.|
|00000f30| a9 23 00 00 43 ff ff ff | 23 12 19 2b 03 00 7b cc |.#..C...|#..+..{.|
|00000f40| a9 23 00 00 17 f6 03 00 | 00 00 00 00 00 00 00 00 |.#......|........|
|00000f50| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000f60| 00 00 00 00 00 00 00 00 | 09 1c 03 00 00 50 72 6f |........|.....Pro|
|00000f70| 66 69 6c 65 43 00 00 00 | b0 04 00 00 43 ff ff ff |fileC...|....C...|
|00000f80| 0a 76 1c 2b 03 0c 00 00 | 00 03 00 00 8c 29 03 00 |.v.+....|.....)..|
|00000f90| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000fa0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000fb0| 09 1c 03 00 82 52 65 61 | 64 6d 65 00 74 65 72 0d |.....Rea|dme.ter.|
|00000fc0| 04 0f 00 00 43 ff ff ff | 41 4b 2a 73 03 00 4a 63 |....C...|AK*s..Jc|
|00000fd0| 04 0f 00 00 e4 19 04 00 | 82 52 65 67 65 78 00 00 |........|.Regex..|
|00000fe0| 74 65 72 0d ff ff ff ff | 44 dc fd ff 70 c0 d3 fe |ter.....|D...p...|
|00000ff0| 03 00 00 00 ff ff ff ff | 04 11 00 80 82 52 65 67 |........|.....Reg|
|00001000| 65 78 00 00 00 00 00 00 | ff ff ff ff 44 ff ff ff |ex......|....D...|
|00001010| 95 bd d3 fe 03 00 00 00 | ff ff ff ff e0 10 00 80 |........|........|
|00001020| 82 43 00 61 6e 67 65 73 | 00 00 00 00 ff ff ff ff |.C.anges|........|
|00001030| 44 fd ff ff 18 7a 09 fa | 00 00 00 00 ff ff ff ff |D....z..|........|
|00001040| 2c 10 00 80 82 52 65 67 | 65 78 00 00 00 00 00 00 |,....Reg|ex......|
|00001050| 15 35 01 00 43 ff ff ff | d5 90 2c 73 03 00 ef 9e |.5..C...|..,s....|
|00001060| 15 35 01 00 0c 29 04 00 | 00 52 65 67 65 78 00 00 |.5...)..|.Regex..|
|00001070| 00 00 00 00 15 35 01 00 | 43 ff ff ff d5 90 2c 73 |.....5..|C.....,s|
|00001080| 03 0c 00 00 94 91 00 00 | 1d 69 03 00 82 43 68 61 |........|.i...Cha|
|00001090| 6e 67 65 73 00 00 00 00 | cf 1e 00 00 43 ff ff ff |nges....|....C...|
|000010a0| 65 ac 59 63 03 00 aa 17 | cf 1e 00 00 45 5e 05 00 |e.Yc....|....E^..|
|000010b0| 82 48 00 67 65 78 00 00 | 00 00 00 00 ff ff ff ff |.H.gex..|........|
|000010c0| 44 fd ff ff 3c 7f 09 fa | 00 00 00 00 ff ff ff ff |D...<...|........|
|000010d0| bc 10 00 80 82 52 65 67 | 65 78 00 00 00 00 00 00 |.....Reg|ex......|
|000010e0| fb 14 00 00 43 ff ff ff | 4a a5 50 20 03 00 5e 53 |....C...|J.P ..^S|
|000010f0| fb 14 00 00 38 7d 05 00 | 00 00 00 00 00 00 00 00 |....8}..|........|
|00001100| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00001110| 00 00 00 00 00 00 00 00 | 1d 5e 03 00 00 52 65 67 |........|.^...Reg|
|00001120| 65 78 00 00 00 00 00 00 | 15 35 01 00 43 ff ff ff |ex......|.5..C...|
|00001130| d5 90 2c 73 03 0c 00 00 | 94 91 00 00 1d 69 03 00 |..,s....|.....i..|
|00001140| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00001150| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00001160| 1d 5e 03 00 82 53 00 00 | c3 00 04 00 74 65 72 0d |.^...S..|....ter.|
|00001170| ff ff ff ff 44 fd ff ff | 6f 7f 09 fa 00 00 00 00 |....D...|o.......|
|00001180| ff ff ff ff dc 11 00 80 | 82 43 61 6c 6c 65 72 00 |........|.Caller.|
|00001190| 00 00 00 00 6b 0d 00 00 | 43 ff ff ff 31 33 a4 5a |....k...|C...13.Z|
|000011a0| 03 00 60 48 6b 0d 00 00 | 57 92 05 00 82 50 72 6f |..`Hk...|W....Pro|
|000011b0| 67 4c 69 6d 69 74 00 00 | 19 02 00 00 41 ff ff ff |gLimit..|....A...|
|000011c0| 85 bb 5f d8 03 00 03 23 | 19 02 00 00 e6 9f 05 00 |.._....#|........|
|000011d0| 82 53 77 69 00 00 00 00 | 00 00 00 00 be 0f 00 00 |.Swi....|........|
|000011e0| 43 ff ff ff 68 51 28 73 | 03 00 12 4d be 0f 00 00 |C...hQ(s|...M....|
|000011f0| 23 a2 05 00 82 56 61 72 | 73 00 00 00 00 00 00 00 |#....Var|s.......|
|00001200| 38 04 00 00 43 ff ff ff | f8 c2 f6 41 03 00 a7 a2 |8...C...|...A....|
|00001210| 38 04 00 00 05 b2 05 00 | 00 00 00 00 00 00 00 00 |8.......|........|
|00001220| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00001230| 00 00 00 00 00 00 00 00 | 90 00 00 00 82 53 79 73 |........|.....Sys|
|00001240| 00 00 04 00 74 65 72 0d | ff ff ff ff 44 fd ff ff |....ter.|....D...|
|00001250| f6 7f 09 fa 00 00 00 00 | ff ff ff ff d8 12 00 80 |........|........|
|00001260| 82 48 00 00 00 00 00 00 | 00 00 00 00 ff ff ff ff |.H......|........|
|00001270| 44 fd ff ff 00 80 09 fa | 00 00 00 00 ff ff ff ff |D.......|........|
|00001280| b4 12 00 80 82 44 69 72 | 00 00 04 00 74 65 72 0d |.....Dir|....ter.|
|00001290| cb 04 00 00 43 ff ff ff | 39 1a 29 73 03 00 de 3a |....C...|9.)s...:|
|000012a0| cb 04 00 00 61 b6 05 00 | 82 53 74 61 74 00 04 00 |....a...|.Stat...|
|000012b0| 74 65 72 0d 72 07 00 00 | 43 ff ff ff 61 1a 29 73 |ter.r...|C...a.)s|
|000012c0| 03 00 10 8f 72 07 00 00 | 50 bb 05 00 82 54 69 6d |....r...|P....Tim|
|000012d0| 65 00 04 00 74 65 72 0d | cf 03 00 00 43 ff ff ff |e...ter.|....C...|
|000012e0| 86 1a 29 73 03 00 af c3 | cf 03 00 00 e6 c2 05 00 |..)s....|........|
|000012f0| 00 6c 73 00 c3 00 04 00 | 74 65 72 0d 59 00 00 00 |.ls.....|ter.Y...|
|00001300| 45 eb ff ff 1c 4a 56 99 | 03 0c 71 a5 54 00 00 00 |E....JV.|..q.T...|
|00001310| b4 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00001320| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00001330| 00 00 00 00 90 00 00 00 | 82 55 74 69 6c 73 00 00 |........|.Utils..|
|00001340| 74 65 72 0d 90 9d 01 00 | 43 fd ff ff 65 16 34 73 |ter.....|C...e.4s|
|00001350| 03 00 91 76 90 9d 01 00 | d9 c6 05 00 00 6c 73 00 |...v....|.....ls.|
|00001360| c3 00 04 00 74 65 72 0d | 59 00 00 00 45 eb ff ff |....ter.|Y...E...|
|00001370| 1c 4a 56 99 03 0c 71 a5 | 54 00 00 00 b4 00 00 00 |.JV...q.|T.......|
|00001380| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00001390| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|000013a0| 90 00 00 00 46 69 6c 65 | 44 61 74 61 82 41 6c 6c |....File|Data.All|
|000013b0| 6f 63 61 00 00 00 00 00 | b7 13 00 00 43 ff ff ff |oca.....|....C...|
|000013c0| 43 ba a6 5a 03 00 2f d7 | 2f 2a 0a 09 61 6c 6c 6f |C..Z../.|/*..allo|
|000013d0| 63 61 20 2d 2d 20 28 6d | 6f 73 74 6c 79 29 20 70 |ca -- (m|ostly) p|
|000013e0| 6f 72 74 61 62 6c 65 20 | 70 75 62 6c 69 63 2d 64 |ortable |public-d|
|000013f0| 6f 6d 61 69 6e 20 69 6d | 70 6c 65 6d 65 6e 74 61 |omain im|plementa|
|00001400| 74 69 6f 6e 20 2d 2d 20 | 44 20 41 20 47 77 79 6e |tion -- |D A Gwyn|
|00001410| 0a 0a 09 41 72 63 20 70 | 6f 72 74 3a 09 39 30 2f |...Arc p|ort:.90/|
|00001420| 30 31 2f 32 38 09 70 66 | 6d 0a 09 20 20 20 43 6f |01/28.pf|m.. Co|
|00001430| 6e 76 65 72 74 20 74 6f | 20 77 6f 72 6b 20 6f 6e |nvert to| work on|
|00001440| 20 41 72 63 68 69 6d 65 | 64 65 73 2e 20 4e 6f 74 | Archime|des. Not|
|00001450| 65 20 74 68 61 74 20 74 | 68 65 20 61 73 73 75 6d |e that t|he assum|
|00001460| 70 74 69 6f 6e 0a 09 20 | 20 20 6f 66 20 61 20 73 |ption.. | of a s|
|00001470| 69 6d 70 6c 65 20 70 72 | 6f 63 65 64 75 72 65 20 |imple pr|ocedure |
|00001480| 73 74 61 63 6b 20 69 73 | 20 4e 4f 54 20 67 75 61 |stack is| NOT gua|
|00001490| 72 61 6e 74 65 65 64 20 | 75 6e 64 65 72 20 74 68 |ranteed |under th|
|000014a0| 65 0a 09 20 20 20 41 72 | 6d 20 70 72 6f 63 65 64 |e.. Ar|m proced|
|000014b0| 75 72 65 20 63 61 6c 6c | 20 73 74 61 6e 64 61 72 |ure call| standar|
|000014c0| 64 2e 20 43 20 56 65 72 | 73 69 6f 6e 20 33 2e 30 |d. C Ver|sion 3.0|
|000014d0| 30 20 6d 61 79 20 77 65 | 6c 6c 0a 09 20 20 20 76 |0 may we|ll.. v|
|000014e0| 69 6f 6c 61 74 65 20 69 | 74 20 28 62 75 74 20 74 |iolate i|t (but t|
|000014f0| 68 65 20 6f 6e 6c 79 20 | 72 65 73 75 6c 74 20 73 |he only |result s|
|00001500| 68 6f 75 6c 64 20 62 65 | 20 61 20 64 65 6c 61 79 |hould be| a delay|
|00001510| 20 69 6e 0a 09 20 20 20 | 72 65 63 6c 61 69 6d 69 | in.. |reclaimi|
|00001520| 6e 67 20 73 6f 6d 65 20 | 73 74 6f 72 61 67 65 2e |ng some |storage.|
|00001530| 2e 2e 20 49 20 68 6f 70 | 65 29 2e 0a 0a 09 2a 2a |.. I hop|e)....**|
|00001540| 20 46 75 72 74 68 65 72 | 20 6e 6f 74 65 3a 20 49 | Further| note: I|
|00001550| 6e 20 74 68 65 20 66 61 | 63 65 20 6f 66 20 73 74 |n the fa|ce of st|
|00001560| 61 63 6b 20 65 78 74 65 | 6e 73 69 6f 6e 2c 20 77 |ack exte|nsion, w|
|00001570| 68 65 72 65 20 74 68 65 | 0a 09 2a 2a 20 6e 65 77 |here the|..** new|
|00001580| 20 73 74 61 63 6b 20 63 | 68 75 6e 6b 20 6d 61 79 | stack c|hunk may|
|00001590| 20 62 65 20 61 74 20 61 | 20 68 69 67 68 65 72 20 | be at a| higher |
|000015a0| 6f 72 20 6c 6f 77 65 72 | 20 61 64 64 72 65 73 73 |or lower| address|
|000015b0| 20 74 68 61 6e 0a 09 2a | 2a 20 74 68 65 20 6f 6c | than..*|* the ol|
|000015c0| 64 20 63 68 75 6e 6b 20 | 28 6e 6f 20 67 75 61 72 |d chunk |(no guar|
|000015d0| 61 6e 74 65 65 73 21 29 | 2c 20 74 68 69 73 20 6d |antees!)|, this m|
|000015e0| 61 79 20 66 61 69 6c 20 | 68 6f 72 72 69 62 6c 79 |ay fail |horribly|
|000015f0| 2e 0a 09 2a 2a 20 4e 6f | 74 68 69 6e 67 20 49 20 |...** No|thing I |
|00001600| 63 61 6e 20 64 6f 20 61 | 62 6f 75 74 20 74 68 69 |can do a|bout thi|
|00001610| 73 20 2d 20 73 6f 72 72 | 79 21 20 49 20 77 6f 75 |s - sorr|y! I wou|
|00001620| 6c 64 20 72 65 63 6f 6d | 6d 65 6e 64 20 6e 6f 74 |ld recom|mend not|
|00001630| 0a 09 2a 2a 20 75 73 69 | 6e 67 20 61 6c 6c 6f 63 |..** usi|ng alloc|
|00001640| 61 28 29 20 69 6e 20 70 | 72 6f 64 75 63 74 69 6f |a() in p|roductio|
|00001650| 6e 20 71 75 61 6c 69 74 | 79 20 63 6f 64 65 2e 0a |n qualit|y code..|
|00001660| 09 2a 2a 20 4f 6e 20 72 | 65 66 6c 65 63 74 69 6f |.** On r|eflectio|
|00001670| 6e 2c 20 79 6f 75 20 63 | 6f 75 6c 64 20 2d 20 49 |n, you c|ould - I|
|00001680| 20 73 75 70 70 6f 73 65 | 20 2d 20 74 72 61 63 65 | suppose| - trace|
|00001690| 20 62 61 63 6b 20 74 68 | 72 6f 75 67 68 0a 09 2a | back th|rough..*|
|000016a0| 2a 20 74 68 65 20 73 74 | 61 63 6b 20 63 68 75 6e |* the st|ack chun|
|000016b0| 6b 20 63 68 61 69 6e 2e | 20 42 75 74 20 69 74 27 |k chain.| But it'|
|000016c0| 73 20 74 6f 6f 20 6d 75 | 63 68 20 77 6f 72 6b 20 |s too mu|ch work |
|000016d0| 66 6f 72 20 6d 65 20 74 | 6f 0a 09 2a 2a 20 62 6f |for me t|o..** bo|
|000016e0| 74 68 65 72 20 77 69 74 | 68 20 66 6f 72 20 6e 6f |ther wit|h for no|
|000016f0| 77 2e 0a 0a 09 6c 61 73 | 74 20 65 64 69 74 3a 09 |w....las|t edit:.|
|00001700| 38 36 2f 30 35 2f 33 30 | 09 72 6d 73 0a 09 20 20 |86/05/30|.rms.. |
|00001710| 20 69 6e 63 6c 75 64 65 | 20 63 6f 6e 66 69 67 2e | include| config.|
|00001720| 68 2c 20 73 69 6e 63 65 | 20 6f 6e 20 56 4d 53 20 |h, since| on VMS |
|00001730| 69 74 20 72 65 6e 61 6d | 65 73 20 73 6f 6d 65 20 |it renam|es some |
|00001740| 73 79 6d 62 6f 6c 73 2e | 0a 09 20 20 20 55 73 65 |symbols.|.. Use|
|00001750| 20 78 6d 61 6c 6c 6f 63 | 20 69 6e 73 74 65 61 64 | xmalloc| instead|
|00001760| 20 6f 66 20 6d 61 6c 6c | 6f 63 2e 0a 0a 09 54 68 | of mall|oc....Th|
|00001770| 69 73 20 69 6d 70 6c 65 | 6d 65 6e 74 61 74 69 6f |is imple|mentatio|
|00001780| 6e 20 6f 66 20 74 68 65 | 20 50 57 42 20 6c 69 62 |n of the| PWB lib|
|00001790| 72 61 72 79 20 61 6c 6c | 6f 63 61 28 29 20 66 75 |rary all|oca() fu|
|000017a0| 6e 63 74 69 6f 6e 2c 0a | 09 77 68 69 63 68 20 69 |nction,.|.which i|
|000017b0| 73 20 75 73 65 64 20 74 | 6f 20 61 6c 6c 6f 63 61 |s used t|o alloca|
|000017c0| 74 65 20 73 70 61 63 65 | 20 6f 66 66 20 74 68 65 |te space| off the|
|000017d0| 20 72 75 6e 2d 74 69 6d | 65 20 73 74 61 63 6b 20 | run-tim|e stack |
|000017e0| 73 6f 0a 09 74 68 61 74 | 20 69 74 20 69 73 20 61 |so..that| it is a|
|000017f0| 75 74 6f 6d 61 74 69 63 | 61 6c 6c 79 20 72 65 63 |utomatic|ally rec|
|00001800| 6c 61 69 6d 65 64 20 75 | 70 6f 6e 20 70 72 6f 63 |laimed u|pon proc|
|00001810| 65 64 75 72 65 20 65 78 | 69 74 2c 20 0a 09 77 61 |edure ex|it, ..wa|
|00001820| 73 20 69 6e 73 70 69 72 | 65 64 20 62 79 20 64 69 |s inspir|ed by di|
|00001830| 73 63 75 73 73 69 6f 6e | 73 20 77 69 74 68 20 4a |scussion|s with J|
|00001840| 2e 20 51 2e 20 4a 6f 68 | 6e 73 6f 6e 20 6f 66 20 |. Q. Joh|nson of |
|00001850| 43 6f 72 6e 65 6c 6c 2e | 0a 0a 09 49 74 20 73 68 |Cornell.|...It sh|
|00001860| 6f 75 6c 64 20 77 6f 72 | 6b 20 75 6e 64 65 72 20 |ould wor|k under |
|00001870| 61 6e 79 20 43 20 69 6d | 70 6c 65 6d 65 6e 74 61 |any C im|plementa|
|00001880| 74 69 6f 6e 20 74 68 61 | 74 20 75 73 65 73 20 61 |tion tha|t uses a|
|00001890| 6e 0a 09 61 63 74 75 61 | 6c 20 70 72 6f 63 65 64 |n..actua|l proced|
|000018a0| 75 72 65 20 73 74 61 63 | 6b 20 28 61 73 20 6f 70 |ure stac|k (as op|
|000018b0| 70 6f 73 65 64 20 74 6f | 20 61 20 6c 69 6e 6b 65 |posed to| a linke|
|000018c0| 64 20 6c 69 73 74 20 6f | 66 0a 09 66 72 61 6d 65 |d list o|f..frame|
|000018d0| 73 29 2e 20 20 54 68 65 | 72 65 20 61 72 65 20 73 |s). The|re are s|
|000018e0| 6f 6d 65 20 70 72 65 70 | 72 6f 63 65 73 73 6f 72 |ome prep|rocessor|
|000018f0| 20 63 6f 6e 73 74 61 6e | 74 73 20 74 68 61 74 20 | constan|ts that |
|00001900| 63 61 6e 0a 09 62 65 20 | 64 65 66 69 6e 65 64 20 |can..be |defined |
|00001910| 77 68 65 6e 20 63 6f 6d | 70 69 6c 69 6e 67 20 66 |when com|piling f|
|00001920| 6f 72 20 79 6f 75 72 20 | 73 70 65 63 69 66 69 63 |or your |specific|
|00001930| 20 73 79 73 74 65 6d 2c | 20 66 6f 72 0a 09 69 6d | system,| for..im|
|00001940| 70 72 6f 76 65 64 20 65 | 66 66 69 63 69 65 6e 63 |proved e|fficienc|
|00001950| 79 3b 20 68 6f 77 65 76 | 65 72 2c 20 74 68 65 20 |y; howev|er, the |
|00001960| 64 65 66 61 75 6c 74 73 | 20 73 68 6f 75 6c 64 20 |defaults| should |
|00001970| 62 65 20 6f 6b 61 79 2e | 0a 0a 09 54 68 65 20 67 |be okay.|...The g|
|00001980| 65 6e 65 72 61 6c 20 63 | 6f 6e 63 65 70 74 20 6f |eneral c|oncept o|
|00001990| 66 20 74 68 69 73 20 69 | 6d 70 6c 65 6d 65 6e 74 |f this i|mplement|
|000019a0| 61 74 69 6f 6e 20 69 73 | 20 74 6f 20 6b 65 65 70 |ation is| to keep|
|000019b0| 0a 09 74 72 61 63 6b 20 | 6f 66 20 61 6c 6c 20 61 |..track |of all a|
|000019c0| 6c 6c 6f 63 61 28 29 2d | 61 6c 6c 6f 63 61 74 65 |lloca()-|allocate|
|000019d0| 64 20 62 6c 6f 63 6b 73 | 2c 20 61 6e 64 20 72 65 |d blocks|, and re|
|000019e0| 63 6c 61 69 6d 20 61 6e | 79 0a 09 74 68 61 74 20 |claim an|y..that |
|000019f0| 61 72 65 20 66 6f 75 6e | 64 20 74 6f 20 62 65 20 |are foun|d to be |
|00001a00| 64 65 65 70 65 72 20 69 | 6e 20 74 68 65 20 73 74 |deeper i|n the st|
|00001a10| 61 63 6b 20 74 68 61 6e | 20 74 68 65 20 63 75 72 |ack than| the cur|
|00001a20| 72 65 6e 74 0a 09 69 6e | 76 6f 63 61 74 69 6f 6e |rent..in|vocation|
|00001a30| 2e 20 20 54 68 69 73 20 | 68 65 75 72 69 73 74 69 |. This |heuristi|
|00001a40| 63 20 64 6f 65 73 20 6e | 6f 74 20 72 65 63 6c 61 |c does n|ot recla|
|00001a50| 69 6d 20 73 74 6f 72 61 | 67 65 20 61 73 0a 09 73 |im stora|ge as..s|
|00001a60| 6f 6f 6e 20 61 73 20 69 | 74 20 62 65 63 6f 6d 65 |oon as i|t become|
|00001a70| 73 20 69 6e 76 61 6c 69 | 64 2c 20 62 75 74 20 69 |s invali|d, but i|
|00001a80| 74 20 77 69 6c 6c 20 64 | 6f 20 73 6f 20 65 76 65 |t will d|o so eve|
|00001a90| 6e 74 75 61 6c 6c 79 2e | 0a 0a 09 41 73 20 61 20 |ntually.|...As a |
|00001aa0| 73 70 65 63 69 61 6c 20 | 63 61 73 65 2c 20 61 6c |special |case, al|
|00001ab0| 6c 6f 63 61 28 30 29 20 | 72 65 63 6c 61 69 6d 73 |loca(0) |reclaims|
|00001ac0| 20 73 74 6f 72 61 67 65 | 20 77 69 74 68 6f 75 74 | storage| without|
|00001ad0| 0a 09 61 6c 6c 6f 63 61 | 74 69 6e 67 20 61 6e 79 |..alloca|ting any|
|00001ae0| 2e 20 20 49 74 20 69 73 | 20 61 20 67 6f 6f 64 20 |. It is| a good |
|00001af0| 69 64 65 61 20 74 6f 20 | 75 73 65 20 61 6c 6c 6f |idea to |use allo|
|00001b00| 63 61 28 30 29 20 69 6e | 0a 09 79 6f 75 72 20 6d |ca(0) in|..your m|
|00001b10| 61 69 6e 20 63 6f 6e 74 | 72 6f 6c 20 6c 6f 6f 70 |ain cont|rol loop|
|00001b20| 2c 20 65 74 63 2e 20 74 | 6f 20 66 6f 72 63 65 20 |, etc. t|o force |
|00001b30| 67 61 72 62 61 67 65 20 | 63 6f 6c 6c 65 63 74 69 |garbage |collecti|
|00001b40| 6f 6e 2e 0a 2a 2f 0a 0a | 23 69 6e 63 6c 75 64 65 |on..*/..|#include|
|00001b50| 20 3c 73 74 64 6c 69 62 | 2e 68 3e 0a 23 69 6e 63 | <stdlib|.h>.#inc|
|00001b60| 6c 75 64 65 20 3c 73 74 | 64 64 65 66 2e 68 3e 0a |lude <st|ddef.h>.|
|00001b70| 23 69 6e 63 6c 75 64 65 | 20 22 75 74 69 6c 73 2e |#include| "utils.|
|00001b80| 68 22 0a 0a 2f 2a 0a 09 | 44 65 66 69 6e 65 20 53 |h"../*..|Define S|
|00001b90| 54 41 43 4b 5f 44 49 52 | 45 43 54 49 4f 4e 20 69 |TACK_DIR|ECTION i|
|00001ba0| 66 20 79 6f 75 20 6b 6e | 6f 77 20 74 68 65 20 64 |f you kn|ow the d|
|00001bb0| 69 72 65 63 74 69 6f 6e | 20 6f 66 20 73 74 61 63 |irection| of stac|
|00001bc0| 6b 0a 09 67 72 6f 77 74 | 68 20 66 6f 72 20 79 6f |k..growt|h for yo|
|00001bd0| 75 72 20 73 79 73 74 65 | 6d 3b 20 6f 74 68 65 72 |ur syste|m; other|
|00001be0| 77 69 73 65 20 69 74 20 | 77 69 6c 6c 20 62 65 20 |wise it |will be |
|00001bf0| 61 75 74 6f 6d 61 74 69 | 63 61 6c 6c 79 0a 09 64 |automati|cally..d|
|00001c00| 65 64 75 63 65 64 20 61 | 74 20 72 75 6e 2d 74 69 |educed a|t run-ti|
|00001c10| 6d 65 2e 0a 0a 09 53 54 | 41 43 4b 5f 44 49 52 45 |me....ST|ACK_DIRE|
|00001c20| 43 54 49 4f 4e 20 3e 20 | 30 20 3d 3e 20 67 72 6f |CTION > |0 => gro|
|00001c30| 77 73 20 74 6f 77 61 72 | 64 20 68 69 67 68 65 72 |ws towar|d higher|
|00001c40| 20 61 64 64 72 65 73 73 | 65 73 0a 09 53 54 41 43 | address|es..STAC|
|00001c50| 4b 5f 44 49 52 45 43 54 | 49 4f 4e 20 3c 20 30 20 |K_DIRECT|ION < 0 |
|00001c60| 3d 3e 20 67 72 6f 77 73 | 20 74 6f 77 61 72 64 20 |=> grows| toward |
|00001c70| 6c 6f 77 65 72 20 61 64 | 64 72 65 73 73 65 73 0a |lower ad|dresses.|
|00001c80| 09 53 54 41 43 4b 5f 44 | 49 52 45 43 54 49 4f 4e |.STACK_D|IRECTION|
|00001c90| 20 3d 20 30 20 3d 3e 20 | 64 69 72 65 63 74 69 6f | = 0 => |directio|
|00001ca0| 6e 20 6f 66 20 67 72 6f | 77 74 68 20 75 6e 6b 6e |n of gro|wth unkn|
|00001cb0| 6f 77 6e 0a 2a 2f 0a 0a | 23 69 66 6e 64 65 66 20 |own.*/..|#ifndef |
|00001cc0| 53 54 41 43 4b 5f 44 49 | 52 45 43 54 49 4f 4e 0a |STACK_DI|RECTION.|
|00001cd0| 23 64 65 66 69 6e 65 09 | 53 54 41 43 4b 5f 44 49 |#define.|STACK_DI|
|00001ce0| 52 45 43 54 49 4f 4e 09 | 30 09 09 09 2f 2a 20 64 |RECTION.|0.../* d|
|00001cf0| 69 72 65 63 74 69 6f 6e | 20 75 6e 6b 6e 6f 77 6e |irection| unknown|
|00001d00| 20 2a 2f 0a 23 65 6e 64 | 69 66 0a 0a 23 69 66 20 | */.#end|if..#if |
|00001d10| 53 54 41 43 4b 5f 44 49 | 52 45 43 54 49 4f 4e 20 |STACK_DI|RECTION |
|00001d20| 21 3d 20 30 0a 0a 2f 2a | 20 6b 6e 6f 77 6e 20 61 |!= 0../*| known a|
|00001d30| 74 20 63 6f 6d 70 69 6c | 65 2d 74 69 6d 65 20 2a |t compil|e-time *|
|00001d40| 2f 0a 23 64 65 66 69 6e | 65 09 53 54 41 43 4b 5f |/.#defin|e.STACK_|
|00001d50| 44 49 52 09 53 54 41 43 | 4b 5f 44 49 52 45 43 54 |DIR.STAC|K_DIRECT|
|00001d60| 49 4f 4e 0a 0a 23 65 6c | 73 65 0a 0a 2f 2a 20 53 |ION..#el|se../* S|
|00001d70| 54 41 43 4b 5f 44 49 52 | 45 43 54 49 4f 4e 20 3d |TACK_DIR|ECTION =|
|00001d80| 3d 20 30 3b 20 6e 65 65 | 64 20 72 75 6e 2d 74 69 |= 0; nee|d run-ti|
|00001d90| 6d 65 20 63 6f 64 65 20 | 2a 2f 0a 73 74 61 74 69 |me code |*/.stati|
|00001da0| 63 20 69 6e 74 09 09 73 | 74 61 63 6b 5f 64 69 72 |c int..s|tack_dir|
|00001db0| 3b 09 09 2f 2a 20 31 20 | 6f 72 20 2d 31 20 6f 6e |;../* 1 |or -1 on|
|00001dc0| 63 65 20 6b 6e 6f 77 6e | 20 2a 2f 0a 23 64 65 66 |ce known| */.#def|
|00001dd0| 69 6e 65 09 53 54 41 43 | 4b 5f 44 49 52 09 73 74 |ine.STAC|K_DIR.st|
|00001de0| 61 63 6b 5f 64 69 72 0a | 0a 73 74 61 74 69 63 20 |ack_dir.|.static |
|00001df0| 76 6f 69 64 20 66 69 6e | 64 5f 73 74 61 63 6b 5f |void fin|d_stack_|
|00001e00| 64 69 72 65 63 74 69 6f | 6e 20 28 76 6f 69 64 29 |directio|n (void)|
|00001e10| 0a 7b 0a 09 73 74 61 74 | 69 63 20 63 68 61 72 20 |.{..stat|ic char |
|00001e20| 2a 61 64 64 72 20 3d 20 | 4e 55 4c 4c 3b 09 2f 2a |*addr = |NULL;./*|
|00001e30| 20 61 64 64 72 65 73 73 | 20 6f 66 20 66 69 72 73 | address| of firs|
|00001e40| 74 20 27 64 75 6d 6d 79 | 27 2c 20 6f 6e 63 65 20 |t 'dummy|', once |
|00001e50| 6b 6e 6f 77 6e 20 2a 2f | 0a 09 61 75 74 6f 20 63 |known */|..auto c|
|00001e60| 68 61 72 20 64 75 6d 6d | 79 3b 09 09 2f 2a 20 74 |har dumm|y;../* t|
|00001e70| 6f 20 67 65 74 20 73 74 | 61 63 6b 20 61 64 64 72 |o get st|ack addr|
|00001e80| 65 73 73 20 2a 2f 0a 0a | 09 69 66 20 28 61 64 64 |ess */..|.if (add|
|00001e90| 72 20 3d 3d 20 4e 55 4c | 4c 29 0a 09 7b 0a 09 09 |r == NUL|L)..{...|
|00001ea0| 2f 2a 20 69 6e 69 74 69 | 61 6c 20 65 6e 74 72 79 |/* initi|al entry|
|00001eb0| 20 2a 2f 0a 09 09 61 64 | 64 72 20 3d 20 26 64 75 | */...ad|dr = &du|
|00001ec0| 6d 6d 79 3b 0a 09 09 2f | 2a 20 72 65 63 75 72 73 |mmy;.../|* recurs|
|00001ed0| 65 20 6f 6e 63 65 20 2a | 2f 0a 09 09 66 69 6e 64 |e once *|/...find|
|00001ee0| 5f 73 74 61 63 6b 5f 64 | 69 72 65 63 74 69 6f 6e |_stack_d|irection|
|00001ef0| 20 28 29 3b 0a 09 7d 0a | 09 65 6c 73 65 20 69 66 | ();..}.|.else if|
|00001f00| 20 28 26 64 75 6d 6d 79 | 20 3e 20 61 64 64 72 29 | (&dummy| > addr)|
|00001f10| 09 09 2f 2a 20 73 65 63 | 6f 6e 64 20 65 6e 74 72 |../* sec|ond entr|
|00001f20| 79 20 2a 2f 0a 09 09 73 | 74 61 63 6b 5f 64 69 72 |y */...s|tack_dir|
|00001f30| 20 3d 20 31 3b 09 09 2f | 2a 20 73 74 61 63 6b 20 | = 1;../|* stack |
|00001f40| 67 72 65 77 20 75 70 77 | 61 72 64 20 2a 2f 0a 09 |grew upw|ard */..|
|00001f50| 65 6c 73 65 0a 09 09 73 | 74 61 63 6b 5f 64 69 72 |else...s|tack_dir|
|00001f60| 20 3d 20 2d 31 3b 09 09 | 2f 2a 20 73 74 61 63 6b | = -1;..|/* stack|
|00001f70| 20 67 72 65 77 20 64 6f | 77 6e 77 61 72 64 20 2a | grew do|wnward *|
|00001f80| 2f 0a 7d 0a 0a 23 65 6e | 64 69 66 09 2f 2a 20 53 |/.}..#en|dif./* S|
|00001f90| 54 41 43 4b 5f 44 49 52 | 45 43 54 49 4f 4e 20 3d |TACK_DIR|ECTION =|
|00001fa0| 3d 20 30 20 2a 2f 0a 0a | 2f 2a 0a 09 41 6e 20 22 |= 0 */..|/*..An "|
|00001fb0| 61 6c 6c 6f 63 61 20 68 | 65 61 64 65 72 22 20 69 |alloca h|eader" i|
|00001fc0| 73 20 75 73 65 64 20 74 | 6f 3a 0a 09 28 61 29 20 |s used t|o:..(a) |
|00001fd0| 63 68 61 69 6e 20 74 6f | 67 65 74 68 65 72 20 61 |chain to|gether a|
|00001fe0| 6c 6c 20 61 6c 6c 6f 63 | 61 28 29 65 64 20 62 6c |ll alloc|a()ed bl|
|00001ff0| 6f 63 6b 73 3b 0a 09 28 | 62 29 20 6b 65 65 70 20 |ocks;..(|b) keep |
|00002000| 74 72 61 63 6b 20 6f 66 | 20 73 74 61 63 6b 20 64 |track of| stack d|
|00002010| 65 70 74 68 2e 0a 0a 09 | 49 74 20 69 73 20 76 65 |epth....|It is ve|
|00002020| 72 79 20 69 6d 70 6f 72 | 74 61 6e 74 20 74 68 61 |ry impor|tant tha|
|00002030| 74 20 73 69 7a 65 6f 66 | 28 68 65 61 64 65 72 29 |t sizeof|(header)|
|00002040| 20 61 67 72 65 65 20 77 | 69 74 68 20 6d 61 6c 6c | agree w|ith mall|
|00002050| 6f 63 28 29 0a 09 61 6c | 69 67 6e 6d 65 6e 74 20 |oc()..al|ignment |
|00002060| 63 68 75 6e 6b 20 73 69 | 7a 65 2e 20 20 54 68 65 |chunk si|ze. The|
|00002070| 20 66 6f 6c 6c 6f 77 69 | 6e 67 20 64 65 66 61 75 | followi|ng defau|
|00002080| 6c 74 20 73 68 6f 75 6c | 64 20 77 6f 72 6b 20 6f |lt shoul|d work o|
|00002090| 6b 61 79 2e 0a 2a 2f 0a | 0a 23 69 66 6e 64 65 66 |kay..*/.|.#ifndef|
|000020a0| 09 41 4c 49 47 4e 5f 53 | 49 5a 45 0a 23 64 65 66 |.ALIGN_S|IZE.#def|
|000020b0| 69 6e 65 09 41 4c 49 47 | 4e 5f 53 49 5a 45 09 73 |ine.ALIG|N_SIZE.s|
|000020c0| 69 7a 65 6f 66 28 64 6f | 75 62 6c 65 29 0a 23 65 |izeof(do|uble).#e|
|000020d0| 6e 64 69 66 0a 0a 74 79 | 70 65 64 65 66 20 75 6e |ndif..ty|pedef un|
|000020e0| 69 6f 6e 20 68 64 72 0a | 7b 0a 09 63 68 61 72 20 |ion hdr.|{..char |
|000020f0| 61 6c 69 67 6e 5b 41 4c | 49 47 4e 5f 53 49 5a 45 |align[AL|IGN_SIZE|
|00002100| 5d 3b 09 09 2f 2a 20 74 | 6f 20 66 6f 72 63 65 20 |];../* t|o force |
|00002110| 73 69 7a 65 6f 66 28 68 | 65 61 64 65 72 29 20 2a |sizeof(h|eader) *|
|00002120| 2f 0a 09 73 74 72 75 63 | 74 0a 09 7b 0a 09 09 75 |/..struc|t..{...u|
|00002130| 6e 69 6f 6e 20 68 64 72 | 20 2a 6e 65 78 74 3b 09 |nion hdr| *next;.|
|00002140| 2f 2a 20 66 6f 72 20 63 | 68 61 69 6e 69 6e 67 20 |/* for c|haining |
|00002150| 68 65 61 64 65 72 73 20 | 2a 2f 0a 09 09 63 68 61 |headers |*/...cha|
|00002160| 72 20 2a 64 65 65 70 3b | 09 09 2f 2a 20 66 6f 72 |r *deep;|../* for|
|00002170| 20 73 74 61 63 6b 20 64 | 65 70 74 68 20 6d 65 61 | stack d|epth mea|
|00002180| 73 75 72 65 20 2a 2f 0a | 09 7d 20 68 3b 0a 7d 0a |sure */.|.} h;.}.|
|00002190| 68 65 61 64 65 72 3b 0a | 0a 2f 2a 0a 09 61 6c 6c |header;.|./*..all|
|000021a0| 6f 63 61 28 73 69 7a 65 | 29 20 72 65 74 75 72 6e |oca(size|) return|
|000021b0| 73 20 61 20 70 6f 69 6e | 74 65 72 20 74 6f 20 61 |s a poin|ter to a|
|000021c0| 74 20 6c 65 61 73 74 20 | 60 73 69 7a 65 27 20 62 |t least |`size' b|
|000021d0| 79 74 65 73 20 6f 66 0a | 09 73 74 6f 72 61 67 65 |ytes of.|.storage|
|000021e0| 20 77 68 69 63 68 20 77 | 69 6c 6c 20 62 65 20 61 | which w|ill be a|
|000021f0| 75 74 6f 6d 61 74 69 63 | 61 6c 6c 79 20 72 65 63 |utomatic|ally rec|
|00002200| 6c 61 69 6d 65 64 20 75 | 70 6f 6e 20 65 78 69 74 |laimed u|pon exit|
|00002210| 20 66 72 6f 6d 0a 09 74 | 68 65 20 70 72 6f 63 65 | from..t|he proce|
|00002220| 64 75 72 65 20 74 68 61 | 74 20 63 61 6c 6c 65 64 |dure tha|t called|
|00002230| 20 61 6c 6c 6f 63 61 28 | 29 2e 20 20 4f 72 69 67 | alloca(|). Orig|
|00002240| 69 6e 61 6c 6c 79 2c 20 | 74 68 69 73 20 73 70 61 |inally, |this spa|
|00002250| 63 65 0a 09 77 61 73 20 | 73 75 70 70 6f 73 65 64 |ce..was |supposed|
|00002260| 20 74 6f 20 62 65 20 74 | 61 6b 65 6e 20 66 72 6f | to be t|aken fro|
|00002270| 6d 20 74 68 65 20 63 75 | 72 72 65 6e 74 20 73 74 |m the cu|rrent st|
|00002280| 61 63 6b 20 66 72 61 6d | 65 20 6f 66 20 74 68 65 |ack fram|e of the|
|00002290| 0a 09 63 61 6c 6c 65 72 | 2c 20 62 75 74 20 74 68 |..caller|, but th|
|000022a0| 61 74 20 6d 65 74 68 6f | 64 20 63 61 6e 6e 6f 74 |at metho|d cannot|
|000022b0| 20 62 65 20 6d 61 64 65 | 20 74 6f 20 77 6f 72 6b | be made| to work|
|000022c0| 20 66 6f 72 20 73 6f 6d | 65 0a 09 69 6d 70 6c 65 | for som|e..imple|
|000022d0| 6d 65 6e 74 61 74 69 6f | 6e 73 20 6f 66 20 43 2c |mentatio|ns of C,|
|000022e0| 20 66 6f 72 20 65 78 61 | 6d 70 6c 65 20 75 6e 64 | for exa|mple und|
|000022f0| 65 72 20 47 6f 75 6c 64 | 27 73 20 55 54 58 2f 33 |er Gould|'s UTX/3|
|00002300| 32 2e 0a 2a 2f 0a 0a 73 | 74 61 74 69 63 20 68 65 |2..*/..s|tatic he|
|00002310| 61 64 65 72 20 2a 6c 61 | 73 74 5f 61 6c 6c 6f 63 |ader *la|st_alloc|
|00002320| 61 5f 68 65 61 64 65 72 | 20 3d 20 4e 55 4c 4c 3b |a_header| = NULL;|
|00002330| 20 2f 2a 20 2d 3e 20 6c | 61 73 74 20 61 6c 6c 6f | /* -> l|ast allo|
|00002340| 63 61 20 68 65 61 64 65 | 72 20 2a 2f 0a 0a 76 6f |ca heade|r */..vo|
|00002350| 69 64 20 2a 61 6c 6c 6f | 63 61 20 28 73 69 7a 65 |id *allo|ca (size|
|00002360| 5f 74 20 73 69 7a 65 29 | 0a 7b 0a 09 2f 2a 20 76 |_t size)|.{../* v|
|00002370| 61 72 69 61 62 6c 65 20 | 27 70 72 6f 62 65 27 20 |ariable |'probe' |
|00002380| 70 72 6f 62 65 73 20 73 | 74 61 63 6b 20 64 65 70 |probes s|tack dep|
|00002390| 74 68 3a 20 2a 2f 0a 09 | 61 75 74 6f 20 63 68 61 |th: */..|auto cha|
|000023a0| 72 09 70 72 6f 62 65 3b | 0a 09 72 65 67 69 73 74 |r.probe;|..regist|
|000023b0| 65 72 20 63 68 61 72 09 | 2a 64 65 70 74 68 20 3d |er char.|*depth =|
|000023c0| 20 26 70 72 6f 62 65 3b | 0a 09 72 65 67 69 73 74 | &probe;|..regist|
|000023d0| 65 72 20 68 65 61 64 65 | 72 20 2a 68 70 3b 0a 09 |er heade|r *hp;..|
|000023e0| 72 65 67 69 73 74 65 72 | 20 68 65 61 64 65 72 20 |register| header |
|000023f0| 2a 6e 65 77 3b 0a 0a 23 | 69 66 20 53 54 41 43 4b |*new;..#|if STACK|
|00002400| 5f 44 49 52 45 43 54 49 | 4f 4e 20 3d 3d 20 30 0a |_DIRECTI|ON == 0.|
|00002410| 09 69 66 20 28 53 54 41 | 43 4b 5f 44 49 52 20 3d |.if (STA|CK_DIR =|
|00002420| 3d 20 30 29 09 09 2f 2a | 20 75 6e 6b 6e 6f 77 6e |= 0)../*| unknown|
|00002430| 20 67 72 6f 77 74 68 20 | 64 69 72 65 63 74 69 6f | growth |directio|
|00002440| 6e 20 2a 2f 0a 09 09 66 | 69 6e 64 5f 73 74 61 63 |n */...f|ind_stac|
|00002450| 6b 5f 64 69 72 65 63 74 | 69 6f 6e 20 28 29 3b 0a |k_direct|ion ();.|
|00002460| 23 65 6e 64 69 66 0a 0a | 09 2f 2a 20 52 65 63 6c |#endif..|./* Recl|
|00002470| 61 69 6d 20 67 61 72 62 | 61 67 65 2c 20 64 65 66 |aim garb|age, def|
|00002480| 69 6e 65 64 20 61 73 20 | 61 6c 6c 20 61 6c 6c 6f |ined as |all allo|
|00002490| 63 61 28 29 65 64 20 73 | 74 6f 72 61 67 65 20 74 |ca()ed s|torage t|
|000024a0| 68 61 74 0a 09 20 20 20 | 77 61 73 20 61 6c 6c 6f |hat.. |was allo|
|000024b0| 63 61 74 65 64 20 66 72 | 6f 6d 20 64 65 65 70 65 |cated fr|om deepe|
|000024c0| 72 20 69 6e 20 74 68 65 | 20 73 74 61 63 6b 20 74 |r in the| stack t|
|000024d0| 68 61 6e 20 63 75 72 72 | 65 6e 74 6c 79 2e 20 2a |han curr|ently. *|
|000024e0| 2f 0a 0a 09 66 6f 72 20 | 28 68 70 20 3d 20 6c 61 |/...for |(hp = la|
|000024f0| 73 74 5f 61 6c 6c 6f 63 | 61 5f 68 65 61 64 65 72 |st_alloc|a_header|
|00002500| 3b 20 68 70 20 21 3d 20 | 4e 55 4c 4c 3b 29 0a 09 |; hp != |NULL;)..|
|00002510| 7b 0a 09 09 69 66 20 28 | 53 54 41 43 4b 5f 44 49 |{...if (|STACK_DI|
|00002520| 52 20 3e 20 30 20 26 26 | 20 68 70 2d 3e 68 2e 64 |R > 0 &&| hp->h.d|
|00002530| 65 65 70 20 3e 20 64 65 | 70 74 68 0a 09 09 20 7c |eep > de|pth... ||
|00002540| 7c 20 53 54 41 43 4b 5f | 44 49 52 20 3c 20 30 20 || STACK_|DIR < 0 |
|00002550| 26 26 20 68 70 2d 3e 68 | 2e 64 65 65 70 20 3c 20 |&& hp->h|.deep < |
|00002560| 64 65 70 74 68 29 0a 09 | 09 7b 0a 09 09 09 2f 2a |depth)..|.{..../*|
|00002570| 20 63 6f 6c 6c 65 63 74 | 20 67 61 72 62 61 67 65 | collect| garbage|
|00002580| 20 2a 2f 0a 09 09 09 72 | 65 67 69 73 74 65 72 20 | */....r|egister |
|00002590| 68 65 61 64 65 72 20 2a | 6e 70 20 3d 20 68 70 2d |header *|np = hp-|
|000025a0| 3e 68 2e 6e 65 78 74 3b | 0a 09 09 09 66 72 65 65 |>h.next;|....free|
|000025b0| 20 28 68 70 29 3b 0a 09 | 09 09 68 70 20 3d 20 6e | (hp);..|..hp = n|
|000025c0| 70 3b 0a 09 09 7d 0a 09 | 09 65 6c 73 65 20 2f 2a |p;...}..|.else /*|
|000025d0| 20 72 65 73 74 20 61 72 | 65 20 6e 6f 74 20 64 65 | rest ar|e not de|
|000025e0| 65 70 65 72 20 2a 2f 0a | 09 09 09 62 72 65 61 6b |eper */.|...break|
|000025f0| 3b 0a 09 7d 0a 0a 09 6c | 61 73 74 5f 61 6c 6c 6f |;..}...l|ast_allo|
|00002600| 63 61 5f 68 65 61 64 65 | 72 20 3d 20 68 70 3b 09 |ca_heade|r = hp;.|
|00002610| 2f 2a 20 2d 3e 20 6c 61 | 73 74 20 76 61 6c 69 64 |/* -> la|st valid|
|00002620| 20 73 74 6f 72 61 67 65 | 20 2a 2f 0a 0a 09 69 66 | storage| */...if|
|00002630| 20 28 73 69 7a 65 20 3d | 3d 20 30 29 0a 09 09 72 | (size =|= 0)...r|
|00002640| 65 74 75 72 6e 20 4e 55 | 4c 4c 3b 09 2f 2a 20 6e |eturn NU|LL;./* n|
|00002650| 6f 20 61 6c 6c 6f 63 61 | 74 69 6f 6e 20 72 65 71 |o alloca|tion req|
|00002660| 75 69 72 65 64 20 2a 2f | 0a 0a 09 2f 2a 20 41 6c |uired */|.../* Al|
|00002670| 6c 6f 63 61 74 65 20 63 | 6f 6d 62 69 6e 65 64 20 |locate c|ombined |
|00002680| 68 65 61 64 65 72 20 2b | 20 75 73 65 72 20 64 61 |header +| user da|
|00002690| 74 61 20 73 74 6f 72 61 | 67 65 2e 20 2a 2f 0a 0a |ta stora|ge. */..|
|000026a0| 09 6e 65 77 20 3d 20 65 | 6d 61 6c 6c 6f 63 20 28 |.new = e|malloc (|
|000026b0| 73 69 7a 65 6f 66 20 28 | 68 65 61 64 65 72 29 20 |sizeof (|header) |
|000026c0| 2b 20 73 69 7a 65 29 3b | 0a 09 6e 65 77 2d 3e 68 |+ size);|..new->h|
|000026d0| 2e 6e 65 78 74 20 3d 20 | 6c 61 73 74 5f 61 6c 6c |.next = |last_all|
|000026e0| 6f 63 61 5f 68 65 61 64 | 65 72 3b 0a 09 6e 65 77 |oca_head|er;..new|
|000026f0| 2d 3e 68 2e 64 65 65 70 | 20 3d 20 64 65 70 74 68 |->h.deep| = depth|
|00002700| 3b 0a 0a 09 6c 61 73 74 | 5f 61 6c 6c 6f 63 61 5f |;...last|_alloca_|
|00002710| 68 65 61 64 65 72 20 3d | 20 6e 65 77 3b 0a 0a 09 |header =| new;...|
|00002720| 2f 2a 20 55 73 65 72 20 | 73 74 6f 72 61 67 65 20 |/* User |storage |
|00002730| 62 65 67 69 6e 73 20 6a | 75 73 74 20 61 66 74 65 |begins j|ust afte|
|00002740| 72 20 68 65 61 64 65 72 | 2e 20 2a 2f 0a 09 72 65 |r header|. */..re|
|00002750| 74 75 72 6e 20 28 76 6f | 69 64 20 2a 29 28 28 63 |turn (vo|id *)((c|
|00002760| 68 61 72 20 2a 29 6e 65 | 77 20 2b 20 73 69 7a 65 |har *)ne|w + size|
|00002770| 6f 66 28 68 65 61 64 65 | 72 29 29 3b 0a 7d 0a 46 |of(heade|r));.}.F|
|00002780| 69 6c 65 44 61 74 61 82 | 42 61 67 00 00 00 00 00 |ileData.|Bag.....|
|00002790| 00 00 00 91 32 00 00 42 | ff ff ff 45 ee b2 05 03 |....2..B|...E....|
|000027a0| 00 ea 34 2f 2a 20 43 2e | 42 61 67 3a 20 42 61 67 |..4/* C.|Bag: Bag|
|000027b0| 20 64 61 74 61 20 74 79 | 70 65 20 2a 2f 0a 0a 23 | data ty|pe */..#|
|000027c0| 69 6e 63 6c 75 64 65 20 | 3c 73 74 64 64 65 66 2e |include |<stddef.|
|000027d0| 68 3e 0a 23 69 6e 63 6c | 75 64 65 20 3c 73 74 64 |h>.#incl|ude <std|
|000027e0| 6c 69 62 2e 68 3e 0a 23 | 69 6e 63 6c 75 64 65 20 |lib.h>.#|include |
|000027f0| 3c 73 74 72 69 6e 67 2e | 68 3e 0a 23 69 6e 63 6c |<string.|h>.#incl|
|00002800| 75 64 65 20 22 62 61 67 | 2e 68 22 0a 0a 23 69 66 |ude "bag|.h"..#if|
|00002810| 64 65 66 20 74 65 73 74 | 0a 23 69 6e 63 6c 75 64 |def test|.#includ|
|00002820| 65 20 3c 73 74 64 69 6f | 2e 68 3e 0a 23 65 6e 64 |e <stdio|.h>.#end|
|00002830| 69 66 0a 0a 73 74 72 75 | 63 74 20 6c 69 6e 6b 0a |if..stru|ct link.|
|00002840| 7b 0a 20 20 20 20 20 20 | 20 20 73 74 72 75 63 74 |{. | struct|
|00002850| 20 6c 69 6e 6b 20 2a 6e | 65 78 74 3b 0a 20 20 20 | link *n|ext;. |
|00002860| 20 20 20 20 20 69 6e 74 | 20 63 6f 75 6e 74 3b 0a | int| count;.|
|00002870| 20 20 20 20 20 20 20 20 | 63 68 61 72 20 64 61 74 | |char dat|
|00002880| 61 5b 31 5d 3b 0a 7d 3b | 0a 0a 74 79 70 65 64 65 |a[1];.};|..typede|
|00002890| 66 20 73 74 72 75 63 74 | 20 6c 69 6e 6b 20 2a 6c |f struct| link *l|
|000028a0| 69 6e 6b 3b 0a 0a 2f 2a | 20 52 65 74 75 72 6e 20 |ink;../*| Return |
|000028b0| 76 61 6c 75 65 73 20 66 | 72 6f 6d 20 66 75 6e 63 |values f|rom func|
|000028c0| 74 69 6f 6e 73 20 2a 2f | 0a 0a 23 64 65 66 69 6e |tions */|..#defin|
|000028d0| 65 20 4f 4b 20 20 20 20 | 20 20 31 0a 23 64 65 66 |e OK | 1.#def|
|000028e0| 69 6e 65 20 45 52 52 20 | 20 20 20 20 30 0a 0a 2f |ine ERR | 0../|
|000028f0| 2a 20 55 74 69 6c 69 74 | 79 20 66 75 6e 63 74 69 |* Utilit|y functi|
|00002900| 6f 6e 20 2d 20 66 69 6e | 64 20 61 6e 20 65 6c 65 |on - fin|d an ele|
|00002910| 6d 65 6e 74 20 69 6e 20 | 61 20 62 61 67 20 2a 2f |ment in |a bag */|
|00002920| 0a 0a 73 74 61 74 69 63 | 20 6c 69 6e 6b 20 66 69 |..static| link fi|
|00002930| 6e 64 20 28 63 6f 6e 73 | 74 20 62 61 67 20 62 2c |nd (cons|t bag b,|
|00002940| 20 63 6f 6e 73 74 20 76 | 6f 69 64 20 2a 65 6c 65 | const v|oid *ele|
|00002950| 6d 65 6e 74 2c 20 6c 69 | 6e 6b 20 2a 70 72 65 76 |ment, li|nk *prev|
|00002960| 29 0a 7b 0a 20 20 20 20 | 20 20 20 20 6c 69 6e 6b |).{. | link|
|00002970| 20 74 68 69 73 3b 0a 20 | 20 20 20 20 20 20 20 6c | this;. | l|
|00002980| 69 6e 6b 20 70 20 3d 20 | 4e 55 4c 4c 3b 0a 20 20 |ink p = |NULL;. |
|00002990| 20 20 20 20 20 20 63 6f | 6e 73 74 20 69 6e 74 20 | co|nst int |
|000029a0| 73 69 7a 65 20 3d 20 62 | 2d 3e 6f 62 6a 5f 73 69 |size = b|->obj_si|
|000029b0| 7a 65 3b 0a 0a 20 20 20 | 20 20 20 20 20 66 6f 72 |ze;.. | for|
|000029c0| 20 28 20 74 68 69 73 20 | 3d 20 62 2d 3e 66 69 72 | ( this |= b->fir|
|000029d0| 73 74 3b 20 74 68 69 73 | 20 21 3d 20 4e 55 4c 4c |st; this| != NULL|
|000029e0| 3b 20 74 68 69 73 20 3d | 20 74 68 69 73 2d 3e 6e |; this =| this->n|
|000029f0| 65 78 74 20 29 0a 20 20 | 20 20 20 20 20 20 7b 0a |ext ). | {.|
|00002a00| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00002a10| 69 66 20 28 20 6d 65 6d | 63 6d 70 28 65 6c 65 6d |if ( mem|cmp(elem|
|00002a20| 65 6e 74 2c 74 68 69 73 | 2d 3e 64 61 74 61 2c 73 |ent,this|->data,s|
|00002a30| 69 7a 65 29 20 3d 3d 20 | 30 20 29 0a 20 20 20 20 |ize) == |0 ). |
|00002a40| 20 20 20 20 20 20 20 20 | 20 20 20 20 7b 0a 20 20 | | {. |
|00002a50| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00002a60| 20 20 20 20 20 20 69 66 | 20 28 20 70 72 65 76 20 | if| ( prev |
|00002a70| 21 3d 20 4e 55 4c 4c 20 | 29 0a 20 20 20 20 20 20 |!= NULL |). |
|00002a80| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00002a90| 20 20 20 20 20 20 20 20 | 20 20 2a 70 72 65 76 20 | | *prev |
|00002aa0| 3d 20 70 3b 0a 20 20 20 | 20 20 20 20 20 20 20 20 |= p;. | |
|00002ab0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00002ac0| 20 20 20 20 20 0a 20 20 | 20 20 20 20 20 20 20 20 | . | |
|00002ad0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 72 65 | | re|
|00002ae0| 74 75 72 6e 20 74 68 69 | 73 3b 0a 20 20 20 20 20 |turn thi|s;. |
|00002af0| 20 20 20 20 20 20 20 20 | 20 20 20 7d 0a 0a 20 20 | | }.. |
|00002b00| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 70 20 | | p |
|00002b10| 3d 20 74 68 69 73 3b 0a | 20 20 20 20 20 20 20 20 |= this;.| |
|00002b20| 7d 0a 0a 20 20 20 20 20 | 20 20 20 72 65 74 75 72 |}.. | retur|
|00002b30| 6e 20 4e 55 4c 4c 3b 0a | 7d 0a 0a 2f 2a 20 47 65 |n NULL;.|}../* Ge|
|00002b40| 6e 65 72 61 6c 20 63 6f | 6d 70 6f 6e 65 6e 74 20 |neral co|mponent |
|00002b50| 72 6f 75 74 69 6e 65 73 | 20 2a 2f 0a 0a 62 61 67 |routines| */..bag|
|00002b60| 20 62 61 67 5f 6e 65 77 | 20 28 69 6e 74 20 6f 62 | bag_new| (int ob|
|00002b70| 6a 5f 6c 65 6e 29 0a 7b | 0a 20 20 20 20 20 20 20 |j_len).{|. |
|00002b80| 20 72 65 67 69 73 74 65 | 72 20 62 61 67 20 62 3b | registe|r bag b;|
|00002b90| 0a 0a 20 20 20 20 20 20 | 20 20 62 20 3d 20 6d 61 |.. | b = ma|
|00002ba0| 6c 6c 6f 63 28 73 69 7a | 65 6f 66 28 73 74 72 75 |lloc(siz|eof(stru|
|00002bb0| 63 74 20 62 61 67 29 29 | 3b 0a 0a 20 20 20 20 20 |ct bag))|;.. |
|00002bc0| 20 20 20 69 66 20 28 20 | 62 20 3d 3d 20 4e 55 4c | if ( |b == NUL|
|00002bd0| 4c 20 29 0a 20 20 20 20 | 20 20 20 20 20 20 20 20 |L ). | |
|00002be0| 20 20 20 20 72 65 74 75 | 72 6e 20 4e 55 4c 4c 3b | retu|rn NULL;|
|00002bf0| 0a 0a 20 20 20 20 20 20 | 20 20 62 2d 3e 66 69 72 |.. | b->fir|
|00002c00| 73 74 20 20 20 20 3d 20 | 4e 55 4c 4c 3b 0a 20 20 |st = |NULL;. |
|00002c10| 20 20 20 20 20 20 62 2d | 3e 6f 62 6a 5f 73 69 7a | b-|>obj_siz|
|00002c20| 65 20 3d 20 6f 62 6a 5f | 6c 65 6e 3b 0a 0a 20 20 |e = obj_|len;.. |
|00002c30| 20 20 20 20 20 20 72 65 | 74 75 72 6e 20 62 3b 0a | re|turn b;.|
|00002c40| 7d 0a 0a 76 6f 69 64 20 | 62 61 67 5f 66 72 65 65 |}..void |bag_free|
|00002c50| 20 28 62 61 67 20 62 29 | 0a 7b 0a 20 20 20 20 20 | (bag b)|.{. |
|00002c60| 20 20 20 62 61 67 5f 63 | 6c 65 61 72 28 62 29 3b | bag_c|lear(b);|
|00002c70| 0a 20 20 20 20 20 20 20 | 20 66 72 65 65 28 62 29 |. | free(b)|
|00002c80| 3b 0a 7d 0a 0a 76 6f 69 | 64 20 62 61 67 5f 63 6c |;.}..voi|d bag_cl|
|00002c90| 65 61 72 20 28 62 61 67 | 20 62 29 0a 7b 0a 20 20 |ear (bag| b).{. |
|00002ca0| 20 20 20 20 20 20 6c 69 | 6e 6b 20 74 68 69 73 5f | li|nk this_|
|00002cb0| 65 6e 74 72 79 20 3d 20 | 62 2d 3e 66 69 72 73 74 |entry = |b->first|
|00002cc0| 3b 0a 20 20 20 20 20 20 | 20 20 6c 69 6e 6b 20 6e |;. | link n|
|00002cd0| 65 78 74 5f 65 6e 74 72 | 79 3b 0a 20 20 20 20 20 |ext_entr|y;. |
|00002ce0| 20 20 20 0a 20 20 20 20 | 20 20 20 20 77 68 69 6c | . | whil|
|00002cf0| 65 20 28 20 74 68 69 73 | 5f 65 6e 74 72 79 20 21 |e ( this|_entry !|
|00002d00| 3d 20 4e 55 4c 4c 20 29 | 0a 20 20 20 20 20 20 20 |= NULL )|. |
|00002d10| 20 7b 0a 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | {. | |
|00002d20| 20 20 20 6e 65 78 74 5f | 65 6e 74 72 79 20 3d 20 | next_|entry = |
|00002d30| 74 68 69 73 5f 65 6e 74 | 72 79 2d 3e 6e 65 78 74 |this_ent|ry->next|
|00002d40| 3b 0a 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |;. | |
|00002d50| 20 20 66 72 65 65 28 74 | 68 69 73 5f 65 6e 74 72 | free(t|his_entr|
|00002d60| 79 29 3b 0a 20 20 20 20 | 20 20 20 20 20 20 20 20 |y);. | |
|00002d70| 20 20 20 20 74 68 69 73 | 5f 65 6e 74 72 79 20 3d | this|_entry =|
|00002d80| 20 6e 65 78 74 5f 65 6e | 74 72 79 3b 0a 20 20 20 | next_en|try;. |
|00002d90| 20 20 20 20 20 7d 0a 0a | 20 20 20 20 20 20 20 20 | }..| |
|00002da0| 62 2d 3e 66 69 72 73 74 | 20 3d 20 4e 55 4c 4c 3b |b->first| = NULL;|
|00002db0| 0a 7d 0a 0a 69 6e 74 20 | 62 61 67 5f 63 6f 70 79 |.}..int |bag_copy|
|00002dc0| 20 28 62 61 67 20 62 31 | 2c 20 63 6f 6e 73 74 20 | (bag b1|, const |
|00002dd0| 62 61 67 20 62 32 29 0a | 7b 0a 20 20 20 20 20 20 |bag b2).|{. |
|00002de0| 20 20 6c 69 6e 6b 20 70 | 3b 0a 20 20 20 20 20 20 | link p|;. |
|00002df0| 20 20 6c 69 6e 6b 20 6e | 65 77 3b 0a 20 20 20 20 | link n|ew;. |
|00002e00| 20 20 20 20 6c 69 6e 6b | 20 6c 61 73 74 3b 0a 20 | link| last;. |
|00002e10| 20 20 20 20 20 20 20 69 | 6e 74 20 73 69 7a 65 3b | i|nt size;|
|00002e20| 0a 0a 20 20 20 20 20 20 | 20 20 69 66 20 28 20 62 |.. | if ( b|
|00002e30| 31 2d 3e 6f 62 6a 5f 73 | 69 7a 65 20 21 3d 20 62 |1->obj_s|ize != b|
|00002e40| 32 2d 3e 6f 62 6a 5f 73 | 69 7a 65 20 29 0a 20 20 |2->obj_s|ize ). |
|00002e50| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 72 65 | | re|
|00002e60| 74 75 72 6e 20 45 52 52 | 3b 0a 0a 20 20 20 20 20 |turn ERR|;.. |
|00002e70| 20 20 20 62 61 67 5f 63 | 6c 65 61 72 28 62 31 29 | bag_c|lear(b1)|
|00002e80| 3b 0a 0a 20 20 20 20 20 | 20 20 20 6c 61 73 74 20 |;.. | last |
|00002e90| 3d 20 28 6c 69 6e 6b 29 | 62 31 3b 0a 20 20 20 20 |= (link)|b1;. |
|00002ea0| 20 20 20 20 73 69 7a 65 | 20 3d 20 62 32 2d 3e 6f | size| = b2->o|
|00002eb0| 62 6a 5f 73 69 7a 65 3b | 0a 0a 20 20 20 20 20 20 |bj_size;|.. |
|00002ec0| 20 20 66 6f 72 20 28 20 | 70 20 3d 20 62 32 2d 3e | for ( |p = b2->|
|00002ed0| 66 69 72 73 74 3b 20 70 | 20 21 3d 20 4e 55 4c 4c |first; p| != NULL|
|00002ee0| 3b 20 70 20 3d 20 70 2d | 3e 6e 65 78 74 20 29 0a |; p = p-|>next ).|
|00002ef0| 20 20 20 20 20 20 20 20 | 7b 0a 20 20 20 20 20 20 | |{. |
|00002f00| 20 20 20 20 20 20 20 20 | 20 20 6e 65 77 20 3d 20 | | new = |
|00002f10| 6d 61 6c 6c 6f 63 28 73 | 69 7a 65 6f 66 28 73 74 |malloc(s|izeof(st|
|00002f20| 72 75 63 74 20 6c 69 6e | 6b 29 20 2d 20 31 20 2b |ruct lin|k) - 1 +|
|00002f30| 20 73 69 7a 65 29 3b 0a | 20 20 20 20 20 20 20 20 | size);.| |
|00002f40| 20 20 20 20 20 20 20 20 | 69 66 20 28 20 6e 65 77 | |if ( new|
|00002f50| 20 3d 3d 20 4e 55 4c 4c | 20 29 0a 20 20 20 20 20 | == NULL| ). |
|00002f60| 20 20 20 20 20 20 20 20 | 20 20 20 7b 0a 20 20 20 | | {. |
|00002f70| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00002f80| 20 20 20 20 20 62 61 67 | 5f 63 6c 65 61 72 28 62 | bag|_clear(b|
|00002f90| 31 29 3b 0a 20 20 20 20 | 20 20 20 20 20 20 20 20 |1);. | |
|00002fa0| 20 20 20 20 20 20 20 20 | 20 20 20 20 72 65 74 75 | | retu|
|00002fb0| 72 6e 20 45 52 52 3b 0a | 20 20 20 20 20 20 20 20 |rn ERR;.| |
|00002fc0| 20 20 20 20 20 20 20 20 | 7d 0a 20 20 20 20 20 20 | |}. |
|00002fd0| 20 20 20 20 20 20 20 20 | 20 20 6c 61 73 74 2d 3e | | last->|
|00002fe0| 6e 65 78 74 20 3d 20 6e | 65 77 3b 0a 20 20 20 20 |next = n|ew;. |
|00002ff0| 20 20 20 20 20 20 20 20 | 20 20 20 20 6d 65 6d 63 | | memc|
|00003000| 70 79 28 6e 65 77 2d 3e | 64 61 74 61 2c 70 2d 3e |py(new->|data,p->|
|00003010| 64 61 74 61 2c 73 69 7a | 65 29 3b 0a 20 20 20 20 |data,siz|e);. |
|00003020| 20 20 20 20 20 20 20 20 | 20 20 20 20 6e 65 77 2d | | new-|
|00003030| 3e 63 6f 75 6e 74 20 3d | 20 70 2d 3e 63 6f 75 6e |>count =| p->coun|
|00003040| 74 3b 0a 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |t;. | |
|00003050| 20 20 20 6c 61 73 74 20 | 3d 20 6e 65 77 3b 0a 20 | last |= new;. |
|00003060| 20 20 20 20 20 20 20 7d | 0a 0a 20 20 20 20 20 20 | }|.. |
|00003070| 20 20 6c 61 73 74 2d 3e | 6e 65 78 74 20 3d 20 4e | last->|next = N|
|00003080| 55 4c 4c 3b 0a 20 20 20 | 20 20 20 20 20 72 65 74 |ULL;. | ret|
|00003090| 75 72 6e 20 4f 4b 3b 0a | 7d 0a 0a 69 6e 74 20 62 |urn OK;.|}..int b|
|000030a0| 61 67 5f 65 71 75 61 6c | 20 28 63 6f 6e 73 74 20 |ag_equal| (const |
|000030b0| 62 61 67 20 62 31 2c 20 | 63 6f 6e 73 74 20 62 61 |bag b1, |const ba|
|000030c0| 67 20 62 32 29 0a 7b 0a | 20 20 20 20 20 20 20 20 |g b2).{.| |
|000030d0| 6c 69 6e 6b 20 70 3b 0a | 20 20 20 20 20 20 20 20 |link p;.| |
|000030e0| 6c 69 6e 6b 20 71 3b 0a | 20 20 20 20 20 20 20 20 |link q;.| |
|000030f0| 69 6e 74 20 6e 31 20 3d | 20 30 3b 0a 20 20 20 20 |int n1 =| 0;. |
|00003100| 20 20 20 20 69 6e 74 20 | 6e 32 20 3d 20 30 3b 0a | int |n2 = 0;.|
|00003110| 0a 20 20 20 20 20 20 20 | 20 69 66 20 28 20 62 31 |. | if ( b1|
|00003120| 2d 3e 6f 62 6a 5f 73 69 | 7a 65 20 21 3d 20 62 32 |->obj_si|ze != b2|
|00003130| 2d 3e 6f 62 6a 5f 73 69 | 7a 65 20 29 0a 20 20 20 |->obj_si|ze ). |
|00003140| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 72 65 74 | | ret|
|00003150| 75 72 6e 20 30 3b 0a 0a | 20 20 20 20 20 20 20 20 |urn 0;..| |
|00003160| 2f 2a 20 46 6f 72 20 65 | 76 65 72 79 20 65 6c 65 |/* For e|very ele|
|00003170| 6d 65 6e 74 20 6f 66 20 | 62 31 2c 20 6c 6f 6f 6b |ment of |b1, look|
|00003180| 20 66 6f 72 20 69 74 20 | 69 6e 20 62 32 20 2a 2f | for it |in b2 */|
|00003190| 0a 0a 20 20 20 20 20 20 | 20 20 66 6f 72 20 28 20 |.. | for ( |
|000031a0| 70 20 3d 20 62 31 2d 3e | 66 69 72 73 74 3b 20 70 |p = b1->|first; p|
|000031b0| 20 21 3d 20 4e 55 4c 4c | 3b 20 70 20 3d 20 70 2d | != NULL|; p = p-|
|000031c0| 3e 6e 65 78 74 20 29 0a | 20 20 20 20 20 20 20 20 |>next ).| |
|000031d0| 7b 0a 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |{. | |
|000031e0| 20 20 71 20 3d 20 66 69 | 6e 64 28 62 32 2c 70 2d | q = fi|nd(b2,p-|
|000031f0| 3e 64 61 74 61 2c 4e 55 | 4c 4c 29 3b 0a 0a 20 20 |>data,NU|LL);.. |
|00003200| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 2f 2a | | /*|
|00003210| 20 49 66 20 69 74 27 73 | 20 6e 6f 74 20 69 6e 20 | If it's| not in |
|00003220| 62 32 2c 20 6f 72 20 74 | 68 65 20 63 6f 75 6e 74 |b2, or t|he count|
|00003230| 73 20 61 72 65 20 64 69 | 66 66 65 72 65 6e 74 2c |s are di|fferent,|
|00003240| 20 62 31 20 21 3d 20 62 | 32 20 2a 2f 0a 20 20 20 | b1 != b|2 */. |
|00003250| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 69 66 20 | | if |
|00003260| 28 20 71 20 3d 3d 20 4e | 55 4c 4c 20 7c 7c 20 70 |( q == N|ULL || p|
|00003270| 2d 3e 63 6f 75 6e 74 20 | 21 3d 20 71 2d 3e 63 6f |->count |!= q->co|
|00003280| 75 6e 74 20 29 0a 20 20 | 20 20 20 20 20 20 20 20 |unt ). | |
|00003290| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 72 65 | | re|
|000032a0| 74 75 72 6e 20 30 3b 0a | 0a 20 20 20 20 20 20 20 |turn 0;.|. |
|000032b0| 20 20 20 20 20 20 20 20 | 20 2f 2a 20 43 6f 75 6e | | /* Coun|
|000032c0| 74 20 74 68 65 20 75 6e | 69 71 75 65 20 65 6c 65 |t the un|ique ele|
|000032d0| 6d 65 6e 74 73 20 6f 66 | 20 62 31 20 2a 2f 0a 20 |ments of| b1 */. |
|000032e0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 2b | | +|
|000032f0| 2b 6e 31 3b 0a 20 20 20 | 20 20 20 20 20 7d 0a 0a |+n1;. | }..|
|00003300| 20 20 20 20 20 20 20 20 | 2f 2a 20 43 6f 75 6e 74 | |/* Count|
|00003310| 20 74 68 65 20 75 6e 69 | 71 75 65 20 65 6c 65 6d | the uni|que elem|
|00003320| 65 6e 74 73 20 6f 66 20 | 62 32 20 2a 2f 0a 20 20 |ents of |b2 */. |
|00003330| 20 20 20 20 20 20 66 6f | 72 20 28 20 70 20 3d 20 | fo|r ( p = |
|00003340| 62 32 2d 3e 66 69 72 73 | 74 3b 20 70 20 21 3d 20 |b2->firs|t; p != |
|00003350| 4e 55 4c 4c 3b 20 70 20 | 3d 20 70 2d 3e 6e 65 78 |NULL; p |= p->nex|
|00003360| 74 20 29 0a 20 20 20 20 | 20 20 20 20 20 20 20 20 |t ). | |
|00003370| 20 20 20 20 2b 2b 6e 32 | 3b 0a 0a 20 20 20 20 20 | ++n2|;.. |
|00003380| 20 20 20 2f 2a 20 54 68 | 65 20 62 61 67 73 20 64 | /* Th|e bags d|
|00003390| 69 66 66 65 72 20 69 66 | 20 74 68 65 72 65 20 61 |iffer if| there a|
|000033a0| 72 65 20 65 6c 65 6d 65 | 6e 74 73 20 69 6e 20 62 |re eleme|nts in b|
|000033b0| 31 20 6e 6f 74 20 69 6e | 20 62 32 20 2a 2f 0a 20 |1 not in| b2 */. |
|000033c0| 20 20 20 20 20 20 20 72 | 65 74 75 72 6e 20 28 20 | r|eturn ( |
|000033d0| 6e 31 20 3d 3d 20 6e 32 | 20 29 3b 0a 7d 0a 0a 69 |n1 == n2| );.}..i|
|000033e0| 6e 74 20 62 61 67 5f 65 | 6d 70 74 79 20 28 63 6f |nt bag_e|mpty (co|
|000033f0| 6e 73 74 20 62 61 67 20 | 62 29 0a 7b 0a 20 20 20 |nst bag |b).{. |
|00003400| 20 20 20 20 20 72 65 74 | 75 72 6e 20 28 20 62 2d | ret|urn ( b-|
|00003410| 3e 66 69 72 73 74 20 3d | 3d 20 4e 55 4c 4c 20 29 |>first =|= NULL )|
|00003420| 3b 0a 7d 0a 0a 69 6e 74 | 20 62 61 67 5f 73 69 7a |;.}..int| bag_siz|
|00003430| 65 20 28 63 6f 6e 73 74 | 20 62 61 67 20 62 29 0a |e (const| bag b).|
|00003440| 7b 0a 20 20 20 20 20 20 | 20 20 69 6e 74 20 69 20 |{. | int i |
|00003450| 3d 20 30 3b 0a 20 20 20 | 20 20 20 20 20 6c 69 6e |= 0;. | lin|
|00003460| 6b 20 70 3b 0a 0a 20 20 | 20 20 20 20 20 20 66 6f |k p;.. | fo|
|00003470| 72 20 28 20 70 20 3d 20 | 62 2d 3e 66 69 72 73 74 |r ( p = |b->first|
|00003480| 3b 20 70 20 21 3d 20 4e | 55 4c 4c 3b 20 70 20 3d |; p != N|ULL; p =|
|00003490| 20 70 2d 3e 6e 65 78 74 | 20 29 0a 20 20 20 20 20 | p->next| ). |
|000034a0| 20 20 20 20 20 20 20 20 | 20 20 20 69 20 2b 3d 20 | | i += |
|000034b0| 70 2d 3e 63 6f 75 6e 74 | 3b 0a 0a 20 20 20 20 20 |p->count|;.. |
|000034c0| 20 20 20 72 65 74 75 72 | 6e 20 69 3b 0a 7d 0a 0a | retur|n i;.}..|
|000034d0| 69 6e 74 20 62 61 67 5f | 69 74 65 72 61 74 65 20 |int bag_|iterate |
|000034e0| 28 63 6f 6e 73 74 20 62 | 61 67 20 62 2c 20 69 6e |(const b|ag b, in|
|000034f0| 74 20 28 2a 70 72 6f 63 | 65 73 73 29 28 76 6f 69 |t (*proc|ess)(voi|
|00003500| 64 20 2a 2c 20 69 6e 74 | 29 29 0a 7b 0a 20 20 20 |d *, int|)).{. |
|00003510| 20 20 20 20 20 69 6e 74 | 20 72 65 74 20 3d 20 30 | int| ret = 0|
|00003520| 3b 0a 20 20 20 20 20 20 | 20 20 6c 69 6e 6b 20 70 |;. | link p|
|00003530| 3b 0a 0a 20 20 20 20 20 | 20 20 20 66 6f 72 20 28 |;.. | for (|
|00003540| 20 70 20 3d 20 62 2d 3e | 66 69 72 73 74 3b 20 70 | p = b->|first; p|
|00003550| 20 21 3d 20 4e 55 4c 4c | 3b 20 70 20 3d 20 70 2d | != NULL|; p = p-|
|00003560| 3e 6e 65 78 74 20 29 0a | 20 20 20 20 20 20 20 20 |>next ).| |
|00003570| 7b 0a 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |{. | |
|00003580| 20 20 72 65 74 20 3d 20 | 28 2a 70 72 6f 63 65 73 | ret = |(*proces|
|00003590| 73 29 28 70 2d 3e 64 61 | 74 61 2c 70 2d 3e 63 6f |s)(p->da|ta,p->co|
|000035a0| 75 6e 74 29 3b 0a 0a 20 | 20 20 20 20 20 20 20 20 |unt);.. | |
|000035b0| 20 20 20 20 20 20 20 2f | 2a 20 4e 6f 6e 2d 7a 65 | /|* Non-ze|
|000035c0| 72 6f 20 3d 3e 20 73 74 | 6f 70 20 70 72 6f 63 65 |ro => st|op proce|
|000035d0| 73 73 69 6e 67 20 68 65 | 72 65 20 2a 2f 0a 0a 20 |ssing he|re */.. |
|000035e0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 69 | | i|
|000035f0| 66 20 28 20 72 65 74 20 | 21 3d 20 30 20 29 0a 20 |f ( ret |!= 0 ). |
|00003600| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00003610| 20 20 20 20 20 20 20 62 | 72 65 61 6b 3b 0a 20 20 | b|reak;. |
|00003620| 20 20 20 20 20 20 7d 0a | 0a 20 20 20 20 20 20 20 | }.|. |
|00003630| 20 2f 2a 20 4e 65 67 61 | 74 69 76 65 20 3d 3e 20 | /* Nega|tive => |
|00003640| 41 62 6e 6f 72 6d 61 6c | 20 28 65 72 72 6f 72 29 |Abnormal| (error)|
|00003650| 20 74 65 72 6d 69 6e 61 | 74 69 6f 6e 20 2a 2f 0a | termina|tion */.|
|00003660| 0a 20 20 20 20 20 20 20 | 20 72 65 74 75 72 6e 20 |. | return |
|00003670| 28 20 72 65 74 20 3e 3d | 20 30 20 29 3b 0a 7d 0a |( ret >=| 0 );.}.|
|00003680| 0a 2f 2a 20 62 61 67 2d | 73 70 65 63 69 66 69 63 |./* bag-|specific|
|00003690| 20 72 6f 75 74 69 6e 65 | 73 20 2a 2f 0a 0a 69 6e | routine|s */..in|
|000036a0| 74 20 62 61 67 5f 61 64 | 64 20 28 62 61 67 20 62 |t bag_ad|d (bag b|
|000036b0| 2c 20 63 6f 6e 73 74 20 | 76 6f 69 64 20 2a 6f 62 |, const |void *ob|
|000036c0| 6a 65 63 74 29 0a 7b 0a | 20 20 20 20 20 20 20 20 |ject).{.| |
|000036d0| 6c 69 6e 6b 20 6e 65 77 | 3b 0a 0a 20 20 20 20 20 |link new|;.. |
|000036e0| 20 20 20 6e 65 77 20 3d | 20 66 69 6e 64 28 62 2c | new =| find(b,|
|000036f0| 6f 62 6a 65 63 74 2c 4e | 55 4c 4c 29 3b 0a 0a 20 |object,N|ULL);.. |
|00003700| 20 20 20 20 20 20 20 69 | 66 20 28 20 6e 65 77 20 | i|f ( new |
|00003710| 21 3d 20 4e 55 4c 4c 20 | 29 0a 20 20 20 20 20 20 |!= NULL |). |
|00003720| 20 20 7b 0a 20 20 20 20 | 20 20 20 20 20 20 20 20 | {. | |
|00003730| 20 20 20 20 2b 2b 6e 65 | 77 2d 3e 63 6f 75 6e 74 | ++ne|w->count|
|00003740| 3b 0a 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |;. | |
|00003750| 20 20 72 65 74 75 72 6e | 20 4f 4b 3b 0a 20 20 20 | return| OK;. |
|00003760| 20 20 20 20 20 7d 0a 0a | 20 20 20 20 20 20 20 20 | }..| |
|00003770| 6e 65 77 20 3d 20 6d 61 | 6c 6c 6f 63 28 73 69 7a |new = ma|lloc(siz|
|00003780| 65 6f 66 28 73 74 72 75 | 63 74 20 6c 69 6e 6b 29 |eof(stru|ct link)|
|00003790| 20 2d 20 31 20 2b 20 62 | 2d 3e 6f 62 6a 5f 73 69 | - 1 + b|->obj_si|
|000037a0| 7a 65 29 3b 0a 0a 20 20 | 20 20 20 20 20 20 69 66 |ze);.. | if|
|000037b0| 20 28 20 6e 65 77 20 3d | 3d 20 4e 55 4c 4c 20 29 | ( new =|= NULL )|
|000037c0| 0a 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |. | |
|000037d0| 20 72 65 74 75 72 6e 20 | 45 52 52 3b 0a 0a 20 20 | return |ERR;.. |
|000037e0| 20 20 20 20 20 20 6d 65 | 6d 63 70 79 28 6e 65 77 | me|mcpy(new|
|000037f0| 2d 3e 64 61 74 61 2c 6f | 62 6a 65 63 74 2c 62 2d |->data,o|bject,b-|
|00003800| 3e 6f 62 6a 5f 73 69 7a | 65 29 3b 0a 20 20 20 20 |>obj_siz|e);. |
|00003810| 20 20 20 20 6e 65 77 2d | 3e 63 6f 75 6e 74 20 3d | new-|>count =|
|00003820| 20 31 3b 0a 0a 20 20 20 | 20 20 20 20 20 6e 65 77 | 1;.. | new|
|00003830| 2d 3e 6e 65 78 74 20 3d | 20 62 2d 3e 66 69 72 73 |->next =| b->firs|
|00003840| 74 3b 0a 20 20 20 20 20 | 20 20 20 62 2d 3e 66 69 |t;. | b->fi|
|00003850| 72 73 74 20 3d 20 6e 65 | 77 3b 0a 0a 20 20 20 20 |rst = ne|w;.. |
|00003860| 20 20 20 20 72 65 74 75 | 72 6e 20 4f 4b 3b 0a 7d | retu|rn OK;.}|
|00003870| 0a 0a 69 6e 74 20 62 61 | 67 5f 72 65 6d 6f 76 65 |..int ba|g_remove|
|00003880| 20 28 62 61 67 20 62 2c | 20 63 6f 6e 73 74 20 76 | (bag b,| const v|
|00003890| 6f 69 64 20 2a 6f 62 6a | 65 63 74 29 0a 7b 0a 20 |oid *obj|ect).{. |
|000038a0| 20 20 20 20 20 20 20 6c | 69 6e 6b 20 70 3b 0a 20 | l|ink p;. |
|000038b0| 20 20 20 20 20 20 20 6c | 69 6e 6b 20 70 72 65 76 | l|ink prev|
|000038c0| 3b 0a 0a 20 20 20 20 20 | 20 20 20 70 20 3d 20 66 |;.. | p = f|
|000038d0| 69 6e 64 28 62 2c 6f 62 | 6a 65 63 74 2c 26 70 72 |ind(b,ob|ject,&pr|
|000038e0| 65 76 29 3b 0a 0a 20 20 | 20 20 20 20 20 20 69 66 |ev);.. | if|
|000038f0| 20 28 20 70 20 3d 3d 20 | 4e 55 4c 4c 20 29 0a 20 | ( p == |NULL ). |
|00003900| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 72 | | r|
|00003910| 65 74 75 72 6e 20 45 52 | 52 3b 0a 0a 20 20 20 20 |eturn ER|R;.. |
|00003920| 20 20 20 20 69 66 20 28 | 20 70 2d 3e 63 6f 75 6e | if (| p->coun|
|00003930| 74 20 3e 20 31 20 29 0a | 20 20 20 20 20 20 20 20 |t > 1 ).| |
|00003940| 7b 0a 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |{. | |
|00003950| 20 20 2d 2d 70 2d 3e 63 | 6f 75 6e 74 3b 0a 20 20 | --p->c|ount;. |
|00003960| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 72 65 | | re|
|00003970| 74 75 72 6e 20 4f 4b 3b | 0a 20 20 20 20 20 20 20 |turn OK;|. |
|00003980| 20 7d 0a 0a 20 20 20 20 | 20 20 20 20 69 66 20 28 | }.. | if (|
|00003990| 20 70 72 65 76 20 3d 3d | 20 4e 55 4c 4c 20 29 0a | prev ==| NULL ).|
|000039a0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000039b0| 62 2d 3e 66 69 72 73 74 | 20 3d 20 70 2d 3e 6e 65 |b->first| = p->ne|
|000039c0| 78 74 3b 0a 20 20 20 20 | 20 20 20 20 65 6c 73 65 |xt;. | else|
|000039d0| 0a 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |. | |
|000039e0| 20 70 72 65 76 2d 3e 6e | 65 78 74 20 3d 20 70 2d | prev->n|ext = p-|
|000039f0| 3e 6e 65 78 74 3b 0a 0a | 20 20 20 20 20 20 20 20 |>next;..| |
|00003a00| 66 72 65 65 28 70 29 3b | 0a 0a 20 20 20 20 20 20 |free(p);|.. |
|00003a10| 20 20 72 65 74 75 72 6e | 20 4f 4b 3b 0a 7d 0a 0a | return| OK;.}..|
|00003a20| 69 6e 74 20 62 61 67 5f | 6d 65 6d 62 65 72 20 28 |int bag_|member (|
|00003a30| 63 6f 6e 73 74 20 62 61 | 67 20 62 2c 20 63 6f 6e |const ba|g b, con|
|00003a40| 73 74 20 76 6f 69 64 20 | 2a 6f 62 6a 65 63 74 29 |st void |*object)|
|00003a50| 0a 7b 0a 20 20 20 20 20 | 20 20 20 72 65 74 75 72 |.{. | retur|
|00003a60| 6e 20 28 20 66 69 6e 64 | 28 62 2c 6f 62 6a 65 63 |n ( find|(b,objec|
|00003a70| 74 2c 4e 55 4c 4c 29 20 | 21 3d 20 4e 55 4c 4c 20 |t,NULL) |!= NULL |
|00003a80| 29 3b 0a 7d 0a 0a 69 6e | 74 20 62 61 67 5f 63 6f |);.}..in|t bag_co|
|00003a90| 75 6e 74 20 28 63 6f 6e | 73 74 20 62 61 67 20 62 |unt (con|st bag b|
|00003aa0| 2c 20 63 6f 6e 73 74 20 | 76 6f 69 64 20 2a 6f 62 |, const |void *ob|
|00003ab0| 6a 65 63 74 29 0a 7b 0a | 20 20 20 20 20 20 20 20 |ject).{.| |
|00003ac0| 6c 69 6e 6b 20 70 20 3d | 20 66 69 6e 64 28 62 2c |link p =| find(b,|
|00003ad0| 6f 62 6a 65 63 74 2c 4e | 55 4c 4c 29 3b 0a 0a 20 |object,N|ULL);.. |
|00003ae0| 20 20 20 20 20 20 20 72 | 65 74 75 72 6e 20 28 20 | r|eturn ( |
|00003af0| 70 20 21 3d 20 4e 55 4c | 4c 20 3f 20 70 2d 3e 63 |p != NUL|L ? p->c|
|00003b00| 6f 75 6e 74 20 3a 20 30 | 20 29 3b 0a 7d 0a 0a 69 |ount : 0| );.}..i|
|00003b10| 6e 74 20 62 61 67 5f 75 | 6e 69 6f 6e 20 28 62 61 |nt bag_u|nion (ba|
|00003b20| 67 20 62 31 2c 20 63 6f | 6e 73 74 20 62 61 67 20 |g b1, co|nst bag |
|00003b30| 62 32 2c 20 63 6f 6e 73 | 74 20 62 61 67 20 62 33 |b2, cons|t bag b3|
|00003b40| 29 0a 7b 0a 20 20 20 20 | 20 20 20 20 6c 69 6e 6b |).{. | link|
|00003b50| 20 70 3b 0a 20 20 20 20 | 20 20 20 20 6c 69 6e 6b | p;. | link|
|00003b60| 20 6e 65 77 3b 0a 0a 20 | 20 20 20 20 20 20 20 2f | new;.. | /|
|00003b70| 2a 20 43 68 65 63 6b 20 | 77 69 74 68 20 62 32 27 |* Check |with b2'|
|00003b80| 73 20 6c 65 6e 67 74 68 | 20 6f 63 63 75 72 73 20 |s length| occurs |
|00003b90| 69 6e 20 62 61 67 5f 63 | 6f 70 79 20 2a 2f 0a 20 |in bag_c|opy */. |
|00003ba0| 20 20 20 20 20 20 20 69 | 66 20 28 20 62 31 2d 3e | i|f ( b1->|
|00003bb0| 6f 62 6a 5f 73 69 7a 65 | 20 21 3d 20 62 33 2d 3e |obj_size| != b3->|
|00003bc0| 6f 62 6a 5f 73 69 7a 65 | 20 29 0a 20 20 20 20 20 |obj_size| ). |
|00003bd0| 20 20 20 20 20 20 20 20 | 20 20 20 72 65 74 75 72 | | retur|
|00003be0| 6e 20 45 52 52 3b 0a 0a | 20 20 20 20 20 20 20 20 |n ERR;..| |
|00003bf0| 69 66 20 28 20 21 62 61 | 67 5f 63 6f 70 79 28 62 |if ( !ba|g_copy(b|
|00003c00| 31 2c 62 32 29 20 29 0a | 20 20 20 20 20 20 20 20 |1,b2) ).| |
|00003c10| 20 20 20 20 20 20 20 20 | 72 65 74 75 72 6e 20 45 | |return E|
|00003c20| 52 52 3b 0a 0a 20 20 20 | 20 20 20 20 20 66 6f 72 |RR;.. | for|
|00003c30| 20 28 20 70 20 3d 20 62 | 33 2d 3e 66 69 72 73 74 | ( p = b|3->first|
|00003c40| 3b 20 70 20 21 3d 20 4e | 55 4c 4c 3b 20 70 20 3d |; p != N|ULL; p =|
|00003c50| 20 70 2d 3e 6e 65 78 74 | 20 29 0a 20 20 20 20 20 | p->next| ). |
|00003c60| 20 20 20 7b 0a 20 20 20 | 20 20 20 20 20 20 20 20 | {. | |
|00003c70| 20 20 20 20 20 6e 65 77 | 20 3d 20 66 69 6e 64 28 | new| = find(|
|00003c80| 62 31 2c 70 2d 3e 64 61 | 74 61 2c 4e 55 4c 4c 29 |b1,p->da|ta,NULL)|
|00003c90| 3b 0a 0a 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |;.. | |
|00003ca0| 20 20 20 69 66 20 28 20 | 6e 65 77 20 21 3d 20 4e | if ( |new != N|
|00003cb0| 55 4c 4c 20 29 0a 20 20 | 20 20 20 20 20 20 20 20 |ULL ). | |
|00003cc0| 20 20 20 20 20 20 7b 0a | 20 20 20 20 20 20 20 20 | {.| |
|00003cd0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00003ce0| 6e 65 77 2d 3e 63 6f 75 | 6e 74 20 2b 3d 20 70 2d |new->cou|nt += p-|
|00003cf0| 3e 63 6f 75 6e 74 3b 0a | 20 20 20 20 20 20 20 20 |>count;.| |
|00003d00| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00003d10| 63 6f 6e 74 69 6e 75 65 | 3b 0a 20 20 20 20 20 20 |continue|;. |
|00003d20| 20 20 20 20 20 20 20 20 | 20 20 7d 0a 0a 20 20 20 | | }.. |
|00003d30| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 6e 65 77 | | new|
|00003d40| 20 3d 20 6d 61 6c 6c 6f | 63 28 73 69 7a 65 6f 66 | = mallo|c(sizeof|
|00003d50| 28 73 74 72 75 63 74 20 | 6c 69 6e 6b 29 20 2d 20 |(struct |link) - |
|00003d60| 31 20 2b 20 62 31 2d 3e | 6f 62 6a 5f 73 69 7a 65 |1 + b1->|obj_size|
|00003d70| 29 3b 0a 0a 20 20 20 20 | 20 20 20 20 20 20 20 20 |);.. | |
|00003d80| 20 20 20 20 69 66 20 28 | 20 6e 65 77 20 3d 3d 20 | if (| new == |
|00003d90| 4e 55 4c 4c 20 29 0a 20 | 20 20 20 20 20 20 20 20 |NULL ). | |
|00003da0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 72 | | r|
|00003db0| 65 74 75 72 6e 20 45 52 | 52 3b 0a 0a 20 20 20 20 |eturn ER|R;.. |
|00003dc0| 20 20 20 20 20 20 20 20 | 20 20 20 20 6d 65 6d 63 | | memc|
|00003dd0| 70 79 28 6e 65 77 2d 3e | 64 61 74 61 2c 70 2d 3e |py(new->|data,p->|
|00003de0| 64 61 74 61 2c 62 31 2d | 3e 6f 62 6a 5f 73 69 7a |data,b1-|>obj_siz|
|00003df0| 65 29 3b 0a 20 20 20 20 | 20 20 20 20 20 20 20 20 |e);. | |
|00003e00| 20 20 20 20 6e 65 77 2d | 3e 63 6f 75 6e 74 20 3d | new-|>count =|
|00003e10| 20 31 3b 0a 0a 20 20 20 | 20 20 20 20 20 20 20 20 | 1;.. | |
|00003e20| 20 20 20 20 20 6e 65 77 | 2d 3e 6e 65 78 74 20 3d | new|->next =|
|00003e30| 20 62 31 2d 3e 66 69 72 | 73 74 3b 0a 20 20 20 20 | b1->fir|st;. |
|00003e40| 20 20 20 20 20 20 20 20 | 20 20 20 20 62 31 2d 3e | | b1->|
|00003e50| 66 69 72 73 74 20 3d 20 | 6e 65 77 3b 0a 20 20 20 |first = |new;. |
|00003e60| 20 20 20 20 20 7d 0a 0a | 20 20 20 20 20 20 20 20 | }..| |
|00003e70| 72 65 74 75 72 6e 20 4f | 4b 3b 0a 7d 0a 0a 69 6e |return O|K;.}..in|
|00003e80| 74 20 62 61 67 5f 69 6e | 74 65 72 73 65 63 74 69 |t bag_in|tersecti|
|00003e90| 6f 6e 20 28 62 61 67 20 | 62 31 2c 20 63 6f 6e 73 |on (bag |b1, cons|
|00003ea0| 74 20 62 61 67 20 62 32 | 2c 20 63 6f 6e 73 74 20 |t bag b2|, const |
|00003eb0| 62 61 67 20 62 33 29 0a | 7b 0a 20 20 20 20 20 20 |bag b3).|{. |
|00003ec0| 20 20 6c 69 6e 6b 20 70 | 3b 0a 20 20 20 20 20 20 | link p|;. |
|00003ed0| 20 20 6c 69 6e 6b 20 71 | 3b 0a 20 20 20 20 20 20 | link q|;. |
|00003ee0| 20 20 6c 69 6e 6b 20 6e | 65 77 3b 0a 0a 20 20 20 | link n|ew;.. |
|00003ef0| 20 20 20 20 20 69 66 20 | 28 20 62 31 2d 3e 6f 62 | if |( b1->ob|
|00003f00| 6a 5f 73 69 7a 65 20 21 | 3d 20 62 32 2d 3e 6f 62 |j_size !|= b2->ob|
|00003f10| 6a 5f 73 69 7a 65 20 7c | 7c 20 62 31 2d 3e 6f 62 |j_size ||| b1->ob|
|00003f20| 6a 5f 73 69 7a 65 20 21 | 3d 20 62 33 2d 3e 6f 62 |j_size !|= b3->ob|
|00003f30| 6a 5f 73 69 7a 65 20 29 | 0a 20 20 20 20 20 20 20 |j_size )|. |
|00003f40| 20 20 20 20 20 20 20 20 | 20 72 65 74 75 72 6e 20 | | return |
|00003f50| 45 52 52 3b 0a 0a 20 20 | 20 20 20 20 20 20 62 61 |ERR;.. | ba|
|00003f60| 67 5f 63 6c 65 61 72 28 | 62 31 29 3b 0a 0a 20 20 |g_clear(|b1);.. |
|00003f70| 20 20 20 20 20 20 66 6f | 72 20 28 20 70 20 3d 20 | fo|r ( p = |
|00003f80| 62 32 2d 3e 66 69 72 73 | 74 3b 20 70 20 21 3d 20 |b2->firs|t; p != |
|00003f90| 4e 55 4c 4c 3b 20 70 20 | 3d 20 70 2d 3e 6e 65 78 |NULL; p |= p->nex|
|00003fa0| 74 20 29 0a 20 20 20 20 | 20 20 20 20 7b 0a 20 20 |t ). | {. |
|00003fb0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 71 20 | | q |
|00003fc0| 3d 20 66 69 6e 64 28 62 | 33 2c 70 2d 3e 64 61 74 |= find(b|3,p->dat|
|00003fd0| 61 2c 4e 55 4c 4c 29 3b | 0a 0a 20 20 20 20 20 20 |a,NULL);|.. |
|00003fe0| 20 20 20 20 20 20 20 20 | 20 20 69 66 20 28 20 71 | | if ( q|
|00003ff0| 20 3d 3d 20 4e 55 4c 4c | 20 29 0a 20 20 20 20 20 | == NULL| ). |
|00004000| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00004010| 20 20 20 63 6f 6e 74 69 | 6e 75 65 3b 0a 0a 20 20 | conti|nue;.. |
|00004020| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 6e 65 | | ne|
|00004030| 77 20 3d 20 6d 61 6c 6c | 6f 63 28 73 69 7a 65 6f |w = mall|oc(sizeo|
|00004040| 66 28 73 74 72 75 63 74 | 20 6c 69 6e 6b 29 20 2d |f(struct| link) -|
|00004050| 20 31 20 2b 20 62 31 2d | 3e 6f 62 6a 5f 73 69 7a | 1 + b1-|>obj_siz|
|00004060| 65 29 3b 0a 0a 20 20 20 | 20 20 20 20 20 20 20 20 |e);.. | |
|00004070| 20 20 20 20 20 69 66 20 | 28 20 6e 65 77 20 3d 3d | if |( new ==|
|00004080| 20 4e 55 4c 4c 20 29 0a | 20 20 20 20 20 20 20 20 | NULL ).| |
|00004090| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000040a0| 72 65 74 75 72 6e 20 45 | 52 52 3b 0a 0a 20 20 20 |return E|RR;.. |
|000040b0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 6d 65 6d | | mem|
|000040c0| 63 70 79 28 6e 65 77 2d | 3e 64 61 74 61 2c 70 2d |cpy(new-|>data,p-|
|000040d0| 3e 64 61 74 61 2c 62 31 | 2d 3e 6f 62 6a 5f 73 69 |>data,b1|->obj_si|
|000040e0| 7a 65 29 3b 0a 20 20 20 | 20 20 20 20 20 20 20 20 |ze);. | |
|000040f0| 20 20 20 20 20 6e 65 77 | 2d 3e 63 6f 75 6e 74 20 | new|->count |
|00004100| 3d 20 28 20 70 2d 3e 63 | 6f 75 6e 74 20 3c 20 71 |= ( p->c|ount < q|
|00004110| 2d 3e 63 6f 75 6e 74 20 | 3f 20 70 2d 3e 63 6f 75 |->count |? p->cou|
|00004120| 6e 74 20 3a 20 71 2d 3e | 63 6f 75 6e 74 20 29 3b |nt : q->|count );|
|00004130| 0a 0a 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |.. | |
|00004140| 20 20 6e 65 77 2d 3e 6e | 65 78 74 20 3d 20 62 31 | new->n|ext = b1|
|00004150| 2d 3e 66 69 72 73 74 3b | 0a 20 20 20 20 20 20 20 |->first;|. |
|00004160| 20 20 20 20 20 20 20 20 | 20 62 31 2d 3e 66 69 72 | | b1->fir|
|00004170| 73 74 20 3d 20 6e 65 77 | 3b 0a 20 20 20 20 20 20 |st = new|;. |
|00004180| 20 20 7d 0a 0a 20 20 20 | 20 20 20 20 20 72 65 74 | }.. | ret|
|00004190| 75 72 6e 20 4f 4b 3b 0a | 7d 0a 0a 69 6e 74 20 62 |urn OK;.|}..int b|
|000041a0| 61 67 5f 64 69 66 66 65 | 72 65 6e 63 65 20 28 62 |ag_diffe|rence (b|
|000041b0| 61 67 20 62 31 2c 20 63 | 6f 6e 73 74 20 62 61 67 |ag b1, c|onst bag|
|000041c0| 20 62 32 2c 20 63 6f 6e | 73 74 20 62 61 67 20 62 | b2, con|st bag b|
|000041d0| 33 29 0a 7b 0a 20 20 20 | 20 20 20 20 20 6c 69 6e |3).{. | lin|
|000041e0| 6b 20 70 3b 0a 20 20 20 | 20 20 20 20 20 6c 69 6e |k p;. | lin|
|000041f0| 6b 20 71 3b 0a 20 20 20 | 20 20 20 20 20 6c 69 6e |k q;. | lin|
|00004200| 6b 20 6e 65 77 3b 0a 0a | 20 20 20 20 20 20 20 20 |k new;..| |
|00004210| 69 66 20 28 20 62 31 2d | 3e 6f 62 6a 5f 73 69 7a |if ( b1-|>obj_siz|
|00004220| 65 20 21 3d 20 62 32 2d | 3e 6f 62 6a 5f 73 69 7a |e != b2-|>obj_siz|
|00004230| 65 20 7c 7c 20 62 31 2d | 3e 6f 62 6a 5f 73 69 7a |e || b1-|>obj_siz|
|00004240| 65 20 21 3d 20 62 33 2d | 3e 6f 62 6a 5f 73 69 7a |e != b3-|>obj_siz|
|00004250| 65 20 29 0a 20 20 20 20 | 20 20 20 20 20 20 20 20 |e ). | |
|00004260| 20 20 20 20 72 65 74 75 | 72 6e 20 45 52 52 3b 0a | retu|rn ERR;.|
|00004270| 0a 20 20 20 20 20 20 20 | 20 62 61 67 5f 63 6c 65 |. | bag_cle|
|00004280| 61 72 28 62 31 29 3b 0a | 0a 20 20 20 20 20 20 20 |ar(b1);.|. |
|00004290| 20 66 6f 72 20 28 20 70 | 20 3d 20 62 32 2d 3e 66 | for ( p| = b2->f|
|000042a0| 69 72 73 74 3b 20 70 20 | 21 3d 20 4e 55 4c 4c 3b |irst; p |!= NULL;|
|000042b0| 20 70 20 3d 20 70 2d 3e | 6e 65 78 74 20 29 0a 20 | p = p->|next ). |
|000042c0| 20 20 20 20 20 20 20 7b | 0a 20 20 20 20 20 20 20 | {|. |
|000042d0| 20 20 20 20 20 20 20 20 | 20 71 20 3d 20 66 69 6e | | q = fin|
|000042e0| 64 28 62 33 2c 70 2d 3e | 64 61 74 61 2c 4e 55 4c |d(b3,p->|data,NUL|
|000042f0| 4c 29 3b 0a 0a 20 20 20 | 20 20 20 20 20 20 20 20 |L);.. | |
|00004300| 20 20 20 20 20 69 66 20 | 28 20 71 20 21 3d 20 4e | if |( q != N|
|00004310| 55 4c 4c 20 26 26 20 70 | 2d 3e 63 6f 75 6e 74 20 |ULL && p|->count |
|00004320| 3c 3d 20 71 2d 3e 63 6f | 75 6e 74 20 29 0a 20 20 |<= q->co|unt ). |
|00004330| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00004340| 20 20 20 20 20 20 63 6f | 6e 74 69 6e 75 65 3b 0a | co|ntinue;.|
|00004350| 0a 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |. | |
|00004360| 20 6e 65 77 20 3d 20 6d | 61 6c 6c 6f 63 28 73 69 | new = m|alloc(si|
|00004370| 7a 65 6f 66 28 73 74 72 | 75 63 74 20 6c 69 6e 6b |zeof(str|uct link|
|00004380| 29 20 2d 20 31 20 2b 20 | 62 31 2d 3e 6f 62 6a 5f |) - 1 + |b1->obj_|
|00004390| 73 69 7a 65 29 3b 0a 0a | 20 20 20 20 20 20 20 20 |size);..| |
|000043a0| 20 20 20 20 20 20 20 20 | 69 66 20 28 20 6e 65 77 | |if ( new|
|000043b0| 20 3d 3d 20 4e 55 4c 4c | 20 29 0a 20 20 20 20 20 | == NULL| ). |
|000043c0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000043d0| 20 20 20 72 65 74 75 72 | 6e 20 45 52 52 3b 0a 0a | retur|n ERR;..|
|000043e0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000043f0| 6d 65 6d 63 70 79 28 6e | 65 77 2d 3e 64 61 74 61 |memcpy(n|ew->data|
|00004400| 2c 70 2d 3e 64 61 74 61 | 2c 62 31 2d 3e 6f 62 6a |,p->data|,b1->obj|
|00004410| 5f 73 69 7a 65 29 3b 0a | 20 20 20 20 20 20 20 20 |_size);.| |
|00004420| 20 20 20 20 20 20 20 20 | 6e 65 77 2d 3e 63 6f 75 | |new->cou|
|00004430| 6e 74 20 3d 20 70 2d 3e | 63 6f 75 6e 74 3b 0a 20 |nt = p->|count;. |
|00004440| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 69 | | i|
|00004450| 66 20 28 20 71 20 21 3d | 20 4e 55 4c 4c 20 29 0a |f ( q !=| NULL ).|
|00004460| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00004470| 20 20 20 20 20 20 20 20 | 6e 65 77 2d 3e 63 6f 75 | |new->cou|
|00004480| 6e 74 20 2d 3d 20 71 2d | 3e 63 6f 75 6e 74 3b 0a |nt -= q-|>count;.|
|00004490| 0a 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |. | |
|000044a0| 20 6e 65 77 2d 3e 6e 65 | 78 74 20 3d 20 62 31 2d | new->ne|xt = b1-|
|000044b0| 3e 66 69 72 73 74 3b 0a | 20 20 20 20 20 20 20 20 |>first;.| |
|000044c0| 20 20 20 20 20 20 20 20 | 62 31 2d 3e 66 69 72 73 | |b1->firs|
|000044d0| 74 20 3d 20 6e 65 77 3b | 0a 20 20 20 20 20 20 20 |t = new;|. |
|000044e0| 20 7d 0a 0a 20 20 20 20 | 20 20 20 20 72 65 74 75 | }.. | retu|
|000044f0| 72 6e 20 4f 4b 3b 0a 7d | 0a 0a 69 6e 74 20 62 61 |rn OK;.}|..int ba|
|00004500| 67 5f 75 6e 69 71 75 65 | 5f 63 6f 75 6e 74 20 28 |g_unique|_count (|
|00004510| 63 6f 6e 73 74 20 62 61 | 67 20 62 29 0a 7b 0a 20 |const ba|g b).{. |
|00004520| 20 20 20 20 20 20 20 69 | 6e 74 20 69 20 3d 20 30 | i|nt i = 0|
|00004530| 3b 0a 20 20 20 20 20 20 | 20 20 6c 69 6e 6b 20 70 |;. | link p|
|00004540| 3b 0a 0a 20 20 20 20 20 | 20 20 20 66 6f 72 20 28 |;.. | for (|
|00004550| 20 70 20 3d 20 62 2d 3e | 66 69 72 73 74 3b 20 70 | p = b->|first; p|
|00004560| 20 21 3d 20 4e 55 4c 4c | 3b 20 70 20 3d 20 70 2d | != NULL|; p = p-|
|00004570| 3e 6e 65 78 74 20 29 0a | 20 20 20 20 20 20 20 20 |>next ).| |
|00004580| 20 20 20 20 20 20 20 20 | 2b 2b 69 3b 0a 0a 20 20 | |++i;.. |
|00004590| 20 20 20 20 20 20 72 65 | 74 75 72 6e 20 69 3b 0a | re|turn i;.|
|000045a0| 7d 0a 0a 69 6e 74 20 62 | 61 67 5f 73 75 62 73 65 |}..int b|ag_subse|
|000045b0| 74 20 28 63 6f 6e 73 74 | 20 62 61 67 20 62 31 2c |t (const| bag b1,|
|000045c0| 20 63 6f 6e 73 74 20 62 | 61 67 20 62 32 29 0a 7b | const b|ag b2).{|
|000045d0| 0a 20 20 20 20 20 20 20 | 20 6c 69 6e 6b 20 70 3b |. | link p;|
|000045e0| 0a 20 20 20 20 20 20 20 | 20 6c 69 6e 6b 20 71 3b |. | link q;|
|000045f0| 0a 0a 20 20 20 20 20 20 | 20 20 69 66 20 28 20 62 |.. | if ( b|
|00004600| 31 2d 3e 6f 62 6a 5f 73 | 69 7a 65 20 21 3d 20 62 |1->obj_s|ize != b|
|00004610| 32 2d 3e 6f 62 6a 5f 73 | 69 7a 65 20 29 0a 20 20 |2->obj_s|ize ). |
|00004620| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 72 65 | | re|
|00004630| 74 75 72 6e 20 30 3b 0a | 0a 20 20 20 20 20 20 20 |turn 0;.|. |
|00004640| 20 2f 2a 20 46 6f 72 20 | 65 76 65 72 79 20 65 6c | /* For |every el|
|00004650| 65 6d 65 6e 74 20 6f 66 | 20 62 31 2c 20 6c 6f 6f |ement of| b1, loo|
|00004660| 6b 20 66 6f 72 20 69 74 | 20 69 6e 20 62 32 20 2a |k for it| in b2 *|
|00004670| 2f 0a 0a 20 20 20 20 20 | 20 20 20 66 6f 72 20 28 |/.. | for (|
|00004680| 20 70 20 3d 20 62 31 2d | 3e 66 69 72 73 74 3b 20 | p = b1-|>first; |
|00004690| 70 20 21 3d 20 4e 55 4c | 4c 3b 20 70 20 3d 20 70 |p != NUL|L; p = p|
|000046a0| 2d 3e 6e 65 78 74 20 29 | 0a 20 20 20 20 20 20 20 |->next )|. |
|000046b0| 20 7b 0a 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | {. | |
|000046c0| 20 20 20 71 20 3d 20 66 | 69 6e 64 28 62 32 2c 70 | q = f|ind(b2,p|
|000046d0| 2d 3e 64 61 74 61 2c 4e | 55 4c 4c 29 3b 0a 0a 20 |->data,N|ULL);.. |
|000046e0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 2f | | /|
|000046f0| 2a 20 49 66 20 69 74 27 | 73 20 6e 6f 74 20 69 6e |* If it'|s not in|
|00004700| 20 62 32 2c 20 6f 72 20 | 69 6e 20 6c 65 73 73 20 | b2, or |in less |
|00004710| 74 69 6d 65 73 2c 20 62 | 31 20 69 73 20 6e 6f 74 |times, b|1 is not|
|00004720| 20 61 20 73 75 62 73 65 | 74 20 2a 2f 0a 20 20 20 | a subse|t */. |
|00004730| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 69 66 20 | | if |
|00004740| 28 20 71 20 3d 3d 20 4e | 55 4c 4c 20 7c 7c 20 70 |( q == N|ULL || p|
|00004750| 2d 3e 63 6f 75 6e 74 20 | 3e 20 71 2d 3e 63 6f 75 |->count |> q->cou|
|00004760| 6e 74 20 29 0a 20 20 20 | 20 20 20 20 20 20 20 20 |nt ). | |
|00004770| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 72 65 74 | | ret|
|00004780| 75 72 6e 20 30 3b 0a 20 | 20 20 20 20 20 20 20 7d |urn 0;. | }|
|00004790| 0a 0a 20 20 20 20 20 20 | 20 20 72 65 74 75 72 6e |.. | return|
|000047a0| 20 31 3b 0a 7d 0a 0a 69 | 6e 74 20 62 61 67 5f 70 | 1;.}..i|nt bag_p|
|000047b0| 72 6f 70 65 72 5f 73 75 | 62 73 65 74 20 28 63 6f |roper_su|bset (co|
|000047c0| 6e 73 74 20 62 61 67 20 | 62 31 2c 20 63 6f 6e 73 |nst bag |b1, cons|
|000047d0| 74 20 62 61 67 20 62 32 | 29 0a 7b 0a 20 20 20 20 |t bag b2|).{. |
|000047e0| 20 20 20 20 6c 69 6e 6b | 20 70 3b 0a 20 20 20 20 | link| p;. |
|000047f0| 20 20 20 20 69 6e 74 20 | 6e 31 20 3d 20 30 3b 0a | int |n1 = 0;.|
|00004800| 20 20 20 20 20 20 20 20 | 69 6e 74 20 6e 32 20 3d | |int n2 =|
|00004810| 20 30 3b 0a 0a 20 20 20 | 20 20 20 20 20 69 66 20 | 0;.. | if |
|00004820| 28 20 62 31 2d 3e 6f 62 | 6a 5f 73 69 7a 65 20 21 |( b1->ob|j_size !|
|00004830| 3d 20 62 32 2d 3e 6f 62 | 6a 5f 73 69 7a 65 20 29 |= b2->ob|j_size )|
|00004840| 0a 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |. | |
|00004850| 20 72 65 74 75 72 6e 20 | 30 3b 0a 0a 20 20 20 20 | return |0;.. |
|00004860| 20 20 20 20 2f 2a 20 46 | 6f 72 20 65 76 65 72 79 | /* F|or every|
|00004870| 20 65 6c 65 6d 65 6e 74 | 20 6f 66 20 62 31 2c 20 | element| of b1, |
|00004880| 6c 6f 6f 6b 20 66 6f 72 | 20 69 74 20 69 6e 20 62 |look for| it in b|
|00004890| 32 20 2a 2f 0a 0a 20 20 | 20 20 20 20 20 20 66 6f |2 */.. | fo|
|000048a0| 72 20 28 20 70 20 3d 20 | 62 31 2d 3e 66 69 72 73 |r ( p = |b1->firs|
|000048b0| 74 3b 20 70 20 21 3d 20 | 4e 55 4c 4c 3b 20 70 20 |t; p != |NULL; p |
|000048c0| 3d 20 70 2d 3e 6e 65 78 | 74 20 29 0a 20 20 20 20 |= p->nex|t ). |
|000048d0| 20 20 20 20 7b 0a 20 20 | 20 20 20 20 20 20 20 20 | {. | |
|000048e0| 20 20 20 20 20 20 2f 2a | 20 49 66 20 69 74 27 73 | /*| If it's|
|000048f0| 20 6e 6f 74 20 69 6e 20 | 62 32 2c 20 62 31 20 69 | not in |b2, b1 i|
|00004900| 73 20 6e 6f 74 20 61 20 | 73 75 62 73 65 74 20 2a |s not a |subset *|
|00004910| 2f 0a 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |/. | |
|00004920| 20 20 69 66 20 28 20 66 | 69 6e 64 28 62 32 2c 70 | if ( f|ind(b2,p|
|00004930| 2d 3e 64 61 74 61 2c 4e | 55 4c 4c 29 20 3d 3d 20 |->data,N|ULL) == |
|00004940| 4e 55 4c 4c 20 29 0a 20 | 20 20 20 20 20 20 20 20 |NULL ). | |
|00004950| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 72 | | r|
|00004960| 65 74 75 72 6e 20 30 3b | 0a 0a 20 20 20 20 20 20 |eturn 0;|.. |
|00004970| 20 20 20 20 20 20 20 20 | 20 20 2f 2a 20 43 6f 75 | | /* Cou|
|00004980| 6e 74 20 74 68 65 20 65 | 6c 65 6d 65 6e 74 73 20 |nt the e|lements |
|00004990| 6f 66 20 62 31 20 2a 2f | 0a 20 20 20 20 20 20 20 |of b1 */|. |
|000049a0| 20 20 20 20 20 20 20 20 | 20 6e 31 20 2b 3d 20 70 | | n1 += p|
|000049b0| 2d 3e 63 6f 75 6e 74 3b | 0a 20 20 20 20 20 20 20 |->count;|. |
|000049c0| 20 7d 0a 0a 20 20 20 20 | 20 20 20 20 2f 2a 20 43 | }.. | /* C|
|000049d0| 6f 75 6e 74 20 74 68 65 | 20 65 6c 65 6d 65 6e 74 |ount the| element|
|000049e0| 73 20 6f 66 20 62 32 20 | 2a 2f 0a 20 20 20 20 20 |s of b2 |*/. |
|000049f0| 20 20 20 6e 32 20 3d 20 | 62 61 67 5f 73 69 7a 65 | n2 = |bag_size|
|00004a00| 28 62 32 29 3b 0a 0a 20 | 20 20 20 20 20 20 20 2f |(b2);.. | /|
|00004a10| 2a 20 49 74 20 69 73 20 | 6f 6e 6c 79 20 61 20 70 |* It is |only a p|
|00004a20| 72 6f 70 65 72 20 73 75 | 62 73 65 74 20 69 66 20 |roper su|bset if |
|00004a30| 74 68 65 72 65 20 61 72 | 65 20 65 6c 65 6d 65 6e |there ar|e elemen|
|00004a40| 74 73 20 6f 66 20 62 32 | 20 6e 6f 74 20 69 6e 20 |ts of b2| not in |
|00004a50| 62 31 20 2a 2f 0a 20 20 | 20 20 20 20 20 20 72 65 |b1 */. | re|
|00004a60| 74 75 72 6e 20 28 20 6e | 31 20 3c 20 6e 32 20 29 |turn ( n|1 < n2 )|
|00004a70| 3b 0a 7d 0a 0a 2f 2a 2d | 2d 2d 2d 2d 2d 2d 2d 2d |;.}../*-|--------|
|00004a80| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004a90| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004aa0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004ab0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004ac0| 2d 2d 2a 2f 0a 0a 23 69 | 66 64 65 66 20 74 65 73 |--*/..#i|fdef tes|
|00004ad0| 74 0a 69 6e 74 20 70 72 | 69 6e 74 20 28 76 6f 69 |t.int pr|int (voi|
|00004ae0| 64 20 2a 70 74 72 2c 20 | 69 6e 74 20 6e 29 0a 7b |d *ptr, |int n).{|
|00004af0| 0a 20 20 20 20 20 20 20 | 20 77 68 69 6c 65 20 28 |. | while (|
|00004b00| 20 6e 2d 2d 20 3e 20 30 | 20 29 0a 20 20 20 20 20 | n-- > 0| ). |
|00004b10| 20 20 20 20 20 20 20 20 | 20 20 20 70 72 69 6e 74 | | print|
|00004b20| 66 28 22 25 64 20 22 2c | 2a 28 69 6e 74 20 2a 29 |f("%d ",|*(int *)|
|00004b30| 70 74 72 29 3b 0a 20 20 | 20 20 20 20 20 20 72 65 |ptr);. | re|
|00004b40| 74 75 72 6e 20 53 54 41 | 54 55 53 5f 43 4f 4e 54 |turn STA|TUS_CONT|
|00004b50| 49 4e 55 45 3b 0a 7d 0a | 0a 76 6f 69 64 20 62 61 |INUE;.}.|.void ba|
|00004b60| 67 5f 64 75 6d 70 20 28 | 62 61 67 20 62 29 0a 7b |g_dump (|bag b).{|
|00004b70| 0a 20 20 20 20 20 20 20 | 20 70 72 69 6e 74 66 28 |. | printf(|
|00004b80| 22 62 61 67 3a 20 22 29 | 3b 0a 20 20 20 20 20 20 |"bag: ")|;. |
|00004b90| 20 20 62 61 67 5f 69 74 | 65 72 61 74 65 28 62 2c | bag_it|erate(b,|
|00004ba0| 70 72 69 6e 74 29 3b 0a | 20 20 20 20 20 20 20 20 |print);.| |
|00004bb0| 70 75 74 63 68 61 72 28 | 27 5c 6e 27 29 3b 0a 7d |putchar(|'\n');.}|
|00004bc0| 0a 23 65 6e 64 69 66 0a | 0a 2f 2a 2d 2d 2d 2d 2d |.#endif.|./*-----|
|00004bd0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004be0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004bf0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004c00| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004c10| 2d 2d 2d 2d 2d 2d 2a 2f | 0a 0a 23 69 66 64 65 66 |------*/|..#ifdef|
|00004c20| 20 74 65 73 74 0a 0a 23 | 64 65 66 69 6e 65 20 42 | test..#|define B|
|00004c30| 55 46 4c 45 4e 20 32 35 | 35 0a 0a 69 6e 74 20 6d |UFLEN 25|5..int m|
|00004c40| 61 69 6e 20 28 76 6f 69 | 64 29 0a 7b 0a 20 20 20 |ain (voi|d).{. |
|00004c50| 20 20 20 20 20 63 68 61 | 72 20 62 75 66 5b 42 55 | cha|r buf[BU|
|00004c60| 46 4c 45 4e 5d 3b 0a 20 | 20 20 20 20 20 20 20 69 |FLEN];. | i|
|00004c70| 6e 74 20 69 2c 20 6a 2c | 20 6b 2c 20 6e 75 6d 3b |nt i, j,| k, num;|
|00004c80| 0a 20 20 20 20 20 20 20 | 20 62 61 67 20 62 5b 31 |. | bag b[1|
|00004c90| 30 5d 3b 0a 0a 20 20 20 | 20 20 20 20 20 66 6f 72 |0];.. | for|
|00004ca0| 20 28 20 69 20 3d 20 30 | 3b 20 69 20 3c 20 31 30 | ( i = 0|; i < 10|
|00004cb0| 3b 20 2b 2b 69 20 29 0a | 20 20 20 20 20 20 20 20 |; ++i ).| |
|00004cc0| 20 20 20 20 20 20 20 20 | 62 5b 69 5d 20 3d 20 62 | |b[i] = b|
|00004cd0| 61 67 5f 6e 65 77 28 73 | 69 7a 65 6f 66 28 69 6e |ag_new(s|izeof(in|
|00004ce0| 74 29 29 3b 0a 0a 20 20 | 20 20 20 20 20 20 66 6f |t));.. | fo|
|00004cf0| 72 20 28 20 3b 20 3b 20 | 29 0a 20 20 20 20 20 20 |r ( ; ; |). |
|00004d00| 20 20 7b 0a 20 20 20 20 | 20 20 20 20 20 20 20 20 | {. | |
|00004d10| 20 20 20 20 70 72 69 6e | 74 66 28 22 3e 22 29 3b | prin|tf(">");|
|00004d20| 0a 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |. | |
|00004d30| 20 66 67 65 74 73 28 62 | 75 66 2c 42 55 46 4c 45 | fgets(b|uf,BUFLE|
|00004d40| 4e 2c 73 74 64 69 6e 29 | 3b 0a 0a 20 20 20 20 20 |N,stdin)|;.. |
|00004d50| 20 20 20 20 20 20 20 20 | 20 20 20 69 66 20 28 20 | | if ( |
|00004d60| 62 75 66 5b 30 5d 20 3d | 3d 20 27 5c 6e 27 20 7c |buf[0] =|= '\n' ||
|00004d70| 7c 20 62 75 66 5b 30 5d | 20 3d 3d 20 27 5c 30 27 || buf[0]| == '\0'|
|00004d80| 20 29 0a 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | ). | |
|00004d90| 20 20 20 20 20 20 20 20 | 20 20 20 63 6f 6e 74 69 | | conti|
|00004da0| 6e 75 65 3b 0a 20 20 20 | 20 20 20 20 20 20 20 20 |nue;. | |
|00004db0| 20 20 20 20 20 65 6c 73 | 65 20 69 66 20 28 20 73 | els|e if ( s|
|00004dc0| 73 63 61 6e 66 28 62 75 | 66 2c 22 63 6c 65 61 72 |scanf(bu|f,"clear|
|00004dd0| 20 25 31 64 22 2c 26 69 | 29 20 3d 3d 20 31 20 29 | %1d",&i|) == 1 )|
|00004de0| 0a 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |. | |
|00004df0| 20 20 20 20 20 20 20 20 | 20 62 61 67 5f 63 6c 65 | | bag_cle|
|00004e00| 61 72 28 62 5b 69 5d 29 | 3b 0a 20 20 20 20 20 20 |ar(b[i])|;. |
|00004e10| 20 20 20 20 20 20 20 20 | 20 20 65 6c 73 65 20 69 | | else i|
|00004e20| 66 20 28 20 73 73 63 61 | 6e 66 28 62 75 66 2c 22 |f ( ssca|nf(buf,"|
|00004e30| 63 6f 70 79 20 25 31 64 | 20 25 31 64 22 2c 26 69 |copy %1d| %1d",&i|
|00004e40| 2c 26 6a 29 20 3d 3d 20 | 32 20 29 0a 20 20 20 20 |,&j) == |2 ). |
|00004e50| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00004e60| 20 20 20 20 62 61 67 5f | 63 6f 70 79 28 62 5b 69 | bag_|copy(b[i|
|00004e70| 5d 2c 62 5b 6a 5d 29 3b | 0a 20 20 20 20 20 20 20 |],b[j]);|. |
|00004e80| 20 20 20 20 20 20 20 20 | 20 65 6c 73 65 20 69 66 | | else if|
|00004e90| 20 28 20 73 73 63 61 6e | 66 28 62 75 66 2c 22 65 | ( sscan|f(buf,"e|
|00004ea0| 71 75 61 6c 20 25 31 64 | 20 25 31 64 22 2c 26 69 |qual %1d| %1d",&i|
|00004eb0| 2c 26 6a 29 20 3d 3d 20 | 32 20 29 0a 20 20 20 20 |,&j) == |2 ). |
|00004ec0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00004ed0| 20 20 20 20 70 72 69 6e | 74 66 28 22 25 73 5c 6e | prin|tf("%s\n|
|00004ee0| 22 2c 28 62 61 67 5f 65 | 71 75 61 6c 28 62 5b 69 |",(bag_e|qual(b[i|
|00004ef0| 5d 2c 62 5b 6a 5d 29 20 | 3f 20 22 79 65 73 22 20 |],b[j]) |? "yes" |
|00004f00| 3a 20 22 6e 6f 22 29 29 | 3b 0a 20 20 20 20 20 20 |: "no"))|;. |
|00004f10| 20 20 20 20 20 20 20 20 | 20 20 65 6c 73 65 20 69 | | else i|
|00004f20| 66 20 28 20 73 73 63 61 | 6e 66 28 62 75 66 2c 22 |f ( ssca|nf(buf,"|
|00004f30| 65 6d 70 74 79 20 25 31 | 64 22 2c 26 69 29 20 3d |empty %1|d",&i) =|
|00004f40| 3d 20 31 20 29 0a 20 20 | 20 20 20 20 20 20 20 20 |= 1 ). | |
|00004f50| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 70 72 | | pr|
|00004f60| 69 6e 74 66 28 22 25 73 | 5c 6e 22 2c 28 62 61 67 |intf("%s|\n",(bag|
|00004f70| 5f 65 6d 70 74 79 28 62 | 5b 69 5d 29 20 3f 20 22 |_empty(b|[i]) ? "|
|00004f80| 79 65 73 22 20 3a 20 22 | 6e 6f 22 29 29 3b 0a 20 |yes" : "|no"));. |
|00004f90| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 65 | | e|
|00004fa0| 6c 73 65 20 69 66 20 28 | 20 73 73 63 61 6e 66 28 |lse if (| sscanf(|
|00004fb0| 62 75 66 2c 22 73 69 7a | 65 20 25 31 64 22 2c 26 |buf,"siz|e %1d",&|
|00004fc0| 69 29 20 3d 3d 20 31 20 | 29 0a 20 20 20 20 20 20 |i) == 1 |). |
|00004fd0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00004fe0| 20 20 70 72 69 6e 74 66 | 28 22 25 64 5c 6e 22 2c | printf|("%d\n",|
|00004ff0| 62 61 67 5f 73 69 7a 65 | 28 62 5b 69 5d 29 29 3b |bag_size|(b[i]));|
|00005000| 0a 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |. | |
|00005010| 20 65 6c 73 65 20 69 66 | 20 28 20 73 73 63 61 6e | else if| ( sscan|
|00005020| 66 28 62 75 66 2c 22 64 | 75 6d 70 20 25 31 64 22 |f(buf,"d|ump %1d"|
|00005030| 2c 26 69 29 20 3d 3d 20 | 31 20 29 0a 20 20 20 20 |,&i) == |1 ). |
|00005040| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00005050| 20 20 20 20 62 61 67 5f | 64 75 6d 70 28 62 5b 69 | bag_|dump(b[i|
|00005060| 5d 29 3b 0a 20 20 20 20 | 20 20 20 20 20 20 20 20 |]);. | |
|00005070| 20 20 20 20 65 6c 73 65 | 20 69 66 20 28 20 73 73 | else| if ( ss|
|00005080| 63 61 6e 66 28 62 75 66 | 2c 22 61 64 64 20 25 31 |canf(buf|,"add %1|
|00005090| 64 20 25 64 22 2c 26 69 | 2c 26 6e 75 6d 29 20 3d |d %d",&i|,&num) =|
|000050a0| 3d 20 32 20 29 0a 20 20 | 20 20 20 20 20 20 20 20 |= 2 ). | |
|000050b0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 62 61 | | ba|
|000050c0| 67 5f 61 64 64 28 62 5b | 69 5d 2c 26 6e 75 6d 29 |g_add(b[|i],&num)|
|000050d0| 3b 0a 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |;. | |
|000050e0| 20 20 65 6c 73 65 20 69 | 66 20 28 20 73 73 63 61 | else i|f ( ssca|
|000050f0| 6e 66 28 62 75 66 2c 22 | 72 65 6d 6f 76 65 20 25 |nf(buf,"|remove %|
|00005100| 31 64 20 25 64 22 2c 26 | 69 2c 26 6e 75 6d 29 20 |1d %d",&|i,&num) |
|00005110| 3d 3d 20 32 20 29 0a 20 | 20 20 20 20 20 20 20 20 |== 2 ). | |
|00005120| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 62 | | b|
|00005130| 61 67 5f 72 65 6d 6f 76 | 65 28 62 5b 69 5d 2c 26 |ag_remov|e(b[i],&|
|00005140| 6e 75 6d 29 3b 0a 20 20 | 20 20 20 20 20 20 20 20 |num);. | |
|00005150| 20 20 20 20 20 20 65 6c | 73 65 20 69 66 20 28 20 | el|se if ( |
|00005160| 73 73 63 61 6e 66 28 62 | 75 66 2c 22 6d 65 6d 62 |sscanf(b|uf,"memb|
|00005170| 65 72 20 25 31 64 20 25 | 64 22 2c 26 69 2c 26 6e |er %1d %|d",&i,&n|
|00005180| 75 6d 29 20 3d 3d 20 32 | 20 29 0a 20 20 20 20 20 |um) == 2| ). |
|00005190| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000051a0| 20 20 20 70 72 69 6e 74 | 66 28 22 25 73 5c 6e 22 | print|f("%s\n"|
|000051b0| 2c 20 62 61 67 5f 6d 65 | 6d 62 65 72 28 62 5b 69 |, bag_me|mber(b[i|
|000051c0| 5d 2c 26 6e 75 6d 29 20 | 3f 20 22 79 65 73 22 20 |],&num) |? "yes" |
|000051d0| 3a 20 22 6e 6f 22 29 3b | 0a 20 20 20 20 20 20 20 |: "no");|. |
|000051e0| 20 20 20 20 20 20 20 20 | 20 65 6c 73 65 20 69 66 | | else if|
|000051f0| 20 28 20 73 73 63 61 6e | 66 28 62 75 66 2c 22 63 | ( sscan|f(buf,"c|
|00005200| 6f 75 6e 74 20 25 31 64 | 20 25 64 22 2c 26 69 2c |ount %1d| %d",&i,|
|00005210| 26 6e 75 6d 29 20 3d 3d | 20 32 20 29 0a 20 20 20 |&num) ==| 2 ). |
|00005220| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00005230| 20 20 20 20 20 70 72 69 | 6e 74 66 28 22 25 64 5c | pri|ntf("%d\|
|00005240| 6e 22 2c 20 62 61 67 5f | 63 6f 75 6e 74 28 62 5b |n", bag_|count(b[|
|00005250| 69 5d 2c 26 6e 75 6d 29 | 29 3b 0a 20 20 20 20 20 |i],&num)|);. |
|00005260| 20 20 20 20 20 20 20 20 | 20 20 20 65 6c 73 65 20 | | else |
|00005270| 69 66 20 28 20 73 73 63 | 61 6e 66 28 62 75 66 2c |if ( ssc|anf(buf,|
|00005280| 22 75 6e 69 6f 6e 20 25 | 31 64 20 25 31 64 20 25 |"union %|1d %1d %|
|00005290| 31 64 22 2c 26 69 2c 26 | 6a 2c 26 6b 29 20 3d 3d |1d",&i,&|j,&k) ==|
|000052a0| 20 33 20 29 0a 20 20 20 | 20 20 20 20 20 20 20 20 | 3 ). | |
|000052b0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 62 61 67 | | bag|
|000052c0| 5f 75 6e 69 6f 6e 28 62 | 5b 69 5d 2c 62 5b 6a 5d |_union(b|[i],b[j]|
|000052d0| 2c 62 5b 6b 5d 29 3b 0a | 20 20 20 20 20 20 20 20 |,b[k]);.| |
|000052e0| 20 20 20 20 20 20 20 20 | 65 6c 73 65 20 69 66 20 | |else if |
|000052f0| 28 20 73 73 63 61 6e 66 | 28 62 75 66 2c 22 69 6e |( sscanf|(buf,"in|
|00005300| 74 65 72 73 65 63 74 69 | 6f 6e 20 25 31 64 20 25 |tersecti|on %1d %|
|00005310| 31 64 20 25 31 64 22 2c | 26 69 2c 26 6a 2c 26 6b |1d %1d",|&i,&j,&k|
|00005320| 29 20 3d 3d 20 33 20 29 | 0a 20 20 20 20 20 20 20 |) == 3 )|. |
|00005330| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00005340| 20 62 61 67 5f 69 6e 74 | 65 72 73 65 63 74 69 6f | bag_int|ersectio|
|00005350| 6e 28 62 5b 69 5d 2c 62 | 5b 6a 5d 2c 62 5b 6b 5d |n(b[i],b|[j],b[k]|
|00005360| 29 3b 0a 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |);. | |
|00005370| 20 20 20 65 6c 73 65 20 | 69 66 20 28 20 73 73 63 | else |if ( ssc|
|00005380| 61 6e 66 28 62 75 66 2c | 22 64 69 66 66 65 72 65 |anf(buf,|"differe|
|00005390| 6e 63 65 20 25 31 64 20 | 25 31 64 20 25 31 64 22 |nce %1d |%1d %1d"|
|000053a0| 2c 26 69 2c 26 6a 2c 26 | 6b 29 20 3d 3d 20 33 20 |,&i,&j,&|k) == 3 |
|000053b0| 29 0a 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |). | |
|000053c0| 20 20 20 20 20 20 20 20 | 20 20 62 61 67 5f 64 69 | | bag_di|
|000053d0| 66 66 65 72 65 6e 63 65 | 28 62 5b 69 5d 2c 62 5b |fference|(b[i],b[|
|000053e0| 6a 5d 2c 62 5b 6b 5d 29 | 3b 0a 20 20 20 20 20 20 |j],b[k])|;. |
|000053f0| 20 20 20 20 20 20 20 20 | 20 20 65 6c 73 65 20 69 | | else i|
|00005400| 66 20 28 20 73 73 63 61 | 6e 66 28 62 75 66 2c 22 |f ( ssca|nf(buf,"|
|00005410| 75 6e 69 71 75 65 20 63 | 6f 75 6e 74 20 25 31 64 |unique c|ount %1d|
|00005420| 22 2c 26 69 29 20 3d 3d | 20 31 20 29 0a 20 20 20 |",&i) ==| 1 ). |
|00005430| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00005440| 20 20 20 20 20 70 72 69 | 6e 74 66 28 22 25 64 5c | pri|ntf("%d\|
|00005450| 6e 22 2c 20 62 61 67 5f | 75 6e 69 71 75 65 5f 63 |n", bag_|unique_c|
|00005460| 6f 75 6e 74 28 62 5b 69 | 5d 29 29 3b 0a 20 20 20 |ount(b[i|]));. |
|00005470| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 65 6c 73 | | els|
|00005480| 65 20 69 66 20 28 20 73 | 73 63 61 6e 66 28 62 75 |e if ( s|scanf(bu|
|00005490| 66 2c 22 73 75 62 73 65 | 74 20 25 31 64 20 25 31 |f,"subse|t %1d %1|
|000054a0| 64 22 2c 26 69 2c 26 6a | 29 20 3d 3d 20 32 20 29 |d",&i,&j|) == 2 )|
|000054b0| 0a 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |. | |
|000054c0| 20 20 20 20 20 20 20 20 | 20 70 72 69 6e 74 66 28 | | printf(|
|000054d0| 22 25 73 5c 6e 22 2c 20 | 62 61 67 5f 73 75 62 73 |"%s\n", |bag_subs|
|000054e0| 65 74 28 62 5b 69 5d 2c | 62 5b 6a 5d 29 20 3f 20 |et(b[i],|b[j]) ? |
|000054f0| 22 79 65 73 22 20 3a 20 | 22 6e 6f 22 29 3b 0a 20 |"yes" : |"no");. |
|00005500| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 65 | | e|
|00005510| 6c 73 65 20 69 66 20 28 | 20 73 73 63 61 6e 66 28 |lse if (| sscanf(|
|00005520| 62 75 66 2c 22 70 72 6f | 70 65 72 20 73 75 62 73 |buf,"pro|per subs|
|00005530| 65 74 20 25 31 64 20 25 | 31 64 22 2c 26 69 2c 26 |et %1d %|1d",&i,&|
|00005540| 6a 29 20 3d 3d 20 32 20 | 29 0a 20 20 20 20 20 20 |j) == 2 |). |
|00005550| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00005560| 20 20 70 72 69 6e 74 66 | 28 22 25 73 5c 6e 22 2c | printf|("%s\n",|
|00005570| 20 62 61 67 5f 70 72 6f | 70 65 72 5f 73 75 62 73 | bag_pro|per_subs|
|00005580| 65 74 28 62 5b 69 5d 2c | 62 5b 6a 5d 29 20 3f 20 |et(b[i],|b[j]) ? |
|00005590| 22 79 65 73 22 20 3a 20 | 22 6e 6f 22 29 3b 0a 20 |"yes" : |"no");. |
|000055a0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 65 | | e|
|000055b0| 6c 73 65 20 69 66 20 28 | 20 73 74 72 6e 63 6d 70 |lse if (| strncmp|
|000055c0| 28 62 75 66 2c 22 68 65 | 6c 70 22 2c 34 29 20 3d |(buf,"he|lp",4) =|
|000055d0| 3d 20 30 20 29 0a 20 20 | 20 20 20 20 20 20 20 20 |= 0 ). | |
|000055e0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 70 72 | | pr|
|000055f0| 69 6e 74 66 28 0a 20 20 | 20 20 20 20 20 20 20 20 |intf(. | |
|00005600| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00005610| 20 20 20 20 20 20 22 63 | 6c 65 61 72 20 69 5c 6e | "c|lear i\n|
|00005620| 22 0a 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |". | |
|00005630| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00005640| 20 20 22 63 6f 70 79 20 | 69 20 6a 5c 6e 22 0a 20 | "copy |i j\n". |
|00005650| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00005660| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 22 | | "|
|00005670| 65 71 75 61 6c 20 69 20 | 6a 5c 6e 22 0a 20 20 20 |equal i |j\n". |
|00005680| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00005690| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 22 65 6d | | "em|
|000056a0| 70 74 79 20 69 5c 6e 22 | 0a 20 20 20 20 20 20 20 |pty i\n"|. |
|000056b0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000056c0| 20 20 20 20 20 20 20 20 | 20 22 73 69 7a 65 20 69 | | "size i|
|000056d0| 5c 6e 22 0a 20 20 20 20 | 20 20 20 20 20 20 20 20 |\n". | |
|000056e0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000056f0| 20 20 20 20 22 64 75 6d | 70 20 69 5c 6e 22 0a 20 | "dum|p i\n". |
|00005700| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00005710| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 22 | | "|
|00005720| 61 64 64 20 69 20 6e 5c | 6e 22 0a 20 20 20 20 20 |add i n\|n". |
|00005730| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00005740| 20 20 20 20 20 20 20 20 | 20 20 20 22 72 65 6d 6f | | "remo|
|00005750| 76 65 20 69 20 6e 5c 6e | 22 0a 20 20 20 20 20 20 |ve i n\n|". |
|00005760| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00005770| 20 20 20 20 20 20 20 20 | 20 20 22 6d 65 6d 62 65 | | "membe|
|00005780| 72 20 69 20 6e 5c 6e 22 | 0a 20 20 20 20 20 20 20 |r i n\n"|. |
|00005790| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000057a0| 20 20 20 20 20 20 20 20 | 20 22 63 6f 75 6e 74 20 | | "count |
|000057b0| 69 20 6e 5c 6e 22 0a 20 | 20 20 20 20 20 20 20 20 |i n\n". | |
|000057c0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000057d0| 20 20 20 20 20 20 20 22 | 75 6e 69 6f 6e 20 69 20 | "|union i |
|000057e0| 6a 20 6b 5c 6e 22 0a 20 | 20 20 20 20 20 20 20 20 |j k\n". | |
|000057f0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00005800| 20 20 20 20 20 20 20 22 | 69 6e 74 65 72 73 65 63 | "|intersec|
|00005810| 74 69 6f 6e 20 69 20 6a | 20 6b 5c 6e 22 0a 20 20 |tion i j| k\n". |
|00005820| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00005830| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 22 64 | | "d|
|00005840| 69 66 66 65 72 65 6e 63 | 65 20 69 20 6a 20 6b 5c |ifferenc|e i j k\|
|00005850| 6e 22 0a 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |n". | |
|00005860| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00005870| 20 20 20 22 75 6e 69 71 | 75 65 20 63 6f 75 6e 74 | "uniq|ue count|
|00005880| 20 69 5c 6e 22 0a 20 20 | 20 20 20 20 20 20 20 20 | i\n". | |
|00005890| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000058a0| 20 20 20 20 20 20 22 73 | 75 62 73 65 74 20 69 20 | "s|ubset i |
|000058b0| 6a 5c 6e 22 0a 20 20 20 | 20 20 20 20 20 20 20 20 |j\n". | |
|000058c0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000058d0| 20 20 20 20 20 22 70 72 | 6f 70 65 72 20 73 75 62 | "pr|oper sub|
|000058e0| 73 65 74 20 69 20 6a 5c | 6e 22 0a 20 20 20 20 20 |set i j\|n". |
|000058f0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00005900| 20 20 20 20 20 20 20 20 | 20 29 3b 0a 20 20 20 20 | | );. |
|00005910| 20 20 20 20 20 20 20 20 | 20 20 20 20 65 6c 73 65 | | else|
|00005920| 20 69 66 20 28 20 73 74 | 72 6e 63 6d 70 28 62 75 | if ( st|rncmp(bu|
|00005930| 66 2c 22 71 75 69 74 22 | 2c 34 29 20 3d 3d 20 30 |f,"quit"|,4) == 0|
|00005940| 20 29 0a 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | ). | |
|00005950| 20 20 20 20 20 20 20 20 | 20 20 20 62 72 65 61 6b | | break|
|00005960| 3b 0a 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |;. | |
|00005970| 20 20 65 6c 73 65 0a 20 | 20 20 20 20 20 20 20 20 | else. | |
|00005980| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 70 | | p|
|00005990| 72 69 6e 74 66 28 22 4d | 69 73 74 61 6b 65 5c 6e |rintf("M|istake\n|
|000059a0| 22 29 3b 0a 20 20 20 20 | 20 20 20 20 7d 0a 0a 20 |");. | }.. |
|000059b0| 20 20 20 20 20 20 20 70 | 72 69 6e 74 66 28 22 44 | p|rintf("D|
|000059c0| 65 6c 65 74 69 6e 67 20 | 62 5b 30 2d 39 5d 5c 6e |eleting |b[0-9]\n|
|000059d0| 22 29 3b 0a 20 20 20 20 | 20 20 20 20 66 6f 72 20 |");. | for |
|000059e0| 28 20 69 20 3d 20 30 3b | 20 69 20 3c 20 31 30 3b |( i = 0;| i < 10;|
|000059f0| 20 2b 2b 69 20 29 0a 20 | 20 20 20 20 20 20 20 20 | ++i ). | |
|00005a00| 20 20 20 20 20 20 20 62 | 61 67 5f 66 72 65 65 28 | b|ag_free(|
|00005a10| 62 5b 69 5d 29 3b 0a 0a | 20 20 20 20 20 20 20 20 |b[i]);..| |
|00005a20| 72 65 74 75 72 6e 20 30 | 3b 0a 7d 0a 0a 23 65 6e |return 0|;.}..#en|
|00005a30| 64 69 66 0a 46 69 6c 65 | 44 61 74 61 82 42 69 74 |dif.File|Data.Bit|
|00005a40| 73 65 74 00 00 00 00 00 | 69 16 00 00 41 ff ff ff |set.....|i...A...|
|00005a50| 79 bc 33 8d 03 00 f9 34 | 2f 2a 20 20 20 20 20 20 |y.3....4|/* |
|00005a60| 3e 20 43 2e 42 69 74 73 | 65 74 20 2d 20 42 69 74 |> C.Bits|et - Bit|
|00005a70| 73 65 74 20 64 61 74 61 | 20 74 79 70 65 20 2a 2f |set data| type */|
|00005a80| 0a 0a 23 69 6e 63 6c 75 | 64 65 20 3c 73 74 64 64 |..#inclu|de <stdd|
|00005a90| 65 66 2e 68 3e 0a 23 69 | 6e 63 6c 75 64 65 20 3c |ef.h>.#i|nclude <|
|00005aa0| 73 74 64 6c 69 62 2e 68 | 3e 0a 23 69 6e 63 6c 75 |stdlib.h|>.#inclu|
|00005ab0| 64 65 20 3c 73 74 72 69 | 6e 67 2e 68 3e 0a 23 69 |de <stri|ng.h>.#i|
|00005ac0| 6e 63 6c 75 64 65 20 22 | 62 69 74 73 65 74 2e 68 |nclude "|bitset.h|
|00005ad0| 22 0a 0a 23 69 66 64 65 | 66 20 74 65 73 74 0a 23 |"..#ifde|f test.#|
|00005ae0| 69 6e 63 6c 75 64 65 20 | 3c 73 74 64 69 6f 2e 68 |include |<stdio.h|
|00005af0| 3e 0a 23 65 6e 64 69 66 | 0a 0a 2f 2a 20 52 65 74 |>.#endif|../* Ret|
|00005b00| 75 72 6e 20 76 61 6c 75 | 65 73 20 66 72 6f 6d 20 |urn valu|es from |
|00005b10| 66 75 6e 63 74 69 6f 6e | 73 20 2a 2f 0a 0a 23 64 |function|s */..#d|
|00005b20| 65 66 69 6e 65 20 4f 4b | 20 20 20 20 20 20 31 0a |efine OK| 1.|
|00005b30| 23 64 65 66 69 6e 65 20 | 45 52 52 20 20 20 20 20 |#define |ERR |
|00005b40| 30 0a 0a 23 64 65 66 69 | 6e 65 20 43 48 41 52 5f |0..#defi|ne CHAR_|
|00005b50| 42 49 54 5f 53 48 49 46 | 54 20 20 33 0a 23 64 65 |BIT_SHIF|T 3.#de|
|00005b60| 66 69 6e 65 20 43 48 41 | 52 5f 42 49 54 5f 4d 41 |fine CHA|R_BIT_MA|
|00005b70| 53 4b 20 20 20 30 78 30 | 37 0a 0a 2f 2a 20 47 65 |SK 0x0|7../* Ge|
|00005b80| 6e 65 72 61 6c 20 63 6f | 6d 70 6f 6e 65 6e 74 20 |neral co|mponent |
|00005b90| 72 6f 75 74 69 6e 65 73 | 20 2a 2f 0a 0a 62 69 74 |routines| */..bit|
|00005ba0| 73 65 74 20 62 73 65 74 | 5f 6e 65 77 20 28 69 6e |set bset|_new (in|
|00005bb0| 74 20 62 69 74 73 29 0a | 7b 0a 20 20 20 20 20 20 |t bits).|{. |
|00005bc0| 20 20 62 69 74 73 65 74 | 20 62 3b 0a 20 20 20 20 | bitset| b;. |
|00005bd0| 20 20 20 20 69 6e 74 20 | 62 79 74 65 73 20 3d 20 | int |bytes = |
|00005be0| 28 20 62 69 74 73 20 3e | 3e 20 43 48 41 52 5f 42 |( bits >|> CHAR_B|
|00005bf0| 49 54 5f 53 48 49 46 54 | 20 29 0a 20 20 20 20 20 |IT_SHIFT| ). |
|00005c00| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 2b 20 28 | | + (|
|00005c10| 20 28 20 62 69 74 73 20 | 26 20 43 48 41 52 5f 42 | ( bits |& CHAR_B|
|00005c20| 49 54 5f 4d 41 53 4b 20 | 29 20 3f 20 31 20 3a 20 |IT_MASK |) ? 1 : |
|00005c30| 30 20 29 3b 0a 0a 20 20 | 20 20 20 20 20 20 2f 2a |0 );.. | /*|
|00005c40| 20 43 72 65 61 74 65 20 | 61 20 7a 65 72 6f 2d 66 | Create |a zero-f|
|00005c50| 69 6c 6c 65 64 20 62 69 | 74 6d 61 70 20 28 61 6c |illed bi|tmap (al|
|00005c60| 6c 20 75 6e 73 65 74 29 | 20 2a 2f 0a 0a 20 20 20 |l unset)| */.. |
|00005c70| 20 20 20 20 20 62 20 3d | 20 63 61 6c 6c 6f 63 28 | b =| calloc(|
|00005c80| 20 73 69 7a 65 6f 66 28 | 73 74 72 75 63 74 20 62 | sizeof(|struct b|
|00005c90| 69 74 73 65 74 29 20 2d | 20 31 20 2b 20 62 79 74 |itset) -| 1 + byt|
|00005ca0| 65 73 2c 20 31 20 29 3b | 0a 0a 20 20 20 20 20 20 |es, 1 );|.. |
|00005cb0| 20 20 69 66 20 28 20 62 | 20 3d 3d 20 4e 55 4c 4c | if ( b| == NULL|
|00005cc0| 20 29 0a 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | ). | |
|00005cd0| 20 20 20 72 65 74 75 72 | 6e 20 4e 55 4c 4c 3b 0a | retur|n NULL;.|
|00005ce0| 0a 20 20 20 20 20 20 20 | 20 62 2d 3e 62 69 74 73 |. | b->bits|
|00005cf0| 20 3d 20 62 69 74 73 3b | 0a 20 20 20 20 20 20 20 | = bits;|. |
|00005d00| 20 62 2d 3e 62 79 74 65 | 73 20 3d 20 62 79 74 65 | b->byte|s = byte|
|00005d10| 73 3b 0a 0a 20 20 20 20 | 20 20 20 20 72 65 74 75 |s;.. | retu|
|00005d20| 72 6e 20 62 3b 0a 7d 0a | 0a 76 6f 69 64 20 62 73 |rn b;.}.|.void bs|
|00005d30| 65 74 5f 66 72 65 65 20 | 28 62 69 74 73 65 74 20 |et_free |(bitset |
|00005d40| 62 29 0a 7b 0a 20 20 20 | 20 20 20 20 20 66 72 65 |b).{. | fre|
|00005d50| 65 28 62 29 3b 0a 7d 0a | 0a 76 6f 69 64 20 62 73 |e(b);.}.|.void bs|
|00005d60| 65 74 5f 63 6c 65 61 72 | 20 28 62 69 74 73 65 74 |et_clear| (bitset|
|00005d70| 20 62 29 0a 7b 0a 20 20 | 20 20 20 20 20 20 6d 65 | b).{. | me|
|00005d80| 6d 73 65 74 28 62 2d 3e | 62 69 74 6d 61 70 2c 30 |mset(b->|bitmap,0|
|00005d90| 2c 62 2d 3e 62 79 74 65 | 73 29 3b 0a 7d 0a 0a 69 |,b->byte|s);.}..i|
|00005da0| 6e 74 20 62 73 65 74 5f | 63 6f 70 79 20 28 62 69 |nt bset_|copy (bi|
|00005db0| 74 73 65 74 20 62 31 2c | 20 62 69 74 73 65 74 20 |tset b1,| bitset |
|00005dc0| 62 32 29 0a 7b 0a 20 20 | 20 20 20 20 20 20 69 66 |b2).{. | if|
|00005dd0| 20 28 20 62 31 2d 3e 62 | 69 74 73 20 21 3d 20 62 | ( b1->b|its != b|
|00005de0| 32 2d 3e 62 69 74 73 20 | 29 0a 20 20 20 20 20 20 |2->bits |). |
|00005df0| 20 20 20 20 20 20 20 20 | 20 20 72 65 74 75 72 6e | | return|
|00005e00| 20 45 52 52 3b 0a 0a 20 | 20 20 20 20 20 20 20 6d | ERR;.. | m|
|00005e10| 65 6d 63 70 79 28 62 31 | 2d 3e 62 69 74 6d 61 70 |emcpy(b1|->bitmap|
|00005e20| 2c 62 32 2d 3e 62 69 74 | 6d 61 70 2c 62 31 2d 3e |,b2->bit|map,b1->|
|00005e30| 62 79 74 65 73 29 3b 0a | 0a 20 20 20 20 20 20 20 |bytes);.|. |
|00005e40| 20 72 65 74 75 72 6e 20 | 4f 4b 3b 0a 7d 0a 0a 69 | return |OK;.}..i|
|00005e50| 6e 74 20 62 73 65 74 5f | 65 71 75 61 6c 20 28 62 |nt bset_|equal (b|
|00005e60| 69 74 73 65 74 20 62 31 | 2c 20 62 69 74 73 65 74 |itset b1|, bitset|
|00005e70| 20 62 32 29 0a 7b 0a 20 | 20 20 20 20 20 20 20 69 | b2).{. | i|
|00005e80| 66 20 28 20 62 31 2d 3e | 62 69 74 73 20 21 3d 20 |f ( b1->|bits != |
|00005e90| 62 32 2d 3e 62 69 74 73 | 20 29 0a 20 20 20 20 20 |b2->bits| ). |
|00005ea0| 20 20 20 20 20 20 20 20 | 20 20 20 72 65 74 75 72 | | retur|
|00005eb0| 6e 20 30 3b 0a 0a 20 20 | 20 20 20 20 20 20 72 65 |n 0;.. | re|
|00005ec0| 74 75 72 6e 20 28 20 6d | 65 6d 63 6d 70 28 62 31 |turn ( m|emcmp(b1|
|00005ed0| 2d 3e 62 69 74 6d 61 70 | 2c 62 32 2d 3e 62 69 74 |->bitmap|,b2->bit|
|00005ee0| 6d 61 70 2c 62 31 2d 3e | 62 79 74 65 73 29 20 29 |map,b1->|bytes) )|
|00005ef0| 3b 0a 7d 0a 0a 69 6e 74 | 20 62 73 65 74 5f 65 6d |;.}..int| bset_em|
|00005f00| 70 74 79 20 28 62 69 74 | 73 65 74 20 62 29 0a 7b |pty (bit|set b).{|
|00005f10| 0a 20 20 20 20 20 20 20 | 20 69 6e 74 20 69 3b 0a |. | int i;.|
|00005f20| 0a 20 20 20 20 20 20 20 | 20 66 6f 72 20 28 20 69 |. | for ( i|
|00005f30| 20 3d 20 30 3b 20 69 20 | 3c 20 62 2d 3e 62 79 74 | = 0; i |< b->byt|
|00005f40| 65 73 3b 20 2b 2b 69 20 | 29 0a 20 20 20 20 20 20 |es; ++i |). |
|00005f50| 20 20 20 20 20 20 20 20 | 20 20 69 66 20 28 20 62 | | if ( b|
|00005f60| 2d 3e 62 69 74 6d 61 70 | 5b 69 5d 20 21 3d 20 30 |->bitmap|[i] != 0|
|00005f70| 20 29 0a 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | ). | |
|00005f80| 20 20 20 20 20 20 20 20 | 20 20 20 72 65 74 75 72 | | retur|
|00005f90| 6e 20 30 3b 0a 0a 20 20 | 20 20 20 20 20 20 72 65 |n 0;.. | re|
|00005fa0| 74 75 72 6e 20 31 3b 0a | 7d 0a 0a 69 6e 74 20 62 |turn 1;.|}..int b|
|00005fb0| 73 65 74 5f 73 69 7a 65 | 20 28 62 69 74 73 65 74 |set_size| (bitset|
|00005fc0| 20 62 29 0a 7b 0a 20 20 | 20 20 20 20 20 20 69 6e | b).{. | in|
|00005fd0| 74 20 69 3b 0a 20 20 20 | 20 20 20 20 20 75 6e 73 |t i;. | uns|
|00005fe0| 69 67 6e 65 64 20 63 68 | 61 72 20 62 79 74 65 3b |igned ch|ar byte;|
|00005ff0| 0a 20 20 20 20 20 20 20 | 20 69 6e 74 20 63 6f 75 |. | int cou|
|00006000| 6e 74 20 3d 20 30 3b 0a | 0a 20 20 20 20 20 20 20 |nt = 0;.|. |
|00006010| 20 66 6f 72 20 28 20 69 | 20 3d 20 30 3b 20 69 20 | for ( i| = 0; i |
|00006020| 3c 20 62 2d 3e 62 79 74 | 65 73 3b 20 2b 2b 69 20 |< b->byt|es; ++i |
|00006030| 29 0a 20 20 20 20 20 20 | 20 20 7b 0a 20 20 20 20 |). | {. |
|00006040| 20 20 20 20 20 20 20 20 | 20 20 20 20 62 79 74 65 | | byte|
|00006050| 20 3d 20 62 2d 3e 62 69 | 74 6d 61 70 5b 69 5d 3b | = b->bi|tmap[i];|
|00006060| 0a 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |. | |
|00006070| 20 77 68 69 6c 65 20 28 | 20 62 79 74 65 20 21 3d | while (| byte !=|
|00006080| 20 30 20 29 0a 20 20 20 | 20 20 20 20 20 20 20 20 | 0 ). | |
|00006090| 20 20 20 20 20 7b 0a 20 | 20 20 20 20 20 20 20 20 | {. | |
|000060a0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 69 | | i|
|000060b0| 66 20 28 20 28 20 62 79 | 74 65 20 26 20 31 20 29 |f ( ( by|te & 1 )|
|000060c0| 20 21 3d 20 30 20 29 0a | 20 20 20 20 20 20 20 20 | != 0 ).| |
|000060d0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000060e0| 20 20 20 20 20 20 20 20 | 2b 2b 63 6f 75 6e 74 3b | |++count;|
|000060f0| 0a 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |. | |
|00006100| 20 20 20 20 20 20 20 20 | 20 62 79 74 65 20 3e 3e | | byte >>|
|00006110| 3d 20 31 3b 0a 20 20 20 | 20 20 20 20 20 20 20 20 |= 1;. | |
|00006120| 20 20 20 20 20 7d 0a 20 | 20 20 20 20 20 20 20 7d | }. | }|
|00006130| 0a 0a 20 20 20 20 20 20 | 20 20 72 65 74 75 72 6e |.. | return|
|00006140| 20 63 6f 75 6e 74 3b 0a | 7d 0a 0a 69 6e 74 20 62 | count;.|}..int b|
|00006150| 73 65 74 5f 69 74 65 72 | 61 74 65 20 28 62 69 74 |set_iter|ate (bit|
|00006160| 73 65 74 20 62 2c 20 69 | 6e 74 20 28 2a 70 72 6f |set b, i|nt (*pro|
|00006170| 63 65 73 73 29 28 69 6e | 74 29 29 0a 7b 0a 20 20 |cess)(in|t)).{. |
|00006180| 20 20 20 20 20 20 69 6e | 74 20 69 3b 0a 20 20 20 | in|t i;. |
|00006190| 20 20 20 20 20 69 6e 74 | 20 72 65 74 3b 0a 20 20 | int| ret;. |
|000061a0| 20 20 20 20 20 20 75 6e | 73 69 67 6e 65 64 20 63 | un|signed c|
|000061b0| 68 61 72 20 62 79 74 65 | 3b 0a 20 20 20 20 20 20 |har byte|;. |
|000061c0| 20 20 69 6e 74 20 63 75 | 72 72 65 6e 74 3b 0a 0a | int cu|rrent;..|
|000061d0| 20 20 20 20 20 20 20 20 | 66 6f 72 20 28 20 69 20 | |for ( i |
|000061e0| 3d 20 30 3b 20 69 20 3c | 20 62 2d 3e 62 79 74 65 |= 0; i <| b->byte|
|000061f0| 73 3b 20 2b 2b 69 20 29 | 0a 20 20 20 20 20 20 20 |s; ++i )|. |
|00006200| 20 7b 0a 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | {. | |
|00006210| 20 20 20 63 75 72 72 65 | 6e 74 20 3d 20 69 20 3c | curre|nt = i <|
|00006220| 3c 20 43 48 41 52 5f 42 | 49 54 5f 53 48 49 46 54 |< CHAR_B|IT_SHIFT|
|00006230| 3b 0a 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |;. | |
|00006240| 20 20 62 79 74 65 20 3d | 20 62 2d 3e 62 69 74 6d | byte =| b->bitm|
|00006250| 61 70 5b 69 5d 3b 0a 20 | 20 20 20 20 20 20 20 20 |ap[i];. | |
|00006260| 20 20 20 20 20 20 20 77 | 68 69 6c 65 20 28 20 62 | w|hile ( b|
|00006270| 79 74 65 20 21 3d 20 30 | 20 29 0a 20 20 20 20 20 |yte != 0| ). |
|00006280| 20 20 20 20 20 20 20 20 | 20 20 20 7b 0a 20 20 20 | | {. |
|00006290| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000062a0| 20 20 20 20 20 69 66 20 | 28 20 28 20 62 79 74 65 | if |( ( byte|
|000062b0| 20 26 20 31 20 29 20 21 | 3d 20 30 20 29 0a 20 20 | & 1 ) !|= 0 ). |
|000062c0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000062d0| 20 20 20 20 20 20 7b 0a | 20 20 20 20 20 20 20 20 | {.| |
|000062e0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000062f0| 20 20 20 20 20 20 20 20 | 72 65 74 20 3d 20 28 2a | |ret = (*|
|00006300| 70 72 6f 63 65 73 73 29 | 28 63 75 72 72 65 6e 74 |process)|(current|
|00006310| 29 3b 0a 0a 20 20 20 20 | 20 20 20 20 20 20 20 20 |);.. | |
|00006320| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00006330| 20 20 20 20 2f 2a 20 4e | 6f 6e 2d 7a 65 72 6f 20 | /* N|on-zero |
|00006340| 3d 3e 20 73 74 6f 70 20 | 70 72 6f 63 65 73 73 69 |=> stop |processi|
|00006350| 6e 67 20 68 65 72 65 20 | 2a 2f 0a 20 20 20 20 20 |ng here |*/. |
|00006360| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00006370| 20 20 20 20 20 20 20 20 | 20 20 20 2f 2a 20 4e 65 | | /* Ne|
|00006380| 67 61 74 69 76 65 20 3d | 3e 20 41 62 6e 6f 72 6d |gative =|> Abnorm|
|00006390| 61 6c 20 28 65 72 72 6f | 72 29 20 74 65 72 6d 69 |al (erro|r) termi|
|000063a0| 6e 61 74 69 6f 6e 20 2a | 2f 0a 0a 20 20 20 20 20 |nation *|/.. |
|000063b0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000063c0| 20 20 20 20 20 20 20 20 | 20 20 20 69 66 20 28 20 | | if ( |
|000063d0| 72 65 74 20 21 3d 20 30 | 20 29 0a 20 20 20 20 20 |ret != 0| ). |
|000063e0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000063f0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
+--------+-------------------------+-------------------------+--------+--------+
Only 25.0 KB of data is shown above.