DataMuseum.dk

Presents historical artifacts from the history of:

Commodore CBM-900

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Commodore CBM-900

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦bf1cfe7ba⟧

    Length: 8445 (0x20fd)
    Notes: UNIX file
    Names: »diff1.c«

Derivation

└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
    └─⟦f4b8d8c84⟧ UNIX V7 Filesystem
        └─ ⟦this⟧ »cmd/diff/diff1.c« 

Hex Dump

0x0000…0020 2f 2a 0a 20 2a 20 50 61 72 74 73 20 6f 66 20 64 69 66 66 20 74 68 61 74 20 64 65 70 65 6e 64 20   ┆/*  * Parts of diff that depend ┆
0x0020…0040 6f 6e 20 74 68 65 20 6d 69 6e 69 6d 61 6c 20 63 6f 6d 6d 6f 6e 0a 20 2a 20 73 75 62 73 65 71 75   ┆on the minimal common  * subsequ┆
0x0040…0060 65 6e 63 65 20 61 6c 67 6f 72 69 74 68 6d 20 6f 66 20 48 69 72 73 63 68 62 65 72 67 2e 0a 20 2a   ┆ence algorithm of Hirschberg.  *┆
0x0060…0080 2f 0a 0a 23 69 6e 63 6c 75 64 65 20 22 64 69 66 66 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 6d   ┆/  #include "diff.h" #include <m┆
0x0080…00a0 64 61 74 61 2e 68 3e 0a 0a 23 64 65 66 69 6e 65 09 55 09 75 6e 73 69 67 6e 65 64 09 2f 2a 20 53   ┆data.h>  #define U unsigned /* S┆
0x00a0…00c0 68 6f 72 74 20 66 6f 72 6d 20 2a 2f 0a 23 64 65 66 69 6e 65 09 4e 53 42 52 4b 09 35 31 32 09 09   ┆hort form */ #define NSBRK 512  ┆
0x00c0…00e0 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73 62 72 6b 20 2d 2d 20 61 6c 6c 6f 63 61 74 6f   ┆/* Size of each sbrk -- allocato┆
0x00e0…0100 72 20 2a 2f 0a 74 79 70 65 64 65 66 09 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 68 61 73 68 5f 74   ┆r */ typedef unsigned int hash_t┆
0x0100…0120 3b 0a 23 69 66 09 4e 42 50 43 48 41 52 3d 3d 31 36 09 09 09 2f 2a 20 53 68 6f 72 74 20 61 64 64   ┆; #if NBPCHAR==16   /* Short add┆
0x0120…0140 72 65 73 73 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 09 4c 41 53 54 09 28 28   ┆ress machines */ #define LAST ((┆
0x0140…0160 76 61 64 64 72 5f 74 29 4d 49 4e 49 4e 54 29 0a 74 79 70 65 64 65 66 09 75 6e 73 69 67 6e 65 64   ┆vaddr_t)MININT) typedef unsigned┆
0x0160…0180 20 73 68 6f 72 74 20 76 61 64 64 72 5f 74 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 09 4c 41   ┆ short vaddr_t; #else #define LA┆
0x0180…01a0 53 54 09 28 28 76 61 64 64 72 5f 74 29 4d 49 4e 4c 4f 4e 47 29 0a 74 79 70 65 64 65 66 09 75 6e   ┆ST ((vaddr_t)MINLONG) typedef un┆
0x01a0…01c0 73 69 67 6e 65 64 20 6c 6f 6e 67 20 76 61 64 64 72 5f 74 3b 0a 23 65 6e 64 69 66 0a 09 09 09 09   ┆signed long vaddr_t; #endif     ┆
0x01c0…01e0 2f 2a 20 41 73 73 75 6d 65 20 4d 49 4e 49 4e 54 20 69 73 20 61 20 73 69 6e 67 6c 65 20 62 69 74   ┆/* Assume MININT is a single bit┆
0x01e0…0200 20 2a 2f 0a 0a 73 74 61 74 69 63 09 63 68 61 72 09 70 61 72 74 69 61 6c 5b 5d 20 3d 20 22 64 69   ┆ */  static char partial[] = "di┆
0x0200…0220 66 66 3a 20 70 61 72 74 69 61 6c 20 6c 69 6e 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 25 73   ┆ff: partial line omitted from %s┆
0x0220…0240 5c 6e 22 3b 0a 73 74 61 74 69 63 09 63 68 61 72 09 6a 61 63 6b 70 6f 74 5b 5d 20 3d 20 22 4a 61   ┆\n"; static char jackpot[] = "Ja┆
0x0240…0260 63 6b 70 6f 74 20 25 64 20 25 64 5c 6e 22 3b 0a 0a 2f 2a 0a 20 2a 20 54 61 62 6c 65 73 20 66 6f   ┆ckpot %d %d\n";  /*  * Tables fo┆
0x0260…0280 72 20 74 68 65 20 74 61 62 6c 65 2d 64 72 69 76 65 6e 20 43 52 43 31 36 20 61 6c 67 6f 72 69 74   ┆r the table-driven CRC16 algorit┆
0x0280…02a0 68 6d 2e 0a 20 2a 20 54 68 69 73 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20 68 61 73 68 20   ┆hm.  * This is used as the hash ┆
0x02a0…02c0 6f 66 20 74 68 65 20 69 6e 70 75 74 20 6c 69 6e 65 73 0a 20 2a 20 61 6e 64 20 73 68 6f 75 6c 64   ┆of the input lines  * and should┆
0x02c0…02e0 20 62 65 20 72 65 6c 61 74 69 76 65 6c 79 20 75 6e 69 66 6f 72 6d 20 73 74 61 74 69 73 74 69 63   ┆ be relatively uniform statistic┆
0x02e0…0300 61 6c 6c 79 2e 0a 20 2a 2f 0a 73 74 61 74 69 63 09 68 61 73 68 5f 74 20 63 72 63 74 61 62 31 5b   ┆ally.  */ static hash_t crctab1[┆
0x0300…0320 5d 20 3d 20 7b 0a 09 30 30 30 30 30 30 30 2c 09 30 31 34 30 33 30 31 2c 09 30 31 34 30 36 30 31   ┆] = {  0000000, 0140301, 0140601┆
0x0320…0340 2c 09 30 30 30 30 35 30 30 2c 0a 09 30 31 34 31 34 30 31 2c 09 30 30 30 31 37 30 30 2c 09 30 30   ┆, 0000500,  0141401, 0001700, 00┆
0x0340…0360 30 31 32 30 30 2c 09 30 31 34 31 31 30 31 2c 0a 09 30 31 34 33 30 30 31 2c 09 30 30 30 33 33 30   ┆01200, 0141101,  0143001, 000330┆
0x0360…0380 30 2c 09 30 30 30 33 36 30 30 2c 09 30 31 34 33 35 30 31 2c 0a 09 30 30 30 32 34 30 30 2c 09 30   ┆0, 0003600, 0143501,  0002400, 0┆
0x0380…03a0 31 34 32 37 30 31 2c 09 30 31 34 32 32 30 31 2c 09 30 30 30 32 31 30 30 2c 09 0a 7d 3b 0a 0a 73   ┆142701, 0142201, 0002100,  };  s┆
0x03a0…03c0 74 61 74 69 63 09 68 61 73 68 5f 74 20 63 72 63 74 61 62 32 5b 5d 20 3d 20 7b 0a 09 30 30 30 30   ┆tatic hash_t crctab2[] = {  0000┆
0x03c0…03e0 30 30 30 2c 09 30 31 34 36 30 30 31 2c 09 30 31 35 34 30 30 31 2c 09 30 30 31 32 30 30 30 2c 0a   ┆000, 0146001, 0154001, 0012000, ┆
0x03e0…0400 09 30 31 37 30 30 30 31 2c 09 30 30 33 36 30 30 30 2c 09 30 30 32 34 30 30 30 2c 09 30 31 36 32   ┆ 0170001, 0036000, 0024000, 0162┆
0x0400…0420 30 30 31 2c 0a 09 30 31 32 30 30 30 31 2c 09 30 30 36 36 30 30 30 2c 09 30 30 37 34 30 30 30 2c   ┆001,  0120001, 0066000, 0074000,┆
0x0420…0440 09 30 31 33 32 30 30 31 2c 0a 09 30 30 35 30 30 30 30 2c 09 30 31 31 36 30 30 31 2c 09 30 31 30   ┆ 0132001,  0050000, 0116001, 010┆
0x0440…0460 34 30 30 31 2c 09 30 30 34 33 30 30 30 2c 0a 7d 3b 0a 0a 74 79 70 65 64 65 66 09 73 74 72 75 63   ┆4001, 0043000, };  typedef struc┆
0x0460…0480 74 09 4c 49 4e 45 53 20 7b 0a 09 76 61 64 64 72 5f 74 09 6c 5f 6e 75 6d 3b 0a 09 68 61 73 68 5f   ┆t LINES {  vaddr_t l_num;  hash_┆
0x0480…04a0 74 09 6c 5f 68 61 73 68 3b 0a 7d 09 4c 49 4e 45 53 3b 0a 0a 2f 2a 0a 20 2a 20 41 20 4b 2d 63 61   ┆t l_hash; } LINES;  /*  * A K-ca┆
0x04a0…04c0 6e 64 69 64 61 74 65 20 65 6e 74 72 79 0a 20 2a 2f 0a 74 79 70 65 64 65 66 09 73 74 72 75 63 74   ┆ndidate entry  */ typedef struct┆
0x04c0…04e0 09 43 41 4e 44 20 7b 0a 09 76 61 64 64 72 5f 74 09 61 3b 0a 09 76 61 64 64 72 5f 74 09 62 3b 0a   ┆ CAND {  vaddr_t a;  vaddr_t b; ┆
0x04e0…0500 09 73 74 72 75 63 74 20 43 41 4e 44 09 2a 70 72 65 76 3b 0a 7d 09 43 41 4e 44 3b 0a 0a 69 6e 74   ┆ struct CAND *prev; } CAND;  int┆
0x0500…0520 09 63 6f 6d 70 61 72 28 29 3b 0a 68 61 73 68 5f 74 09 69 6e 68 61 73 68 28 29 3b 0a 43 41 4e 44   ┆ compar(); hash_t inhash(); CAND┆
0x0520…0540 09 2a 63 61 6e 64 69 64 61 74 65 28 29 3b 0a 0a 63 68 61 72 09 6c 69 6e 65 31 5b 4c 53 49 5a 45   ┆ *candidate();  char line1[LSIZE┆
0x0540…0560 5d 3b 09 09 2f 2a 20 46 69 72 73 74 20 66 69 6c 65 27 73 20 69 6e 70 75 74 20 6c 69 6e 65 20 62   ┆];  /* First file's input line b┆
0x0560…0580 75 66 66 65 72 20 2a 2f 0a 63 68 61 72 09 6c 69 6e 65 32 5b 4c 53 49 5a 45 5d 3b 0a 63 68 61 72   ┆uffer */ char line2[LSIZE]; char┆
0x0580…05a0 09 6e 6f 6d 65 6d 5b 5d 20 3d 20 22 4f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 3b 0a 0a 69 6e 74   ┆ nomem[] = "Out of memory";  int┆
0x05a0…05c0 09 2a 61 6c 6c 72 70 3b 0a 69 6e 74 09 2a 61 6c 6c 65 70 3b 0a 0a 2f 2a 0a 20 2a 20 43 61 6c 6c   ┆ *allrp; int *allep;  /*  * Call┆
0x05c0…05e0 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 68 65 75 72 69 73 74 20 76 65 72 73 69 6f 6e 20 6f 66 0a   ┆ed to invoke heurist version of ┆
0x05e0…0600 20 2a 20 64 69 66 66 2e 0a 20 2a 2f 0a 64 69 66 66 68 28 61 72 67 73 29 0a 63 68 61 72 20 2a 2a   ┆ * diff.  */ diffh(args) char **┆
0x0600…0620 61 72 67 73 3b 0a 7b 0a 09 65 78 65 63 76 28 22 2f 75 73 72 2f 6c 69 62 2f 64 69 66 66 68 22 2c   ┆args; {  execv("/usr/lib/diffh",┆
0x0620…0640 20 61 72 67 73 29 3b 0a 09 63 65 72 72 28 22 2d 68 20 64 6f 65 73 6e 27 74 20 77 6f 72 6b 22 29   ┆ args);  cerr("-h doesn't work")┆
0x0640…0660 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 52 6f 75 74 69 6e 65 20 69 73 20 67 69 76 65 6e 20 74 77 6f 20   ┆; }  /*  * Routine is given two ┆
0x0660…0680 66 69 6c 65 20 73 74 72 65 61 6d 73 20 61 6e 64 0a 20 2a 20 69 74 20 70 72 6f 64 75 63 65 73 20   ┆file streams and  * it produces ┆
0x0680…06a0 74 68 65 20 6d 69 6e 69 6d 61 6c 20 6c 69 73 74 20 6f 66 0a 20 2a 20 64 69 66 66 65 72 65 6e 63   ┆the minimal list of  * differenc┆
0x06a0…06c0 65 73 20 62 79 20 74 68 65 20 48 69 72 73 63 68 62 65 72 67 20 61 6c 67 6f 72 69 74 68 6d 0a 20   ┆es by the Hirschberg algorithm  ┆
0x06c0…06e0 2a 2f 0a 64 69 66 66 28 66 70 31 2c 20 66 70 32 29 0a 46 49 4c 45 20 2a 66 70 31 2c 20 2a 66 70   ┆*/ diff(fp1, fp2) FILE *fp1, *fp┆
0x06e0…0700 32 3b 0a 7b 0a 09 72 65 67 69 73 74 65 72 20 68 61 73 68 5f 74 20 68 61 73 68 3b 0a 09 72 65 67   ┆2; {  register hash_t hash;  reg┆
0x0700…0720 69 73 74 65 72 20 76 61 64 64 72 5f 74 20 6c 6e 31 3b 0a 09 72 65 67 69 73 74 65 72 20 76 61 64   ┆ister vaddr_t ln1;  register vad┆
0x0720…0740 64 72 5f 74 20 6c 6e 32 3b 0a 09 72 65 67 69 73 74 65 72 20 4c 49 4e 45 53 20 2a 56 3b 0a 09 72   ┆dr_t ln2;  register LINES *V;  r┆
0x0740…0760 65 67 69 73 74 65 72 20 76 61 64 64 72 5f 74 20 2a 50 3b 0a 09 72 65 67 69 73 74 65 72 20 76 61   ┆egister vaddr_t *P;  register va┆
0x0760…0780 64 64 72 5f 74 20 2a 45 3b 0a 09 72 65 67 69 73 74 65 72 20 76 61 64 64 72 5f 74 20 2a 4b 3b 0a   ┆ddr_t *E;  register vaddr_t *K; ┆
0x0780…07a0 09 72 65 67 69 73 74 65 72 20 76 61 64 64 72 5f 74 20 2a 4a 3b 0a 0a 09 2f 2a 0a 09 20 2a 20 43   ┆ register vaddr_t *J;   /*   * C┆
0x07a0…07c0 61 6c 63 75 6c 61 74 65 20 74 68 65 20 68 61 73 68 20 74 61 62 6c 65 73 20 66 6f 72 0a 09 20 2a   ┆alculate the hash tables for   *┆
0x07c0…07e0 20 74 68 65 20 73 65 63 6f 6e 64 20 66 69 6c 65 0a 09 20 2a 20 61 6e 64 20 73 6f 72 74 20 77 69   ┆ the second file   * and sort wi┆
0x07e0…0800 74 68 20 68 61 73 68 20 61 73 20 70 72 69 6d 61 72 79 20 6b 65 79 2c 0a 09 15 20 2a 20 6c 69 6e   ┆th hash as primary key,    * lin┆
0x0800…0820 65 2d 6e 75 6d 62 65 72 20 73 65 63 6f 6e 64 61 72 79 2e 0a 09 20 2a 2f 0a 09 56 20 3d 20 28 4c   ┆e-number secondary.   */  V = (L┆
0x0820…0840 49 4e 45 53 20 2a 29 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 20 28 4c 49 4e 45 53 29 29 3b 0a 09 56   ┆INES *)alloc(sizeof (LINES));  V┆
0x0840…0860 2d 3e 6c 5f 6e 75 6d 20 3d 20 56 2d 3e 6c 5f 68 61 73 68 20 3d 20 30 3b 09 2f 2a 20 75 6e 6e 65   ┆->l_num = V->l_hash = 0; /* unne┆
0x0860…0880 65 64 65 64 3f 20 2a 2f 0a 09 6c 6e 32 20 3d 20 30 3b 0a 09 77 68 69 6c 65 20 28 28 68 61 73 68   ┆eded? */  ln2 = 0;  while ((hash┆
0x0880…08a0 20 3d 20 69 6e 68 61 73 68 28 66 70 32 2c 20 66 6e 32 29 29 20 21 3d 20 30 29 20 7b 0a 09 09 72   ┆ = inhash(fp2, fn2)) != 0) {   r┆
0x08a0…08c0 65 67 69 73 74 65 72 20 4c 49 4e 45 53 20 2a 56 70 3b 0a 0a 09 09 56 70 20 3d 20 28 4c 49 4e 45   ┆egister LINES *Vp;    Vp = (LINE┆
0x08c0…08e0 53 20 2a 29 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 20 28 4c 49 4e 45 53 29 29 3b 0a 09 09 56 70 2d   ┆S *)alloc(sizeof (LINES));   Vp-┆
0x08e0…0900 3e 6c 5f 6e 75 6d 20 3d 20 2b 2b 6c 6e 32 3b 0a 09 09 56 70 2d 3e 6c 5f 68 61 73 68 20 3d 20 68   ┆>l_num = ++ln2;   Vp->l_hash = h┆
0x0900…0920 61 73 68 3b 0a 09 7d 0a 09 71 73 6f 72 74 28 56 2b 31 2c 20 28 69 6e 74 29 6c 6e 32 2c 20 73 69   ┆ash;  }  qsort(V+1, (int)ln2, si┆
0x0920…0940 7a 65 6f 66 20 28 4c 49 4e 45 53 29 2c 20 63 6f 6d 70 61 72 29 3b 0a 09 2f 2a 0a 09 20 2a 20 52   ┆zeof (LINES), compar);  /*   * R┆
0x0940…0960 65 61 64 20 66 69 72 73 74 20 66 69 6c 65 2c 20 62 75 69 6c 64 69 6e 67 0a 09 20 2a 20 61 20 74   ┆ead first file, building   * a t┆
0x0960…0980 61 62 6c 65 20 70 65 72 20 6c 69 6e 65 20 6f 66 0a 09 20 2a 20 70 6f 69 6e 74 65 72 73 20 74 6f   ┆able per line of   * pointers to┆
0x0980…09a0 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 73 0a 09 20 2a 20 6f 66 20 74 68 65 20 68   ┆ the first elements   * of the h┆
0x09a0…09c0 61 73 68 2d 65 71 75 69 76 61 6c 65 6e 74 20 6c 69 73 74 20 69 6e 20 66 69 6c 65 32 2e 0a 09 20   ┆ash-equivalent list in file2.   ┆
0x09c0…09e0 2a 2f 0a 09 50 20 3d 20 28 76 61 64 64 72 5f 74 20 2a 29 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 20   ┆*/  P = (vaddr_t *)alloc(sizeof ┆
0x09e0…0a00 28 76 61 64 64 72 5f 74 29 29 3b 0a 09 66 6f 72 20 28 6c 6e 31 3d 30 3b 20 28 68 61 73 68 20 3d   ┆(vaddr_t));  for (ln1=0; (hash =┆
0x0a00…0a20 20 69 6e 68 61 73 68 28 66 70 31 2c 20 66 6e 31 29 29 21 3d 30 3b 20 6c 6e 31 2b 2b 29 20 7b 0a   ┆ inhash(fp1, fn1))!=0; ln1++) { ┆
0x0a20…0a40 09 09 72 65 67 69 73 74 65 72 20 76 61 64 64 72 5f 74 20 2a 50 70 3b 0a 09 09 72 65 67 69 73 74   ┆  register vaddr_t *Pp;   regist┆
0x0a40…0a60 65 72 20 76 61 64 64 72 5f 74 20 6c 6f 2c 20 6d 69 64 2c 20 68 69 3b 0a 0a 09 09 50 70 20 3d 20   ┆er vaddr_t lo, mid, hi;    Pp = ┆
0x0a60…0a80 28 76 61 64 64 72 5f 74 20 2a 29 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 20 28 76 61 64 64 72 5f 74   ┆(vaddr_t *)alloc(sizeof (vaddr_t┆
0x0a80…0aa0 29 29 3b 0a 09 09 6c 6f 20 3d 20 31 3b 0a 09 09 68 69 20 3d 20 6c 6e 32 3b 0a 09 09 77 68 69 6c   ┆));   lo = 1;   hi = ln2;   whil┆
0x0aa0…0ac0 65 20 28 6c 6f 20 3c 3d 20 68 69 29 20 7b 0a 09 09 09 6d 69 64 20 3d 20 28 6c 6f 2b 68 69 29 2f   ┆e (lo <= hi) {    mid = (lo+hi)/┆
0x0ac0…0ae0 32 3b 0a 09 09 09 69 66 20 28 68 61 73 68 20 3c 3d 20 56 5b 6d 69 64 5d 2e 6c 5f 68 61 73 68 29   ┆2;    if (hash <= V[mid].l_hash)┆
0x0ae0…0b00 0a 09 09 09 09 68 69 20 3d 20 6d 69 64 2d 31 3b 20 65 6c 73 65 0a 09 09 09 09 6c 6f 20 3d 20 6d   ┆     hi = mid-1; else     lo = m┆
0x0b00…0b20 69 64 2b 31 3b 0a 09 09 7d 0a 09 09 69 66 20 28 68 69 21 3d 30 20 26 26 20 56 5b 68 69 5d 2e 6c   ┆id+1;   }   if (hi!=0 && V[hi].l┆
0x0b20…0b40 5f 68 61 73 68 3d 3d 56 5b 68 69 2b 31 5d 2e 6c 5f 68 61 73 68 29 0a 09 09 09 63 65 72 72 28 22   ┆_hash==V[hi+1].l_hash)    cerr("┆
0x0b40…0b60 66 61 74 61 6c 20 73 65 61 72 63 68 20 62 6f 74 63 68 22 29 3b 0a 09 09 69 66 20 28 68 61 73 68   ┆fatal search botch");   if (hash┆
0x0b60…0b80 20 3d 3d 20 56 5b 2b 2b 68 69 5d 2e 6c 5f 68 61 73 68 29 0a 09 09 09 2a 50 70 20 3d 20 68 69 3b   ┆ == V[++hi].l_hash)    *Pp = hi;┆
0x0b80…0ba0 20 65 6c 73 65 0a 09 09 09 2a 50 70 20 3d 20 30 3b 0a 09 7d 0a 09 2f 2a 0a 09 20 2a 20 54 68 72   ┆ else    *Pp = 0;  }  /*   * Thr┆
0x0ba0…0bc0 6f 77 20 61 77 61 79 20 74 68 65 20 68 61 73 68 20 76 61 6c 75 65 73 2e 0a 09 20 2a 20 4d 61 72   ┆ow away the hash values.   * Mar┆
0x0bc0…0be0 6b 20 74 68 65 20 6c 61 73 74 20 6c 69 6e 65 20 6f 66 20 65 61 63 68 20 68 61 73 68 2d 65 71 75   ┆k the last line of each hash-equ┆
0x0be0…0c00 69 76 61 6c 65 6e 74 0a 09 20 2a 20 63 6c 61 73 73 20 6f 66 20 6c 69 6e 65 73 20 61 6e 64 20 66   ┆ivalent   * class of lines and f┆
0x0c00…0c20 61 6b 65 20 6c 69 6e 65 20 30 2e 0a 09 20 2a 2f 0a 09 7b 0a 09 09 72 65 67 69 73 74 65 72 20 76   ┆ake line 0.   */  {   register v┆
0x0c20…0c40 61 64 64 72 5f 74 20 2a 45 70 2c 20 2a 65 45 70 3b 0a 09 09 72 65 67 69 73 74 65 72 20 4c 49 4e   ┆addr_t *Ep, *eEp;   register LIN┆
0x0c40…0c60 45 53 20 2a 56 70 3b 0a 0a 09 09 45 20 3d 20 56 3b 0a 09 09 45 5b 30 5d 20 3d 20 4c 41 53 54 3b   ┆ES *Vp;    E = V;   E[0] = LAST;┆
0x0c60…0c80 0a 09 09 66 6f 72 20 28 45 70 3d 45 2b 31 2c 20 56 70 3d 56 2b 31 2c 20 65 45 70 3d 26 45 5b 6c   ┆   for (Ep=E+1, Vp=V+1, eEp=&E[l┆
0x0c80…0ca0 6e 32 5d 3b 20 45 70 20 3c 3d 20 65 45 70 3b 20 56 70 2b 2b 2c 20 45 70 2b 2b 29 20 7b 0a 09 09   ┆n2]; Ep <= eEp; Vp++, Ep++) {   ┆
0x0ca0…0cc0 09 2a 45 70 20 3d 20 56 70 2d 3e 6c 5f 6e 75 6d 3b 0a 09 09 09 69 66 20 28 45 70 3d 3d 65 45 70   ┆ *Ep = Vp->l_num;    if (Ep==eEp┆
0x0cc0…0ce0 20 7c 7c 20 56 70 2d 3e 6c 5f 68 61 73 68 21 3d 28 56 70 2b 31 29 2d 3e 6c 5f 68 61 73 68 29 0a   ┆ || Vp->l_hash!=(Vp+1)->l_hash) ┆
0x0ce0…0d00 09 09 09 09 2a 45 70 20 7c 3d 20 4c 41 53 54 3b 0a 09 09 7d 0a 09 7d 0a 09 7b 0a 09 09 72 65 67   ┆    *Ep |= LAST;   }  }  {   reg┆
0x0d00…0d20 69 73 74 65 72 20 69 6e 74 20 69 3b 0a 09 09 72 65 67 69 73 74 65 72 20 76 61 64 64 72 5f 74 20   ┆ister int i;   register vaddr_t ┆
0x0d20…0d40 2a 50 70 3b 0a 0a 09 09 50 70 20 3d 20 26 45 5b 6c 6e 32 2b 33 5d 3b 0a 09 09 66 6f 72 20 28 69   ┆*Pp;    Pp = &E[ln2+3];   for (i┆
0x0d40…0d60 3d 31 3b 20 69 3c 3d 6c 6e 31 3b 20 69 2b 2b 29 0a 09 09 09 50 70 5b 69 5d 20 3d 20 50 5b 69 5d   ┆=1; i<=ln1; i++)    Pp[i] = P[i]┆
0x0d60…0d80 3b 0a 09 09 50 20 3d 20 50 70 3b 0a 09 09 72 61 6c 6c 6f 63 28 26 50 70 5b 6c 6e 31 2b 31 5d 29   ┆;   P = Pp;   ralloc(&Pp[ln1+1])┆
0x0d80…0da0 3b 0a 09 7d 0a 09 2f 2a 0a 09 20 2a 20 53 65 74 20 75 70 20 74 6f 20 62 75 69 6c 64 20 6c 69 73   ┆;  }  /*   * Set up to build lis┆
0x0da0…0dc0 74 20 6f 66 20 4b 2d 63 61 6e 64 69 64 61 74 65 73 20 66 6f 72 0a 09 20 2a 20 61 6c 6c 20 6b 2e   ┆t of K-candidates for   * all k.┆
0x0dc0…0de0 20 20 54 68 65 20 4b 20 74 61 62 6c 65 20 6f 76 65 72 77 72 69 74 65 73 20 50 20 28 77 68 65 6e   ┆  The K table overwrites P (when┆
0x0de0…0e00 0a 09 20 2a 20 77 65 20 61 64 64 20 4b 5b 6b 2b 32 5d 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20   ┆   * we add K[k+2] to the table ┆
0x0e00…0e20 77 65 20 6e 6f 20 6c 6f 6e 67 65 72 0a 09 20 2a 20 6e 65 65 64 20 50 5b 6b 5d 2e 0a 09 20 2a 2f   ┆we no longer   * need P[k].   */┆
0x0e20…0e40 0a 09 7b 0a 09 09 72 65 67 69 73 74 65 72 20 76 61 64 64 72 5f 74 20 6b 3b 0a 09 09 72 65 67 69   ┆  {   register vaddr_t k;   regi┆
0x0e40…0e60 73 74 65 72 20 76 61 64 64 72 5f 74 20 69 3b 0a 09 09 72 65 67 69 73 74 65 72 20 43 41 4e 44 20   ┆ster vaddr_t i;   register CAND ┆
0x0e60…0e80 2a 63 70 3b 0a 0a 09 09 4b 20 3d 20 26 45 5b 6c 6e 32 2b 31 5d 3b 0a 09 09 4b 5b 30 5d 20 3d 20   ┆*cp;    K = &E[ln2+1];   K[0] = ┆
0x0e80…0ea0 63 61 6e 64 69 64 61 74 65 28 28 76 61 64 64 72 5f 74 29 30 2c 20 28 76 61 64 64 72 5f 74 29 30   ┆candidate((vaddr_t)0, (vaddr_t)0┆
0x0ea0…0ec0 2c 20 4e 55 4c 4c 29 3b 0a 09 09 4b 5b 31 5d 20 3d 20 63 61 6e 64 69 64 61 74 65 28 6c 6e 31 2b   ┆, NULL);   K[1] = candidate(ln1+┆
0x0ec0…0ee0 31 2c 20 6c 6e 32 2b 31 2c 20 4e 55 4c 4c 29 3b 0a 09 09 6b 20 3d 20 30 3b 0a 09 09 66 6f 72 20   ┆1, ln2+1, NULL);   k = 0;   for ┆
0x0ee0…0f00 28 69 3d 31 3b 20 69 3c 3d 6c 6e 31 3b 20 69 2b 2b 29 20 7b 0a 09 09 09 69 66 20 28 50 5b 69 5d   ┆(i=1; i<=ln1; i++) {    if (P[i]┆
0x0f00…0f20 20 21 3d 20 30 29 0a 09 09 09 09 6b 20 3d 20 6d 65 72 67 65 28 4b 2c 20 6b 2c 20 69 2c 20 45 2c   ┆ != 0)     k = merge(K, k, i, E,┆
0x0f20…0f40 20 50 5b 69 5d 29 3b 0a 09 09 7d 0a 09 09 2f 2a 0a 09 09 20 2a 20 60 6b 27 20 69 73 20 74 68 65   ┆ P[i]);   }   /*    * `k' is the┆
0x0f40…0f60 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 61 6c 0a 09 09 20 2a 20 63 6f 6d 6d   ┆ length of the maximal    * comm┆
0x0f60…0f80 6f 6e 20 73 75 62 73 65 71 75 65 6e 63 65 2c 20 74 68 75 73 20 4b 5b 6b 5d 20 70 6f 69 6e 74 73   ┆on subsequence, thus K[k] points┆
0x0f80…0fa0 0a 09 09 20 2a 20 74 6f 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6c 69 6e 65 73 20 69 6e 20 74 68   ┆    * to the list of lines in th┆
0x0fa0…0fc0 65 20 73 75 62 73 65 71 75 6e 63 65 2e 0a 09 09 20 2a 20 53 74 6f 72 65 20 74 68 65 20 6c 69 73   ┆e subsequnce.    * Store the lis┆
0x0fc0…0fe0 74 20 69 6e 20 60 4a 27 20 69 6e 20 61 20 68 61 6e 64 69 65 72 0a 09 09 20 2a 20 66 6f 72 6d 61   ┆t in `J' in a handier    * forma┆
0x0fe0…1000 74 2e 20 20 45 2c 20 4b 20 28 61 6c 6c 20 62 75 74 20 4b 5b 6b 5d 29 20 61 6e 64 20 50 0a 09 09   ┆t.  E, K (all but K[k]) and P   ┆
0x1000…1020 20 2a 20 61 72 65 20 72 65 64 75 6e 64 61 6e 74 20 73 6f 20 4a 20 6f 76 65 72 6c 61 79 73 20 74   ┆ * are redundant so J overlays t┆
0x1020…1040 68 65 6d 2e 0a 09 09 20 2a 2f 0a 09 09 63 70 20 3d 20 4b 5b 6b 5d 3b 0a 09 09 4a 20 3d 20 45 3b   ┆hem.    */   cp = K[k];   J = E;┆
0x1040…1060 0a 09 09 66 6f 72 20 28 69 3d 30 3b 20 69 3c 3d 6c 6e 31 3b 20 69 2b 2b 29 0a 09 09 09 4a 5b 69   ┆   for (i=0; i<=ln1; i++)    J[i┆
0x1060…1080 5d 20 3d 20 30 3b 0a 09 09 4a 5b 6c 6e 31 2b 31 5d 20 3d 20 6c 6e 32 2b 31 3b 09 2f 2a 20 66 65   ┆] = 0;   J[ln1+1] = ln2+1; /* fe┆
0x1080…10a0 6e 63 65 20 2a 2f 0a 09 09 77 68 69 6c 65 20 28 63 70 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09   ┆nce */   while (cp != NULL) {   ┆
0x10a0…10c0 09 4a 5b 63 70 2d 3e 61 5d 20 3d 20 63 70 2d 3e 62 3b 0a 09 09 09 63 70 20 3d 20 63 70 2d 3e 70   ┆ J[cp->a] = cp->b;    cp = cp->p┆
0x10c0…10e0 72 65 76 3b 0a 09 09 7d 0a 09 7d 0a 09 7b 0a 09 09 72 65 67 69 73 74 65 72 20 76 61 64 64 72 5f   ┆rev;   }  }  {   register vaddr_┆
0x10e0…1100 74 20 69 2c 20 6a 2c 20 6b 2c 20 6c 3b 0a 0a 09 09 2f 2a 0a 09 09 20 2a 20 4d 61 74 63 68 69 6e   ┆t i, j, k, l;    /*    * Matchin┆
0x1100…1120 67 20 6c 69 6e 65 73 20 61 72 65 20 6e 6f 77 20 73 74 6f 72 65 64 20 61 73 20 70 61 69 72 73 0a   ┆g lines are now stored as pairs ┆
0x1120…1140 09 09 20 2a 20 28 69 2c 20 4a 5b 69 5d 29 2c 20 4a 5b 69 5d 21 3d 30 2e 20 20 50 72 6f 64 75 63   ┆   * (i, J[i]), J[i]!=0.  Produc┆
0x1140…1160 65 20 6f 75 74 70 75 74 0a 09 09 20 2a 20 73 63 72 69 70 74 73 20 61 6e 64 20 6c 6f 6f 6b 20 66   ┆e output    * scripts and look f┆
0x1160…1180 6f 72 20 6a 61 63 6b 70 6f 74 73 2e 0a 09 09 20 2a 2f 0a 09 09 72 65 77 69 6e 64 28 66 70 31 29   ┆or jackpots.    */   rewind(fp1)┆
0x1180…11a0 3b 0a 09 09 72 65 77 69 6e 64 28 66 70 32 29 3b 0a 09 09 66 67 65 74 73 28 6c 69 6e 65 31 2c 20   ┆;   rewind(fp2);   fgets(line1, ┆
0x11a0…11c0 4c 53 49 5a 45 2c 20 66 70 31 29 3b 0a 09 09 66 67 65 74 73 28 6c 69 6e 65 32 2c 20 4c 53 49 5a   ┆LSIZE, fp1);   fgets(line2, LSIZ┆
0x11c0…11e0 45 2c 20 66 70 32 29 3b 0a 09 09 66 6f 72 20 28 69 3d 6a 3d 31 3b 20 69 3c 3d 6c 6e 31 20 7c 7c   ┆E, fp2);   for (i=j=1; i<=ln1 ||┆
0x11e0…1200 20 6a 3c 3d 6c 6e 32 3b 20 29 20 7b 0a 09 09 09 69 66 20 28 6a 20 3d 3d 20 4a 5b 69 5d 29 20 7b   ┆ j<=ln2; ) {    if (j == J[i]) {┆
0x1200…1220 0a 09 09 09 09 69 66 20 28 21 28 2a 65 71 75 61 6c 29 28 6c 69 6e 65 31 2c 20 6c 69 6e 65 32 29   ┆     if (!(*equal)(line1, line2)┆
0x1220…1240 29 20 7b 0a 09 09 09 09 09 2f 2a 0a 09 09 09 09 09 20 2a 20 54 68 69 73 20 63 61 6e 20 62 65 20   ┆) {      /*       * This can be ┆
0x1240…1260 61 76 6f 69 64 65 64 20 61 74 0a 09 09 09 09 09 20 2a 20 74 68 65 20 65 78 70 65 6e 73 65 20 6f   ┆avoided at       * the expense o┆
0x1260…1280 66 20 61 6e 6f 74 68 65 72 0a 09 09 09 09 09 20 2a 20 70 61 73 73 2e 20 20 53 6f 20 77 65 20 73   ┆f another       * pass.  So we s┆
0x1280…12a0 65 74 74 6c 65 20 66 6f 72 20 74 68 69 73 0a 09 09 09 09 09 20 2a 20 70 6f 74 65 6e 74 69 61 6c   ┆ettle for this       * potential┆
0x12a0…12c0 6c 79 20 6e 6f 6e 2d 6d 69 6e 69 6d 61 6c 20 72 65 73 75 6c 74 2e 0a 09 09 09 09 09 20 2a 20 50   ┆ly non-minimal result.       * P┆
0x12c0…12e0 6f 73 73 69 62 6c 79 20 74 68 69 73 20 70 72 69 6e 74 6f 75 74 20 63 6f 75 6c 64 0a 09 09 09 09   ┆ossibly this printout could     ┆
0x12e0…1300 09 20 2a 20 64 69 73 61 70 70 65 61 72 2e 0a 09 09 09 09 09 20 2a 2f 0a 09 09 09 09 09 66 70 72   ┆  * disappear.       */      fpr┆
0x1300…1320 69 6e 74 66 28 73 74 64 65 72 72 2c 20 6a 61 63 6b 70 6f 74 2c 20 69 2c 20 6a 29 3b 0a 09 09 09   ┆intf(stderr, jackpot, i, j);    ┆
0x1320…1340 09 09 63 68 61 6e 67 65 28 20 28 55 29 69 2c 20 28 55 29 69 2c 20 28 55 29 6a 2c 20 28 55 29 6a   ┆  change( (U)i, (U)i, (U)j, (U)j┆
0x1340…1360 20 29 3b 0a 09 09 09 09 09 74 65 78 74 31 28 6c 69 6e 65 31 29 3b 0a 09 09 09 09 09 70 72 73 65   ┆ );      text1(line1);      prse┆
0x1360…1380 70 28 29 3b 0a 09 09 09 09 09 74 65 78 74 32 28 6c 69 6e 65 32 29 3b 0a 09 09 09 09 09 70 72 65   ┆p();      text2(line2);      pre┆
0x1380…13a0 6e 64 28 29 3b 0a 09 09 09 09 7d 20 65 6c 73 65 0a 09 09 09 09 09 74 65 78 74 28 6c 69 6e 65 31   ┆nd();     } else      text(line1┆
0x13a0…13c0 29 3b 0a 09 09 09 09 69 2b 2b 3b 0a 09 09 09 09 66 67 65 74 73 28 6c 69 6e 65 31 2c 20 4c 53 49   ┆);     i++;     fgets(line1, LSI┆
0x13c0…13e0 5a 45 2c 20 66 70 31 29 3b 0a 09 09 09 09 6a 2b 2b 3b 0a 09 09 09 09 66 67 65 74 73 28 6c 69 6e   ┆ZE, fp1);     j++;     fgets(lin┆
0x13e0…1400 65 32 2c 20 4c 53 49 5a 45 2c 20 66 70 32 29 3b 0a 09 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09   ┆e2, LSIZE, fp2);     continue;  ┆
0x1400…1420 09 09 7d 0a 09 09 09 66 6f 72 20 28 6b 3d 69 3b 20 4a 5b 6b 5d 3d 3d 30 3b 20 6b 2b 2b 29 0a 09   ┆  }    for (k=i; J[k]==0; k++)  ┆
0x1420…1440 09 09 09 3b 0a 09 09 09 6c 20 3d 20 4a 5b 6b 5d 3b 0a 09 09 09 69 66 20 28 69 20 3d 3d 20 6b 29   ┆   ;    l = J[k];    if (i == k)┆
0x1440…1460 0a 09 09 09 09 61 70 70 65 6e 64 28 20 28 55 29 69 2c 20 28 55 29 6a 2c 20 28 55 29 28 6c 2d 31   ┆     append( (U)i, (U)j, (U)(l-1┆
0x1460…1480 29 20 29 3b 0a 09 09 09 65 6c 73 65 20 69 66 20 28 6a 20 3d 3d 20 6c 29 0a 09 09 09 09 64 65 6c   ┆) );    else if (j == l)     del┆
0x1480…14a0 65 74 65 28 20 28 55 29 69 2c 20 28 55 29 28 6b 2d 31 29 2c 20 28 55 29 6a 20 29 3b 0a 09 09 09   ┆ete( (U)i, (U)(k-1), (U)j );    ┆
0x14a0…14c0 65 6c 73 65 0a 09 09 09 09 63 68 61 6e 67 65 28 20 28 55 29 69 2c 20 28 55 29 28 6b 2d 31 29 2c   ┆else     change( (U)i, (U)(k-1),┆
0x14c0…14e0 20 28 55 29 6a 2c 20 28 55 29 28 6c 2d 31 29 20 29 3b 0a 09 09 09 77 68 69 6c 65 20 28 69 20 21   ┆ (U)j, (U)(l-1) );    while (i !┆
0x14e0…1500 3d 20 6b 29 20 7b 0a 09 09 09 09 74 65 78 74 31 28 6c 69 6e 65 31 29 3b 0a 09 09 09 09 69 2b 2b   ┆= k) {     text1(line1);     i++┆
0x1500…1520 3b 0a 09 09 09 09 66 67 65 74 73 28 6c 69 6e 65 31 2c 20 4c 53 49 5a 45 2c 20 66 70 31 29 3b 0a   ┆;     fgets(line1, LSIZE, fp1); ┆
0x1520…1540 09 09 09 7d 0a 09 09 09 70 72 73 65 70 28 29 3b 0a 09 09 09 77 68 69 6c 65 20 28 6a 20 21 3d 20   ┆   }    prsep();    while (j != ┆
0x1540…1560 6c 29 20 7b 0a 09 09 09 09 74 65 78 74 32 28 6c 69 6e 65 32 29 3b 0a 09 09 09 09 6a 2b 2b 3b 0a   ┆l) {     text2(line2);     j++; ┆
0x1560…1580 09 09 09 09 66 67 65 74 73 28 6c 69 6e 65 32 2c 20 4c 53 49 5a 45 2c 20 66 70 32 29 3b 0a 09 09   ┆    fgets(line2, LSIZE, fp2);   ┆
0x1580…15a0 09 7d 0a 09 09 09 70 72 65 6e 64 28 29 3b 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 2f 2a 0a 20 2a 20 52   ┆ }    prend();   }  } }  /*  * R┆
0x15a0…15c0 65 61 64 20 69 6e 70 75 74 20 63 68 61 72 61 63 74 65 72 73 20 61 6e 64 20 68 61 73 68 20 66 6f   ┆ead input characters and hash fo┆
0x15c0…15e0 72 20 65 61 63 68 0a 20 2a 20 6c 69 6e 65 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 68 61 73 68   ┆r each  * line.  Return the hash┆
0x15e0…1600 20 76 61 6c 75 65 20 63 6f 6d 70 75 74 65 64 0a 20 2a 20 75 73 69 6e 67 20 43 52 43 2d 31 36 20   ┆ value computed  * using CRC-16 ┆
0x1600…1620 6d 65 74 68 6f 64 73 2e 20 20 41 20 7a 65 72 6f 20 76 61 6c 75 65 0a 20 2a 20 6d 65 61 6e 73 20   ┆methods.  A zero value  * means ┆
0x1620…1640 45 4f 46 20 6f 72 20 65 72 72 6f 72 20 61 6e 64 20 74 68 75 73 20 77 69 6c 6c 20 6e 6f 74 0a 20   ┆EOF or error and thus will not  ┆
0x1640…1660 2a 20 62 65 20 72 65 74 75 72 6e 65 64 20 61 73 20 61 20 68 61 73 68 20 76 61 6c 75 65 2e 0a 20   ┆* be returned as a hash value.  ┆
0x1660…1680 2a 2f 0a 68 61 73 68 5f 74 0a 69 6e 68 61 73 68 28 66 70 2c 20 66 6e 29 0a 72 65 67 69 73 74 65   ┆*/ hash_t inhash(fp, fn) registe┆
0x1680…16a0 72 20 46 49 4c 45 20 2a 66 70 3b 0a 63 68 61 72 20 2a 66 6e 3b 0a 7b 0a 09 72 65 67 69 73 74 65   ┆r FILE *fp; char *fn; {  registe┆
0x16a0…16c0 72 20 69 6e 74 20 63 3b 0a 09 72 65 67 69 73 74 65 72 20 69 6e 74 20 74 6d 70 3b 0a 09 72 65 67   ┆r int c;  register int tmp;  reg┆
0x16c0…16e0 69 73 74 65 72 20 69 6e 74 20 68 61 73 68 3b 0a 09 72 65 67 69 73 74 65 72 20 69 6e 74 20 73 70   ┆ister int hash;  register int sp┆
0x16e0…1700 61 63 65 3b 0a 0a 09 73 70 61 63 65 20 3d 20 68 61 73 68 20 3d 20 30 3b 0a 09 77 68 69 6c 65 20   ┆ace;   space = hash = 0;  while ┆
0x1700…1720 28 28 63 20 3d 20 67 65 74 63 28 66 70 29 29 20 21 3d 20 27 5c 6e 27 29 20 7b 0a 09 09 69 66 20   ┆((c = getc(fp)) != '\n') {   if ┆
0x1720…1740 28 63 20 3d 3d 20 45 4f 46 29 20 7b 0a 09 09 09 69 66 20 28 68 61 73 68 20 21 3d 20 30 29 0a 09   ┆(c == EOF) {    if (hash != 0)  ┆
0x1740…1760 09 09 09 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 70 61 72 74 69 61 6c 2c 20 66 6e 29 3b   ┆   fprintf(stderr, partial, fn);┆
0x1760…1780 0a 09 09 09 72 65 74 75 72 6e 20 28 30 29 3b 0a 09 09 7d 0a 09 09 69 66 20 28 62 66 6c 61 67 20   ┆    return (0);   }   if (bflag ┆
0x1780…17a0 26 26 20 28 63 3d 3d 27 20 27 20 7c 7c 20 63 3d 3d 27 5c 74 27 29 29 20 7b 0a 09 09 09 73 70 61   ┆&& (c==' ' || c=='\t')) {    spa┆
0x17a0…17c0 63 65 2b 2b 3b 0a 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 7d 0a 09 63 6f 6d 70 75 74 65 3a   ┆ce++;    continue;   }  compute:┆
0x17c0…17e0 0a 09 09 74 6d 70 20 3d 20 63 5e 68 61 73 68 3b 0a 09 09 68 61 73 68 20 3d 20 28 68 61 73 68 3e   ┆   tmp = c^hash;   hash = (hash>┆
0x17e0…1800 3e 38 29 20 5e 20 63 72 63 74 61 62 31 5b 74 6d 70 26 30 31 37 5d 20 5e 20 63 72 63 74 61 62 32   ┆>8) ^ crctab1[tmp&017] ^ crctab2┆
0x1800…1820 5b 28 74 6d 70 26 30 33 36 30 29 3e 3e 34 5d 3b 0a 09 09 69 66 20 28 73 70 61 63 65 29 20 7b 0a   ┆[(tmp&0360)>>4];   if (space) { ┆
0x1820…1840 09 09 09 63 20 3d 20 27 20 27 3b 0a 09 09 09 73 70 61 63 65 20 3d 20 30 3b 0a 09 09 09 67 6f 74   ┆   c = ' ';    space = 0;    got┆
0x1840…1860 6f 20 63 6f 6d 70 75 74 65 3b 0a 09 09 7d 0a 09 7d 0a 09 69 66 20 28 68 61 73 68 20 3d 3d 20 30   ┆o compute;   }  }  if (hash == 0┆
0x1860…1880 29 0a 09 09 68 61 73 68 2b 2b 3b 0a 09 72 65 74 75 72 6e 20 28 68 61 73 68 29 3b 0a 7d 0a 0a 2f   ┆)   hash++;  return (hash); }  /┆
0x1880…18a0 2a 0a 20 2a 20 53 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 2e 0a 20 2a   ┆*  * Sort comparison routine.  *┆
0x18a0…18c0 20 48 61 73 68 20 76 61 6c 75 65 20 69 73 20 70 72 69 6d 61 72 79 20 6b 65 79 2c 0a 20 2a 20 6c   ┆ Hash value is primary key,  * l┆
0x18c0…18e0 69 6e 65 20 6e 75 6d 62 65 72 20 73 65 63 6f 6e 64 61 72 79 2e 0a 20 2a 2f 0a 63 6f 6d 70 61 72   ┆ine number secondary.  */ compar┆
0x18e0…1900 28 61 2c 20 62 29 0a 72 65 67 69 73 74 65 72 20 4c 49 4e 45 53 20 2a 61 2c 20 2a 62 3b 0a 7b 0a   ┆(a, b) register LINES *a, *b; { ┆
0x1900…1920 09 69 66 20 28 61 2d 3e 6c 5f 68 61 73 68 20 3c 20 62 2d 3e 6c 5f 68 61 73 68 29 0a 09 09 72 65   ┆ if (a->l_hash < b->l_hash)   re┆
[…truncated at 200 lines…]