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

📄 iodisk.c

📁 this the source code of addio compression standard CELP. Also, it is optimizied for the execution sp
💻 C
字号:
/**************************************************************************
*
* ROUTINE
*               iodisk
*
* FUNCTION
*               16-bit disk i/o
* SYNOPSIS
*               function iodisk(mode, lun, fname, nrec, iar, size)
*
*   formal 
*
*                       data    I/O
*       name            type    type    function
*       -------------------------------------------------------------------
*	mode		int	i	defines operation
*					-1 = close file
*					 1 = read
*					 2 = write
*					 3 = open for read
*					 4 = open for write
*	lun		int	i	logical unit number
*	fname		char	i	file name       
*	nrec		int	i/o	direct access record pointer
*					(auto increment)
*	iar		short	i/o	i/o data record
*	size		int	i	record size
*	iodisk		int	fun	status
*					 -1 => illegal input
*					  0 => open/close OK
*					size=> read/write OK
***************************************************************************
*	
* DESCRIPTION
*
*	Uses the UNIX System's Low Level I/O routines (open, 
*	close, read and write).	
*
***************************************************************************
*
* CALLED BY
*
*	celp
*
* CALLS
*
* 
**************************************************************************/
#include <stdio.h>
#include <sys/file.h>
iodisk(mode, lun, fname, nrec, iar, size)
int mode, *lun, *nrec, size;
short *iar;
char fname[];
{
  int i;

  if ((mode == 1 || mode == 2) && *nrec < 0)
  {
    printf("iodisk: Bad direct access record number %d\n", *nrec);
    return(-1);
  }
  switch (mode)
  {
    case 1: 					/* *read file		*/
      (*nrec)++;				/* *Warning, read errors*/
      if ((i = read(*lun, iar, size*2)) == EOF)	/* *aren't reported	*/
       	return(i);				/* *except no. of items	*/
      return(i/2);				/* *read is returned	*/
      
    case 2:					/* *write file		*/
      (*nrec)++;
      if ((i = write(*lun, iar, size*2)) == EOF)
      {
        printf("iodisk: Error writing output file %s\n", fname);
        return(i);
      }
      return(i/2);
    case 3:					/* *open file for read	*/
      if ((*lun = open(fname, O_RDONLY, 0644)) == NULL)
      {
        printf("iodisk: Error opening input file %s\n", fname);
        return(-1);
      }
      return(0);
    case 4:					/* *open file for write	*/
      if ((*lun = open(fname,O_WRONLY|O_CREAT|O_TRUNC, 0644)) == NULL)
      {
        printf("iodisk: Error opening output file %s\n", fname);
        return(-1);
      }
      return(0);
    case -1:					/* *close file		*/
      if (close(*lun) == EOF)
      {
        printf("iodisk: Error closing file %s\n", fname);
        return(-1);
      }
      return(0);
    default:					/* *illegal mode	*/
      printf("iodisk: Illegal mode %d\n", mode);
      return(-1);
  }
}

⌨️ 快捷键说明

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