From aa577a7a1d389b1ae02d51081f85ac11d09611d8 Mon Sep 17 00:00:00 2001 From: cuz Date: Fri, 2 Sep 2005 19:47:46 +0000 Subject: [PATCH] New diodemo version by Oliver; update of the README file git-svn-id: svn://svn.cc65.org/cc65/trunk@3619 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- samples/README | 10 +++++++++- samples/diodemo.c | 45 +++++++++++++++++++++++++++++++++------------ 2 files changed, 42 insertions(+), 13 deletions(-) diff --git a/samples/README b/samples/README index 3bc098e3c..420039966 100644 --- a/samples/README +++ b/samples/README @@ -32,6 +32,14 @@ Description: Another graphics demo written by groepaz/hitmen. Platforms: The program is currently only running on the C64, but should be portable to the C128 and CBM510 (and maybe more machines). +----------------------------------------------------------------------------- +Name: diodemo +Description: A disc copy program written and contributed by Oliver + Schmidt, . Supports single or dual disc copy. +Platforms: The program does depend on conio and dio (direct disk i/o), + so it does currently compile for the Atari and Apple ][ + machines. + ----------------------------------------------------------------------------- Name: gunzip65 Description: A gunzip utility for 6502 based machines written by Piotr @@ -85,5 +93,5 @@ Name: tgidemo Description: Shows some of the graphics capabilities of the "tiny graphics interface". Platforms: Runs on all platforms that have TGI support: - C64 + Apple ][, C64, C128, Oric Atmos, Geos and Lynx. diff --git a/samples/diodemo.c b/samples/diodemo.c index d767a1a2a..73ccfda97 100644 --- a/samples/diodemo.c +++ b/samples/diodemo.c @@ -66,7 +66,7 @@ static driveid_t AskForDrive (const char* Name) Char = cgetc (); if (isdigit (Char)) { cputc (Char); - Drive = (driveid_t) (Drive * 10 + Char - '0'); + Drive = Drive * 10 + Char - '0'; } } while (Char != CH_ENTER); @@ -87,7 +87,7 @@ static void AskForDisk (const char* Name, driveid_t Drive) static char* AllocBuffer (sectsize_t SectSize, sectnum_t SectCount, sectnum_t* ChunkCount) /* Allocate a copy buffer on the heap and return a pointer to it */ { - void* Buffer = NULL; + char* Buffer = NULL; unsigned long BufferSize; unsigned int Chunks = 1; @@ -101,11 +101,11 @@ static char* AllocBuffer (sectsize_t SectSize, sectnum_t SectCount, sectnum_t* C } } while (Buffer == NULL && ++Chunks <= MAX_CHUNKS); - return (char*) Buffer; + return Buffer; } -int main (void) +int main (int argc, const char* argv[]) { driveid_t SourceId; driveid_t TargetId; @@ -126,9 +126,28 @@ int main (void) cputs ("\r\n"); /* Get source and target drive id (which may very well be identical) */ - SourceId = AskForDrive ("Source"); - TargetId = AskForDrive ("Target"); - cputs ("\r\n\n"); + switch (argc) { + case 1: + SourceId = AskForDrive ("Source"); + TargetId = AskForDrive ("Target"); + cputs ("\r\n"); + break; + + case 2: + SourceId = TargetId = atoi (argv[1]); + break; + + case 3: + SourceId = atoi (argv[1]); + TargetId = atoi (argv[2]); + break; + + default: + cprintf ("\r\nToo many arguments\r\n"); + return EXIT_FAILURE; + } + + cputs ("\r\n"); do { /* Check for single drive copy or inital iteration */ @@ -136,8 +155,10 @@ int main (void) AskForDisk ("Source", SourceId); } - /* Open drive on initial iteration */ + /* Check for initial iteration */ if (Source == NULL) { + + /* Open source drive */ Source = dio_open (SourceId); if (Source == NULL) { cprintf ("\r\n\nError %d on opening Drive %d\r\n", (int) _oserror, SourceId); @@ -147,7 +168,7 @@ int main (void) SectSize = dio_query_sectsize (Source); SectCount = dio_query_sectcount (Source); - /* */ + /* Allocate buffer */ Buffer = AllocBuffer (SectSize, SectCount, &ChunkCount); if (Buffer == NULL) { cputs ("\r\n\nError on allocating Buffer\r\n"); @@ -163,7 +184,7 @@ int main (void) /* Read one sector */ if (dio_read (Source, Sector, Buffer + (Sector - ChunkOffset) * SectSize) != 0) { - cprintf ("\r\n\nError %d on reading Drive %d\r\n", (int) _oserror, SourceId); + cprintf ("\r\n\nError %d on reading from Drive %d\r\n", (int) _oserror, SourceId); return EXIT_FAILURE; } } @@ -173,7 +194,7 @@ int main (void) AskForDisk ("Target", TargetId); } - /* Open drive on initial iteration */ + /* Open target drive on initial iteration */ if (Target == NULL) { Target = dio_open (TargetId); if (Target == NULL) { @@ -197,7 +218,7 @@ int main (void) /* Write one sector */ if (dio_write (Target, Sector, Buffer + (Sector - ChunkOffset) * SectSize) != 0) { - cprintf ("\r\n\nError %d on opening Drive %d\r\n", (int) _oserror, TargetId); + cprintf ("\r\n\nError %d on writing to Drive %d\r\n", (int) _oserror, TargetId); return EXIT_FAILURE; } } -- 2.39.5