Fixed lots of warning and made code compatible with C89 and ANSI with -pedantic.
[debian/pforth] / csrc / pf_main.c
1 /* @(#) pf_main.c 98/01/26 1.2 */\r
2 /***************************************************************\r
3 ** Forth based on 'C'\r
4 **\r
5 ** main() routine that demonstrates how to call PForth as\r
6 ** a module from 'C' based application.\r
7 ** Customize this as needed for your application.\r
8 **\r
9 ** Author: Phil Burk\r
10 ** Copyright 1994 3DO, Phil Burk, Larry Polansky, David Rosenboom\r
11 **\r
12 ** The pForth software code is dedicated to the public domain,\r
13 ** and any third party may reproduce, distribute and modify\r
14 ** the pForth software code or any derivative works thereof\r
15 ** without any compensation or license.  The pForth software\r
16 ** code is provided on an "as is" basis without any warranty\r
17 ** of any kind, including, without limitation, the implied\r
18 ** warranties of merchantability and fitness for a particular\r
19 ** purpose and their equivalents under the laws of any jurisdiction.\r
20 **\r
21 ***************************************************************/\r
22 \r
23 #if (defined(PF_NO_STDIO) || defined(PF_EMBEDDED))\r
24         #define NULL  ((void *) 0)\r
25         #define ERR(msg) /* { printf msg; } */\r
26 #else\r
27         #include <stdio.h>\r
28         #define ERR(msg) { printf msg; }\r
29 #endif\r
30 \r
31 #include "pforth.h"\r
32 \r
33 #ifndef PF_DEFAULT_DICTIONARY\r
34 #define PF_DEFAULT_DICTIONARY "pforth.dic"\r
35 #endif\r
36 \r
37 #ifdef __MWERKS__\r
38         #include <console.h>\r
39         #include <sioux.h>\r
40 #endif\r
41 \r
42 #ifndef TRUE\r
43 #define TRUE (1)\r
44 #define FALSE (0)\r
45 #endif\r
46 \r
47 #ifdef PF_EMBEDDED\r
48 int main( void )\r
49 {\r
50     char IfInit = 0; \r
51     const char *DicName = NULL;\r
52     const char *SourceName = NULL;\r
53     pfMessage("\npForth Embedded\n");\r
54     return pfDoForth( DicName, SourceName, IfInit);\r
55 }\r
56 #else\r
57 \r
58 int main( int argc, char **argv )\r
59 {\r
60 #ifdef PF_STATIC_DIC\r
61         const char *DicName = NULL;\r
62 #else /* PF_STATIC_DIC */\r
63         const char *DicName = PF_DEFAULT_DICTIONARY;\r
64 #endif /* !PF_STATIC_DIC */\r
65 \r
66         const char *SourceName = NULL;\r
67         char IfInit = FALSE;\r
68         char *s;\r
69         cell_t i;\r
70         int Result;\r
71 \r
72 /* For Metroworks on Mac */\r
73 #ifdef __MWERKS__\r
74         argc = ccommand(&argv);\r
75 #endif\r
76         \r
77         pfSetQuiet( FALSE );\r
78 /* Parse command line. */\r
79         for( i=1; i<argc; i++ )\r
80         {\r
81                 s = argv[i];\r
82 \r
83                 if( *s == '-' )\r
84                 {\r
85                         char c;\r
86                         s++; /* past '-' */\r
87                         c = *s++;\r
88                         switch(c)\r
89                         {\r
90                         case 'i':\r
91                                 IfInit = TRUE;\r
92                                 DicName = NULL;\r
93                                 break;\r
94                                 \r
95                         case 'q':\r
96                                 pfSetQuiet( TRUE );\r
97                                 break;\r
98                                 \r
99                         case 'd':\r
100                                 if( *s != '\0' ) DicName = s;\r
101                                 /* Allow space after -d (Thanks Aleksej Saushev) */\r
102                                 /* Make sure there is another argument. */\r
103                                 else if( (i+1) < argc )\r
104                                 {\r
105                                         DicName = argv[++i];\r
106                                 }\r
107                                 if (DicName == NULL || *DicName == '\0')\r
108                                 {\r
109                                         DicName = PF_DEFAULT_DICTIONARY;\r
110                                 }\r
111                                 break;\r
112                                 \r
113                         default:\r
114                                 ERR(("Unrecognized option!\n"));\r
115                                 ERR(("pforth {-i} {-q} {-dfilename.dic} {sourcefilename}\n"));\r
116                                 Result = 1;\r
117                                 goto on_error;\r
118                                 break;\r
119                         }\r
120                 }\r
121                 else\r
122                 {\r
123                         SourceName = s;\r
124                 }\r
125         }\r
126 /* Force Init */\r
127 #ifdef PF_INIT_MODE\r
128         IfInit = TRUE;\r
129         DicName = NULL;\r
130 #endif\r
131 \r
132         Result = pfDoForth( DicName, SourceName, IfInit);\r
133 \r
134 on_error:\r
135         return Result;\r
136 }\r
137 \r
138 #endif  /* PF_EMBEDDED */\r
139 \r
140 \r