Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/trunk/src/runtime/gc/writer.c
ViewVC logotype

Annotation of /sml/trunk/src/runtime/gc/writer.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 651 - (view) (download) (as text)

1 : monnier 249 /* writer.c
2 :     *
3 :     * COPYRIGHT (c) 1995 AT&T Bell Laboratories.
4 :     *
5 :     * An implementation of the abstract writers on top of ANSI C streams.
6 :     */
7 :    
8 :     #include <stdio.h>
9 :     #include "ml-base.h"
10 :     #include "writer.h"
11 :    
12 :     #ifndef SEEK_SET
13 :     # define SEEK_SET 0
14 :     #endif
15 :    
16 :     PVT void Put (writer_t *wr, Word_t w);
17 :     PVT void Write (writer_t *wr, const void *data, Addr_t nbytes);
18 :     PVT void Flush (writer_t *wr);
19 :     PVT long Tell (writer_t *wr);
20 :     PVT void Seek (writer_t *wr, long offset);
21 :     PVT void Free (writer_t *wr);
22 :    
23 :     #define FileOf(wr) ((FILE *)((wr)->data))
24 :    
25 :     /* WR_OpenFile:
26 :     *
27 :     * Open a file for writing, and make a writer for it.
28 :     */
29 :     writer_t *WR_OpenFile (FILE *f)
30 :     {
31 :     writer_t *wr;
32 :    
33 :     if (f == NULL)
34 :     return NIL(writer_t *);
35 :    
36 :     wr = NEW_OBJ(writer_t);
37 :     wr->errFlg = FALSE;
38 :     wr->data = (void *)f;
39 :     wr->putWord = Put;
40 :     wr->write = Write;
41 :     wr->flush = Flush;
42 :     wr->tell = Tell;
43 :     wr->seek = Seek;
44 :     wr->free = Free;
45 :    
46 :     return wr;
47 :    
48 :     } /* end of WR_OpenFile */
49 :    
50 :     /* Put:
51 :     */
52 :     PVT void Put (writer_t *wr, Word_t w)
53 :     {
54 :     FILE *f = FileOf(wr);
55 :    
56 :     if (fwrite((void *)&w, WORD_SZB, 1, f) != 1) {
57 :     wr->errFlg = TRUE;
58 :     }
59 :    
60 :     } /* end of Put */
61 :    
62 :     /* Write:
63 :     */
64 :     PVT void Write (writer_t *wr, const void *data, Addr_t nbytes)
65 :     {
66 :     FILE *f = FileOf(wr);
67 :    
68 :     if (fwrite(data, 1, nbytes, f) != nbytes) {
69 :     wr->errFlg = TRUE;
70 :     }
71 :    
72 :     } /* end of Write */
73 :    
74 :     /* Flush:
75 :     */
76 :     PVT void Flush (writer_t *wr)
77 :     {
78 :     fflush (FileOf(wr));
79 :    
80 :     } /* end of Flush */
81 :    
82 :     /* Tell:
83 :     */
84 :     PVT long Tell (writer_t *wr)
85 :     {
86 :     return ftell(FileOf(wr));
87 :    
88 :     } /* end of Tell */
89 :    
90 :     /* Seek:
91 :     */
92 :     PVT void Seek (writer_t *wr, long offset)
93 :     {
94 :     if (fseek(FileOf(wr), offset, SEEK_SET) != 0)
95 :     wr->errFlg = TRUE;
96 :    
97 :     } /* end of Seek */
98 :    
99 :     /* Free:
100 :     */
101 :     PVT void Free (writer_t *wr)
102 :     {
103 :     fflush (FileOf(wr));
104 :     FREE(wr);
105 :    
106 :     } /* end of Free */

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0