Esempio n. 1
0
static int pcxdrv_write_file_header_memmap(int x_size, int y_size)
{
    BYTE header[128];

    memset(header, 0, sizeof(header));

    header[0] = 0xa;
    header[1] = 5;
    header[2] = 1;
    header[3] = 8;

    util_word_to_le_buf(&header[8], (WORD)(x_size - 1));
    util_word_to_le_buf(&header[10], (WORD)(y_size - 1));

    util_word_to_le_buf(&header[12], (WORD)(0));
    util_word_to_le_buf(&header[14], (WORD)(0));

    header[65] = 1;
    util_word_to_le_buf(&header[66], (WORD)(x_size));

    if (fwrite(header, sizeof(header), 1, pcxdrv_memmap_fd) < 1) {
        return -1;
    }
    return 0;
}
Esempio n. 2
0
static int pcxdrv_write_file_header(screenshot_t *screenshot)
{
    BYTE header[128];

    memset(header, 0, sizeof(header));

    header[0] = 0xa;
    header[1] = 5;
    header[2] = 1;
    header[3] = 8;

    util_word_to_le_buf(&header[8], (WORD)(screenshot->width - 1));
    util_word_to_le_buf(&header[10], (WORD)(screenshot->height - 1));

    util_word_to_le_buf(&header[12], (WORD)(screenshot->dpi_x));
    util_word_to_le_buf(&header[14], (WORD)(screenshot->dpi_x));

    header[65] = 1;
    util_word_to_le_buf(&header[66], (WORD)(screenshot->width));

    if (fwrite(header, sizeof(header), 1, screenshot->gfxoutputdrv_data->fd) < 1) {
        return -1;
    }
    return 0;
}
Esempio n. 3
0
int fsimage_gcr_write_half_track(disk_image_t *image, unsigned int half_track,
                                 const disk_track_t *raw)
{
    int gap, extend = 0, res;
    WORD max_track_length;
    BYTE buf[4];
    long offset;
    fsimage_t *fsimage;
    BYTE num_half_tracks;

    fsimage = image->media.fsimage;

    offset = fsimage_gcr_seek_half_track(fsimage, half_track, &max_track_length, &num_half_tracks);
    if (offset < 0) {
        return -1;
    }
    if (image->read_only != 0) {
        log_error(fsimage_gcr_log,
                  "Attempt to write to read-only disk image.");
        return -1;
    }

    if (raw->size > max_track_length) {
        log_error(fsimage_gcr_log,
                  "Track too long for image.");
        return -1;
    }

    if (offset == 0) {
        offset = fseek(fsimage->fd, 0, SEEK_END);
        if (offset == 0) {
            offset = ftell(fsimage->fd);
        }
        if (offset < 0) {
            log_error(fsimage_gcr_log, "Could not extend GCR disk image.");
            return -1;
        }
        extend = 1;
    }

    if (raw->data != NULL) {
        util_word_to_le_buf(buf, (WORD)raw->size);

        if (util_fpwrite(fsimage->fd, buf, 2, offset) < 0) {
            log_error(fsimage_gcr_log, "Could not write GCR disk image.");
            return -1;
        }

        /* Clear gap between the end of the actual track and the start of
           the next track.  */
        if (fwrite(raw->data, raw->size, 1, fsimage->fd) < 1) {
            log_error(fsimage_gcr_log, "Could not write GCR disk image.");
            return -1;
        }
        gap = max_track_length - raw->size;

        if (gap > 0) {
            BYTE *padding = lib_calloc(1, gap);
            res = fwrite(padding, gap, 1, fsimage->fd);
            lib_free(padding);
            if (res < 1) {
                log_error(fsimage_gcr_log, "Could not write GCR disk image.");
                return -1;
            }
        }

        if (extend) {
            util_dword_to_le_buf(buf, offset);
            if (util_fpwrite(fsimage->fd, buf, 4, 12 + (half_track - 2) * 4) < 0) {
                log_error(fsimage_gcr_log, "Could not write GCR disk image.");
                return -1;
            }

            util_dword_to_le_buf(buf, disk_image_speed_map(image->type, half_track / 2));
            if (util_fpwrite(fsimage->fd, buf, 4, 12 + (half_track - 2 + num_half_tracks) * 4) < 0) {
                log_error(fsimage_gcr_log, "Could not write GCR disk image.");
                return -1;
            }
        }
    }

    /* Make sure the stream is visible to other readers.  */
    fflush(fsimage->fd);

    return 0;
}