OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-3.0/] [packages/] [services/] [curses/] [pdcurses/] [current/] [src/] [pdcurses/] [scr_dump.c] - Blame information for rev 786

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 786 skrzyp
/* Public Domain Curses */
2
 
3
#include <curspriv.h>
4
 
5
RCSID("$Id: scr_dump.c,v 1.1 2009/05/10 08:29:53 jld Exp $")
6
 
7
/*man-start**************************************************************
8
 
9
  Name:                                                         scr_dump
10
 
11
  Synopsis:
12
        int putwin(WINDOW *win, FILE *filep);
13
        WINDOW *getwin(FILE *filep);
14
        int scr_dump(const char *filename);
15
        int scr_init(const char *filename);
16
        int scr_restore(const char *filename);
17
        int scr_set(const char *filename);
18
 
19
  Description:
20
        getwin() reads window-related data previously stored in a file
21
        by putwin(). It then creates and initialises a new window using
22
        that data.
23
 
24
        putwin() writes all data associated with a window into a file,
25
        using an unspecified format. This information can be retrieved
26
        later using getwin().
27
 
28
        scr_dump() writes the current contents of the virtual screen to
29
        the file named by filename in an unspecified format.
30
 
31
        scr_restore() function sets the virtual screen to the contents
32
        of the file named by filename, which must have been written
33
        using scr_dump(). The next refresh operation restores the screen
34
        to the way it looked in the dump file.
35
 
36
        In PDCurses, scr_init() does nothing, and scr_set() is a synonym
37
        for scr_restore(). Also, scr_dump() and scr_restore() save and
38
        load from curscr. This differs from some other implementations,
39
        where scr_init() works with curscr, and scr_restore() works with
40
        newscr; but the effect should be the same. (PDCurses has no
41
        newscr.)
42
 
43
  Return Value:
44
        On successful completion, getwin() returns a pointer to the
45
        window it created. Otherwise, it returns a null pointer. Other
46
        functions return OK or ERR.
47
 
48
  Portability                                X/Open    BSD    SYS V
49
        putwin                                  Y
50
        getwin                                  Y
51
        scr_dump                                Y
52
        scr_init                                Y
53
        scr_restore                             Y
54
        scr_set                                 Y
55
 
56
**man-end****************************************************************/
57
 
58
#include <stdlib.h>
59
#include <string.h>
60
 
61
#define DUMPVER 1   /* Should be updated whenever the WINDOW struct is
62
                       changed */
63
 
64
int putwin(WINDOW *win, FILE *filep)
65
{
66
    static const char *marker = "PDC";
67
    static const unsigned char version = DUMPVER;
68
 
69
    PDC_LOG(("putwin() - called\n"));
70
 
71
    /* write the marker and the WINDOW struct */
72
 
73
    if (filep && fwrite(marker, strlen(marker), 1, filep)
74
              && fwrite(&version, 1, 1, filep)
75
              && fwrite(win, sizeof(WINDOW), 1, filep))
76
    {
77
        int i;
78
 
79
        /* write each line */
80
 
81
        for (i = 0; i < win->_maxy && win->_y[i]; i++)
82
            if (!fwrite(win->_y[i], win->_maxx * sizeof(chtype), 1, filep))
83
                return ERR;
84
 
85
        return OK;
86
    }
87
 
88
    return ERR;
89
}
90
 
91
WINDOW *getwin(FILE *filep)
92
{
93
    WINDOW *win;
94
    char marker[4];
95
    int i, nlines, ncols;
96
 
97
    PDC_LOG(("getwin() - called\n"));
98
 
99
    if ( !(win = malloc(sizeof(WINDOW))) )
100
        return (WINDOW *)NULL;
101
 
102
    /* check for the marker, and load the WINDOW struct */
103
 
104
    if (!filep || !fread(marker, 4, 1, filep) || strncmp(marker, "PDC", 3)
105
        || marker[3] != DUMPVER || !fread(win, sizeof(WINDOW), 1, filep))
106
    {
107
        free(win);
108
        return (WINDOW *)NULL;
109
    }
110
 
111
    nlines = win->_maxy;
112
    ncols = win->_maxx;
113
 
114
    /* allocate the line pointer array */
115
 
116
    if ( !(win->_y = malloc(nlines * sizeof(chtype *))) )
117
    {
118
        free(win);
119
        return (WINDOW *)NULL;
120
    }
121
 
122
    /* allocate the minchng and maxchng arrays */
123
 
124
    if ( !(win->_firstch = malloc(nlines * sizeof(int))) )
125
    {
126
        free(win->_y);
127
        free(win);
128
        return (WINDOW *)NULL;
129
    }
130
 
131
    if ( !(win->_lastch = malloc(nlines * sizeof(int))) )
132
    {
133
        free(win->_firstch);
134
        free(win->_y);
135
        free(win);
136
        return (WINDOW *)NULL;
137
    }
138
 
139
    /* allocate the lines */
140
 
141
    if ( !(win = PDC_makelines(win)) )
142
        return (WINDOW *)NULL;
143
 
144
    /* read them */
145
 
146
    for (i = 0; i < nlines; i++)
147
    {
148
        if (!fread(win->_y[i], ncols * sizeof(chtype), 1, filep))
149
        {
150
            delwin(win);
151
            return (WINDOW *)NULL;
152
        }
153
    }
154
 
155
    touchwin(win);
156
 
157
    return win;
158
}
159
 
160
int scr_dump(const char *filename)
161
{
162
    FILE *filep;
163
 
164
    PDC_LOG(("scr_dump() - called: filename %s\n", filename));
165
 
166
    if (filename && (filep = fopen(filename, "wb")) != NULL)
167
    {
168
        int result = putwin(curscr, filep);
169
        fclose(filep);
170
        return result;
171
    }
172
 
173
    return ERR;
174
}
175
 
176
int scr_init(const char *filename)
177
{
178
    PDC_LOG(("scr_init() - called: filename %s\n", filename));
179
 
180
    return OK;
181
}
182
 
183
int scr_restore(const char *filename)
184
{
185
    FILE *filep;
186
 
187
    PDC_LOG(("scr_restore() - called: filename %s\n", filename));
188
 
189
    if (filename && (filep = fopen(filename, "rb")) != NULL)
190
    {
191
        WINDOW *replacement = getwin(filep);
192
        fclose(filep);
193
 
194
        if (replacement)
195
        {
196
            int result = overwrite(replacement, curscr);
197
            delwin(replacement);
198
            return result;
199
        }
200
    }
201
 
202
    return ERR;
203
}
204
 
205
int scr_set(const char *filename)
206
{
207
    PDC_LOG(("scr_set() - called: filename %s\n", filename));
208
 
209
    return scr_restore(filename);
210
}

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.