#ifndef IDX
#define IDX 1
#endif
#if IDX==1 // final
     #include/*           micro HTTP server           */<stdio.h>
    #include/*           usage: ./http [port]          */<stdlib.h>
   #include/*                                           */<string.h>
    #include/*   the default port is 8080, files are   */<unistd.h>
     #include/*    read from the current directory    */<netdb.h>
                 int main(int n,char**
                 V){int t=SOCK_STREAM,
                 N=SO_REUSEADDR,i=1,c=
                        htons(n
 >1?atoi       (V[1]):  101*80)  ;struct sockaddr_in s
 ={(0)};       void*f=  &s;char  *m,b[1036];s.sin_port
 =c;for(       N=!((t=  socket(  s.sin_family=AF_INET,
 #define       http(c)  setsock         ##opt(\
 t,SOL_S       ##OCKET  ,N,&i,c         (i)),bi  ##nd(t,f,c(s))<0)||
 t,0))<0       ||(http  (sizeof         )listen  (t,5))<<10;N&&(0)<=(c
 =accept(t,0,0));close  (c)){b[         n=recv(  c,b,N,0),0>n?0:n]=0;n
 =!memcmp(b,"GET /",5)  <<6;for         (i=4;n^  '?'&&n<       127&&n>
 32;)n=b[++i];f=0;m=n?  strcpy(         b+i,b[i  -1]-'/'       ?"":"i"
 "ndex."       "html")  ,printf         ("%s\n"  ,(5+b))       ,strstr
 (b,"/."       )||0==(  f=fopen         (&b[5],  "rb"))?"404 Not Foun"
 "d":"2"       "00 OK"                  :"501 "  "Not Implemented";for
 ((send)       ((c),b,                  sprintf  (b, "HTTP/1.1 %s\n"
 "\r\n%"       "s",m,f                  ?"":m),  0);f&&!
 ((send)       (c,b+0,                  fread(b  ,1,N,f)
                                                 ,0)-N&& 
                                                 fclose(
                                                 f)|404*
                                                 N););}}