Browse Source

[milestone] at least it compiles (2 of 2)

refactor
suhrke 5 years ago
parent
commit
16a5086200
  1. 4
      Makefile
  2. 6
      source/Bitmap.h
  3. 7
      source/Compress.h
  4. 54
      source/Crc16.h
  5. 25
      source/Decoder.cpp
  6. 10
      source/Decoder.h
  7. 240
      source/Ecc.h
  8. 15
      source/Fileproc.cpp
  9. 9
      source/Fileproc.h
  10. 38
      source/Global.h
  11. 8
      source/Printer.cpp
  12. 11
      source/Printer.h
  13. 27
      source/main.cpp

4
Makefile

@ -5,10 +5,10 @@ CFLAGS=-std=c++11 -I"$(SDIR)" -I"$(SDIR)/cxxopts/include" @@ -5,10 +5,10 @@ CFLAGS=-std=c++11 -I"$(SDIR)" -I"$(SDIR)/cxxopts/include"
all: main
main: $(SDIR)/main.cpp $(SDIR)/Decoder.cpp $(SDIR)/Printer.cpp $(SDIR)/Fileproc.cpp $(SDIR)/Ecc.cpp $(SDIR)/Crc16.cpp
main: $(SDIR)/main.cpp $(SDIR)/Decoder.cpp $(SDIR)/Printer.cpp $(SDIR)/Fileproc.cpp
$(CC) $^ $(CFLAGS) -o $(EX)
msys: $(SDIR)/main.cpp $(SDIR)/Decoder.cpp $(SDIR)/Printer.cpp $(SDIR)/Fileproc.cpp $(SDIR)/Ecc.cpp $(SDIR)/Crc16.cpp
msys: $(SDIR)/main.cpp $(SDIR)/Decoder.cpp $(SDIR)/Printer.cpp $(SDIR)/Fileproc.cpp
$(CC) $^ $(CFLAGS) -o $(EX) -mwin32
clean:

6
source/Bitmap.h

@ -18,17 +18,13 @@ @@ -18,17 +18,13 @@
#ifndef BITMAP_H
#define BITMAP_H
#include <cstdint>
#define BI_RGB 16 //bitmap value for uncompressed color data
typedef struct BITMAPFILEHEADER {
uint16_t bfType = 'BM'; //filetype, must be BM
uint32_t bfSize; //size in bytes of bitmap file

7
source/Compress.h

@ -20,17 +20,11 @@ @@ -20,17 +20,11 @@
#define COMPRESS_H
#include "Global.h"
#define DBITLEN 16 // Max. dictionary size is 2**DBITLEN
#define NBITS 8 // We deal with bytes, aren't we?
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ulong;
@ -38,6 +32,7 @@ typedef unsigned short ushort; @@ -38,6 +32,7 @@ typedef unsigned short ushort;
typedef struct t_centry { // Entry in encoding dictionary
ushort character;
ushort code;

54
source/Crc16.h

@ -19,6 +19,58 @@ @@ -19,6 +19,58 @@
#ifndef CRC16_H
#define CRC16_H
unsigned short Crc16(unsigned char *data, int length);
////////////////////////////////////////////////////////////////////////////////
// //
// Fast 16-bit CRC (CCITT version). //
// //
////////////////////////////////////////////////////////////////////////////////
const unsigned int crctab[256] = {
0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,
0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,
0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,
0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,
0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,
0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,
0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,
0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,
0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,
0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,
0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,
0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,
0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,
0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,
0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,
0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,
0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,
0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
};
inline unsigned short Crc16(unsigned char *data,int length) {
unsigned int crc;
for (crc=0; length>0; length--)
crc=((crc<<8)^crctab[((crc>>8)^(*data++))]) & 0xFFFF;
return (unsigned short)crc;
};
#endif //CRC16_H

25
source/Decoder.cpp

@ -28,27 +28,14 @@ @@ -28,27 +28,14 @@
// //
////////////////////////////////////////////////////////////////////////////////
//#include <windows.h>
//#include <commctrl.h>
#include <stdio.h>
//#include <dir.h>
//#include <mem.h>
#include <math.h>
//#include "twain.h"
//#include "BZLIB\bzlib.h"
//#include "aes\aes.h"
//#pragma hdrstop
#include <algorithm>
#include <cstring>
//#include "paperbak.h"
#include <stdio.h>
#include <math.h>
#include "Crc16.h"
#include "Decoder.h"
#include "Ecc.h"
#include "Fileproc.h"
#include "Resource.h"
#ifdef __linux__
#include "Bitmap.h"
#endif
@ -60,6 +47,10 @@ @@ -60,6 +47,10 @@
char inbmp[MAXPATH]; // extern
t_procdata procdata; // extern
// Given hystogramm h of length n points, locates black peaks and determines
// phase and step of the grid.
static float Findpeaks(int *h,int n,float *bestpeak,float *beststep) {
@ -1027,8 +1018,8 @@ void Startbitmapdecoding(t_procdata *pdata,uchar *data,int sizex,int sizey) { @@ -1027,8 +1018,8 @@ void Startbitmapdecoding(t_procdata *pdata,uchar *data,int sizex,int sizey) {
pdata->sizey=sizey;
pdata->blockborder=0.0; // Autoselect
pdata->step=1;
if (bestquality)
pdata->mode|=M_BEST;
//if (bestquality)
// pdata->mode|=M_BEST;
//Updatebuttons(); //GUI
};

10
source/Decoder.h

@ -19,15 +19,13 @@ @@ -19,15 +19,13 @@
#ifndef DECODER_H
#define DECODER_H
#include <string>
#include "Global.h"
#define M_BEST 0x00000001 // Search for best possible quality
#define M_BEST 0x00000001 // Search for best possible quality
typedef struct t_procdata { // Descriptor of processed data
int step; // Next data processing step (0 - idle)
@ -71,9 +69,9 @@ typedef struct t_procdata { // Descriptor of processed data @@ -71,9 +69,9 @@ typedef struct t_procdata { // Descriptor of processed data
} t_procdata;
//unique
int orientation; // Orientation of bitmap (-1: unknown)
extern int orientation; // Orientation of bitmap (-1: unknown)
//unique
t_procdata procdata; // Descriptor of processed data
extern t_procdata procdata; // Descriptor of processed data
void Nextdataprocessingstep(t_procdata *pdata);
void Freeprocdata(t_procdata *pdata);

240
source/Ecc.h

@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
*
* Filename: Ecc.h
*
* Description:
* Description: Reed-Solomon error correcting code data and functions
*
* Version: 1.2
* Created: 07/26/2017 08:42:39 PM
@ -19,8 +19,242 @@ @@ -19,8 +19,242 @@
#ifndef ECC_H
#define ECC_H
void Encode8(unsigned char *data, unsigned char *parity, int pad);
int Decode8(unsigned char *data, int *eras_pos, int no_eras, int pad);
#include <string>
typedef unsigned char uchar;
typedef unsigned int uint;
const uchar alpha[] = {
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
0x87, 0x89, 0x95, 0xad, 0xdd, 0x3d, 0x7a, 0xf4,
0x6f, 0xde, 0x3b, 0x76, 0xec, 0x5f, 0xbe, 0xfb,
0x71, 0xe2, 0x43, 0x86, 0x8b, 0x91, 0xa5, 0xcd,
0x1d, 0x3a, 0x74, 0xe8, 0x57, 0xae, 0xdb, 0x31,
0x62, 0xc4, 0x0f, 0x1e, 0x3c, 0x78, 0xf0, 0x67,
0xce, 0x1b, 0x36, 0x6c, 0xd8, 0x37, 0x6e, 0xdc,
0x3f, 0x7e, 0xfc, 0x7f, 0xfe, 0x7b, 0xf6, 0x6b,
0xd6, 0x2b, 0x56, 0xac, 0xdf, 0x39, 0x72, 0xe4,
0x4f, 0x9e, 0xbb, 0xf1, 0x65, 0xca, 0x13, 0x26,
0x4c, 0x98, 0xb7, 0xe9, 0x55, 0xaa, 0xd3, 0x21,
0x42, 0x84, 0x8f, 0x99, 0xb5, 0xed, 0x5d, 0xba,
0xf3, 0x61, 0xc2, 0x03, 0x06, 0x0c, 0x18, 0x30,
0x60, 0xc0, 0x07, 0x0e, 0x1c, 0x38, 0x70, 0xe0,
0x47, 0x8e, 0x9b, 0xb1, 0xe5, 0x4d, 0x9a, 0xb3,
0xe1, 0x45, 0x8a, 0x93, 0xa1, 0xc5, 0x0d, 0x1a,
0x34, 0x68, 0xd0, 0x27, 0x4e, 0x9c, 0xbf, 0xf9,
0x75, 0xea, 0x53, 0xa6, 0xcb, 0x11, 0x22, 0x44,
0x88, 0x97, 0xa9, 0xd5, 0x2d, 0x5a, 0xb4, 0xef,
0x59, 0xb2, 0xe3, 0x41, 0x82, 0x83, 0x81, 0x85,
0x8d, 0x9d, 0xbd, 0xfd, 0x7d, 0xfa, 0x73, 0xe6,
0x4b, 0x96, 0xab, 0xd1, 0x25, 0x4a, 0x94, 0xaf,
0xd9, 0x35, 0x6a, 0xd4, 0x2f, 0x5e, 0xbc, 0xff,
0x79, 0xf2, 0x63, 0xc6, 0x0b, 0x16, 0x2c, 0x58,
0xb0, 0xe7, 0x49, 0x92, 0xa3, 0xc1, 0x05, 0x0a,
0x14, 0x28, 0x50, 0xa0, 0xc7, 0x09, 0x12, 0x24,
0x48, 0x90, 0xa7, 0xc9, 0x15, 0x2a, 0x54, 0xa8,
0xd7, 0x29, 0x52, 0xa4, 0xcf, 0x19, 0x32, 0x64,
0xc8, 0x17, 0x2e, 0x5c, 0xb8, 0xf7, 0x69, 0xd2,
0x23, 0x46, 0x8c, 0x9f, 0xb9, 0xf5, 0x6d, 0xda,
0x33, 0x66, 0xcc, 0x1f, 0x3e, 0x7c, 0xf8, 0x77,
0xee, 0x5b, 0xb6, 0xeb, 0x51, 0xa2, 0xc3, 0x00
};
const uchar _index[] = {
255, 0, 1, 99, 2, 198, 100, 106,
3, 205, 199, 188, 101, 126, 107, 42,
4, 141, 206, 78, 200, 212, 189, 225,
102, 221, 127, 49, 108, 32, 43, 243,
5, 87, 142, 232, 207, 172, 79, 131,
201, 217, 213, 65, 190, 148, 226, 180,
103, 39, 222, 240, 128, 177, 50, 53,
109, 69, 33, 18, 44, 13, 244, 56,
6, 155, 88, 26, 143, 121, 233, 112,
208, 194, 173, 168, 80, 117, 132, 72,
202, 252, 218, 138, 214, 84, 66, 36,
191, 152, 149, 249, 227, 94, 181, 21,
104, 97, 40, 186, 223, 76, 241, 47,
129, 230, 178, 63, 51, 238, 54, 16,
110, 24, 70, 166, 34, 136, 19, 247,
45, 184, 14, 61, 245, 164, 57, 59,
7, 158, 156, 157, 89, 159, 27, 8,
144, 9, 122, 28, 234, 160, 113, 90,
209, 29, 195, 123, 174, 10, 169, 145,
81, 91, 118, 114, 133, 161, 73, 235,
203, 124, 253, 196, 219, 30, 139, 210,
215, 146, 85, 170, 67, 11, 37, 175,
192, 115, 153, 119, 150, 92, 250, 82,
228, 236, 95, 74, 182, 162, 22, 134,
105, 197, 98, 254, 41, 125, 187, 204,
224, 211, 77, 140, 242, 31, 48, 220,
130, 171, 231, 86, 179, 147, 64, 216,
52, 176, 239, 38, 55, 12, 17, 68,
111, 120, 25, 154, 71, 116, 167, 193,
35, 83, 137, 251, 20, 93, 248, 151,
46, 75, 185, 96, 15, 237, 62, 229,
246, 135, 165, 23, 58, 163, 60, 183
};
const uchar poly[] = {
0, 249, 59, 66, 4, 43, 126, 251,
97, 30, 3, 213, 50, 66, 170, 5,
24, 5, 170, 66, 50, 213, 3, 30,
97, 251, 126, 43, 4, 66, 59, 249,
0
};
inline void Encode8(uchar *data,uchar *bb,int pad) {
int i,j;
uchar feedback;
memset(bb,0,32);
for (i=0; i<223-pad; i++) {
feedback=_index[data[i]^bb[0]];
if (feedback!=255) {
for (j=1; j<32; j++) {
bb[j]^=alpha[(feedback+poly[32-j])%255];
};
};
memmove(bb,bb+1,31);
if (feedback!=255)
bb[31]=alpha[(feedback+poly[0])%255];
else
bb[31]=0;
;
};
};
inline int Decode8(uchar *data,int *eras_pos,int no_eras,int pad) {
int i,j,r,k,deg_lambda,el,deg_omega;
int syn_error,count;
uchar u,q,tmp,num1,num2,den,discr_r;
uchar lambda[33],s[32],b[33],t[33],omega[33];
uchar root[32],reg[33],loc[32];
for (i=0; i<32; i++)
s[i]=data[0];
for (j=1; j<255-pad; j++) {
for (i=0; i<32; i++) {
if (s[i]==0)
s[i]=data[j];
else
s[i]=data[j]^alpha[(_index[s[i]]+(112+i)*11)%255];
;
};
};
syn_error=0;
for (i=0; i<32; i++) {
syn_error|=s[i];
s[i]=_index[s[i]]; };
if (syn_error==0) {
count=0; goto finish; };
memset(lambda+1,0,32);
lambda[0]=1;
if (no_eras>0) {
lambda[1]=alpha[(11*(254-eras_pos[0]))%255];
for (i=1; i<no_eras; i++) {
u=(uchar)((11*(254-eras_pos[i]))%255);
for (j=i+1; j>0; j--) {
tmp=_index[lambda[j-1]];
if (tmp!=255) lambda[j]^=alpha[(u+tmp)%255];
};
};
};
for (i=0; i<33; i++)
b[i]=_index[lambda[i]];
r=el=no_eras;
while (++r<=32) {
discr_r=0;
for (i=0; i<r; i++) {
if ((lambda[i]!=0) && (s[r-i-1]!=255)) {
discr_r^=alpha[(_index[lambda[i]]+s[r-i-1])%255];
};
};
discr_r=_index[discr_r];
if (discr_r==255) {
memmove(b+1,b,32);
b[0]=255; }
else {
t[0]=lambda[0];
for (i=0; i<32; i++) {
if (b[i]!=255)
t[i+1]=lambda[i+1]^alpha[(discr_r+b[i])%255];
else
t[i+1]=lambda[i+1];
;
};
if (2*el<=r+no_eras-1) {
el=r+no_eras-el;
for (i=0; i<=32; i++)
b[i]=(uchar)(lambda[i]==0?255:(_index[lambda[i]]-discr_r+255)%255);
; }
else {
memmove(b+1,b,32);
b[0]=255; };
memcpy(lambda,t,33);
};
};
deg_lambda=0;
for (i=0; i<33; i++) {
lambda[i]=_index[lambda[i]];
if (lambda[i]!=255) deg_lambda=i; };
memcpy(reg+1,lambda+1,32);
count=0;
for (i=1,k=115; i<=255; i++,k=(k+116)%255) {
q=1;
for (j=deg_lambda; j>0; j--) {
if (reg[j]!=255) {
reg[j]=(uchar)((reg[j]+j)%255);
q^=alpha[reg[j]];
};
};
if (q!=0) continue;
root[count]=(uchar)i;
loc[count]=(uchar)k;
if (++count==deg_lambda) break;
};
if (deg_lambda!=count) {
count=-1;
goto finish; };
deg_omega=deg_lambda-1;
for (i=0; i<=deg_omega; i++ ) {
tmp=0;
for (j=i; j>=0; j--) {
if ((s[i-j]!=255) && (lambda[j]!=255)) {
tmp^=alpha[(s[i-j]+lambda[j])%255];
};
};
omega[i]=_index[tmp];
};
for (j=count-1; j>=0; j--) {
num1=0;
for (i=deg_omega; i>=0; i--) {
if (omega[i]!=255) {
num1^=alpha[(omega[i]+i*root[j])%255];
};
};
num2=alpha[(root[j]*111+255)%255];
den=0;
for (i=(deg_lambda<31?deg_lambda:31) & ~1; i>=0; i-=2) {
if (lambda[i+1]!=255) {
den^=alpha[(lambda[i+1]+i*root[j])%255];
};
};
if (num1!=0 && loc[j]>=pad) {
data[loc[j]-pad]^=alpha[(_index[num1]+_index[num2]+255-_index[den])%255];
};
};
finish:
if (eras_pos!=NULL) {
for (i=0; i<count; i++) eras_pos[i]=loc[i]; };
return count;
};
#endif //ECC_H

15
source/Fileproc.cpp

@ -31,10 +31,8 @@ @@ -31,10 +31,8 @@
#include <algorithm>
#include <cstring>
#include <math.h>
#include "Fileproc.h"
#include "Resource.h"
#ifdef _WIN32
#include <windows.h>
#elif __linux__
@ -43,6 +41,12 @@ @@ -43,6 +41,12 @@
#endif
t_fproc fproc; // extern
// Clears descriptor of processed file
void Closefproc() {
if (fproc.datavalid!=NULL)
@ -265,14 +269,19 @@ int Finishpage(int ngood,int nbad,ulong nrestored) { @@ -265,14 +269,19 @@ int Finishpage(int ngood,int nbad,ulong nrestored) {
if (nrempages<8)
pf->rempages[nrempages]=0;
//Updatefileinfo(slot,pf); //GUI
if (pf->ndata==pf->nblock) {
/*if (pf->ndata==pf->nblock) {
if (autosave==0)
Message("File restored. Press \"Save\" to save it to disk",0);
else {
Message("File complete",0);
Saverestoredfile(0);
};
};*/
if (pf->ndata != pf->nblock) {
Message("File complete",0);
Saverestoredfile(0);
};
return 0; ////////////////////////////////////////////////////////////////////
};

9
source/Fileproc.h

@ -19,14 +19,15 @@ @@ -19,14 +19,15 @@
#ifndef FILEPROC_H
#define FILEPROC_H
#include "Global.h"
#include <string>
#include "Global.h"
#ifdef _WIN32
#include <windows.h>
#endif
typedef struct t_fproc { // Descriptor of processed file
int busy; // In work
// General file data.
@ -62,7 +63,7 @@ typedef struct t_fproc { // Descriptor of processed file @@ -62,7 +63,7 @@ typedef struct t_fproc { // Descriptor of processed file
} t_fproc;
//unique
t_fproc fproc; // Processed file
extern t_fproc fproc; // Processed file
void Closefproc();
int Startnextpage(t_superblock *superblock);

38
source/Global.h

@ -27,6 +27,10 @@ @@ -27,6 +27,10 @@
#include <windows.h>
#endif
////////////////////////////////////////////////////////////////////////////////
///////////////////////////// GENERAL DEFINITIONS //////////////////////////////
@ -132,28 +136,28 @@ typedef struct t_superblock { // Identification block in memory @@ -132,28 +136,28 @@ typedef struct t_superblock { // Identification block in memory
//////////////////////////////// OPTIONS ///////////////////////////////
// All unique
char infile[MAXPATH]; // Last selected file to read
char outbmp[MAXPATH]; // Last selected bitmap to save
char inbmp[MAXPATH]; // Last selected bitmap to read
char outfile[MAXPATH]; // Last selected data file to save
extern char infile[MAXPATH]; // Last selected file to read
extern char outbmp[MAXPATH]; // Last selected bitmap to save
extern char inbmp[MAXPATH]; // Last selected bitmap to read
extern char outfile[MAXPATH]; // Last selected data file to save
// All unique
int dpi; // Dot raster, dots per inch
int dotpercent; // Dot size, percent of dpi
int redundancy; // Redundancy (NGROUPMIN..NGROUPMAX)
int printheader; // Print header and footer
int printborder; // Border around bitmap
int autosave; // Autosave completed files
int bestquality; // Determine best quality
extern int dpi; // Dot raster, dots per inch
extern int dotpercent; // Dot size, percent of dpi
extern int redundancy; // Redundancy (NGROUPMIN..NGROUPMAX)
extern int printheader; // Print header and footer
extern int printborder; // Border around bitmap
extern int autosave; // Autosave completed files
extern int bestquality; // Determine best quality
// All unique
int marginunits; // 0:undef, 1:inches, 2:millimeters
int marginleft; // Left printer page margin
int marginright; // Right printer page margin
int margintop; // Top printer page margin
int marginbottom; // Bottom printer page margin
extern int marginunits; // 0:undef, 1:inches, 2:millimeters
extern int marginleft; // Left printer page margin
extern int marginright; // Right printer page margin
extern int margintop; // Top printer page margin
extern int marginbottom; // Bottom printer page margin
void Options(void);
//void Options(void);

8
source/Printer.cpp

@ -19,7 +19,6 @@ @@ -19,7 +19,6 @@
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <time.h>
#include "Printer.h"
@ -32,6 +31,7 @@ @@ -32,6 +31,7 @@
t_printdata printdata; // extern
// Service function, puts block of data to bitmap as a grid of 32x32 dots in
// the position with given index. Bitmap is treated as a continuous line of
@ -320,7 +320,7 @@ static void Printnextpage(t_printdata *print) { @@ -320,7 +320,7 @@ static void Printnextpage(t_printdata *print) {
FILE *f = fopen(print -> outbmp, "wb");
if (f == NULL) {
Reporterror("can not open file for writing");
Stopprinting(print);
//Stopprinting(print);
return;
}
@ -352,7 +352,7 @@ static void Printnextpage(t_printdata *print) { @@ -352,7 +352,7 @@ static void Printnextpage(t_printdata *print) {
fclose(f);
if (success==0) {
Reporterror("Unable to save bitmap");
Stopprinting(print);
//Stopprinting(print);
return;
};
};
@ -365,7 +365,7 @@ static void Printnextpage(t_printdata *print) { @@ -365,7 +365,7 @@ static void Printnextpage(t_printdata *print) {
// Sends specified file to printer (bmp=NULL) or to bitmap file.
void Printfile(char *path,char *bmp) {
// Stop printing of previous file, if any.
Stopprinting(&printdata);
//Stopprinting(&printdata);
// Prepare descriptor.
memset(&printdata,0,sizeof(printdata));
strncpy(printdata.infile,path,MAXPATH-1);

11
source/Printer.h

@ -18,23 +18,18 @@ @@ -18,23 +18,18 @@
#ifndef PRINTER_H
#define PRINTER_H
#include <cstring>
#include <string>
#include "Global.h"
#ifdef __linux__
#include "Bitmap.h"
#endif
#define PACKLEN 65536 // Length of data read buffer 64 K
typedef struct t_printdata { // Print control structure
int step; // Next data printing step (0 - idle)
char infile[MAXPATH]; // Name of input file
@ -92,8 +87,8 @@ typedef struct t_printdata { // Print control structure @@ -92,8 +87,8 @@ typedef struct t_printdata { // Print control structure
//uniques (should not have copies of)
int resx,resy; // Printer resolution, dpi (may be 0!)
t_printdata printdata; // Print control structure
extern int resx,resy; // Printer resolution, dpi (may be 0!)
extern t_printdata printdata; // Print control structure
void Initializeprintsettings(void);
void Closeprintsettings(void);

27
source/main.cpp

@ -1,7 +1,32 @@ @@ -1,7 +1,32 @@
#include "cxxopts.hpp"
/*
* =====================================================================================
*
* Filename: main.cpp
*
* Description: Cross-platform command line version of Oleh Yuchuk's Paperbak, a
* (relatively) high-density paper backup solution
*
* Version: 1.2
* Created: 07/27/2017 03:04:03 PM
* Revision: none
* Compiler: gcc
*
* Author: scuti@teknik.io
*
* =====================================================================================
*/
#include <stdlib.h>
#include <iostream>
#include "cxxopts.hpp"
#include "Decoder.h"
#include "Printer.h"
using namespace std;
// redundancy 1 to 10
// dot size 50 to 100
// dpi 40 to 300

Loading…
Cancel
Save