]> git.sur5r.net Git - cc65/commitdiff
Allow for custom icon for a GEOS app by allowing user to specify an external 63-byte...
authorol.sc <ol.sc@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 27 Dec 2011 01:11:22 +0000 (01:11 +0000)
committerol.sc <ol.sc@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 27 Dec 2011 01:11:22 +0000 (01:11 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@5318 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/grc65/grc65.c

index 75d33b2cdcd1dcffeb1908d813397492cf9fcb84..bd237eb70d6ab0e9d04ec1d3dc33826ea81206ae 100644 (file)
@@ -60,6 +60,7 @@ struct appheader {
     char *version;
     char *author;
     char *info;
+    char *icon;
 };
 
 const char *mainToken[] = {"MENU", "HEADER", "ICON", "DIALOG", "VLIR", ""};
@@ -67,7 +68,7 @@ const char *mainToken[] = {"MENU", "HEADER", "ICON", "DIALOG", "VLIR", ""};
 const char *hdrFTypes[] = {"APPLICATION", "AUTO_EXEC", "DESK_ACC", "ASSEMBLY",
                            "DISK_DEVICE", "PRINTER", "SYSTEM", ""};
 
-const char *hdrFields[] = {"author", "info", "date", "dostype", "mode", "structure", ""};
+const char *hdrFields[] = {"author", "info", "date", "dostype", "mode", "structure", "icon", ""};
 
 const char *hdrDOSTp[] = {"seq", "SEQ", "prg", "PRG", "usr", "USR", ""};
 
@@ -120,11 +121,11 @@ void printCHeader(void) {
 
     fprintf(outputCFile,
         "//\n"
-        "//\tThis file was generated by GEOS Resource Compiler\n"
+        "//\tThis file was generated by the GEOS Resource Compiler\n"
         "//\n"
         "//\tDO NOT EDIT! Any changes will be lost!\n"
         "//\n"
-        "//\tEdit proper resource file instead\n"
+        "//\tEdit proper resource file instead.\n"
         "//\n\n");
 }
 
@@ -133,11 +134,11 @@ void printSHeader(void) {
 
     fprintf(outputSFile,
         ";\n"
-        ";\tThis file was generated by GEOS Resource Compiler\n"
+        ";\tThis file was generated by the GEOS Resource Compiler\n"
         ";\n"
         ";\tDO NOT EDIT! Any changes will be lost!\n"
         ";\n"
-        ";\tEdit proper resource file instead\n"
+        ";\tEdit proper resource file instead.\n"
         ";\n\n");
 }
 
@@ -402,6 +403,7 @@ void DoHeader(void) {
     myHead.dostype = 128 + 3;
     myHead.structure = 0;
     myHead.mode = 0;
+    myHead.icon = NULL;
 
     t = time(NULL);
     my_tm = localtime(&t);
@@ -478,6 +480,9 @@ void DoHeader(void) {
                         break;
                 }
                 break;
+            case 6: /* icon */
+                myHead.icon = nextPhrase();
+                break;
         }
 
     } while (strcmp(token, "}") != 0);
@@ -508,10 +513,16 @@ void DoHeader(void) {
         "\t.import __VLIR0_START__, __STARTUP_RUN__\n\n"
         "\t.byte 3, 21, 63 | $80\n");
 
-    for (a = 0; a != 63; a = a + 3) {
+    if (myHead.icon != NULL) {
         fprintf(outputSFile,
-            "\t.byte %%%s, %%%s, %%%s\n",
-            bintos(icon1[a], i1), bintos(icon1[a+1], i2), bintos(icon1[a+2], i3));
+            "\t.incbin \"%s\", 0, 63\n",
+            myHead.icon);
+    } else {
+        for (a = 0; a != 63; a = a + 3) {
+            fprintf(outputSFile,
+                "\t.byte %%%s, %%%s, %%%s\n",
+                bintos(icon1[a], i1), bintos(icon1[a+1], i2), bintos(icon1[a+2], i3));
+        }
     }
 
     fprintf(outputSFile,