sfdcdos.c revision 7c2fbfb345896881c631598ee3852ce9ce33fb07
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/***********************************************************************
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* This software is part of the ast package *
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin* Copyright (c) 1985-2008 AT&T Intellectual Property *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* and is licensed under the *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Common Public License, Version 1.0 *
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin* by AT&T Intellectual Property *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* A copy of the License is available at *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Information and Software Systems Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* AT&T Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Florham Park NJ *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Glenn Fowler <gsf@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* David Korn <dgk@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Phong Vo <kpv@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin***********************************************************************/
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* Discipline to turn \r\n into \n.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin** This is useful to deal with DOS text files.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin** Written by David Korn (03/18/1998).
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef struct _dosdisc
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register int n;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if(!(dp->maptable=(struct map*)realloc((void*)dp->maptable,(dp->mapsize+1)*sizeof(struct map))))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstatic struct map *getmapping(Dosdisc_t *dp, Sfoff_t offset, register int whence)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinregister int whence;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin while((++mp)->logical && (whence==SEEK_CUR?mp->physical:mp->logical) <= offset);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstatic ssize_t dos_read(Sfio_t *iop, void *buff, size_t size, Sfdisc_t* disc)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register int n, count, m;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return(1);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return(n);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin /* should insert a '\r' */ ;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return(1);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin /* if not \r\n in buffer, just return */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if(dp->maptable=(struct map*)malloc((MINMAP+1)*sizeof(struct map)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin /* save original discipline inside buffer */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return(-1);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if(dp->maptable && dp->lmax > dp->maptable[dp->maptop-1].logical+CHUNK)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * returns the current offset
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * <offset> must be in the current buffer
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * if <whence> is SEEK_CUR, physical offset converted to logical offset
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * otherwise, logical offset is converted to physical offset
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstatic Sfoff_t cur_offset(Dosdisc_t *dp, Sfoff_t offset,Sfio_t *iop,register int whence)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinregister int whence;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register Sfoff_t n,m=0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register char *cp;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin while(n--)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstatic Sfoff_t dos_seek(Sfio_t *iop, Sfoff_t offset, register int whence, Sfdisc_t* disc)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinregister int whence;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register int n,size;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin /* check for seek outside buffer */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin /* check for seek outside buffer */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return(-1);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return(-1);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstatic int dos_except(Sfio_t *iop, int type, void *arg, Sfdisc_t *disc)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return(0);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin /* this is a readonly discipline */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return(-1);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return -1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return -1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return(0);