trying to sync rc1

parent 27c16d07
......@@ -128,10 +128,10 @@ void a2065_reset (void)
td = NULL;
}
static void dumppacket (char *n, uae_u8 *packet, int len)
static void dumppacket (TCHAR *n, uae_u8 *packet, int len)
{
int i;
char buf[10000];
TCHAR buf[10000];
for (i = 0; i < len; i++) {
_stprintf (buf + i * 3, ".%02X", packet[i]);
......
......@@ -280,10 +280,10 @@ static void set_status (uae_u8 status, int quick)
scsidelay_status = status;
}
static char *scsitostring (void)
static TCHAR *scsitostring (void)
{
static char buf[200];
char *p;
static TCHAR buf[200];
TCHAR *p;
int i;
p = buf;
......@@ -1198,9 +1198,9 @@ static void freescsi (struct scsi_data *sd)
scsi_free (sd);
}
int addscsi (int ch, char *path, int blocksize, int readonly,
char *devname, int sectors, int surfaces, int reserved,
int bootpri, char *filesys, int scsi_level)
int addscsi (int ch, TCHAR *path, int blocksize, int readonly,
TCHAR *devname, int sectors, int surfaces, int reserved,
int bootpri, TCHAR *filesys, int scsi_level)
{
struct hd_hardfiledata *hfd;
......@@ -1270,9 +1270,9 @@ static void addnativescsi (void)
}
}
int a3000_add_scsi_unit (int ch, char *path, int blocksize, int readonly,
char *devname, int sectors, int surfaces, int reserved,
int bootpri, char *filesys)
int a3000_add_scsi_unit (int ch, TCHAR *path, int blocksize, int readonly,
TCHAR *devname, int sectors, int surfaces, int reserved,
int bootpri, TCHAR *filesys)
{
return addscsi (ch, path, blocksize, readonly, devname, sectors, surfaces, reserved, bootpri, filesys, 2);
}
......@@ -1287,9 +1287,9 @@ void a3000scsi_free (void)
freenativescsi ();
}
int a2091_add_scsi_unit (int ch, char *path, int blocksize, int readonly,
char *devname, int sectors, int surfaces, int reserved,
int bootpri, char *filesys)
int a2091_add_scsi_unit (int ch, TCHAR *path, int blocksize, int readonly,
TCHAR *devname, int sectors, int surfaces, int reserved,
int bootpri, TCHAR *filesys)
{
return addscsi (ch, path, blocksize, readonly, devname, sectors, surfaces, reserved, bootpri, filesys, 1);
}
......
......@@ -14,9 +14,9 @@
static struct ide_hdf *idedrive[2];
int adide_add_ide_unit (int ch, char *path, int blocksize, int readonly,
char *devname, int sectors, int surfaces, int reserved,
int bootpri, char *filesys)
int adide_add_ide_unit (int ch, TCHAR *path, int blocksize, int readonly,
TCHAR *devname, int sectors, int surfaces, int reserved,
int bootpri, TCHAR *filesys)
{
struct ide_hdf *ide;
......
......@@ -1789,9 +1789,9 @@ uae_u8 *restore_akiko (uae_u8 *src)
uae_u32 v;
int i;
if (!currprefs.cs_cd32cd) {
changed_prefs.cs_cd32c2p = changed_prefs.cs_cd32cd = changed_prefs.cs_cd32nvram = 1;
currprefs.cs_cd32c2p = currprefs.cs_cd32cd = currprefs.cs_cd32nvram = 1;
if (!currprefs.cs_cd32cd || !cdromok) {
changed_prefs.cs_cd32c2p = changed_prefs.cs_cd32cd = changed_prefs.cs_cd32nvram = true;
currprefs.cs_cd32c2p = currprefs.cs_cd32cd = currprefs.cs_cd32nvram = true;
akiko_init ();
}
......
......@@ -87,13 +87,13 @@ static int boot_read;
static int nvwrite;
static int load_rom8 (char *xpath, uae_u8 *mem, int extra)
static int load_rom8 (TCHAR *xpath, uae_u8 *mem, int extra)
{
struct zfile *zf;
char path[MAX_DPATH];
TCHAR path[MAX_DPATH];
int i;
uae_u8 *tmp = xmalloc (uae_u8, 131072);
char *bin = extra == 1 ? ".bin" : "";
TCHAR *bin = extra == 1 ? ".bin" : "";
memset (tmp, 0, 131072);
_stprintf (path, "%s%s%s", xpath, extra == 3 ? "-hi" : (extra == 2 ? "hi" : "h"), bin);
......@@ -121,9 +121,9 @@ end:
return 0;
}
static struct arcadiarom *is_arcadia (const char *xpath, int cnt)
static struct arcadiarom *is_arcadia (const TCHAR *xpath, int cnt)
{
char path[MAX_DPATH], *p;
TCHAR path[MAX_DPATH], *p;
struct arcadiarom *rom = NULL;
int i;
......@@ -153,9 +153,9 @@ static struct arcadiarom *is_arcadia (const char *xpath, int cnt)
static int load_roms (struct arcadiarom *rom)
{
char path[MAX_DPATH], path2[MAX_DPATH], path3[MAX_DPATH], *p;
TCHAR path[MAX_DPATH], path2[MAX_DPATH], path3[MAX_DPATH], *p;
int i, offset;
char *xpath;
TCHAR *xpath;
if (rom->type == ARCADIA_BIOS)
xpath = currprefs.romextfile;
......@@ -347,7 +347,7 @@ static void multigame(int v)
allocated_arbmemory >> 16, 0);
}
int is_arcadia_rom (const char *path)
int is_arcadia_rom (const TCHAR *path)
{
struct arcadiarom *rom;
......@@ -450,7 +450,7 @@ uae_u8 arcadia_parport (int port, uae_u8 pra, uae_u8 dra)
return v;
}
struct romdata *scan_arcadia_rom (char *path, int cnt)
struct romdata *scan_arcadia_rom (TCHAR *path, int cnt)
{
struct romdata *rd = 0;
struct romlist **arc_rl;
......
This diff is collapsed.
......@@ -196,6 +196,8 @@ static uae_u32 REGPARAM2 nullfunc (TrapContext *context)
static uae_u32 REGPARAM2 getchipmemsize (TrapContext *context)
{
m68k_dreg (regs, 1) = allocated_z3chipmem;
m68k_areg (regs, 1) = z3chipmem_start;
return allocated_chipmem;
}
......
......@@ -568,14 +568,13 @@ static void copyHostent (const struct hostent *hostent, SB)
put_long (sb->hostent + 20 + numaliases * 4, 0);
for (i = 0; i < numaddr; i++) {
put_long (sb->hostent + 24 + (numaliases + i) * 4,
addmem (&aptr, hostent->h_addr_list[i], hostent->h_length));
put_long (sb->hostent + 24 + (numaliases + i) * 4, addmem (&aptr, hostent->h_addr_list[i], hostent->h_length));
}
put_long (sb->hostent + 24 + numaliases * 4 + numaddr * 4, 0);
put_long (sb->hostent, aptr);
addstr (&aptr, hostent->h_name);
TRACE (("OK (%s)\n",hostent->h_name));
BSDTRACE (("OK (%s)\n",hostent->h_name));
bsdsocklib_seterrno (sb,0);
}
......@@ -635,12 +634,10 @@ uae_u32 bsdthr_WaitSelect (SB)
struct timeval tv;
int r;
DEBUG_LOG ("WaitSelect: %d 0x%x 0x%x 0x%x 0x%x 0x%x\n",
sb->nfds, sb->sets [0], sb->sets [1], sb->sets [2], sb->timeout, sb->sigmp);
DEBUG_LOG ("WaitSelect: %d 0x%x 0x%x 0x%x 0x%x 0x%x\n", sb->nfds, sb->sets [0], sb->sets [1], sb->sets [2], sb->timeout, sb->sigmp);
if (sb->timeout)
DEBUG_LOG ("WaitSelect: timeout %d %d\n", get_long (sb->timeout),
get_long (sb->timeout + 4));
DEBUG_LOG ("WaitSelect: timeout %d %d\n", get_long (sb->timeout), get_long (sb->timeout + 4));
FD_ZERO (&sets [0]);
FD_ZERO (&sets [1]);
......@@ -730,8 +727,7 @@ uae_u32 bsdthr_Accept_2 (SB)
fcntl (s, F_SETFL, flags & ~O_NONBLOCK); /* @@@ Don't do this if it's supposed to stay nonblocking... */
s2 = getsd (sb, s);
sb->ftable[s2-1] = sb->ftable[sb->len]; /* new socket inherits the old socket's properties */
DEBUG_LOG ("Accept: AmigaSide %d, NativeSide %d, len %d(%d)",
sb->resultval, s, &hlen, get_long (sb->a_addrlen));
DEBUG_LOG ("Accept: AmigaSide %d, NativeSide %d, len %d(%d)", sb->resultval, s, &hlen, get_long (sb->a_addrlen));
printSockAddr (&addr);
foo = get_long (sb->a_addrlen);
if (foo > 16)
......@@ -773,8 +769,7 @@ uae_u32 bsdthr_Send_2 (SB)
struct sockaddr_in addr;
int l = sizeof (struct sockaddr_in);
copysockaddr_a2n (&addr, sb->to, sb->tolen);
return sendto (sb->s, sb->buf, sb->len, sb->flags | MSG_NOSIGNAL,
(struct sockaddr *)&addr, l);
return sendto (sb->s, sb->buf, sb->len, sb->flags | MSG_NOSIGNAL, (struct sockaddr *)&addr, l);
}
}
......@@ -1295,7 +1290,7 @@ void host_getprotobyname (TrapContext *context, SB, uae_u32 name)
}
copyProtoent (context, sb, p);
TRACE (("OK (%s, %d)\n", p->p_name, p->p_proto));
BSDTRACE (("OK (%s, %d)\n", p->p_name, p->p_proto));
}
void host_getprotobynumber (TrapContext *context, SB, uae_u32 number)
......@@ -1309,7 +1304,7 @@ void host_getprotobynumber (TrapContext *context, SB, uae_u32 number)
}
copyProtoent (context, sb, p);
TRACE (("OK (%s, %d)\n", p->p_name, p->p_proto));
BSDTRACE (("OK (%s, %d)\n", p->p_name, p->p_proto));
}
void host_getservbynameport (TrapContext *context, SB, uae_u32 name, uae_u32 proto, uae_u32 type)
......@@ -1372,7 +1367,7 @@ void host_getservbynameport (TrapContext *context, SB, uae_u32 name, uae_u32 pro
put_long (sb->servent + 12, aptr);
addstr (&aptr, s->s_proto);
TRACE (("OK (%s, %d)\n", s->s_name, (unsigned short)htons (s->s_port)));
BSDTRACE (("OK (%s, %d)\n", s->s_name, (unsigned short)htons (s->s_port)));
bsdsocklib_seterrno (sb,0);
}
......@@ -1445,17 +1440,17 @@ uae_u32 host_Inet_NtoA (TrapContext *context, SB, uae_u32 in)
*(uae_u32 *)&ina = htonl (in);
TRACE (("Inet_NtoA(%lx) -> ", in));
BSDTRACE (("Inet_NtoA(%lx) -> ", in));
if ((addr = inet_ntoa(ina)) != NULL) {
buf = m68k_areg (regs, 6) + offsetof (struct UAEBSDBase, scratchbuf);
strncpyha (buf, addr, SCRATCHBUFSIZE);
TRACE (("%s\n", addr));
BSDTRACE (("%s\n", addr));
return buf;
} else
SETERRNO;
TRACE (("failed (%d)\n", sb->sb_errno));
BSDTRACE (("failed (%d)\n", sb->sb_errno));
return 0;
}
......@@ -1469,7 +1464,7 @@ uae_u32 host_inet_addr (uae_u32 cp)
addr = htonl (inet_addr (cp_rp));
TRACE (("inet_addr(%s) -> 0x%08lx\n", cp_rp, addr));
BSDTRACE (("inet_addr(%s) -> 0x%08lx\n", cp_rp, addr));
return addr;
}
......@@ -1478,15 +1473,15 @@ uae_u32 host_shutdown (SB, uae_u32 sd, uae_u32 how)
{
SOCKET s;
TRACE (("shutdown(%d,%d) -> ", sd, how));
BSDTRACE (("shutdown(%d,%d) -> ", sd, how));
s = getsock (sb, sd + 1);
if (s != -1) {
if (shutdown (s, how)) {
SETERRNO;
TRACE (("failed (%d)\n", sb->sb_errno));
BSDTRACE (("failed (%d)\n", sb->sb_errno));
} else {
TRACE (("OK\n"));
BSDTRACE (("OK\n"));
return 0;
}
}
......@@ -1497,14 +1492,14 @@ uae_u32 host_shutdown (SB, uae_u32 sd, uae_u32 how)
int host_dup2socket (SB, int fd1, int fd2) {
int s1, s2;
TRACE (("dup2socket(%d,%d) -> ", fd1, fd2));
BSDTRACE (("dup2socket(%d,%d) -> ", fd1, fd2));
fd1++;
s1 = getsock (sb, fd1);
if (s1 != -1) {
if (fd2 != -1) {
if ((unsigned int) (fd2) >= (unsigned int) sb->dtablesize) {
TRACE (("Bad file descriptor (%d)\n", fd2));
BSDTRACE (("Bad file descriptor (%d)\n", fd2));
bsdsocklib_seterrno (sb, 9); /* EBADF */
}
fd2++;
......@@ -1513,21 +1508,21 @@ int host_dup2socket (SB, int fd1, int fd2) {
close (s2);
}
setsd (sb, fd2, dup (s1));
TRACE (("0(%d)\n", getsock (sb, fd2)));
BSDTRACE (("0(%d)\n", getsock (sb, fd2)));
return 0;
} else {
fd2 = getsd (sb, 1);
if (fd2 != -1) {
setsd (sb, fd2, dup (s1));
TRACE (("%d(%d)\n", fd2, getsock (sb, fd2)));
BSDTRACE (("%d(%d)\n", fd2, getsock (sb, fd2)));
return (fd2 - 1);
} else {
TRACE(("-1\n"));
BSDTRACE(("-1\n"));
return -1;
}
}
}
TRACE (("-1\n"));
BSDTRACE (("-1\n"));
return -1;
}
......@@ -1576,7 +1571,7 @@ uae_u32 host_getsockopt (SB, uae_u32 sd, uae_u32 level, uae_u32 optname,
return r;
}
uae_u32 host_IoctlSocket (SB, uae_u32 sd, uae_u32 request, uae_u32 arg)
uae_u32 host_IoctlSocket (TrapContext *context, SB, uae_u32 sd, uae_u32 request, uae_u32 arg)
{
int sock = getsock (sb, sd + 1);
int r, argval = get_long (arg);
......@@ -1637,7 +1632,7 @@ uae_u32 host_IoctlSocket (SB, uae_u32 sd, uae_u32 request, uae_u32 arg)
return -1;
}
int host_CloseSocket (SB, int sd)
int host_CloseSocket (TrapContext *context, SB, int sd)
{
int s = getsock (sb, sd + 1);
int retval;
......
This diff is collapsed.
......@@ -433,7 +433,7 @@ static int cdrom_modeset (uae_u8 *cmd)
static void cdrom_command_accepted (int size, uae_u8 *cdrom_command_input, int *cdrom_command_cnt_in)
{
#ifdef CDTV_DEBUG_CMD
char tmp[200];
TCHAR tmp[200];
int i;
#endif
cdrom_command_size_out = size;
......@@ -590,7 +590,7 @@ static uae_u8 *read_raw (int sector, int size)
static struct zfile *f;
static int track;
int trackcnt;
char fname[MAX_DPATH];
TCHAR fname[MAX_DPATH];
static uae_u8 buf[4096];
uae_u32 prevlsn = 0;
uae_u8 *s = cdrom_toc + 4;
......@@ -1536,9 +1536,9 @@ uae_u8 cdtv_battram_read (int addr)
return v;
}
int cdtv_add_scsi_unit(int ch, char *path, int blocksize, int readonly,
char *devname, int sectors, int surfaces, int reserved,
int bootpri, char *filesys)
int cdtv_add_scsi_unit(int ch, TCHAR *path, int blocksize, int readonly,
TCHAR *devname, int sectors, int surfaces, int reserved,
int bootpri, TCHAR *filesys)
{
return addscsi (ch, path, blocksize, readonly, devname, sectors, surfaces, reserved, bootpri, filesys, 1);
}
......
This diff is collapsed.
......@@ -1899,6 +1899,7 @@ int EvalException ( LPEXCEPTION_POINTERS blah, int n_except )
emit_byte(0xe9);
emit_long((uae_u32)veccode-(uae_u32)target-4);
#ifdef JIT_DEBUG
write_log ("JIT: Create jump to %p\n",veccode);
write_log ("JIT: Handled one access!\n");
#endif
......
......@@ -91,13 +91,13 @@ uaecptr consolehook_beginio (uaecptr request)
uae_u16 cmd = get_word (request + 28);
if (cmd == CMD_WRITE) {
char *buf;
TCHAR *buf;
const char *src = (char*)get_real_address (io_data);
int len = io_length;
if (io_length == -1)
len = strlen (src);
buf = xmalloc (char, len + 1);
strncpy (buf, src, len);
buf = xmalloc (TCHAR, len + 1);
au_copy (buf, len, src);
buf[len] = 0;
//f_out ("%s", buf);
xfree (buf);
......
......@@ -331,9 +331,9 @@ static int current_change_set;
struct sprite_entry sprite_entries[2][MAX_SPR_PIXELS / 16];
struct color_change color_changes[2][MAX_REG_CHANGE];
struct decision line_decisions[2 * (MAXVPOS + 1) + 1];
struct draw_info line_drawinfo[2][2 * (MAXVPOS + 1) + 1];
#define COLOR_TABLE_SIZE (MAXVPOS + 1) * 2
struct decision line_decisions[2 * (MAXVPOS + 2) + 1];
struct draw_info line_drawinfo[2][2 * (MAXVPOS + 2) + 1];
#define COLOR_TABLE_SIZE (MAXVPOS + 2) * 2
struct color_entry color_tables[2][COLOR_TABLE_SIZE];
int next_sprite_entry = 0;
......@@ -2797,6 +2797,8 @@ void init_hz (void)
dumpsync ();
hzc = 1;
}
if (maxvpos_nom >= MAXVPOS)
maxvpos_nom = MAXVPOS;
if (currprefs.gfx_scandoubler && doublescan == 0)
doublescan = -1;
if (doublescan != odbl || maxvpos != omaxvpos)
......@@ -2834,8 +2836,15 @@ void init_hz (void)
#ifdef PICASSO96
init_hz_p96 ();
#endif
// if (vblank_hz != ovblank)
// updatedisplayarea ();
if (vblank_hz != ovblank) {
#ifdef OPENGL
OGL_refresh ();
#endif
#ifdef D3D
D3D_refresh ();
#endif
}
//inputdevice_tablet_strobe ();
write_log ("%s mode%s%s V=%dHz H=%dHz (%dx%d)\n",
isntsc ? "NTSC" : "PAL",
......@@ -5497,6 +5506,13 @@ void hsync_handler (void)
INTREQ (0x8000 | 0x0008);
}
{
extern void bsdsock_fake_int_handler (void);
extern int volatile bsd_int_requested;
if (bsd_int_requested)
bsdsock_fake_int_handler ();
}
/* See if there's a chance of a copper wait ending this line. */
cop_state.hpos = 0;
cop_state.last_write = 0;
......
/*
/*
* UAE - The Un*x Amiga Emulator
*
* Floppy disk emulation
......@@ -42,6 +42,11 @@
#endif
#endif
#include "crc32.h"
#include "inputdevice.h"
#include "amax.h"
#ifdef RETROPLATFORM
#include "rp.h"
#endif
#include <ctype.h>
#undef CATWEASEL
......@@ -175,7 +180,7 @@ typedef struct {
int drive_id_scnt; /* drive id shift counter */
int idbit;
unsigned long drive_id; /* drive id to be reported */
char newname[256]; /* storage space for new filename during eject delay */
TCHAR newname[256]; /* storage space for new filename during eject delay */
uae_u32 crc32;
#ifdef FDI2RAW
FDI *fdi;
......@@ -198,7 +203,7 @@ int disk_debug_track = -1;
static uae_u16 bigmfmbufw[0x4000 * DDHDMULT];
static drive floppy[MAX_FLOPPY_DRIVES];
static char dfxhistory[2][MAX_PREVIOUS_FLOPPIES][MAX_DPATH];
static TCHAR dfxhistory[2][MAX_PREVIOUS_FLOPPIES][MAX_DPATH];
static uae_u8 exeheader[]={0x00,0x00,0x03,0xf3,0x00,0x00,0x00,0x00};
static uae_u8 bootblock[]={
......@@ -230,7 +235,7 @@ static void disk_checksum (const uae_u8 *p, uae_u8 *c)
c[0] = cs >> 24; c[1] = cs >> 16; c[2] = cs >> 8; c[3] = cs >> 0;
}
static int dirhash (const char *name)
static int dirhash (const uae_char *name)
{
unsigned long hash;
unsigned int i;
......@@ -436,7 +441,7 @@ static int createimagefromexe (struct zfile *src, struct zfile *dst)
int totalblocks;
int fblock1, dblock1;
const char *fname1 = "runme.exe";
char *fname1b = "runme.adf";
TCHAR *fname1b = "runme.adf";
const char *fname2 = "startup-sequence";
const char *dirname1 = "s";
struct zfile *ss;
......@@ -574,7 +579,7 @@ static void drive_image_free (drive *drv)
drv->writediskfile = 0;
}
static int drive_insert (drive * drv, struct uae_prefs *p, int dnum, const char *fname);
static int drive_insert (drive * drv, struct uae_prefs *p, int dnum, const TCHAR *fname);
static void reset_drive_gui (int i)
{
......@@ -605,7 +610,7 @@ static void setamax (void)
#endif
}
static void reset_drive(int i)
static void reset_drive (int i)
{
drive *drv = &floppy[i];
......@@ -658,8 +663,10 @@ static void update_drive_gui (int num)
static void drive_fill_bigbuf (drive * drv,int);
struct zfile *DISK_validate_filename (const char *fname, int leave_open, int *wrprot, uae_u32 *crc32)
int DISK_validate_filename (const TCHAR *fname, int leave_open, bool *wrprot, uae_u32 *crc32, struct zfile **zf)
{
if (zf)
*zf = NULL;
if (crc32)
*crc32 = 0;
if (leave_open) {
......@@ -674,7 +681,11 @@ struct zfile *DISK_validate_filename (const char *fname, int leave_open, int *wr
}
if (f && crc32)
*crc32 = zfile_crc32 (f);
return f;
if (!zf)
zfile_fclose (f);
else
*zf = f;
return f ? 1 : 0;
} else {
if (zfile_exists (fname)) {
if (wrprot)
......@@ -685,7 +696,7 @@ struct zfile *DISK_validate_filename (const char *fname, int leave_open, int *wr
*crc32 = zfile_crc32 (f);
zfile_fclose (f);
}
return (void*)1;
return 1;
} else {
if (wrprot)
*wrprot = 1;
......@@ -745,11 +756,11 @@ static unsigned int read_header_ext2 (struct zfile *diskfile, trackid *trackdata
return 1;
}
char *DISK_get_saveimagepath (const char *name)
TCHAR *DISK_get_saveimagepath (const TCHAR *name)
{
static char name1[MAX_DPATH];
char name2[MAX_DPATH];
char path[MAX_DPATH];
static TCHAR name1[MAX_DPATH];
TCHAR name2[MAX_DPATH];
TCHAR path[MAX_DPATH];
int i;
_tcscpy (name2, name);
......@@ -777,12 +788,14 @@ char *DISK_get_saveimagepath (const char *name)
return name1;
}
static struct zfile *getwritefile (const char *name, int *wrprot)
static struct zfile *getwritefile (const TCHAR *name, bool *wrprot)
{
return DISK_validate_filename (DISK_get_saveimagepath (name), 1, wrprot, NULL);
struct zfile *zf;
DISK_validate_filename (DISK_get_saveimagepath (name), 1, wrprot, NULL, &zf);
return zf;
}
static int iswritefileempty (const char *name)
static int iswritefileempty (const TCHAR *name)
{
struct zfile *zf;
bool wrprot;
......@@ -827,7 +840,7 @@ static int openwritefile (drive *drv, int create)
return drv->writediskfile ? 1 : 0;
}
static bool diskfile_iswriteprotect (const char *fname, int *needwritefile, drive_type *drvtype)
static bool diskfile_iswriteprotect (const TCHAR *fname, int *needwritefile, drive_type *drvtype)
{
struct zfile *zf1, *zf2;
bool wrprot1 = 0, wrprot2 = 1;
......@@ -835,7 +848,7 @@ static bool diskfile_iswriteprotect (const char *fname, int *needwritefile, driv
*needwritefile = 0;
*drvtype = DRV_35_DD;
zf1 = DISK_validate_filename (fname, 1, &wrprot1, NULL);
DISK_validate_filename (fname, 1, &wrprot1, NULL, &zf1);
if (!zf1)
return 1;
if (zfile_iscompressed (zf1)) {
......@@ -846,7 +859,7 @@ static bool diskfile_iswriteprotect (const char *fname, int *needwritefile, driv
zfile_fclose (zf2);
zfile_fread (buffer, sizeof (char), 25, zf1);
zfile_fclose (zf1);
if (strncmp ((uae_char *) buffer, "CAPS", 4) == 0) {
if (strncmp ((uae_char*) buffer, "CAPS", 4) == 0) {
*needwritefile = 1;
return wrprot2;
}
......@@ -870,17 +883,17 @@ static bool diskfile_iswriteprotect (const char *fname, int *needwritefile, driv
return wrprot1;
}
static int drive_insert (drive * drv, struct uae_prefs *p, int dnum, const char *fname)
static int drive_insert (drive * drv, struct uae_prefs *p, int dnum, const TCHAR *fname)
{
uae_u8 buffer[2 + 2 + 4 + 4];
trackid *tid;
int num_tracks, size;
int canauto;
const char *ext;
const TCHAR *ext;
gui_disk_image_change (dnum, fname);
drive_image_free (drv);
drv->diskfile = DISK_validate_filename (fname, 1, &drv->wrprot, &drv->crc32);
DISK_validate_filename (fname, 1, &drv->wrprot, &drv->crc32, &drv->diskfile);
drv->ddhd = 1;
drv->num_secs = 0;
drv->hard_num_cyls = p->dfxtype[dnum] == DRV_525_SD ? 40 : 80;
......@@ -938,7 +951,7 @@ static int drive_insert (drive * drv, struct uae_prefs *p, int dnum, const char
drv->ddhd = 1;
#ifdef CAPS
} else if (strncmp (buffer, "CAPS", 4) == 0) {
} else if (strncmp ((char*)buffer, "CAPS", 4) == 0) {
drv->wrprot = 1;
if (!caps_loadimage (drv->diskfile, drv - floppy, &num_tracks)) {
......@@ -2045,14 +2058,14 @@ void DISK_ersatz_read (int tr, int sec, uaecptr dest)
/* type: 0=regular, 1=ext2adf */
/* adftype: 0=DD,1=HD,2=DD PC,3=HD PC,4=525SD */
void disk_creatediskfile (char *name, int type, drive_type adftype, const char *disk_name)
void disk_creatediskfile (TCHAR *name, int type, drive_type adftype, TCHAR *disk_name)
{
struct zfile *f;
int i, l, file_size, tracks, track_len, sectors;
uae_u8 *chunk = NULL;
uae_u8 tmp[3*4];
if (disk_name == NULL || strlen (disk_name) == 0)
if (disk_name == NULL || _tcslen (disk_name) == 0)
disk_name = "empty";
if (type == 1)
......@@ -2094,7 +2107,7 @@ void disk_creatediskfile (char *name, int type, drive_type adftype, const char *
chunk[312] = chunk[313] = chunk[314] = chunk[315] = (uae_u8)0xff;
chunk[316+2] = (block + 1) >> 8; chunk[316+3] = (block + 1) & 255;
chunk[432] = strlen (disk_name);
strcpy ((char *)chunk + 433, disk_name);
strcpy ((char*)chunk + 433, disk_name);
chunk[508 + 3] = 1;
disk_date (chunk + 420);
memcpy (chunk + 472, chunk + 420, 3 * 4);
......@@ -2177,17 +2190,17 @@ void DISK_reinsert (int num)
setdskchangetime (&floppy[num], 20);
}
int disk_setwriteprotect (int num, const char *name, int protect)
int disk_setwriteprotect (int num, const TCHAR *name, int protect)
{
int needwritefile, oldprotect;
struct zfile *zf1, *zf2;
bool wrprot1, wrprot2;
int i;
char *name2;
TCHAR *name2;
drive_type drvtype;
oldprotect = diskfile_iswriteprotect (name, &needwritefile, &drvtype);
zf1 = DISK_validate_filename (name, 1, &wrprot1, NULL);
DISK_validate_filename (name, 1, &wrprot1, NULL, &zf1);
if (!zf1)
return 0;
if (zfile_iscompressed (zf1))
......@@ -3612,7 +3625,7 @@ uae_u8 *restore_floppy (uae_u8 *src)
return src;
}
uae_u8 *save_floppy (int *len, uae_u8 *dstptr)
uae_u8 *save_floppy(int *len, uae_u8 *dstptr)
{
uae_u8 *dstbak, *dst;
......
//#define XLINECHECK
/*
/*
* UAE - The Un*x Amiga Emulator
*
* Screen drawing functions
......@@ -180,9 +180,9 @@ typedef void (*line_draw_func)(int, int);
#define LINE_DONE_AS_PREVIOUS 8
#define LINE_REMEMBERED_AS_PREVIOUS 9
static uae_u8 linestate[(MAXVPOS + 1) * 2 + 1];
static uae_u8 linestate[(MAXVPOS + 2) * 2 + 1];
uae_u8 line_data[(MAXVPOS + 1) * 2][MAX_PLANES * MAX_WORDS_PER_LINE * 2];
uae_u8 line_data[(MAXVPOS + 2) * 2][MAX_PLANES * MAX_WORDS_PER_LINE * 2];
/* Centering variables. */
static int min_diwstart, max_diwstop;
......@@ -526,10 +526,10 @@ void record_diw_line (int plfstrt, int first, int last)
max_diwstop = last;
if (first < min_diwstart) {
min_diwstart = first;
/*
/*
if (plfstrt * 2 > min_diwstart)
min_diwstart = plfstrt * 2;
*/
*/
}
}
......@@ -1968,8 +1968,8 @@ static void pfield_draw_line (int lineno, int gfx_ypos, int follow_ypos)
switch (linestate[lineno])
{
case LINE_REMEMBERED_AS_PREVIOUS:
if (!warned)
write_log ("Shouldn't get here... this is a bug.\n"), warned++;
// if (!warned) // happens when program messes up with VPOSW
// write_log (L"Shouldn't get here... this is a bug.\n"), warned++;
return;
case LINE_BLACK:
......
/*
/*
* UAE - The Un*x Amiga Emulator
*
* Drive Click Emulation Support Functions
......@@ -167,10 +167,10 @@ void driveclick_init (void)
wave_initialized = 1;
for (j = 0; j < CLICK_TRACKS; j++)
drvs[i][DS_CLICK].lengths[j] = drvs[i][DS_CLICK].len;
// _stprintf (tmp, "%splugins%cfloppysounds%c", "./", FSDB_DIR_SEPARATOR, FSDB_DIR_SEPARATOR, FSDB_DIR_SEPARATOR);
// if (my_existsdir (tmp))
// _tcscpy (path2, tmp);
// else
/* _stprintf (tmp, "%splugins%cfloppysounds%c", "./", FSDB_DIR_SEPARATOR, FSDB_DIR_SEPARATOR, FSDB_DIR_SEPARATOR);
if (my_existsdir (tmp))
_tcscpy (path2, tmp);
else*/
_stprintf (path2, "%suae_data%c", "./", FSDB_DIR_SEPARATOR);
_stprintf (tmp, "%sdrive_click_LOUD%s",
path2, currprefs.dfxclickexternal[i]);
......@@ -242,7 +242,7 @@ void driveclick_free (void)
wave_initialized = 0;
}
static int driveclick_active(void)
static int driveclick_active (void)
{
int i;
for (i = 0; i < 4; i++) {
......@@ -310,11 +310,11 @@ static void mix (void)
if (currprefs.dfxclickvolume > 0) {
while (clickcnt < total) {
clickbuffer[clickcnt++] = getsample() * (100 - currprefs.dfxclickvolume) / 100;
clickbuffer[clickcnt++] = getsample () * (100 - currprefs.dfxclickvolume) / 100;
}
} else {
while (clickcnt < total) {
clickbuffer[clickcnt++] = getsample();
clickbuffer[clickcnt++] = getsample ();
}
}
}
......@@ -328,24 +328,30 @@ STATIC_INLINE uae_s16 limit (uae_s32 v)
return v;
}
void driveclick_mix (uae_s16 *sndbuffer, int size)
void driveclick_mix (uae_s16 *sndbuffer, int size, int channelmask)
{
int i;
if (!wave_initialized)
return;
mix();
mix ();
clickcnt = 0;
switch (get_audio_nativechannels (currprefs.sound_stereo))
{
case 6:
for (i = 0; i < size / 6; i++) {
uae_s16 s = clickbuffer[i];
if (channelmask & 1)
sndbuffer[0] = limit (((sndbuffer[0] + s) * 2) / 3);
if (channelmask & 2)
sndbuffer[1] = limit (((sndbuffer[1] + s) * 2) / 3);
if (channelmask & 4)
sndbuffer[2] = limit (((sndbuffer[2] + s) * 2) / 3);
if (channelmask & 8)
sndbuffer[3] = limit (((sndbuffer[3] + s) * 2) / 3);
if (channelmask & 16)
sndbuffer[4] = limit (((sndbuffer[4] + s) * 2) / 3);
if (channelmask & 32)
sndbuffer[5] = limit (((sndbuffer[5] + s) * 2) / 3);
sndbuffer += 6;
}
......@@ -353,9 +359,13 @@ void driveclick_mix (uae_s16 *sndbuffer, int size)
case 4:
for (i = 0; i < size / 4; i++) {
uae_s16 s = clickbuffer[i];
if (channelmask & 1)
sndbuffer[0] = limit (((sndbuffer[0] + s) * 2) / 3);
if (channelmask & 2)
sndbuffer[1] = limit (((sndbuffer[1] + s) * 2) / 3);
if (channelmask & 4)
sndbuffer[2] = limit (((sndbuffer[2] + s) * 2) / 3);
if (channelmask & 8)
sndbuffer[3] = limit (((sndbuffer[3] + s) * 2) / 3);
sndbuffer += 4;
}
......@@ -363,13 +373,16 @@ void driveclick_mix (uae_s16 *sndbuffer, int size)
case 2:
for (i = 0; i < size / 2; i++) {
uae_s16 s = clickbuffer[i];
if (channelmask & 1)
sndbuffer[0] = limit (((sndbuffer[0] + s) * 2) / 3);
if (channelmask & 2)
sndbuffer[1] = limit (((sndbuffer[1] + s) * 2) / 3);
sndbuffer += 2;
}
break;
case 1:
for (i = 0; i < size; i++) {
if (channelmask & 1)
sndbuffer[0] = limit (((sndbuffer[0] + clickbuffer[i]) * 2) / 3);
sndbuffer++;
}
......@@ -377,7 +390,7 @@ void driveclick_mix (uae_s16 *sndbuffer, int size)
}
}
static void dr_audio_activate(void)
static void dr_audio_activate (void)
{
if (audio_activate ())
clickcnt = 0;
......@@ -414,7 +427,7 @@ void driveclick_motor (int drive, int running)
driveclick_fdrawcmd_motor (currprefs.dfxclick[drive] - 2, running);
return;
}
mix();
mix ();
if (running == 0) {
drv_starting[drive] = 0;
drv_spinning[drive] = 0;
......
......@@ -286,13 +286,11 @@ static void REGPARAM2 expamem_wput (uaecptr addr, uae_u32 value)
if (expamem[0] & add_memory) {
// Z3 RAM expansion
p2 = 0;
while (!p2 && z3num < 3) {
while (!p2 && z3num < 2) {
if (z3num == 0 && currprefs.z3fastmem_size)
p2 = z3fastmem_start >> 16;
else if (z3num == 1 && currprefs.z3fastmem2_size)
p2 = z3fastmem2_start >> 16;
else if (z3num == 2 && currprefs.z3chipmem_size)
p2 = z3chipmem_start >> 16;
if (!p2)
z3num++;
}
......@@ -340,7 +338,7 @@ static void REGPARAM2 expamem_bput (uaecptr addr, uae_u32 value)
if (expamem_type () == zorroII) {
expamem_hi = value;
(*card_map[ecard]) ();
write_log (" Card %d (Zorro%s) done.\n", ecard + 1, expamem_type() == 0xc0 ? "II" : "III");
write_log (" Card %d (Zorro%s) done.\n", ecard + 1, expamem_type () == 0xc0 ? "II" : "III");
++ecard;
if (ecard < cardno)
(*card_init[ecard]) ();
......@@ -356,7 +354,7 @@ static void REGPARAM2 expamem_bput (uaecptr addr, uae_u32 value)
break;
case 0x4c:
write_log (" Card %d (Zorro%s) had no success.\n", ecard + 1, expamem_type() == 0xc0 ? "II" : "III");
write_log (" Card %d (Zorro%s) had no success.\n", ecard + 1, expamem_type () == 0xc0 ? "II" : "III");
++ecard;
if (ecard < cardno)
(*card_init[ecard]) ();
......@@ -894,7 +892,7 @@ addrbank z3fastmem2_bank = {
addrbank z3chipmem_bank = {
z3chipmem_lget, z3chipmem_wget, z3chipmem_bget,
z3chipmem_lput, z3chipmem_wput, z3chipmem_bput,
z3chipmem_xlate, z3chipmem_check, NULL, "ZorroIII FakeChipRAM",
z3chipmem_xlate, z3chipmem_check, NULL, "MegaChipRAM",
z3chipmem_lget, z3chipmem_wget, ABFLAG_RAM
};
......@@ -1020,37 +1018,32 @@ static void expamem_init_filesys (void)
* Zorro III expansion memory
*/
static void expamem_map_z3fastmem_2 (addrbank *bank, uaecptr *startp, uae_u32 size, uae_u32 allocated)
static void expamem_map_z3fastmem_2 (addrbank *bank, uaecptr *startp, uae_u32 size, uae_u32 allocated, int chip)
{
int z3fs = ((expamem_hi | (expamem_lo >> 4)) << 16);
int start = *startp;
if (start != z3fs) {
write_log ("WARNING: Z3FAST mapping changed from $%08x to $%08x\n", start, z3fs);
write_log ("WARNING: Z3MEM mapping changed from $%08x to $%08x\n", start, z3fs);
map_banks (&dummy_bank, start >> 16, size >> 16,
allocated);
*startp = z3fs;
map_banks (bank, start >> 16, size >> 16,
allocated);
}
write_log ("Fastmem (32bit): mapped @$%08x: %d MB Zorro III fast memory \n",
start, allocated / 0x100000);
write_log ("Z3MEM (32bit): mapped @$%08x: %d MB Zorro III %s memory \n",
start, allocated / 0x100000, chip ? "chip" : "fast");
}
static void expamem_map_z3fastmem (void)
{
expamem_map_z3fastmem_2 (&z3fastmem_bank, &z3fastmem_start, currprefs.z3fastmem_size, allocated_z3fastmem);
expamem_map_z3fastmem_2 (&z3fastmem_bank, &z3fastmem_start, currprefs.z3fastmem_size, allocated_z3fastmem, 0);
}
static void expamem_map_z3fastmem2 (void)
{
expamem_map_z3fastmem_2 (&z3fastmem2_bank, &z3fastmem2_start, currprefs.z3fastmem2_size, allocated_z3fastmem2);
}
static void expamem_map_z3chipmem (void)
{
expamem_map_z3fastmem_2 (&z3chipmem_bank, &z3chipmem_start, currprefs.z3chipmem_size, allocated_z3chipmem);
expamem_map_z3fastmem_2 (&z3fastmem2_bank, &z3fastmem2_start, currprefs.z3fastmem2_size, allocated_z3fastmem2, 0);
}
static void expamem_init_z3fastmem_2 (addrbank *bank, uae_u32 start, uae_u32 size, uae_u32 allocated)
{
int code = (allocated == 0x100000 ? Z2_MEM_1MB
......@@ -1096,10 +1089,6 @@ static void expamem_init_z3fastmem2 (void)
{
expamem_init_z3fastmem_2 (&z3fastmem2_bank, z3fastmem2_start, currprefs.z3fastmem2_size, allocated_z3fastmem2);
}
static void expamem_init_z3chipmem (void)
{
expamem_init_z3fastmem_2 (&z3chipmem_bank, z3chipmem_start, currprefs.z3chipmem_size, allocated_z3chipmem);
}
#ifdef PICASSO96
/*
......@@ -1175,6 +1164,12 @@ static void allocate_expamem (void)
currprefs.gfxmem_size = changed_prefs.gfxmem_size;
currprefs.z3chipmem_size = changed_prefs.z3chipmem_size;
z3chipmem_start = currprefs.z3fastmem_start;
z3fastmem_start = currprefs.z3fastmem_start;
if (currprefs.z3chipmem_size)
z3fastmem_start += currprefs.z3chipmem_size + 16 * 1024 * 1024;
z3fastmem2_start = currprefs.z3fastmem_start + currprefs.z3fastmem_size;
if (allocated_fastmem != currprefs.fastmem_size) {
free_fastmemory ();
allocated_fastmem = currprefs.fastmem_size;
......@@ -1336,6 +1331,8 @@ static uaecptr check_boot_rom (void)
#endif
if (currprefs.chipmem_size > 2 * 1024 * 1024)
return b;
if (currprefs.z3chipmem_size)
return b;
return 0;
}
......@@ -1431,28 +1428,23 @@ void expamem_reset (void)
card_map[cardno++] = expamem_map_fastcard;
}
z3fastmem_start = currprefs.z3fastmem_start;
z3fastmem2_start = currprefs.z3fastmem_start + currprefs.z3fastmem_size;
if (z3fastmem != NULL) {
z3num = 0;
if (kickstart_version >= 36) {
card_init[cardno] = expamem_init_z3fastmem;
card_map[cardno++] = expamem_map_z3fastmem;
}
map_banks (&z3fastmem_bank, z3fastmem_start >> 16, currprefs.z3fastmem_size >> 16, allocated_z3fastmem);
if (z3fastmem2 != NULL) {
if (kickstart_version >= 36) {
card_init[cardno] = expamem_init_z3fastmem2;
card_map[cardno++] = expamem_map_z3fastmem2;
}
map_banks (&z3fastmem2_bank, z3fastmem2_start >> 16, currprefs.z3fastmem2_size >> 16, allocated_z3fastmem2);
}
}
z3chipmem_start = z3fastmem2_start + currprefs.z3fastmem2_size;
if (currprefs.z3fastmem_size || currprefs.z3fastmem2_size)
z3chipmem_start += 16 * 1024 * 1024;
if (z3chipmem != NULL) {
z3num = 0;
card_init[cardno] = expamem_init_z3chipmem;
card_map[cardno++] = expamem_map_z3chipmem;
if (z3chipmem != NULL)
map_banks (&z3chipmem_bank, z3chipmem_start >> 16, currprefs.z3chipmem_size >> 16, allocated_z3chipmem);
}
#ifdef CDTV
if (currprefs.cs_cdtvcd) {
card_init[cardno] = expamem_init_cdtv;
......
This diff is collapsed.
......@@ -22,6 +22,7 @@
; 2008.12.25 mousehack cursor sync
; 2009.01.20 clipboard sharing
; 2009.12.27 console hook
; 2010.05.27 Z3Chip
AllocMem = -198
FreeMem = -210
......@@ -224,21 +225,40 @@ FSIN_none:
; jsr -$007e(a6) ; Enable
filesys_dev_storeinfo ; add >2MB chip RAM to memory list
filesys_dev_storeinfo
moveq #3,d4 ; MEMF_CHIP | MEMF_PUBLIC
cmp.w #36,20(a6)
bcs.s FSIN_ksold
or.w #256,d4 ; MEMF_LOCAL
FSIN_ksold
; add >2MB-6MB chip RAM to memory list
move.w #$FF80,d0
bsr.w getrtbase
jsr (a0)
moveq.l #3,d1
moveq.l #-10,d2
move.l d4,d1
moveq #-10,d2
move.l #$200000,a0
sub.l a0,d0
bcs.b FSIN_chip_done
beq.b FSIN_chip_done
moveq.l #0,d4
move.l d4,a1
sub.l a1,a1
jsr -618(a6) ; AddMemList
FSIN_chip_done
; add MegaChipRAM
move.w #$FF80,d0
bsr.w getrtbase
jsr (a0) ; d1 = size, a1 = start address
beq.s FSIN_fchip_done
move.l a1,a0
move.l d1,d0
move.l d4,d1
moveq #-5,d2
lea fchipname(pc),a1
jsr -618(a6) ; AddMemList
FSIN_fchip_done
lea fstaskname(pc),a0
lea fsmounttask(pc),a1
moveq #10,d0
......@@ -2453,4 +2473,5 @@ intlibname: dc.b 'intuition.library',0
gfxlibname: dc.b 'graphics.library',0
explibname: dc.b 'expansion.library',0
fsresname: dc.b 'FileSystem.resource',0
fchipname: dc.b 'megachip memory',0
END
......@@ -1000,11 +1000,19 @@ static struct fs_dirhandle *fs_opendir (Unit *u, const TCHAR *nname)
{
struct fs_dirhandle *fsd = xmalloc (struct fs_dirhandle, 1);
/* fsd->isarch = !!(u->volflags & MYVOLUMEINFO_ARCHIVE);
if (fsd->isarch)
if (fsd->isarch) {
fsd->zd = zfile_opendir_archive (nname);
else*/
if (!fsd->zd)
goto end;
} else */ {
fsd->od = my_opendir (nname);
if (!fsd->od)
goto end;
}
return fsd;
end:
xfree (fsd);
return NULL;
}
static void fs_closedir (struct fs_dirhandle *fsd)
{
......@@ -1020,12 +1028,19 @@ static struct fs_filehandle *fs_open (Unit *unit, const TCHAR *name, char *flags
{
struct fs_filehandle *fsf = xmalloc (struct fs_filehandle, 1);
/* fsf->isarch = !!(unit->volflags & MYVOLUMEINFO_ARCHIVE);
if (fsf->isarch)
if (fsf->isarch) {
fsf->zf = zfile_open_archive (name, flags);
else*/
write_log(">>>>>>>>>>>>>>>>>>>>>>>\n\nopen: %s %s\n", name, flags);
if (!fsf->zf)
goto end;
} else */ {
fsf->of = my_open (name, flags);
if (!fsf->of)
goto end;
}
return fsf;
end:
xfree (fsf);
return NULL;
}
static void fs_close (struct fs_filehandle *fd)
{
......@@ -1745,9 +1760,9 @@ static int fill_file_attrs (Unit *u, a_inode *base, a_inode *c)
c->amigaos_mode = flags;
c->comment = comment;
return 1;
} else {*/
} else */ {
return fsdb_fill_file_attrs (base, c);
//}
}
return 0;
}
......@@ -4301,7 +4316,6 @@ static void relock_re (Unit *unit, a_inode *a1, a_inode *a2, int failed)
knext = k1->next;
if (k1->aino == a1 && k1->fd) {
char *mode = (k1->dosmode & A_FIBF_READ) == 0 ? "wb" : (k1->dosmode & A_FIBF_WRITE) == 0 ? "rb" : "r+b";
//mode |= O_BINARY;
if (failed) {
/* rename still failed, restore fd */
k1->fd = fs_open (unit, a1->nname, mode);
......@@ -5084,7 +5098,7 @@ error:
PUT_PCK_RES1 (packet_addr, DOS_FALSE);
PUT_PCK_RES2 (packet_addr, ERROR_ACTION_NOT_KNOWN);
}
TRACE(("reply: %8lx, %ld\n", GET_PCK_RES1 (pck), GET_PCK_RES2 (pck)));
TRACE(("reply: %8lx, %ld\n", GET_PCK_RES1 (packet_addr), GET_PCK_RES2 (packet_addr)));
error2:
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/*
/*
* UAE - The Un*x Amiga Emulator
*
* Routines for labelling amiga internals.
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment