C转PASCAL,神仙也难熬!(100分)

  • 主题发起人 PollyTsing
  • 开始时间
P

PollyTsing

Unregistered / Unconfirmed
GUEST, unregistred user!
说 明: 惠普jls源文件之一.
最大疑惑: 其他源文件中没有任何关于reg,bits这两个变量的初始化定义等,而下面三个
过程用之凿凿.
期 望: 阐述清楚三过程,转为pascal.

#ifndef BITIO_H
#define BITIO_H

#include "global.h"

/* BYTE I/O variables */
#define BUFSIZE ((16*1024)-4) /* Size of input BYTE buffer */
extern int fp
/* index into byte buffer */
extern int truebufsize
/* true size of byte buffer ( <= BUFSIZE) */
extern byte negbuff[]
/* the buffer */
#define buff (negbuff+4)


/* BIT I/O variables */
extern dword reg
/* BIT buffer for input/output */
extern int bits
/* number of bits free in bit buffer (on output) */
/* (number of bits free)-8 in bit buffer (on input)*/
#define BITBUFSIZE (8*sizeof(reg))

extern FILE *in, *out;

#define myputc(c, fil) ((fp >= BUFSIZE) ? (flushbuff(fil), buff[fp++] = c) :/
(buff[fp++] = c))

extern void flushbuff(FILE *fil);


/* Flushes the bit output buffers and closes the output file */
extern void bitoflush();


#define put_zeros(n) /
{ /
bits -= n
/
while (bits <= 24) { /
if (fp >= BUFSIZE) { /
fwrite(buff, 1, fp, out)
/
fp = 0
/
} /
buff[fp++] = reg >> 24
/
reg <<= 8
/
bits += 8
/
} /
}

#define PUT_ZEROS(n) put_zeros(n)


#define put_ones(n) /
{ /
if ( n < 24 ) { /
putbits((1<<n)-1,n); /
} /
else { /
register unsigned nn = n; /
while ( nn >= 24 ) { /
putbits((1<<24)-1,24); /
nn -= 24; /
} /
if ( nn ) putbits((1<<nn)-1,nn); /
} /
}

#define PUT_ONES(n) put_ones(n)


/*
* Put an n-bit number x in the output stream (inline code).
* Check for output bytes of the form 0xff and stuff
* a 0 bit following each one.
*/

#define putbits(x, n) /
{ /
assert(n <= 24 &amp;&amp
n >= 0 &amp;&amp
((1<<n)>x)); /
bits -= n
/
reg |= x << bits
/
while (bits <= 24) { /
register unsigned int outbyte; /
if (fp >= BUFSIZE) { /
fwrite(buff, 1, fp, out)
/
fp = 0
/
} /
outbyte = (buff[fp++] = (reg >> 24) ); /
if ( outbyte == 0xff ) { /
bits += 7; /
reg <<= 7; /
/* stuff a 0 at MSB */ /
reg &amp;= ~(1<<(8*sizeof(reg)-1))
/
} /
else { /
bits += 8
/
reg <<= 8
/
} /
} /
}


#define PUTBITS(x,n) putbits(x,n)
 
“其他源文件中没有任何关于reg,bits这两个变量的初始化定义等”
--编译是否能通过?若能,则肯定有变量定义,是不是在宏里,你找找。

这些都是宏函数,pascal不支持宏函数的,可译成普通函数,但要需要注意照原样
翻译不一定就正确。
 
解决了,哥们!!!
心情好咯,送分,呵呵.
 
接受答案了.
 
顶部