Annotation of coherent/d/usr/lib/misc/Read_me, revision 1.1

1.1     ! root        1: misc/Read_me 10/11/90
        !             2: 
        !             3: libmisc.a is a collection of miscellaneous useful user functions
        !             4: which can be used by C programmers to increase productivity.
        !             5: 
        !             6: misc.h
        !             7:        Is a header file with externs and #define's for the
        !             8:        various functions in libmisc.a
        !             9: 
        !            10: larges.h
        !            11:        Is a header file for model independent assembler with some
        !            12:        nice macros like Enter() and Leave. memxch is a good example
        !            13:        of a user.
        !            14: 
        !            15: char * alloc(n) unsigned n;
        !            16:        malloc() n bytes and zero them, or put out a fatal error message.
        !            17: 
        !            18: int approx(a, b) double a, b;
        !            19:        If a and b are within epsilon return 1 else 0. epsilon
        !            20:        is a visable double.
        !            21: 
        !            22: char * ask(reply, msg, ...) char *reply *msg;
        !            23:        Puts out msg as a printf style format string using any
        !            24:        trailing arguments. Gets a line from stdin with gets()
        !            25:        and returns the address of reply. For example
        !            26:        sscanf(ask(buff, "%d numbers", 3), &a, &b, &c);
        !            27:        puts out the message "Enter: 3 numbers " gets a reply
        !            28:        in buff and hands that to sscanf().
        !            29: 
        !            30: void banner(word, pad) char *word; int pad;
        !            31:        Prints word as a banner on stdout preceeded by pad
        !            32:        spaces. Each letter of the banner is composed of
        !            33:        occurances of itself.
        !            34:        
        !            35: unsigned short crc16(p) char *p;
        !            36:        Takes the crc16 of the string p and returns it. Fast
        !            37:        and perfect for hash tables, diff algorithms etc.
        !            38: 
        !            39: void fatal(msg, ...) char *msg;
        !            40:        Prints the msg as a printf style format string using
        !            41:        any trailing arguments. This is preceeded by
        !            42:        "\nfatal". fatal() then does exit(1).
        !            43: 
        !            44: char * getline(ifp, lineno) FILE *ifp; int *lineno;
        !            45:        Function to get lines from an input file.
        !            46:        Returns the address of the line, or NULL for eof.
        !            47: 
        !            48:        lineno should usually be started at 1. lineno will
        !            49:        be incremented by the number of lines in the previous call.
        !            50:        Thus lineno will be the number of the line just gotten.
        !            51: 
        !            52:        # to end of line is passed.
        !            53:        \ whitespace through end of line is passed.
        !            54:        \n newline
        !            55:        \p #
        !            56:        \a alarm
        !            57:        \b backspace
        !            58:        \r carrage return
        !            59:        \f form feed
        !            60:        \t tab
        !            61:        \\ backslash
        !            62:        \ddd octal number
        !            63:        all other \ sequences are errors and reported on stderr.
        !            64: 
        !            65: void splitter(ofp, line, limit) FILE *ofp; char *line; int limit;
        !            66:        Output line to ofp splitting it into chunks less than
        !            67:        limit. Inserts \ between chunks and attempts to do this
        !            68:        on whitespace boundarys. Splitter will produce a long line
        !            69:        rather than split on non whitespace. If line does not end in
        !            70:        \n splitter will add one.
        !            71: 
        !            72: int is_fs(special) char *special;
        !            73:        Checks if a special file is a well formed file system.
        !            74:        Users should never put file systems on /dev/ram1 but
        !            75:        For multi system software like compress it is smart
        !            76:        to test.
        !            77: 
        !            78:        Return values:
        !            79:        -1      Not a device, cannot open, read or seek failed.
        !            80:         0      No filesystem.
        !            81:         1      Legal filesystem.
        !            82: 
        !            83: char * lcase(str) char *str;
        !            84:        Converts str to lower case.
        !            85: 
        !            86: char * match(string, pattern, fin) char *string, *pattern, **fin;
        !            87:        Like pnmatch() except match returns the address of the
        !            88:        pattern matched. fin is aimed past the end of the
        !            89:        pattern found. That is match finds a pattern and tells
        !            90:        you where it is.
        !            91: 
        !            92: void memxch(s1, s2, len) char *s1, *s2;
        !            93:        Exchanges s1 and s2 for len. Fast and in assembler.
        !            94: 
        !            95: char * newcpy(str) char* str;
        !            96:        Creates a NUL terminated copy of str on the heap.
        !            97:        It calls fatal if there is no space.
        !            98: 
        !            99: char * pathn(name, envpath, deflpath, access)
        !           100:     char *name, *envpath, *deflpath, *access;
        !           101:        example: pathn("helpfile", "LIBPATH", "/lib", "r")
        !           102:        Looks for helpfile using the environmental variable
        !           103:        LIBPATH if that isn't set, or the second parm is NULL
        !           104:        it uses the default path "/lib". The file found must
        !           105:        have read permission. pathn() returns the full path
        !           106:        to the file found.
        !           107: 
        !           108: double picture (dble, format, output )
        !           109:     double dble;    /* the number to format */
        !           110:     char  *format;  /* the format mask */
        !           111:     char  *output;  /* the output area. At least as large as format */
        !           112: 
        !           113:        The picture() function gives C users far better
        !           114:        numeric formatting ability than COBOL and BASIC users. 
        !           115: 
        !           116:        9    Provides a slot for a number.
        !           117:             5.000 passed through a mask of '999 CR' gives '005   '
        !           118:            -5.000 passed through a mask of '999 CR' gives '005 CR'
        !           119:         Note: C & R are not special to picture. Trailing non special
        !           120:               characters print only if the number is negitave
        !           121:        
        !           122:        Z    Provides a slot for a number but supresses lead zeros.
        !           123:          1034.000 passed through a mask of 'ZZZ,ZZZ' gives '  1,034'
        !           124:         Note: comma is not special to picture. Imbeded non special
        !           125:               characters print only if preceeded by significant digits
        !           126:        
        !           127:        J    Provides a slot for a number but shrinks out lead zeros.
        !           128:          1034.000 passed through a mask of 'JJJ,JJJ' gives '1,034'
        !           129:        
        !           130:        K    Provides a slot for a number but shrinks out any zeros.
        !           131:         70884.000 passed through a mask of 'K9/K9/K9' gives '7/8/84'
        !           132:        
        !           133:        $    Floats a dollar sign to the front of the displayed number.
        !           134:           105.000 passed through a mask of '$ZZZ,ZZZ' gives '    $105'
        !           135:        
        !           136:        .    Separates the number between decimal and integer portions.
        !           137:           105.670 passed through a mask of 'Z,ZZZ.999' gives '  105.670'
        !           138:        
        !           139:        T    Provides a slot for a number but supresses trailing zeros.
        !           140:           105.670 passed through a mask of 'Z,ZZ9.9TT' gives '  105.67 '
        !           141:        
        !           142:        S    Provides a slot for a number but shrinks out trailing zeros.
        !           143:           105.670 passed through a mask of 'Z,ZZ9.9SS' gives '  105.67'
        !           144:        
        !           145:        -    Floats a - in front of negitive numbers
        !           146:           105.000 passed through a mask of '-Z,ZZZ' gives '   105'
        !           147:          -105.000 passed through a mask of '-Z,ZZZ' gives '  -105'
        !           148:        
        !           149:        (    Acts like - but prints a (
        !           150:           105.000 passed through a mask of '(ZZZ)' gives ' 105 '
        !           151:            -5.000 passed through a mask of '(ZZZ)' gives '  (5)'
        !           152:        
        !           153:        +    Floats a + or - infront of the number depending on its sign
        !           154:             5.000 passed through a mask of '+ZZZ' gives '  +5'
        !           155:            -5.000 passed through a mask of '+ZZZ' gives '  -5'
        !           156:        
        !           157:        *    Fills all lead spaces to its right
        !           158:           104.100 passed through a mask of '*ZZZ,ZZZ.99' gives '*****104.10'
        !           159:           104.100 passed through a mask of '*$ZZZ,ZZZ.99' gives '*****$104.10'
        !           160:        
        !           161:        Any overflow is returned by picture as a double precision number.
        !           162:         -1234.000 passed through a mask of '(ZZZ)' gives '(234)'
        !           163:            With an overflow of -1.0
        !           164:           123.400 passed through a mask of '99' gives '23'
        !           165:            With an overflow of 1.0
        !           166:          1200.000 passed through a mask of 'ZZ' gives '00'
        !           167:            With an overflow of 12.0
        !           168: 
        !           169: qsort(data, n, size, comp) char *data; int n, size, (*comp)();
        !           170:        Is your qsort() strangely slow. There are pathological cases
        !           171:        which cause qsort to act badly. Example: 1000 items whose
        !           172:        keys are all 7 and 8; a large array split into two halves
        !           173:        both of which are already in order. This qsort() detects
        !           174:        pathological conditions and adjusts.
        !           175: 
        !           176: long randl()
        !           177:        Returns a long random number uniformly distributed in
        !           178:        1..2147483562. This comes from CACM V. 31 N 6. And is
        !           179:        the best algorithm I know as of this writing.
        !           180:        see srandl() in this section.
        !           181: 
        !           182: char * replace(s1, pat, s3, all, matcher) char *s1, *pat, *s3, (matcher)();
        !           183:        Replaces one or all occurances of pat in s1 by s3 and
        !           184:        returns the result. The definition of match is set by matcher.
        !           185:        This calls the user defined function matcher(sw, pat, &fin). The
        !           186:        matcher must return the address of the pattern match and
        !           187:        it's end in &fin. match() is a valid example of matcher.
        !           188:        It replaces the first occurance, or all occurances of the
        !           189:        pattern and returns the new pattern. The new pattern has been
        !           190:        alloc()ed (see alloc).
        !           191: 
        !           192: showflag(data, flags, output) long data; char *flags, *output;
        !           193:        Turns the bits in data to the flags in flags or '-'
        !           194:        in the string output which must be as long as flags.
        !           195: 
        !           196: char * skip(s1, matcher, fin) char *s1, **fin; int (*matcher)();
        !           197:        Skip one or more characters not matching some criterion
        !           198:        such as isdigit(). Returns the first character skipped
        !           199:        points fin at the character after the skip.
        !           200: 
        !           201: char * span(s1, matcher, fin) char *s1, **fin; int (*matcher)();
        !           202:        Span one or more characters matching some criterion
        !           203:        such as isdigit(). Returns the first character spanned
        !           204:        points fin at the character after the span.
        !           205: 
        !           206: srandl(seed1, seed2) long seed1, seed2;
        !           207:        randl() needs two seeds this sets them. Used only
        !           208:        if you need to repeat a random number sequence.
        !           209: 
        !           210: strchtr(from, to, c, def) char *from, *to; int c, def;
        !           211:        Look up the char c on the string from, return the corresponding
        !           212:        char on the string to if it is found otherwise return the char
        !           213:        def. example: strchr("ab", "xy", c, d); if c == 'a' return
        !           214:        'x', if c == 'b' return 'y' otherwise return 'd'.
        !           215:        
        !           216: strcmpl(s1, s2)
        !           217:        Case insensative string compare.
        !           218: 
        !           219: #define strlcpy(to, from) memcpy(to, from, sizeof(to))
        !           220: 
        !           221: ucase(s) char *s;
        !           222:        Convert a string to upper case.
        !           223: 
        !           224: char * trim(s) char *s;
        !           225:        Remove trailing whitespace from string s.
        !           226: 
        !           227: usage(s) char *s;
        !           228:        Put out a usage: message and exit(1)
        !           229: 
        !           230: xdump(p, length) char *p;
        !           231:        Make a vertical hex dump of p for length on stdout. This
        !           232:        is a usefull debugging tool. Vertical hex prints as 3 lines
        !           233:        The top line is the display character or . if it's not
        !           234:        cleanly displayable. The next two lines are the hex digit.
        !           235:        The data is blocked in groups of four bytes.
        !           236: 
        !           237: xopen(filename, acs)
        !           238:        Like fopen() but it calls fatal() if the open fails.
        !           239: 
        !           240: yn(question, ...) char *question;
        !           241:        Ask a question with any trailing parms printf style and
        !           242:        get a y or n answer. Returns a 1 for 'Y' or 'y' a 0
        !           243:        for 'n' or 'N', reasks otherwise.
        !           244: 
        !           245: The following are part of a user virtual memory system for
        !           246: Coherent. Sometimes users port programs such as compress to
        !           247: Coherent which have a small number of very large arrays. Since
        !           248: Coherent is a small model operating system changes need to be
        !           249: made. The following functions are intended to expedite these
        !           250: changes.
        !           251: 
        !           252: void vinit(filename, ram) char *filename; unsigned ram;
        !           253:        Init the virtual system using filename for work
        !           254:        this may be a raw device such as /dev/rram1. ram
        !           255:        is the amount of buffer space to give the system
        !           256:        the more the better.
        !           257: 
        !           258: void vshutdown()
        !           259:        Shut the virtual system, and make it restartable.
        !           260: 
        !           261: unsigned vopen(amt) unsigned long amt;
        !           262:        Set up a virtual object. Say you want to emulate having
        !           263:        a 100000 byte array and a 50000 byte array. use
        !           264:        vid1 = vopen(100000L); vid2 = vopen(50000L);
        !           265:        This does some checking and tells the system that any
        !           266:        reference to vid2 will be between 100000 and 150000
        !           267:        on the virtual file.
        !           268: 
        !           269: char *vfind(vid, disp, dirty) unsigned vid, dirty; unsigned long disp;
        !           270:        Find a character on the virtual system mark the blocks
        !           271:        dirty bit if the access is to write. Given the example in
        !           272:        vopen, if you want to find the 1000 th byte in vdi1
        !           273:        c = vfind(vdi1, 1000L, 0);
        !           274:        To change the 2000 th byte in vid2 to d.
        !           275:        *(vfind(vid2, 2000L, 1)) = d;
        !           276:        Note the dirty indicator tells the system of the change so
        !           277:        that the block will be written back before it is read over.
        !           278:        Blocks are 512 bytes long so int's or long's can be read
        !           279:        or written without multiple accesses to vfind.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.