www.pudn.com > MPEG2systemsrc.rar > OPortToRam.C
/* Copyright (C) 1995, Tektronix Inc. All Rights Reserved.
*
* Usage Restrictions
*
* License is granted to copy, to use, and to make and to use derivative
* works for research and evaluation purposes only.
*
* Disclaimer of Warranty
*
* These software programs are available to the user without any license
* fee or royalty on an "as is" basis. Tektronix Inc. disclaims any and
* all warranties, whether express, implied, or statuary, including any
* implied warranties or merchantability or of fitness for a particular
* purpose. In no event shall the copyright-holder be liable for any
* incidental, punitive, or consequential damages of any kind whatsoever
* arising from the use of these programs.
*
* This disclaimer of warranty extends to the user of these programs and
* user's customers, employees, agents, transferees, successors, and
* assigns.
*
* The Tektronix Inc. does not represent or warrant that the programs
* furnished hereunder are free of infringement of any third-party
* patents.
*/
/* OPortToRam implementation */
#include "Utilities.H"
#include "OPortToRam.H"
OPortToRam::OPortToRam (char* b, int length, int tf) : OutputPort(tf)
{
bits = b;
bits_ptr = 0;
bits_length = length;
next_out = 0;
}
void OPortToRam::output_bit (char b)
{
buf[next_out] = b;
next_out++;
if (next_out > 7)
{
output_byte();
next_out = 0;
}
}
void OPortToRam::output_byte (char b)
{
if (next_out != 0)
{
sys_error("not on byte boundary in output_byte");
}
bits[bits_ptr] = b;
bits_ptr++;
}
void OPortToRam::output_flush ()
{
if (next_out > 0) output_byte ();
}
inline char bit (char c)
{
return (c == '0') ? ((char) 0) : ((char) 1);
}
void OPortToRam::output_byte ()
{
for (int i = 0; i < 8 - next_out; i++) write_bit('0');
if (textflag)
{
for (int i = 0; i < 8; i++)
{
bits[bits_ptr] = buf[i];
bits_ptr++;
}
}
else
{
char b =
bit(buf[0]) << 7 |
bit(buf[1]) << 6 |
bit(buf[2]) << 5 |
bit(buf[3]) << 4 |
bit(buf[4]) << 3 |
bit(buf[5]) << 2 |
bit(buf[6]) << 1 |
bit(buf[7]) << 0;
bits[bits_ptr] = b;
bits_ptr++;
}
}