├── 3dsfetch.3dsx ├── 3dsfetch.elf ├── 3dsfetch.smdh ├── LICENSE ├── Makefile ├── README.md ├── build ├── 3dsfetch.lst ├── 3dsfetch.map ├── ini.d ├── ini.o ├── main.d └── main.o ├── config.ini ├── icon.png ├── ini-LICENSE ├── source ├── ini.c ├── ini.h ├── main.c └── util.h └── undo.sh /3dsfetch.3dsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/videah/3dsfetch/033f69b5aa1e4c5795b2c688b254dfeca95857da/3dsfetch.3dsx -------------------------------------------------------------------------------- /3dsfetch.elf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/videah/3dsfetch/033f69b5aa1e4c5795b2c688b254dfeca95857da/3dsfetch.elf -------------------------------------------------------------------------------- /3dsfetch.smdh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/videah/3dsfetch/033f69b5aa1e4c5795b2c688b254dfeca95857da/3dsfetch.smdh -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Ruairidh Carmichael - ruairidhcarmichael@live.co.uk 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | #--------------------------------------------------------------------------------- 2 | .SUFFIXES: 3 | #--------------------------------------------------------------------------------- 4 | 5 | ifeq ($(strip $(DEVKITARM)),) 6 | $(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") 7 | endif 8 | 9 | TOPDIR ?= $(CURDIR) 10 | include $(DEVKITARM)/3ds_rules 11 | 12 | #--------------------------------------------------------------------------------- 13 | # TARGET is the name of the output 14 | # BUILD is the directory where object files & intermediate files will be placed 15 | # SOURCES is a list of directories containing source code 16 | # DATA is a list of directories containing data files 17 | # INCLUDES is a list of directories containing header files 18 | # 19 | # NO_SMDH: if set to anything, no SMDH file is generated. 20 | # APP_TITLE is the name of the app stored in the SMDH file (Optional) 21 | # APP_DESCRIPTION is the description of the app stored in the SMDH file (Optional) 22 | # APP_AUTHOR is the author of the app stored in the SMDH file (Optional) 23 | # ICON is the filename of the icon (.png), relative to the project folder. 24 | # If not set, it attempts to use one of the following (in this order): 25 | # - .png 26 | # - icon.png 27 | # - /default_icon.png 28 | #--------------------------------------------------------------------------------- 29 | TARGET := $(notdir $(CURDIR)) 30 | BUILD := build 31 | SOURCES := source 32 | DATA := data 33 | INCLUDES := include 34 | 35 | APP_TITLE := 3dsfetch 36 | APP_AUTHOR := VideahGams 37 | APP_DESCRIPTION := screenfetch for 3DS 38 | 39 | #--------------------------------------------------------------------------------- 40 | # options for code generation 41 | #--------------------------------------------------------------------------------- 42 | ARCH := -march=armv6k -mtune=mpcore -mfloat-abi=hard 43 | 44 | CFLAGS := -g -Wall -O2 -mword-relocations \ 45 | -fomit-frame-pointer -ffast-math \ 46 | $(ARCH) 47 | 48 | CFLAGS += $(INCLUDE) -DARM11 -D_3DS 49 | 50 | CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11 51 | 52 | ASFLAGS := -g $(ARCH) 53 | LDFLAGS = -specs=3dsx.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map) 54 | 55 | LIBS := -lctru -lm 56 | 57 | #--------------------------------------------------------------------------------- 58 | # list of directories containing libraries, this must be the top level containing 59 | # include and lib 60 | #--------------------------------------------------------------------------------- 61 | LIBDIRS := $(CTRULIB) 62 | 63 | 64 | #--------------------------------------------------------------------------------- 65 | # no real need to edit anything past this point unless you need to add additional 66 | # rules for different file extensions 67 | #--------------------------------------------------------------------------------- 68 | ifneq ($(BUILD),$(notdir $(CURDIR))) 69 | #--------------------------------------------------------------------------------- 70 | 71 | export OUTPUT := $(CURDIR)/$(TARGET) 72 | export TOPDIR := $(CURDIR) 73 | 74 | export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ 75 | $(foreach dir,$(DATA),$(CURDIR)/$(dir)) 76 | 77 | export DEPSDIR := $(CURDIR)/$(BUILD) 78 | 79 | CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) 80 | CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) 81 | SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) 82 | BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) 83 | 84 | #--------------------------------------------------------------------------------- 85 | # use CXX for linking C++ projects, CC for standard C 86 | #--------------------------------------------------------------------------------- 87 | ifeq ($(strip $(CPPFILES)),) 88 | #--------------------------------------------------------------------------------- 89 | export LD := $(CC) 90 | #--------------------------------------------------------------------------------- 91 | else 92 | #--------------------------------------------------------------------------------- 93 | export LD := $(CXX) 94 | #--------------------------------------------------------------------------------- 95 | endif 96 | #--------------------------------------------------------------------------------- 97 | 98 | export OFILES := $(addsuffix .o,$(BINFILES)) \ 99 | $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) 100 | 101 | export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ 102 | $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ 103 | -I$(CURDIR)/$(BUILD) 104 | 105 | export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) 106 | 107 | ifeq ($(strip $(ICON)),) 108 | icons := $(wildcard *.png) 109 | ifneq (,$(findstring $(TARGET).png,$(icons))) 110 | export APP_ICON := $(TOPDIR)/$(TARGET).png 111 | else 112 | ifneq (,$(findstring icon.png,$(icons))) 113 | export APP_ICON := $(TOPDIR)/icon.png 114 | endif 115 | endif 116 | else 117 | export APP_ICON := $(TOPDIR)/$(ICON) 118 | endif 119 | 120 | ifeq ($(strip $(NO_SMDH)),) 121 | export _3DSXFLAGS += --smdh=$(CURDIR)/$(TARGET).smdh 122 | endif 123 | 124 | .PHONY: $(BUILD) clean all 125 | 126 | #--------------------------------------------------------------------------------- 127 | all: $(BUILD) 128 | 129 | $(BUILD): 130 | @[ -d $@ ] || mkdir -p $@ 131 | @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile 132 | 133 | #--------------------------------------------------------------------------------- 134 | clean: 135 | @echo clean ... 136 | @rm -fr $(BUILD) $(TARGET).3dsx $(OUTPUT).smdh $(TARGET).elf 137 | 138 | 139 | #--------------------------------------------------------------------------------- 140 | else 141 | 142 | DEPENDS := $(OFILES:.o=.d) 143 | 144 | #--------------------------------------------------------------------------------- 145 | # main targets 146 | #--------------------------------------------------------------------------------- 147 | ifeq ($(strip $(NO_SMDH)),) 148 | $(OUTPUT).3dsx : $(OUTPUT).elf $(OUTPUT).smdh 149 | else 150 | $(OUTPUT).3dsx : $(OUTPUT).elf 151 | endif 152 | 153 | $(OUTPUT).elf : $(OFILES) 154 | 155 | #--------------------------------------------------------------------------------- 156 | # you need a rule like this for each extension you use as binary data 157 | #--------------------------------------------------------------------------------- 158 | %.bin.o : %.bin 159 | #--------------------------------------------------------------------------------- 160 | @echo $(notdir $<) 161 | @$(bin2o) 162 | 163 | # WARNING: This is not the right way to do this! TODO: Do it right! 164 | #--------------------------------------------------------------------------------- 165 | %.vsh.o : %.vsh 166 | #--------------------------------------------------------------------------------- 167 | @echo $(notdir $<) 168 | @python $(AEMSTRO)/aemstro_as.py $< ../$(notdir $<).shbin 169 | @bin2s ../$(notdir $<).shbin | $(PREFIX)as -o $@ 170 | @echo "extern const u8" `(echo $(notdir $<).shbin | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end[];" > `(echo $(notdir $<).shbin | tr . _)`.h 171 | @echo "extern const u8" `(echo $(notdir $<).shbin | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"[];" >> `(echo $(notdir $<).shbin | tr . _)`.h 172 | @echo "extern const u32" `(echo $(notdir $<).shbin | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size";" >> `(echo $(notdir $<).shbin | tr . _)`.h 173 | @rm ../$(notdir $<).shbin 174 | 175 | -include $(DEPENDS) 176 | 177 | #--------------------------------------------------------------------------------------- 178 | endif 179 | #--------------------------------------------------------------------------------------- 180 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

-------------------------------------------------------------------------------- /build/3dsfetch.lst: -------------------------------------------------------------------------------- 1 | w __deregister_frame_info 2 | w _ITM_deregisterTMCloneTable 3 | w _ITM_registerTMCloneTable 4 | w _Jv_RegisterClasses 5 | w __register_frame_info 6 | 00000000 a shift 7 | 00000000 a shift 8 | 00100000 T _start 9 | 00100000 T __start__ 10 | 00100008 T __service_ptr 11 | 0010000c T __apt_appid 12 | 00100010 T __heap_size 13 | 00100014 T __linear_heap_size 14 | 00100018 T __system_arglist 15 | 0010001c T __system_runflags 16 | 00100020 t startup 17 | 00100058 t ClearMem 18 | 0010006c t ClrLoop 19 | 00100094 T _init 20 | 001000ac t deregister_tm_clones 21 | 001000dc t register_tm_clones 22 | 00100114 t __do_global_dtors_aux 23 | 00100158 t frame_dummy 24 | 001001b4 00000060 t strcmpci 25 | 00100214 00000058 t next.isra.0 26 | 0010026c 000002dc T ini_load 27 | 00100548 0000001c T ini_free 28 | 00100564 000000bc T ini_get 29 | 00100620 00000048 T ini_sget 30 | 00100668 00000028 T printPos 31 | 00100690 00000058 T printLine 32 | 001006e8 0000001c T debug_write 33 | 00100704 0000000c T consoleGetDefault 34 | 00100710 00000084 T consoleDebugInit 35 | 00100794 00000018 T consoleSelect 36 | 001007ac 0000001c T consoleSetFont 37 | 001007c8 000001ac T consoleDrawChar 38 | 00100974 00000128 T consolePrintChar 39 | 00100a9c 00000184 t consoleCls 40 | 00100c20 000000f8 T consoleInit 41 | 00100d18 00000138 t consoleClearLine 42 | 00100e50 000000c4 t newRow 43 | 00100f14 00000804 T con_write 44 | 00101718 0000000c T consoleClear 45 | 00101724 00000038 T consoleSetWindow 46 | 0010175c 0000008c t gfxSetFramebufferInfo.part.0 47 | 001017e8 00000010 T gfxSet3D 48 | 001017f8 00000018 T gfxSetScreenFormat 49 | 00101810 00000018 T gfxGetScreenFormat 50 | 00101828 00000014 T gfxSetDoubleBuffering 51 | 0010183c 00000070 T gfxSetFramebufferInfo 52 | 001018ac 000000c4 T gfxWriteFramebufferInfo 53 | 00101970 000001e0 T gfxInit 54 | 00101b50 00000010 T gfxInitDefault 55 | 00101b60 000000cc T gfxExit 56 | 00101c2c 000000b0 T gfxGetFramebuffer 57 | 00101cdc 000000dc T gfxFlushBuffers 58 | 00101db8 00000074 T gfxSwapBuffers 59 | 00101e2c 0000005c T gfxSwapBuffersGpu 60 | 00101e88 0000010c t gspEventThreadMain 61 | 00101f94 00000014 T gspInit 62 | 00101fa8 00000018 T gspExit 63 | 00101fc0 000000cc T gspInitEventHandler 64 | 0010208c 00000058 T gspExitEventHandler 65 | 001020e4 00000058 T gspWaitForEvent 66 | 0010213c 00000070 T GSPGPU_WriteHWRegs 67 | 001021ac 0000008c T GSPGPU_WriteHWRegsWithMask 68 | 00102238 00000070 T GSPGPU_ReadHWRegs 69 | 001022a8 00000074 T GSPGPU_SetBufferSwap 70 | 0010231c 00000054 T GSPGPU_FlushDataCache 71 | 00102370 00000054 T GSPGPU_InvalidateDataCache 72 | 001023c4 0000003c T GSPGPU_SetLcdForceBlack 73 | 00102400 00000034 T GSPGPU_TriggerCmdReqQueue 74 | 00102434 0000006c T GSPGPU_RegisterInterruptRelayQueue 75 | 001024a0 00000034 T GSPGPU_UnregisterInterruptRelayQueue 76 | 001024d4 00000050 T GSPGPU_AcquireRight 77 | 00102524 00000034 T GSPGPU_ReleaseRight 78 | 00102558 00000084 T GSPGPU_ImportDisplayCaptureInfo 79 | 001025dc 00000034 T GSPGPU_SaveVramSysArea 80 | 00102610 00000034 T GSPGPU_RestoreVramSysArea 81 | 00102644 0000010c T GSPGPU_SubmitGxCommand 82 | 00102750 000000a4 T hidExit 83 | 001027f4 00000058 T hidWaitForEvent 84 | 0010284c 0000003c T hidCheckSectionUpdateTime 85 | 00102888 00000234 T hidScanInput 86 | 00102abc 00000010 T hidKeysHeld 87 | 00102acc 00000010 T hidKeysDown 88 | 00102adc 00000010 T hidKeysUp 89 | 00102aec 00000018 T hidTouchRead 90 | 00102b04 00000018 T hidCircleRead 91 | 00102b1c 00000020 T hidAccelRead 92 | 00102b3c 00000020 T hidGyroRead 93 | 00102b5c 00000090 T HIDUSER_GetHandles 94 | 00102bec 00000134 T hidInit 95 | 00102d20 0000002c T HIDUSER_EnableAccelerometer 96 | 00102d4c 0000002c T HIDUSER_DisableAccelerometer 97 | 00102d78 0000002c T HIDUSER_EnableGyroscope 98 | 00102da4 0000002c T HIDUSER_DisableGyroscope 99 | 00102dd0 0000003c T HIDUSER_GetGyroscopeRawToDpsCoefficient 100 | 00102e0c 00000038 T HIDUSER_GetSoundVolume 101 | 00102e44 00000064 t __apt_initservicehandle 102 | 00102ea8 00000004 W _aptDebug 103 | 00102eac 000000b0 T aptInitCaptureInfo 104 | 00102f5c 00000028 T aptWaitStatusEvent 105 | 00102f84 00000038 T aptHook 106 | 00102fbc 0000002c T aptUnhook 107 | 00102fe8 00000038 T aptGetStatus 108 | 00103020 00000064 T aptSetStatus 109 | 00103084 00000038 T aptGetStatusPower 110 | 001030bc 00000038 T aptSetStatusPower 111 | 001030f4 00000024 T aptOpenSession 112 | 00103118 00000028 T aptCloseSession 113 | 00103140 00000010 T aptSignalReadyForSleep 114 | 00103150 00000050 T APT_GetLockHandle 115 | 001031a0 00000068 T APT_Initialize 116 | 00103208 0000003c T APT_Finalize 117 | 00103244 00000034 T APT_HardwareResetAsync 118 | 00103278 0000003c T APT_Enable 119 | 001032b4 00000080 T APT_GetAppletManInfo 120 | 00103334 0000003c T aptGetMenuAppID 121 | 00103370 00000050 T APT_IsRegistered 122 | 001033c0 00000050 T APT_InquireNotification 123 | 00103410 00000034 T APT_PrepareToJumpToHomeMenu 124 | 00103444 00000050 T APT_JumpToHomeMenu 125 | 00103494 0000003c T APT_PrepareToJumpToApplication 126 | 001034d0 00000050 T APT_JumpToApplication 127 | 00103520 0000003c T APT_NotifyToWait 128 | 0010355c 00000088 T APT_AppletUtility 129 | 001035e4 00000120 T aptAppletUtility_Exit_RetToApp 130 | 00103704 00000044 T aptAppletClosed 131 | 00103748 000000f8 t aptAppStarted 132 | 00103840 000001b8 T aptInit 133 | 001039f8 00000074 T APT_GlanceParameter 134 | 00103a6c 00000074 T APT_ReceiveParameter 135 | 00103ae0 00000070 T APT_SendParameter 136 | 00103b50 0000004c T APT_SendCaptureBufferInfo 137 | 00103b9c 000001d4 T aptReturnToMenu 138 | 00103d70 00000040 T APT_ReplySleepQuery 139 | 00103db0 0000003c T APT_ReplySleepNotificationComplete 140 | 00103dec 0000030c T aptEventHandler 141 | 001040f8 0000003c T APT_PrepareToCloseApplication 142 | 00104134 00000058 T APT_CloseApplication 143 | 0010418c 000001ec T aptExit 144 | 00104378 00000044 T APT_SetAppCpuTimeLimit 145 | 001043bc 00000054 T APT_GetAppCpuTimeLimit 146 | 00104410 0000005c T APT_CheckNew3DS_Application 147 | 0010446c 0000005c T APT_CheckNew3DS_System 148 | 001044c8 00000074 T APT_CheckNew3DS 149 | 0010453c 0000004c T APT_PrepareToDoAppJump 150 | 00104588 00000068 T APT_DoAppJump 151 | 001045f0 0000003c T APT_PrepareToStartLibraryApplet 152 | 0010462c 00000060 T APT_StartLibraryApplet 153 | 0010468c 00000104 T aptAppletStarted 154 | 00104790 00000178 T aptMainLoop 155 | 00104908 00000198 T APT_LaunchLibraryApplet 156 | 00104aa0 0000003c T APT_PrepareToStartSystemApplet 157 | 00104adc 00000060 T APT_StartSystemApplet 158 | 00104b3c 00000054 T GX_RequestDma 159 | 00104b90 00000068 T GX_SetCommandList_Last 160 | 00104bf8 00000074 T GX_SetMemoryFill 161 | 00104c6c 00000064 T GX_SetDisplayTransfer 162 | 00104cd0 00000068 T GX_SetTextureCopy 163 | 00104d38 00000068 T GX_SetCommandList_First 164 | 00104da0 0000004c W __libctru_init 165 | 00104dec 000000a4 W __system_allocateHeaps 166 | 00104e90 000000f4 T __system_initArgv 167 | 00104f90 T svcControlMemory 168 | 00104fb0 T svcQueryMemory 169 | 00104fe0 T svcExitProcess 170 | 00104fe8 T svcCreateThread 171 | 00105008 T svcExitThread 172 | 00105010 T svcSleepThread 173 | 00105018 T svcGetThreadPriority 174 | 0010502c T svcSetThreadPriority 175 | 00105034 T svcGetThreadAffinityMask 176 | 0010503c T svcSetThreadAffinityMask 177 | 00105044 T svcGetThreadIdealProcessor 178 | 00105058 T svcSetThreadIdealProcessor 179 | 00105060 T svcGetProcessorID 180 | 00105068 T svcCreateMutex 181 | 0010507c T svcReleaseMutex 182 | 00105084 T svcCreateSemaphore 183 | 00105098 T svcReleaseSemaphore 184 | 001050ac T svcCreateEvent 185 | 001050c0 T svcSignalEvent 186 | 001050c8 T svcClearEvent 187 | 001050d0 T svcCreateTimer 188 | 001050e4 T svcSetTimer 189 | 001050ec T svcCancelTimer 190 | 001050f4 T svcClearTimer 191 | 001050fc T svcCreateMemoryBlock 192 | 00105114 T svcMapMemoryBlock 193 | 0010511c T svcUnmapMemoryBlock 194 | 00105124 T svcCreateAddressArbiter 195 | 00105138 T svcArbitrateAddress 196 | 00105158 T svcCloseHandle 197 | 00105160 T svcWaitSynchronization 198 | 00105168 T svcWaitSynchronizationN 199 | 00105190 T svcDuplicateHandle 200 | 001051a4 T svcGetSystemTick 201 | 001051ac T svcGetSystemInfo 202 | 001051c4 T svcGetProcessInfo 203 | 001051dc T svcGetThreadInfo 204 | 001051f4 T svcConnectToPort 205 | 00105208 T svcSendSyncRequest 206 | 00105210 T svcOpenProcess 207 | 00105224 T svcOpenThread 208 | 00105238 T svcGetProcessId 209 | 0010524c T svcGetProcessIdOfThread 210 | 00105260 T svcGetThreadId 211 | 00105274 T svcOutputDebugString 212 | 0010527c T svcCreatePort 213 | 0010529c T svcDebugActiveProcess 214 | 001052b0 T svcBreakDebugProcess 215 | 001052b8 T svcTerminateDebugProcess 216 | 001052c0 T svcGetProcessDebugEvent 217 | 001052c8 T svcContinueDebugEvent 218 | 001052d0 T svcGetProcessList 219 | 001052f0 T svcReadProcessMemory 220 | 001052f8 T svcWriteProcessMemory 221 | 00105300 T svcControlProcessMemory 222 | 00105318 T svcMapProcessMemory 223 | 00105320 T svcUnmapProcessMemory 224 | 00105328 T svcBackdoor 225 | 00105330 T svcQueryProcessMemory 226 | 00105360 T initSystem 227 | 001053a4 T __ctru_exit 228 | 001053c4 00000024 t addrMapNodeComparator(rbtree_node const*, rbtree_node const*) 229 | 001053e8 00000004 t addrMapNodeDestructor(rbtree_node*) 230 | 001053ec 00000130 T vramMemAlign 231 | 0010551c 00000008 T vramAlloc 232 | 00105524 00000008 T vramRealloc 233 | 0010552c 00000050 T vramFree 234 | 0010557c 0000000c T vramSpaceFree 235 | 00105588 00000024 t addrMapNodeComparator(rbtree_node const*, rbtree_node const*) 236 | 001055ac 00000004 t addrMapNodeDestructor(rbtree_node*) 237 | 001055b0 00000140 T linearMemAlign 238 | 001056f0 00000008 T linearAlloc 239 | 001056f8 00000008 T linearRealloc 240 | 00105700 00000050 T linearFree 241 | 00105750 0000000c T linearSpaceFree 242 | 0010575c 000000a0 T MemPool::CoalesceRight(MemBlock*) 243 | 001057fc 00000188 T MemPool::Allocate(MemChunk&, unsigned long, int) 244 | 00105984 00000104 T MemPool::Deallocate(MemChunk const&) 245 | 00105a88 00000030 T MemPool::GetFreeSpace() 246 | 00105ab8 00000058 t getSysTime 247 | 00105b10 0000004c T osConvertVirtToPhys 248 | 00105b5c 00000020 T osConvertOldLINEARMemToNew 249 | 00105b7c 000000f8 T __libctru_gtod 250 | 00105c74 00000074 T osGetTime 251 | 00105ce8 00000014 T osGetFirmVersion 252 | 00105cfc 00000014 T osGetKernelVersion 253 | 00105d10 00000020 T osStrError 254 | 00105d30 00000010 T osGetWifiStrength 255 | 00105d40 00000098 T __get_handle_from_list 256 | 00105dd8 00000054 T __destroy_handle_list 257 | 00105e2c 00000028 T srvExit 258 | 00105e54 0000000c T srvGetSessionHandle 259 | 00105e60 00000038 T srvRegisterClient 260 | 00105e98 00000068 T srvInit 261 | 00105f00 00000080 T srvGetServiceHandle 262 | 00105f80 0000005c T srvRegisterService 263 | 00105fdc 0000004c T srvUnregisterService 264 | 00106028 00000054 T srvPmInit 265 | 0010607c 00000048 T srvRegisterProcess 266 | 001060c4 00000034 T srvUnregisterProcess 267 | 001060f8 0000004c T irrstWaitForEvent 268 | 00106144 0000003c T irrstCheckSectionUpdateTime 269 | 00106180 000000b4 T irrstScanInput 270 | 00106234 00000018 T irrstKeysHeld 271 | 0010624c 00000018 T irrstCstickRead 272 | 00106264 00000050 T IRRST_GetHandles 273 | 001062b4 00000038 T IRRST_Initialize 274 | 001062ec 000000e4 T irrstInit 275 | 001063d0 0000002c T IRRST_Shutdown 276 | 001063fc 00000084 T irrstExit 277 | 00106480 00000014 T rbtree_init 278 | 00106494 000001e4 t do_insert 279 | 00106678 00000008 T rbtree_insert 280 | 00106680 00000008 T rbtree_insert_multi 281 | 00106688 000000ac T rbtree_rotate 282 | 00106734 00000340 T rbtree_remove 283 | 00106a74 00000070 T rbtree_find 284 | 00106ae4 00000020 W __appInit 285 | 00106b04 0000001c W __appExit 286 | 00106b20 00000090 W __libctru_exit 287 | 00106bb0 00000010 t sdmc_link 288 | 00106bc0 00000010 t sdmc_dirreset 289 | 00106bd0 00000010 t sdmc_chmod 290 | 00106be0 00000010 t sdmc_fchmod 291 | 00106bf0 00000024 t error_cmp 292 | 00106c14 00000050 t sdmc_translate_error 293 | 00106c64 00000030 t sdmc_fsync 294 | 00106c94 00000050 t sdmc_ftruncate 295 | 00106ce4 000000c0 t sdmc_statvfs 296 | 00106da4 00000034 t sdmc_dirclose 297 | 00106dd8 000000dc t sdmc_dirnext 298 | 00106eb4 00000030 t sdmc_close 299 | 00106ee4 0000006c t sdmc_fstat 300 | 00106f50 000000bc t sdmc_seek 301 | 0010700c 00000090 t sdmc_read 302 | 0010709c 0000010c t sdmc_write 303 | 001071a8 000001a8 t sdmc_utf16path 304 | 00107350 00000080 t sdmc_rmdir 305 | 001073d0 0000009c t sdmc_diropen 306 | 0010746c 000000a8 t sdmc_chdir 307 | 00107514 00000080 t sdmc_mkdir 308 | 00107594 0000013c t sdmc_rename 309 | 001076d0 00000080 t sdmc_unlink 310 | 00107750 00000134 t sdmc_stat 311 | 00107884 000001a8 t sdmc_open 312 | 00107a2c 00000130 T sdmcInit 313 | 00107b5c 00000050 T sdmcExit 314 | 00107bac 0000002c T FS_makePath 315 | 00107bd8 00000024 T fsExit 316 | 00107bfc 0000000c T fsGetSessionHandle 317 | 00107c08 00000074 T FSUSER_Initialize 318 | 00107c7c 0000006c T fsInit 319 | 00107ce8 000000ac T FSUSER_OpenFile 320 | 00107d94 000000cc T FSUSER_OpenFileDirectly 321 | 00107e60 00000088 T FSUSER_DeleteFile 322 | 00107ee8 000000c4 T FSUSER_RenameFile 323 | 00107fac 00000088 T FSUSER_DeleteDirectory 324 | 00108034 00000088 T FSUSER_DeleteDirectoryRecursively 325 | 001080bc 00000098 T FSUSER_CreateFile 326 | 00108154 0000008c T FSUSER_CreateDirectory 327 | 001081e0 000000c4 T FSUSER_RenameDirectory 328 | 001082a4 00000094 T FSUSER_OpenDirectory 329 | 00108338 00000088 T FSUSER_OpenArchive 330 | 001083c0 00000058 T FSUSER_CloseArchive 331 | 00108418 0000007c T FSUSER_GetSdmcArchiveResource 332 | 00108494 0000007c T FSUSER_GetNandArchiveResource 333 | 00108510 0000004c T FSUSER_IsSdmcDetected 334 | 0010855c 0000004c T FSUSER_IsSdmcWritable 335 | 001085a8 00000044 T FSFILE_Close 336 | 001085ec 0000005c T FSFILE_Read 337 | 00108648 00000064 T FSFILE_Write 338 | 001086ac 00000040 T FSFILE_GetSize 339 | 001086ec 0000002c T FSFILE_SetSize 340 | 00108718 00000038 T FSFILE_GetAttributes 341 | 00108750 00000028 T FSFILE_SetAttributes 342 | 00108778 00000024 T FSFILE_Flush 343 | 0010879c 00000054 T FSDIR_Read 344 | 001087f0 00000044 T FSDIR_Close 345 | 00108834 0000008c T rbtree_node_next 346 | 001088c0 0000008c T rbtree_node_prev 347 | 0010894c 000000b8 T utf8_to_utf16 348 | 00108a04 00000138 T decode_utf8 349 | 00108b3c 000000e8 T utf16_to_utf8 350 | 00108c24 00000068 T encode_utf16 351 | 00108c8c 00000104 T encode_utf8 352 | 00108d90 00000060 T decode_utf16 353 | 00108df0 T __aeabi_idiv 354 | 00108df0 00000220 T __divsi3 355 | 00108df8 t .divsi3_skip_div0_test 356 | 00109010 00000020 T __aeabi_idivmod 357 | 00109030 00000004 W __aeabi_idiv0 358 | 00109030 00000004 W __aeabi_ldiv0 359 | 00109048 00000390 T strcmp 360 | 001093e0 00000018 T setDefaultDevice 361 | 001093f8 000000ac T FindDevice 362 | 001094a4 0000002c T RemoveDevice 363 | 001094d0 00000094 T AddDevice 364 | 00109564 00000024 T GetDeviceOpTab 365 | 00109588 0000007c T _close_r 366 | 00109604 0000006c T _fstat_r 367 | 00109670 00000008 T _isatty_r 368 | 00109678 00000074 T _lseek_r 369 | 001096ec 000000c8 T _open_r 370 | 001097b4 00000074 T _read_r 371 | 00109828 00000070 T _sbrk_r 372 | 00109898 00000074 T _write_r 373 | 0010990c 000001bc T _concatenate_path 374 | 00109ac8 00000148 T chdir 375 | 00109c10 000000a0 T getcwd 376 | 00109cb0 00000004 T __flockfile 377 | 00109cb4 00000004 T __funlockfile 378 | 00109cb8 00000018 T __libc_lock_init 379 | 00109cd0 00000018 T __libc_lock_acquire 380 | 00109ce8 00000024 T __libc_lock_try_acquire 381 | 00109d0c 00000018 T __libc_lock_release 382 | 00109d24 00000018 T __libc_lock_close 383 | 00109d3c 00000018 T __libc_lock_init_recursive 384 | 00109d54 00000018 T __libc_lock_acquire_recursive 385 | 00109d6c 00000024 T __libc_lock_try_acquire_recursive 386 | 00109d90 00000018 T __libc_lock_release_recursive 387 | 00109da8 00000018 T __libc_lock_close_recursive 388 | 00109dc0 00000044 T __free_handle 389 | 00109e04 0000002c T __release_handle 390 | 00109e30 00000068 T __alloc_handle 391 | 00109e98 0000001c T __get_handle 392 | 00109eb4 0000008c T dup 393 | 00109f40 000000d4 T dup2 394 | 0010a014 00000028 T __getreent 395 | 0010a03c T __aeabi_uidiv 396 | 0010a03c 000001ec T __udivsi3 397 | 0010a03c t .udivsi3_skip_div0_test 398 | 0010a228 00000020 T __aeabi_uidivmod 399 | 0010a248 T __aeabi_uldivmod 400 | 0010a284 0000003c T __gnu_ldivmod_helper 401 | 0010a2c0 0000003c T __gnu_uldivmod_helper 402 | 0010a2fc 00000180 T __divdi3 403 | 0010a47c 00000124 T __udivdi3 404 | 0010a5a0 0000023c T main 405 | 0010a7dc 00000078 T bsearch 406 | 0010a854 00000018 T __set_ctype 407 | 0010a86c 00000118 T _fclose_r 408 | 0010a984 00000018 T fclose 409 | 0010a99c 00000238 T __sflush_r 410 | 0010abd4 00000098 T _fflush_r 411 | 0010ac6c 00000038 T fflush 412 | 0010aca4 0000000c T _cleanup_r 413 | 0010acb0 0000001c t __fp_lock 414 | 0010accc 0000001c t __fp_unlock 415 | 0010ace8 0000015c t __sinit.part.1 416 | 0010ae44 00000048 T __sfmoreglue 417 | 0010ae8c 000000e8 T __sfp 418 | 0010af74 00000018 T _cleanup 419 | 0010af8c 00000010 T __sinit 420 | 0010af9c 00000004 T __sfp_lock_acquire 421 | 0010afa0 00000004 T __sfp_lock_release 422 | 0010afa4 00000004 T __sinit_lock_acquire 423 | 0010afa8 00000004 T __sinit_lock_release 424 | 0010afac 00000018 T __fp_lock_all 425 | 0010afc4 00000018 T __fp_unlock_all 426 | 0010afdc 00000040 T __libc_fini_array 427 | 0010b01c 00000130 T _fopen_r 428 | 0010b14c 00000020 T fopen 429 | 0010b16c 000002f0 T _fread_r 430 | 0010b45c 00000038 T fread 431 | 0010b494 000000f8 T _malloc_trim_r 432 | 0010b58c 000002b4 T _free_r 433 | 0010b840 00000004 T _fseek_r 434 | 0010b844 00000028 T fseek 435 | 0010b86c 000004f8 T _fseeko_r 436 | 0010bd64 00000028 T fseeko 437 | 0010bd8c 00000004 T _ftell_r 438 | 0010bd90 00000018 T ftell 439 | 0010bda8 00000164 T _ftello_r 440 | 0010bf0c 00000018 T ftello 441 | 0010bf24 00000078 T _fwalk 442 | 0010bf9c 00000080 T _fwalk_reent 443 | 0010c01c 00000078 T __libc_init_array 444 | 0010c094 00000038 T iprintf 445 | 0010c0cc 00000034 T _iprintf_r 446 | 0010c100 00000160 T __smakebuf_r 447 | 0010c260 00000018 T malloc 448 | 0010c278 00000018 T free 449 | 0010c290 00000740 T _malloc_r 450 | 0010c9d0 000000f4 T memcpy 451 | 0010cac4 000000f0 T memset 452 | 0010cbb4 00000004 T __malloc_lock 453 | 0010cbb8 00000004 T __malloc_unlock 454 | 0010cbbc 00000034 T _printf_r 455 | 0010cbf0 00000038 T printf 456 | 0010cc28 0000001c t lflush 457 | 0010cc44 000001d8 T __srefill_r 458 | 0010ce1c 00000024 T _rewind_r 459 | 0010ce40 0000002c T rewind 460 | 0010ce6c 000001e8 T setvbuf 461 | 0010d054 00000074 T sscanf 462 | 0010d0c8 00000080 T _sscanf_r 463 | 0010d148 00000030 T __sread 464 | 0010d178 00000008 T __seofread 465 | 0010d180 00000054 T __swrite 466 | 0010d1d4 0000002c T __sseek 467 | 0010d200 00000008 T __sclose 468 | 0010d208 0000016c T strchr 469 | 0010d374 000000f0 T strcpy 470 | 0010d464 00000060 T strcspn 471 | 0010d4c4 0000005c T strlen 472 | 0010d520 000000a4 T strncat 473 | 0010d5c4 000000e0 T strncpy 474 | 0010d6a4 00002aec T __ssvfscanf_r 475 | 00110190 00000860 t get_arg 476 | 001109f0 000000a4 t __sprint_r.part.0 477 | 00110a94 0000001c T __sprint_r 478 | 00110ab0 00003114 T _vfiprintf_r 479 | 00113bc4 00000028 T vfiprintf 480 | 00113bec 000000a8 t __sbprintf 481 | 00113c94 00000860 t get_arg 482 | 001144f8 00004404 T _vfprintf_r 483 | 00118900 00000028 T vfprintf 484 | 00118928 000000a8 t __sbprintf 485 | 001189d0 0000008c T _wcrtomb_r 486 | 00118a5c 00000094 T wcrtomb 487 | 00118af0 00000020 T _wcsrtombs_r 488 | 00118b10 0000003c T wcsrtombs 489 | 00118b4c 00000114 T __utf8_wctomb 490 | 00118c60 00000048 T _wctomb_r 491 | 00118ca8 00000028 T __ascii_wctomb 492 | 00118cd0 00000084 T __sjis_wctomb 493 | 00118d54 000000c8 T __eucjp_wctomb 494 | 00118e1c 000000d4 T __jis_wctomb 495 | 00118ef0 0000014c T __swsetup_r 496 | 0011903c 000001c0 t quorem 497 | 00119200 000012dc T _dtoa_r 498 | 0011a4e0 000000b0 T __sflags 499 | 0011a590 00000124 T __fputwc 500 | 0011a6b4 000000a8 T _fputwc_r 501 | 0011a75c 0000003c T fputwc 502 | 0011a798 000004c4 T __sfvwrite_r 503 | 0011ac5c 00000074 T iswspace 504 | 0011acd0 00000204 t __jp2uc 505 | 0011aed4 00000084 T _jp2uc 506 | 0011af58 0000008c t __get_locale_env 507 | 0011afe4 000008a4 t loadlocale 508 | 0011b888 00000088 t currentlocale 509 | 0011b910 00000300 T _setlocale_r 510 | 0011bc10 0000000c T __locale_charset 511 | 0011bc1c 00000010 T __locale_mb_cur_max 512 | 0011bc2c 0000000c T __locale_msgcharset 513 | 0011bc38 00000010 T __locale_cjk_lang 514 | 0011bc48 0000000c T _localeconv_r 515 | 0011bc54 00000020 T setlocale 516 | 0011bc74 00000014 T localeconv 517 | 0011bc88 00000098 T _mbrtowc_r 518 | 0011bd20 0000009c T mbrtowc 519 | 0011bdbc 000002fc T __utf8_mbtowc 520 | 0011c0b8 0000004c T _mbtowc_r 521 | 0011c104 0000004c T __ascii_mbtowc 522 | 0011c150 000000d4 T __sjis_mbtowc 523 | 0011c224 00000140 T __eucjp_mbtowc 524 | 0011c364 000001a8 T __jis_mbtowc 525 | 0011c50c 00000120 T memchr 526 | 0011c62c 0000012c T memmove 527 | 0011c758 0000008c T _Balloc 528 | 0011c7e4 0000001c T _Bfree 529 | 0011c800 000000d0 T __multadd 530 | 0011c8d0 000000e4 T __s2b 531 | 0011c9b4 0000005c T __hi0bits 532 | 0011ca10 00000098 T __lo0bits 533 | 0011caa8 00000020 T __i2b 534 | 0011cac8 000001dc T __multiply 535 | 0011cca4 00000100 T __pow5mult 536 | 0011cda4 000000f4 T __lshift 537 | 0011ce98 00000064 T __mcmp 538 | 0011cefc 0000013c T __mdiff 539 | 0011d038 00000074 T __ulp 540 | 0011d0ac 000000e4 T __b2d 541 | 0011d190 00000104 T __d2b 542 | 0011d294 0000007c T __ratio 543 | 0011d310 00000044 T _mprec_log10 544 | 0011d358 0000006c T __copybits 545 | 0011d3c4 00000080 T __any_on 546 | 0011d444 00000564 T _realloc_r 547 | 0011d9a8 000000d8 T __sccl 548 | 0011da80 0000000c T nanf 549 | 0011da8c 00000074 T __fpclassifyd 550 | 0011db00 00000094 T frexp 551 | 0011db98 00000068 T _sprintf_r 552 | 0011dc00 00000068 T sprintf 553 | 0011dc68 00000108 T stpncpy 554 | 0011dd70 00000068 T strcasecmp 555 | 0011ddd8 00000080 T strcat 556 | 0011de58 00000048 T strlcpy 557 | 0011dea0 0000008c T strncasecmp 558 | 0011df2c 00000110 T strncmp 559 | 0011e03c 00000058 t sulp 560 | 0011e098 000013e8 T _strtod_r 561 | 0011f480 00000020 T strtod 562 | 0011f4a0 00000048 T strtof 563 | 0011f4e8 000002a0 T _strtoll_r 564 | 0011f788 000001dc T _strtol_r 565 | 0011f964 00000028 T strtol 566 | 0011f98c 00000260 T _strtoull_r 567 | 0011fbec 000001cc T _strtoul_r 568 | 0011fdb8 00000028 T strtoul 569 | 0011fde0 00000860 t get_arg 570 | 00120640 000001a8 T __ssprint_r 571 | 001207e8 00002fdc T _svfiprintf_r 572 | 001237c4 000000f0 T _sungetc_r 573 | 001238b4 0000006c T __ssrefill_r 574 | 00123920 000000c0 T _sfread_r 575 | 001239e0 0000213c T __ssvfiscanf_r 576 | 00125b1c 00000860 t get_arg 577 | 00126380 00004320 T _svfprintf_r 578 | 0012a6a0 000000a8 T __submore 579 | 0012a748 00000238 T _ungetc_r 580 | 0012a980 00000020 T ungetc 581 | 0012a9a0 00000124 T __swbuf_r 582 | 0012aac4 00000020 T __swbuf 583 | 0012aae4 00000184 T _wcsnrtombs_r 584 | 0012ac68 00000040 T wcsnrtombs 585 | 0012aca8 00000094 T _calloc_r 586 | 0012ad3c 000000ec t rshift 587 | 0012ae28 000007e8 T __gethex 588 | 0012b610 00000260 T __hexnan 589 | 0012b870 000000c8 T _findenv_r 590 | 0012b938 00000018 T _getenv_r 591 | 0012b950 00000004 T __env_lock 592 | 0012b954 00000004 T __env_unlock 593 | 0012b958 0000000c T __errno 594 | 0012b964 0000005c T strnlen 595 | 0012b9c0 00000044 T strrchr 596 | 0012ba04 T _fini 597 | 0012c000 00000068 r dotab_3dmoo 598 | 0012c068 00000068 r dotab_stdout 599 | 0012c0d0 00000068 r dotab_null 600 | 0012c138 00000030 r colorTable 601 | 0012c168 00000014 r CSWTCH.18 602 | 0012c17c 0000000c r __apt_servicenames 603 | 0012c188 R default_font_bin 604 | 0012c988 R default_font_bin_end 605 | 0012c988 R default_font_bin_size 606 | 0012c98c 0000002c r CSWTCH.12 607 | 0012c9b8 00000030 r error_table 608 | 0012c9e8 00000068 R dotab_stdnull 609 | 0012ca50 00000003 R DIRECTORY_PARENT 610 | 0012ca54 00000002 R DIRECTORY_THIS 611 | 0012ca58 00000002 R DIRECTORY_SEPARATOR 612 | 0012ce18 00000101 R _ctype_ 613 | 0012cf20 00000004 R _global_impure_ptr 614 | 0012cf2c 00000022 r basefix.6958 615 | 0012cf50 00000010 r zeroes.7030 616 | 0012cf90 00000010 r blanks.7029 617 | 0012cfa0 00000010 r zeroes.7052 618 | 0012cfc0 r .LC2 619 | 0012cfc4 00000010 r blanks.7051 620 | 0012cfe4 000000bc r a1 621 | 0012d0a0 000000bc r a2 622 | 0012d15c 0000005b r a3 623 | 0012d1b8 00000070 r a6 624 | 0012d228 000000a2 r a7 625 | 0012d2cc 00000040 r a8 626 | 0012d320 0000172a r b02cf 627 | 0012ea4c 00001a7c r d02f4 628 | 001305d8 0000001c r categories 629 | 001305f4 00000048 r JIS_state_table 630 | 0013063c 00000048 r JIS_action_table 631 | 00130684 0000000c r p05.5298 632 | 00130690 000000c8 R __mprec_tens 633 | 00130758 00000028 R __mprec_bigtens 634 | 00130780 00000028 R __mprec_tinytens 635 | 001307a8 00000014 r fpinan.5303 636 | 001307d0 00000028 r tinytens 637 | 001307f8 00000014 r fpi.5267 638 | 0013080c 0000006c R __state_table 639 | 00130878 00000010 r blanks.7015 640 | 00130888 00000100 R __chclass 641 | 00130988 0000006c R __action_table 642 | 001309f4 00000010 r zeroes.7016 643 | 00130a04 00000022 r basefix.6409 644 | 00130a28 00000010 r zeroes.7037 645 | 00130a38 00000010 r blanks.7036 646 | 00130a48 00000100 R __hexdig 647 | 00130b50 R __exidx_end 648 | 00130b50 R __exidx_start 649 | 00131000 D __dso_handle 650 | 00131004 00000004 D asciiart 651 | 00131008 0000004c D defaultConsole 652 | 00131054 00000004 D currentConsole 653 | 00131058 00000001 d firstConsoleInit.6329 654 | 0013105c 00000001 d topFormat 655 | 0013105d 00000001 d botFormat 656 | 00131060 00000008 d doubleBuf 657 | 00131068 W __stacksize__ 658 | 0013106c 00001001 d __cwd 659 | 00132070 00000018 d sdmcArchive 660 | 00132088 00000068 d sdmc_devoptab 661 | 001320f0 00000004 d defaultDevice 662 | 001320f4 00000040 D devoptab_list 663 | 00132134 00001000 d _current_working_directory 664 | 00133134 0000000c d __stdin_handle 665 | 00133140 0000000c d __stdout_handle 666 | 0013314c 0000000c d __stderr_handle 667 | 00133158 00001000 d handles 668 | 00134158 00000004 D __ctype_ptr__ 669 | 00134160 00000428 d impure_data 670 | 00134588 00000004 D _impure_ptr 671 | 0013458c 00000408 D __malloc_av_ 672 | 00134994 00000004 D __malloc_trim_threshold 673 | 00134998 00000004 D __malloc_sbrk_base 674 | 0013499c 00000004 D __wctomb 675 | 001349a0 00000020 d lc_message_charset 676 | 001349c0 00000038 d lconv 677 | 001349f8 000000e0 d current_categories 678 | 00134ad8 00000020 d lc_ctype_charset 679 | 00134af8 00000020 D __default_locale 680 | 00134b18 00000004 D __mb_cur_max 681 | 00134b1c 00000004 D __mbtowc 682 | 00134b20 00000004 D environ 683 | 00134b24 d __EH_FRAME_BEGIN__ 684 | 00134b94 d __FRAME_END__ 685 | 00134b98 d __JCR_END__ 686 | 00134b98 d __JCR_LIST__ 687 | 00134b9c t __frame_dummy_init_array_entry 688 | 00134b9c T __init_array_start 689 | 00134b9c T __preinit_array_end 690 | 00134b9c T __preinit_array_start 691 | 00134b9c D __TMC_END__ 692 | 00134b9c d __TMC_LIST__ 693 | 00134ba0 t __do_global_dtors_aux_fini_array_entry 694 | 00134ba0 T __fini_array_start 695 | 00134ba0 T __init_array_end 696 | 00134ba4 T __bss_start__ 697 | 00134ba4 b completed.8113 698 | 00134ba4 T __fini_array_end 699 | 00134ba8 b object.8118 700 | 00134bc0 00000001 b enable3d 701 | 00134bc4 00000004 B screenFree 702 | 00134bc8 00000002 b currentBuffer 703 | 00134bcc 00000004 b gspEvent 704 | 00134bd0 00000004 b gspEventData 705 | 00134bd4 00000004 B gspGpuHandle 706 | 00134bd8 00000001 b hidInitialised 707 | 00134bdc 00000004 b kOld 708 | 00134be0 00000004 b kHeld 709 | 00134be4 00000004 b cPos 710 | 00134be8 00000004 b tPos 711 | 00134bec 00000006 b aVec 712 | 00134bf4 00000006 b gRate 713 | 00134bfc 00000004 b kDown 714 | 00134c00 00000004 b kUp 715 | 00134c04 00000004 b __apt_servicestr 716 | 00134c08 00000004 B aptStatusEvent 717 | 00134c0c 0000000c b aptFirstHook 718 | 00134c18 00000001 B aptStatus 719 | 00134c1c 00000004 B aptStatusPower 720 | 00134c20 00000004 B aptSleepSync 721 | 00134c24 00000001 b aptInitialised 722 | 00134c26 00000002 b __apt_launchapplet_appID 723 | 00134c28 00000020 b __ns_capinfo 724 | 00134c48 00000001 B aptStatusBeforeSleep 725 | 00134c4c 00000004 b __apt_launchapplet_parambuf 726 | 00134c50 00000004 b __apt_launchapplet_parambufsize 727 | 00134c54 00000004 b __apt_new3dsflag_initialized 728 | 00134c58 00000001 b __apt_new3dsflag 729 | 00134c5c 00000004 b __apt_launchapplet_inhandle 730 | 00134c60 b saved_stack 731 | 00134c68 00000008 b sVramPool 732 | 00134c70 0000000c b sAddrMap 733 | 00134c7c 00000008 b sLinearPool 734 | 00134c84 0000000c b sAddrMap 735 | 00134c90 00000004 b g_srv_handle 736 | 00134c94 00000001 b irrstUsed 737 | 00134c98 00000004 b kHeld 738 | 00134c9c 00000004 b csPos 739 | 00134ca0 00002000 b tmp_buffer.5991 740 | 00136ca0 00001001 b __fixedpath 741 | 00137ca4 00002002 b __utf16path 742 | 00139ca8 00002002 b __utf16path_old.6062 743 | 0013bcaa 00000001 b sdmcInitialised 744 | 0013bcac 00000001 b fsInitialised 745 | 0013bcb0 00000004 b fsuHandle 746 | 0013bcb4 00000004 b heap_start.5558 747 | 0013bcb8 00000004 B fake_heap_start 748 | 0013bcbc 00000004 B fake_heap_end 749 | 0013bcc0 00001000 b temp_cwd 750 | 0013ccc0 00000040 B __syscalls 751 | 0013cd00 00000004 B __malloc_max_total_mem 752 | 0013cd04 00000004 B __malloc_max_sbrked_mem 753 | 0013cd08 00000004 B __malloc_top_pad 754 | 0013cd0c 00000028 B __malloc_current_mallinfo 755 | 0013cd34 00000004 B _PathLocale 756 | 0013cd38 00000004 B __nlocale_changed 757 | 0013cd3c 00000004 B __mlocale_changed 758 | 0013cd40 00000004 b lc_ctype_cjk_lang 759 | 0013cd44 000000e0 b new_categories 760 | 0013ce24 000000e7 b current_locale_string 761 | 0013cf0c 000000e0 b saved_categories 762 | 0013cfec 00000004 b initial_env 763 | 0013cff0 0000004c B currentCopy 764 | 0013d03c 00000008 B gfxBottomFramebuffers 765 | 0013d044 00000004 B gspSharedMemHandle 766 | 0013d048 0000001c B bottomFramebufferInfo 767 | 0013d064 00000004 B gspEvent 768 | 0013d068 00000008 B gfxTopLeftFramebuffers 769 | 0013d070 00000008 B gfxTopRightFramebuffers 770 | 0013d078 0000001c B topFramebufferInfo 771 | 0013d094 00000001 B gfxThreadID 772 | 0013d098 00000004 B gfxSharedMemory 773 | 0013d0a0 00001000 B gspEventStack 774 | 0013e0a0 00000004 B gspEventThread 775 | 0013e0a4 0000001c B gspEventCounts 776 | 0013e0c0 0000001c B gspEvents 777 | 0013e0dc 00000001 B gspRunEvents 778 | 0013e0e0 00000004 B hidMemHandle 779 | 0013e0e4 00000004 B hidHandle 780 | 0013e0e8 00000004 B hidSharedMem 781 | 0013e0ec 00000014 B hidEvents 782 | 0013e100 00000004 B aptEventHandlerThread 783 | 0013e104 00001000 B aptParameters 784 | 0013f108 00001000 B aptEventHandlerStack 785 | 00140108 00000004 B aptuHandle 786 | 0014010c 0000000c B aptEvents 787 | 00140118 00000004 B aptStatusMutex 788 | 0014011c 00000004 B aptLockHandle 789 | 00140120 00000002 B currentAppId 790 | 00140124 00000004 B gxCmdBuf 791 | 00140128 00000004 B __system_retAddr 792 | 0014012c 00000004 B __heapBase 793 | 00140130 00000004 B __linear_heap 794 | 00140134 00000004 B __system_argv 795 | 00140138 00000004 B __system_argc 796 | 0014013c 00000004 B irrstHandle 797 | 00140140 00000004 B irrstEvent 798 | 00140144 00000004 B irrstMemHandle 799 | 00140148 00000004 B irrstSharedMem 800 | 0014014c B __bss_end__ 801 | 0014014c A __end__ 802 | -------------------------------------------------------------------------------- /build/ini.d: -------------------------------------------------------------------------------- 1 | ini.o: /home/ruairidh/GitHub/3dsfetch/source/ini.c \ 2 | /home/ruairidh/GitHub/3dsfetch/source/ini.h 3 | 4 | /home/ruairidh/GitHub/3dsfetch/source/ini.h: 5 | -------------------------------------------------------------------------------- /build/ini.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/videah/3dsfetch/033f69b5aa1e4c5795b2c688b254dfeca95857da/build/ini.o -------------------------------------------------------------------------------- /build/main.d: -------------------------------------------------------------------------------- 1 | main.o: /home/ruairidh/GitHub/3dsfetch/source/main.c \ 2 | /opt/devkitpro/libctru/include/3ds.h \ 3 | /opt/devkitpro/libctru/include/3ds/types.h \ 4 | /opt/devkitpro/libctru/include/3ds/svc.h \ 5 | /opt/devkitpro/libctru/include/3ds/srv.h \ 6 | /opt/devkitpro/libctru/include/3ds/linear.h \ 7 | /opt/devkitpro/libctru/include/3ds/vram.h \ 8 | /opt/devkitpro/libctru/include/3ds/os.h \ 9 | /opt/devkitpro/libctru/include/3ds/gfx.h \ 10 | /opt/devkitpro/libctru/include/3ds/services/gsp.h \ 11 | /opt/devkitpro/libctru/include/3ds/console.h \ 12 | /opt/devkitpro/libctru/include/3ds/util/utf.h \ 13 | /opt/devkitpro/libctru/include/3ds/services/ac.h \ 14 | /opt/devkitpro/libctru/include/3ds/services/am.h \ 15 | /opt/devkitpro/libctru/include/3ds/services/apt.h \ 16 | /opt/devkitpro/libctru/include/3ds/services/cfgnor.h \ 17 | /opt/devkitpro/libctru/include/3ds/services/cfgu.h \ 18 | /opt/devkitpro/libctru/include/3ds/services/csnd.h \ 19 | /opt/devkitpro/libctru/include/3ds/services/fs.h \ 20 | /opt/devkitpro/libctru/include/3ds/services/hid.h \ 21 | /opt/devkitpro/libctru/include/3ds/services/irrst.h \ 22 | /opt/devkitpro/libctru/include/3ds/services/httpc.h \ 23 | /opt/devkitpro/libctru/include/3ds/services/ir.h \ 24 | /opt/devkitpro/libctru/include/3ds/services/ns.h \ 25 | /opt/devkitpro/libctru/include/3ds/services/pm.h \ 26 | /opt/devkitpro/libctru/include/3ds/services/ps.h \ 27 | /opt/devkitpro/libctru/include/3ds/services/ptm.h \ 28 | /opt/devkitpro/libctru/include/3ds/services/soc.h \ 29 | /opt/devkitpro/libctru/include/3ds/services/mic.h \ 30 | /opt/devkitpro/libctru/include/3ds/services/mvd.h \ 31 | /opt/devkitpro/libctru/include/3ds/services/news.h \ 32 | /opt/devkitpro/libctru/include/3ds/services/qtm.h \ 33 | /opt/devkitpro/libctru/include/3ds/services/y2r.h \ 34 | /opt/devkitpro/libctru/include/3ds/services/hb.h \ 35 | /opt/devkitpro/libctru/include/3ds/gpu/gx.h \ 36 | /opt/devkitpro/libctru/include/3ds/gpu/gpu.h \ 37 | /opt/devkitpro/libctru/include/3ds/gpu/registers.h \ 38 | /opt/devkitpro/libctru/include/3ds/gpu/shbin.h \ 39 | /opt/devkitpro/libctru/include/3ds/gpu/shaderProgram.h \ 40 | /opt/devkitpro/libctru/include/3ds/sdmc.h \ 41 | /home/ruairidh/GitHub/3dsfetch/source/util.h \ 42 | /home/ruairidh/GitHub/3dsfetch/source/ini.h 43 | 44 | /opt/devkitpro/libctru/include/3ds.h: 45 | 46 | /opt/devkitpro/libctru/include/3ds/types.h: 47 | 48 | /opt/devkitpro/libctru/include/3ds/svc.h: 49 | 50 | /opt/devkitpro/libctru/include/3ds/srv.h: 51 | 52 | /opt/devkitpro/libctru/include/3ds/linear.h: 53 | 54 | /opt/devkitpro/libctru/include/3ds/vram.h: 55 | 56 | /opt/devkitpro/libctru/include/3ds/os.h: 57 | 58 | /opt/devkitpro/libctru/include/3ds/gfx.h: 59 | 60 | /opt/devkitpro/libctru/include/3ds/services/gsp.h: 61 | 62 | /opt/devkitpro/libctru/include/3ds/console.h: 63 | 64 | /opt/devkitpro/libctru/include/3ds/util/utf.h: 65 | 66 | /opt/devkitpro/libctru/include/3ds/services/ac.h: 67 | 68 | /opt/devkitpro/libctru/include/3ds/services/am.h: 69 | 70 | /opt/devkitpro/libctru/include/3ds/services/apt.h: 71 | 72 | /opt/devkitpro/libctru/include/3ds/services/cfgnor.h: 73 | 74 | /opt/devkitpro/libctru/include/3ds/services/cfgu.h: 75 | 76 | /opt/devkitpro/libctru/include/3ds/services/csnd.h: 77 | 78 | /opt/devkitpro/libctru/include/3ds/services/fs.h: 79 | 80 | /opt/devkitpro/libctru/include/3ds/services/hid.h: 81 | 82 | /opt/devkitpro/libctru/include/3ds/services/irrst.h: 83 | 84 | /opt/devkitpro/libctru/include/3ds/services/httpc.h: 85 | 86 | /opt/devkitpro/libctru/include/3ds/services/ir.h: 87 | 88 | /opt/devkitpro/libctru/include/3ds/services/ns.h: 89 | 90 | /opt/devkitpro/libctru/include/3ds/services/pm.h: 91 | 92 | /opt/devkitpro/libctru/include/3ds/services/ps.h: 93 | 94 | /opt/devkitpro/libctru/include/3ds/services/ptm.h: 95 | 96 | /opt/devkitpro/libctru/include/3ds/services/soc.h: 97 | 98 | /opt/devkitpro/libctru/include/3ds/services/mic.h: 99 | 100 | /opt/devkitpro/libctru/include/3ds/services/mvd.h: 101 | 102 | /opt/devkitpro/libctru/include/3ds/services/news.h: 103 | 104 | /opt/devkitpro/libctru/include/3ds/services/qtm.h: 105 | 106 | /opt/devkitpro/libctru/include/3ds/services/y2r.h: 107 | 108 | /opt/devkitpro/libctru/include/3ds/services/hb.h: 109 | 110 | /opt/devkitpro/libctru/include/3ds/gpu/gx.h: 111 | 112 | /opt/devkitpro/libctru/include/3ds/gpu/gpu.h: 113 | 114 | /opt/devkitpro/libctru/include/3ds/gpu/registers.h: 115 | 116 | /opt/devkitpro/libctru/include/3ds/gpu/shbin.h: 117 | 118 | /opt/devkitpro/libctru/include/3ds/gpu/shaderProgram.h: 119 | 120 | /opt/devkitpro/libctru/include/3ds/sdmc.h: 121 | 122 | /home/ruairidh/GitHub/3dsfetch/source/util.h: 123 | 124 | /home/ruairidh/GitHub/3dsfetch/source/ini.h: 125 | -------------------------------------------------------------------------------- /build/main.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/videah/3dsfetch/033f69b5aa1e4c5795b2c688b254dfeca95857da/build/main.o -------------------------------------------------------------------------------- /config.ini: -------------------------------------------------------------------------------- 1 | [config] 2 | username = ruairidh 3 | hostname = @3ds 4 | os = 3DS System Software 5 | firmware = 9.9.0-26E 6 | packages = 7 7 | shell = None 8 | resolution = 800x240 | 320x240 9 | cpu = 4x MPCore & 4x VFPv2 10 | memory = 128MiB 11 | gpu = DMP PICA200 268MHz -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/videah/3dsfetch/033f69b5aa1e4c5795b2c688b254dfeca95857da/icon.png -------------------------------------------------------------------------------- /ini-LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015 rxi 2 | 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of 5 | this software and associated documentation files (the "Software"), to deal in 6 | the Software without restriction, including without limitation the rights to 7 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 8 | of the Software, and to permit persons to whom the Software is furnished to do 9 | so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. -------------------------------------------------------------------------------- /source/ini.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 rxi 3 | * 4 | * This library is free software; you can redistribute it and/or modify it 5 | * under the terms of the MIT license. See LICENSE for details. 6 | */ 7 | 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | #include "ini.h" 14 | 15 | struct ini_t { 16 | char *data; 17 | char *end; 18 | }; 19 | 20 | 21 | /* Case insensitive string compare */ 22 | static int strcmpci(const char *a, const char *b) { 23 | for (;;) { 24 | int d = tolower(*a) - tolower(*b); 25 | if (d != 0 || !*a) { 26 | return d; 27 | } 28 | a++, b++; 29 | } 30 | } 31 | 32 | /* Returns the next string in the split data */ 33 | static char* next(ini_t *ini, char *p) { 34 | p += strlen(p); 35 | while (p < ini->end && *p == '\0') { 36 | p++; 37 | } 38 | return p; 39 | } 40 | 41 | /* Splits data in place into strings containing section-headers, keys and 42 | * values using one or more '\0' as a delimiter */ 43 | static void split_data(ini_t *ini) { 44 | char *q, *p = ini->data; 45 | 46 | while (p < ini->end) { 47 | switch (*p) { 48 | case '\r': 49 | case '\n': 50 | case '\t': 51 | case ' ': 52 | *p = '\0'; 53 | /* Fall through */ 54 | 55 | case '\0': 56 | p++; 57 | break; 58 | 59 | case '[': 60 | p += strcspn(p, "]"); 61 | *p = '\0'; 62 | break; 63 | 64 | case '=': 65 | do { 66 | *p++ = '\0'; 67 | } while (*p == ' ' || *p == '\t'); 68 | p += strcspn(p, "\n"); 69 | goto trim_back; 70 | 71 | case ';': 72 | while (*p && *p != '\n') { 73 | *p++ = '\0'; 74 | } 75 | break; 76 | 77 | default: 78 | p += strcspn(p, "="); 79 | trim_back: 80 | q = p - 1; 81 | while (*q == ' ' || *q == '\t' || *q == '\r') { 82 | *q-- = '\0'; 83 | } 84 | break; 85 | } 86 | } 87 | } 88 | 89 | /* Unescapes and unquotes all quoted strings in the split data */ 90 | static void unescape_quoted_strings(ini_t *ini) { 91 | char *p = ini->data; 92 | 93 | if (*p == '\0') { 94 | p = next(ini, p); 95 | } 96 | 97 | while (p < ini->end) { 98 | if (*p == '"') { 99 | /* Use `q` as write-head and `p` as read-head, `p` is always ahead of `q` 100 | * as escape sequences are always larger than their resultant data */ 101 | char *q = p; 102 | p++; 103 | while (*q) { 104 | if (*p == '\\') { 105 | /* Handle escaped char */ 106 | p++; 107 | switch (*p) { 108 | case 'r' : *q = '\r'; break; 109 | case 'n' : *q = '\n'; break; 110 | case 't' : *q = '\t'; break; 111 | default : *q = *p; break; 112 | } 113 | 114 | } else if (*p == '"') { 115 | /* Handle end of string */ 116 | *q = '\0'; 117 | break; 118 | 119 | } else { 120 | /* Handle normal char */ 121 | *q = *p; 122 | } 123 | q++, p++; 124 | } 125 | /* Fill gap between read-head and write-head's position with '\0' */ 126 | p = next(ini, p); 127 | memset(q, '\0', p - q); 128 | } else { 129 | p = next(ini, p); 130 | } 131 | } 132 | } 133 | 134 | 135 | ini_t* ini_load(const char *filename) { 136 | ini_t *ini = NULL; 137 | FILE *fp = NULL; 138 | int n, sz; 139 | 140 | /* Init ini struct */ 141 | ini = malloc(sizeof(*ini)); 142 | if (!ini) { 143 | goto fail; 144 | } 145 | memset(ini, 0, sizeof(*ini)); 146 | 147 | /* Open file */ 148 | fp = fopen(filename, "rb"); 149 | if (!fp) { 150 | goto fail; 151 | } 152 | 153 | /* Get file size */ 154 | fseek(fp, 0, SEEK_END); 155 | sz = ftell(fp); 156 | rewind(fp); 157 | 158 | /* Load file content into memory, null terminate, init end var */ 159 | ini->data = malloc(sz + 1); 160 | ini->data[sz] = '\0'; 161 | ini->end = ini->data + sz; 162 | n = fread(ini->data, sz, 1, fp); 163 | if (n != 1) { 164 | goto fail; 165 | } 166 | 167 | /* Prepare data */ 168 | split_data(ini); 169 | unescape_quoted_strings(ini); 170 | 171 | /* Clean up and return */ 172 | fclose(fp); 173 | return ini; 174 | 175 | fail: 176 | if (fp) fclose(fp); 177 | if (ini) ini_free(ini); 178 | return NULL; 179 | } 180 | 181 | 182 | void ini_free(ini_t *ini) { 183 | free(ini->data); 184 | free(ini); 185 | } 186 | 187 | 188 | const char* ini_get(ini_t *ini, const char *section, const char *key) { 189 | char *current_section = ""; 190 | char *val; 191 | char *p = ini->data; 192 | 193 | if (*p == '\0') { 194 | p = next(ini, p); 195 | } 196 | 197 | while (p < ini->end) { 198 | if (*p == '[') { 199 | /* Handle section */ 200 | current_section = p + 1; 201 | 202 | } else { 203 | /* Handle key */ 204 | val = next(ini, p); 205 | if (!section || !strcmpci(section, current_section)) { 206 | if (!strcmpci(p, key)) { 207 | return val; 208 | } 209 | } 210 | p = val; 211 | } 212 | 213 | p = next(ini, p); 214 | } 215 | 216 | return NULL; 217 | } 218 | 219 | 220 | int ini_sget( 221 | ini_t *ini, const char *section, const char *value, 222 | const char *scanfmt, void *dst 223 | ) { 224 | const char *val = ini_get(ini, section, value); 225 | if (!val) { 226 | return 0; 227 | } 228 | if (scanfmt) { 229 | sscanf(val, scanfmt, dst); 230 | } else { 231 | *((const char**) dst) = val; 232 | } 233 | return 1; 234 | } 235 | -------------------------------------------------------------------------------- /source/ini.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 rxi 3 | * 4 | * This library is free software; you can redistribute it and/or modify it 5 | * under the terms of the MIT license. See LICENSE for details. 6 | */ 7 | 8 | #ifndef INI_H 9 | #define INI_H 10 | 11 | typedef struct ini_t ini_t; 12 | 13 | 14 | ini_t* ini_load(const char *filename); 15 | 16 | void ini_free(ini_t *ini); 17 | 18 | const char* ini_get(ini_t *ini, const char *section, const char *key); 19 | 20 | int ini_sget(ini_t *ini, const char *section, const char *value, 21 | const char *scanfmt, void *dst); 22 | 23 | #endif 24 | -------------------------------------------------------------------------------- /source/main.c: -------------------------------------------------------------------------------- 1 | // This code is licensed under the MIT Open Source License. 2 | 3 | // Copyright (c) 2015 Ruairidh Carmichael - ruairidhcarmichael@live.co.uk 4 | 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | #include 24 | #include 25 | #include 26 | #include <3ds.h> 27 | #include "util.h" 28 | #include "ini.h" 29 | 30 | // Config // 31 | 32 | #define TEXT_COLOR COLOR_RED 33 | 34 | /////////// 35 | 36 | char const *asciiart = 37 | "\n\n\n\n\n\n" 38 | " ######\n" 39 | " #### ####\n" 40 | " ##### #####\n" 41 | " ## ## ## ##\n" 42 | " ## ##\n" 43 | " #### ####\n" 44 | " #### #### ####\n" 45 | " #### ###### ####\n" 46 | " #### ###### ####\n" 47 | " ### ###### ###\n" 48 | " # #### #\n" 49 | " # ########## #\n" 50 | " #### # # ####\n" 51 | " ## # # ## \n" 52 | " # #\n" 53 | " ## ##\n" 54 | " ##########\n"; 55 | 56 | void printPos(char* string, int x, int y) { 57 | 58 | printf("%c[%d;%df",0x1B,y,x); 59 | 60 | printf(string); 61 | 62 | return 0; 63 | 64 | } 65 | 66 | void printLine(char* string1, char* string2, int x, int y) { 67 | 68 | printf(TEXT_COLOR); printPos(string1, x, y); printf(COLOR_CLEAR); printf(string2); 69 | 70 | return 0; 71 | 72 | } 73 | 74 | int main() { 75 | 76 | ini_t *config = ini_load("config.ini"); 77 | 78 | const char *username = ini_get(config, "config", "username"); 79 | const char *hostname = ini_get(config, "config", "hostname"); 80 | const char *os = ini_get(config, "config", "os"); 81 | const char *firmware = ini_get(config, "config", "firmware"); 82 | const char *packages = ini_get(config, "config", "packages"); 83 | const char *shell = ini_get(config, "config", "shell"); 84 | const char *resolution = ini_get(config, "config", "resolution"); 85 | const char *cpu = ini_get(config, "config", "cpu"); 86 | const char *memory = ini_get(config, "config", "memory"); 87 | const char *gpu = ini_get(config, "config", "gpu"); 88 | 89 | gfxInitDefault(); 90 | 91 | consoleInit(GFX_TOP, NULL); // Initialize console on top screen. 92 | 93 | int x = 20; 94 | 95 | printf(asciiart, 0, 0); 96 | 97 | while (aptMainLoop()) { 98 | 99 | hidScanInput(); // Scan for inputs 100 | 101 | u32 kDown = hidKeysDown(); // Get keys that are down 102 | 103 | if (kDown & KEY_START) break; // Break and return to the Homebrew Menu 104 | 105 | printLine(username, hostname, x, 6); // username@hostname 106 | 107 | printLine("OS: ", os, x, 8); // Don't have a better name for this 108 | 109 | printLine("Firmware: ", firmware, x, 10); // Detect it somehow? 110 | 111 | printLine("Packages: ", packages, x, 12); // Maybe get number of homebrew somehow? 112 | 113 | printLine("Shell: ", shell, x, 14); // 3DS can't really have a shell but whatever 114 | 115 | printLine("Resolution: ", resolution, x, 16); // Needs changed for 2DS 116 | 117 | printLine("CPU: ", cpu, x, 18); // This also needs changed for 2DS 118 | 119 | printLine("Memory: ", memory, x, 20); // Maybe get RAM usage somehow? 120 | 121 | printLine("GPU: ", gpu, x, 22); 122 | 123 | } 124 | 125 | gfxExit(); 126 | 127 | ini_free(config); 128 | 129 | return 0; 130 | 131 | } -------------------------------------------------------------------------------- /source/util.h: -------------------------------------------------------------------------------- 1 | // This code is licensed under the MIT Open Source License. 2 | 3 | // Copyright (c) 2015 Ruairidh Carmichael - ruairidhcarmichael@live.co.uk 4 | 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | #define COLOR_RED "\x1b[31m" 24 | #define COLOR_CLEAR "\x1b[0m" -------------------------------------------------------------------------------- /undo.sh: -------------------------------------------------------------------------------- 1 | rm 3dsfetch* 2 | rm -rf build --------------------------------------------------------------------------------