e70152e44cc66cc599ff6b699eb8adc07f3e656a kent Sat May 24 21:09:34 2014 -0700 Adding Copyright NNNN Regents of the University of California to all files I believe with reasonable certainty were developed under UCSC employ or as part of Genome Browser copyright assignment. diff --git src/hg/lib/liftUp.c src/hg/lib/liftUp.c index c76297d..8944020 100644 --- src/hg/lib/liftUp.c +++ src/hg/lib/liftUp.c @@ -1,69 +1,72 @@ /* liftUp - stores offsets for translating coordinates. */ + +/* Copyright (C) 2014 The Regents of the University of California + * See README in this or parent directory for licensing information. */ #include "common.h" #include "linefile.h" #include "portable.h" #include "hash.h" #include "liftUp.h" struct liftSpec *readLifts(char *fileName) /* Read in lift file. */ { struct lineFile *lf = lineFileOpen(fileName, TRUE); int wordCount; char *words[16]; struct liftSpec *list = NULL, *el; while ((wordCount = lineFileChop(lf, words)) != 0) { char *offs; if (wordCount < 5) errAbort("Need at least 5 words line %d of %s", lf->lineIx, lf->fileName); offs = words[0]; if (!isdigit(offs[0]) && !(offs[0] == '-' && isdigit(offs[1]))) errAbort("Expecting number in first field line %d of %s", lf->lineIx, lf->fileName); if (!isdigit(words[4][0])) errAbort("Expecting number in fifth field line %d of %s", lf->lineIx, lf->fileName); AllocVar(el); el->offset = atoi(offs); el->oldName = cloneString(words[1]); el->oldSize = atoi(words[2]); el->newName = cloneString(words[3]); el->newSize = atoi(words[4]); if (wordCount >= 6) { char c = words[5][0]; if (c == '+' || c == '-') el->strand = c; else errAbort("Expecting + or - field 6, line %d of %s", lf->lineIx, lf->fileName); } else el->strand = '+'; slAddHead(&list, el); } slReverse(&list); lineFileClose(&lf); if (list == NULL) errAbort("Empty liftSpec file %s", fileName); return list; } struct hash *hashLift(struct liftSpec *list, boolean revOk) /* Return a hash of the lift spec. If revOk, allow - strand elements. */ { struct hash *hash = newHash(0); struct liftSpec *el; for (el = list; el != NULL; el = el->next) { if (!revOk && el->strand != '+') errAbort("Can't lift from minus strand contigs (like %s) on this file type", el->oldName); if (hashLookup(hash, el->oldName)) /* tolerate multiple instances of gap lines (residue from AGP's) */ if (!sameString(el->oldName, "gap")) errAbort("%s appears twice in .lft file\n", el->oldName); hashAdd(hash, el->oldName, el); } return hash; }