Code:
#include <stdio.h>
#define ERROR 00404
#include<iostream>
using namespace std;
int argc;
char *argv[];
int main(argc,argv)
{
FILE *ascii_fd, *card_fd;
int arg = 1;
int format = 80;
int color = 0;
int corner = 0;
int cut = 2;
int interp = 0;
int punch = 4;
int table = 4;
int form = 1;
int logo = 0;
while ((arg < argc) && (argv[arg][0] == '-')) { /* command line arg */
if (strcmp(argv[arg],"-H80") == 0) {
format = 80;
} else if (strcmp(argv[arg],"-H82") == 0) {
format = 82;
} else if (strcmp(argv[arg],"-cream") == 0) {
color |= 0;
} else if (strcmp(argv[arg],"-white") == 0) {
color |= 1;
} else if (strcmp(argv[arg],"-yellow") == 0) {
color |= 2;
} else if (strcmp(argv[arg],"-pink") == 0) {
color |= 3;
} else if (strcmp(argv[arg],"-blue") == 0) {
color |= 4;
} else if (strcmp(argv[arg],"-green") == 0) {
color |= 5;
} else if (strcmp(argv[arg],"-orange") == 0) {
color |= 6;
} else if (strcmp(argv[arg],"-brown") == 0) {
color |= 7;
} else if (strcmp(argv[arg],"-stripe") == 0) {
color |= 8;
} else if (strcmp(argv[arg],"-round") == 0) {
corner = 0;
} else if (strcmp(argv[arg],"-square") == 0) {
corner = 1;
} else if (strcmp(argv[arg],"-uncut") == 0) {
cut = 0;
} else if (strcmp(argv[arg],"-right") == 0) {
cut = 1;
} else if (strcmp(argv[arg],"-left") == 0) {
cut = 2;
} else if (strcmp(argv[arg],"-both") == 0) {
cut = 3;
} else if (strcmp(argv[arg],"-interp") == 0) {
interp = 1;
} else if (strcmp(argv[arg],"-noprint") == 0) {
punch = 0;
} else if (strcmp(argv[arg],"-026comm") == 0) {
punch = table = 1;
} else if (strcmp(argv[arg],"-026ftn") == 0) {
punch = table = 2;
} else if (strcmp(argv[arg],"-029") == 0) {
punch = table = 4;
} else if (strcmp(argv[arg],"-EBCDIC") == 0) {
punch = 0;
table = 8;
} else if (strcmp(argv[arg],"-blank") == 0) {
form = 0; logo = 0;
} else if (strcmp(argv[arg],"-5081") == 0) {
form = 1; logo = 0;
} else if (strcmp(argv[arg],"-507536") == 0) {
form = 2; logo = 0;
} else if (strcmp(argv[arg],"-5280") == 0) {
form = 3; logo = 0;
} else if (strcmp(argv[arg],"-327") == 0) {
form = 4; logo = 0;
} else if (strcmp(argv[arg],"-733727") == 0) {
form = 5; logo = 0;
} else if (strcmp(argv[arg],"-888157") == 0) {
form = 6; logo = 0;
} else if (strcmp(argv[arg],"-FORTRAN") == 0) {
form = 6; logo = 0;
} else if (strcmp(argv[arg],"-help") == 0) {
fprintf( stderr, "\n%s [options] [input [output]]\n\n",
argv[0] );
fprintf( stderr,
"Make a virtual punched card deck from an ASCII file.\n"
"If output is missing, output to stdout; if input is\n"
"also missing, input from stdin. The options are:\n\n"
" -H80 -H82 columns per card (H80 default)\n\n"
" -cream -white -yellow -pink card colors\n"
" -blue -green -orange -brown (cream default)\n\n"
" -stripe color stripe, cream card (common)\n\n"
" -round -square corners on cards (round default)\n\n"
" -uncut -both which top corner is cut\n"
" -left -right (left default, right common)\n\n"
" -interp this card has been interpreted\n\n"
" -026comm what keypunch to use\n"
" -029 -026ftn (029 default)\n"
" -EBCDIC (uninterpreted and rare!)\n\n"
" -noprint turn off printing in the punch\n\n"
" -blank -5081 what preprinted form to use\n"
" -507536 -5280 (blank default, all common)\n"
" -327 -733737\n"
" -888157\n\n"
);
exit(-1);
} else {
fprintf( stderr, "%s: unknown option %s;"
" -help available\n",
argv[0], argv[arg] );
exit(-1);
}
arg++;
}
if ( (argc - arg) > 2 ) { /* too many arguments */
fprintf( stderr, "%s: too many arguments\n",
argv[0] );
exit(-1);
}
if ( (argc - arg) < 1 ) { /* no arguments, program is a filter */
ascii_fd = stdin;
card_fd = stdout;
} else { /* at least one argument */
ascii_fd = fopen(argv[arg],"r");
if ( ascii_fd == NULL ) {
fprintf( stderr, "%s %s: invalid ascii file\n",
argv[0], argv[arg] );
exit(-1);
}
if ( (argc - arg) < 2 ) { /* only one arguments */
card_fd = stdout;
} else { /* at least two arguments */
card_fd = fopen(argv[arg+1],"w");
if ( card_fd == NULL ) {
fprintf( stderr, "%s %s: invalid card file\n",
argv[0], argv[arg+1] );
exit(-1);
}
}
}
/* output file prefix */
fputc( 'H', card_fd );
fputc( '8', card_fd );
if (format == 80) {
fputc( '0', card_fd );
} else {
fputc( '2', card_fd );
}
/* ready to process from ascii_fd to card_fd */
while( !feof(ascii_fd)) {
char line[82]; /* size allows for H82 format */
int src_col = 1;
int max_col;
line[0] = ' ';
line[81] = ' ';
while (src_col < 81) {
int cur_char = fgetc(ascii_fd);
if ((cur_char == EOF) && (src_col == 1)) break;
if ((cur_char == EOF) || (cur_char == '\n')) {
while (src_col < 81) { /* blank out card */
line[src_col] = ' ';
src_col++;
}
} else if (cur_char == '\t') {
do {
line[src_col] = ' ';
src_col++;
} while(((src_col & 07) != 1)&&(src_col < 81));
} else {
line[src_col] = cur_char;
src_col++;
}
}
if (src_col == 1) break; /* avoid blank card for early EOF */
/* put out prefix on card */
fputc( 0x80 | (color << 3) | (corner << 2) | cut, card_fd );
fputc( 0x80 | (interp << 6) | (punch << 3) | form, card_fd );
fputc( 0x80 | logo, card_fd );
if (format == 80) {
src_col = 1;
max_col = 80;
} else { /* H82 */
src_col = 0;
max_col = 81;
}
while (src_col <= max_col) {
char even_ch, odd_ch; /* source characters */
int even_col, odd_col; /* corresponding 12 bit codes */
char first, second, third; /* packed for output */
/* get two columns */
even_ch = line[src_col];
src_col++;
odd_ch = line[src_col];
src_col++;
/* convert to card codes */
if (table == 1) {
even_col = o26_comm_code[ even_ch ];
odd_col = o26_comm_code[ odd_ch ];
} else if (table == 2) {
even_col = o26_ftn_code[ even_ch ];
odd_col = o26_ftn_code[ odd_ch ];
} else if (table == 4) {
even_col = o29_code[ even_ch ];
odd_col = o29_code[ odd_ch ];
} else { /* table == 8 */
even_col = EBCDIC_code[ even_ch ];
odd_col = EBCDIC_code[ odd_ch ];
}
/* divide 2 columns into 3 bytes */
first = even_col >> 4;
second = ((even_col & 017) << 4)
| (odd_col >> 8);
third = odd_col & 00377;
/* output 3 bytes */
fputc( first, card_fd );
fputc( second, card_fd );
fputc( third, card_fd );
}
}
fclose(ascii_fd);
fclose(card_fd);
}
1>------ Build started: Project: .3, Configuration: Debug Win32 ------
1> 3.cpp
1>c:\documents and settings\wigund lach\my documents\visua l studio 2010\projects\. 3\.3\3.cpp(130) : warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_ WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 10.0\vc\include \stdio.h(234) : see declaration of 'fopen'
1>c:\documents and settings\wigund lach\my documents\visua l studio 2010\projects\. 3\.3\3.cpp(139) : warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_ WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 10.0\vc\include \stdio.h(234) : see declaration of 'fopen'
1>c:\documents and settings\wigund lach\my documents\visua l studio 2010\projects\. 3\.3\3.cpp(210) : error C2065: 'o26_comm_code' : undeclared identifier
1>c:\documents and settings\wigund lach\my documents\visua l studio 2010\projects\. 3\.3\3.cpp(211) : error C2065: 'o26_comm_code' : undeclared identifier
1>c:\documents and settings\wigund lach\my documents\visua l studio 2010\projects\. 3\.3\3.cpp(213) : error C2065: 'o26_ftn_code' : undeclared identifier
1>c:\documents and settings\wigund lach\my documents\visua l studio 2010\projects\. 3\.3\3.cpp(214) : error C2065: 'o26_ftn_code' : undeclared identifier
1>c:\documents and settings\wigund lach\my documents\visua l studio 2010\projects\. 3\.3\3.cpp(216) : error C2065: 'o29_code' : undeclared identifier
1>c:\documents and settings\wigund lach\my documents\visua l studio 2010\projects\. 3\.3\3.cpp(217) : error C2065: 'o29_code' : undeclared identifier
1>c:\documents and settings\wigund lach\my documents\visua l studio 2010\projects\. 3\.3\3.cpp(219) : error C2065: 'EBCDIC_code' : undeclared identifier
1>c:\documents and settings\wigund lach\my documents\visua l studio 2010\projects\. 3\.3\3.cpp(220) : error C2065: 'EBCDIC_code' : undeclared identifier
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Comment