CGITEST.C
上传用户:sunrenlu
上传日期:2022-06-13
资源大小:1419k
文件大小:2k
源码类别:

操作系统开发

开发平台:

DOS

  1. /* This example show a CGI script in use
  2.  *
  3.  */
  4. #include <rtos.h>
  5. #include <net.h>
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <time.h>
  9. #include <string.h>
  10. #include <graph.h>
  11. #include <smtpcli.h>
  12. #include <httpd.h>
  13. #include <strlst.h>
  14. crit_x *dos;
  15. void web_showform( tcp_Socket *s )
  16. {
  17.     sock_puts( s, "<form method="post" action="square">"
  18.                   "Enter a number "
  19.                   "<input type="TEXT" name="NUMBER" value="23">"
  20.                   "<input type="submit" value="Square">"
  21.                   "<input type="reset"  value="Reset">"
  22.                   "</form>");
  23.     html_tail( s );
  24. }
  25. void web_index( tcp_Socket *s )
  26. {
  27.     FILE *f;
  28.     char buf[128];
  29.     sock_puts(s, "Content-Type: text/htmlrn");
  30.     html_hdr( s, "Simple CGI");
  31.     web_showform( s );
  32. }
  33. void web_result( tcp_Socket *s )
  34. {
  35.     stringlist *sl;
  36.     char *p, *q;
  37.     DWORD x = 0;
  38.     char buf[ 128 ];
  39.     sock_puts(s, "Content-Type: text/htmlrn");
  40.     sl = cgi_getstrings( s );
  41.     if ( (p = strlst_findfirst( sl, "NUMBER", NULL, &q )) != NULL )
  42.         x = atol( q );
  43.     cgi_freestrings( sl );
  44.     html_hdr(s,"Simple CGI");
  45.     sprintf( buf, "<p>%lu squared is %lu</p>", x, x*x );
  46.     sock_puts(s, buf );
  47.     web_showform( s );
  48. }
  49. /*
  50.  * - the web server calls this proc for each web request
  51.  * - it is called in the context of *one* of the HTTPD threads,
  52.  *   though which is not known or important
  53.  * - multiple threads may be in the same proc at the same time
  54.  */
  55. void user_proc( tcp_Socket *s, char *cmd, char *file, char *ext )
  56. {
  57.     if ( !stricmp( file, "/" )) web_index( s );
  58.     if ( !stricmp( file, "/square" )) web_result( s );
  59. }
  60. main()
  61. {
  62.     int i;
  63.     kdebug = 1;
  64.     rt_init(100);
  65.     dos = cs_alloc();
  66.     sock_init();            /* initialize network */
  67.     cputs("starting...rn");
  68. #define MAXHTTPD 5
  69.     for ( i = 0 ; i < MAXHTTPD; ++i )
  70.         rt_newthread( httpdthread, (DWORD)&user_proc, 8192, 0, "httpd worker" );
  71.     do {
  72.         /* nothing */
  73.         rt_yield();
  74.     } while ( 1 );
  75. }