Initial release of Maemo 5 port of gnuplot
[gnuplot] / src / win / geticon.c
diff --git a/src/win/geticon.c b/src/win/geticon.c
new file mode 100644 (file)
index 0000000..37a76f2
--- /dev/null
@@ -0,0 +1,101 @@
+#ifndef lint
+static char *RCSid() { return RCSid("$Id: geticon.c,v 1.3 2004/07/01 17:10:10 broeker Exp $"); }
+#endif
+
+/* geticon.c */
+/* extract Borland ascii format icons from resource script */
+/* and write as Microsoft binary format .ICO files */
+/* Russell Lang 1992-12-20 */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+/* HBB 980809: naming a variable 'inline' is a bad idea, these days. Too
+ * many compilers use it as a keyword... Changed to 'inputline' */
+#define MAXLINE 255
+FILE *rcfile;
+char inputline[MAXLINE+1];
+char *tok1, *tok2, *tok3;
+char *p;
+char iconname[MAXLINE+1];
+FILE *iconfile;
+int line;
+
+int htoi(char ch)
+{
+    ch = toupper(ch);
+    if (ch < '0')
+        return(0);
+    else if (ch <= '9')
+        return((int)(ch - '0'));
+    else if (ch < 'A')
+        return(0);
+    else if (ch <= 'F')
+        return((int)(ch - 'A' + 10));
+    return(0);
+}
+
+void
+geticon()
+{
+    char ch;
+
+    fgets(inputline,MAXLINE,rcfile);
+    line++;
+    if (strncmp(inputline,"BEGIN",5)) {
+       fprintf(stderr,"Expecting BEGIN at line %d\n",line);
+       exit(3);
+    }
+    if ( (iconfile = fopen(iconname,"wb")) == (FILE *)NULL) {
+        fprintf(stderr,"Can't open ICON file %s\n",iconname);
+        exit(4);
+    }
+    fgets(inputline,MAXLINE,rcfile);
+    line++;
+    while (strncmp(inputline,"END",3) && !feof(rcfile)) {
+        for (p = inputline; *p && (*p==' ' || *p == '\t' || *p=='\''); p++);
+        while (isxdigit(*p)) {
+            ch = htoi(*p++)<<4;
+            ch += htoi(*p++);
+            fputc(ch, iconfile);
+            p++;
+        }
+        fgets(inputline,MAXLINE,rcfile);
+        line++;
+    }
+    fclose(iconfile);
+}
+
+int
+main(int argc, char *argv[])
+{
+    if ((argc < 2) || (argc > 3)) {
+       fprintf(stderr,"Usage:  geticon  resource_file [icon_directory]\n");
+       return(1);
+    }
+    if ( (rcfile = fopen(argv[1],"r")) == (FILE *)NULL) {
+       fprintf(stderr,"Can't open RC file\n");
+       return(2);
+    }
+    line = 0;
+    while (fgets(inputline,MAXLINE,rcfile)) {
+        line++;
+       tok1 = strtok(inputline," \t\r\n");
+       tok2 = strtok(NULL," \t\r\n");
+       tok3 = strtok(NULL," \t\r\n");
+       if (tok2 && !strcmp(tok2,"ICON") && (tok3 == (char *)NULL)) {
+            iconname[0] = '\0';
+           if (argc == 3) {
+                strcpy(iconname,argv[2]);
+                strcat(iconname,"\\");
+            }
+            strcat(iconname,tok1);
+            strcat(iconname,".ico");
+           fprintf(stdout,"%s\n",iconname);
+           geticon();
+       }
+    }
+    return 0;
+}