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
# 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
# $(SYS).
EXELIST = ascii \
diodemo \
fire \
gunzip65 \
hello \
EXELIST = ascii \
diodemo \
enumdevdir \
fire \
gunzip65 \
hello \
mandelbrot \
mousedemo \
multdemo \
nachtm \
ovrldemo \
plasma \
sieve \
tgidemo
mousedemo \
multdemo \
nachtm \
ovrldemo \
plasma \
sieve \
tgidemo
# --------------------------------------------------------------------------
# Rules how to make each one of the binaries
.PHONY: all
all: $(EXELIST)
all: $(EXELIST)
ascii: ascii.o
@ -152,7 +153,7 @@ endif
# with the VICE emulator.
.PHONY: disk
disk: samples.d64
disk: samples.d64
samples.d64: all
@$(C1541) -format samples,AA d64 $@ > /dev/null

View file

@ -19,42 +19,49 @@ Please note:
List of supplied sample programs:
-----------------------------------------------------------------------------
Name: ascii
Name: ascii
Description: Shows the ASCII (or ATASCII, PETSCII) codes of typed
characters. Written and contributed by Greg King
<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
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 ][
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.
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).
-----------------------------------------------------------------------------
Name: gunzip65
Name: gunzip65
Description: A gunzip utility for 6502 based machines written by Piotr
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).
-----------------------------------------------------------------------------
Name: hello
Name: hello
Description: A nice "Hello world" type program that uses the conio
console I/O library for output.
Platforms: Runs on all platforms that support conio, which means:
Apple ][, Atari, C16, C64, C128, CBM510, CBM610, PET, Plus/4
-----------------------------------------------------------------------------
Name: mandelbrot
Name: mandelbrot
Description: A mandelbrot demo using integer arithmetic. The demo was
written by groepaz/hitmen and converted to cc65 using TGI
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.
-----------------------------------------------------------------------------
Name: mousedemo
Name: mousedemo
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 ][
-----------------------------------------------------------------------------
Name: multidemo
Name: multidemo
Description: Shows how to combine multiple cc65 features incl. overlays
and extended memory drivers. Written and contributed by
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,
the Atari and the Apple ][).
-----------------------------------------------------------------------------
Name: nachtm
Name: nachtm
Description: Plays "Eine kleine Nachtmusik" by Wolfgang Amadeus Mozart
Platforms: All systems that have the Commodore SID (Sound Interface
Device):
C64, C128, CBM510, CBM610
-----------------------------------------------------------------------------
Name: overlaydemo
Name: overlaydemo
Description: Shows how to load overlay files from disk. Written and
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 ][).
-----------------------------------------------------------------------------
Name: plasma
Name: plasma
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:
C64, C128, CBM510, Plus/4
-----------------------------------------------------------------------------
Name: sieve
Name: sieve
Description: Implements the "Sieve of Eratosthenes" as a way to find all
prime numbers in a specific number interval. Often used as
a benchmark program.
@ -107,9 +114,8 @@ Platforms: All systems with conio and 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
interface".
Platforms: Runs on all platforms that have TGI support:
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 ();
}