summaryrefslogtreecommitdiff
path: root/msdos/directory.c
diff options
context:
space:
mode:
Diffstat (limited to 'msdos/directory.c')
-rw-r--r--msdos/directory.c185
1 files changed, 0 insertions, 185 deletions
diff --git a/msdos/directory.c b/msdos/directory.c
deleted file mode 100644
index dd1fb64519..0000000000
--- a/msdos/directory.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/* $RCSfile: directory.c,v $$Revision: 4.1 $$Date: 92/08/07 18:24:42 $
- *
- * (C) Copyright 1987, 1988, 1990 Diomidis Spinellis.
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $Log: directory.c,v $
- * Revision 4.1 92/08/07 18:24:42 lwall
- *
- * Revision 4.0.1.1 91/06/07 11:22:24 lwall
- * patch4: new copyright notice
- *
- * Revision 4.0 91/03/20 01:34:24 lwall
- * 4.0 baseline.
- *
- * Revision 3.0.1.1 90/03/27 16:07:37 lwall
- * patch16: MSDOS support
- *
- * Revision 1.3 90/03/16 22:39:40 dds
- * Fixed malloc problem.
- *
- * Revision 1.2 88/07/23 00:08:39 dds
- * Added inode non-zero filling.
- *
- * Revision 1.1 88/07/23 00:03:50 dds
- * Initial revision
- *
- */
-
-/*
- * UNIX compatible directory access functions
- */
-
-#include <sys/types.h>
-#include <sys/dir.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-#include <dos.h>
-#include <ctype.h>
-
-/*
- * File names are converted to lowercase if the
- * CONVERT_TO_LOWER_CASE variable is defined.
- */
-#define CONVERT_TO_LOWER_CASE
-
-#define PATHLEN 65
-
-#ifndef lint
-static char rcsid[] = "$RCSfile: directory.c,v $$Revision: 4.1 $$Date: 92/08/07 18:24:42 $";
-#endif
-
-DIR *
-opendir(char *filename)
-{
- DIR *p;
- char *oldresult, *result;
- union REGS srv;
- struct SREGS segregs;
- register reslen = 0;
- char scannamespc[PATHLEN];
- char *scanname = scannamespc; /* To take address we need a pointer */
-
- /*
- * Structure used by the MS-DOS directory system calls.
- */
- struct dir_buff {
- char reserved[21]; /* Reserved for MS-DOS */
- unsigned char attribute; /* Attribute */
- unsigned int time; /* Time */
- unsigned int date; /* Date */
- long size; /* Size of file */
- char fn[13]; /* Filename */
- } buffspc, *buff = &buffspc;
-
-
- if (!(p = (DIR *) malloc(sizeof(DIR))))
- return NULL;
-
- /* Initialize result to use realloc on it */
- if (!(result = malloc(1))) {
- free(p);
- return NULL;
- }
-
- /* Create the search pattern */
- strcpy(scanname, filename);
- if (strchr("/\\", *(scanname + strlen(scanname) - 1)) == NULL)
- strcat(scanname, "/*.*");
- else
- strcat(scanname, "*.*");
-
- segread(&segregs);
-#if ( defined(M_I86LM) || defined(M_I86CM) || defined(M_I86HM) )
- segregs.ds = FP_SEG(buff);
- srv.x.dx = FP_OFF(buff);
-#else
- srv.x.dx = (unsigned int) buff;
-#endif
- srv.h.ah = 0x1a; /* Set DTA to DS:DX */
- intdosx(&srv, &srv, &segregs);
-
-#if ( defined(M_I86LM) || defined(M_I86CM) || defined(M_I86HM) )
- segregs.ds = FP_SEG(scanname);
- srv.x.dx = FP_OFF(scanname);
-#else
- srv.x.dx = (unsigned int) scanname;
-#endif
- srv.x.cx = 0xff; /* Search mode */
-
- for (srv.h.ah = 0x4e; !intdosx(&srv, &srv, &segregs); srv.h.ah = 0x4f) {
- if ((result = (char *) realloc(result, reslen + strlen(buff->fn) + 1)) ==
- NULL) {
- free(p);
- free(oldresult);
- return NULL;
- }
- oldresult = result;
-#ifdef CONVERT_TO_LOWER_CASE
- strcpy(result + reslen, strlwr(buff->fn));
-#else
- strcpy(result + reslen, buff->fn);
-#endif
- reslen += strlen(buff->fn) + 1;
- }
-
- if (!(result = realloc(result, reslen + 1))) {
- free(p);
- free(oldresult);
- return NULL;
- } else {
- p->start = result;
- p->curr = result;
- *(result + reslen) = '\0';
- return p;
- }
-}
-
-
-struct direct *
-readdir(DIR *dirp)
-{
- char *p;
- register len;
- static dummy;
-
- p = dirp->curr;
- len = strlen(p);
- if (*p) {
- dirp->curr += len + 1;
- strcpy(dirp->dirstr.d_name, p);
- dirp->dirstr.d_namlen = len;
- /* To fool programs */
- dirp->dirstr.d_ino = ++dummy;
- return &(dirp->dirstr);
- } else
- return NULL;
-}
-
-long
-telldir(DIR *dirp)
-{
- return (long) dirp->curr; /* ouch! pointer to long cast */
-}
-
-void
-seekdir(DIR *dirp, long loc)
-{
- dirp->curr = (char *) loc; /* ouch! long to pointer cast */
-}
-
-void
-rewinddir(DIR *dirp)
-{
- dirp->curr = dirp->start;
-}
-
-void
-closedir(DIR *dirp)
-{
- free(dirp->start);
- free(dirp);
-}