Added ability to print to top or bottom screen.
This commit is contained in:
parent
238957c65a
commit
e1848bcfc9
@ -1,5 +1,4 @@
|
|||||||
#ifndef FONT_H
|
#pragma once
|
||||||
#define FONT_H
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char c;
|
char c;
|
||||||
@ -19,5 +18,3 @@ extern u8 font1Data[];
|
|||||||
extern charDesc_s font1Desc[];
|
extern charDesc_s font1Desc[];
|
||||||
|
|
||||||
extern font_s fontDefault;
|
extern font_s fontDefault;
|
||||||
|
|
||||||
#endif
|
|
||||||
|
@ -18,19 +18,19 @@ int main()
|
|||||||
gfxInit();
|
gfxInit();
|
||||||
gfxSet3D(false);
|
gfxSet3D(false);
|
||||||
|
|
||||||
clearScreen();
|
clearScreens();
|
||||||
print("Press A to begin...\n");
|
print(GFX_TOP, "Press A to begin...\n");
|
||||||
|
|
||||||
APP_STATUS status;
|
APP_STATUS status;
|
||||||
while ((status = aptGetStatus()) != APP_EXITING) {
|
while ((status = aptGetStatus()) != APP_EXITING) {
|
||||||
if (status == APP_RUNNING) {
|
if (status == APP_RUNNING) {
|
||||||
drawFrame();
|
drawFrames();
|
||||||
|
|
||||||
hidScanInput();
|
hidScanInput();
|
||||||
if (hidKeysDown() & KEY_B) {
|
if (hidKeysDown() & KEY_B) {
|
||||||
break;
|
break;
|
||||||
} else if (hidKeysDown() & KEY_A) {
|
} else if (hidKeysDown() & KEY_A) {
|
||||||
clearScreen();
|
clearScreen(GFX_TOP);
|
||||||
|
|
||||||
if (testCounter < (sizeof(tests) / sizeof(tests[0]))) {
|
if (testCounter < (sizeof(tests) / sizeof(tests[0]))) {
|
||||||
tests[testCounter]();
|
tests[testCounter]();
|
||||||
@ -39,8 +39,8 @@ int main()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
print("\n");
|
print(GFX_TOP, "\n");
|
||||||
print("Press A to continue...\n");
|
print(GFX_TOP, "Press A to continue...\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (status == APP_SUSPENDING) {
|
} else if (status == APP_SUSPENDING) {
|
||||||
@ -53,7 +53,7 @@ int main()
|
|||||||
gspWaitForEvent(GSPEVENT_VBlank0, false);
|
gspWaitForEvent(GSPEVENT_VBlank0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
clearScreen();
|
clearScreens();
|
||||||
gfxExit();
|
gfxExit();
|
||||||
hidExit();
|
hidExit();
|
||||||
aptExit();
|
aptExit();
|
||||||
|
@ -8,7 +8,8 @@
|
|||||||
|
|
||||||
#include "text.h"
|
#include "text.h"
|
||||||
|
|
||||||
static char superStr[8192];
|
static char bufferTop[8192];
|
||||||
|
static char bufferBottom[8192];
|
||||||
static int cnt;
|
static int cnt;
|
||||||
|
|
||||||
static int countLines(const char* str)
|
static int countLines(const char* str)
|
||||||
@ -35,48 +36,70 @@ static void cutLine(char* str)
|
|||||||
memmove(str, str2, strlen(str2) + 1);
|
memmove(str, str2, strlen(str2) + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawFrame()
|
static void drawFrame(gfxScreen_t screen, char b, char g, char r)
|
||||||
{
|
{
|
||||||
u8* bufAdr = gfxGetFramebuffer(GFX_TOP, GFX_LEFT, NULL, NULL);
|
int screenWidth;
|
||||||
|
char* textBuffer;
|
||||||
|
if (screen == GFX_TOP) {
|
||||||
|
screenWidth = 400;
|
||||||
|
textBuffer = bufferTop;
|
||||||
|
} else {
|
||||||
|
screenWidth = 320;
|
||||||
|
textBuffer = bufferBottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8* bufAdr = gfxGetFramebuffer(screen, GFX_LEFT, NULL, NULL);
|
||||||
int x, y;
|
int x, y;
|
||||||
for (x = 1; x < 400; x++) {
|
for (x = 1; x < screenWidth; x++) {
|
||||||
for (y = 1; y < 240; y++) {
|
for (y = 1; y < 240; y++) {
|
||||||
u32 v=(y + x * 240) * 3;
|
u32 v=(y + x * 240) * 3;
|
||||||
bufAdr[v] = 0x88;
|
bufAdr[v] = b;
|
||||||
bufAdr[v+1] = 0x66;
|
bufAdr[v+1] = g;
|
||||||
bufAdr[v+2] = 0x00;
|
bufAdr[v+2] = r;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
x = countLines(superStr);
|
x = countLines(textBuffer);
|
||||||
while (x > (240 / fontDefault.height - 3)) {
|
while (x > (240 / fontDefault.height - 3)) {
|
||||||
cutLine(superStr);
|
cutLine(textBuffer);
|
||||||
x--;
|
x--;
|
||||||
}
|
}
|
||||||
gfxDrawText(GFX_TOP, GFX_LEFT, NULL, superStr, 240 - fontDefault.height * 3, 10);
|
gfxDrawText(screen, GFX_LEFT, NULL, textBuffer, 240 - fontDefault.height * 3, 10);
|
||||||
cnt++;
|
cnt++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void drawFrames()
|
||||||
|
{
|
||||||
|
drawFrame(GFX_TOP, 0x88, 0x66, 0x00);
|
||||||
|
drawFrame(GFX_BOTTOM, 0x00, 0x00, 0x00);
|
||||||
gfxFlushBuffers();
|
gfxFlushBuffers();
|
||||||
gfxSwapBuffers();
|
gfxSwapBuffers();
|
||||||
}
|
}
|
||||||
|
|
||||||
void print(const char* format, ...)
|
void print(gfxScreen_t screen, const char* format, ...)
|
||||||
{
|
{
|
||||||
|
char* textBuffer = (screen == GFX_TOP) ? bufferTop : bufferBottom;
|
||||||
va_list arguments;
|
va_list arguments;
|
||||||
char new_str[512];
|
char newStr[512];
|
||||||
|
|
||||||
va_start(arguments, format);
|
va_start(arguments, format);
|
||||||
vsprintf(new_str, format, arguments);
|
vsprintf(newStr, format, arguments);
|
||||||
va_end(arguments);
|
va_end(arguments);
|
||||||
|
|
||||||
sprintf(&superStr[strlen(superStr)], new_str);
|
sprintf(&textBuffer[strlen(textBuffer)], newStr);
|
||||||
svcOutputDebugString(new_str, strlen(new_str));
|
svcOutputDebugString(newStr, strlen(newStr));
|
||||||
|
|
||||||
drawFrame();
|
drawFrames();
|
||||||
}
|
}
|
||||||
|
|
||||||
void clearScreen()
|
void clearScreen(gfxScreen_t screen)
|
||||||
{
|
{
|
||||||
superStr[0] = 0;
|
bufferTop[0] = 0;
|
||||||
drawFrame();
|
drawFrames();
|
||||||
|
}
|
||||||
|
|
||||||
|
void clearScreens()
|
||||||
|
{
|
||||||
|
clearScreen(GFX_TOP);
|
||||||
|
clearScreen(GFX_BOTTOM);
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#ifndef OUTPUT_H
|
#pragma once
|
||||||
#define OUTPUT_H
|
|
||||||
|
|
||||||
void drawFrame();
|
#include <3ds/gfx.h>
|
||||||
void print(const char* format, ...);
|
|
||||||
void clearScreen();
|
|
||||||
|
|
||||||
#endif
|
void drawFrames();
|
||||||
|
void print(gfxScreen_t screen, const char* format, ...);
|
||||||
|
void clearScreen(gfxScreen_t screen);
|
||||||
|
void clearScreens();
|
||||||
|
@ -19,7 +19,7 @@ void FS_TestAll()
|
|||||||
void FS_TestInit()
|
void FS_TestInit()
|
||||||
{
|
{
|
||||||
unsigned int initResult = fsInit();
|
unsigned int initResult = fsInit();
|
||||||
print("fsInit - [%u]\n", initResult);
|
print(GFX_TOP, "fsInit - [%u]\n", initResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FS_TestSdmcOpen()
|
void FS_TestSdmcOpen()
|
||||||
@ -27,32 +27,38 @@ void FS_TestSdmcOpen()
|
|||||||
sdmcArchive = (FS_archive) { 0x00000009, { PATH_EMPTY, 1, (u8*) "" } };
|
sdmcArchive = (FS_archive) { 0x00000009, { PATH_EMPTY, 1, (u8*) "" } };
|
||||||
|
|
||||||
unsigned int openResult = FSUSER_OpenArchive(NULL, &sdmcArchive);
|
unsigned int openResult = FSUSER_OpenArchive(NULL, &sdmcArchive);
|
||||||
print("FSUSER_OpenArchive - [%u]\n", openResult);
|
print(GFX_TOP, "FSUSER_OpenArchive - [%u]\n", openResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FS_TestSdmcOpenFile()
|
void FS_TestSdmcOpenFile()
|
||||||
{
|
{
|
||||||
Handle fileHandle;
|
Handle fileHandleC, fileHandleW, fileHandleR;
|
||||||
FS_path filePath = FS_makePath(PATH_CHAR, "/new_file.txt");
|
FS_path filePath = FS_makePath(PATH_CHAR, "/new_file.txt");
|
||||||
unsigned int openResult = FSUSER_OpenFile(NULL, &fileHandle, sdmcArchive, filePath, 2, 0);
|
|
||||||
print("FSUSER_OpenFile - [%u]\n", openResult);
|
unsigned int openResultC = FSUSER_OpenFile(NULL, &fileHandleC, sdmcArchive, filePath, 2, 0);
|
||||||
svcCloseHandle(fileHandle);
|
print(GFX_TOP, "FSUSER_OpenFile (create flag) - '%s' - [%u]\n", filePath.data, openResultC);
|
||||||
|
svcCloseHandle(fileHandleC);
|
||||||
|
|
||||||
|
unsigned int openResultW = FSUSER_OpenFile(NULL, &fileHandleW, sdmcArchive, filePath, 1, 0);
|
||||||
|
print(GFX_TOP, "FSUSER_OpenFile (write flag) - '%s' - [%u]\n", filePath.data, openResultW);
|
||||||
|
svcCloseHandle(fileHandleW);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FS_TestSdmcCreateDir()
|
void FS_TestSdmcCreateDir()
|
||||||
{
|
{
|
||||||
unsigned int createResult = FSUSER_CreateDirectory(NULL, sdmcArchive, FS_makePath(PATH_CHAR, "/new_dir"));
|
FS_path dirPath = FS_makePath(PATH_CHAR, "/new_dir");
|
||||||
print("FSUSER_CreateDirectory - [%u]\n", createResult);
|
unsigned int createResult = FSUSER_CreateDirectory(NULL, sdmcArchive, dirPath);
|
||||||
|
print(GFX_TOP, "FSUSER_CreateDirectory - '%s' - [%u]\n", dirPath.data, createResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FS_TestSdmcClose()
|
void FS_TestSdmcClose()
|
||||||
{
|
{
|
||||||
unsigned int closeResult = FSUSER_CloseArchive(NULL, &sdmcArchive);
|
unsigned int closeResult = FSUSER_CloseArchive(NULL, &sdmcArchive);
|
||||||
print("FSUSER_CloseArchive - [%u]\n", closeResult);
|
print(GFX_TOP, "FSUSER_CloseArchive - [%u]\n", closeResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FS_TestExit()
|
void FS_TestExit()
|
||||||
{
|
{
|
||||||
unsigned int exitResult = fsExit();
|
unsigned int exitResult = fsExit();
|
||||||
print("fsExit - [%u]", exitResult);
|
print(GFX_TOP, "fsExit - [%u]", exitResult);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
#ifndef TEST_FS_H
|
#pragma once
|
||||||
#define TEST_FS_H
|
|
||||||
|
|
||||||
void FS_TestAll();
|
void FS_TestAll();
|
||||||
|
|
||||||
@ -20,5 +19,3 @@ void FS_TestSdmcOpenDir();
|
|||||||
void FS_TestSdmcClose();
|
void FS_TestSdmcClose();
|
||||||
|
|
||||||
void FS_TestExit();
|
void FS_TestExit();
|
||||||
|
|
||||||
#endif
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user