version 0.1 inicial para empezar a rodar

main
fanta 1 day ago
parent 728816b07c
commit 62bd0eb8df

@ -0,0 +1,16 @@
CC := gcc
CFLAGS := -Wall
LINKER_FLAGS = `sdl2-config --cflags --libs` -lxmp -lSDL2_image
test:
make clean
make build
build:
$(CC) $(CFLAGS) -o presentator presentator.c $(LINKER_FLAGS)
run:
./presentator
clean:
-rm presentator

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -0,0 +1,198 @@
#include <SDL.h>
#include <xmp.h>
#include <stdbool.h>
#include <stdio.h>
#include <SDL_image.h>
// Fanta <fanta@56k.es> 2026
// Presentator 0.1
// Variables
int modPlaying;
char * modName = NULL;
int modVolume = 100;
int iv;
char *imgVol[] = {"res/vol100.png","res/vol090.png","res/vol080.png","res/vol070.png","res/vol060.png","res/vol050.png","res/vol040.png","res/vol030.png","res/vol020.png","res/vol010.png","res/vol000.png"};
char windowTitle[16] = "Presentator 0.1";
int windowWidth = 1024;
int windowHeight = 768;
char * slidesIndex = "slides/index.txt";
char * actualSlide = NULL;
int actualNSlide = 1;
bool quit = false;
SDL_Window * window;
SDL_Renderer * render;
SDL_Texture *textureVolume = NULL;
SDL_Texture *textureSlide = NULL;
SDL_Event evento;
xmp_context ctx;
// Functions
int createWindow(void){
SDL_Init(SDL_INIT_VIDEO);
window = SDL_CreateWindow(windowTitle,SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,windowWidth,windowHeight,SDL_WINDOW_FULLSCREEN);
render = SDL_CreateRenderer(window, -1, 0);
return 0;
}
int refreshVolumeArea(int iv){
SDL_Rect textureVolumeRect1 = { 0, 0, 398, 68 };
SDL_Rect textureVolumeRect2 = { 910, 20, 100, 20 };
IMG_Init(IMG_INIT_PNG);
textureVolume = IMG_LoadTexture(render, imgVol[iv]);
SDL_RenderCopy(render, textureVolume, &textureVolumeRect1, &textureVolumeRect2);
return 0;
}
static void playBuffer(void *udata, Uint8 *stream, int len)
{
if (xmp_play_buffer((xmp_context)udata, stream, len, 0) < 0){ modPlaying = 0; }
}
static int initAudio(xmp_context ctx) {
SDL_AudioSpec a;
a.freq = 44100;
a.format = AUDIO_S16;
a.channels = 2;
a.samples = 2048;
a.callback = playBuffer;
a.userdata = ctx;
if (SDL_OpenAudio(&a, NULL) < 0) { printf("error inicializando audio: %s\n", SDL_GetError()); return 1; }
return 0;
}
void loadMod(char *modPath){
modName = modPath;
ctx = xmp_create_context();
xmp_load_module(ctx, modName);
xmp_start_player(ctx, 44100, 0);
xmp_set_player(ctx, XMP_PLAYER_VOLUME, modVolume);
initAudio(ctx);
modPlaying = 1;
SDL_PauseAudio(0);
}
int stopMod(void){
xmp_end_player(ctx);
xmp_free_context(ctx);
SDL_CloseAudio();
return 0;
}
int loadSlide(int nslide){
FILE * fp;
char * line = NULL;
size_t len = 0;
int nline = 1;
ssize_t read;
fp = fopen(slidesIndex, "r");
while ((read = getline(&line, &len, fp)) != -1) {
if (nslide == nline){
actualSlide = line;
actualSlide[ strlen(actualSlide) - 1 ] = '\0';
SDL_Rect textureSlideRect = { 0, 0, windowWidth, windowHeight };
IMG_Init(IMG_INIT_PNG);
textureSlide = IMG_LoadTexture(render, actualSlide);
SDL_RenderCopy(render, textureSlide, NULL, &textureSlideRect);
}
nline = nline +1;
}
fclose(fp);
if (line){ free(line); };
return 0;
}
int renderAll(void){
loadSlide(actualNSlide);
refreshVolumeArea(iv);
SDL_RenderPresent(render);
return 0;
}
// Main
int main(int argc, char ** argv) {
createWindow();
loadMod("mods/001.mod");
loadSlide(1);
refreshVolumeArea(0);
SDL_RenderPresent(render);
while (!quit) {
SDL_WaitEvent(&evento);
switch (evento.type) {
case SDL_KEYDOWN:
switch (evento.key.keysym.sym) {
case SDLK_q:
stopMod();
quit = true;
break;
case SDLK_DOWN:
if(modVolume > 0) {
modVolume = modVolume - 10;
xmp_set_player(ctx, XMP_PLAYER_VOLUME, modVolume);
iv = iv + 1;
renderAll();
}
break;
case SDLK_UP:
if(modVolume < 100) {
modVolume = modVolume + 10;
xmp_set_player(ctx, XMP_PLAYER_VOLUME, modVolume);
iv = iv - 1;
renderAll();
}
break;
case SDLK_1:
stopMod();
loadMod("mods/001.mod");
break;
case SDLK_2:
stopMod();
loadMod("mods/002.mod");
break;
case SDLK_3:
stopMod();
loadMod("mods/003.xm");
break;
case SDLK_4:
stopMod();
loadMod("mods/004.xm");
break;
case SDLK_5:
stopMod();
loadMod("mods/005.mod");
break;
case SDLK_6:
stopMod();
loadMod("mods/006.mod");
break;
case SDLK_7:
stopMod();
loadMod("mods/007.mod");
break;
case SDLK_8:
stopMod();
loadMod("mods/008.mod");
break;
case SDLK_9:
stopMod();
loadMod("mods/009.mod");
break;
case SDLK_RIGHT:
actualNSlide = actualNSlide + 1;
renderAll();
break;
case SDLK_LEFT:
actualNSlide = actualNSlide - 1;
renderAll();
break;
}
break;
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 530 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 574 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 596 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 617 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 642 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 660 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 685 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 706 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 705 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 728 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 654 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 369 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 KiB

@ -0,0 +1,4 @@
slides/001.png
slides/002.png
slides/003.png
slides/004.png

@ -0,0 +1,4 @@
- Añadir opción para abrir en ventana como parametro.
window = SDL_CreateWindow(windowTitle,SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,windowWidth,windowHeight,SDL_WINDOW_OPENGL);
Loading…
Cancel
Save