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:
@@ -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
|
||||||
|
@@ -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
101
samples/enumdevdir.c
Normal 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 ();
|
||||||
|
}
|
Reference in New Issue
Block a user