#include <string.h>
#include <ctype.h>
#include <Python.h>


char rot13(char c)
    {
    if (isupper(c))
        return 'A' + (c-'A'+13)%26;
    else if (islower(c))
        return 'a' + (c-'a'+13)%26;
    else
        return c;
    }


static PyObject* encrypt(PyObject *self, PyObject *args)
	{
    char *string, *returnstring, *p;
	if (!PyArg_ParseTuple(args, "s", &string))
        	return NULL;
    returnstring = strdup(string);
    for (p=returnstring; *p; p++)
        *p = rot13(*p);
	return Py_BuildValue("s", returnstring);
	}

static PyObject* decrypt(PyObject *self, PyObject *args)
	{
    char *string, *returnstring, *p;
	if (!PyArg_ParseTuple(args, "s", &string))
        	return NULL;
    returnstring = strdup(string);
    for (p=returnstring; *p; p++)
        *p = rot13(*p);
	return Py_BuildValue("s", returnstring);
	}


static PyMethodDef newMethods[] =
	{
	{"encrypt", encrypt, METH_VARARGS,
		"Returns an encrypted version of a string."},
	{"decrypt", encrypt, METH_VARARGS,
		"Returns an decrypted version of a string."},
	{NULL, NULL, 0, NULL}
	};


main(int argc,char **argv)
    {
    FILE *fp;
    char *filename;
    if (argc < 2)
        {
        fprintf(stderr, "Usage: embed1 script.py\n");
        exit(1);
        }
    filename = argv[1];

    Py_Initialize();

	Py_InitModule("supercrypto", newMethods);

    fp = fopen(filename, "r");
    if (!fp)
        {
        perror(filename);
        exit(1);
        }
    PyRun_SimpleFile(fp, filename);
    fclose(fp);

    Py_Finalize();
    }


