mirror of
https://github.com/OlivierGuinart/CC65BuildSolution.git
synced 2025-02-11 11:30:43 +00:00
First commit
This commit is contained in:
parent
e9865abf1d
commit
edce834daf
34
FrenchFest.sln
Normal file
34
FrenchFest.sln
Normal file
@ -0,0 +1,34 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 14
|
||||
VisualStudioVersion = 14.0.24720.0
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TextSlides", "TextSlides\TextSlides.vcxproj", "{A119D358-6E9D-4BDA-B5D8-1659DA9BF571}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HelloWorld", "HelloWorld\HelloWorld.vcxproj", "{B7CAA483-C7F2-4927-AE75-89BF588AF970}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PerfTest", "PerfTest\PerfTest.vcxproj", "{EC61A5AA-7BC1-418F-9B7E-F2100F30714B}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{A119D358-6E9D-4BDA-B5D8-1659DA9BF571}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{A119D358-6E9D-4BDA-B5D8-1659DA9BF571}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{A119D358-6E9D-4BDA-B5D8-1659DA9BF571}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{A119D358-6E9D-4BDA-B5D8-1659DA9BF571}.Release|Win32.Build.0 = Release|Win32
|
||||
{B7CAA483-C7F2-4927-AE75-89BF588AF970}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{B7CAA483-C7F2-4927-AE75-89BF588AF970}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{B7CAA483-C7F2-4927-AE75-89BF588AF970}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{B7CAA483-C7F2-4927-AE75-89BF588AF970}.Release|Win32.Build.0 = Release|Win32
|
||||
{EC61A5AA-7BC1-418F-9B7E-F2100F30714B}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{EC61A5AA-7BC1-418F-9B7E-F2100F30714B}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{EC61A5AA-7BC1-418F-9B7E-F2100F30714B}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{EC61A5AA-7BC1-418F-9B7E-F2100F30714B}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
6
HelloWorld/HelloWorld.c
Normal file
6
HelloWorld/HelloWorld.c
Normal file
@ -0,0 +1,6 @@
|
||||
#include <stdio.h>
|
||||
|
||||
void main(void)
|
||||
{
|
||||
printf("Hello World\n");
|
||||
}
|
85
HelloWorld/HelloWorld.vcxproj
Normal file
85
HelloWorld/HelloWorld.vcxproj
Normal file
@ -0,0 +1,85 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{B7CAA483-C7F2-4927-AE75-89BF588AF970}</ProjectGuid>
|
||||
<Keyword>MakeFileProj</Keyword>
|
||||
<SccProjectName>SAK</SccProjectName>
|
||||
<SccAuxPath>SAK</SccAuxPath>
|
||||
<SccLocalPath>SAK</SccLocalPath>
|
||||
<SccProvider>SAK</SccProvider>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Makefile</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Makefile</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<NMakeOutput>$(PRG)</NMakeOutput>
|
||||
<NMakePreprocessorDefinitions>
|
||||
</NMakePreprocessorDefinitions>
|
||||
<ExecutablePath>$(PATH);</ExecutablePath>
|
||||
<IncludePath>$(CC65ROOT)\include;</IncludePath>
|
||||
<ReferencePath />
|
||||
<LibraryPath>$(CC65ROOT)lib;</LibraryPath>
|
||||
<LibraryWPath />
|
||||
<SourcePath />
|
||||
<ExcludePath />
|
||||
<NMakeBuildCommandLine>nmake.exe</NMakeBuildCommandLine>
|
||||
<NMakeReBuildCommandLine>nmake.exe all</NMakeReBuildCommandLine>
|
||||
<NMakeCleanCommandLine>nmake.exe clean</NMakeCleanCommandLine>
|
||||
<NMakeIncludeSearchPath>D:\CC65\include;C:\Users\Olivier\SkyDrive\Apple\CC65\include;</NMakeIncludeSearchPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<NMakeOutput>$(PRG)</NMakeOutput>
|
||||
<NMakePreprocessorDefinitions>
|
||||
</NMakePreprocessorDefinitions>
|
||||
<ExecutablePath>$(PATH);</ExecutablePath>
|
||||
<IncludePath>$(CC65ROOT)\include;</IncludePath>
|
||||
<ReferencePath />
|
||||
<LibraryPath>$(CC65ROOT)lib;</LibraryPath>
|
||||
<LibraryWPath />
|
||||
<SourcePath />
|
||||
<ExcludePath />
|
||||
<NMakeIncludeSearchPath>D:\CC65\include;C:\Users\Olivier\SkyDrive\Apple\CC65\include;</NMakeIncludeSearchPath>
|
||||
<NMakeBuildCommandLine>nmake.exe</NMakeBuildCommandLine>
|
||||
<NMakeReBuildCommandLine>nmake.exe all</NMakeReBuildCommandLine>
|
||||
<NMakeCleanCommandLine>nmake.exe clean</NMakeCleanCommandLine>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="HelloWorld.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="MAKEFILE" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
61
HelloWorld/MAKEFILE
Normal file
61
HelloWorld/MAKEFILE
Normal file
@ -0,0 +1,61 @@
|
||||
PRG=HelloWorld
|
||||
SYSTEM=apple2enh
|
||||
#L'ordinateur Maison s'appelle M...
|
||||
!if "$(COMPUTERNAME)" == "M"
|
||||
# That's the location where I have programs such as AppleWin, or a DOS blank disk image
|
||||
MyAppleFolder="C:\Users\Olivier\OneDrive\Apple"
|
||||
!else
|
||||
#Environnement au bureau...
|
||||
MyAppleFolder=D:
|
||||
!endif
|
||||
|
||||
# Misc. vars
|
||||
# https://github.com/AppleWin/AppleWin
|
||||
APPLEWIN=$(MyAppleFolder)\AppleWin\Applewin.exe
|
||||
# http://applecommander.sourceforge.net/
|
||||
APPLECOMMANDER=$(MyAppleFolder)\AppleCommander-1.3.5-ac.jar
|
||||
ACJAR=java.exe -jar $(APPLECOMMANDER)
|
||||
CC65ROOT=$(MyDrive)\cc65
|
||||
CC65=$(CC65ROOT)\bin\CC65.exe
|
||||
CL65=$(CC65ROOT)\bin\CL65.exe
|
||||
|
||||
|
||||
$(PRG): $(PRG).c
|
||||
@Echo ***************************************************************
|
||||
@Echo *** On compile l'exécutable
|
||||
@Echo ***************************************************************
|
||||
# Quand je compilais avec les chaines de caractere dans text.s, j'utilisais la ligne suivante
|
||||
# $(CL65) --verbose -O -t $(SYSTEM) $(PRG).c text.s
|
||||
$(CL65) --verbose -O -t $(SYSTEM) $(PRG).c
|
||||
|
||||
GetFloppyAndCopyDSK:
|
||||
@Echo ***************************************************************
|
||||
@Echo *** On copie la disquette vierge à partir du répertoire parent
|
||||
@Echo *** et on copie dessus les fichiers executables et autres
|
||||
@Echo ***************************************************************
|
||||
copy /Y $(MyAppleFolder)\prodos.dsk .\$(PRG).dsk
|
||||
$(ACJAR) -cc65 $(PRG).dsk $(PRG) bin < $(PRG)
|
||||
|
||||
SaveAssemblyFile:
|
||||
# To get the non-optimized assembly source file and keep it (in the .backup file)
|
||||
@Echo ***************************************************************
|
||||
@Echo *** On génère le fichier source en assembleur, pour référence
|
||||
@Echo ***************************************************************
|
||||
$(CC65) -v -t $(SYSTEM) $(PRG).c text.s
|
||||
copy /Y $(PRG).s $(PRG).s.bak
|
||||
|
||||
LaunchAppleWin:
|
||||
@Echo ***************************************************************
|
||||
@Echo *** On lance le tout dans AppleWin
|
||||
@Echo ***************************************************************
|
||||
$(APPLEWIN) -d1 $(PRG).dsk
|
||||
|
||||
clean:
|
||||
@Echo ***************************************************************
|
||||
@Echo *** On efface les fichiers programme, objet et backup
|
||||
@Echo ***************************************************************
|
||||
del $(PRG) *.o *.bak
|
||||
|
||||
all: clean SaveAssemblyFile $(PRG) GetFloppyAndCopyDSK LaunchAppleWin
|
||||
|
||||
|
60
PerfTest/MAKEFILE
Normal file
60
PerfTest/MAKEFILE
Normal file
@ -0,0 +1,60 @@
|
||||
PRG=PerfCC65
|
||||
SYSTEM=apple2enh
|
||||
#L'ordinateur Maison s'appelle M...
|
||||
!if "$(COMPUTERNAME)" == "M"
|
||||
# That's the location where I have programs such as AppleWin, or a DOS blank disk image
|
||||
MyAppleFolder="C:\Users\Olivier\OneDrive\Apple"
|
||||
!else
|
||||
#Environnement au bureau...
|
||||
MyAppleFolder=D:
|
||||
!endif
|
||||
|
||||
# Misc. vars
|
||||
# https://github.com/AppleWin/AppleWin
|
||||
APPLEWIN=$(MyAppleFolder)\AppleWin\Applewin.exe
|
||||
# http://applecommander.sourceforge.net/
|
||||
APPLECOMMANDER=$(MyAppleFolder)\AppleCommander-1.3.5-ac.jar
|
||||
ACJAR=java.exe -jar $(APPLECOMMANDER)
|
||||
CC65ROOT=$(MyDrive)\cc65
|
||||
CC65=$(CC65ROOT)\bin\CC65.exe
|
||||
CL65=$(CC65ROOT)\bin\CL65.exe
|
||||
|
||||
$(PRG): $(PRG).c
|
||||
# La ligne suivante ne marche pas pour moi, a moins d'enlever -C apple2enh-system.cfg
|
||||
# cl65 --verbose -O -t $(SYSTEM) -C $(SYSTEM)-system.cfg $(PRG).c
|
||||
@Echo ***************************************************************
|
||||
@Echo *** On compile l'exécutable
|
||||
@Echo ***************************************************************
|
||||
$(CL65) --verbose -O -t $(SYSTEM) $(PRG).c
|
||||
|
||||
GetFloppyAndCopyDSK:
|
||||
@Echo ***************************************************************
|
||||
@Echo *** On copie la disquette vierge à partir du répertoire parent
|
||||
@Echo *** et on copie dessus les fichiers executables et autres
|
||||
@Echo ***************************************************************
|
||||
copy /Y $(MyAppleFolder)\prodos.dsk .\$(PRG).dsk
|
||||
$(ACJAR) -cc65 $(PRG).dsk $(PRG) bin < $(PRG)
|
||||
|
||||
SaveAssemblyFile:
|
||||
# To get the assembly source file and keep it (in the .backup file)
|
||||
@Echo ***************************************************************
|
||||
@Echo *** On génère le fichier source en assembleur, pour référence
|
||||
@Echo ***************************************************************
|
||||
$(CC65) -v -t $(SYSTEM) $(PRG).c
|
||||
copy /Y $(PRG).s $(PRG).s.bak
|
||||
|
||||
LaunchAppleWin:
|
||||
@Echo ***************************************************************
|
||||
@Echo *** On lance le tout dans AppleWin
|
||||
@Echo ***************************************************************
|
||||
$(APPLEWIN) -d1 $(PRG).dsk
|
||||
|
||||
clean:
|
||||
@Echo ***************************************************************
|
||||
@Echo *** On efface les fichiers programme, objet et backup
|
||||
@Echo ***************************************************************
|
||||
del $(PRG) *.o *.s *.bak
|
||||
|
||||
all: clean SaveAssemblyFile $(PRG) GetFloppyAndCopyDSK LaunchAppleWin
|
||||
|
||||
|
BIN
PerfTest/PerfBasic.dsk
Normal file
BIN
PerfTest/PerfBasic.dsk
Normal file
Binary file not shown.
54
PerfTest/PerfCC65.c
Normal file
54
PerfTest/PerfCC65.c
Normal file
@ -0,0 +1,54 @@
|
||||
/*
|
||||
* "Performance" "comparison". BASIC and C versions on DSK to be launched at the same time...
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <conio.h>
|
||||
#include <apple2.h>
|
||||
// stdio.h est necessaire si appel a printf
|
||||
// #include <stdio.h>
|
||||
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Data */
|
||||
/*****************************************************************************/
|
||||
|
||||
static const char Barres [] = "\\|/-";
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Code */
|
||||
/*****************************************************************************/
|
||||
|
||||
int main (void)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
/* Clear the screen, put cursor in upper left corner */
|
||||
clrscr ();
|
||||
|
||||
/* Write the animated star in the mid of the screen */
|
||||
for (i = 0; i < 1000; i++)
|
||||
{
|
||||
// for (j = 0; j < iLen; j++)
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
// gotoxy(iMidX, iMidY);
|
||||
gotoxy(20, 12);
|
||||
cprintf("%c", Barres[j]);
|
||||
}
|
||||
}
|
||||
// printf("C'est fini !");
|
||||
/* Clear the screen again */
|
||||
// clrscr ();
|
||||
|
||||
/* Done */
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
|
89
PerfTest/PerfTest.vcxproj
Normal file
89
PerfTest/PerfTest.vcxproj
Normal file
@ -0,0 +1,89 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{EC61A5AA-7BC1-418F-9B7E-F2100F30714B}</ProjectGuid>
|
||||
<Keyword>MakeFileProj</Keyword>
|
||||
<SccProjectName>SAK</SccProjectName>
|
||||
<SccAuxPath>SAK</SccAuxPath>
|
||||
<SccLocalPath>SAK</SccLocalPath>
|
||||
<SccProvider>SAK</SccProvider>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Makefile</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Makefile</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<NMakeOutput>$(PRG)</NMakeOutput>
|
||||
<NMakePreprocessorDefinitions>
|
||||
</NMakePreprocessorDefinitions>
|
||||
<ExecutablePath>$(PATH);</ExecutablePath>
|
||||
<IncludePath>$(CC65ROOT)\include;</IncludePath>
|
||||
<ReferencePath />
|
||||
<LibraryPath>$(CC65ROOT)\lib;</LibraryPath>
|
||||
<LibraryWPath />
|
||||
<SourcePath />
|
||||
<ExcludePath />
|
||||
<NMakeBuildCommandLine>nmake.exe</NMakeBuildCommandLine>
|
||||
<NMakeReBuildCommandLine>nmake.exe all</NMakeReBuildCommandLine>
|
||||
<NMakeCleanCommandLine>nmake.exe clean</NMakeCleanCommandLine>
|
||||
<NMakeIncludeSearchPath>D:\CC65\include;C:\Users\Olivier\SkyDrive\Apple\CC65\include;</NMakeIncludeSearchPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<NMakeOutput>$(PRG)</NMakeOutput>
|
||||
<NMakePreprocessorDefinitions>
|
||||
</NMakePreprocessorDefinitions>
|
||||
<ExecutablePath>$(PATH);</ExecutablePath>
|
||||
<IncludePath>$(CC65ROOT)\include;</IncludePath>
|
||||
<ReferencePath />
|
||||
<LibraryPath>$(CC65ROOT)\lib;</LibraryPath>
|
||||
<LibraryWPath />
|
||||
<SourcePath />
|
||||
<ExcludePath />
|
||||
<NMakeBuildCommandLine>nmake.exe</NMakeBuildCommandLine>
|
||||
<NMakeReBuildCommandLine>nmake.exe all</NMakeReBuildCommandLine>
|
||||
<NMakeCleanCommandLine>nmake.exe clean</NMakeCleanCommandLine>
|
||||
<NMakeIncludeSearchPath>D:\CC65\include;C:\Users\Olivier\SkyDrive\Apple\CC65\include;</NMakeIncludeSearchPath>
|
||||
<NMakeForcedIncludes>
|
||||
</NMakeForcedIncludes>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<None Include="MAKEFILE" />
|
||||
<None Include="perfbas.bas" />
|
||||
<None Include="PerfBasic.dsk" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="PerfCC65.c" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
2
PerfTest/perfbas.bas
Normal file
2
PerfTest/perfbas.bas
Normal file
@ -0,0 +1,2 @@
|
||||
01 REM TRANSFERED TO FLOPPY WITH CIDERPRESS (ACTIONS MENU, IMPORT BAS FROM TEXT OPTION)
|
||||
10 DATA "/", "-", "\", "|"
15 HOME
20 FOR I = 1 TO 1000
25 FOR J = 1 TO 4
30 HTAB 20
40 VTAB 12
50 READ C$
60 PRINT C$
70 NEXT J
80 RESTORE
90 NEXT I
95 END
|
6
README.md
Normal file
6
README.md
Normal file
@ -0,0 +1,6 @@
|
||||
# CC65 Build Solution
|
||||
Visual Studio makefile solution to build Apple II projects with CC65.
|
||||
|
||||
This is a boilerplate VS solution to jumpstart CC65 projects development. The most important file is MAKEFILE: this is where you set your paths to your local tools, e.g. AppleWin, prodos.dsk, Merlin32, AppleCommander, GSPort, etc...
|
||||
|
||||
The solution includes 3 projects which were demo'ed at the 2015 [APPLE II FESTIVAL FRANCE (A2FF)](http://www.apple2festivalfrance.fr/).
|
115
TextSlides/Diapos.txt
Normal file
115
TextSlides/Diapos.txt
Normal file
@ -0,0 +1,115 @@
|
||||
Atelier CC65 (Olivier Guinart)
|
||||
Apple French Festival 2015
|
||||
AGENDA
|
||||
11
|
||||
* Qu'est-ce que CC65 ?
|
||||
|
||||
* Fonctionnalites
|
||||
|
||||
* Developper aujourd'hui avec CC65
|
||||
|
||||
* Demo !
|
||||
|
||||
* Ressources
|
||||
|
||||
* Remerciements
|
||||
QU'EST-CE QUE CC65 ?
|
||||
11
|
||||
* Ensemble d'outils (Windows, OS X, GNU/Linux, AmigaOS) :
|
||||
|
||||
1- Un compilateur C
|
||||
|
||||
2- Un assembleur
|
||||
|
||||
3- Des librairies de fonctions
|
||||
|
||||
4- Des librairies de cibles 6502 (Apple II, C64, Atari 2600, GEOS, ...)
|
||||
|
||||
5- De la documentation, des examples, une communaute
|
||||
FONCTIONNALITES
|
||||
11
|
||||
* Texte
|
||||
|
||||
* Graphisme (http://www.appleoldies.ca/graphics/index.htm)
|
||||
|
||||
* PEEK et POKE
|
||||
|
||||
* Acces disquette (en-tete dio.h pour routines R/W de secteurs)
|
||||
|
||||
* Pilotes joystick, souris, RS232
|
||||
|
||||
* Langage machine en ligne (e.g. asm("sta $c050"); /* GRAPHICS */)
|
||||
EXEMPLE #1
|
||||
12
|
||||
#include <stdio.h>
|
||||
|
||||
void main(void)
|
||||
{
|
||||
printf("Hello, world!\n");
|
||||
}
|
||||
|
||||
|
||||
* La commande "cl65 hello.c" genere un fichier “hello.o”
|
||||
et un executable C64 (defaut), “hello”
|
||||
|
||||
* Pour la version Apple II, "cl65 -t apple2 hello.c"
|
||||
EXEMPLE #2
|
||||
14
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
extern const char text[]; /* In text.s */
|
||||
|
||||
int main (void)
|
||||
{
|
||||
printf ("%s\n", text);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
Text.s:
|
||||
.export _text
|
||||
_text: .asciiz "Hello world!"
|
||||
Developper aujourd'hui avec CC65
|
||||
15
|
||||
* Visual Studio pour developper :
|
||||
- dans un environnment moderne,
|
||||
- avec Intellisense,
|
||||
- dans le cloud,
|
||||
- avec gestion de versions,
|
||||
- en collaboratif,
|
||||
- gratuit !
|
||||
|
||||
* MAKEFILE et NMake pour generer
|
||||
|
||||
* Apple Commander pour transferer sous environnement Apple II
|
||||
(option -cc65 pour le transfert du programme)
|
||||
|
||||
* Emulateur AppleWin pour tester
|
||||
(e.g. AppleWin.exe -d1 Prodos.dsk)
|
||||
Demo !
|
||||
0
|
||||
Ressources
|
||||
12
|
||||
* CC65 : http://cc65.github.io/cc65/ et http://www.cc65.org/index.php
|
||||
|
||||
* Visual Studio :
|
||||
https://www.visualstudio.com/downloads/download-visual-studio-vs
|
||||
Express 2015 pour Windows Desktop ou Visual Studio Community 2015
|
||||
|
||||
* AppleCommander : http://applecommander.sourceforge.net/
|
||||
(requiert Java)
|
||||
|
||||
* AppleWin : https://github.com/AppleWin/AppleWin
|
||||
|
||||
* Me contacter : olivier_guinart@live.com
|
||||
Remerciements
|
||||
9
|
||||
* Ullrich von Bassewitz et Oliver Schmidt (CC65)
|
||||
|
||||
* http://atarilynxdeveloper.wordpress.com (parametres Visual Studio)
|
||||
|
||||
* Bill Buckels (Source de demo graphique)
|
||||
|
||||
* Le Maska
|
||||
|
||||
* Le comite organisateur :)
|
60
TextSlides/MAKEFILE
Normal file
60
TextSlides/MAKEFILE
Normal file
@ -0,0 +1,60 @@
|
||||
PRG=TextSlides
|
||||
SYSTEM=apple2enh
|
||||
#L'ordinateur Maison s'appelle M...
|
||||
!if "$(COMPUTERNAME)" == "M"
|
||||
# That's the location where I have programs such as AppleWin, or a DOS blank disk image
|
||||
MyAppleFolder="C:\Users\Olivier\OneDrive\Apple"
|
||||
!else
|
||||
#Environnement au bureau...
|
||||
MyAppleFolder=D:
|
||||
!endif
|
||||
|
||||
# Misc. vars
|
||||
# https://github.com/AppleWin/AppleWin
|
||||
APPLEWIN=$(MyAppleFolder)\AppleWin\Applewin.exe
|
||||
# http://applecommander.sourceforge.net/
|
||||
APPLECOMMANDER=$(MyAppleFolder)\AppleCommander-1.3.5-ac.jar
|
||||
ACJAR=java.exe -jar $(APPLECOMMANDER)
|
||||
CC65ROOT=$(MyDrive)\cc65
|
||||
CC65=$(CC65ROOT)\bin\CC65.exe
|
||||
CL65=$(CC65ROOT)\bin\CL65.exe
|
||||
|
||||
$(PRG): $(PRG).c
|
||||
@Echo ***************************************************************
|
||||
@Echo *** On compile l'exécutable
|
||||
@Echo ***************************************************************
|
||||
# Quand je compilais avec les chaines de caractere dans text.s, j'utilisais la ligne suivante
|
||||
# $(CL65) --verbose -O -t $(SYSTEM) $(PRG).c text.s
|
||||
$(CL65) --verbose -O -t $(SYSTEM) $(PRG).c
|
||||
|
||||
GetFloppyAndCopyDSK:
|
||||
@Echo ***************************************************************
|
||||
@Echo *** On copie la disquette vierge à partir du répertoire parent
|
||||
@Echo *** et on copie dessus les fichiers executables et autres
|
||||
@Echo ***************************************************************
|
||||
copy /Y $(MyAppleFolder)\prodos.dsk .\$(PRG).dsk
|
||||
$(ACJAR) -cc65 $(PRG).dsk $(PRG) bin < $(PRG)
|
||||
$(ACJAR) -p $(PRG).dsk Diapos.txt text < Diapos.txt
|
||||
|
||||
SaveAssemblyFile:
|
||||
# To get the non-optimized assembly source file and keep it (in the .backup file)
|
||||
@Echo ***************************************************************
|
||||
@Echo *** On génère le fichier source en assembleur, pour référence
|
||||
@Echo ***************************************************************
|
||||
$(CC65) -v -t $(SYSTEM) $(PRG).c text.s
|
||||
copy /Y $(PRG).s $(PRG).s.bak
|
||||
|
||||
LaunchAppleWin:
|
||||
@Echo ***************************************************************
|
||||
@Echo *** On lance le tout dans AppleWin
|
||||
@Echo ***************************************************************
|
||||
$(APPLEWIN) -d1 $(PRG).dsk
|
||||
|
||||
clean:
|
||||
@Echo ***************************************************************
|
||||
@Echo *** On efface les fichiers programme, objet et backup
|
||||
@Echo ***************************************************************
|
||||
del $(PRG) *.o *.bak
|
||||
|
||||
all: clean SaveAssemblyFile $(PRG) GetFloppyAndCopyDSK LaunchAppleWin
|
||||
|
407
TextSlides/TextSlides.c
Normal file
407
TextSlides/TextSlides.c
Normal file
@ -0,0 +1,407 @@
|
||||
/* ------------------------------------------------------------------------
|
||||
System : cc65 cross-development environment
|
||||
Platform : Apple IIe
|
||||
Program : TextSlides (C) Copyright Olivier Guinart 2015.
|
||||
All rights reserved.
|
||||
|
||||
Description : Apple //e ProDOS 8 Text-based Slideshow Program
|
||||
|
||||
Written by : Olivier Guinart
|
||||
Date Written : April 2015
|
||||
Revision : 1.0 First Release (CC65)
|
||||
Date Revised : xxxxx
|
||||
|
||||
Licence : You may use this program for whatever you wish as long
|
||||
as you agree that Olivier Guinart has no warranty or
|
||||
liability obligations whatsoever from said use.
|
||||
------------------------------------------------------------------------ */
|
||||
|
||||
#ifndef __APPLE2__
|
||||
#define __APPLE2__
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <conio.h>
|
||||
#include <errno.h>
|
||||
#include <apple2enh.h>
|
||||
#include "_file.h"
|
||||
|
||||
|
||||
#define iMaxStrLen 256
|
||||
#define ELLIPSIS "...\0" // Used to truncate the slide title if it's longer than screen width
|
||||
|
||||
unsigned char XSize, YSize; // Used to store screen size
|
||||
int iSlidesPosition[iMaxStrLen]; // Used to store slides position within Diapos.txt for fseek purposes
|
||||
char strTemp[iMaxStrLen]; // Temp string
|
||||
int ch; // Temp char
|
||||
int iPos; // Temp var that tracks the current line of the slides txt file
|
||||
int iCurrentSlide; // Tracks the current slide being displayed
|
||||
|
||||
/* 1MHZ timing loop settings - increase for faster machines */
|
||||
#define YTIME 60L
|
||||
#define XTIME 2L
|
||||
char wait(unsigned duration)
|
||||
{
|
||||
char c = 0;
|
||||
long y, x;
|
||||
|
||||
while (duration > 0) {
|
||||
for (y = 0; y < YTIME; y++) {
|
||||
for (x = 0; x < XTIME; x++) {
|
||||
if (kbhit()) {
|
||||
c = cgetc();
|
||||
/* clear keyboard buffer */
|
||||
while (kbhit())cgetc();
|
||||
return c;
|
||||
}
|
||||
}
|
||||
}
|
||||
duration--;
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
void sound(int duration, int pitch)
|
||||
{
|
||||
char *speaker = (char*) 0xC030;
|
||||
int i, j;
|
||||
char c;
|
||||
|
||||
for (i = 0; i < duration; i++)
|
||||
{
|
||||
c += *speaker;
|
||||
for (j = 0; j < pitch; j++);
|
||||
}
|
||||
}
|
||||
|
||||
/* fgets for Apple II text files - read native apple II text files properly!
|
||||
the cc65 version doesn't! Which means that you need to use unix text files
|
||||
unless you roll your own fgets... */
|
||||
/* Created in Windows, text file lines end with CRLF, chr(13) + chr(10) */
|
||||
char* __fastcall__ fgets(char* s, unsigned size, register FILE* f)
|
||||
{
|
||||
register char* p = s;
|
||||
unsigned i;
|
||||
int c;
|
||||
|
||||
if (size == 0) {
|
||||
/* Invalid size */
|
||||
return (char*)_seterrno(EINVAL);
|
||||
}
|
||||
|
||||
/* Read input */
|
||||
i = 0;
|
||||
c = fgetc(f);
|
||||
while (c != EOF && ((char)c != (char)13)) {
|
||||
//printf("'%i' ",c);
|
||||
/* One char more */
|
||||
*p = c;
|
||||
++p;
|
||||
++i;
|
||||
c = fgetc(f);
|
||||
}
|
||||
|
||||
if (c == EOF) {
|
||||
// printf("DEBUG: in fgets with EOF%c",(char)13);
|
||||
/* Error or EOF */
|
||||
if ((f->f_flags & _FERROR) != 0 || i == 0) {
|
||||
/* ERROR or EOF on first char */
|
||||
// printf("DEBUG: in fgets returning %i%c",NULL,(char)13);
|
||||
*p = '\0';
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
/* On lit le charactere LF, on l'ignore */
|
||||
c = fgetc(f);
|
||||
/* Terminate the string */
|
||||
*p = '\0';
|
||||
|
||||
/* Done */
|
||||
return s;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
/// Repositions the file pointer to line iLine
|
||||
/// iLine line number were the next read will happen
|
||||
/// fp file from which to read the iBullets points
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
int PositionFilePointer(int iLine, FILE *fp)
|
||||
{
|
||||
int i;
|
||||
|
||||
// If we are here, it means we need to close the file, re-open it and reposition the pointer to the line #iLine...
|
||||
fclose(fp);
|
||||
/* We test/open the files of slides */
|
||||
if ((fp = fopen("Diapos.txt", "r")) == NULL)
|
||||
{
|
||||
printf("Files 'Diapos.txt' couldn't be opened. Press a key to exit.");
|
||||
cgetc();
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
for (i = 1; i < iLine; i++)
|
||||
{
|
||||
fgets(strTemp, iMaxStrLen, fp);
|
||||
}
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/// Print slide frame
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
void SlideFrame()
|
||||
{
|
||||
/* Set screen colors, hide the cursor */
|
||||
//textcolor(COLOR_WHITE);
|
||||
//bordercolor(COLOR_BLACK);
|
||||
//bgcolor(COLOR_BLACK);
|
||||
//cursor(0);
|
||||
|
||||
/* Clear the screen, put cursor in upper left corner */
|
||||
clrscr();
|
||||
|
||||
/* Draw a border around the screen */
|
||||
|
||||
/* Top line */
|
||||
cputc(CH_ULCORNER);
|
||||
chline(XSize - 2);
|
||||
cputc(CH_URCORNER);
|
||||
|
||||
/* Vertical line, left side */
|
||||
cvlinexy(0, 1, YSize - 2);
|
||||
|
||||
/* Bottom line */
|
||||
cputc(CH_LLCORNER);
|
||||
chline(XSize - 2);
|
||||
cputc(CH_LRCORNER);
|
||||
|
||||
/* Vertical line, right side */
|
||||
cvlinexy(XSize - 1, 1, YSize - 2);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/// Slide #0 with title and subtitle of the presentation
|
||||
/// strTitles, 2 strings arrays for title and subtitle
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
void ShowOpeningSlide(char strTitles[2][iMaxStrLen])
|
||||
{
|
||||
int ilenTitle, ilenSubTitle, iMidX, iMidY;
|
||||
|
||||
ilenTitle = strlen(strTitles[0]);
|
||||
ilenSubTitle = strlen(strTitles[1]);
|
||||
|
||||
// If Title and subtitle are empty, no need to even display an opening slides...
|
||||
if ((ilenTitle + ilenSubTitle) > 0)
|
||||
{
|
||||
SlideFrame();
|
||||
|
||||
// printf("DEBUG: ilen '%i'%c", ilen, (char)13);
|
||||
// printf("DEBUG: XSize '%i'%c", XSize, (char)13);
|
||||
iMidX = XSize / 2;
|
||||
iMidY = YSize / 2;
|
||||
|
||||
// printf("DEBUG: iMidX '%i'%c", iMidX, (char)13);
|
||||
// Printing first the frame of the title
|
||||
/* Vertical line, left side (x, y, longueur) */
|
||||
// cvlinexy(iMidX - 2, 1, 1);
|
||||
/* Ligne horizontale sous le texte */
|
||||
// chlinexy(iMidX - 1, 2, ilen + 2);
|
||||
/* Vertical line, right side */
|
||||
// cvlinexy(iMidX + ilen + 1, 1, 1);
|
||||
// Handling the title now, it will print from both right and left sides, animation effect...
|
||||
gotoxy(iMidX - (ilenTitle / 2), iMidY - 4); // -4 to print a little bit above the middle
|
||||
printf("%s", strTitles[0]);
|
||||
gotoxy(iMidX - (ilenSubTitle / 2), iMidY);
|
||||
printf("%s", strTitles[1]);
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/// Reads the slides file and call the ShowOpeningSlide procedure
|
||||
/// strTitles, 2 strings arrays for title and subtitle
|
||||
/// fp the slides text file
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
int OpenAndShowOpeningSlide(char strTitles[2][iMaxStrLen], FILE *fp)
|
||||
{
|
||||
iPos = 0; // iPos will record the current line of the slides txt file
|
||||
iCurrentSlide = 0;
|
||||
PositionFilePointer(iPos, fp);
|
||||
fgets(strTitles[0], iMaxStrLen, fp);
|
||||
iPos++;
|
||||
iSlidesPosition[iCurrentSlide] = iPos; // the opening slide is always on first (and second) line of the slides text file
|
||||
fgets(strTitles[1], iMaxStrLen, fp);
|
||||
iPos++;
|
||||
ShowOpeningSlide(strTitles);
|
||||
return cgetc();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/// Print slide titles, below top frame line, centered and boxed
|
||||
/// strTitle, the title of the slide read in Main() loop
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
void SlideTitle(char strTitle[iMaxStrLen])
|
||||
{
|
||||
int i, j, ilen, iMidX;
|
||||
int iMargin = 5;
|
||||
register char* p;
|
||||
|
||||
ilen = strlen(strTitle);
|
||||
// printf("DEBUG: ilen '%i'%c", ilen, (char)13);
|
||||
// printf("DEBUG: XSize '%i'%c", XSize, (char)13);
|
||||
// We need to test if the title is longer than the screen width + some buffer = 5
|
||||
// If yes, we truncate with ellipsis...
|
||||
if (ilen >= (XSize - iMargin))
|
||||
{
|
||||
p = strTitle + XSize - iMargin - strlen(ELLIPSIS);
|
||||
memcpy(p, ELLIPSIS, strlen(ELLIPSIS));
|
||||
ilen = strlen(strTitle);
|
||||
}
|
||||
iMidX = (XSize - ilen) / 2;
|
||||
// printf("DEBUG: iMidX '%i'%c", iMidX, (char)13);
|
||||
// printf("DEBUG: ilen = %i%c",ilen,(char)13);
|
||||
// Printing first the frame of the title
|
||||
/* Vertical line, left side (x, y, longueur) */
|
||||
cvlinexy(iMidX - 2, 1, 1);
|
||||
/* Ligne horizontale sous le texte */
|
||||
chlinexy(iMidX - 1 , 2, ilen + 2);
|
||||
/* Vertical line, right side */
|
||||
cvlinexy(iMidX + ilen + 1, 1, 1);
|
||||
// Handling the title now, it will print from both right and left sides, animation effect...
|
||||
i = 0;
|
||||
j = ilen - 1; // zero-index string array...
|
||||
while (i <= j) {
|
||||
gotoxy(iMidX + i, 1);
|
||||
printf("%c", strTitle[i]);
|
||||
gotoxy(iMidX + j, 1);
|
||||
printf("%c", strTitle[j]);
|
||||
sound(5, 30);
|
||||
wait(1);
|
||||
i++;
|
||||
j--;
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
/// Reads bullets from text files and prints them on screen, with margins x = 5, start y = 7
|
||||
/// iBullets number of bullets/points of the slide
|
||||
/// fp file from which to read the iBullets points
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
void SlideBullets(int iBullets, FILE *fp)
|
||||
{
|
||||
const int iHmarge = 5;
|
||||
const int iVmarge = 5;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < iBullets; i++) {
|
||||
gotoxy(iHmarge, iVmarge + i);
|
||||
fgets(strTemp, iMaxStrLen, fp);
|
||||
printf("%s", strTemp);
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
/// Draws the whole slide
|
||||
/// strTitle, the title of the slide read in Main() loop
|
||||
/// iBullets number of bullets/points of the slide
|
||||
/// fp file from which to read the iBullets points
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
void TitleAndContentSlide(char strTitle[iMaxStrLen], int iBullets, FILE *fp)
|
||||
{
|
||||
// We draw the frame of the slide
|
||||
SlideFrame();
|
||||
// We print the slide title
|
||||
SlideTitle(strTitle);
|
||||
// We load and print iBullets bullets from text file fp
|
||||
SlideBullets(iBullets, fp);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
/// Main :)
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
int main(void)
|
||||
{
|
||||
char strTitles[2][iMaxStrLen];
|
||||
char strSlideTitle[iMaxStrLen];
|
||||
int iBullets;
|
||||
FILE *fp;
|
||||
|
||||
/* We test/open the files of slides */
|
||||
if ((fp = fopen("Diapos.txt", "r")) == NULL) {
|
||||
printf("Files 'Diapos.txt' couldn't be opened. Press a key to exit.");
|
||||
cgetc();
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
videomode(VIDEOMODE_80COL);
|
||||
|
||||
/* Ask for the screen size */
|
||||
screensize(&XSize, &YSize);
|
||||
|
||||
// Slides are read from file
|
||||
// File structure:
|
||||
// 1st line = Presentation title (to be printed in Opening Slide)
|
||||
// 2nd line = Presentation subtitle (to be printed in Opening Slide)
|
||||
// 3rd line = Title of the first slide
|
||||
// 4th line = n number of bullets for that slide
|
||||
// n following lines = bullets of the slide
|
||||
// Repeat with 3rd, 4th and n lines structure for next slides
|
||||
|
||||
ch = OpenAndShowOpeningSlide(strTitles, fp);
|
||||
|
||||
// First slide, First line = title...
|
||||
while (fgets(strSlideTitle, iMaxStrLen, fp) != NULL) {
|
||||
// We record the slide position in the slides text file
|
||||
iCurrentSlide++;
|
||||
iPos++; // +1 because of the title
|
||||
// printf("DEBUG: iCurrentSlide='%i' iPos='%i'%c", iCurrentSlide, iPos, (char)13);
|
||||
// cgetc();
|
||||
iSlidesPosition[iCurrentSlide] = iPos; // We save the line position of the slide title
|
||||
// Second line = Number of bullets in current slide...
|
||||
fgets(strTemp, iMaxStrLen, fp);
|
||||
iPos++; // +1 because of the count of bullets
|
||||
// printf("DEBUG: strTemp '%s'%c", strTemp, (char)13);
|
||||
iBullets = atoi(strTemp);
|
||||
iPos+=iBullets; // And adding the bullets themselves
|
||||
TitleAndContentSlide(strSlideTitle, iBullets, fp);
|
||||
// We pause before going to next slide
|
||||
ch = cgetc();
|
||||
if (ch == CH_ESC) // If escape key pressed, exit loop
|
||||
{
|
||||
break;
|
||||
}
|
||||
if (ch == CH_CURS_LEFT) // Back to previous slide with left arrow letter (for now)
|
||||
{
|
||||
iCurrentSlide--;
|
||||
if (iCurrentSlide > 0)
|
||||
{
|
||||
iPos = iSlidesPosition[iCurrentSlide];
|
||||
PositionFilePointer(iPos, fp);
|
||||
// When we entered the loop the first time, we weren't yet on the line, now we are, so
|
||||
// to avoid counting it twice, we decrease it here by one...
|
||||
iPos--;
|
||||
// And same for the slide #...
|
||||
iCurrentSlide--;
|
||||
}
|
||||
else
|
||||
{
|
||||
// we are back to the opening slide
|
||||
// and we keep looping if users keeps pressing left arrow
|
||||
ch = OpenAndShowOpeningSlide(strTitles, fp);
|
||||
while (ch == CH_CURS_LEFT)
|
||||
{
|
||||
ch = cgetc();
|
||||
};
|
||||
// but we exit loop if ESC
|
||||
if (ch == CH_ESC)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Close the file
|
||||
fclose(fp);
|
||||
clrscr();
|
||||
return EXIT_SUCCESS;
|
||||
}
|
90
TextSlides/TextSlides.vcxproj
Normal file
90
TextSlides/TextSlides.vcxproj
Normal file
@ -0,0 +1,90 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{A119D358-6E9D-4BDA-B5D8-1659DA9BF571}</ProjectGuid>
|
||||
<Keyword>MakeFileProj</Keyword>
|
||||
<SccProjectName>SAK</SccProjectName>
|
||||
<SccAuxPath>SAK</SccAuxPath>
|
||||
<SccLocalPath>SAK</SccLocalPath>
|
||||
<SccProvider>SAK</SccProvider>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Makefile</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Makefile</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<NMakeOutput>$(PRG)</NMakeOutput>
|
||||
<NMakePreprocessorDefinitions>
|
||||
</NMakePreprocessorDefinitions>
|
||||
<ExecutablePath>$(PATH);</ExecutablePath>
|
||||
<IncludePath>$(CC65ROOT)\include;</IncludePath>
|
||||
<ReferencePath />
|
||||
<LibraryPath>$(CC65ROOT)\lib;</LibraryPath>
|
||||
<LibraryWPath />
|
||||
<SourcePath />
|
||||
<ExcludePath />
|
||||
<NMakeBuildCommandLine>nmake.exe</NMakeBuildCommandLine>
|
||||
<NMakeReBuildCommandLine>nmake.exe all</NMakeReBuildCommandLine>
|
||||
<NMakeCleanCommandLine>nmake.exe clean</NMakeCleanCommandLine>
|
||||
<NMakeIncludeSearchPath>D:\CC65\include;C:\Users\Olivier\SkyDrive\Apple\CC65\include;</NMakeIncludeSearchPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<NMakeOutput>$(PRG)</NMakeOutput>
|
||||
<NMakePreprocessorDefinitions>
|
||||
</NMakePreprocessorDefinitions>
|
||||
<ExecutablePath>$(PATH);</ExecutablePath>
|
||||
<IncludePath>$(CC65ROOT)\include;</IncludePath>
|
||||
<ReferencePath />
|
||||
<LibraryPath>$(CC65ROOT)\lib;</LibraryPath>
|
||||
<LibraryWPath />
|
||||
<SourcePath />
|
||||
<ExcludePath />
|
||||
<NMakeBuildCommandLine>nmake.exe</NMakeBuildCommandLine>
|
||||
<NMakeReBuildCommandLine>nmake.exe all</NMakeReBuildCommandLine>
|
||||
<NMakeCleanCommandLine>nmake.exe clean</NMakeCleanCommandLine>
|
||||
<NMakeIncludeSearchPath>D:\CC65\include;C:\Users\Olivier\SkyDrive\Apple\CC65\include;</NMakeIncludeSearchPath>
|
||||
<NMakeForcedIncludes>
|
||||
</NMakeForcedIncludes>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<Text Include="Diapos.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="MAKEFILE" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="TextSlides.c" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
51
TextSlides/_file.h
Normal file
51
TextSlides/_file.h
Normal file
@ -0,0 +1,51 @@
|
||||
/*
|
||||
* _file.h
|
||||
*
|
||||
* (C) Copyright 1998, 2002 Ullrich von Bassewitz (uz@cc65.org)
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#ifndef __FILE_H
|
||||
#define __FILE_H
|
||||
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
|
||||
/* Definition of struct _FILE */
|
||||
struct _FILE {
|
||||
char f_fd;
|
||||
char f_flags;
|
||||
unsigned char f_pushback;
|
||||
};
|
||||
|
||||
/* File table. Beware: FOPEN_MAX is hardcoded in the ASM files! */
|
||||
extern FILE _filetab[FOPEN_MAX];
|
||||
|
||||
/* Flags field */
|
||||
#define _FCLOSED 0x00
|
||||
#define _FOPEN 0x01
|
||||
#define _FEOF 0x02
|
||||
#define _FERROR 0x04
|
||||
#define _FPUSHBACK 0x08
|
||||
|
||||
|
||||
|
||||
FILE* __fastcall__ _fopen (const char* name, const char* mode, FILE* f);
|
||||
/* Open the specified file and fill the descriptor values into f */
|
||||
|
||||
FILE* _fdesc (void);
|
||||
/* Find a free FILE descriptor */
|
||||
|
||||
|
||||
|
||||
/* End of _file.h */
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user