diff options
author | danglassey <danglassey> | 2002-08-14 09:57:17 +0000 |
---|---|---|
committer | danglassey <danglassey> | 2002-08-14 09:57:17 +0000 |
commit | daa67ff1f728c07f2a116ee9a9f4505479ca6808 (patch) | |
tree | c224a537d30480002ae0560cc9104b543b4d1b5e /utilities/cipherraw.cpp | |
parent | 6d6973e035aac5ec1676efccd5b8ada70c40b639 (diff) | |
download | sword-sf-cvs-daa67ff1f728c07f2a116ee9a9f4505479ca6808.tar.gz |
Initial import from crosswire CVS for syncingimport-1.1.1
Diffstat (limited to 'utilities/cipherraw.cpp')
-rw-r--r-- | utilities/cipherraw.cpp | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/utilities/cipherraw.cpp b/utilities/cipherraw.cpp new file mode 100644 index 0000000..8550609 --- /dev/null +++ b/utilities/cipherraw.cpp @@ -0,0 +1,100 @@ +#include <ctype.h> +#include <stdio.h> +#include <fcntl.h> +#include <errno.h> +#include <stdlib.h> +#include <string.h> + +#ifndef __GNUC__ +#include <io.h> +#else +#include <unistd.h> +#endif + +#include <swcipher.h> +#include <versekey.h> +#include <rawverse.h> + + +int main(int argc, char **argv) { + SWCipher *zobj; + VerseKey key; + RawVerse *rawdrv; + int ofd[2], oxfd[2]; + long tmpoff = 0, offset, loffset = 0, lzoffset = 0; + unsigned short size, lsize = 0, lzsize; + char *tmpbuf; + + if (argc != 3) { + printf("%d %d\n", sizeof(long), sizeof(unsigned short)); + fprintf(stderr, "usage: %s <datapath> \"<key>\"\n", argv[0]); + exit(1); + } + + rawdrv = new RawVerse(argv[1]); + zobj = new SWCipher((unsigned char *)argv[2]); + +#ifndef O_BINARY +#define O_BINARY 0 +#endif + + tmpbuf = new char [ strlen(argv[1]) + 11 ]; + sprintf(tmpbuf, "%sot.zzz", argv[1]); + ofd[0] = open(tmpbuf, O_WRONLY|O_BINARY|O_CREAT); + sprintf(tmpbuf, "%sot.zzz.vss", argv[1]); + oxfd[0] = open(tmpbuf, O_WRONLY|O_BINARY|O_CREAT); + sprintf(tmpbuf, "%snt.zzz", argv[1]); + ofd[1] = open(tmpbuf, O_WRONLY|O_BINARY|O_CREAT); + sprintf(tmpbuf, "%snt.zzz.vss", argv[1]); + oxfd[1] = open(tmpbuf, O_WRONLY|O_BINARY|O_CREAT); + + delete [] tmpbuf; + + printf("\n"); + write(oxfd[0], &lzoffset, 4); + write(oxfd[0], &lzsize, 2); + write(oxfd[1], &lzoffset, 4); + write(oxfd[1], &lzsize, 2); + + key.AutoNormalize(0); + key.Headings(1); + for (key.Index(0); (!key.Error()); key++) { + rawdrv->findoffset(key.Testament(), key.Index(), &offset, &size); + printf("%s: OLD offset: %d; size: %d\n", (const char *)key, offset, size); + + if ((offset == loffset) && (size == lsize)) { + printf("using previous offset,size\n", size); + offset = lseek(oxfd[key.Testament() - 1], 0, SEEK_CUR); + printf("%ld %ld %d \n", offset, lzoffset, lzsize); + write(oxfd[key.Testament() - 1], &lzoffset, 4); + write(oxfd[key.Testament() - 1], &lzsize, 2); + } + else { + lsize = size; + loffset = offset; + + if (size) { + tmpbuf = (char *) calloc(size + 2, 1); + rawdrv->readtext(key.Testament(), offset, size + 2, tmpbuf); + zobj->Buf(tmpbuf, size); + zobj->cipherBuf((unsigned int *)&size); + free(tmpbuf); + } + offset = lseek(ofd[key.Testament() - 1], 0, SEEK_CUR); + tmpoff = lseek(oxfd[key.Testament() - 1], 0, SEEK_CUR); + printf("%s: (%ld) NEW offset: %ld; size: %d\n", (const char *)key, tmpoff, offset, size); + write(oxfd[key.Testament() - 1], &offset, 4); + if (size) + write(ofd[key.Testament() - 1], zobj->cipherBuf((unsigned int *)&size), size); + lzoffset = offset; + write(oxfd[key.Testament() - 1], &size, 2); + lzsize = size; + } + } + delete zobj; + close(ofd[0]); + close(oxfd[0]); + close(ofd[1]); + close(oxfd[1]); + return 0; +} |