mirror of
https://github.com/CamHenlin/MessagesForMacintosh.git
synced 2024-06-10 23:29:44 +00:00
big update: fix final message update bugs, fix about screen. only small TODO items, code cleanup, and testing on physical mac (once i finish recapping the analog board on my mac classic) remaining!
This commit is contained in:
parent
f3755e40f9
commit
111e717b15
|
@ -6,6 +6,8 @@
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 2.8)
|
cmake_minimum_required(VERSION 2.8)
|
||||||
|
|
||||||
|
set (CMAKE_C_FLAGS "-Ofast -Wuninitialized -Wmaybe-uninitialized -mcpu=68000 -mtune=68000 -m68000 -Wall")
|
||||||
|
|
||||||
add_application(MessagesForMacintosh
|
add_application(MessagesForMacintosh
|
||||||
SerialHelper.c
|
SerialHelper.c
|
||||||
coprocessorjs.c
|
coprocessorjs.c
|
||||||
|
|
175
JS/index.js
175
JS/index.js
|
@ -6,6 +6,7 @@ const gql = require('graphql-tag')
|
||||||
|
|
||||||
// TEST_MODE can be turned on or off to prevent communications with the Apollo iMessage Server running on your modern Mac
|
// TEST_MODE can be turned on or off to prevent communications with the Apollo iMessage Server running on your modern Mac
|
||||||
const TEST_MODE = false
|
const TEST_MODE = false
|
||||||
|
const DEBUG = false
|
||||||
|
|
||||||
const defaultOptions = {
|
const defaultOptions = {
|
||||||
watchQuery: {
|
watchQuery: {
|
||||||
|
@ -155,6 +156,7 @@ const widthFor12ptFont = [
|
||||||
const MAX_WIDTH = 304
|
const MAX_WIDTH = 304
|
||||||
const SPACE_WIDTH = widthFor12ptFont[32]
|
const SPACE_WIDTH = widthFor12ptFont[32]
|
||||||
let canStart = false
|
let canStart = false
|
||||||
|
let hasNewMessages = false
|
||||||
|
|
||||||
const getNextWordLength = (word) => {
|
const getNextWordLength = (word) => {
|
||||||
|
|
||||||
|
@ -350,7 +352,7 @@ let storedArgsAndResults = {
|
||||||
// classic Macintosh end
|
// classic Macintosh end
|
||||||
class iMessageGraphClientClass {
|
class iMessageGraphClientClass {
|
||||||
|
|
||||||
async getMessages (chatId, page) {
|
async getMessages (chatId, page, fromInterval) {
|
||||||
|
|
||||||
storedArgsAndResults.getMessages.args = {
|
storedArgsAndResults.getMessages.args = {
|
||||||
chatId,
|
chatId,
|
||||||
|
@ -362,7 +364,10 @@ class iMessageGraphClientClass {
|
||||||
return splitMessages(TEST_MESSAGES)
|
return splitMessages(TEST_MESSAGES)
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(`get messages for chat ID: ${chatId}`)
|
if (DEBUG) {
|
||||||
|
|
||||||
|
console.log(`get messages for chat ID: ${chatId}`)
|
||||||
|
}
|
||||||
|
|
||||||
let result
|
let result
|
||||||
|
|
||||||
|
@ -378,30 +383,45 @@ class iMessageGraphClientClass {
|
||||||
})
|
})
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
||||||
console.log(`error with apollo query`)
|
console.log(`getMessages: error with apollo query`)
|
||||||
console.log(error)
|
console.log(error)
|
||||||
|
|
||||||
result = {
|
return
|
||||||
data: {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let messages = result.data.getMessages
|
let messages = result.data.getMessages
|
||||||
|
|
||||||
|
let currentLastMessageOutput = `${lastMessageOutput}`
|
||||||
|
|
||||||
storedArgsAndResults.getMessages.output = splitMessages(messages)
|
storedArgsAndResults.getMessages.output = splitMessages(messages)
|
||||||
}
|
|
||||||
|
|
||||||
async hasNewMessagesInChat (chatId) {
|
if (!hasNewMessages && fromInterval) {
|
||||||
|
|
||||||
storedArgsAndResults.hasNewMessagesInChat.args = {
|
hasNewMessages = currentLastMessageOutput !== storedArgsAndResults.getMessages.output
|
||||||
chatId
|
|
||||||
|
if (hasNewMessages) {
|
||||||
|
|
||||||
|
console.log(`got new message. previous message was:`)
|
||||||
|
console.log(currentLastMessageOutput)
|
||||||
|
console.log(`new message set is:`)
|
||||||
|
console.log(storedArgsAndResults.getMessages.output)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let currentLastMessageOutput = `${lastMessageOutput}`
|
return
|
||||||
let messageOutput = await this.getMessages(chatId, 0)
|
}
|
||||||
|
|
||||||
storedArgsAndResults.hasNewMessagesInChat.output = (currentLastMessageOutput !== messageOutput).toString()
|
async hasNewMessagesInChat () {
|
||||||
|
|
||||||
|
if (!hasNewMessages) {
|
||||||
|
|
||||||
|
return `false`
|
||||||
|
} else {
|
||||||
|
|
||||||
|
hasNewMessages = false
|
||||||
|
}
|
||||||
|
|
||||||
|
return `true`
|
||||||
}
|
}
|
||||||
|
|
||||||
async sendMessage (chatId, message) {
|
async sendMessage (chatId, message) {
|
||||||
|
@ -416,7 +436,9 @@ class iMessageGraphClientClass {
|
||||||
let result
|
let result
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
message = message.replaceAll('"', '')
|
||||||
|
|
||||||
result = await client.query({
|
result = await client.query({
|
||||||
query: gql`query sendMessage {
|
query: gql`query sendMessage {
|
||||||
sendMessage(chatId: "${chatId}", message: "${message}") {
|
sendMessage(chatId: "${chatId}", message: "${message}") {
|
||||||
|
@ -427,13 +449,10 @@ class iMessageGraphClientClass {
|
||||||
})
|
})
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
||||||
console.log(`error with apollo query`)
|
console.log(`sendMessage: error with apollo query`)
|
||||||
console.log(error)
|
console.log(error)
|
||||||
|
|
||||||
result = {
|
return
|
||||||
data: {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let messages = result.data.sendMessage
|
let messages = result.data.sendMessage
|
||||||
|
@ -443,7 +462,11 @@ class iMessageGraphClientClass {
|
||||||
|
|
||||||
async getChats () {
|
async getChats () {
|
||||||
|
|
||||||
console.log(`getChats`)
|
|
||||||
|
if (DEBUG) {
|
||||||
|
|
||||||
|
console.log(`getChats`)
|
||||||
|
}
|
||||||
|
|
||||||
if (TEST_MODE) {
|
if (TEST_MODE) {
|
||||||
|
|
||||||
|
@ -464,27 +487,31 @@ class iMessageGraphClientClass {
|
||||||
})
|
})
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
||||||
console.log(`error with apollo query`)
|
console.log(`getChats: error with apollo query`)
|
||||||
console.log(error)
|
console.log(error)
|
||||||
|
|
||||||
result = {
|
return
|
||||||
data: {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let chats = result.data.getChats
|
let chats = result.data.getChats
|
||||||
|
|
||||||
console.log(`getChats complete`)
|
|
||||||
|
|
||||||
storedArgsAndResults.getChats.output = parseChatsToFriendlyNameString(chats)
|
storedArgsAndResults.getChats.output = parseChatsToFriendlyNameString(chats)
|
||||||
|
|
||||||
console.log(storedArgsAndResults.getChats.output)
|
if (DEBUG) {
|
||||||
|
|
||||||
|
console.log(`getChats complete`)
|
||||||
|
console.log(storedArgsAndResults.getChats.output)
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
async getChatCounts () {
|
async getChatCounts () {
|
||||||
|
|
||||||
console.log(`getChatCounts`)
|
if (DEBUG) {
|
||||||
|
|
||||||
|
console.log(`getChatCounts`)
|
||||||
|
}
|
||||||
|
|
||||||
if (TEST_MODE) {
|
if (TEST_MODE) {
|
||||||
|
|
||||||
|
@ -505,29 +532,24 @@ class iMessageGraphClientClass {
|
||||||
})
|
})
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
||||||
console.log(`error with apollo query`)
|
console.log(`getChatCounts: error with apollo query`)
|
||||||
console.log(error)
|
console.log(error)
|
||||||
|
|
||||||
result = {
|
return
|
||||||
data: {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let chats = result.data.getChatCounts
|
let chats = result.data.getChatCounts
|
||||||
|
|
||||||
console.log(`got chat counts`)
|
|
||||||
|
|
||||||
if (!chats) {
|
if (!chats) {
|
||||||
|
|
||||||
return ``
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
let friendlyNameStrings = ``
|
let friendlyNameStrings = ``
|
||||||
|
|
||||||
if (chats.length === 0) {
|
if (chats.length === 0) {
|
||||||
|
|
||||||
return ``
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let chat of chats) {
|
for (let chat of chats) {
|
||||||
|
@ -537,9 +559,16 @@ class iMessageGraphClientClass {
|
||||||
|
|
||||||
// remove trailing comma
|
// remove trailing comma
|
||||||
friendlyNameStrings = friendlyNameStrings.substring(1, friendlyNameStrings.length)
|
friendlyNameStrings = friendlyNameStrings.substring(1, friendlyNameStrings.length)
|
||||||
|
|
||||||
console.log(friendlyNameStrings)
|
|
||||||
storedArgsAndResults.getChatCounts.output = friendlyNameStrings
|
storedArgsAndResults.getChatCounts.output = friendlyNameStrings
|
||||||
|
|
||||||
|
if (DEBUG) {
|
||||||
|
|
||||||
|
console.log(`got chat counts`)
|
||||||
|
console.log(friendlyNameStrings)
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
setIPAddress (IPAddress) {
|
setIPAddress (IPAddress) {
|
||||||
|
@ -588,32 +617,45 @@ class iMessageClient {
|
||||||
// kick off an update interval
|
// kick off an update interval
|
||||||
setInterval(async () => {
|
setInterval(async () => {
|
||||||
|
|
||||||
console.log(`run interval`)
|
let intervalDate = new Date().toISOString()
|
||||||
|
|
||||||
|
console.log(`${intervalDate}: run interval`)
|
||||||
|
|
||||||
if (!canStart) {
|
if (!canStart) {
|
||||||
|
|
||||||
console.log(`can't start yet`)
|
console.log(`${intervalDate}: can't start yet`)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if (DEBUG) {
|
||||||
|
|
||||||
|
console.log(`${intervalDate}: running...`)
|
||||||
|
// }
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
console.log(`running...`)
|
if (Object.keys(storedArgsAndResults.getMessages.args).length > 0) {
|
||||||
|
|
||||||
if (Object.keys(storedArgsAndResults.getMessages.args).length > 0) {
|
console.log(`${intervalDate}: interval: get messages for ${storedArgsAndResults.getMessages.args.chatId}`)
|
||||||
|
await iMessageGraphClient.getMessages(storedArgsAndResults.getMessages.args.chatId, storedArgsAndResults.getMessages.args.page, true)
|
||||||
await iMessageGraphClient.getMessages(storedArgsAndResults.getMessages.args.chatId, storedArgsAndResults.getMessages.args.page)
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (Object.keys(storedArgsAndResults.hasNewMessagesInChat.args).length > 0) {
|
console.log(`${intervalDate}: interval: getchats`)
|
||||||
|
await iMessageGraphClient.getChats()
|
||||||
await iMessageGraphClient.hasNewMessagesInChat(storedArgsAndResults.hasNewMessagesInChat.chatId)
|
console.log(`${intervalDate}: interval: getchatcounts`)
|
||||||
|
await iMessageGraphClient.getChatCounts()
|
||||||
|
} catch (error) {
|
||||||
|
|
||||||
|
console.log(`${intervalDate}: caught error when running interval`)
|
||||||
|
console.log(error)
|
||||||
}
|
}
|
||||||
|
|
||||||
await iMessageGraphClient.getChats()
|
// if (DEBUG) {
|
||||||
await iMessageGraphClient.getChatCounts()
|
|
||||||
|
console.log(`${intervalDate}: complete!`)
|
||||||
console.log(`complete!`)
|
// }
|
||||||
}, 2000)
|
}, 3000)
|
||||||
}
|
}
|
||||||
|
|
||||||
async getMessages (chatId, page) {
|
async getMessages (chatId, page) {
|
||||||
|
@ -622,9 +664,12 @@ class iMessageClient {
|
||||||
|
|
||||||
if (storedArgsAndResults.getMessages.args.chatId !== chatId || storedArgsAndResults.getMessages.args.page !== page) {
|
if (storedArgsAndResults.getMessages.args.chatId !== chatId || storedArgsAndResults.getMessages.args.page !== page) {
|
||||||
|
|
||||||
await iMessageGraphClient.getMessages(chatId, page)
|
await iMessageGraphClient.getMessages(chatId, page, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log(`iMessageClient.getMessages, return:`)
|
||||||
|
console.log(storedArgsAndResults.getMessages.output)
|
||||||
|
|
||||||
return storedArgsAndResults.getMessages.output
|
return storedArgsAndResults.getMessages.output
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -632,12 +677,12 @@ class iMessageClient {
|
||||||
|
|
||||||
console.log(`iMessageClient.hasNewMessagesInChat`)
|
console.log(`iMessageClient.hasNewMessagesInChat`)
|
||||||
|
|
||||||
if (storedArgsAndResults.hasNewMessagesInChat.args.chatId !== chatId) {
|
let returnValue = await iMessageGraphClient.hasNewMessagesInChat(chatId)
|
||||||
|
|
||||||
await iMessageGraphClient.hasNewMessagesInChat(chatId)
|
console.log(`iMessageClient.hasNewMessagesInChat, return:`)
|
||||||
}
|
console.log(returnValue)
|
||||||
|
|
||||||
return storedArgsAndResults.hasNewMessagesInChat.output
|
return returnValue
|
||||||
}
|
}
|
||||||
|
|
||||||
async sendMessage (chatId, message) {
|
async sendMessage (chatId, message) {
|
||||||
|
@ -656,12 +701,16 @@ class iMessageClient {
|
||||||
await iMessageGraphClient.getChats()
|
await iMessageGraphClient.getChats()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log(`iMessageClient.getChats, return:`)
|
||||||
|
console.log(storedArgsAndResults.getChats.output)
|
||||||
|
|
||||||
return storedArgsAndResults.getChats.output
|
return storedArgsAndResults.getChats.output
|
||||||
}
|
}
|
||||||
|
|
||||||
getChatCounts () {
|
getChatCounts () {
|
||||||
|
|
||||||
console.log(`iMessageClient.getChatCounts`)
|
console.log(`iMessageClient.getChatCounts, prestored return:`)
|
||||||
|
console.log(storedArgsAndResults.getChatCounts.output)
|
||||||
|
|
||||||
return storedArgsAndResults.getChatCounts.output
|
return storedArgsAndResults.getChatCounts.output
|
||||||
}
|
}
|
||||||
|
|
55
Makefile
55
Makefile
|
@ -1,55 +0,0 @@
|
||||||
# path to RETRO68
|
|
||||||
RETRO68=../../../Retro68-build/toolchain
|
|
||||||
|
|
||||||
PREFIX=$(RETRO68)/m68k-unknown-elf
|
|
||||||
CC=$(RETRO68)/bin/m68k-unknown-elf-gcc
|
|
||||||
CXX=$(RETRO68)/bin/m68k-unknown-elf-g++
|
|
||||||
REZ=$(RETRO68)/bin/Rez
|
|
||||||
|
|
||||||
BUILDFLAGS=-Ofast -ffloat-store -funsafe-math-optimizations -fsingle-precision-constant -mcpu=68000 -mtune=68000 -m68000 -msoft-float -malign-int
|
|
||||||
LDFLAGS=-lRetroConsole $(BUILDFLAGS)
|
|
||||||
RINCLUDES=$(PREFIX)/RIncludes
|
|
||||||
REZFLAGS=-I$(RINCLUDES)
|
|
||||||
|
|
||||||
# all resource file help is from https://github.com/clehner/Browsy/blob/master/Makefile
|
|
||||||
RSRC_HEX=$(wildcard rsrc/*/*.hex)
|
|
||||||
RSRC_TXT=$(wildcard rsrc/*/*.txt)
|
|
||||||
RSRC_JS=$(wildcard rsrc/*/*.js)
|
|
||||||
RSRC_JSON=$(wildcard rsrc/*/*.json)
|
|
||||||
RSRC_DAT=$(RSRC_HEX:.hex=.dat) $(RSRC_TXT:.txt=.dat) $(RSRC_JS:.js=.dat) $(RSRC_JSON:.json=.dat)
|
|
||||||
|
|
||||||
NuklearQuickDraw.bin NuklearQuickDraw.APPL NuklearQuickDraw.dsk: NuklearQuickDraw.flt rsrc-args compile_js
|
|
||||||
$(REZ) $(REZFLAGS) \
|
|
||||||
-DFLT_FILE_NAME="\"NuklearQuickDraw.flt\"" "$(RINCLUDES)/Retro68APPL.r" \
|
|
||||||
-t "APPL" \
|
|
||||||
$(BUILDFLAGS) -o NuklearQuickDraw.bin --cc NuklearQuickDraw.APPL --cc NuklearQuickDraw.dsk -C WWW6 $(shell cat rsrc-args)
|
|
||||||
|
|
||||||
NuklearQuickDraw.flt: hello.o
|
|
||||||
$(CXX) $< -o $@ $(LDFLAGS) # C++ used for linking because RetroConsole needs it
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
clean:
|
|
||||||
rm -f NuklearQuickDraw.bin NuklearQuickDraw.APPL NuklearQuickDraw.dsk NuklearQuickDraw.flt NuklearQuickDraw.flt.gdb hello.o rsrc/*/*.dat rsrc-args
|
|
||||||
|
|
||||||
compile_js:
|
|
||||||
./compile_js.sh
|
|
||||||
|
|
||||||
rsrc: $(RSRC_DAT) rsrc-args
|
|
||||||
|
|
||||||
rsrc/%.dat: rsrc/%.hex
|
|
||||||
$(QUIET_RSRC)$(FROM_HEX) $< > $@
|
|
||||||
|
|
||||||
rsrc/TEXT/%.dat: rsrc/TEXT/%.txt
|
|
||||||
$(QUIET_RSRC)tr '\n' '\r' < $< > $@
|
|
||||||
|
|
||||||
rsrc/JS/%.dat: rsrc/TEXT/%.txt
|
|
||||||
$(QUIET_RSRC)tr '\n' '\r' < $< > $@
|
|
||||||
|
|
||||||
rsrc-args: $(RSRC_DAT)
|
|
||||||
@cd rsrc && for code in $$(ls); do \
|
|
||||||
echo -n "-t $$code "; \
|
|
||||||
cd "$$code" && for file in *.dat; do \
|
|
||||||
echo -n "-r $${file%.dat} rsrc/$$code/$$file "; \
|
|
||||||
done; \
|
|
||||||
cd ..; \
|
|
||||||
done > ../$@
|
|
|
@ -1,349 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<CodeLite_Project Name="NuklearQuickDraw" Version="10.0.0" InternalType="">
|
|
||||||
<Plugins>
|
|
||||||
<Plugin Name="qmake">
|
|
||||||
<![CDATA[00070001N0005Debug0000000000000001N0011pce-mac-5120000000000000001N0015pce-mac-classic0000000000000001N0019pce-mac-plus-sys6080000000000000001N0019pce-mac-plus-sys7010000000000000001N0017pce-mac-se-sys7550000000000000001N0010pce-mac128000000000000]]>
|
|
||||||
</Plugin>
|
|
||||||
</Plugins>
|
|
||||||
<VirtualDirectory Name="build">
|
|
||||||
<VirtualDirectory Name="CMakeFiles">
|
|
||||||
<VirtualDirectory Name="3.5.1">
|
|
||||||
<VirtualDirectory Name="CompilerIdC">
|
|
||||||
<File Name="build/CMakeFiles/3.5.1/CompilerIdC/CMakeCCompilerId.c"/>
|
|
||||||
</VirtualDirectory>
|
|
||||||
<VirtualDirectory Name="CompilerIdCXX">
|
|
||||||
<File Name="build/CMakeFiles/3.5.1/CompilerIdCXX/CMakeCXXCompilerId.cpp"/>
|
|
||||||
</VirtualDirectory>
|
|
||||||
</VirtualDirectory>
|
|
||||||
<File Name="build/CMakeFiles/feature_tests.cxx"/>
|
|
||||||
<File Name="build/CMakeFiles/feature_tests.c"/>
|
|
||||||
</VirtualDirectory>
|
|
||||||
</VirtualDirectory>
|
|
||||||
<Description/>
|
|
||||||
<Dependencies/>
|
|
||||||
<VirtualDirectory Name="NuklearQuickDraw">
|
|
||||||
<File Name="SerialHelper.h"/>
|
|
||||||
<File Name="SerialHelper.c"/>
|
|
||||||
<File Name="nuklear_quickdraw.h"/>
|
|
||||||
<File Name="nuklear.h"/>
|
|
||||||
<File Name="Sample.r"/>
|
|
||||||
<File Name="Sample.h"/>
|
|
||||||
<File Name="Sample.c"/>
|
|
||||||
<File Name="Makefile"/>
|
|
||||||
<File Name="CMakeLists.txt"/>
|
|
||||||
</VirtualDirectory>
|
|
||||||
<Settings Type="Executable">
|
|
||||||
<GlobalSettings>
|
|
||||||
<Compiler Options="" C_Options="" Assembler="">
|
|
||||||
<IncludePath Value="."/>
|
|
||||||
<IncludePath Value="/home/camh/Documents/Retro68/Retro68/CIncludes/"/>
|
|
||||||
<IncludePath Value="/home/camh/Documents/Retro68/Retro68/RIncludes/"/>
|
|
||||||
</Compiler>
|
|
||||||
<Linker Options="">
|
|
||||||
<LibraryPath Value="."/>
|
|
||||||
</Linker>
|
|
||||||
<ResourceCompiler Options=""/>
|
|
||||||
</GlobalSettings>
|
|
||||||
<Configuration Name="Basilisk II" CompilerType="gnu gcc" DebuggerType="GNU gdb debugger" Type="Executable" BuildCmpWithGlobalSettings="append" BuildLnkWithGlobalSettings="append" BuildResWithGlobalSettings="append">
|
|
||||||
<Compiler Options="-g -Wall" C_Options="" Assembler="" Required="no" PreCompiledHeader="" PCHInCommandLine="no" PCHFlags="" PCHFlagsPolicy="0">
|
|
||||||
<IncludePath Value="."/>
|
|
||||||
</Compiler>
|
|
||||||
<Linker Options="-O0" Required="yes">
|
|
||||||
<LibraryPath Value="."/>
|
|
||||||
<LibraryPath Value="Debug"/>
|
|
||||||
</Linker>
|
|
||||||
<ResourceCompiler Options="" Required="no"/>
|
|
||||||
<General OutputFile="$(IntermediateDirectory)/$(ProjectName)" IntermediateDirectory="./Debug" Command="./build_and_run.sh" CommandArguments="NuklearQuickDraw /b 0" UseSeparateDebugArgs="no" DebugArguments="" WorkingDirectory="/home/camh/Documents/Retro68kApps" PauseExecWhenProcTerminates="no" IsGUIProgram="yes" IsEnabled="yes"/>
|
|
||||||
<BuildSystem Name="Default"/>
|
|
||||||
<Environment EnvVarSetName="<Use Defaults>" DbgSetName="<Use Defaults>">
|
|
||||||
<![CDATA[]]>
|
|
||||||
</Environment>
|
|
||||||
<Debugger IsRemote="no" RemoteHostName="" RemoteHostPort="" DebuggerPath="" IsExtended="no">
|
|
||||||
<DebuggerSearchPaths/>
|
|
||||||
<PostConnectCommands/>
|
|
||||||
<StartupCommands/>
|
|
||||||
</Debugger>
|
|
||||||
<PreBuild/>
|
|
||||||
<PostBuild/>
|
|
||||||
<CustomBuild Enabled="yes">
|
|
||||||
<RebuildCommand/>
|
|
||||||
<CleanCommand>./clean.sh</CleanCommand>
|
|
||||||
<BuildCommand>./build.sh NuklearQuickDraw</BuildCommand>
|
|
||||||
<PreprocessFileCommand/>
|
|
||||||
<SingleFileCommand/>
|
|
||||||
<MakefileGenerationCommand/>
|
|
||||||
<ThirdPartyToolName/>
|
|
||||||
<WorkingDirectory>/home/camh/Documents/Retro68kApps</WorkingDirectory>
|
|
||||||
</CustomBuild>
|
|
||||||
<AdditionalRules>
|
|
||||||
<CustomPostBuild/>
|
|
||||||
<CustomPreBuild/>
|
|
||||||
</AdditionalRules>
|
|
||||||
<Completion EnableCpp11="yes" EnableCpp14="yes">
|
|
||||||
<ClangCmpFlagsC/>
|
|
||||||
<ClangCmpFlags/>
|
|
||||||
<ClangPP/>
|
|
||||||
<SearchPaths>/home/camh/Documents/Retro68/Retro68/CIncludes/
|
|
||||||
/home/camh/Documents/Retro68/Retro68/RIncludes/</SearchPaths>
|
|
||||||
</Completion>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration Name="pce-mac-128" CompilerType="gnu gcc" DebuggerType="GNU gdb debugger" Type="Executable" BuildCmpWithGlobalSettings="append" BuildLnkWithGlobalSettings="append" BuildResWithGlobalSettings="append">
|
|
||||||
<Compiler Options="-g -Wall" C_Options="" Assembler="" Required="no" PreCompiledHeader="" PCHInCommandLine="no" PCHFlags="" PCHFlagsPolicy="0">
|
|
||||||
<IncludePath Value="."/>
|
|
||||||
</Compiler>
|
|
||||||
<Linker Options="-O0" Required="yes">
|
|
||||||
<LibraryPath Value="."/>
|
|
||||||
<LibraryPath Value="Debug"/>
|
|
||||||
</Linker>
|
|
||||||
<ResourceCompiler Options="" Required="no"/>
|
|
||||||
<General OutputFile="$(IntermediateDirectory)/$(ProjectName)" IntermediateDirectory="./Debug" Command="./build_and_run.sh" CommandArguments="NuklearQuickDraw pce-mac128 0" UseSeparateDebugArgs="no" DebugArguments="" WorkingDirectory="/home/camh/Documents/Retro68kApps" PauseExecWhenProcTerminates="no" IsGUIProgram="yes" IsEnabled="yes"/>
|
|
||||||
<BuildSystem Name="Default"/>
|
|
||||||
<Environment EnvVarSetName="<Use Defaults>" DbgSetName="<Use Defaults>">
|
|
||||||
<![CDATA[]]>
|
|
||||||
</Environment>
|
|
||||||
<Debugger IsRemote="no" RemoteHostName="" RemoteHostPort="" DebuggerPath="" IsExtended="no">
|
|
||||||
<DebuggerSearchPaths/>
|
|
||||||
<PostConnectCommands/>
|
|
||||||
<StartupCommands/>
|
|
||||||
</Debugger>
|
|
||||||
<PreBuild/>
|
|
||||||
<PostBuild/>
|
|
||||||
<CustomBuild Enabled="yes">
|
|
||||||
<RebuildCommand/>
|
|
||||||
<CleanCommand>./clean.sh</CleanCommand>
|
|
||||||
<BuildCommand>./build.sh NuklearQuickDraw</BuildCommand>
|
|
||||||
<PreprocessFileCommand/>
|
|
||||||
<SingleFileCommand/>
|
|
||||||
<MakefileGenerationCommand/>
|
|
||||||
<ThirdPartyToolName/>
|
|
||||||
<WorkingDirectory>/home/camh/Documents/Retro68kApps</WorkingDirectory>
|
|
||||||
</CustomBuild>
|
|
||||||
<AdditionalRules>
|
|
||||||
<CustomPostBuild/>
|
|
||||||
<CustomPreBuild/>
|
|
||||||
</AdditionalRules>
|
|
||||||
<Completion EnableCpp11="yes" EnableCpp14="yes">
|
|
||||||
<ClangCmpFlagsC/>
|
|
||||||
<ClangCmpFlags/>
|
|
||||||
<ClangPP/>
|
|
||||||
<SearchPaths>/home/camh/Documents/Retro68/Retro68/CIncludes/
|
|
||||||
/home/camh/Documents/Retro68/Retro68/RIncludes/</SearchPaths>
|
|
||||||
</Completion>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration Name="pce-mac-512" CompilerType="gnu gcc" DebuggerType="GNU gdb debugger" Type="Executable" BuildCmpWithGlobalSettings="append" BuildLnkWithGlobalSettings="append" BuildResWithGlobalSettings="append">
|
|
||||||
<Compiler Options="-g -Wall" C_Options="" Assembler="" Required="no" PreCompiledHeader="" PCHInCommandLine="no" PCHFlags="" PCHFlagsPolicy="0">
|
|
||||||
<IncludePath Value="."/>
|
|
||||||
</Compiler>
|
|
||||||
<Linker Options="-O0" Required="yes">
|
|
||||||
<LibraryPath Value="."/>
|
|
||||||
<LibraryPath Value="Debug"/>
|
|
||||||
</Linker>
|
|
||||||
<ResourceCompiler Options="" Required="no"/>
|
|
||||||
<General OutputFile="$(IntermediateDirectory)/$(ProjectName)" IntermediateDirectory="./Debug" Command="./build_and_run.sh" CommandArguments="NuklearQuickDraw pce-mac512 0" UseSeparateDebugArgs="no" DebugArguments="" WorkingDirectory="/home/camh/Documents/Retro68kApps" PauseExecWhenProcTerminates="no" IsGUIProgram="yes" IsEnabled="yes"/>
|
|
||||||
<BuildSystem Name="Default"/>
|
|
||||||
<Environment EnvVarSetName="<Use Defaults>" DbgSetName="<Use Defaults>">
|
|
||||||
<![CDATA[]]>
|
|
||||||
</Environment>
|
|
||||||
<Debugger IsRemote="no" RemoteHostName="" RemoteHostPort="" DebuggerPath="" IsExtended="no">
|
|
||||||
<DebuggerSearchPaths/>
|
|
||||||
<PostConnectCommands/>
|
|
||||||
<StartupCommands/>
|
|
||||||
</Debugger>
|
|
||||||
<PreBuild/>
|
|
||||||
<PostBuild/>
|
|
||||||
<CustomBuild Enabled="yes">
|
|
||||||
<RebuildCommand/>
|
|
||||||
<CleanCommand>./clean.sh</CleanCommand>
|
|
||||||
<BuildCommand>./build.sh NuklearQuickDraw</BuildCommand>
|
|
||||||
<PreprocessFileCommand/>
|
|
||||||
<SingleFileCommand/>
|
|
||||||
<MakefileGenerationCommand/>
|
|
||||||
<ThirdPartyToolName/>
|
|
||||||
<WorkingDirectory>/home/camh/Documents/Retro68kApps</WorkingDirectory>
|
|
||||||
</CustomBuild>
|
|
||||||
<AdditionalRules>
|
|
||||||
<CustomPostBuild/>
|
|
||||||
<CustomPreBuild/>
|
|
||||||
</AdditionalRules>
|
|
||||||
<Completion EnableCpp11="yes" EnableCpp14="yes">
|
|
||||||
<ClangCmpFlagsC/>
|
|
||||||
<ClangCmpFlags/>
|
|
||||||
<ClangPP/>
|
|
||||||
<SearchPaths>/home/camh/Documents/Retro68/Retro68/CIncludes/
|
|
||||||
/home/camh/Documents/Retro68/Retro68/RIncludes/</SearchPaths>
|
|
||||||
</Completion>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration Name="pce-mac-classic" CompilerType="gnu gcc" DebuggerType="GNU gdb debugger" Type="Executable" BuildCmpWithGlobalSettings="append" BuildLnkWithGlobalSettings="append" BuildResWithGlobalSettings="append">
|
|
||||||
<Compiler Options="-g -Wall" C_Options="" Assembler="" Required="no" PreCompiledHeader="" PCHInCommandLine="no" PCHFlags="" PCHFlagsPolicy="0">
|
|
||||||
<IncludePath Value="."/>
|
|
||||||
</Compiler>
|
|
||||||
<Linker Options="-O0" Required="yes">
|
|
||||||
<LibraryPath Value="."/>
|
|
||||||
<LibraryPath Value="Debug"/>
|
|
||||||
</Linker>
|
|
||||||
<ResourceCompiler Options="" Required="no"/>
|
|
||||||
<General OutputFile="$(IntermediateDirectory)/$(ProjectName)" IntermediateDirectory="./Debug" Command="./build_and_run.sh" CommandArguments="NuklearQuickDraw pce-mac-classic 0" UseSeparateDebugArgs="no" DebugArguments="" WorkingDirectory="/home/camh/Documents/Retro68kApps" PauseExecWhenProcTerminates="no" IsGUIProgram="yes" IsEnabled="yes"/>
|
|
||||||
<BuildSystem Name="Default"/>
|
|
||||||
<Environment EnvVarSetName="<Use Defaults>" DbgSetName="<Use Defaults>">
|
|
||||||
<![CDATA[]]>
|
|
||||||
</Environment>
|
|
||||||
<Debugger IsRemote="no" RemoteHostName="" RemoteHostPort="" DebuggerPath="" IsExtended="no">
|
|
||||||
<DebuggerSearchPaths/>
|
|
||||||
<PostConnectCommands/>
|
|
||||||
<StartupCommands/>
|
|
||||||
</Debugger>
|
|
||||||
<PreBuild/>
|
|
||||||
<PostBuild/>
|
|
||||||
<CustomBuild Enabled="yes">
|
|
||||||
<RebuildCommand/>
|
|
||||||
<CleanCommand>./clean.sh</CleanCommand>
|
|
||||||
<BuildCommand>./build.sh NuklearQuickDraw</BuildCommand>
|
|
||||||
<PreprocessFileCommand/>
|
|
||||||
<SingleFileCommand/>
|
|
||||||
<MakefileGenerationCommand/>
|
|
||||||
<ThirdPartyToolName/>
|
|
||||||
<WorkingDirectory>/home/camh/Documents/Retro68kApps/</WorkingDirectory>
|
|
||||||
</CustomBuild>
|
|
||||||
<AdditionalRules>
|
|
||||||
<CustomPostBuild/>
|
|
||||||
<CustomPreBuild/>
|
|
||||||
</AdditionalRules>
|
|
||||||
<Completion EnableCpp11="yes" EnableCpp14="yes">
|
|
||||||
<ClangCmpFlagsC/>
|
|
||||||
<ClangCmpFlags/>
|
|
||||||
<ClangPP/>
|
|
||||||
<SearchPaths>/home/camh/Documents/Retro68/Retro68/CIncludes/
|
|
||||||
/home/camh/Documents/Retro68/Retro68/RIncludes/</SearchPaths>
|
|
||||||
</Completion>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration Name="pce-mac-plus-sys608" CompilerType="gnu gcc" DebuggerType="GNU gdb debugger" Type="Executable" BuildCmpWithGlobalSettings="append" BuildLnkWithGlobalSettings="append" BuildResWithGlobalSettings="append">
|
|
||||||
<Compiler Options="-g -Wall" C_Options="" Assembler="" Required="no" PreCompiledHeader="" PCHInCommandLine="no" PCHFlags="" PCHFlagsPolicy="0">
|
|
||||||
<IncludePath Value="."/>
|
|
||||||
</Compiler>
|
|
||||||
<Linker Options="-O0" Required="yes">
|
|
||||||
<LibraryPath Value="."/>
|
|
||||||
<LibraryPath Value="Debug"/>
|
|
||||||
</Linker>
|
|
||||||
<ResourceCompiler Options="" Required="no"/>
|
|
||||||
<General OutputFile="$(IntermediateDirectory)/$(ProjectName)" IntermediateDirectory="./Debug" Command="./build_and_run.sh" CommandArguments="NuklearQuickDraw pce-mac-plus-sys608 0" UseSeparateDebugArgs="no" DebugArguments="" WorkingDirectory="/home/camh/Documents/Retro68kApps" PauseExecWhenProcTerminates="no" IsGUIProgram="yes" IsEnabled="yes"/>
|
|
||||||
<BuildSystem Name="Default"/>
|
|
||||||
<Environment EnvVarSetName="<Use Defaults>" DbgSetName="<Use Defaults>">
|
|
||||||
<![CDATA[]]>
|
|
||||||
</Environment>
|
|
||||||
<Debugger IsRemote="no" RemoteHostName="" RemoteHostPort="" DebuggerPath="" IsExtended="no">
|
|
||||||
<DebuggerSearchPaths/>
|
|
||||||
<PostConnectCommands/>
|
|
||||||
<StartupCommands/>
|
|
||||||
</Debugger>
|
|
||||||
<PreBuild/>
|
|
||||||
<PostBuild/>
|
|
||||||
<CustomBuild Enabled="yes">
|
|
||||||
<RebuildCommand/>
|
|
||||||
<CleanCommand>./clean.sh</CleanCommand>
|
|
||||||
<BuildCommand>./build.sh NuklearQuickDraw</BuildCommand>
|
|
||||||
<PreprocessFileCommand/>
|
|
||||||
<SingleFileCommand/>
|
|
||||||
<MakefileGenerationCommand/>
|
|
||||||
<ThirdPartyToolName/>
|
|
||||||
<WorkingDirectory>/home/camh/Documents/Retro68kApps</WorkingDirectory>
|
|
||||||
</CustomBuild>
|
|
||||||
<AdditionalRules>
|
|
||||||
<CustomPostBuild/>
|
|
||||||
<CustomPreBuild/>
|
|
||||||
</AdditionalRules>
|
|
||||||
<Completion EnableCpp11="yes" EnableCpp14="yes">
|
|
||||||
<ClangCmpFlagsC/>
|
|
||||||
<ClangCmpFlags/>
|
|
||||||
<ClangPP/>
|
|
||||||
<SearchPaths>/home/camh/Documents/Retro68/Retro68/CIncludes/
|
|
||||||
/home/camh/Documents/Retro68/Retro68/RIncludes/</SearchPaths>
|
|
||||||
</Completion>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration Name="pce-mac-plus-sys701" CompilerType="gnu gcc" DebuggerType="GNU gdb debugger" Type="Executable" BuildCmpWithGlobalSettings="append" BuildLnkWithGlobalSettings="append" BuildResWithGlobalSettings="append">
|
|
||||||
<Compiler Options="-g -Wall" C_Options="" Assembler="" Required="no" PreCompiledHeader="" PCHInCommandLine="no" PCHFlags="" PCHFlagsPolicy="0">
|
|
||||||
<IncludePath Value="."/>
|
|
||||||
</Compiler>
|
|
||||||
<Linker Options="-O0" Required="yes">
|
|
||||||
<LibraryPath Value="."/>
|
|
||||||
<LibraryPath Value="Debug"/>
|
|
||||||
</Linker>
|
|
||||||
<ResourceCompiler Options="" Required="no"/>
|
|
||||||
<General OutputFile="$(IntermediateDirectory)/$(ProjectName)" IntermediateDirectory="./Debug" Command="./build_and_run.sh" CommandArguments="NuklearQuickDraw pce-mac-plus-sys701 0" UseSeparateDebugArgs="no" DebugArguments="" WorkingDirectory="/home/camh/Documents/Retro68kApps" PauseExecWhenProcTerminates="no" IsGUIProgram="yes" IsEnabled="yes"/>
|
|
||||||
<BuildSystem Name="Default"/>
|
|
||||||
<Environment EnvVarSetName="<Use Defaults>" DbgSetName="<Use Defaults>">
|
|
||||||
<![CDATA[]]>
|
|
||||||
</Environment>
|
|
||||||
<Debugger IsRemote="no" RemoteHostName="" RemoteHostPort="" DebuggerPath="" IsExtended="no">
|
|
||||||
<DebuggerSearchPaths/>
|
|
||||||
<PostConnectCommands/>
|
|
||||||
<StartupCommands/>
|
|
||||||
</Debugger>
|
|
||||||
<PreBuild/>
|
|
||||||
<PostBuild/>
|
|
||||||
<CustomBuild Enabled="yes">
|
|
||||||
<RebuildCommand/>
|
|
||||||
<CleanCommand>./clean.sh</CleanCommand>
|
|
||||||
<BuildCommand>./build.sh NuklearQuickDraw</BuildCommand>
|
|
||||||
<PreprocessFileCommand/>
|
|
||||||
<SingleFileCommand/>
|
|
||||||
<MakefileGenerationCommand/>
|
|
||||||
<ThirdPartyToolName/>
|
|
||||||
<WorkingDirectory>/home/camh/Documents/Retro68kApps</WorkingDirectory>
|
|
||||||
</CustomBuild>
|
|
||||||
<AdditionalRules>
|
|
||||||
<CustomPostBuild/>
|
|
||||||
<CustomPreBuild/>
|
|
||||||
</AdditionalRules>
|
|
||||||
<Completion EnableCpp11="yes" EnableCpp14="yes">
|
|
||||||
<ClangCmpFlagsC/>
|
|
||||||
<ClangCmpFlags/>
|
|
||||||
<ClangPP/>
|
|
||||||
<SearchPaths>/home/camh/Documents/Retro68/Retro68/CIncludes/
|
|
||||||
/home/camh/Documents/Retro68/Retro68/RIncludes/</SearchPaths>
|
|
||||||
</Completion>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration Name="pce-mac-se-sys755" CompilerType="gnu gcc" DebuggerType="GNU gdb debugger" Type="Executable" BuildCmpWithGlobalSettings="append" BuildLnkWithGlobalSettings="append" BuildResWithGlobalSettings="append">
|
|
||||||
<Compiler Options="-g -Wall" C_Options="" Assembler="" Required="no" PreCompiledHeader="" PCHInCommandLine="no" PCHFlags="" PCHFlagsPolicy="0">
|
|
||||||
<IncludePath Value="."/>
|
|
||||||
</Compiler>
|
|
||||||
<Linker Options="-O0" Required="yes">
|
|
||||||
<LibraryPath Value="."/>
|
|
||||||
<LibraryPath Value="Debug"/>
|
|
||||||
</Linker>
|
|
||||||
<ResourceCompiler Options="" Required="no"/>
|
|
||||||
<General OutputFile="$(IntermediateDirectory)/$(ProjectName)" IntermediateDirectory="./Debug" Command="./build_and_run.sh" CommandArguments="NuklearQuickDraw pce-mac-se-sys755 0" UseSeparateDebugArgs="no" DebugArguments="" WorkingDirectory="/home/camh/Documents/Retro68kApps" PauseExecWhenProcTerminates="no" IsGUIProgram="yes" IsEnabled="yes"/>
|
|
||||||
<BuildSystem Name="Default"/>
|
|
||||||
<Environment EnvVarSetName="<Use Defaults>" DbgSetName="<Use Defaults>">
|
|
||||||
<![CDATA[]]>
|
|
||||||
</Environment>
|
|
||||||
<Debugger IsRemote="no" RemoteHostName="" RemoteHostPort="" DebuggerPath="" IsExtended="no">
|
|
||||||
<DebuggerSearchPaths/>
|
|
||||||
<PostConnectCommands/>
|
|
||||||
<StartupCommands/>
|
|
||||||
</Debugger>
|
|
||||||
<PreBuild/>
|
|
||||||
<PostBuild/>
|
|
||||||
<CustomBuild Enabled="yes">
|
|
||||||
<RebuildCommand/>
|
|
||||||
<CleanCommand>./clean.sh</CleanCommand>
|
|
||||||
<BuildCommand>./build.sh NuklearQuickDraw</BuildCommand>
|
|
||||||
<PreprocessFileCommand/>
|
|
||||||
<SingleFileCommand/>
|
|
||||||
<MakefileGenerationCommand/>
|
|
||||||
<ThirdPartyToolName/>
|
|
||||||
<WorkingDirectory>/home/camh/Documents/Retro68kApps</WorkingDirectory>
|
|
||||||
</CustomBuild>
|
|
||||||
<AdditionalRules>
|
|
||||||
<CustomPostBuild/>
|
|
||||||
<CustomPreBuild/>
|
|
||||||
</AdditionalRules>
|
|
||||||
<Completion EnableCpp11="yes" EnableCpp14="yes">
|
|
||||||
<ClangCmpFlagsC/>
|
|
||||||
<ClangCmpFlags/>
|
|
||||||
<ClangPP/>
|
|
||||||
<SearchPaths>/home/camh/Documents/Retro68/Retro68/CIncludes/
|
|
||||||
/home/camh/Documents/Retro68/Retro68/RIncludes/</SearchPaths>
|
|
||||||
</Completion>
|
|
||||||
</Configuration>
|
|
||||||
</Settings>
|
|
||||||
</CodeLite_Project>
|
|
|
@ -1,11 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<CodeLite_Workspace Name="NuklearQuickDraw" Database="" Version="10.0.0">
|
|
||||||
<Project Name="NuklearQuickDraw" Path="NuklearQuickDraw.project" Active="Yes"/>
|
|
||||||
<BuildMatrix>
|
|
||||||
<WorkspaceConfiguration Name="Default Config" Selected="yes">
|
|
||||||
<Environment/>
|
|
||||||
<Project Name="NuklearQuickDraw" ConfigName="pce-mac-classic"/>
|
|
||||||
<Project Name="NuklearQuickDraw" ConfigName="Basilisk II"/>
|
|
||||||
</WorkspaceConfiguration>
|
|
||||||
</BuildMatrix>
|
|
||||||
</CodeLite_Workspace>
|
|
|
@ -12,9 +12,9 @@ IOParam outgoingSerialPortReference;
|
||||||
IOParam incomingSerialPortReference;
|
IOParam incomingSerialPortReference;
|
||||||
const bool PRINT_ERRORS = false;
|
const bool PRINT_ERRORS = false;
|
||||||
const bool DEBUGGING = false;
|
const bool DEBUGGING = false;
|
||||||
const int RECEIVE_WINDOW_SIZE = 102400; // receive in up to 100kb chunks?
|
const int RECEIVE_WINDOW_SIZE = 32767; // receive in up to 100kb chunks?
|
||||||
const int MAX_RECEIVE_SIZE = RECEIVE_WINDOW_SIZE; // not sure if these ever need to be different
|
const int MAX_RECEIVE_SIZE = RECEIVE_WINDOW_SIZE; // not sure if these ever need to be different
|
||||||
char GlobalSerialInputBuffer[102400]; // make this match MAX_RECEIVE_SIZE
|
char GlobalSerialInputBuffer[32767]; // make this match MAX_RECEIVE_SIZE
|
||||||
|
|
||||||
char application_id[255];
|
char application_id[255];
|
||||||
int call_counter = 0;
|
int call_counter = 0;
|
||||||
|
|
58
mac_main.c
58
mac_main.c
|
@ -19,9 +19,11 @@
|
||||||
#include <Serial.h>
|
#include <Serial.h>
|
||||||
#include <Devices.h>
|
#include <Devices.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "mac_main.h"
|
#include "mac_main.h"
|
||||||
|
|
||||||
|
// #define MAC_APP_DEBUGGING
|
||||||
//#define PROFILING 1
|
//#define PROFILING 1
|
||||||
#ifdef PROFILING
|
#ifdef PROFILING
|
||||||
|
|
||||||
|
@ -107,7 +109,6 @@ Boolean gHasWaitNextEvent; /* set up by Initialize */
|
||||||
the program can check it to find out if it is currently in the background. */
|
the program can check it to find out if it is currently in the background. */
|
||||||
Boolean gInBackground; /* maintained by Initialize and DoEvent */
|
Boolean gInBackground; /* maintained by Initialize and DoEvent */
|
||||||
|
|
||||||
// #define MAC_APP_DEBUGGING
|
|
||||||
/* The following globals are the state of the window. If we supported more than
|
/* The following globals are the state of the window. If we supported more than
|
||||||
one window, they would be attatched to each document, rather than globals. */
|
one window, they would be attatched to each document, rather than globals. */
|
||||||
|
|
||||||
|
@ -142,9 +143,8 @@ void AlertUser( void );
|
||||||
|
|
||||||
// this function, EventLoop, and DoEvent contain all of the business logic necessary
|
// this function, EventLoop, and DoEvent contain all of the business logic necessary
|
||||||
// for our application to run
|
// for our application to run
|
||||||
#pragma segment Main
|
int main()
|
||||||
void main()
|
{
|
||||||
{
|
|
||||||
Initialize(); /* initialize the program */
|
Initialize(); /* initialize the program */
|
||||||
UnloadSeg((Ptr) Initialize); /* note that Initialize must not be in Main! */
|
UnloadSeg((Ptr) Initialize); /* note that Initialize must not be in Main! */
|
||||||
|
|
||||||
|
@ -158,27 +158,24 @@ void main()
|
||||||
// we could build a nuklear window for selection
|
// we could build a nuklear window for selection
|
||||||
|
|
||||||
char programResult[MAX_RECEIVE_SIZE];
|
char programResult[MAX_RECEIVE_SIZE];
|
||||||
sendProgramToCoprocessor(OUTPUT_JS, programResult);
|
sendProgramToCoprocessor((char *)OUTPUT_JS, programResult);
|
||||||
writeSerialPortDebug(boutRefNum, "coprocessor loaded");
|
writeSerialPortDebug(boutRefNum, "coprocessor loaded");
|
||||||
|
|
||||||
coprocessorLoaded = 1;
|
coprocessorLoaded = 1;
|
||||||
|
|
||||||
EventLoop(ctx); /* call the main event loop */
|
EventLoop(ctx); /* call the main event loop */
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Boolean gotKeyboardEvent = false;
|
Boolean gotKeyboardEvent = false;
|
||||||
int gotKeyboardEventTime = 0;
|
int gotKeyboardEventTime = 0;
|
||||||
|
|
||||||
#pragma segment Main
|
|
||||||
void EventLoop(struct nk_context *ctx)
|
void EventLoop(struct nk_context *ctx)
|
||||||
{
|
{
|
||||||
RgnHandle cursorRgn;
|
|
||||||
Boolean gotEvent;
|
Boolean gotEvent;
|
||||||
Boolean hasNextEvent;
|
|
||||||
EventRecord event;
|
EventRecord event;
|
||||||
EventRecord nextEventRecord;
|
|
||||||
Point mouse;
|
Point mouse;
|
||||||
cursorRgn = NewRgn();
|
|
||||||
|
|
||||||
int lastMouseHPos = 0;
|
int lastMouseHPos = 0;
|
||||||
int lastMouseVPos = 0;
|
int lastMouseVPos = 0;
|
||||||
|
@ -314,7 +311,7 @@ void EventLoop(struct nk_context *ctx)
|
||||||
SystemTask();
|
SystemTask();
|
||||||
|
|
||||||
// only re-render if there is an event, prevents screen flickering, speeds up app
|
// only re-render if there is an event, prevents screen flickering, speeds up app
|
||||||
if (beganInput || firstOrMouseMove || forceRedraw) { // forceRedraw is from nuklear_app
|
if (beganInput || firstOrMouseMove || forceRedraw) {
|
||||||
|
|
||||||
#ifdef PROFILING
|
#ifdef PROFILING
|
||||||
PROFILE_START("nk_input_end");
|
PROFILE_START("nk_input_end");
|
||||||
|
@ -344,6 +341,9 @@ void EventLoop(struct nk_context *ctx)
|
||||||
#ifdef MAC_APP_DEBUGGING
|
#ifdef MAC_APP_DEBUGGING
|
||||||
|
|
||||||
writeSerialPortDebug(boutRefNum, "nk_quickdraw_render");
|
writeSerialPortDebug(boutRefNum, "nk_quickdraw_render");
|
||||||
|
char x[255];
|
||||||
|
sprintf(x, "why? beganInput: %d, firstOrMouseMove: %d, forceRedraw: %d", beganInput, firstOrMouseMove, forceRedraw);
|
||||||
|
writeSerialPortDebug(boutRefNum, x);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
nk_quickdraw_render(FrontWindow(), ctx);
|
nk_quickdraw_render(FrontWindow(), ctx);
|
||||||
|
@ -377,11 +377,9 @@ void EventLoop(struct nk_context *ctx)
|
||||||
/* Do the right thing for an event. Determine what kind of event it is, and call
|
/* Do the right thing for an event. Determine what kind of event it is, and call
|
||||||
the appropriate routines. */
|
the appropriate routines. */
|
||||||
|
|
||||||
#pragma segment Main
|
|
||||||
void DoEvent(EventRecord *event, struct nk_context *ctx) {
|
void DoEvent(EventRecord *event, struct nk_context *ctx) {
|
||||||
|
|
||||||
short part;
|
short part;
|
||||||
short err;
|
|
||||||
WindowPtr window;
|
WindowPtr window;
|
||||||
Boolean hit;
|
Boolean hit;
|
||||||
char key;
|
char key;
|
||||||
|
@ -495,7 +493,6 @@ void DoEvent(EventRecord *event, struct nk_context *ctx) {
|
||||||
#endif
|
#endif
|
||||||
if ( HiWord(event->message) != noErr ) {
|
if ( HiWord(event->message) != noErr ) {
|
||||||
SetPt(&aPoint, kDILeft, kDITop);
|
SetPt(&aPoint, kDILeft, kDITop);
|
||||||
err = DIBadMount(aPoint, event->message);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -527,7 +524,6 @@ void DoEvent(EventRecord *event, struct nk_context *ctx) {
|
||||||
coordinates is to call GetMouse and LocalToGlobal, but that requires
|
coordinates is to call GetMouse and LocalToGlobal, but that requires
|
||||||
being sure that thePort is set to a valid port. */
|
being sure that thePort is set to a valid port. */
|
||||||
|
|
||||||
#pragma segment Main
|
|
||||||
void GetGlobalMouse(mouse)
|
void GetGlobalMouse(mouse)
|
||||||
Point *mouse;
|
Point *mouse;
|
||||||
{
|
{
|
||||||
|
@ -545,7 +541,6 @@ void GetGlobalMouse(mouse)
|
||||||
will handle situations where calculations for drawing or drawing
|
will handle situations where calculations for drawing or drawing
|
||||||
itself is very time-consuming. */
|
itself is very time-consuming. */
|
||||||
|
|
||||||
#pragma segment Main
|
|
||||||
void DoUpdate(window)
|
void DoUpdate(window)
|
||||||
WindowPtr window;
|
WindowPtr window;
|
||||||
{
|
{
|
||||||
|
@ -561,7 +556,6 @@ void DoUpdate(window)
|
||||||
deactivate events is sufficient. Other applications may have
|
deactivate events is sufficient. Other applications may have
|
||||||
TextEdit records, controls, lists, etc., to activate/deactivate. */
|
TextEdit records, controls, lists, etc., to activate/deactivate. */
|
||||||
|
|
||||||
#pragma segment Main
|
|
||||||
void DoActivate(window, becomingActive)
|
void DoActivate(window, becomingActive)
|
||||||
WindowPtr window;
|
WindowPtr window;
|
||||||
Boolean becomingActive;
|
Boolean becomingActive;
|
||||||
|
@ -579,8 +573,6 @@ void DoActivate(window, becomingActive)
|
||||||
machines, but color on color machines. At this point, the windowÕs visRgn
|
machines, but color on color machines. At this point, the windowÕs visRgn
|
||||||
is set to allow drawing only where it needs to be done. */
|
is set to allow drawing only where it needs to be done. */
|
||||||
|
|
||||||
static Rect okayButtonBounds;
|
|
||||||
|
|
||||||
/* Enable and disable menus based on the current state.
|
/* Enable and disable menus based on the current state.
|
||||||
The user can only select enabled menu items. We set up all the menu items
|
The user can only select enabled menu items. We set up all the menu items
|
||||||
before calling MenuSelect or MenuKey, since these are the only times that
|
before calling MenuSelect or MenuKey, since these are the only times that
|
||||||
|
@ -591,7 +583,6 @@ static Rect okayButtonBounds;
|
||||||
the application. Other application designs may take a different approach
|
the application. Other application designs may take a different approach
|
||||||
that is just as valid. */
|
that is just as valid. */
|
||||||
|
|
||||||
#pragma segment Main
|
|
||||||
void AdjustMenus()
|
void AdjustMenus()
|
||||||
{
|
{
|
||||||
WindowPtr window;
|
WindowPtr window;
|
||||||
|
@ -636,16 +627,15 @@ void AdjustMenus()
|
||||||
It is good to have both the result of MenuSelect and MenuKey go to
|
It is good to have both the result of MenuSelect and MenuKey go to
|
||||||
one routine like this to keep everything organized. */
|
one routine like this to keep everything organized. */
|
||||||
|
|
||||||
#pragma segment Main
|
|
||||||
void DoMenuCommand(menuResult)
|
void DoMenuCommand(menuResult)
|
||||||
long menuResult;
|
long menuResult;
|
||||||
{
|
{
|
||||||
short menuID; /* the resource ID of the selected menu */
|
short menuID; /* the resource ID of the selected menu */
|
||||||
short menuItem; /* the item number of the selected menu */
|
short menuItem; /* the item number of the selected menu */
|
||||||
short itemHit;
|
short itemHit;
|
||||||
Str255 daName;
|
// Str255 daName;
|
||||||
short daRefNum;
|
// short daRefNum;
|
||||||
Boolean handledByDA;
|
// Boolean handledByDA;
|
||||||
|
|
||||||
menuID = HiWord(menuResult); /* use macros for efficiency to... */
|
menuID = HiWord(menuResult); /* use macros for efficiency to... */
|
||||||
menuItem = LoWord(menuResult); /* get menu item number and menu number */
|
menuItem = LoWord(menuResult); /* get menu item number and menu number */
|
||||||
|
@ -677,7 +667,7 @@ void DoMenuCommand(menuResult)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case mEdit: /* call SystemEdit for DA editing & MultiFinder */
|
case mEdit: /* call SystemEdit for DA editing & MultiFinder */
|
||||||
handledByDA = SystemEdit(menuItem-1); /* since we donÕt do any Editing */
|
// handledByDA = SystemEdit(menuItem-1); /* since we donÕt do any Editing */
|
||||||
break;
|
break;
|
||||||
case mLight:
|
case mLight:
|
||||||
// note this was co-opted to send new chats instead of the demo functionality. do the
|
// note this was co-opted to send new chats instead of the demo functionality. do the
|
||||||
|
@ -691,9 +681,9 @@ void DoMenuCommand(menuResult)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
char x[255];
|
// char x[255];
|
||||||
sprintf(x, "MENU %d", menuItem);
|
// sprintf(x, "MENU %d", menuItem);
|
||||||
writeSerialPortDebug(boutRefNum, x);
|
// writeSerialPortDebug(boutRefNum, x);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case mHelp:
|
case mHelp:
|
||||||
|
@ -760,7 +750,6 @@ void DoMenuCommand(menuResult)
|
||||||
the user quits an application, but then cancels the save of a document
|
the user quits an application, but then cancels the save of a document
|
||||||
associated with a window. */
|
associated with a window. */
|
||||||
|
|
||||||
#pragma segment Main
|
|
||||||
Boolean DoCloseWindow(window)
|
Boolean DoCloseWindow(window)
|
||||||
WindowPtr window;
|
WindowPtr window;
|
||||||
{
|
{
|
||||||
|
@ -778,7 +767,6 @@ Boolean DoCloseWindow(window)
|
||||||
/* 1.01 - If we find out that a cancel has occurred, we won't exit to the
|
/* 1.01 - If we find out that a cancel has occurred, we won't exit to the
|
||||||
shell, but will return instead. */
|
shell, but will return instead. */
|
||||||
|
|
||||||
#pragma segment Main
|
|
||||||
void Terminate()
|
void Terminate()
|
||||||
{
|
{
|
||||||
WindowPtr aWindow;
|
WindowPtr aWindow;
|
||||||
|
@ -799,13 +787,10 @@ void Terminate()
|
||||||
ExitToShell(); /* exit if no cancellation */
|
ExitToShell(); /* exit if no cancellation */
|
||||||
} /*Terminate*/
|
} /*Terminate*/
|
||||||
|
|
||||||
|
|
||||||
#pragma segment Initialize
|
|
||||||
void Initialize()
|
void Initialize()
|
||||||
{
|
{
|
||||||
Handle menuBar;
|
Handle menuBar;
|
||||||
WindowPtr window;
|
WindowPtr window;
|
||||||
long total, contig;
|
|
||||||
EventRecord event;
|
EventRecord event;
|
||||||
short count;
|
short count;
|
||||||
|
|
||||||
|
@ -846,8 +831,6 @@ void Initialize()
|
||||||
|
|
||||||
} /*Initialize*/
|
} /*Initialize*/
|
||||||
|
|
||||||
|
|
||||||
#pragma segment Main
|
|
||||||
Boolean IsAppWindow(window)
|
Boolean IsAppWindow(window)
|
||||||
WindowPtr window;
|
WindowPtr window;
|
||||||
{
|
{
|
||||||
|
@ -865,7 +848,6 @@ Boolean IsAppWindow(window)
|
||||||
|
|
||||||
/* Check to see if a window belongs to a desk accessory. */
|
/* Check to see if a window belongs to a desk accessory. */
|
||||||
|
|
||||||
#pragma segment Main
|
|
||||||
Boolean IsDAWindow(window)
|
Boolean IsDAWindow(window)
|
||||||
WindowPtr window;
|
WindowPtr window;
|
||||||
{
|
{
|
||||||
|
@ -876,8 +858,6 @@ Boolean IsDAWindow(window)
|
||||||
return ((WindowPeek) window)->windowKind < 0;
|
return ((WindowPeek) window)->windowKind < 0;
|
||||||
} /*IsDAWindow*/
|
} /*IsDAWindow*/
|
||||||
|
|
||||||
|
|
||||||
#pragma segment Initialize
|
|
||||||
Boolean TrapAvailable(tNumber,tType)
|
Boolean TrapAvailable(tNumber,tType)
|
||||||
short tNumber;
|
short tNumber;
|
||||||
TrapType tType;
|
TrapType tType;
|
||||||
|
@ -894,8 +874,6 @@ Boolean TrapAvailable(tNumber,tType)
|
||||||
return NGetTrapAddress(tNumber, tType) != GetTrapAddress(_Unimplemented);
|
return NGetTrapAddress(tNumber, tType) != GetTrapAddress(_Unimplemented);
|
||||||
} /*TrapAvailable*/
|
} /*TrapAvailable*/
|
||||||
|
|
||||||
|
|
||||||
#pragma segment Main
|
|
||||||
void AlertUser() {
|
void AlertUser() {
|
||||||
short itemHit;
|
short itemHit;
|
||||||
|
|
||||||
|
|
14
mac_main.r
14
mac_main.r
|
@ -162,7 +162,7 @@ resource 'MENU' (mHelp, preload) {
|
||||||
|
|
||||||
/* this ALRT and DITL are used as an About screen */
|
/* this ALRT and DITL are used as an About screen */
|
||||||
resource 'ALRT' (rAboutAlert, purgeable) {
|
resource 'ALRT' (rAboutAlert, purgeable) {
|
||||||
{40, 20, 160, 412},
|
{40, 20, 194, 412},
|
||||||
rAboutAlert,
|
rAboutAlert,
|
||||||
{ /* array: 4 elements */
|
{ /* array: 4 elements */
|
||||||
/* [1] */
|
/* [1] */
|
||||||
|
@ -180,31 +180,31 @@ resource 'ALRT' (rAboutAlert, purgeable) {
|
||||||
resource 'DITL' (rAboutAlert, purgeable) {
|
resource 'DITL' (rAboutAlert, purgeable) {
|
||||||
{ /* array DITLarray: 5 elements */
|
{ /* array DITLarray: 5 elements */
|
||||||
/* [1] */
|
/* [1] */
|
||||||
{88, 380, 108, 260},
|
{119, 8, 138, 80},
|
||||||
Button {
|
Button {
|
||||||
enabled,
|
enabled,
|
||||||
"OK"
|
"OK"
|
||||||
},
|
},
|
||||||
/* [2] */
|
/* [2] */
|
||||||
{8, 8, 24, 214},
|
{8, 8, 24, 264},
|
||||||
StaticText {
|
StaticText {
|
||||||
disabled,
|
disabled,
|
||||||
"Messages for Macintosh"
|
"Messages for Macintosh"
|
||||||
},
|
},
|
||||||
/* [3] */
|
/* [3] */
|
||||||
{32, 8, 48, 237},
|
{32, 8, 48, 267},
|
||||||
StaticText {
|
StaticText {
|
||||||
disabled,
|
disabled,
|
||||||
"Copyright © 2021 Cameron Henlin"
|
"Copyright © 2021-22 Cameron Henlin"
|
||||||
},
|
},
|
||||||
/* [4] */
|
/* [4] */
|
||||||
{56, 8, 72, 136},
|
{56, 8, 72, 166},
|
||||||
StaticText {
|
StaticText {
|
||||||
disabled,
|
disabled,
|
||||||
"cam.henlin@gmail.com"
|
"cam.henlin@gmail.com"
|
||||||
},
|
},
|
||||||
/* [5] */
|
/* [5] */
|
||||||
{80, 24, 112, 167},
|
{80, 8, 112, 407},
|
||||||
StaticText {
|
StaticText {
|
||||||
disabled,
|
disabled,
|
||||||
"https://github.com/CamHenlin/MessagesForMacintosh"
|
"https://github.com/CamHenlin/MessagesForMacintosh"
|
||||||
|
|
257
nuklear_app.c
257
nuklear_app.c
|
@ -1,5 +1,7 @@
|
||||||
// TODO:
|
// TODO:
|
||||||
// - test, bug fixes, write blog posts
|
// - test, bug fixes, write blog posts
|
||||||
|
// - bug: messages start over-writing eachother in main chat -- need a way to force clear it
|
||||||
|
// - bug: delete key deletes infinitely
|
||||||
|
|
||||||
#define WINDOW_WIDTH 510
|
#define WINDOW_WIDTH 510
|
||||||
#define WINDOW_HEIGHT 302
|
#define WINDOW_HEIGHT 302
|
||||||
|
@ -17,10 +19,71 @@
|
||||||
|
|
||||||
// #define MESSAGES_FOR_MACINTOSH_DEBUGGING
|
// #define MESSAGES_FOR_MACINTOSH_DEBUGGING
|
||||||
|
|
||||||
|
// based on https://github.com/jwerle/strsplit.c -- cleaned up and modified to use strtokm rather than strtok
|
||||||
|
int strsplit (const char *str, char *parts[], const char *delimiter) {
|
||||||
|
|
||||||
|
char *pch;
|
||||||
|
int i = 0;
|
||||||
|
char *copy = NULL;
|
||||||
|
char *tmp = NULL;
|
||||||
|
|
||||||
|
copy = strdup(str);
|
||||||
|
|
||||||
|
if (! copy) {
|
||||||
|
|
||||||
|
goto bad;
|
||||||
|
}
|
||||||
|
|
||||||
|
pch = strtokm(copy, delimiter);
|
||||||
|
|
||||||
|
tmp = strdup(pch);
|
||||||
|
|
||||||
|
if (!tmp) {
|
||||||
|
|
||||||
|
goto bad;
|
||||||
|
}
|
||||||
|
|
||||||
|
parts[i++] = tmp;
|
||||||
|
|
||||||
|
while (pch) {
|
||||||
|
|
||||||
|
pch = strtokm(NULL, delimiter);
|
||||||
|
|
||||||
|
if (NULL == pch) {
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp = strdup(pch);
|
||||||
|
|
||||||
|
if (! tmp) {
|
||||||
|
|
||||||
|
goto bad;
|
||||||
|
}
|
||||||
|
|
||||||
|
parts[i++] = tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(copy);
|
||||||
|
|
||||||
|
return i;
|
||||||
|
|
||||||
|
bad:
|
||||||
|
|
||||||
|
free(copy);
|
||||||
|
|
||||||
|
for (int j = 0; j < i; j++) {
|
||||||
|
|
||||||
|
free(parts[j]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
void aFailed(char *file, int line) {
|
void aFailed(char *file, int line) {
|
||||||
|
|
||||||
MoveTo(10, 10);
|
MoveTo(10, 10);
|
||||||
char *textoutput;
|
char textoutput[255];
|
||||||
sprintf(textoutput, "%s:%d", file, line);
|
sprintf(textoutput, "%s:%d", file, line);
|
||||||
writeSerialPortDebug(boutRefNum, "assertion failure");
|
writeSerialPortDebug(boutRefNum, "assertion failure");
|
||||||
writeSerialPortDebug(boutRefNum, textoutput);
|
writeSerialPortDebug(boutRefNum, textoutput);
|
||||||
|
@ -28,16 +91,7 @@ void aFailed(char *file, int line) {
|
||||||
while (true) {}
|
while (true) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define NK_ASSERT(e) \
|
#define MAX_CHAT_MESSAGES 17
|
||||||
if (!(e)) \
|
|
||||||
aFailed(__FILE__, __LINE__)
|
|
||||||
|
|
||||||
#include <Types.h>
|
|
||||||
#include "nuklear.h"
|
|
||||||
#include "nuklear_quickdraw.h"
|
|
||||||
#include "coprocessorjs.h"
|
|
||||||
|
|
||||||
#define MAX_CHAT_MESSAGES 16
|
|
||||||
|
|
||||||
Boolean firstOrMouseMove = true;
|
Boolean firstOrMouseMove = true;
|
||||||
Boolean gotMouseEvent = false;
|
Boolean gotMouseEvent = false;
|
||||||
|
@ -46,10 +100,10 @@ char activeChatMessages[MAX_CHAT_MESSAGES][2048]; // this should match to MAX_RO
|
||||||
char box_input_buffer[2048];
|
char box_input_buffer[2048];
|
||||||
char chatFriendlyNames[16][64];
|
char chatFriendlyNames[16][64];
|
||||||
char ip_input_buffer[255];
|
char ip_input_buffer[255];
|
||||||
char jsFunctionResponse[102400]; // Matches MAX_RECEIVE_SIZE
|
char jsFunctionResponse[32767]; // Matches MAX_RECEIVE_SIZE
|
||||||
char chatCountFunctionResponse[102400]; // Matches MAX_RECEIVE_SIZE
|
char chatCountFunctionResponse[32767]; // Matches MAX_RECEIVE_SIZE
|
||||||
char tempChatCountFunctionResponse[102400]; // Matches MAX_RECEIVE_SIZE
|
char tempChatCountFunctionResponse[32767]; // Matches MAX_RECEIVE_SIZE
|
||||||
char previousChatCountFunctionResponse[102400]; // Matches MAX_RECEIVE_SIZE
|
char previousChatCountFunctionResponse[32767]; // Matches MAX_RECEIVE_SIZE
|
||||||
char new_message_input_buffer[255];
|
char new_message_input_buffer[255];
|
||||||
int activeMessageCounter = 0;
|
int activeMessageCounter = 0;
|
||||||
int chatFriendlyNamesCounter = 0;
|
int chatFriendlyNamesCounter = 0;
|
||||||
|
@ -69,6 +123,15 @@ struct nk_rect message_input_window_size;
|
||||||
struct nk_rect messages_window_size;
|
struct nk_rect messages_window_size;
|
||||||
struct nk_context *ctx;
|
struct nk_context *ctx;
|
||||||
|
|
||||||
|
#define NK_ASSERT(e) \
|
||||||
|
if (!(e)) \
|
||||||
|
aFailed(__FILE__, __LINE__)
|
||||||
|
|
||||||
|
#include <Types.h>
|
||||||
|
#include "nuklear.h"
|
||||||
|
#include "nuklear_quickdraw.h"
|
||||||
|
#include "coprocessorjs.h"
|
||||||
|
|
||||||
void refreshNuklearApp(Boolean blankInput);
|
void refreshNuklearApp(Boolean blankInput);
|
||||||
|
|
||||||
void getMessagesFromjsFunctionResponse() {
|
void getMessagesFromjsFunctionResponse() {
|
||||||
|
@ -85,7 +148,7 @@ void getMessagesFromjsFunctionResponse() {
|
||||||
// loop through the string to extract all other tokens
|
// loop through the string to extract all other tokens
|
||||||
while (token != NULL) {
|
while (token != NULL) {
|
||||||
|
|
||||||
sprintf(activeChatMessages[activeMessageCounter], "%s", token);
|
sprintf(activeChatMessages[activeMessageCounter], "%s", token);
|
||||||
token = (char *)strtokm(NULL, "ENDLASTMESSAGE");
|
token = (char *)strtokm(NULL, "ENDLASTMESSAGE");
|
||||||
activeMessageCounter++;
|
activeMessageCounter++;
|
||||||
}
|
}
|
||||||
|
@ -96,11 +159,12 @@ void getMessagesFromjsFunctionResponse() {
|
||||||
// function to send messages in chat
|
// function to send messages in chat
|
||||||
void sendMessage() {
|
void sendMessage() {
|
||||||
|
|
||||||
|
writeSerialPortDebug(boutRefNum, "sendMessage!");
|
||||||
|
|
||||||
char output[2048];
|
char output[2048];
|
||||||
sprintf(output, "%s&&&%.*s", activeChat, box_input_len, box_input_buffer);
|
sprintf(output, "%s&&&%.*s", activeChat, box_input_len, box_input_buffer);
|
||||||
|
|
||||||
memset(&box_input_buffer, '\0', 2048);
|
memset(&box_input_buffer, '\0', 2048);
|
||||||
sprintf(box_input_buffer, "");
|
|
||||||
box_input_len = 0;
|
box_input_len = 0;
|
||||||
refreshNuklearApp(1);
|
refreshNuklearApp(1);
|
||||||
|
|
||||||
|
@ -135,6 +199,8 @@ void getChats() {
|
||||||
|
|
||||||
void sendIPAddressToCoprocessor() {
|
void sendIPAddressToCoprocessor() {
|
||||||
|
|
||||||
|
writeSerialPortDebug(boutRefNum, "sendIPAddressToCoprocessor!");
|
||||||
|
|
||||||
char output[2048];
|
char output[2048];
|
||||||
sprintf(output, "%.*s", ip_input_buffer_len, ip_input_buffer);
|
sprintf(output, "%.*s", ip_input_buffer_len, ip_input_buffer);
|
||||||
|
|
||||||
|
@ -152,7 +218,9 @@ void sendIPAddressToCoprocessor() {
|
||||||
// figure out pagination?? button on the top that says "get previous chats"?
|
// figure out pagination?? button on the top that says "get previous chats"?
|
||||||
void getMessages(char *thread, int page) {
|
void getMessages(char *thread, int page) {
|
||||||
|
|
||||||
char output[62];
|
writeSerialPortDebug(boutRefNum, "getMessages!");
|
||||||
|
|
||||||
|
char output[68];
|
||||||
sprintf(output, "%s&&&%d", thread, page);
|
sprintf(output, "%s&&&%d", thread, page);
|
||||||
// writeSerialPortDebug(boutRefNum, output);
|
// writeSerialPortDebug(boutRefNum, output);
|
||||||
|
|
||||||
|
@ -172,11 +240,9 @@ Boolean prefix(const char *pre, const char *str) {
|
||||||
|
|
||||||
void getChatCounts() {
|
void getChatCounts() {
|
||||||
|
|
||||||
char output[62];
|
writeSerialPortDebug(boutRefNum, "getChatCounts!");
|
||||||
sprintf(output, "");
|
|
||||||
// writeSerialPortDebug(boutRefNum, output);
|
|
||||||
|
|
||||||
callFunctionOnCoprocessor("getChatCounts", output, chatCountFunctionResponse);
|
callFunctionOnCoprocessor("getChatCounts", "", chatCountFunctionResponse);
|
||||||
|
|
||||||
#ifdef MESSAGES_FOR_MACINTOSH_DEBUGGING
|
#ifdef MESSAGES_FOR_MACINTOSH_DEBUGGING
|
||||||
writeSerialPortDebug(boutRefNum, "getChatCounts");
|
writeSerialPortDebug(boutRefNum, "getChatCounts");
|
||||||
|
@ -191,27 +257,62 @@ void getChatCounts() {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SysBeep(1);
|
SysBeep(1);
|
||||||
char *saveptr;
|
|
||||||
strcpy(tempChatCountFunctionResponse, chatCountFunctionResponse);
|
strcpy(tempChatCountFunctionResponse, chatCountFunctionResponse);
|
||||||
char *token = strtok_r(tempChatCountFunctionResponse, ",", &saveptr);
|
int chatCount = 0;
|
||||||
|
char *(*chats[16])[64];
|
||||||
|
|
||||||
|
chatCount = strsplit(tempChatCountFunctionResponse, chats, ",");
|
||||||
|
|
||||||
|
for (int chatLoopCounter = 0; chatLoopCounter < chatCount; chatLoopCounter++) {
|
||||||
|
|
||||||
|
#ifdef MESSAGES_FOR_MACINTOSH_DEBUGGING
|
||||||
|
writeSerialPortDebug(boutRefNum, "DUMMY DELETE: update current chat count loop");
|
||||||
|
writeSerialPortDebug(boutRefNum, chats[chatLoopCounter]);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
// loop through the string to extract all other tokens
|
// loop through the string to extract all other tokens
|
||||||
while (token != NULL) {
|
for (int chatLoopCounter = 0; chatLoopCounter < chatCount; chatLoopCounter++) {
|
||||||
|
|
||||||
#ifdef MESSAGES_FOR_MACINTOSH_DEBUGGING
|
#ifdef MESSAGES_FOR_MACINTOSH_DEBUGGING
|
||||||
writeSerialPortDebug(boutRefNum, "update current chat count loop");
|
writeSerialPortDebug(boutRefNum, "update current chat count loop");
|
||||||
writeSerialPortDebug(boutRefNum, token);
|
writeSerialPortDebug(boutRefNum, chats[chatLoopCounter]);
|
||||||
#endif
|
#endif
|
||||||
// should be in format NAME:::COUNT
|
|
||||||
|
|
||||||
char *saveptr2;
|
// chats[chatLoopCounter] should be in format NAME:::COUNT
|
||||||
char *name = strtok_r(token, ":::", &saveptr2);
|
|
||||||
char *countString = strtok_r(NULL, ":::", &saveptr2);
|
strcpy(tempChatCountFunctionResponse, chatCountFunctionResponse);
|
||||||
short count = atoi(countString);
|
int results = 0;
|
||||||
|
char *(*chatUpdate[2])[64];
|
||||||
|
|
||||||
|
results = strsplit(chats[chatLoopCounter], chatUpdate, ":::");
|
||||||
|
|
||||||
|
if (results != 2) {
|
||||||
|
|
||||||
|
#ifdef MESSAGES_FOR_MACINTOSH_DEBUGGING
|
||||||
|
char x[255];
|
||||||
|
sprintf(x, "ERROR: chat update mismatch splitting on ':::', expected 2 results, got: %d: %s -- bailing out", results, chats[chatLoopCounter]);
|
||||||
|
writeSerialPortDebug(boutRefNum, x);
|
||||||
|
|
||||||
|
for (int errorResultCounter = 0; errorResultCounter < results; errorResultCounter++) {
|
||||||
|
|
||||||
|
writeSerialPortDebug(boutRefNum, chatUpdate[errorResultCounter]);
|
||||||
|
|
||||||
|
char y[255];
|
||||||
|
sprintf(y, "%d/%d: '%s'", errorResultCounter, results, chatUpdate[errorResultCounter]);
|
||||||
|
writeSerialPortDebug(boutRefNum, y);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
short count = atoi(chatUpdate[1]);
|
||||||
|
|
||||||
#ifdef MESSAGES_FOR_MACINTOSH_DEBUGGING
|
#ifdef MESSAGES_FOR_MACINTOSH_DEBUGGING
|
||||||
char x[255];
|
char x[255];
|
||||||
sprintf(x, "name: %s, countString: %s, count: %d", name, countString, count);
|
sprintf(x, "name: %s, countString: %s, count: %d", chatUpdate[0], chatUpdate[1], count);
|
||||||
writeSerialPortDebug(boutRefNum, x);
|
writeSerialPortDebug(boutRefNum, x);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -220,51 +321,64 @@ void getChatCounts() {
|
||||||
if (strstr(chatFriendlyNames[i], " new) ") != NULL) {
|
if (strstr(chatFriendlyNames[i], " new) ") != NULL) {
|
||||||
|
|
||||||
char chatName[64];
|
char chatName[64];
|
||||||
sprintf(chatName, "%s", chatFriendlyNames[i]);
|
sprintf(chatName, "%.63s", chatFriendlyNames[i]);
|
||||||
|
|
||||||
// we are throwing out the first token
|
int updateResults = 0;
|
||||||
strtok_r(chatName, " new) ", &saveptr2);
|
char *(*updatePieces[2])[64];
|
||||||
|
|
||||||
char *tempChatFriendlyName = strtok_r(NULL, " new) ", &saveptr2);
|
updateResults = strsplit(chatName, updatePieces, " new) ");
|
||||||
|
|
||||||
if (prefix(tempChatFriendlyName, name)) {
|
if (updateResults != 2) {
|
||||||
|
|
||||||
|
#ifdef MESSAGES_FOR_MACINTOSH_DEBUGGING
|
||||||
|
char x[255];
|
||||||
|
sprintf(x, "ERROR: individual chat update mismatch splitting on ' new) ', expected 2 results, got: %d: %s -- bailing out", updateResults, chatName);
|
||||||
|
writeSerialPortDebug(boutRefNum, x);
|
||||||
|
|
||||||
|
for (int errorResultCounter = 0; errorResultCounter < updateResults; errorResultCounter++) {
|
||||||
|
|
||||||
|
char y[255];
|
||||||
|
sprintf(y, "%d/%d: '%s'", errorResultCounter, updateResults, updatePieces[errorResultCounter]);
|
||||||
|
writeSerialPortDebug(boutRefNum, y);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (prefix(updatePieces[1], chatUpdate[0])) {
|
||||||
|
|
||||||
#ifdef MESSAGES_FOR_MACINTOSH_DEBUGGING
|
#ifdef MESSAGES_FOR_MACINTOSH_DEBUGGING
|
||||||
writeSerialPortDebug(boutRefNum, "match1");
|
writeSerialPortDebug(boutRefNum, "match1");
|
||||||
writeSerialPortDebug(boutRefNum, name);
|
writeSerialPortDebug(boutRefNum, chatUpdate[0]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (count == 0) {
|
if (count == 0 || !strcmp(activeChat, chatUpdate[0])) {
|
||||||
|
|
||||||
sprintf(chatFriendlyNames[i], "%s", name);
|
sprintf(chatFriendlyNames[i], "%s", chatUpdate[0]);
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
sprintf(chatFriendlyNames[i], "(%d new) %s", count, name);
|
sprintf(chatFriendlyNames[i], "(%d new) %s", count, chatUpdate[0]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else if (prefix(chatFriendlyNames[i], chatUpdate[0])) {
|
||||||
|
|
||||||
if (prefix(chatFriendlyNames[i], name)) {
|
#ifdef MESSAGES_FOR_MACINTOSH_DEBUGGING
|
||||||
|
writeSerialPortDebug(boutRefNum, "match2");
|
||||||
|
writeSerialPortDebug(boutRefNum, chatUpdate[0]);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef MESSAGES_FOR_MACINTOSH_DEBUGGING
|
if (count == 0 || !strcmp(activeChat, chatUpdate[0])) {
|
||||||
writeSerialPortDebug(boutRefNum, "match2");
|
|
||||||
writeSerialPortDebug(boutRefNum, name);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (count == 0) {
|
sprintf(chatFriendlyNames[i], "%s", chatUpdate[0]);
|
||||||
|
} else {
|
||||||
|
|
||||||
sprintf(chatFriendlyNames[i], "%s", name);
|
sprintf(chatFriendlyNames[i], "(%d new) %s", count, chatUpdate[0]);
|
||||||
} else {
|
|
||||||
|
|
||||||
sprintf(chatFriendlyNames[i], "(%d new) %s", count, name);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
token = strtok_r(NULL, ",", &saveptr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(previousChatCountFunctionResponse, chatCountFunctionResponse);
|
strcpy(previousChatCountFunctionResponse, chatCountFunctionResponse);
|
||||||
|
@ -279,7 +393,9 @@ void getChatCounts() {
|
||||||
|
|
||||||
void getHasNewMessagesInChat(char *thread) {
|
void getHasNewMessagesInChat(char *thread) {
|
||||||
|
|
||||||
char output[62];
|
writeSerialPortDebug(boutRefNum, "getHasNewMessagesInChat!");
|
||||||
|
|
||||||
|
char output[68];
|
||||||
sprintf(output, "%s", thread);
|
sprintf(output, "%s", thread);
|
||||||
// writeSerialPortDebug(boutRefNum, output);
|
// writeSerialPortDebug(boutRefNum, output);
|
||||||
|
|
||||||
|
@ -288,12 +404,15 @@ void getHasNewMessagesInChat(char *thread) {
|
||||||
|
|
||||||
if (!strcmp(jsFunctionResponse, "true")) {
|
if (!strcmp(jsFunctionResponse, "true")) {
|
||||||
|
|
||||||
// writeSerialPortDebug(boutRefNum, "update current chat");
|
writeSerialPortDebug(boutRefNum, "update current chat");
|
||||||
SysBeep(1);
|
SysBeep(1);
|
||||||
getMessages(thread, 0);
|
getMessages(thread, 0);
|
||||||
|
|
||||||
// force redraw
|
// force redraw
|
||||||
forceRedraw = 3;
|
forceRedraw = 3;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
writeSerialPortDebug(boutRefNum, "do not update current chat");
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -376,7 +495,7 @@ static void nuklearApp(struct nk_context *ctx) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// prompt the user for new chat
|
// prompt the user for new chat
|
||||||
if (sendNewChat) {
|
if (sendNewChat) {
|
||||||
|
|
||||||
if (nk_begin_titled(ctx, "Enter New Message Recipient", "Enter New Message Recipient", nk_rect(50, WINDOW_HEIGHT / 4, WINDOW_WIDTH - 100, 140), NK_WINDOW_TITLE|NK_WINDOW_BORDER)) {
|
if (nk_begin_titled(ctx, "Enter New Message Recipient", "Enter New Message Recipient", nk_rect(50, WINDOW_HEIGHT / 4, WINDOW_WIDTH - 100, 140), NK_WINDOW_TITLE|NK_WINDOW_BORDER)) {
|
||||||
|
@ -423,11 +542,6 @@ static void nuklearApp(struct nk_context *ctx) {
|
||||||
|
|
||||||
if ((chatWindowCollision || forceRedraw) && nk_begin(ctx, "Chats", chats_window_size, NK_WINDOW_BORDER|NK_WINDOW_NO_SCROLLBAR)) {
|
if ((chatWindowCollision || forceRedraw) && nk_begin(ctx, "Chats", chats_window_size, NK_WINDOW_BORDER|NK_WINDOW_NO_SCROLLBAR)) {
|
||||||
|
|
||||||
if (chatWindowCollision) {
|
|
||||||
|
|
||||||
forceRedraw = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
nk_layout_row_begin(ctx, NK_STATIC, 25, 1);
|
nk_layout_row_begin(ctx, NK_STATIC, 25, 1);
|
||||||
{
|
{
|
||||||
for (int i = 0; i < chatFriendlyNamesCounter; i++) {
|
for (int i = 0; i < chatFriendlyNamesCounter; i++) {
|
||||||
|
@ -445,7 +559,7 @@ static void nuklearApp(struct nk_context *ctx) {
|
||||||
if (strstr(chatFriendlyNames[i], " new) ") != NULL) {
|
if (strstr(chatFriendlyNames[i], " new) ") != NULL) {
|
||||||
|
|
||||||
char chatName[96];
|
char chatName[96];
|
||||||
sprintf(chatName, "%s", chatFriendlyNames[i]);
|
sprintf(chatName, "%.63s", chatFriendlyNames[i]);
|
||||||
|
|
||||||
#ifdef MESSAGES_FOR_MACINTOSH_DEBUGGING
|
#ifdef MESSAGES_FOR_MACINTOSH_DEBUGGING
|
||||||
writeSerialPortDebug(boutRefNum, "clicked1 chatName");
|
writeSerialPortDebug(boutRefNum, "clicked1 chatName");
|
||||||
|
@ -467,8 +581,8 @@ static void nuklearApp(struct nk_context *ctx) {
|
||||||
writeSerialPortDebug(boutRefNum, name);
|
writeSerialPortDebug(boutRefNum, name);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
sprintf(activeChat, "%s", name);
|
sprintf(activeChat, "%.63s", name);
|
||||||
sprintf(chatFriendlyNames[i], "%s", name);
|
sprintf(chatFriendlyNames[i], "%.63s", name);
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
#ifdef MESSAGES_FOR_MACINTOSH_DEBUGGING
|
#ifdef MESSAGES_FOR_MACINTOSH_DEBUGGING
|
||||||
|
@ -476,7 +590,7 @@ static void nuklearApp(struct nk_context *ctx) {
|
||||||
writeSerialPortDebug(boutRefNum, chatFriendlyNames[i]);
|
writeSerialPortDebug(boutRefNum, chatFriendlyNames[i]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
sprintf(activeChat, "%s", chatFriendlyNames[i]);
|
sprintf(activeChat, "%.63s", chatFriendlyNames[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
getMessages(activeChat, 0);
|
getMessages(activeChat, 0);
|
||||||
|
@ -517,6 +631,8 @@ static void nuklearApp(struct nk_context *ctx) {
|
||||||
|
|
||||||
nk_layout_row_push(ctx, 305);
|
nk_layout_row_push(ctx, 305);
|
||||||
|
|
||||||
|
// writeSerialPortDebug(boutRefNum, "activeChatMessages[i]");
|
||||||
|
// writeSerialPortDebug(boutRefNum, activeChatMessages[i]);
|
||||||
nk_label(ctx, activeChatMessages[i], NK_TEXT_ALIGN_LEFT);
|
nk_label(ctx, activeChatMessages[i], NK_TEXT_ALIGN_LEFT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -550,8 +666,8 @@ void refreshNuklearApp(Boolean blankInput) {
|
||||||
struct nk_context* initializeNuklearApp() {
|
struct nk_context* initializeNuklearApp() {
|
||||||
|
|
||||||
sprintf(activeChat, "no active chat");
|
sprintf(activeChat, "no active chat");
|
||||||
memset(&chatCountFunctionResponse, '\0', 102400);
|
memset(&chatCountFunctionResponse, '\0', 32767);
|
||||||
memset(&previousChatCountFunctionResponse, '\0', 102400);
|
memset(&previousChatCountFunctionResponse, '\0', 32767);
|
||||||
|
|
||||||
graphql_input_window_size = nk_rect(WINDOW_WIDTH / 2 - 118, 80, 234, 100);
|
graphql_input_window_size = nk_rect(WINDOW_WIDTH / 2 - 118, 80, 234, 100);
|
||||||
chats_window_size = nk_rect(0, 0, 180, WINDOW_HEIGHT);
|
chats_window_size = nk_rect(0, 0, 180, WINDOW_HEIGHT);
|
||||||
|
@ -562,6 +678,7 @@ struct nk_context* initializeNuklearApp() {
|
||||||
refreshNuklearApp(false);
|
refreshNuklearApp(false);
|
||||||
|
|
||||||
sprintf(ip_input_buffer, "http://"); // doesn't work due to bug, see variable definition
|
sprintf(ip_input_buffer, "http://"); // doesn't work due to bug, see variable definition
|
||||||
|
ip_input_buffer_len = 7;
|
||||||
|
|
||||||
return ctx;
|
return ctx;
|
||||||
}
|
}
|
|
@ -49,7 +49,7 @@ NK_API NkQuickDrawFont* nk_quickdraw_font_create_from_file();
|
||||||
*
|
*
|
||||||
* ===============================================================
|
* ===============================================================
|
||||||
*/
|
*/
|
||||||
#define MAX_MEMORY_IN_KB 4
|
#define MAX_MEMORY_IN_KB 6
|
||||||
#ifdef NK_QUICKDRAW_IMPLEMENTATION
|
#ifdef NK_QUICKDRAW_IMPLEMENTATION
|
||||||
#ifndef NK_QUICKDRAW_TEXT_MAX
|
#ifndef NK_QUICKDRAW_TEXT_MAX
|
||||||
#define NK_QUICKDRAW_TEXT_MAX 256
|
#define NK_QUICKDRAW_TEXT_MAX 256
|
||||||
|
@ -476,8 +476,6 @@ void updateBounds(int top, int bottom, int left, int right) {
|
||||||
void runDrawCommand(const struct nk_command *cmd) {
|
void runDrawCommand(const struct nk_command *cmd) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int color;
|
|
||||||
|
|
||||||
switch (cmd->type) {
|
switch (cmd->type) {
|
||||||
|
|
||||||
case NK_COMMAND_NOP:
|
case NK_COMMAND_NOP:
|
||||||
|
@ -541,7 +539,7 @@ void updateBounds(int top, int bottom, int left, int right) {
|
||||||
|
|
||||||
#ifdef COMMAND_CACHING
|
#ifdef COMMAND_CACHING
|
||||||
|
|
||||||
if (cmd->type == lastCmd->type && memcmp(r, lastCmd, sizeof(struct nk_command_rect)) == 0) {
|
if (!forceRedraw && cmd->type == lastCmd->type && memcmp(r, lastCmd, sizeof(struct nk_command_rect)) == 0) {
|
||||||
|
|
||||||
#ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING
|
#ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING
|
||||||
writeSerialPortDebug(boutRefNum, "ALREADY DREW CMD nk_command_rect");
|
writeSerialPortDebug(boutRefNum, "ALREADY DREW CMD nk_command_rect");
|
||||||
|
@ -594,7 +592,7 @@ void updateBounds(int top, int bottom, int left, int right) {
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef COMMAND_CACHING
|
#ifdef COMMAND_CACHING
|
||||||
if (cmd->type == lastCmd->type && memcmp(r, lastCmd, sizeof(struct nk_command_rect_filled)) == 0) {
|
if (!forceRedraw && cmd->type == lastCmd->type && memcmp(r, lastCmd, sizeof(struct nk_command_rect_filled)) == 0) {
|
||||||
|
|
||||||
#ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING
|
#ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING
|
||||||
writeSerialPortDebug(boutRefNum, "ALREADY DREW CMD nk_command_rect_filled");
|
writeSerialPortDebug(boutRefNum, "ALREADY DREW CMD nk_command_rect_filled");
|
||||||
|
@ -631,7 +629,7 @@ void updateBounds(int top, int bottom, int left, int right) {
|
||||||
const struct nk_command_text *t = (const struct nk_command_text*)cmd;
|
const struct nk_command_text *t = (const struct nk_command_text*)cmd;
|
||||||
|
|
||||||
#ifdef COMMAND_CACHING
|
#ifdef COMMAND_CACHING
|
||||||
if (t->allowCache && cmd->type == lastCmd->type && memcmp(t, lastCmd, sizeof(struct nk_command_text)) == 0) {
|
if (!forceRedraw && t->allowCache && cmd->type == lastCmd->type && memcmp(t, lastCmd, sizeof(struct nk_command_text)) == 0) {
|
||||||
|
|
||||||
#ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING
|
#ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING
|
||||||
char log[255];
|
char log[255];
|
||||||
|
@ -685,7 +683,7 @@ void updateBounds(int top, int bottom, int left, int right) {
|
||||||
|
|
||||||
#ifdef COMMAND_CACHING
|
#ifdef COMMAND_CACHING
|
||||||
|
|
||||||
if (cmd->type == lastCmd->type && memcmp(l, lastCmd, sizeof(struct nk_command_line)) == 0) {
|
if (!forceRedraw && cmd->type == lastCmd->type && memcmp(l, lastCmd, sizeof(struct nk_command_line)) == 0) {
|
||||||
|
|
||||||
#ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING
|
#ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING
|
||||||
writeSerialPortDebug(boutRefNum, "ALREADY DREW CMD nk_command_line");
|
writeSerialPortDebug(boutRefNum, "ALREADY DREW CMD nk_command_line");
|
||||||
|
@ -713,7 +711,7 @@ void updateBounds(int top, int bottom, int left, int right) {
|
||||||
const struct nk_command_circle *c = (const struct nk_command_circle *)cmd;
|
const struct nk_command_circle *c = (const struct nk_command_circle *)cmd;
|
||||||
|
|
||||||
#ifdef COMMAND_CACHING
|
#ifdef COMMAND_CACHING
|
||||||
if (cmd->type == lastCmd->type && memcmp(c, lastCmd, sizeof(struct nk_command_circle)) == 0) {
|
if (!forceRedraw && cmd->type == lastCmd->type && memcmp(c, lastCmd, sizeof(struct nk_command_circle)) == 0) {
|
||||||
|
|
||||||
#ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING
|
#ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING
|
||||||
writeSerialPortDebug(boutRefNum, "ALREADY DREW CMD nk_command_circle");
|
writeSerialPortDebug(boutRefNum, "ALREADY DREW CMD nk_command_circle");
|
||||||
|
@ -748,7 +746,7 @@ void updateBounds(int top, int bottom, int left, int right) {
|
||||||
const struct nk_command_circle_filled *c = (const struct nk_command_circle_filled *)cmd;
|
const struct nk_command_circle_filled *c = (const struct nk_command_circle_filled *)cmd;
|
||||||
|
|
||||||
#ifdef COMMAND_CACHING
|
#ifdef COMMAND_CACHING
|
||||||
if (cmd->type == lastCmd->type && memcmp(c, lastCmd, sizeof(struct nk_command_circle_filled)) == 0) {
|
if (!forceRedraw && cmd->type == lastCmd->type && memcmp(c, lastCmd, sizeof(struct nk_command_circle_filled)) == 0) {
|
||||||
|
|
||||||
#ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING
|
#ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING
|
||||||
writeSerialPortDebug(boutRefNum, "ALREADY DREW CMD nk_command_circle_filled");
|
writeSerialPortDebug(boutRefNum, "ALREADY DREW CMD nk_command_circle_filled");
|
||||||
|
@ -787,7 +785,7 @@ void updateBounds(int top, int bottom, int left, int right) {
|
||||||
const struct nk_command_triangle *t = (const struct nk_command_triangle*)cmd;
|
const struct nk_command_triangle *t = (const struct nk_command_triangle*)cmd;
|
||||||
|
|
||||||
#ifdef COMMAND_CACHING
|
#ifdef COMMAND_CACHING
|
||||||
if (cmd->type == lastCmd->type && memcmp(t, lastCmd, sizeof(struct nk_command_triangle)) == 0) {
|
if (!forceRedraw && cmd->type == lastCmd->type && memcmp(t, lastCmd, sizeof(struct nk_command_triangle)) == 0) {
|
||||||
|
|
||||||
#ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING
|
#ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING
|
||||||
writeSerialPortDebug(boutRefNum, "ALREADY DREW CMD nk_command_triangle");
|
writeSerialPortDebug(boutRefNum, "ALREADY DREW CMD nk_command_triangle");
|
||||||
|
@ -817,7 +815,7 @@ void updateBounds(int top, int bottom, int left, int right) {
|
||||||
const struct nk_command_triangle_filled *t = (const struct nk_command_triangle_filled *)cmd;
|
const struct nk_command_triangle_filled *t = (const struct nk_command_triangle_filled *)cmd;
|
||||||
|
|
||||||
#ifdef COMMAND_CACHING
|
#ifdef COMMAND_CACHING
|
||||||
if (cmd->type == lastCmd->type && memcmp(t, lastCmd, sizeof(struct nk_command_triangle_filled)) == 0) {
|
if (!forceRedraw && cmd->type == lastCmd->type && memcmp(t, lastCmd, sizeof(struct nk_command_triangle_filled)) == 0) {
|
||||||
|
|
||||||
#ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING
|
#ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING
|
||||||
writeSerialPortDebug(boutRefNum, "ALREADY DREW CMD nk_command_triangle_filled");
|
writeSerialPortDebug(boutRefNum, "ALREADY DREW CMD nk_command_triangle_filled");
|
||||||
|
@ -853,7 +851,7 @@ void updateBounds(int top, int bottom, int left, int right) {
|
||||||
const struct nk_command_polygon *p = (const struct nk_command_polygon*)cmd;
|
const struct nk_command_polygon *p = (const struct nk_command_polygon*)cmd;
|
||||||
|
|
||||||
#ifdef COMMAND_CACHING
|
#ifdef COMMAND_CACHING
|
||||||
if (cmd->type == lastCmd->type && memcmp(p, lastCmd, sizeof(struct nk_command_polygon)) == 0) {
|
if (!forceRedraw && cmd->type == lastCmd->type && memcmp(p, lastCmd, sizeof(struct nk_command_polygon)) == 0) {
|
||||||
|
|
||||||
#ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING
|
#ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING
|
||||||
writeSerialPortDebug(boutRefNum, "ALREADY DREW CMD nk_command_polygon");
|
writeSerialPortDebug(boutRefNum, "ALREADY DREW CMD nk_command_polygon");
|
||||||
|
@ -893,7 +891,7 @@ void updateBounds(int top, int bottom, int left, int right) {
|
||||||
const struct nk_command_polygon_filled *p = (const struct nk_command_polygon_filled*)cmd;
|
const struct nk_command_polygon_filled *p = (const struct nk_command_polygon_filled*)cmd;
|
||||||
|
|
||||||
#ifdef COMMAND_CACHING
|
#ifdef COMMAND_CACHING
|
||||||
if (cmd->type == lastCmd->type && memcmp(p, lastCmd, sizeof(struct nk_command_polygon_filled)) == 0) {
|
if (!forceRedraw && cmd->type == lastCmd->type && memcmp(p, lastCmd, sizeof(struct nk_command_polygon_filled)) == 0) {
|
||||||
|
|
||||||
#ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING
|
#ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING
|
||||||
writeSerialPortDebug(boutRefNum, "ALREADY DREW CMD nk_command_polygon_filled");
|
writeSerialPortDebug(boutRefNum, "ALREADY DREW CMD nk_command_polygon_filled");
|
||||||
|
@ -942,7 +940,7 @@ void updateBounds(int top, int bottom, int left, int right) {
|
||||||
const struct nk_command_polygon *p = (const struct nk_command_polygon*)cmd;
|
const struct nk_command_polygon *p = (const struct nk_command_polygon*)cmd;
|
||||||
|
|
||||||
#ifdef COMMAND_CACHING
|
#ifdef COMMAND_CACHING
|
||||||
if (cmd->type == lastCmd->type && memcmp(p, lastCmd, sizeof(struct nk_command_polygon)) == 0) {
|
if (!forceRedraw && cmd->type == lastCmd->type && memcmp(p, lastCmd, sizeof(struct nk_command_polygon)) == 0) {
|
||||||
|
|
||||||
#ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING
|
#ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING
|
||||||
writeSerialPortDebug(boutRefNum, "ALREADY DREW CMD nk_command_polygon");
|
writeSerialPortDebug(boutRefNum, "ALREADY DREW CMD nk_command_polygon");
|
||||||
|
@ -1016,7 +1014,7 @@ void updateBounds(int top, int bottom, int left, int right) {
|
||||||
writeSerialPortDebug(boutRefNum, "NK_COMMAND_IMAGE");
|
writeSerialPortDebug(boutRefNum, "NK_COMMAND_IMAGE");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const struct nk_command_image *i = (const struct nk_command_image *)cmd;
|
// const struct nk_command_image *i = (const struct nk_command_image *)cmd;
|
||||||
// al_draw_bitmap_region(i->img.handle.ptr, 0, 0, i->w, i->h, i->x, i->y, 0); // TODO: look up and convert al_draw_bitmap_region
|
// al_draw_bitmap_region(i->img.handle.ptr, 0, 0, i->w, i->h, i->x, i->y, 0); // TODO: look up and convert al_draw_bitmap_region
|
||||||
// TODO: consider implementing a bitmap drawing routine. we could iterate pixel by pixel and draw
|
// TODO: consider implementing a bitmap drawing routine. we could iterate pixel by pixel and draw
|
||||||
// here is some super naive code that could work, used for another project that i was working on with a custom format but would be
|
// here is some super naive code that could work, used for another project that i was working on with a custom format but would be
|
||||||
|
@ -1082,7 +1080,7 @@ NK_API void nk_quickdraw_render(WindowPtr window, struct nk_context *ctx) {
|
||||||
|
|
||||||
#ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING
|
#ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING
|
||||||
|
|
||||||
writeSerialPortDebug(boutRefNum, "NK_COMMAND_NOP");
|
writeSerialPortDebug(boutRefNum, "NO RENDER BUFFER CHANGE, ABORT");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -1106,7 +1104,6 @@ NK_API void nk_quickdraw_render(WindowPtr window, struct nk_context *ctx) {
|
||||||
|
|
||||||
#ifdef COMMAND_CACHING
|
#ifdef COMMAND_CACHING
|
||||||
const struct nk_command *lastCmd;
|
const struct nk_command *lastCmd;
|
||||||
nk_byte *buffer;
|
|
||||||
lastCmd = nk_ptr_add_const(struct nk_command, last, 0);
|
lastCmd = nk_ptr_add_const(struct nk_command, last, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1325,9 +1322,10 @@ NK_API int nk_quickdraw_handle_event(EventRecord *event, struct nk_context *nukl
|
||||||
} else if (key == eitherShiftKey) {
|
} else if (key == eitherShiftKey) {
|
||||||
|
|
||||||
nk_input_key(nuklear_context, NK_KEY_SHIFT, isKeyDown);
|
nk_input_key(nuklear_context, NK_KEY_SHIFT, isKeyDown);
|
||||||
} else if (key == deleteKey) {
|
} else if (key == deleteKey && isKeyDown) {
|
||||||
|
|
||||||
nk_input_key(nuklear_context, NK_KEY_DEL, isKeyDown);
|
nk_input_key(nuklear_context, NK_KEY_DEL, 1);
|
||||||
|
nk_input_key(nuklear_context, NK_KEY_DEL, 0);
|
||||||
} else if (key == enterKey) {
|
} else if (key == enterKey) {
|
||||||
|
|
||||||
nk_input_key(nuklear_context, NK_KEY_ENTER, isKeyDown);
|
nk_input_key(nuklear_context, NK_KEY_ENTER, isKeyDown);
|
||||||
|
@ -1398,6 +1396,8 @@ NK_API int nk_quickdraw_handle_event(EventRecord *event, struct nk_context *nukl
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// i think these functions are close to correct, but throw an error around invalid storage class
|
// i think these functions are close to correct, but throw an error around invalid storage class
|
||||||
|
|
Loading…
Reference in New Issue
Block a user