OBJ=o
STATIC=a
AR_FLAGS=rcs
+AR_PROC=cat
include $(PWD)/Platform/$(PLATFORM).mk
.PHONY: all clean
all: common.$(STATIC)
common.$(STATIC): $(OBJS)
- $(AR) $(AR_FLAGS)$@ $(OBJS)
+ $(AR) $(AR_FLAGS)$@ `echo $(OBJS) | $(AR_PROC)`
.c.$(OBJ):
$(CC) $(CFLAGS) -c -o $@ $<
clean:
- rm -f *.o *.a *.lib
+ rm -f *.o *.a *.lib *.obj
}
char** cm_scandir(const char* path) {
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__BORLANDC__)
return NULL;
#else
DIR* dir = opendir(path);
$(CC) $(LDFLAGS) -shared -o $@ $< ../Common/common.$(STATIC) $(LIBS)
.c.$(OBJ):
- $(CC) $(CFLAGS) -c -o $@ $<
+ $(CC) $(CFLAGS) -I ../Server -c -o $@ $<
clean:
- rm -f *.o *.so *.a *.dll *.dll
+ rm -f *.o *.so *.a *.dll
/* $Id$ */
-#include "../Server/tw_module.h"
+#include <tw_module.h>
#include <cm_string.h>
/* $Id$ */
/* This module will accept all directives, and always return 403 on the access. */
-#include "../Server/tw_module.h"
+#include <tw_module.h>
int mod_init(struct tw_config* config, struct tw_tool* tools) {
tools->log("Example", "This is an example module");
/* $Id$ */
-#include "../Server/tw_module.h"
+#include <tw_module.h>
#include <cm_string.h>
--- /dev/null
+# $Id$
+
+PREFIX = C:/Tewi
+
+CC = ../bcc.sh
+AR = tlib
+AR_FLAGS =
+AR_PROC = grep -Eo "[^ ]+" | xargs -I {} echo + {}
+CFLAGS = -g -std=c99 -DPREFIX=\"$(PREFIX)\" -I ../Common -fPIC
+LDFLAGS =
+LIBS = -lws2_32
+EXEC =
+STATIC = lib
+LIBSUF = .dll
+OBJ = obj
+REQOBJS = tewi_bcc.res
STATIC = lib
LIBSUF = .dll
OBJ = obj
+PREOBJS = tewi_vc6.res
tewi_strip$(EXEC): tewi$(EXEC)
-tewi$(EXEC): $(OBJS) ../Common/common.$(STATIC)
+tewi$(EXEC): $(OBJS) ../Common/common.$(STATIC) $(REQOBJS)
$(CC) $(LDFLAGS) $(EXTLDFLAGS) -o $@ $(OBJS) $(EXTLIBS) ../Common/common.$(STATIC) $(LIBS)
$(SERVADD)
tewi.res: tewi.rc ../Binary/tewi.ico
$(WINDRES) tewi.rc -O coff -o $@
+tewi_vc6.res: tewi.rc ../Binary/tewi.ico
+ rc /fo$@ tewi.rc
+
+tewi_bcc.res: tewi.rc ../Binary/tewi.ico
+ brc32 -r -fo$@ tewi.rc
+
clean:
rm -f *.o tewi *.exe *.res *.elf *.sfo *.pbp *.self *.pkg *.obj
#include <stdlib.h>
#include <string.h>
-#ifndef _MSC_VER
+#if !defined(_MSC_VER) && !defined(__BORLANDC__)
#include <unistd.h>
#endif
-#if defined(__MINGW32__) || defined(_MSC_VER)
+#if defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__)
#include <winsock2.h>
#endif
#endif
) {
for(i = 1; r[i] != NULL; i++) {
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__BORLANDC__)
uint32_t port = atoi(r[i]);
#else
uint64_t port = atoi(r[i]);
#endif
int j;
cm_log("Config", "Going to listen at port %d%s", (int)port, cm_strcaseequ(r[0], "ListenSSL") ? " with SSL" : "");
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__BORLANDC__)
if(cm_strcaseequ(r[0], "ListenSSL")) port |= (1UL << 31);
#else
if(cm_strcaseequ(r[0], "ListenSSL")) port |= (1ULL << 31);
#include <stdlib.h>
#include <string.h>
-#if defined(__MINGW32__) || defined(_MSC_VER)
+#if defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__)
#include <winsock2.h>
#else
#ifdef USE_POLL
#include "../config.h"
-#ifndef _MSC_VER
+#ifdef __BORLANDC__
+
+#pragma resource "tewi_bcc.res"
+
+#endif
+
+#if !defined(_MSC_VER) && !defined(__BORLANDC__)
#include <unistd.h>
#endif
#include <stdio.h>
#include "tw_server.h"
#include "tw_version.h"
-#if defined(__MINGW32__) || defined(_MSC_VER)
+#if defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__)
#include <windows.h>
#endif
#define printf(...) tt_printf(__VA_ARGS__)
#define STDERR_LOG(...) tt_printf(__VA_ARGS__)
-#elif defined(_MSC_VER)
+#elif defined(_MSC_VER) || defined(__BORLANDC__)
void STDERR_LOG(const char* format, ...) {
va_list args;
va_start(args, format);
r = cm_strcat(tw_server, " running...");
cm_force_log(r);
free(r);
-#if !defined(__MINGW32__) && !defined(_MSC_VER)
+#if !defined(__MINGW32__) && !defined(_MSC_VER) && !defined(__BORLANDC__)
signal(SIGCHLD, SIG_IGN);
signal(SIGPIPE, SIG_IGN);
#else
#include <string.h>
#include <stdlib.h>
-#ifndef _MSC_VER
+#if !defined(_MSC_VER) && !defined(__BORLANDC__)
#include <unistd.h>
#endif
#else
-#if defined(__MINGW32__) || defined(_MSC_VER)
+#if defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__)
#include <windows.h>
#else
#include <dlfcn.h>
char* p = getcwd(NULL, 0);
void* lib;
chdir(config.server_root);
-#if defined(__MINGW32__) || defined(_MSC_VER)
+#if defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__)
lib = LoadLibraryA(path);
#else
lib = dlopen(path, RTLD_LAZY);
}
void* tw_module_symbol(void* mod, const char* sym) {
-#if defined(__MINGW32__) || defined(_MSC_VER)
+#if defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__)
return GetProcAddress(mod, sym);
#else
return dlsym(mod, sym);
#include "tw_module.h"
#include "tw_version.h"
-#ifndef _MSC_VER
+#if !defined(_MSC_VER) && !defined(__BORLANDC__)
#include <unistd.h>
#endif
#include <string.h>
#include <cm_log.h>
#include <cm_dir.h>
-#if defined(__MINGW32__) || defined(_MSC_VER)
+#if defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__)
#ifndef NO_GETADDRINFO
#include <ws2tcpip.h>
#include <wspiapi.h>
SOCKADDR addresses[MAX_PORTS];
int sockets[MAX_PORTS];
-#if defined(__MINGW32__) || defined(_MSC_VER)
+#if defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__)
const char* reserved_names[] = {"CON", "PRN", "AUX", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9"};
#endif
}
void close_socket(int sock) {
-#if defined(__MINGW32__) || defined(_MSC_VER)
+#if defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__)
closesocket(sock);
#else
close(sock);
int tw_server_init(void) {
int i;
-#if defined(__MINGW32__) || defined(_MSC_VER)
+#if defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__)
WSADATA wsa;
WSAStartup(MAKEWORD(2, 0), &wsa);
#endif
#else
int sock = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
#endif
-#if defined(__MINGW32__) || defined(_MSC_VER)
+#if defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__)
if(sock == INVALID_SOCKET)
#else
if(sock < 0)
f = NULL;
doc = NULL;
}
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__BORLANDC__)
sprintf(construct, "%lu", (unsigned long)size);
#else
sprintf(construct, "%llu", (unsigned long long)size);
#if defined(__MINGW32__) || defined(_MSC_VER)
unsigned int WINAPI tw_server_pass(void* ptr) {
+#elif defined(__BORLANDC__)
+void tw_server_pass(void* ptr) {
#elif defined(__HAIKU__)
int32_t tw_server_pass(void* ptr) {
#elif defined(_PSP) || defined(__PPU__)
int tw_server_pass(void* ptr) {
#endif
-#if defined(__HAIKU__) || defined(__MINGW32__) || defined(_PSP) || defined(__PPU__) || defined(_MSC_VER)
+#if defined(__HAIKU__) || defined(__MINGW32__) || defined(_PSP) || defined(__PPU__) || defined(_MSC_VER) || defined(__BORLANDC__)
#define FREE_PTR
int sock = ((struct pass_entry*)ptr)->sock;
bool ssl = ((struct pass_entry*)ptr)->ssl;
time_t t;
struct tm* btm;
strptime(req.headers[i + 1], "%a, %d %b %Y %H:%M:%S GMT", &tm);
-#if defined(__MINGW32__) || defined(_PSP) || defined(__PPU__) || defined(__ps2sdk__) || defined(_MSC_VER)
+#if defined(__MINGW32__) || defined(_PSP) || defined(__PPU__) || defined(__ps2sdk__) || defined(_MSC_VER) || defined(__BORLANDC__)
t = 0;
btm = localtime(&t);
cmtime = mktime(&tm);
char* path;
char* rpath;
struct stat st;
+ char* slash;
cm_log("Server", "Document root is %s", vhost_entry->root == NULL ? "not set" : vhost_entry->root);
path = cm_strcat(vhost_entry->root == NULL ? "" : vhost_entry->root, req.path);
cm_log("Server", "Filesystem path is %s", path);
-#if defined(__MINGW32__) || defined(_MSC_VER)
+#if defined(_MSC_VER) || defined(__BORLANDC__)
+ for(i = strlen(path) - 1; i >= 0; i--){
+ if(path[i] == '/'){
+ path[i] = 0;
+ }else{
+ break;
+ }
+ }
+#endif
+#if defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__)
rpath = cm_strdup(path);
for(i = strlen(rpath) - 1; i >= 0; i--) {
if(rpath[i] == '/') {
tw_http_error(s, sock, 403, name, port, vhost_entry);
} else if(S_ISDIR(st.st_mode)) {
if(req.path[strlen(req.path) - 1] != '/') {
- char* headers[3] = {"Location", cm_strcat(req.path, "/"), NULL};
+ char* headers[3] = {"Location", NULL, NULL};
+ headers[1] = cm_strcat(req.path, "/");
cm_log("Server", "Accessing directory without the slash at the end");
_tw_process_page(s, sock, tw_http_status(301), NULL, NULL, NULL, 0, headers, 0, 0);
free(headers[1]);
SSL_free(s);
#endif
close_socket(sock);
-#if defined(__MINGW32__) || defined(_MSC_VER)
- _endthread(0);
+#if defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__)
+ _endthread(
+#ifndef __BORLANDC__
+ 0
+#endif
+ );
#elif defined(__HAIKU__)
exit_thread(0);
#endif
+#ifndef __BORLANDC__
return 0;
+#endif
}
#ifdef SERVICE
extern SERVICE_STATUS_HANDLE status_handle;
#endif
-#if defined(__MINGW32__) || defined(__HAIKU__) || defined(_MSC_VER)
+#if defined(__MINGW32__) || defined(__HAIKU__) || defined(_MSC_VER) || defined(__BORLANDC__)
struct thread_entry {
#ifdef __HAIKU__
thread_id thread;
fd_set fdset;
struct timeval tv;
#endif
-#if defined(__MINGW32__) || defined(__HAIKU__) || defined(_MSC_VER)
+#if defined(__MINGW32__) || defined(__HAIKU__) || defined(_MSC_VER) || defined(__BORLANDC__)
struct thread_entry threads[2048];
for(i = 0; i < sizeof(threads) / sizeof(threads[0]); i++) {
threads[i].used = false;
#endif
#endif
if(ret == -1) {
-#if !defined(__MINGW32__) && !defined(_MSC_VER)
+#if !defined(__MINGW32__) && !defined(_MSC_VER) && !defined(__BORLANDC__)
cm_log("Server", "Select failure: %s", strerror(errno));
#endif
break;
SOCKADDR claddr;
socklen_t clen = sizeof(claddr);
int sock = accept(sockets[i], (struct sockaddr*)&claddr, &clen);
-#if defined(__MINGW32__) || defined(__HAIKU__) || defined(_PSP) || defined(__PPU__) || defined(_MSC_VER)
+#if defined(__MINGW32__) || defined(__HAIKU__) || defined(_PSP) || defined(__PPU__) || defined(_MSC_VER) || defined(__BORLANDC__)
int j;
struct pass_entry* e = malloc(sizeof(*e));
cm_log("Server", "New connection accepted");
e->sock = sock;
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__BORLANDC__)
e->ssl = config.ports[i] & (1UL << 31);
#else
e->ssl = config.ports[i] & (1ULL << 31);
e->port = config.ports[i];
e->addr = claddr;
#endif
-#if defined(__MINGW32__) || defined(_MSC_VER)
+#if defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__)
_beginthread(tw_server_pass, 0, e);
#elif defined(_PSP) || defined(__PPU__)
tw_server_pass(e);
//#include <sys/cdefs.h>
//__RCSID("$NetBSD: strptime.c,v 1.62 2017/08/24 01:01:09 ginsbach Exp $");
-#if defined(__MINGW32__) || defined(_MSC_VER)
+#if defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__)
#include <ctype.h>
#include <string.h>
#define isleap_sum(a, b) isleap((a) % 400 + (b) % 400)
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__BORLANDC__)
#define tzname _tzname
#define strncasecmp _strnicmp
#endif
+#ifdef __BORLANDC__
+char* cm_strdup(const char* str);
+
+int _strnicmp(const char* _a, const char* _b, int len){
+ char* a = cm_strdup(_a);
+ char* b = cm_strdup(_b);
+ int i;
+ char* r;
+ for(i = 0; a[i] != 0; i++){
+ a[i] = tolower(a[i]);
+ }
+ for(i = 0; b[i] != 0; i++){
+ b[i] = tolower(b[i]);
+ }
+ r = strncmp(a, b, len);
+ free(a);
+ free(b);
+ return r;
+}
+#endif
+
#ifdef TM_ZONE
static char* utc = "UTC";
#endif
continue;
#ifndef TIME_MAX
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__BORLANDC__)
#define TIME_MAX INT32_MAX
#else
#define TIME_MAX INT64_MAX
case 's': /* seconds since the epoch */
{
time_t sse = 0;
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__BORLANDC__)
uint32_t rulim = TIME_MAX;
#else
uint64_t rulim = TIME_MAX;
rulim /= 10;
} while ((sse * 10 <= TIME_MAX) &&
rulim && *bp >= '0' && *bp <= '9');
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__BORLANDC__)
if (sse < 0 || (uint32_t)sse > TIME_MAX) {
#else
if (sse < 0 || (uint64_t)sse > TIME_MAX) {
continue;
}
#ifdef _WIN32
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__BORLANDC__)
if (1)
#else
if (localtime_s(tm, &sse) == 0)
#include <stdint.h>
#include <stdbool.h>
-#if defined(__MINGW32__) || defined(_MSC_VER)
+#if defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__)
#include <winsock2.h>
#define NO_IPV6
#else
#define MAX_INDEX 1024
#define MAX_README 8
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__BORLANDC__)
#define NUM1024 1024UL
#else
#define NUM1024 1024ULL
};
struct tw_config {
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__BORLANDC__)
uint32_t ports[MAX_PORTS + 1];
#else
uint64_t ports[MAX_PORTS + 1]; /* If port & (1 << 32) is non-zero, it is SSL */
"Windows-MinGW32"
#elif defined(_MSC_VER)
"Windows-MSVC"
+#elif defined(__BORLANDC__)
+ "Windows-BCC"
#elif defined(__HAIKU__)
"Haiku"
#elif defined(__CYGWIN__)
--- /dev/null
+#!/bin/sh
+# $Id$
+# Wrapper for CL. VC6 sucks.
+
+outfile="a.out"
+dowhat=""
+options="-I../VC6Compat -tWM"
+obj=0
+source=""
+libraries=""
+link=""
+shared=0
+
+for i in "$@"; do
+ if [ "$i" = "-o" ]; then
+ dowhat="output"
+ elif [ "$i" = "-I" ]; then
+ dowhat="include"
+ elif [ "$i" = "-c" ]; then
+ options="$options -c"
+ obj=1
+ elif [ "$i" = "-fPIC" ]; then
+ :
+ elif [ "$i" = "-g" ]; then
+ :
+ elif [ "$i" = "-std=c99" ]; then
+ :
+ elif [ "$i" = "-shared" ]; then
+ options="$options -tWD"
+ shared=1
+ elif [ "`echo "$i" | grep -Eo "^-D"`" = "-D" ]; then
+ options="$options -`echo "$i" | sed "s/^-//g"`"
+ elif [ "`echo "$i" | grep -Eo "^-l"`" = "-l" ]; then
+ libraries="$libraries `echo "$i" | sed "s/^-l//g"`.lib"
+ elif [ "$dowhat" = "output" ]; then
+ dowhat=""
+ outfile="$i"
+ elif [ "$dowhat" = "include" ]; then
+ dowhat=""
+ options="$options -I$i"
+ elif [ ! "`echo "$i" | grep -Eo "^."`" = "-" ]; then
+ source="$source $i"
+ fi
+done
+if [ "$obj" = "1" ]; then
+ options="$options -o$outfile"
+else
+ options="$options -e$outfile"
+fi
+if [ ! "$libraries" = "" ]; then
+ link="$libraries"
+fi
+construct="bcc32 $options $source $link"
+echo "Run: $construct"
+$construct
#define SSL void
#endif
-#if (defined(__MINGW32__) || defined(_MSC_VER)) && defined(USE_POLL)
+#if (defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__)) && defined(USE_POLL)
#undef USE_POLL
/* Force select(2) for Windows */
#endif
-#if (defined(__MINGW32__) || defined(_MSC_VER)) && defined(HAS_CHROOT)
+#if (defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__)) && defined(HAS_CHROOT)
#undef HAS_CHROOT
/* Windows should not have chroot */
#endif
-#if defined(_MSC_VER) && !defined(NO_GETADDRINFO)
+#if (defined(_MSC_VER) || defined(__BORLANDC__)) && !defined(NO_GETADDRINFO)
#define NO_GETADDRINFO
/* Do not use getaddrinfo */
#endif