⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ldlread.c

📁 speech signal process tools
💻 C
字号:
#include <system.h>#include	<stdio.h>#include	"filehdr.h"#include	"scnhdr.h"#include	"linenum.h"#include	"syms.h"#include	"ldfcn.h"/* static char *sccs_id = "@(#)ldlread.c	1.2 12/8/89 ESI, ATT"; */#define AUXESZ 18static long		lnnoptr = 0L;static unsigned short	maxlnnos = 0;static LDFILE		*saveldptr = NULL;#if	ANSI    int	ldlinit( LDFILE *, long);    int	ldlitem( LDFILE *, unsigned short, LINENO *);#else    int	ldlinit( );    int	ldlitem( );#endifintldlread(ldptr, fcnindx, linenum, linent)LDFILE		*ldptr;long		fcnindx;unsigned short	linenum;LINENO		*linent;{    if (ldlinit(ldptr, fcnindx) == SUCCESS) {	return(ldlitem(ldptr, linenum, linent));    }    return(FAILURE);}intldlinit(ldptr, fcnindx)LDFILE		*ldptr;long		fcnindx;{    SCNHDR		secthead;    SYMENT		symbol;    AUXENT		aux;    LINENO		line;    long		endlnptr;    saveldptr = ldptr;    if (ldtbread(ldptr, fcnindx, &symbol) == SUCCESS) {      if (ISFCN(symbol.n_type) && (symbol.n_numaux == 1)) {	if (FREAD( (char *) &aux, AUXESZ, 1, ldptr) == 1) {	  if (ldshread(ldptr, symbol.n_scnum, &secthead) == SUCCESS) {	    if ((lnnoptr = aux.x_sym.x_fcnary.x_fcn.x_lnnoptr) != 0L) {	      endlnptr = secthead.s_lnnoptr + (long) (secthead.s_nlnno * LINESZ);	      if ((secthead.s_lnnoptr<=lnnoptr)&&(lnnoptr + LINESZ<=endlnptr)) {		/* lnnoptr should be greater or equal to s_lnnoptr		 * and less than endlnnoptr by at least as much as LINESZ		 */		maxlnnos = (unsigned short) (((endlnptr - lnnoptr)/LINESZ) - 1);		if (FSEEK(ldptr, lnnoptr, BEGINNING) == OKFSEEK) {		  if (FREAD( (char *) &line, LINESZ, 1, ldptr) == 1) {		    if ((line.l_lnno == 0)&&(line.l_addr.l_symndx == fcnindx)) {		      return(SUCCESS);		    }		  }		}	      }	    } else {	      if (FSEEK(ldptr, secthead.s_lnnoptr, BEGINNING) == OKFSEEK) {		for (maxlnnos = secthead.s_nlnno; maxlnnos != 0; --maxlnnos) {		  if (FREAD( (char *) &line, LINESZ, 1, ldptr) != 1) {		    lnnoptr = 0L;		    maxlnnos = 0;		    saveldptr = NULL;		    return(FAILURE);		  }		  if ((line.l_lnno == 0) && (line.l_addr.l_symndx == fcnindx)) {		    lnnoptr = secthead.s_lnnoptr + (long) ((secthead.s_nlnno -			      maxlnnos) * LINESZ);		    --maxlnnos;		    return(SUCCESS);		  }		}	      }	    }	  }	}      }    }    lnnoptr = 0L;    maxlnnos = 0;    saveldptr = NULL;    return(FAILURE);}intldlitem(ldptr, linenum, linent)LDFILE		*ldptr;unsigned short	linenum;LINENO		*linent;{    LINENO		line;    int			lflag;    unsigned short	i;  lflag = FAILURE;  if ((ldptr == saveldptr) && (lnnoptr != 0)) {    if (FSEEK(ldptr, lnnoptr, BEGINNING) == OKFSEEK) {      if (FREAD( (char *) &line, LINESZ, 1, ldptr) == 1) {	if (line.l_lnno == linenum) {	  linent->l_lnno = line.l_lnno;	  linent->l_addr.l_paddr = line.l_addr.l_paddr;	  return(SUCCESS);	}	for (i = maxlnnos; i != 0; --i) {	  if (FREAD( (char *) &line, LINESZ, 1, ldptr) != 1) {	    return(FAILURE);	  }	  if (line.l_lnno == 0) {	    return(lflag);	  } else if (line.l_lnno == linenum) {	    linent->l_lnno = line.l_lnno;	    linent->l_addr.l_paddr = line.l_addr.l_paddr;	    return(SUCCESS);	  } else if (line.l_lnno > linenum) {	    if ((lflag == FAILURE) || (linent->l_lnno > line.l_lnno)) {	      lflag = SUCCESS;	      linent->l_lnno = line.l_lnno;	      linent->l_addr.l_paddr = line.l_addr.l_paddr;	    }	  }	}      }    }  }  return(lflag);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -