From 2d9ae443457731e6da51e63042feeea7d92a27f3 Mon Sep 17 00:00:00 2001 From: Gerasim Troeglazov <3dEyes@gmail.com> Date: Tue, 28 Jun 2022 22:03:31 +1000 Subject: Add binary launcher diff --git a/haiku/MainApp.cpp b/haiku/MainApp.cpp new file mode 100644 index 0000000..4518f05 --- /dev/null +++ b/haiku/MainApp.cpp @@ -0,0 +1,197 @@ +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "MainApp.h" +#define APPSIGNATURE "application/x-vnd.ArduinoIDE" +#define TARGET "arduino.sh" + +SimpleLauncherApp::SimpleLauncherApp(int argc, char **argv) : BApplication(APPSIGNATURE) +{ +// InstallMimeType(APPSIGNATURE, "text/x-processing", "Proecssing source code", "pde"); +} + +SimpleLauncherApp::~SimpleLauncherApp() +{ + +} + + +BPath +SimpleLauncherApp::MyPath(const char *dir) +{ + app_info inf; + be_app->GetAppInfo(&inf); + BPath bpath = BPath(&(inf.ref)); + BPath par; + bpath.GetParent(&par); + par.Append(dir); + return(par); +} + +void +SimpleLauncherApp::RefsReceived(BMessage *pmsg) +{ + if (pmsg->HasMessenger("TrackerViewToken")) { + pmsg->FindMessenger("TrackerViewToken", &fTrackerMessenger); + } + + uint32 type; + int32 count; + status_t ret = pmsg->GetInfo("refs", &type, &count); + if (ret != B_OK || type != B_REF_TYPE) + return; + + entry_ref ref; + for (int32 i = 0; i < count; i++) { + if (pmsg->FindRef("refs", i, &ref) == B_OK) + { + BPath file=BPath(&ref); + char temp[1024]; + sprintf(temp,"%s//%s \"%s\" &",MyPath("").Path(), TARGET, file.Path()); + system(temp); + Quit(); + } + } +} + + +void +SimpleLauncherApp::ArgvReceived(int32 argc, char **argv) +{ + BMessage *pmsg = NULL; + for (int32 i = 1; i < argc; i++) { + entry_ref ref; + status_t err = get_ref_for_path(argv[i], &ref); + if (err == B_OK) { + if (!pmsg) { + pmsg = new BMessage; + pmsg->what = B_REFS_RECEIVED; + } + pmsg->AddRef("refs", &ref); + } + } + if (pmsg) { + RefsReceived(pmsg); + delete pmsg; + } +} + +void +SimpleLauncherApp::ReadyToRun() +{ + char temp[1024]; + sprintf(temp,"%s//%s &",MyPath("").Path(), TARGET); + system(temp); + Quit(); +} + +void +SimpleLauncherApp::InstallMimeType(const char *app, const char *mimetxt, const char *text, const char *ext) +{ + // install mime type of documents + BMimeType mime(mimetxt); + status_t ret = mime.InitCheck(); + if (ret != B_OK) { + fprintf(stderr, "Could not init native document mime type (%s): %s.\n", + mimetxt, strerror(ret)); + return; + } + + ret = mime.Install(); + if (ret != B_OK && ret != B_FILE_EXISTS) { + fprintf(stderr, "Could not install native document mime type (%s): %s.\n", + mimetxt, strerror(ret)); + return; + } + // set preferred app + ret = mime.SetPreferredApp(app); + if (ret != B_OK) { + fprintf(stderr, "Could not set native document preferred app: %s\n", + strerror(ret)); + } + + // set descriptions + ret = mime.SetShortDescription(text); + if (ret != B_OK) { + fprintf(stderr, "Could not set short description of mime type: %s\n", + strerror(ret)); + } + ret = mime.SetLongDescription(text); + if (ret != B_OK) { + fprintf(stderr, "Could not set long description of mime type: %s\n", + strerror(ret)); + } + + // set extensions + BMessage message; + + char extn[128]; + char *extptr = extn, *ptr; + + for( ptr = (char*)ext; *ptr!=0; ptr++){ + *extptr=*ptr; + if(*(ptr+1)==' ' || *(ptr+1)==0) { + *(extptr+1)=0; + message.AddString("extensions", extn); + extptr = extn; + if(*(ptr+1)==' ') + ptr++; + continue; + } + extptr++; + } + ret = mime.SetFileExtensions(&message); + if (ret != B_OK) { + fprintf(stderr, "Could not set extensions of mime type: %s\n", + strerror(ret)); + } + +/* // set sniffer rule + char snifferRule[32]; + ret = mime.SetSnifferRule("0.50 (\"MZ\")"); + if (ret != B_OK) { + BString parseError; + BMimeType::CheckSnifferRule(snifferRule, &parseError); + fprintf(stderr, "Could not set sniffer rule of mime type: %s\n", + parseError.String()); + }*/ + + // set mime icon + BResources* resources = be_app->AppResources(); + // does not need to be freed (belongs to BApplication base) + if (resources != NULL) { + size_t size; + BString iconame("BEOS:"); + iconame.Append(mimetxt); + const void* iconData = resources->LoadResource('VICN', iconame.String(), &size); + if (iconData != NULL && size > 0) { + if (mime.SetIcon(reinterpret_cast(iconData), size) + != B_OK) { + fprintf(stderr, "Could not set vector icon of mime type.\n"); + } + } else { + fprintf(stderr, "Could not find icon in app resources " + "(data: %p, size: %ld).\n", iconData, size); + } + } else + fprintf(stderr, "Could not find app resources.\n"); +} + + +int main(int argc, char **argv) +{ + SimpleLauncherApp application(argc,argv); + application.Run(); + return 0; +} + + diff --git a/haiku/MainApp.h b/haiku/MainApp.h new file mode 100644 index 0000000..7ec4cb9 --- /dev/null +++ b/haiku/MainApp.h @@ -0,0 +1,24 @@ +#ifndef SIMPLE_LAUNCHER_H +#define SIMPLE_LAUNCHER_H + +#include +#include +#include +#include +#include +#include + +class SimpleLauncherApp : public BApplication { + public: + SimpleLauncherApp(int argc, char **argv); + ~SimpleLauncherApp(); + void RefsReceived(BMessage *pmsg); + void ArgvReceived(int32 argc, char **argv); + virtual void ReadyToRun(); + void InstallMimeType(const char *app, const char *mimetxt, const char *text, const char *ext); + BPath MyPath(const char *dir); + BMessenger fTrackerMessenger; +}; + + +#endif diff --git a/haiku/Makefile b/haiku/Makefile new file mode 100644 index 0000000..4371da4 --- /dev/null +++ b/haiku/Makefile @@ -0,0 +1,17 @@ +CFLAGS= +LIBS=-lroot -lbe +CC=g++ +OBJS = MainApp.o + +all: Arduino + +Arduino: $(OBJS) + $(CC) -o "Arduino IDE" $^ $(LIBS) + rc resource.rdef + xres -o "Arduino IDE" resource.rsrc + +.cpp.o: + $(CC) $(CFLAGS) -c $^ + +clean: + rm -f "Arduino IDE" $(OBJS) diff --git a/haiku/resource.rdef b/haiku/resource.rdef new file mode 100644 index 0000000..f174d8b --- /dev/null +++ b/haiku/resource.rdef @@ -0,0 +1,152 @@ +resource app_flags B_MULTIPLE_LAUNCH; +resource app_version { + major = 1, + middle = 7, + minor = 11, + + variety = B_APPV_DEVELOPMENT, + internal = 0, + + short_info = "Arduino IDE", + long_info = "Arduino IDE" +}; + +resource(1, "BEOS:APP_SIG") (#'MIMS') "application/x-vnd.ArduinoIDE"; + +resource(1, "BEOS:FILE_TYPES") message { + "types" = "text/x-arduino", + "types" = "text/x-source-code" +}; + +resource(3, "BEOS:text/x-processing") #'VICN' array { + $"6E6369660705010200060338D2F73CD163BF82B23B84A94B88504870C901BFDE" + $"F4BDFFFFFFFFE7EEFB020106023E49240000000000003CAAAA4940004A30007C" + $"7588ADFFCEE5FF040192020006023A55A7BAC22B3F0DA23E958646C2EB4870EB" + $"00010101FF5296CB0100969CEE03FDFEFE150606AE0BB40BBF4D33C3AEB75CC1" + $"72BDEFC606C13EC804CA27BD82C117B920C51BBB40BF06B8073AB6BC0605AE02" + $"B57D3EB9B9C3EFB7BB44BBB751BD75C936CA8DC1B0402F0A093B593D5BBFCDC9" + $"3D455BC516C5F060465B435D4544510A045A425E3F5A3D574008022E45373C08" + $"02364441390802364B463B08023A4E4A3E08032D422E4430450803373839393A" + $"3B0009BEC0B3EABEC0B3EAC1D2B3A5C74DB6B5C4FBB4ACC9B9B8C2CB53BF05CB" + $"36BBD9CB7CC1E6C89BC704CA77C4D0C6C0C93BC12CCB11C40CCABABD99CB92B7" + $"5CC7A4B9DBCA3BB4F7C537B41EBE4FB3C1C1B2B46DBB2AB89EB648B61BB831BA" + $"5FB4EABEC0B3EABC89B418BEC0B3EA0208BB38BB6BBD16BB54B94FBB75B73BBE" + $"D5B789BCF0B6D0C0E3BA45C388B840C30BBC6C4BBFB9C10DBE99C2D9C0B347C4" + $"33C3A7C257C3C650C3AEC837C044C7E9C228C896BE65C5A7BBBAC772BC61C36E" + $"BAC9BFB9BE0CC0E9BC19BEBFBC8B0005BB13BCEABB13BCEABCCDBCB6BEE8BF89" + $"BE2CBE21BE33C117BAB5C21CBC89C297B918C1CFB8E9BE61B817BFD3B954BD93" + $"BB13BCEABA2ABCFEBB13BCEA0204BA36BF21BB0DBF20BA31BF69BA35BFF8BA34" + $"BFB0BB11BFFBBCCABFF8BBEEBFF9BCBFBFB5BCBBBF22BCE4BF5BBBE4BF1E0005" + $"C3D3BCEAC3D3BCEAC585BCACC6C6C010C72DBE5DC67CC18EC35AC21CC4CCC288" + $"C210C1CDC08ABF90C126C0ADC12ABE49C3D3BCEAC250BD06C3D3BCEA020CC382" + $"BE49C3C9BE47C37EBE90C37FBF1FC382BED8C338BF23C2A9BF2148BF1FC2A4BF" + $"69C2A9BFF7C2A7BFB048BFFBC37FBFFAC337BFF7C38DC043C390C0DDC369C09D" + $"C3D2C0E0C457C0DDC415C0E0C45CC092C459BFFAC456C046C4A1BFF6C530BFF8" + $"C4E8BFFAC534BFB0C530BF22C532BF69C4E9BF1EC45ABF1FC4A1BF22C456BED8" + $"C458BE49C45ABE91C410BE450009BB38BB6BBB38BB6BBD16BB54BFB9BE0CBEBF" + $"BC8BC0E9BC19C5A7BBBAC36EBAC9C772BC61C837C044C896BE65C7E9C228C433" + $"C3A750C3AEC257C3C6BFB9C10DC0B347BE99C2D9BA45C388BC6C4BB840C30BB7" + $"3BBED5B6D0C0E3B789BCF0BB38BB6BB94FBB75BB38BB6B0005BB13BCEABB13BC" + $"EABA2ABCFEB8E9BE61B954BD93B817BFD3BAB5C21CB918C1CFBC89C297BEE8BF" + $"89BE33C117BE2CBE21BB13BCEABCCDBCB6BB13BCEA0204C3D3BCEAC585BCACC2" + $"50BD06C08ABF90C12ABE49C126C0ADC35AC21CC210C1CDC4CCC288C6C6C010C6" + $"7CC18EC72DBE5D020CC382BE49C37EBE90C3C9BE47C458BE49C410BE45C45ABE" + $"91C45ABF1FC456BED8C4A1BF22C530BF22C4E9BF1EC532BF69C530BFF8C534BF" + $"B0C4E8BFFAC459BFFAC4A1BFF6C456C046C457C0DDC45CC092C415C0E0C390C0" + $"DDC3D2C0E0C369C09DC37FBFFAC38DC043C337BFF7C2A9BFF748BFFBC2A7BFB0" + $"C2A9BF21C2A4BF6948BF1FC37FBF1FC338BF23C382BED80204BA36BF21BA31BF" + $"69BB0DBF20BCBBBF22BBE4BF1EBCE4BF5BBCCABFF8BCBFBFB5BBEEBFF9BA35BF" + $"F8BB11BFFBBA34BFB0120A03020203000A0001011001178400040A020101000A" + $"0001001001178400040A010100000A040304060738201B16FF01178100040A04" + $"02060438201B001601178200040A04010538201B16FF01178100040A00010838" + $"2B1116FF01178100040A00010938231916FF01178100040A00010838251E16FF" + $"01178100040A00010938283116FF01178100040A05020A0B023ED68500000000" + $"00003EE7FBC07E244872CD0A05020C0D023ED6850000000000003EE7FBC07E24" + $"4872CD0A05020E0F023ED6850000000000003EE7FBC07E244872CD0A06031011" + $"12023ED6850000000000003EE7FBC07E244872CD0A060113023ED68500000000" + $"00003EE7FBC07E244872CD0A060114023ED6850000000000003EE7FBC07E2448" + $"72CD" +}; + +resource(4, "BEOS:text/x-arduino") #'VICN' array { + $"6E636966070200060338D2F73CD163BF82B23B84A94B88504870C900FFEFA5BD" + $"FFFCC0FFFFF8900501020106023E49240000000000003CAAAA4940004A30007C" + $"F1B706FFFFFCC0040192020016023A55A6BAC2293F0DA33E958646C2EB47A1D6" + $"0001FF9E0301969C03FDFEFE160606AE0BB40BBF4D33C3AEB75CC172BDEFC606" + $"C13EC804CA27BD82C117B920C51BBB40BF06B8073AB6BC0605AE02B57D3EB9B9" + $"C3EFB7BB44BBB751BD75C936CA8DC1B0402F0A093B593D5BBFCDC93D455BC516" + $"C5F060465B435D4544510A045A425E3F5A3D574008022E40BDB53308023142BE" + $"34BC0308023444C0E4BB5108023746C0D8BD7508023A48C270BDB508023D4A4C" + $"BD820802404CC408BFE50009BEC0B3EABEC0B3EAC1D2B3A4C74DB6B5C4FBB4AB" + $"C9B8B8C1CB52BF04CB35BBD9CB7CC1E6C89BC704CA77C4D0C6BFC93AC12BCB11" + $"C40BCAB9BD99CB92B75BC7A3B9DBCA3AB4F7C537B41DBE4EB3C0C1B2B46CBB2A" + $"B89EB648B61AB830BA5FB4EABEC0B3EABC88B418BEC0B3EA0208BB37BB6ABD16" + $"BB53B94EBB75B73BBED5B788BCF0B6CFC0E2BA45C388B840C30ABC6B4BBFB8C1" + $"0CBE99C2D8C0B347C433C3A6C257C3C550C3ADC837C043C7E9C227C896BE65C5" + $"A6BBB9C771BC60C36EBAC8BFB8BE0CC0E9BC19BEBFBC8B0005BB12BCE9BB12BC" + $"E9BCCDBCB6BEE7BF89BE2BBE20BE33C116BAB5C21CBC88C297B918C1CFB8E8BE" + $"60B816BFD3B953BD92BB12BCE9BA2ABCFEBB12BCE90204BA36BF21BB0DBF1FBA" + $"30BF68BA35BFF7BA34BFB0BB11BFFABCCABFF7BBEDBFF8BCBFBFB4BCBABF22BC" + $"E43FBBE4BF1D0005C3D3BCE9C3D3BCE9C585BCABC6C6C00FC72DBE5CC67CC18D" + $"C359C21CC4CCC288C20FC1CDC08ABF8FC125C0ACC129BE49C3D3BCE9C250BD05" + $"C3D3BCE9020CC382BE49C3C9BE46C37EBE8FC37FBF1EC382BED8C338BF23C2A8" + $"BF2148BF1EC2A3BF68C2A8BFF6C2A6BFB048BFFAC37FBFF9C337BFF6C38CC042" + $"C38FC0DCC369C09DC3D2C0DFC456C0DCC414C0DFC45BC091C458BFF9C455C045" + $"C4A1BFF5C530BFF7C4E8BFF9C534BFB0C530BF22C532BF68C4E9BF1DC459BF1E" + $"C4A1BF22C455BED8C457BE49C459BE90C40FBE440009BB37BB6ABB37BB6ABD16" + $"BB53BFB8BE0CBEBFBC8BC0E9BC19C5A6BBB9C36EBAC8C771BC60C837C043C896" + $"BE65C7E9C227C433C3A650C3ADC257C3C5BFB8C10CC0B347BE99C2D8BA45C388" + $"BC6B4BB840C30AB73BBED5B6CFC0E2B788BCF0BB37BB6AB94EBB75BB37BB6A00" + $"05BB12BCE9BB12BCE9BA2ABCFEB8E8BE60B953BD92B816BFD3BAB5C21CB918C1" + $"CFBC88C297BEE7BF89BE33C116BE2BBE20BB12BCE9BCCDBCB6BB12BCE90204C3" + $"D3BCE9C585BCABC250BD05C08ABF8FC129BE49C125C0ACC359C21CC20FC1CDC4" + $"CCC288C6C6C00FC67CC18DC72DBE5C020CC382BE49C37EBE8FC3C9BE46C457BE" + $"49C40FBE44C459BE90C459BF1EC455BED8C4A1BF22C530BF22C4E9BF1DC532BF" + $"68C530BFF7C534BFB0C4E8BFF9C458BFF9C4A1BFF5C455C045C456C0DCC45BC0" + $"91C414C0DFC38FC0DCC3D2C0DFC369C09DC37FBFF9C38CC042C337BFF6C2A8BF" + $"F648BFFAC2A6BFB0C2A8BF21C2A3BF6848BF1EC37FBF1EC338BF23C382BED802" + $"04BA36BF21BA30BF68BB0DBF1FBCBABF22BBE4BF1DBCE43FBCCABFF7BCBFBFB4" + $"BBEDBFF8BA35BFF7BB11BFFABA34BFB00E0A03020203000A0101011001178400" + $"040A020101000A0101001001178400040A000100000A04040604080A1815FF01" + $"178100040A04040604080A18001501178200040A04030907051815FF01178100" + $"040A05020B0C023E7F0C0000000000003EA1F9491F1A48D76E0A05020D0E023E" + $"7F0C0000000000003EA1F9491F1A48D76E0A05020F10023E7F0C000000000000" + $"3EA1F9491F1A48D76E0A0603111213023E7F0C0000000000003EA1F9491F1A48" + $"D76E0A060114023E7F0C0000000000003EA1F9491F1A48D76E0A060115023E7F" + $"0C0000000000003EA1F9491F1A48D76E" +}; + +resource vector_icon array { + $"6E636966020301969C03FDFEFE0B0009BEC0B3EABEC0B3EAC1D2B3A5C74DB6B5" + $"C4FBB4ACC9B9B8C2CB53BF05CB36BBD9CB7CC1E6C89BC704CA77C4D0C6C0C93B" + $"C12CCB11C40CCABABD99CB92B75CC7A4B9DBCA3BB4F7C537B41EBE4FB3C1C1B2" + $"B46DBB2AB89EB648B61BB831BA5FB4EABEC0B3EABC89B418BEC0B3EA0208BB38" + $"BB6BBD16BB54B94FBB75B73BBED5B789BCF0B6D0C0E3BA45C388B840C30BBC6C" + $"4BBFB9C10DBE99C2D9C0B347C433C3A7C257C3C650C3AEC837C044C7E9C228C8" + $"96BE65C5A7BBBAC772BC61C36EBAC9BFB9BE0CC0E9BC19BEBFBC8B0005BB13BC" + $"EABB13BCEABCCDBCB6BEE8BF89BE2CBE21BE33C117BAB5C21CBC89C297B918C1" + $"CFB8E9BE61B817BFD3B954BD93BB13BCEABA2ABCFEBB13BCEA0204BA36BF21BB" + $"0DBF20BA31BF69BA35BFF8BA34BFB0BB11BFFBBCCABFF8BBEEBFF9BCBFBFB5BC" + $"BBBF22BCE4BF5BBBE4BF1E0005C3D3BCEAC3D3BCEAC585BCACC6C6C010C72DBE" + $"5DC67CC18EC35AC21CC4CCC288C210C1CDC08ABF90C126C0ADC12ABE49C3D3BC" + $"EAC250BD06C3D3BCEA020CC382BE49C3C9BE47C37EBE90C37FBF1FC382BED8C3" + $"38BF23C2A9BF2148BF1FC2A4BF69C2A9BFF7C2A7BFB048BFFBC37FBFFAC337BF" + $"F7C38DC043C390C0DDC369C09DC3D2C0E0C457C0DDC415C0E0C45CC092C459BF" + $"FAC456C046C4A1BFF6C530BFF8C4E8BFFAC534BFB0C530BF22C532BF69C4E9BF" + $"1EC45ABF1FC4A1BF22C456BED8C458BE49C45ABE91C410BE450009BB38BB6BBB" + $"38BB6BBD16BB54BFB9BE0CBEBFBC8BC0E9BC19C5A7BBBAC36EBAC9C772BC61C8" + $"37C044C896BE65C7E9C228C433C3A750C3AEC257C3C6BFB9C10DC0B347BE99C2" + $"D9BA45C388BC6C4BB840C30BB73BBED5B6D0C0E3B789BCF0BB38BB6BB94FBB75" + $"BB38BB6B0005BB13BCEABB13BCEABA2ABCFEB8E9BE61B954BD93B817BFD3BAB5" + $"C21CB918C1CFBC89C297BEE8BF89BE33C117BE2CBE21BB13BCEABCCDBCB6BB13" + $"BCEA0204C3D3BCEAC585BCACC250BD06C08ABF90C12ABE49C126C0ADC35AC21C" + $"C210C1CDC4CCC288C6C6C010C67CC18EC72DBE5D020CC382BE49C37EBE90C3C9" + $"BE47C458BE49C410BE45C45ABE91C45ABF1FC456BED8C4A1BF22C530BF22C4E9" + $"BF1EC532BF69C530BFF8C534BFB0C4E8BFFAC459BFFAC4A1BFF6C456C046C457" + $"C0DDC45CC092C415C0E0C390C0DDC3D2C0E0C369C09DC37FBFFAC38DC043C337" + $"BFF7C2A9BFF748BFFBC2A7BFB0C2A9BF21C2A4BF6948BF1FC37FBF1FC338BF23" + $"C382BED80204BA36BF21BA31BF69BB0DBF20BCBBBF22BBE4BF1EBCE4BF5BBCCA" + $"BFF8BCBFBFB5BBEEBFF9BA35BFF8BB11BFFBBA34BFB0060A00020001000A0002" + $"0203000A00020405000A0103060708000A010109000A01010A00" +}; + -- 2.36.1