]> pd.if.org Git - pdclib/blobdiff - functions/stdio/fseek.c
Merged PDPCLIB and Therx code.
[pdclib] / functions / stdio / fseek.c
index 7bffffb1417618f0f78b07846c715edd9e3440e4..b4e76b9cbab17e4cea0c85372e0816fb16d42c2f 100644 (file)
@@ -6,3 +6,60 @@
 // ----------------------------------------------------------------------------
 
 int fseek( FILE * stream, long offset, int mode ) { /* TODO */ };
+
+/* PDPC code - unreviewed
+Read the note in fopen.c.
+{
+    long newpos;
+#ifdef __OS2__
+    ULONG retpos;
+    APIRET rc;
+#endif
+
+    if (stream->mode == __WRITE_MODE)
+    {
+        fflush(stream);
+    }
+    if (whence == SEEK_SET)
+    {
+        newpos = offset;
+    }
+    else if (whence == SEEK_CUR)
+    {
+        newpos = offset + stream->bufStartR + (stream->upto - stream->fbuf);
+    }
+    if ((newpos > stream->bufStartR)
+        && (newpos < (stream->bufStartR + (stream->endbuf - stream->fbuf)))
+        && stream->update)
+    {
+        stream->upto = stream->fbuf + (size_t)(newpos - stream->bufStartR);
+    }
+    else
+    {
+#ifdef __OS2__
+        rc = DosSetFilePtr(stream->hfile, newpos, FILE_BEGIN, &retpos);
+        if ((rc != 0) || (retpos != newpos))
+        {
+            errno = rc;
+            return (-1);
+        }
+        else
+        {
+            stream->endbuf = stream->fbuf + stream->szfbuf;
+            stream->upto = stream->endbuf;
+            stream->bufStartR = newpos - stream->szfbuf;
+        }
+#endif
+#ifdef __MSDOS
+        __seek(stream->hfile, newpos, whence);
+        stream->endbuf = stream->fbuf + stream->szfbuf;
+        stream->upto = stream->endbuf;
+        stream->bufStartR = newpos - stream->szfbuf;
+#endif
+    }
+    stream->quickBin = 0;
+    stream->quickText = 0;
+    stream->ungetCh = -1;
+    return (0);
+}
+*/