home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Education Master 1994 (4th Edition)
/
EDUCATIONS_MASTER_4TH_EDITION.bin
/
files
/
progmisc
/
digitol2
/
vrtest.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-06-24
|
4KB
|
169 lines
/******************************************************************/
/* */
/* Digitized Voice Programmer's Toolkit */
/* ------------------------------------ */
/* */
/* Example of a program which records voice data */
/* to a file of unlimited length */
/* */
/* Copyright (c) 1989, Farpoint Software */
/* */
/* */
/* This program simply records a voice message while displaying */
/* a message repeatedly indicating the count of bytes recorded. */
/* The digitized voice data is written a disk file piece by */
/* piece while the recording is in progress. The memory buffer */
/* used is much smaller than the potential file size. Data is */
/* written to the buffer with the pointer wrapping back to the */
/* beginning of the buffer upon reaching the end. The routine */
/* RVOICE_CATCHUP (source in VRMOD.ASM) transfers data from the */
/* buffer to the file in the same way. */
/* */
/******************************************************************/
#include "vrmod.h"
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#include <fcntl.h>
#include <io.h>
#include <sys\types.h>
#include <sys\stat.h>
#include <bios.h>
#include <string.h>
#define buf_size 16384L
char filename[128];
char huge *buffer;
int handle;
short comport;
main(argc,argv)
int argc;
char ** argv;
{
short retval;
long count,index;
/* make sure there are two arguments on the command line */
if (argc != 3)
{
printf("Command line must include COM port number (1 - 4) and file name.\n");
exit(1);
}
/* get the COM port number */
argv++;
comport = (short)((**argv) - '0');
/* get the file name */
argv++;
strcpy(filename,*argv);
/* open or create the file, truncating if it already exists */
handle = open(filename,O_BINARY|O_RDWR|O_CREAT|O_TRUNC,S_IREAD|S_IWRITE);
if (handle == -1)
{
printf("Error opening file.\n");
exit(1);
}
/* allocate memory for the buffer */
buffer = (char huge *)halloc(buf_size,1);
if (buffer == NULL)
{
close(handle);
printf("Unable to allocate buffer memory.\n");
exit(1);
}
/* get ready */
RVOICE_INIT();
/* start the process */
retval = RVOICE_START(buffer,(long)buf_size,1,handle,comport,0L);
/* check the return code for errors */
switch (retval)
{
case 0:
printf("Voice recording has begun.\n");
break;
case 1:
printf("Buffer sizing error.\n");
break;
case 3:
printf("Invalid COM port.\n");
}
if (!retval)
{
/* loop while testing for the <Esc> key which ends recording */
while (1)
{
/* RVOICE_CATCHUP must be called frequently to keep writing */
/* the data to the disk as it becomes available without */
/* allowing buffer wrap-around to catch up with us. */
/* If RVOICE_CATCHUP returns 2 then file write error. */
if (RVOICE_CATCHUP() == 2)
{
printf("File write error.\n");
break;
}
/* doodle in the foreground while all this is happening */
RVOICE_STATUS(&count,&index);
printf("Count of bytes recorded = %ld\n",count);
/* check the keystroke buffer */
if (_bios_keybrd(_KEYBRD_READY))
{
/* key pressed, test for <Esc> key */
if ( (_bios_keybrd(_KEYBRD_READ) >> 8) == 0x01)
{
RVOICE_STOP();
printf("Voice recording ended.\n");
break;
}
}
}
}
if (!retval)
{
/* we need to make sure it is all written */
while (RVOICE_CATCHUP() == 0);
}
/* call RVOICE_CLEANUP before exiting or crash later */
RVOICE_CLEANUP();
/* close the file and free the allocated memory */
close(handle);
free(buffer);
}