1
0
mirror of https://github.com/cc65/cc65.git synced 2025-08-09 13:25:06 +00:00

Added enumdevdir showcasing the recently introduced device functions (together with directory access).

git-svn-id: svn://svn.cc65.org/cc65/trunk@5851 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
ol.sc
2012-10-15 18:52:40 +00:00
parent 976c94b8ca
commit 170c59e4c2
3 changed files with 145 additions and 37 deletions

View File

@@ -48,7 +48,7 @@ MY_ASM = --forget-inc-paths -I . -I $(CA65_INC)
endif endif
# This one comes with VICE # This one comes with VICE
C1541 = c1541 C1541 = c1541
# -------------------------------------------------------------------------- # --------------------------------------------------------------------------
@@ -71,25 +71,26 @@ C1541 = c1541
# List of executables. This list could be made target dependent by checking # List of executables. This list could be made target dependent by checking
# $(SYS). # $(SYS).
EXELIST = ascii \ EXELIST = ascii \
diodemo \ diodemo \
fire \ enumdevdir \
gunzip65 \ fire \
hello \ gunzip65 \
hello \
mandelbrot \ mandelbrot \
mousedemo \ mousedemo \
multdemo \ multdemo \
nachtm \ nachtm \
ovrldemo \ ovrldemo \
plasma \ plasma \
sieve \ sieve \
tgidemo tgidemo
# -------------------------------------------------------------------------- # --------------------------------------------------------------------------
# Rules how to make each one of the binaries # Rules how to make each one of the binaries
.PHONY: all .PHONY: all
all: $(EXELIST) all: $(EXELIST)
ascii: ascii.o ascii: ascii.o
@@ -152,7 +153,7 @@ endif
# with the VICE emulator. # with the VICE emulator.
.PHONY: disk .PHONY: disk
disk: samples.d64 disk: samples.d64
samples.d64: all samples.d64: all
@$(C1541) -format samples,AA d64 $@ > /dev/null @$(C1541) -format samples,AA d64 $@ > /dev/null

View File

@@ -19,42 +19,49 @@ Please note:
List of supplied sample programs: List of supplied sample programs:
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Name: ascii Name: ascii
Description: Shows the ASCII (or ATASCII, PETSCII) codes of typed Description: Shows the ASCII (or ATASCII, PETSCII) codes of typed
characters. Written and contributed by Greg King characters. Written and contributed by Greg King
<gngking@erols.com>. <gngking@erols.com>.
Platforms: All platforms with conio or stdio (compile time configurable). Platforms: All platforms with conio or stdio (compile time configurable).
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Name: diodemo Name: diodemo
Description: A disc copy program written and contributed by Oliver Description: A disc copy program written and contributed by Oliver
Schmidt, <ol.sc@web.de>. Supports single or dual disc copy. Schmidt, <ol.sc@web.de>. Supports single or dual disc copy.
Platforms: The program does depend on conio and dio (direct disk i/o), Platforms: The program does depend on conio and dio (direct disk i/o),
so it does currently compile for the Atari and Apple ][ so it does currently compile for the Atari and Apple ][
machines. machines.
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Name: fire Name: enumdevdir
Description: Enumerates all devices, directories and files. Written and
contributed by Oliver Schmidt, <ol.sc@web.de>.
Platforms: All systems with device enumeration and directory access
(currently the C64, the C128 and the Apple ][).
-----------------------------------------------------------------------------
Name: fire
Description: Another graphics demo written by groepaz/hitmen. Description: Another graphics demo written by groepaz/hitmen.
Platforms: The program is currently only running on the C64, but should Platforms: The program is currently only running on the C64, but should
be portable to the C128 and CBM510 (and maybe more machines). be portable to the C128 and CBM510 (and maybe more machines).
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Name: gunzip65 Name: gunzip65
Description: A gunzip utility for 6502 based machines written by Piotr Description: A gunzip utility for 6502 based machines written by Piotr
Fusik <fox@scene.pl>. Fusik <fox@scene.pl>.
Platforms: Runs on all platforms with file I/O (currently the Atari, the Platforms: Runs on all platforms with file I/O (currently the Atari, the
Apple ][ and most Commodore machines). Apple ][ and most Commodore machines).
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Name: hello Name: hello
Description: A nice "Hello world" type program that uses the conio Description: A nice "Hello world" type program that uses the conio
console I/O library for output. console I/O library for output.
Platforms: Runs on all platforms that support conio, which means: Platforms: Runs on all platforms that support conio, which means:
Apple ][, Atari, C16, C64, C128, CBM510, CBM610, PET, Plus/4 Apple ][, Atari, C16, C64, C128, CBM510, CBM610, PET, Plus/4
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Name: mandelbrot Name: mandelbrot
Description: A mandelbrot demo using integer arithmetic. The demo was Description: A mandelbrot demo using integer arithmetic. The demo was
written by groepaz/hitmen and converted to cc65 using TGI written by groepaz/hitmen and converted to cc65 using TGI
graphics by Stephan Haubenthal. graphics by Stephan Haubenthal.
@@ -62,43 +69,43 @@ Platforms: Runs on all platforms that have TGI support:
Apple ][, C64, C128, Oric Atmos, Geos and Lynx. Apple ][, C64, C128, Oric Atmos, Geos and Lynx.
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Name: mousedemo Name: mousedemo
Description: Shows how to use the mouse. Description: Shows how to use the mouse.
Platforms: All systems with mouse and conio support: Platforms: All systems with mouse and conio support:
C64, C128, CBM510, Atari, Apple ][ C64, C128, CBM510, Atari, Apple ][
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Name: multidemo Name: multidemo
Description: Shows how to combine multiple cc65 features incl. overlays Description: Shows how to combine multiple cc65 features incl. overlays
and extended memory drivers. Written and contributed by and extended memory drivers. Written and contributed by
Oliver Schmidt, <ol.sc@web.de>. Oliver Schmidt, <ol.sc@web.de>.
Platforms: All systems with an overlay linker config, disk directory Platforms: All systems with an overlay linker config, disk directory
access and EMD support (currently the C64, the C128, access and EMD support (currently the C64, the C128,
the Atari and the Apple ][). the Atari and the Apple ][).
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Name: nachtm Name: nachtm
Description: Plays "Eine kleine Nachtmusik" by Wolfgang Amadeus Mozart Description: Plays "Eine kleine Nachtmusik" by Wolfgang Amadeus Mozart
Platforms: All systems that have the Commodore SID (Sound Interface Platforms: All systems that have the Commodore SID (Sound Interface
Device): Device):
C64, C128, CBM510, CBM610 C64, C128, CBM510, CBM610
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Name: overlaydemo Name: overlaydemo
Description: Shows how to load overlay files from disk. Written and Description: Shows how to load overlay files from disk. Written and
contributed by Oliver Schmidt, <ol.sc@web.de>. contributed by Oliver Schmidt, <ol.sc@web.de>.
Platforms: All systems with an overlay linker config (currently the C64, Platforms: All systems with an overlay linker config (currently the C64,
the C128, the Atari and the Apple ][). the C128, the Atari and the Apple ][).
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Name: plasma Name: plasma
Description: A fancy graphics demo written by groepaz/hitmen. Description: A fancy graphics demo written by groepaz/hitmen.
Platforms: The program needs a VIC, or a TED, so it runs on the following Platforms: The program needs a VIC, or a TED, so it runs on the following
systems: systems:
C64, C128, CBM510, Plus/4 C64, C128, CBM510, Plus/4
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Name: sieve Name: sieve
Description: Implements the "Sieve of Eratosthenes" as a way to find all Description: Implements the "Sieve of Eratosthenes" as a way to find all
prime numbers in a specific number interval. Often used as prime numbers in a specific number interval. Often used as
a benchmark program. a benchmark program.
@@ -107,9 +114,8 @@ Platforms: All systems with conio and clock support:
Apple ][ (without timing due to missing clock support) Apple ][ (without timing due to missing clock support)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
Name: tgidemo Name: tgidemo
Description: Shows some of the graphics capabilities of the "tiny graphics Description: Shows some of the graphics capabilities of the "tiny graphics
interface". interface".
Platforms: Runs on all platforms that have TGI support: Platforms: Runs on all platforms that have TGI support:
Apple ][, C64, C128, Oric Atmos, Geos and Lynx. Apple ][, C64, C128, Oric Atmos, Geos and Lynx.

101
samples/enumdevdir.c Normal file
View File

@@ -0,0 +1,101 @@
/*
* Enumerate devices, directories and files.
*
* 2012-10-15, Oliver Schmidt (ol.sc@web.de)
*
*/
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <device.h>
#include <dirent.h>
void printdir (char *newdir)
{
char olddir[FILENAME_MAX];
char curdir[FILENAME_MAX];
DIR *dir;
struct dirent *ent;
char *subdirs = NULL;
unsigned dirnum = 0;
unsigned num;
getcwd (olddir, sizeof (olddir));
if (chdir (newdir)) {
/* If chdir() fails we just print the
* directory name - as done for files.
*/
printf (" Dir %s\n", newdir);
return;
}
/* We call getcwd() in order to print the
* absolute pathname for a subdirectory.
*/
getcwd (curdir, sizeof (curdir));
printf (" Dir %s:\n", curdir);
/* Calling opendir() always with "." avoids
* fiddling around with pathname separators.
*/
dir = opendir (".");
while (ent = readdir (dir)) {
if (_DE_ISREG (ent->d_type)) {
printf (" File %s\n", ent->d_name);
continue;
}
/* We defer handling of subdirectories until we're done with the
* current one as several targets don't support other disk i/o
* while reading a directory (see cc65 readdir() doc for more).
*/
if (_DE_ISDIR (ent->d_type)) {
subdirs = realloc (subdirs, FILENAME_MAX * (dirnum + 1));
strcpy (subdirs + FILENAME_MAX * dirnum++, ent->d_name);
}
}
closedir (dir);
for (num = 0; num < dirnum; ++num) {
printdir (subdirs + FILENAME_MAX * num);
}
free (subdirs);
chdir (olddir);
}
void main (void)
{
unsigned char device;
char devicedir[FILENAME_MAX];
/* Calling getfirstdevice()/getnextdevice() does _not_ turn on the motor
* of a drive-type device and does _not_ check for a disk in the drive.
*/
device = getfirstdevice ();
while (device != INVALID_DEVICE) {
printf ("Device %d:\n", device);
/* Calling getdevicedir() _does_ check for a (formatted) disk in a
* floppy-disk-type device and returns NULL if that check fails.
*/
if (getdevicedir (device, devicedir, sizeof (devicedir))) {
printdir (devicedir);
} else {
printf (" N/A\n");
}
device = getnextdevice (device);
}
cgetc ();
}