Home Projects Redmine Issues

interos gitweb

Initial commit
[interos.git] / c / new_user_interos.com_ssl.c
1 /****************************************************/
2 /*   interos Standard Document Header - CGI in C    */
3 /****************************************************/
4 /*         URIs:  https://interos.com/new_user      */
5 /*                https://www.interos.com/new_user  */
6 /*       Source:  new_user.c                        */
7 /*  Description:  FastCGI for interos new_user      */
8 /*       Author:  Brent Angeline                    */
9 /*          CGI:  FastCGI in ISO/ANSI C             */
10 /****************************************************/
12 /* PREPROCESSOR DIRECTIVES */
13 #include "fcgi_stdio.h"     /*  FCGI_Accept(), fread(), printf()                                                                           */
14 #include "interos.h"        /*  DIRECTORY, INT, DIRECTORY_COMMAND, ECHO_COMMAND, PASSWORD_OUT, SYSTEM_DIRECTORY, SYSTEM_DIRECTORY_COMMAND  */
15 #include <ctype.h>          /*  tolower()                                                                                                  */
16 #include <stdlib.h>         /*  free(), getenv(), malloc(), system()                                                                       */
17 #include <string.h>         /*  strcat(), strcmp(), strcpy(), strlen()                                                                     */
18 #include <unistd.h>         /*  F_OK, access()                                                                                             */
20 static void Old(void);
22 /* BEGIN MAIN PROGRAM */
23 int main(void) {
25   /* BEGIN FASTCGI */
26   while (FCGI_Accept() >= 0) {
28     /* IF POST DATA DOESN'T EXIST OR IS TOO LONG... */
29     if (!getenv("CONTENT_LENGTH") || (sizeof(STRING_TO_INT(getenv("CONTENT_LENGTH"), (char **) NULL, 10)) > sizeof(INT))) {
30       char *status = NULL;
32       /* IF QUERY DATA EXISTS AND IS OF ACCEPTABLE LENGTH... */
33       if (getenv("QUERY_STRING") && (sizeof(strlen(getenv("QUERY_STRING"))) <= sizeof(INT))) {
35         /* ATTEMPT TO ALLOCATE MEMORY FOR QUERY VARIABLES */
36         char *query;
37         INT queryLength = strlen(getenv("QUERY_STRING"));
38         if ((queryLength < 1) || !(query = malloc(queryLength + 1))) {
39           /** ERROR | CRUCIAL MEMORY ALLOCATION ERROR FOR QUERY DATA! > CONTINUE WITHOUT QUERY **/
40         } else {
41           char *variableName;
42           strcpy(query, getenv("QUERY_STRING"));
43           if (!(variableName = malloc(queryLength + 1))) {
44             /** ERROR | CANNOT ALLOCATE MEMORY FOR VARIABLE NAME > CONTINUE WITHOUT QUERY **/
45           } else {
46             char *variableValue;
47             if (!(variableValue = malloc(queryLength + 1))) {
48               /** ERROR | CANNOT ALLOCATE MEMORY FOR VARIABLE VALUE > CONTINUE WITHOUT QUERY **/
50             /* IF SUFFICIENT MEMORY FOR QUERY VARIABLES... */
51             } else {
53               /* PROCESS QUERY DATA */
54               INT q = 0;
55               i = 0;
56               while ((q < queryLength) && (query[q] != '\0')) {
57                 while ((q < queryLength) && (query[q] != '=') && (query[q] != '\0')) {
58                   variableName[i] = query[q];
59                   ++q;
60                   ++i;
61                 }
62                 variableName[i] = '\0';
63                 ++q;
64                 i = 0;
65                 while ((query[q] != '&') && (query[q] != '\0')) {
66                   variableValue[i] = query[q];
67                   ++q;
68                   ++i;
69                 }
70                 variableValue[i] = '\0';
71                 if (query[q] != '\0') {
72                   ++q;
73                 }
74                 if (!status && !strcmp(variableName, "status")) {
75                   if ((status = malloc(strlen(variableValue) + 1)) != 0) {
76                     strcpy(status, variableValue);
77                   }
78                 }
79               }
80               free(variableValue);
81             }
82             free(variableName);
83           }
84           free(query);
85         }
86       }
88       /* DISPLAY CREATE LOGIN PANEL */
89       printf("Content-Type: text/html; charset=utf-8\r\n\r\n");
90       printf("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
91       printf("<?xml-stylesheet type=\"text/css\" href=\"/style/login.css\"?>\n");
92       printf("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \n");
93       printf("                      \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n");
94       printf("<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en-US\" lang=\"en-US\">\n");
95       printf("  <!--=================================================-->\n");
96       printf("  <!--    interos Standard Document Header - Markup    -->\n");
97       printf("  <!--=================================================-->\n");
98       printf("  <!--    URIs:  https://interos.com/new_user          -->\n");
99       printf("  <!--           https://www.interos.com/new_user      -->\n");
100       printf("  <!--   Title:  new interos user                      -->\n");
101       printf("  <!--  Author:  Brent Angeline                        -->\n");
102       printf("  <!--  Markup:  W3C-Validated XHTML 1.0 Transitional  -->\n");
103       printf("  <!--=================================================-->\n");
104       printf("  <head>\n");
105       printf("    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n");
106       printf("    <meta name=\"title\" content=\"new interos user\" />\n");
107       printf("    <meta name=\"description\" content=\"create your login\" />\n");
108       printf("    <meta name=\"author\" content=\"Brent Angeline\" />\n");
109       printf("    <meta name=\"copyright\" \n");
110       printf("          content=\"Copyright &copy; 2001-2008 Brent Angeline and interos LLC\" />\n");
111       printf("    <meta name=\"robots\" content=\"index, nofollow, noarchive\" />\n");
112       printf("    <title>new interos user</title>\n");
113       printf("    <link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/favicon.ico\" />\n");
114       printf("    <link rel=\"icon\" type=\"image/gif\" href=\"/images/favicon.gif\" />\n");
115       printf("    <link rel=\"stylesheet\" type=\"text/css\" href=\"/style/login.css\" \n");
116       printf("          media=\"screen, projection\" />\n");
117       printf("    <script type=\"text/javascript\" src=\"/js/login.js\"></script>\n");
118       printf("  </head>\n");
119       printf("  <body id=\"body\">\n");
120       printf("    <center>\n");
121       printf("      <p id=\"navigation\">\n");
122       printf("        <a href=\"/about\">about</a> | \n");
123       printf("        <a href=\"/blog\">blog</a> | \n");
124       printf("        <a href=\"/code\">code</a> | \n");
125       printf("        <a href=\"https://interos.org/\">develop</a> | \n");
126       printf("        <a href=\"/e-mail\">e-mail</a> | \n");
127       printf("        <a href=\"/f.a.q.\">f.a.q.</a> | \n");
128       printf("        <a href=\"/gear\">gear</a> | \n");
129       printf("        <a href=\"/help\">help</a>\n");
130       printf("      </p>\n");
131       printf("      <form id=\"loginForm\" name=\"loginForm\" action=\"new_user\" method=\"post\">\n");
132       printf("        <table id=\"mainPanel\">\n");
133       printf("          <thead>\n");
134       printf("            <tr>\n");
135       printf("              <th colspan=\"3\"><center>\n");
136       printf("                                <div id=\"title\">\n");
137       printf("                                  <h1>\n");
138       printf("                                    <a href=\"/\">interos</a>\n");
139       printf("                                  </h1>\n");
140       printf("                                  <h2>\n");
141       printf("                                    create your login\n");
142       printf("                                  </h2>\n");
143       printf("                                </div>\n");
144       printf("                              </center></th>\n");
145       printf("            </tr>\n");
146       printf("          </thead>\n");
147       printf("          <tfoot>\n");
148       printf("            <tr>\n");
149       printf("              <td colspan=\"3\"><br /></td>\n");
150       printf("            </tr>\n");
151       printf("          </tfoot>\n");
152       printf("          <tbody>\n");
153       printf("            <tr>\n");
154       printf("              <td><label for=\"login\">login:</label>&nbsp;</td>\n");
155       printf("              <td><input id=\"login\" name=\"login\" type=\"text\" \n");
156       printf("                         size=\"16\"  maxlength=\"16\" /></td>\n");
157       printf("            </tr>\n");
158       printf("            <tr>\n");
159       printf("              <td><label for=\"password\">password:</label>&nbsp;</td>\n");
160       printf("              <td><input id=\"password\" name=\"password\" type=\"password\" \n");
161       printf("                         size=\"16\"     maxlength=\"16\" /></td>\n");
162       printf("            </tr>\n");
163       printf("            <tr>\n");
164       printf("              <td><label for=\"verify\">password:</label>&nbsp;</td>\n");
165       printf("              <td><input id=\"verify\" name=\"verify\" type=\"password\" \n");
166       printf("                         size=\"16\"   maxlength=\"16\" /></td>\n");
167       printf("              <td rowspan=\"2\"><div id=\"submitButton\">\n");
168       printf("                                &nbsp;<input type=\"submit\" \n");
169       printf("                                             value=\"login &raquo;\" />\n");
170       printf("                              </div></td>\n");
171       printf("            </tr>\n");
172       printf("          </tbody>\n");
173       printf("        </table>\n");
174       printf("      </form>\n");
175       printf("      <p id=\"newUser\">\n");
176       printf("        <strong>* enter password twice</strong><br />\n");
177       printf("        to create your login<br />\n");
178       printf("        <a href=\"/login\">&laquo; back to login</a>\n");
179       printf("      </p>\n");
180       printf("      <p>\n");
181       printf("        <br />\n");
182       printf("      </p>\n");
183       printf("      <p id=\"copyrightDates\">\n");
184       printf("        &copy; 2001&#8211;2008 interos\n");
185       printf("      </p>\n");
186       printf("    </center>\n");
187       printf("  </body>\n");
188       printf("  <!--=====================================================================-->\n");
189       printf("  <!--                  Copyright and Trademark Statement                  -->\n");
190       printf("  <!--=====================================================================-->\n");
191       printf("  <!--                                                                     -->\n");
192       printf("  <!--          All original textual and graphical site content:           -->\n");
193       printf("  <!--                                                                     -->\n");
194       printf("  <!--  Copyright 2001-2008 Brent Angeline and interos LLC.  All rights    -->\n");
195       printf("  <!--  reserved.  Reproduction in whole or in part without written        -->\n");
196       printf("  <!--  permission is prohibited.  interos and the interos logos are       -->\n");
197       printf("  <!--  trademarks of Brent Angeline and interos LLC.  All other company,  -->\n");
198       printf("  <!--  product, and service names mentioned herein may be the properties  -->\n");
199       printf("  <!--  of their respective owners.  Comments in the interos.org forums    -->\n");
200       printf("  <!--  are the properties of their respective authors.  All software      -->\n");
201       printf("  <!--  developed in the forums is open source and belongs to everyone.    -->\n");
202       printf("  <!--                                                                     -->\n");
203       printf("  <!--=====================================================================-->\n");
204       printf("  <!--                      e-mail: info@interos.com                       -->\n");
205       printf("  <!--=====================================================================-->\n");
206       printf("</html>");
208       /* CLEAN UP AFTER QUERY DATA PROCESSING */
209       free(status);
211     /* OTHERWISE, IF POST DATA DOES EXIST AND IS OF ACCEPTABLE LENGTH... */
212     } else {
214       /* SET VARIABLES BASED ON POST DATA */
216       /* ATTEMPT TO ALLOCATE MEMORY FOR POST VARIABLES */
217       char *post;
218       INT postLength = STRING_TO_INT(getenv("CONTENT_LENGTH"), (char **) NULL, 10);
219       if ((postLength < 1) || !(post = malloc(postLength + 1))) {
220         /** ERROR | CANNOT ALLOCATE MEMORY FOR POST DATA > REDIRECT TO LOGIN CREATION PANEL **/
221         printf("Location: new_user?status=try_again\r\n\r\n");
222       } else {
223         char *variableName;
224         if (!(variableName = malloc(postLength + 1))) {
225           /** ERROR | CANNOT ALLOCATE MEMORY FOR VARIABLE NAME > REDIRECT TO LOGIN CREATION PANEL **/
226             printf("Location: new_user?status=try_again\r\n\r\n");
227         } else {
228           char *variableValue;
229           if (!(variableValue = malloc(postLength + 1))) {
230             /** ERROR | CANNOT ALLOCATE MEMORY FOR VARIABLE VALUE > REDIRECT TO LOGIN CREATION PANEL **/
231             printf("Location: new_user?status=try_again\r\n\r\n");
232           } else {
234             /* PROCESS POST DATA */
235             char *login, *password, *verify;
236             INT  i, j, p;
237             login = password = verify = NULL;
238             j = p = 0;
239             fread(post, postLength, 1, stdin);
240             post[postLength] = '\0';
241             while ((p < postLength) && (post[p] != '\0')) {
242               i = 0;
243               while ((p < postLength) && (post[p] != '=') && (post[p] != '\0')) {
244                 variableName[i] = post[p];
245                 ++p;
246                 ++i;
247               }
248               variableName[i] = '\0';
249               ++p;
250               i = 0;
251               while ((p < postLength) && (post[p] != '&') && (post[p] != '\0')) {
252                 variableValue[i] = post[p];
253                 ++p;
254                 ++i;
255               }
256               variableValue[i] = '\0';
257               if (post[p] != '\0') {
258                 ++p;
259               }
260               if (!login && !strcmp(variableName, "login")) {
261                 if (!(login = malloc(strlen(variableValue) + 1))) {
262                   /** ERROR | CANNOT ALLOCATE MEMORY FOR LOGIN VARIABLE > REDIRECT TO LOGIN CREATION PANEL **/
263                   printf("Location: new_user?status=try_again\r\n\r\n");
264                 } else {
265                   strcpy(login, variableValue);
266                   for (j = 0; j < strlen(login); ++j) {
267                     login[j] = tolower(login[j]);
268                   }
269                 }
270               } else if (!password && !strcmp(variableName, "password")) {
271                 if (!(password = malloc(strlen(variableValue) + 1))) {
272                   /** ERROR | CANNOT ALLOCATE MEMORY FOR PASSWORD VARIABLE > REDIRECT TO LOGIN CREATION PANEL **/
273                   printf("Location: new_user?status=try_again\r\n\r\n");
274                 } else {
275                   strcpy(password, variableValue);
276                 }
277               } else if (!verify && !strcmp(variableName, "verify")) {
278                 if (!(verify = malloc(strlen(variableValue) + 1))) {
279                   /** ERROR | CANNOT ALLOCATE MEMORY FOR PASSWORD CONFIRM VARIABLE > REDIRECT TO LOGIN CREATION PANEL **/
280                   printf("Location: new_user?status=try_again\r\n\r\n");
281                 } else {
282                   strcpy(verify, variableValue);
283                 }
284               }
285             }
287             /* IF LOGIN VALUE IS MISSING... */
288             if (!login) {
289               /** ERROR | LOGIN VALUE IS MISSING > REDIRECT TO LOGIN CREATION PANEL **/
290               printf("Location: new_user?status=try_again\r\n\r\n");
292             /* OTHERWISE, IF LOGIN VALUE EXISTS... */
293             } else {
295               /* CHECK LOGIN FOR ILLEGAL CHARACTERS */
296               char illegalCharacter = 0;
297               for (i = 0; i < strlen(login); ++i) {
298                 if (!(((login[i] >= 'a') && (login[i] <= 'z')) || ((login[i] >= '0') && (login[i] <= '9')))) {
299                   illegalCharacter = 1;
300                 }
301               }
302               if (illegalCharacter) {
303                 /** ERROR | LOGIN OR PASSWORD CONTAINS ILLEGAL CHARACTERS > REDIRECT TO LOGIN CREATION PANEL **/ 
304                 printf("Location: new_user?status=illegal_characters\r\n\r\n");
305               } else {
307                 /* CHECK LOGIN AVAILABILITY */
308                 char *directory;
309                 if (!(directory = malloc(strlen(login) + strlen(DIRECTORY) + 1))) {
310                   /** ERROR | CANNOT ALLOCATE MEMORY FOR DIRECTORY NAME > REDIRECT TO LOGIN CREATION PANEL **/
311                   printf("Location: new_user?status=try_again\r\n\r\n");
312                 } else {
313                   char *systemDirectory;
314                   if (!(systemDirectory = malloc(strlen(login) + strlen(SYSTEM_DIRECTORY) + 1))) {
315                     /** ERROR | CANNOT ALLOCATE MEMORY FOR SYSTEM DIRECTORY NAME > REDIRECT TO LOGIN CREATION PANEL **/
316                     printf("Location: new_user?status=try_again\r\n\r\n");
317                   } else {
318                     strcpy(directory, DIRECTORY);
319                     strcat(directory, login);
320                     strcpy(systemDirectory, SYSTEM_DIRECTORY);
321                     strcat(systemDirectory, login);
323                     /* IF LOGIN EXISTS... */
324                     if (!access(directory, F_OK) || !access(systemDirectory, F_OK)) {
326                       /* REDIRECT TO LOGIN CREATION PANEL BECAUSE LOGIN ALREADY EXISTS */
327                       printf("Location: new_user?status=login_exists\r\n\r\n");
329                     /* OTHERWISE, IF LOGIN DOESN'T EXIST... */
330                     } else {
332                       /* IF NO PASSWORD FROM POST VARIABLES... */
333                       if (!password) {
334                         password = malloc(1);
335                         password[0] = '\0';
336                       }
338                       /* IF NO PASSWORD CONFIRMATION FROM POST VARIABLES... */
339                       if (!password) {
340                         verify = malloc(1);
341                         verify[0] = '\0';
342                       }
344                       /* IF PASSWORD FAILS CONFIRMATION... */
345                       if (strcmp(password, verify)) {
347                         /* REDIRECT TO LOGIN CREATION PANEL AND RECONFIRM PASSWORD */
348                         printf("Location: new_user?status=reconfirm_password\r\n\r\n");
350                       /* OTHERWISE, IF PASSWORD PASSES CONFIRMATION... */
351                       } else {
353                         /* CREATE USER ACCOUNT */
354                         char *systemDirectoryCommand;
355                         char *directoryCommand;
356                         char *passwordCommand;
357                         if (!(systemDirectoryCommand = malloc(strlen(login) + strlen(SYSTEM_DIRECTORY_COMMAND) + 1))) {
358                           /** ERROR | CANNOT ALLOCATE MEMORY FOR CREATE SYSTEM DIRECTORY COMMAND > REDIRECT TO LOGIN CREATION PANEL **/
359                           printf("Location: new_user?status=try_again\r\n\r\n");
360                         } else {
361                           if (!(directoryCommand = malloc(strlen(login) + strlen(DIRECTORY_COMMAND) + 1))) {
362                             /** ERROR | CANNOT ALLOCATE MEMORY FOR CREATE DIRECTORY COMMAND > REDIRECT TO LOGIN CREATION PANEL **/
363                             printf("Location: new_user?status=try_again\r\n\r\n");
364                           } else {
365                             if (!(passwordCommand = malloc(strlen(password) + strlen(login) + strlen(ECHO_COMMAND) + strlen(PASSWORD_OUT) + strlen(PASSWORD_FILE_NAME) + 1))) {
366                               /** ERROR | CANNOT ALLOCATE MEMORY FOR CREATE PASSWORD FILE COMMAND > REDIRECT TO LOGIN CREATION PANEL **/
367                               printf("Location: new_user?status=try_again\r\n\r\n");
368                             } else {
369                               strcpy(systemDirectoryCommand, SYSTEM_DIRECTORY_COMMAND);
370                               strcat(systemDirectoryCommand, login);
371                               system(systemDirectoryCommand);
372                               strcpy(directoryCommand, DIRECTORY_COMMAND);
373                               strcat(directoryCommand, login);
374                               system(directoryCommand);
375                               strcpy(passwordCommand, ECHO_COMMAND);
376                               strcat(passwordCommand, password);
377                               strcat(passwordCommand, PASSWORD_OUT); 
378                               strcat(passwordCommand, login);
379                               strcat(passwordCommand, PASSWORD_FILE_NAME);
380                               system(passwordCommand);
382                               /* SET COOKIES */
383                               printf("Set-Cookie: login=%s; path=/; secure\r\n", login);
384                               printf("Set-Cookie: password=%s; path=/; secure\r\n", password);
386                               /* REDIRECT LOGGED INTO interos */
387                               printf("Location: welcome\r\n\r\n");
388                               free(passwordCommand);
389                             }
390                             free(directoryCommand);
391                           }
392                           free(systemDirectoryCommand);
393                         }
394                       }
395                     }
396                     free(systemDirectory);
397                   }
398                   free(directory);
399                 }
400               }
401               free(login);
402             }
403             free(password);
404             free(verify);
405             free(variableValue);
406           }
407           free(variableName);
408         }
409         free(post);
410       }
411     }
412   }
413   return 0;
416 static void Old(void) {
417       char *status == NULL;
419       /* DISPLAY CREATE LOGIN PANEL */
420       printf("Content-type: text/html\n\n");
421       printf("<!--=======================================================-->\n");
422       printf("<!--  interos.com Standard Document Model Header - Markup  -->\n");
423       printf("<!--=======================================================-->\n");
424       printf("<!--       URIs:  https://www.interos.com/sys/new_user     -->\n");
425       printf("<!--              interos.com/sys/new_user                 -->\n");
426       printf("<!--      Title:  interos > create login                   -->\n");
427       printf("<!--     Author:  Brent Angeline                           -->\n");
428       printf("<!--     Markup:  Dynamic XHTML                            -->\n");
429       printf("<!--=======================================================-->\n");
430       printf("<html>");
431         printf("<head>");
432           printf("<title>interos > create login</title>");
433           printf("<link rel=\"stylesheet\" type=\"text/css\" href=\"css/new_user/style.css\" />");
434           printf("<script language=\"javascript\" type=\"text/javascript\" src=\"js/new_user/javascript.js\"></script>");
435           printf("<noscript>Your browser doesn't support true DHTML. Get one that does <a href=\"http://www.mozilla.org/\">here</a> or <a href=\"http://home.netscape.com/computing/download/\">here</a>. If you have JavaScript disabled, please enable it and click reload on your browser.</noscript>");
436         printf("</head>");
437         printf("<body onload=\"iOnLoad()\">");
438           printf("<table width=\"100%%\" height=\"100%%\" cellpadding=\"0\" cellspacing=\"0\">");
439             printf("<tr>");
440               printf("<td width=\"50%%\" height=\"72\" align=\"left\"><a class=\"iOpenFaded\" onmouseover=\"iOpenOn()\" href=\"javascript:explain('open')\"><img width=\"72\" height=\"72\" align=\"middle\" alt=\"open\" src=\"images/login/open_faded.gif\" />&nbsp;open</a></td>");
441               printf("<td width=\"50%%\" height=\"72\" align=\"right\"><a class=\"iNextFaded\" onmouseover=\"iNextOn()\" href=\"javascript:explain('next')\">next&nbsp;<img width=\"72\" height=\"72\" align=\"middle\" alt=\"next\" src=\"images/login/next_faded.gif\" /></a></td>");
442             printf("</tr>");
443             printf("<tr>");
444               printf("<td colspan=\"2\" height=\"100%%\" align=\"center\" valign=\"middle\"><table width=\"384\" class=\"iPanel\" cellpadding=\"0\" cellspacing=\"0\">");
445                   printf("<tr>");
446                     printf("<td><img width=\"12\" height=\"12\" src=\"images/login/top_left.gif\" /></td>");
447                     printf("<td><img width=\"354\" height=\"12\" src=\"images/login/top.gif\" /></td>");
448                     printf("<td><img width=\"18\" height=\"12\" src=\"images/login/top_right.gif\" /></td>");
449                   printf("</tr>");
450                   printf("<tr>");
451                     printf("<td><img width=\"12\" height=\"184\" src=\"images/login/left.gif\" /></td>");
452                     printf("<td align=\"center\" valign=\"top\"><img width=\"52\" height=\"60\" alt=\"interos\" src=\"images/login/i.gif\" /><img width=\"284\" height=\"60\" alt=\"interos\" src=\"images/login/nteros.gif\" /><br />");
453                       printf("<span class=\"iPanelLarge\">&mdash; &nbsp; create login &nbsp; &mdash;</span><br />");
454                       printf("<span class=\"iSmallBreak\"><br /></span>");
455                       printf("<span class=\"iSmallBreak\"><br /></span>");
456                       printf("<form name=\"loginForm\" action=\"new_user\" method=\"POST\">");
457                         printf("<table width=\"354\" cellpadding=\"0\" cellspacing=\"0\">");
458                           printf("<tr>");
459                             printf("<td><table width=\"276\" cellpadding=\"0\" cellspacing=\"0\">");
460                                 printf("<tr>");
461                                   printf("<td width=\"110\" height=\"25\">&nbsp; login:</td>");
462                                   printf("<td width=\"166\" height=\"25\"><input name=\"login\" type=\"text\" maxlength=\"16\" size=\"19\" /></td>");
463                                 printf("</tr>");
464                                 printf("<tr>");
465                                   printf("<td width=\"110\" height=\"25\">&nbsp; password:</td>");
466                                   printf("<td width=\"166\" height=\"25\"><input name=\"password\" type=\"password\" maxlength=\"16\" size=\"19\" /></td>");
467                                 printf("</tr>");
468                                 printf("<tr>");
469                                   printf("<td width=\"110\" height=\"25\">&nbsp;");
470                                     if (status == NULL)
471                                   { printf("&#42;"); }
472                                     else
473                                   { printf(" "); }
474                                     printf("password:</td>");
475                                   printf("<td width=\"166\" height=\"25\"><input name=\"verify\" type=\"password\" onkeydown=\"if(event.keyCode==13) form.submit()\" maxlength=\"16\" size=\"19\" /></td>");
476                                 printf("</tr>");
477                               printf("</table></td>");
478                             printf("<td width=\"78\" height=\"50\" align=\"center\"><a href=\"javascript:document.loginForm.submit()\"><img width=\"52\" height=\"48\" name=\"arrow\" onmousedown=\"iArrowDown()\" onmouseup=\"iArrowUp()\" onmouseout=\"iArrowUp()\" title=\"login\" alt=\"login\" src=\"images/login/arrow.gif\" /></a></td>");
479                           printf("</tr>");
480                         printf("</table>");
481                       printf("</form></td>");
482                     printf("<td><img width=\"18\" height=\"184\" src=\"images/login/right.gif\" /></td>");
483                   printf("</tr>");
484                   printf("<tr>");
485                     printf("<td><img width=\"12\" height=\"18\" src=\"images/login/bottom_left.gif\" /></td>");
486                     printf("<td><img width=\"354\" height=\"18\" src=\"images/login/bottom.gif\" /></td>");
487                     printf("<td><img width=\"18\" height=\"18\" src=\"images/login/bottom_right.gif\" /></td>");
488                   printf("</tr>");
489                 printf("</table>");
490                 printf("<span class=\"iSmallBreak\"><br /></span>");
491                 printf("<span class=\"iEnterPassword\">");
492                   if (status == NULL)
493                 { printf("&#42;enter password twice"); }
494                   else { if (strcmp(status, "try_again") == 0)
495                 { printf("server momentarily busy"); }
496                   else { if (strcmp(status, "illegal_characters") == 0)
497                 { printf("login contained illegal characters"); }
498                   else { if (strcmp(status, "login_exists") == 0)
499                 { printf("login exists"); }
500                   else { if (strcmp(status, "reconfirm_password") == 0)
501                 { printf("password entries did not match"); }
502                   else
503                 { printf("&#42;enter password twice"); } } } } }
504                   printf("</span><br />");
505                 printf("<span class=\"iCreateLogin\">");
506                   if (status == NULL)
507                 { printf("to create new login"); }
508                   else { if (strcmp(status, "try_again") == 0)
509                 { printf("please try again"); }
510                   else { if (strcmp(status, "illegal_characters") == 0)
511                 { printf("only letters and numbers are allowed"); }
512                   else { if (strcmp(status, "login_exists") == 0)
513                 { printf("please try another"); }
514                   else { if (strcmp(status, "reconfirm_password") == 0)
515                 { printf("please reconfirm your password"); }
516                   else
517                 { printf("to create new login"); } } } } }
518                   printf("</span><br />");
519                 printf("<a id=\"iBack\" href=\"login\">&lt; back to login</a></td>");
520             printf("</tr>");
521             printf("<tr>");
522               printf("<td width=\"50%%\" height=\"72\" align=\"left\"><a class=\"iNewFaded\" onmouseover=\"iNewOn()\" href=\"javascript:explain('new')\"><img width=\"72\" height=\"72\" align=\"middle\" alt=\"new\" src=\"images/login/new_faded.gif\" />&nbsp;new</a></td>");
523               printf("<td width=\"50%%\" height=\"72\" align=\"right\"><a class=\"iSettingsFaded\" onmouseover=\"iSettingsOn()\" href=\"javascript:explain('settings')\">settings&nbsp;<img width=\"72\" height=\"72\" align=\"middle\" alt=\"settings\" src=\"images/login/settings_faded.gif\" /></a></td>");
524             printf("</tr>");
525           printf("</table>");
526           printf("<div id=\"iNewPanel\" style=\"position:absolute; z-index:0; height:100%%; width:100%%; left:0px; top:0px; visibility:hidden\">");
527             printf("<table width=\"100%%\" height=\"100%%\" cellpadding=\"0\" cellspacing=\"0\">");
528               printf("<tr>");
529                 printf("<td width=\"50%%\" height=\"72\" align=\"left\"><a class=\"iOpenFaded\" onmouseover=\"iOpenOn()\" href=\"javascript:explain('open')\"><img width=\"72\" height=\"72\" align=\"middle\" alt=\"open\" src=\"images/login/open_faded.gif\" />&nbsp;open</a></td>");
530                 printf("<td width=\"50%%\" height=\"72\" align=\"right\"><a class=\"iNextFaded\" onmouseover=\"iNextOn()\" href=\"javascript:explain('next')\">next&nbsp;<img width=\"72\" height=\"72\" align=\"middle\" name=\"next\" alt=\"next\" src=\"images/login/next_faded.gif\" /></a></td>");
531               printf("</tr>");
532               printf("<tr>");
533                 printf("<td height=\"100%%\" colspan=\"2\" align=\"center\" valign=\"middle\"><table width=\"354\" cellpadding=\"0\" cellspacing=\"0\">");
534                     printf("<tr>");
535                       printf("<td width=\"354\" height=\"12\"></td>");
536                     printf("</tr>");
537                     printf("<tr>");
538                       printf("<td width=\"354\" height=\"184\" class=\"iPanel\" align=\"right\" valign=\"top\"><a id=\"iX\" href=\"javascript:iNewOff()\">x</a> &nbsp;<br />");
539                         printf("<center>");
540                           printf("<span class=\"iPanelLarge\">do something </span><span class=\"iNewLarge\">new</span><br />");
541                           printf("<br />");
542                           printf("once logged in, you can find the button for the <span class=\"iNewSmall\">new</span> menu hiding in this corner.<br />");
543                           printf("<div class=\"iSmallBreak\">");
544                             printf("<br />");
545                             printf("<br />");
546                           printf("</div>");
547                           printf("from there you can add new searches, mail, documents, shares, programs and media.");
548                         printf("</center></td>");
549                     printf("</tr>");
550                     printf("<tr>");
551                       printf("<td width=\"354\" height=\"18\"></td>");
552                     printf("</tr>");
553                   printf("</table>");
554                   printf("<span class=\"iSmallBreak\"><br /></span>");
555                   printf("<span class=\"iEnterPassword\">");
556                     if (status == NULL)
557                   { printf("&#42;enter password twice"); }
558                     else { if (strcmp(status, "try_again") == 0)
559                   { printf("server momentarily busy"); }
560                     else { if (strcmp(status, "illegal_characters") == 0)
561                   { printf("login contained illegal characters"); }
562                     else { if (strcmp(status, "login_exists") == 0)
563                   { printf("login exists"); }
564                     else { if (strcmp(status, "reconfirm_password") == 0)
565                   { printf("password entries did not match"); }
566                     else
567                   { printf("&#42;enter password twice"); } } } } }
568                     printf("</span><br />");
569                   printf("<span class=\"iCreateLogin\">");
570                     if (status == NULL)
571                   { printf("to create new login"); }
572                     else { if (strcmp(status, "try_again") == 0)
573                   { printf("please try again"); }
574                     else { if (strcmp(status, "illegal_characters") == 0)
575                   { printf("only letters and numbers are allowed"); }
576                     else { if (strcmp(status, "login_exists") == 0)
577                   { printf("please try another"); }
578                     else { if (strcmp(status, "reconfirm_password") == 0)
579                   { printf("please reconfirm your password"); }
580                     else
581                   { printf("to create new login"); } } } } }
582                     printf("</span><br />");
583                   printf("<a id=\"iBack\" href=\"login\">&lt; back to login</a></td>");
584               printf("</tr>");
585               printf("<tr>");
586                 printf("<td width=\"50%%\" height=\"72\" align=\"left\"><a class=\"iNew\" onmouseout=\"iNewOff()\" href=\"javascript:explain('new')\"><img width=\"72\" height=\"72\" align=\"middle\" name=\"new\" alt=\"new\" src=\"images/login/new.gif\" />&nbsp;new</a></td>");
587                 printf("<td width=\"50%%\" height=\"72\" align=\"right\"><a class=\"iSettingsFaded\" onmouseover=\"iSettingsOn()\" href=\"javascript:explain('settings')\">settings&nbsp;<img width=\"72\" height=\"72\" align=\"middle\" name=\"settings\" alt=\"settings\" src=\"images/login/settings_faded.gif\" /></a></td>");
588               printf("</tr>");
589             printf("</table>");
590           printf("</div>");
591           printf("<div id=\"iOpenPanel\" style=\"position:absolute; z-index:1; height:100%%; width:100%%; left:0px; top:0px; visibility:hidden\">");
592             printf("<table width=\"100%%\" height=\"100%%\" cellpadding=\"0\" cellspacing=\"0\">");
593               printf("<tr>");
594                 printf("<td width=\"50%%\" height=\"72\" align=\"left\"><a class=\"iOpen\" onmouseout=\"iOpenOff()\" href=\"javascript:explain('open')\"><img width=\"72\" height=\"72\" align=\"middle\" alt=\"open\" src=\"images/login/open.gif\" />&nbsp;open</a></td>");
595                 printf("<td width=\"50%%\" height=\"72\" align=\"right\"><a class=\"iNextFaded\" onmouseover=\"iNextOn()\" href=\"javascript:explain('next')\">next&nbsp;<img width=\"72\" height=\"72\" align=\"middle\" name=\"next\" alt=\"next\" src=\"images/login/next_faded.gif\" /></a></td>");
596               printf("</tr>");
597               printf("<tr>");
598                 printf("<td height=\"100%%\" colspan=\"2\" align=\"center\" valign=\"middle\"><table width=\"354\" cellpadding=\"0\" cellspacing=\"0\">");
599                     printf("<tr>");
600                       printf("<td width=\"354\" height=\"12\"></td>");
601                     printf("</tr>");
602                     printf("<tr>");
603                       printf("<td width=\"354\" height=\"184\" class=\"iPanel\" align=\"right\" valign=\"top\"><a id=\"iX\" href=\"javascript:iOpenOff()\">x</a> &nbsp;<br />");
604                       printf("<center>");
605                         printf("<span class=\"iOpenLarge\">open</span><span class=\"iPanelLarge\"> something saved</span><br />");
606                         printf("<br />");
607                         printf("once logged in, you can find the button for the <span class=\"iOpenSmall\">open</span> menu hiding in this corner.<br />");
608                         printf("<div class=\"iSmallBreak\">");
609                           printf("<br />");
610                           printf("<br />");
611                         printf("</div>");
612                         printf("from there you can open saved documents, media, games, mail and web sites.");
613                       printf("</center></td>");
614                     printf("</tr>");
615                     printf("<tr>");
616                       printf("<td width=\"354\" height=\"18\"></td>");
617                     printf("</tr>");
618                   printf("</table>");
619                   printf("<span class=\"iSmallBreak\"><br /></span>");
620                   printf("<span class=\"iEnterPassword\">");
621                     if (status == NULL)
622                   { printf("&#42;enter password twice"); }
623                     else { if (strcmp(status, "try_again") == 0)
624                   { printf("server momentarily busy"); }
625                     else { if (strcmp(status, "illegal_characters") == 0)
626                   { printf("login contained illegal characters"); }
627                     else { if (strcmp(status, "login_exists") == 0)
628                   { printf("login exists"); }
629                     else { if (strcmp(status, "reconfirm_password") == 0)
630                   { printf("password entries did not match"); }
631                     else
632                   { printf("&#42;enter password twice"); } } } } }
633                     printf("</span><br />");
634                   printf("<span class=\"iCreateLogin\">");
635                     if (status == NULL)
636                   { printf("to create new login"); }
637                     else { if (strcmp(status, "try_again") == 0)
638                   { printf("please try again"); }
639                     else { if (strcmp(status, "illegal_characters") == 0)
640                   { printf("only letters and numbers are allowed"); }
641                     else { if (strcmp(status, "login_exists") == 0)
642                   { printf("please try another"); }
643                     else { if (strcmp(status, "reconfirm_password") == 0)
644                   { printf("please reconfirm your password"); }
645                     else
646                   { printf("to create new login"); } } } } }
647                     printf("</span><br />");
648                   printf("<a id=\"iBack\" href=\"login\">&lt; back to login</a></td>");
649               printf("</tr>");
650               printf("<tr>");
651                 printf("<td width=\"50%%\" height=\"72\" align=\"left\"><a class=\"iNewFaded\" onmouseover=\"iNewOn()\" href=\"javascript:explain('new')\"><img width=\"72\" height=\"72\" align=\"middle\" name=\"new\" alt=\"new\" src=\"images/login/new_faded.gif\" />&nbsp;new</a></td>");
652                 printf("<td width=\"50%%\" height=\"72\" align=\"right\"><a class=\"iSettingsFaded\" onmouseover=\"iSettingsOn()\" href=\"javascript:explain('settings')\">settings&nbsp;<img width=\"72\" height=\"72\" align=\"middle\" name=\"settings\" alt=\"settings\" src=\"images/login/settings_faded.gif\" /></a></td>");
653               printf("</tr>");
654             printf("</table>");
655           printf("</div>");
656           printf("<div id=\"iNextPanel\" style=\"position:absolute; z-index:2; height:100%%; width:100%%; left:0px; top:0px; visibility:hidden\">");
657             printf("<table width=\"100%%\" height=\"100%%\" cellpadding=\"0\" cellspacing=\"0\">");
658               printf("<tr>");
659                 printf("<td width=\"50%%\" height=\"72\" align=\"left\"><a class=\"iOpenFaded\" onmouseover=\"iOpenOn()\" href=\"javascript:explain('open')\"><img width=\"72\" height=\"72\" align=\"middle\" alt=\"open\" src=\"images/login/open_faded.gif\" />&nbsp;open</a></td>");
660                 printf("<td width=\"50%%\" height=\"72\" align=\"right\"><a class=\"iNext\" onmouseout=\"iNextOff()\" href=\"javascript:explain('next')\">next&nbsp;<img width=\"72\" height=\"72\" align=\"middle\" name=\"next\" alt=\"next\" src=\"images/login/next.gif\" /></a></td>");
661               printf("</tr>");
662               printf("<tr>");
663                 printf("<td height=\"100%%\" colspan=\"2\" align=\"center\" valign=\"middle\"><table width=\"354\" cellpadding=\"0\" cellspacing=\"0\">");
664                     printf("<tr>");
665                       printf("<td width=\"354\" height=\"12\"></td>");
666                     printf("</tr>");
667                     printf("<tr>");
668                       printf("<td width=\"354\" height=\"184\" class=\"iPanel\" align=\"right\" valign=\"top\"><a id=\"iX\" href=\"javascript:iNextOff()\">x</a> &nbsp;<br />");
669                         printf("<center>");
670                           printf("<span class=\"iPanelLarge\">all set for now, </span><span class=\"iNextLarge\">next</span><br />");
671                           printf("<br />");
672                           printf("once logged in, you can find the button for the <span class=\"iNextSmall\">next</span> menu hiding in this corner.<br />");
673                           printf("<div class=\"iSmallBreak\">");
674                             printf("<br />");
675                             printf("<br />");
676                           printf("</div>");
677                           printf("from there you can save, switch tasks,<br />");
678                           printf("\"save as\" or exit a task without saving.");
679                         printf("</center></td>");
680                     printf("</tr>");
681                     printf("<tr>");
682                       printf("<td width=\"354\" height=\"18\"></td>");
683                     printf("</tr>");
684                   printf("</table>");
685                   printf("<span class=\"iSmallBreak\"><br /></span>");
686                   printf("<span class=\"iEnterPassword\">");
687                     if (status == NULL)
688                   { printf("&#42;enter password twice"); }
689                     else { if (strcmp(status, "try_again") == 0)
690                   { printf("server momentarily busy"); }
691                     else { if (strcmp(status, "illegal_characters") == 0)
692                   { printf("login contained illegal characters"); }
693                     else { if (strcmp(status, "login_exists") == 0)
694                   { printf("login exists"); }
695                     else { if (strcmp(status, "reconfirm_password") == 0)
696                   { printf("password entries did not match"); }
697                     else
698                   { printf("&#42;enter password twice"); } } } } }
699                     printf("</span><br />");
700                   printf("<span class=\"iCreateLogin\">");
701                     if (status == NULL)
702                   { printf("to create new login"); }
703                     else { if (strcmp(status, "try_again") == 0)
704                   { printf("please try again"); }
705                     else { if (strcmp(status, "illegal_characters") == 0)
706                   { printf("only letters and numbers are allowed"); }
707                     else { if (strcmp(status, "login_exists") == 0)
708                   { printf("please try another"); }
709                     else { if (strcmp(status, "reconfirm_password") == 0)
710                   { printf("please reconfirm your password"); }
711                     else
712                   { printf("to create new login"); } } } } }
713                     printf("</span><br />");
714                   printf("<a id=\"iBack\" href=\"login\">&lt; back to login</a></td>");
715               printf("</tr>");
716               printf("<tr>");
717                 printf("<td width=\"50%%\" height=\"72\" align=\"left\"><a class=\"iNewFaded\" onmouseover=\"iNewOn()\" href=\"javascript:explain('new')\"><img width=\"72\" height=\"72\" align=\"middle\" name=\"new\" alt=\"new\" src=\"images/login/new_faded.gif\" />&nbsp;new</a></td>");
718                 printf("<td width=\"50%%\" height=\"72\" align=\"right\"><a class=\"iSettingsFaded\" onmouseover=\"iSettingsOn()\" href=\"javascript:explain('settings')\">settings&nbsp;<img width=\"72\" height=\"72\" align=\"middle\" name=\"settings\" alt=\"settings\" src=\"images/login/settings_faded.gif\" /></a></td>");
719               printf("</tr>");
720             printf("</table>");
721           printf("</div>");
722           printf("<div id=\"iSettingsPanel\" style=\"position:absolute; z-index:3; height:100%%; width:100%%; left:0px; top:0px; visibility:hidden\">");
723             printf("<table width=\"100%%\" height=\"100%%\" cellpadding=\"0\" cellspacing=\"0\">");
724               printf("<tr>");
725                 printf("<td width=\"50%%\" height=\"72\" align=\"left\"><a class=\"iOpenFaded\" onmouseover=\"iOpenOn()\" href=\"javascript:explain('open')\"><img width=\"72\" height=\"72\" align=\"middle\" alt=\"open\" src=\"images/login/open_faded.gif\" />&nbsp;open</a></td>");
726                 printf("<td width=\"50%%\" height=\"72\" align=\"right\"><a class=\"iNextFaded\" onmouseover=\"iNextOn()\" href=\"javascript:explain('next')\">next&nbsp;<img width=\"72\" height=\"72\" align=\"middle\" name=\"next\" alt=\"next\" src=\"images/login/next_faded.gif\" /></a></td>");
727               printf("</tr>");
728               printf("<tr>");
729                 printf("<td height=\"100%%\" colspan=\"2\" align=\"center\" valign=\"middle\"><table width=\"354\" cellpadding=\"0\" cellspacing=\"0\">");
730                     printf("<tr>");
731                       printf("<td width=\"354\" height=\"12\"></td>");
732                     printf("</tr>");
733                     printf("<tr>");
734                       printf("<td width=\"354\" height=\"184\" class=\"iPanel\" align=\"right\" valign=\"top\"><a id=\"iX\" href=\"javascript:iSettingsOff()\">x</a> &nbsp;<br />");
735                         printf("<center>");
736                           printf("<span class=\"iPanelLarge\">customize </span><span class=\"iSettingsLarge\">settings</span><br />");
737                           printf("<br />");
738                           printf("once logged in, you'll find the button for<br />");
739                           printf("the <span class=\"iSettingsSmall\">settings</span> menu hiding in this corner.");
740                           printf("<div class=\"iSmallBreak\">");
741                             printf("<br />");
742                             printf("<br />");
743                           printf("</div>");
744                           printf("from there you can view and adjust<br />");
745                           printf("all settings, including the clock.");
746                         printf("</center></td>");
747                     printf("</tr>");
748                     printf("<tr>");
749                       printf("<td width=\"354\" height=\"18\"></td>");
750                     printf("</tr>");
751                   printf("</table>");
752                   printf("<span class=\"iSmallBreak\"><br /></span>");
753                   printf("<span class=\"iEnterPassword\">");
754                     if (status == NULL)
755                   { printf("&#42;enter password twice"); }
756                     else { if (strcmp(status, "try_again") == 0)
757                   { printf("server momentarily busy"); }
758                     else { if (strcmp(status, "illegal_characters") == 0)
759                   { printf("login contained illegal characters"); }
760                     else { if (strcmp(status, "login_exists") == 0)
761                   { printf("login exists"); }
762                     else { if (strcmp(status, "reconfirm_password") == 0)
763                   { printf("password entries did not match"); }
764                     else
765                   { printf("&#42;enter password twice"); } } } } }
766                     printf("</span><br />");
767                   printf("<span class=\"iCreateLogin\">");
768                     if (status == NULL)
769                   { printf("to create new login"); }
770                     else { if (strcmp(status, "try_again") == 0)
771                   { printf("please try again"); }
772                     else { if (strcmp(status, "illegal_characters") == 0)
773                   { printf("only letters and numbers are allowed"); }
774                     else { if (strcmp(status, "login_exists") == 0)
775                   { printf("please try another"); }
776                     else { if (strcmp(status, "reconfirm_password") == 0)
777                   { printf("please reconfirm your password"); }
778                     else
779                   { printf("to create new login"); } } } } }
780                     printf("</span><br />");
781                   printf("<a id=\"iBack\" href=\"login\">&lt; back to login</a></td>");
782               printf("</tr>");
783               printf("<tr>");
784                 printf("<td width=\"50%%\" height=\"72\" align=\"left\"><a class=\"iNewFaded\" onmouseover=\"iNewOn()\" href=\"javascript:explain('new')\"><img width=\"72\" height=\"72\" align=\"middle\" name=\"new\" alt=\"new\" src=\"images/login/new_faded.gif\" />&nbsp;new</a></td>");
785                 printf("<td width=\"50%%\" height=\"72\" align=\"right\"><a class=\"iSettings\" onmouseout=\"iSettingsOff()\" href=\"javascript:explain('settings')\">settings&nbsp;<img width=\"72\" height=\"72\" align=\"middle\" name=\"settings\" alt=\"settings\" src=\"images/login/settings.gif\" /></a></td>");
786               printf("</tr>");
787             printf("</table>");
788           printf("</div>");
789         printf("</body>");
790       printf("</html>\n");
791       printf("<!--===========================================================================-->\n");
792       printf("<!--                   Copyright and Trademark Legal Notice                    -->\n");
793       printf("<!--===========================================================================-->\n");
794       printf("<!--                                                                           -->\n");
795       printf("<!--                  All textual and graphical site content:                  -->\n");
796       printf("<!--                                                                           -->\n");
797       printf("<!--  Copyright (C) 2001 - 2005 Brent Angeline / interos.com / interos.        -->\n");
798       printf("<!--  Reproduction in whole or part without written permission is prohibited.  -->\n");
799       printf("<!--  All rights reserved.  interos.com and the interos logos are              -->\n");
800       printf("<!--  trademarks of Brent Angeline / interos.com / interos.                    -->\n");
801       printf("<!--  All other company names, product names and services mentioned herein     -->\n");
802       printf("<!--  may be the property of their respective owners.                          -->\n");
803       printf("<!--                                                                           -->\n");
804       printf("<!--===========================================================================-->\n");
805       printf("<!--                         e-mail: info@interos.com                          -->\n");
806       printf("<!--===========================================================================-->");
809 /***********************************************************************/
810 /*                  Copyright and Trademark Statement                  */
811 /***********************************************************************/
812 /*                                                                     */
813 /*          All original textual and graphical site content:           */
814 /*                                                                     */
815 /*  Copyright 2001-2008 Brent Angeline and interos LLC.  All rights    */
816 /*  reserved.  Reproduction in whole or in part without written        */
817 /*  permission is prohibited.  interos and the interos logos are       */
818 /*  trademarks of Brent Angeline and interos LLC.  All other company,  */
819 /*  product, and service names mentioned herein may be the properties  */
820 /*  of their respective owners.  Comments in the interos.org forums    */
821 /*  are the properties of their respective authors.  All software      */
822 /*  developed in the forums is open source and belongs to everyone.    */
823 /*                                                                     */
824 /***********************************************************************/
825 /*                      e-mail: info@interos.com                       */
826 /***********************************************************************/