Annotation of researchv10dc/cmd/bcp/rle.h, revision 1.1

1.1     ! root        1: /* Copyright (c) 1989, 1990 AT&T --- All Rights Reserved.              */
        !             2: /* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T.                */
        !             3: /* The copyright notice does not imply actual or intended publication. */
        !             4: /* AUTHORS:                                            */
        !             5: /*     H. S. Baird - ATT-BL MH - first versions        */
        !             6: /* A rle file consists of any number of:
        !             7:        `scan_line's, each of which has the form:
        !             8:                (short) bytes_mny, followed by bytes_mny bytes in the form:
        !             9:                        (packed short) runs_mny
        !            10:                                if >0, then followed by runs_mny runs
        !            11:                                else if ==0, then followed by:
        !            12:                                        (packed short) blank_lines_mny skipped, -1
        !            13:                                        (packed short) runs_mny (>0), then...
        !            14:                                                ...runs_mny runs
        !            15:    A `run' is two (packed short) oxs,oxe which are
        !            16:        both offset counts >=0 from the prior `?x?' (starts at 0 at left margin).
        !            17:        Suppose that xs, xe are the corresponding accumulated pixel indices,
        !            18:        then xs is the pixel index of the first black pixel of the run,
        !            19:        and xe the pixel index of the first white pixel following the run.
        !            20:    A `packed short' is a byte if its value is <128, else two bytes `HIGH' & `LOW'
        !            21:        with the 0200 bit of its HIGH byte set.
        !            22:    */
        !            23: 
        !            24: #define HIGH(A) ((A>>8)&0177)
        !            25: #define LOW(A) (A&0377)
        !            26: 
        !            27: /* run-length-encoding constants, typedefs */
        !            28: 
        !            29: /* The following assumes a worst case page width of 17 inches (Legal page, >ISO A2)
        !            30:    and worst case digitizing resolution of 400 pixels/inch (e.g. CCITT Group 4),
        !            31:    for a maximum of 6800 pixels/line */
        !            32: #define RLE_RUNS 3401  /* maximum no. runs in a line */
        !            33: #define RLE_BYTES 6800 /* maximum no. data bytes in a rle line (enough?) */
        !            34: 
        !            35: typedef struct RLE_Run {
        !            36:        short xs;       /* x-coord of first pixel in run */
        !            37:        short xe;       /* x-coord of last pixel in run (NOT first following) */
        !            38:        } RLE_Run;
        !            39: #define Init_RLE_Run {0,0}
        !            40: 
        !            41: typedef struct DRLE_Run {
        !            42:        short xs;       /* x-coord of first pixel in run */
        !            43:        short xe;       /* x-coord of last pixel in run (NOT first following) */
        !            44:        struct DRLE_Run *next;
        !            45:        } DRLE_Run;
        !            46: 
        !            47: typedef struct RLE_Yrun {
        !            48:        short y,xs,xe;
        !            49:        } RLE_Yrun;
        !            50: #define Init_RLE_Yrun {0,0,0}
        !            51: 
        !            52: typedef struct RLE_Line {
        !            53:        short y;        /* y-coord of line */
        !            54:        short len;      /* length of line in pixels (white+black) */
        !            55:        short runs;     /* no. of runs */
        !            56:        RLE_Run r[RLE_RUNS];
        !            57:        } RLE_Line;
        !            58: #define Init_RLE_Line {0,0,0,Init_RLE_Run}
        !            59: 
        !            60: 
        !            61: typedef struct DRLE_Line {     /* dynamically allocated version */
        !            62:        DRLE_Run *r;            /* first run */
        !            63:        DRLE_Run *lastr;        /* last run */
        !            64:        } DRLE_Line;
        !            65: #define Init_DRLE_Line {0,0}
        !            66: 
        !            67: typedef struct RLE_Lines {
        !            68:        int mny;
        !            69:        RLE_Line *rla;  /* array of RLE_Lines */
        !            70:        } RLE_Lines;
        !            71: #define Init_RLE_Lines {0,NULL}
        !            72: #if MAIN
        !            73: RLE_Lines empty_RLE_Lines = Init_RLE_Lines;
        !            74: #else
        !            75: extern RLE_Lines empty_RLE_Lines;
        !            76: #endif
        !            77: 
        !            78: typedef struct Transform_rlel_arg {
        !            79:        boolean ident;  /* if T, then no change (speed-optimization) */
        !            80:        Bbx tr;         /* trim:  select just this window of input */
        !            81:        Sp off;         /* offset:  translate by off.x,off.y */
        !            82:        Pp scl;         /* scale:  X & Y expansion factors (about 0,0) */
        !            83:        Sp wh;          /* truncate:  exact maximum output width,height */
        !            84:        Radians rot;    /* rotate:  angle (multiple of PI/4) */
        !            85:        boolean rev;    /* reverse:  swap black and white */
        !            86:        int sy;         /* next integer line no. to write */
        !            87:        double dy;      /* next real line no. to write */
        !            88:        } Transform_rlel_arg;
        !            89: #define Init_Transform_rlel_arg {T,Init_Bbx,Init_Zero_Sp,{1.0,1.0},Init_Zero_Sp,0.0,F,0,0.0}
        !            90: #if MAIN
        !            91: Transform_rlel_arg empty_Transform_rlel_arg = Init_Transform_rlel_arg;
        !            92: #else
        !            93: extern Transform_rlel_arg empty_Transform_rlel_arg;
        !            94: #endif
        !            95: 
        !            96: #ifdef MAIN
        !            97: /* these routines are found in rlelib.c */
        !            98: 
        !            99: boolean RLE_open();    /* arg: (FILE *) */
        !           100: RLE_Line *RLE_line();  /* args: l,r - left,right interval */
        !           101: RLE_Line *RLE_get_Line();  /*  args: l,r - left,right interval */
        !           102: int RLE_run();         /* arg: (RLE_Run *) */
        !           103: fwrb_rlines();         /* args: (FILE *), (RLE_Lines *) */
        !           104: insert_rlel();
        !           105: #endif

unix.superglobalmegacorp.com

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