v13i121: lj2ps 1.2 (13 of 13), a LaserJet to PostScript Translator
Chris Lishka hang loose...
lishka at uwslh.slh.wisc.edu
Tue Jul 10 09:01:06 AEST 1990
Posting-number: Volume 13, Issue 121
Submitted-by: lishka at uwslh.slh.wisc.edu (Chris Lishka (hang loose...) )
Archive-name: lj2ps-1.2/part13
---- Cut Here and unpack ----
#!/bin/sh
# this is lj2ps.13 (part 13 of a multipart archive)
# do not concatenate these parts, unpack them in order with /bin/sh
# file scan.c continued
#
if touch 2>&1 | fgrep '[-amc]' > /dev/null
then TOUCH=touch
else TOUCH=true
fi
if test ! -r @shar_seq_.tmp; then
echo "Please unpack part 1 first!"
exit 1
fi
(read Scheck
if test "$Scheck" != 13; then
echo "Please unpack part $Scheck next!"
exit 1
else
exit 0
fi
) < @shar_seq_.tmp || exit 1
echo "x - Continuing file scan.c"
sed 's/^X//' << 'SHAR_EOF' >> scan.c &&
X /* 78 */ CSP_LW, CSP_LW, CSP_LW, CSP_US, CSP_US, CSP_US, CSP_US, CSP___,
X
X /* 80 */ CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___,
X /* 88 */ CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___,
X /* 90 */ CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___,
X /* 98 */ CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___,
X /* a0 */ CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___,
X /* a8 */ CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___,
X /* b0 */ CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___,
X /* b8 */ CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___,
X /* c0 */ CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___,
X /* c8 */ CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___,
X /* d0 */ CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___,
X /* d8 */ CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___,
X /* e0 */ CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___,
X /* e8 */ CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___,
X /* f0 */ CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___,
X /* f8 */ CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___, CSP___
X};
X
X
X /* Local macro definitions
X */
X
X /* Local function list
X */
Xstatic void parse_argument();
X
X /* Function bodies
X */
X
X /* scan() is the front_end to the scanner. It runs the proper scanner,
X ** based on the value of scan_state. It returns a token number if the
X ** scan was successful, or zero if the end-of-file was reached.
X */
Xint
Xscan()
X{
X register int prev_state; /* The previous state */
X register int curr_state; /* The current state */
X
X rescan:
X
X curr_token.storage[0] = '\0'; curr_token.length = 0;
X curr_state = START;
X
X do{ /* Main scanning loop */
X
X prev_state = curr_state;
X
X /* Get the next character */
X if( input.length > 0 ){
X curr_char = input.storage[--input.length];
X }
X else{
X if( (curr_char = getc(in_file)) == EOF)
X end_of_file = 1;
X else
X end_of_file = 0;
X }
X
X#ifdef DEBUG
X if( debug == 2 ) fputc(curr_char, stderr);
X#endif
X
X if( !end_of_file ){
X
X#ifdef DEBUG
X if( debug == 3 ){
X switch( scan_state ){
X case SS_TEXT:
X fprintf(stderr,
X "TEXT curr % 3.3d (prev % 3.3d) char %c (0x%2.2x) class % 3.3d -> % 3.3d\n",
X curr_state, prev_state,
X curr_char, (int) curr_char, st_classes[curr_char],
X st_states[curr_state][st_classes[curr_char]]
X );
X break;
X case SS_PARAM:
X fprintf(stderr,
X "TEXT curr % 3.3d (prev % 3.3d) char %c (0x%2.2x) class % 3.3d -> % 3.3d\n",
X curr_state, prev_state,
X curr_char, (int) curr_char, sp_classes[curr_char],
X sp_states[curr_state][sp_classes[curr_char]]
X );
X break;
X default:
X internal_error("illegal scan state in scan()", "");
X } /* switch( ... ) */
X } /* if( debug ... ) */
X#endif
X
X switch( scan_state ){
X case SS_TEXT:
X if( (curr_state = st_states[curr_state][st_classes[curr_char]])
X == END ){
X
X /* Put back character */
X if( input.length == MAX_BUFFER ){
X internal_error("you blew the put-back buffer!", "");
X }
X else{
X input.storage[input.length] = curr_char;
X input.length++;
X }
X
X }
X else{
X
X /* Accept character */
X if( curr_token.length == MAX_BUFFER ){
X internal_error("current token is too large", "");
X }
X else{
X curr_token.storage[curr_token.length] = curr_char;
X curr_token.length++;
X }
X
X }
X break;
X case SS_PARAM:
X if( (curr_state = sp_states[curr_state][sp_classes[curr_char]])
X == END ){
X
X /* Put back character */
X if( input.length == MAX_BUFFER ){
X internal_error("you blew the put-back buffer!", "");
X }
X else{
X input.storage[input.length] = curr_char;
X input.length++;
X }
X
X }
X else{
X
X /* Accept character */
X if( curr_token.length == MAX_BUFFER ){
X internal_error("current token is too large", "");
X }
X else{
X curr_token.storage[curr_token.length] = curr_char;
X curr_token.length++;
X }
X
X }
X break;
X default:
X internal_error("illegal scan state in scan()", "");
X } /* switch(...) */
X
X } /* if( !eof ) */
X else{
X
X switch( scan_state ){
X case SS_TEXT:
X if( (curr_state = st_states[curr_state][CST_EF])
X != END ){
X
X fatal_error("end-of-file found in a command", "");
X
X }
X break;
X case SS_PARAM:
X if( (curr_state = sp_states[curr_state][CSP_EF])
X != END ){
X
X fatal_error("end-of-file found in a command", "");
X
X }
X break;
X default:
X internal_error("illegal scan state in scan()", "");
X } /* switch(...) */
X
X } /* else( !eof ) */
X
X } while( curr_state != END );
X
X /* If this point is reached, then an entire token has been scanned.
X ** The token must be properly saved, and then the appropriate token
X ** action must be performed. The switch() and embedded switch()'s
X ** perform the necessary token actions for each state.
X */
X curr_token.storage[curr_token.length] = '\0';
X switch( scan_state ){
X case SS_TEXT:
X switch( prev_state ){
X case ST_TLP: scan_state = SS_TEXT; curr_token.code = TEXT_lp; break;
X case ST_TRP: scan_state = SS_TEXT; curr_token.code = TEXT_rp; break;
X case ST_TBS: scan_state = SS_TEXT; curr_token.code = TEXT_bslash; break;
X case ST_TNL: scan_state = SS_TEXT; curr_token.code = TEXT_NEWLINE; break;
X case ST_TFF: scan_state = SS_TEXT; curr_token.code = TEXT_FORMFEED;break;
X case ST_UNK:
X warning("LaserJet command not supported", curr_token.storage);
X scan_state = SS_TEXT; goto rescan;
X case ST_CEQ: scan_state = SS_TEXT; curr_token.code = CMD_eq; break;
X case ST_C9 : scan_state = SS_TEXT; curr_token.code = CMD_9; break;
X case ST_CZ : scan_state = SS_TEXT; curr_token.code = CMD_Z; break;
X case ST_CY : scan_state = SS_TEXT; curr_token.code = CMD_Y; break;
X case ST_CE : scan_state = SS_TEXT; curr_token.code = CMD_E; break;
X case ST_CAa: scan_state = SS_PARAM; curr_token.code = CMD_amp_a; break;
X case ST_CAd: scan_state = SS_PARAM; curr_token.code = CMD_amp_d; break;
X case ST_CAf: scan_state = SS_PARAM; curr_token.code = CMD_amp_f; break;
X case ST_CAk: scan_state = SS_PARAM; curr_token.code = CMD_amp_k; break;
X case ST_CAl: scan_state = SS_PARAM; curr_token.code = CMD_amp_l; break;
X case ST_CAp: scan_state = SS_PARAM; curr_token.code = CMD_amp_p; break;
X case ST_CAs: scan_state = SS_PARAM; curr_token.code = CMD_amp_s; break;
X case ST_CSt: scan_state = SS_PARAM; curr_token.code = CMD_star_t; break;
X case ST_CSr: scan_state = SS_PARAM; curr_token.code = CMD_star_r; break;
X case ST_CSp: scan_state = SS_PARAM; curr_token.code = CMD_star_p; break;
X case ST_CSc: scan_state = SS_PARAM; curr_token.code = CMD_star_c; break;
X case ST_CSb: scan_state = SS_PARAM; curr_token.code = CMD_star_b; break;
X case ST_CLs: scan_state = SS_PARAM; curr_token.code = CMD_lp_s; break;
X case ST_CRs: scan_state = SS_PARAM; curr_token.code = CMD_rp_s; break;
X case ST_CLP: scan_state = SS_PARAM; curr_token.code = CMD_lp; break;
X case ST_CRP: scan_state = SS_PARAM; curr_token.code = CMD_rp; break;
X case ST_TXT: scan_state = SS_TEXT; curr_token.code = TEXT_CHAR; break;
X case ST_NUL: scan_state = SS_TEXT; curr_token.code = TEXT_NULL; break;
X case ST_TTB: scan_state = SS_TEXT; curr_token.code = TEXT_TAB; break;
X case ST_TSI: scan_state = SS_TEXT; curr_token.code = TEXT_SH_IN; break;
X case ST_TSO: scan_state = SS_TEXT; curr_token.code = TEXT_SH_OUT; break;
X case ST____:
X case ST_STT:
X case ST_CMD:
X case ST_CMA:
X case ST_CMS:
X default:
X if( !end_of_file ){
X internal_error("illegal state in text scanner token actions", "");
X }
X } /* switch( text scanner ) */
X break;
X case SS_PARAM:
X switch( prev_state ){
X case SP_PE :
X scan_state = SS_TEXT;
X curr_token.code = PARAM_END;
X parse_argument();
X break;
X case SP_PC :
X scan_state = SS_PARAM;
X curr_token.code = PARAM_CONTINUE;
X parse_argument();
X break;
X case SP_PEO:
X scan_state = SS_TEXT;
X curr_token.code = PARAM_END;
X parse_argument();
X break;
X case SP_UNK:
X warning("illegal character in command parameter", curr_token.storage);
X scan_state = SS_TEXT; goto rescan;
X case SP____:
X case SP_PRM:
X case SP_INT:
X case SP_FLP:
X default:
X internal_error("illegal state in parameter scanner token actions", "");
X } /* switch( parameter scanner ) */
X break;
X default:
X internal_error("illegal scan state in token actions", "");
X } /* switch( scan_state ) */
X
X return( !end_of_file );
X} /* scan() */
X
X
X
X /* scan_init() initializes the scanner to a new input stream. This is
X ** accomplished by reseting the scan_state, clearing the put-back buffer,
X ** and various other minor tasks.
X */
Xvoid
Xscan_init(file)
X FILE *file;
X{
X
X /* Initialize the scan state */
X scan_state = SS_TEXT;
X
X /* Save the handle to the file */
X in_file = file;
X end_of_file = 0;
X
X /* Reset the buffer */
X input.length = 0;
X
X /* Miscellaneous */
X text = curr_token.storage;
X command = curr_token.storage;
X
X} /* scan_init() */
X
X
X
X
Xstatic void
Xparse_argument()
X{
X
X /* Determine whether or not the command has a numeric argument */
X if( curr_token.length == 1 ){ /* No numeric argument */
X number[0] = '0'; /* Set number = "0" */
X number[1] = '\0';
X pos_code = POS_ABSOLUTE; /* Set to a constant value */
X }
X else{ /* Numeric argument present */
X /* Check if it is a relative offset */
X if( !isdigit(curr_token.storage[0]) ){
X if( curr_token.storage[0] == '+' ) pos_code = POS_REL_POSITIVE;
X else if( curr_token.storage[0] == '-' ) pos_code = POS_REL_NEGATIVE;
X else internal_error("illegal relative offset", curr_token.storage);
X }
X else{
X pos_code = POS_ABSOLUTE;
X }
X /* Record the scalar value */
X if( pos_code == POS_ABSOLUTE ){
X (void) strncpy(number, curr_token.storage, curr_token.length - 1);
X number[curr_token.length - 1] = '\0';
X }
X else{
X (void) strncpy(number, &(curr_token.storage)[1], curr_token.length - 2);
X number[curr_token.length - 2] = '\0';
X }
X }
X
X /* Finally, record the command as an *upper-case* single digit string */
X variable[0] = curr_token.storage[curr_token.length - 1];
X variable[1] = '\0';
X if( islower(variable[0]) ) variable[0] = toupper(variable[0]);
X
X} /* parse_argument() */
SHAR_EOF
echo "File scan.c is complete" &&
$TOUCH -am 0707112690 scan.c &&
chmod 0644 scan.c ||
echo "restore of scan.c failed"
set `wc -c scan.c`;Wc_c=$1
if test "$Wc_c" != "32557"; then
echo original size 32557, current size $Wc_c
fi
# ============= scan.h ==============
echo "x - extracting scan.h (Text)"
sed 's/^X//' << 'SHAR_EOF' > scan.h &&
X/*
X** Project: lj2ps
X** File: scan.h
X**
X** Author: Christopher Lishka
X** Organization: Wisconsin State Laboratory of Hygiene
X** Data Processing Dept.
X**
X** Copyright (C) 1990 by Christopher Lishka.
X**
X** This program is free software; you can redistribute it and/or modify
X** it under the terms of the GNU General Public License as published by
X** the Free Software Foundation; either version 1, or (at your option)
X** any later version.
X**
X** This program is distributed in the hope that it will be useful,
X** but WITHOUT ANY WARRANTY; without even the implied warranty of
X** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
X** GNU General Public License for more details.
X**
X** You should have received a copy of the GNU General Public License
X** along with this program; if not, write to the Free Software
X** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X*/
X
X /* Global constants
X */
X#define MAX_BUFFER 1024 /* The maximum size of the token buffer */
X /* Persistent scanner states */
X#define SS_TEXT 1
X#define SS_PARAM 2
X /* Tokens returned */
X#define TEXT_lp 201 /* Normal text tokens */
X#define TEXT_rp 202
X#define TEXT_bslash 203
X#define TEXT_NEWLINE 204
X#define TEXT_FORMFEED 205
X#define TEXT_NULL 206
X#define TEXT_CHAR 207
X#define TEXT_TAB 208
X#define TEXT_SH_IN 209
X#define TEXT_SH_OUT 210
X#define CMD_UNDEF 300 /* Command tokens */
X#define CMD_E 301
X#define CMD_Y 302
X#define CMD_Z 303
X#define CMD_9 304
X#define CMD_eq 305
X#define CMD_lp 306
X#define CMD_rp 307
X#define CMD_lp_s 308
X#define CMD_rp_s 309
X#define CMD_amp_a 310
X#define CMD_amp_d 311
X#define CMD_amp_f 312
X#define CMD_amp_k 313
X#define CMD_amp_l 314
X#define CMD_amp_p 315
X#define CMD_amp_s 316
X#define CMD_star_b 317
X#define CMD_star_c 318
X#define CMD_star_p 319
X#define CMD_star_r 320
X#define CMD_star_t 321
X#define PARAM_CONTINUE 401 /* Parameter tokens */
X#define PARAM_END 402
X#define PARAM_UNDEF 403
X /* Position codes */
X#define POS_ABSOLUTE 501
X#define POS_REL_POSITIVE 502
X#define POS_REL_NEGATIVE 503
X
X /* Global structure and type definitions
X */
Xtypedef struct { /* Input buffer */
X int code; /* The token code */
X int length; /* Number of characters put back */
X char storage[MAX_BUFFER]; /* Storage for characters in the buffer */
X} token;
X
X /* Global variables
X */
Xextern int scan_state; /* Controls which scanner is being used */
Xextern char *text; /* Text read in for text tokens */
Xextern char *command; /* Command read in */
Xextern char variable[]; /* Command parameter */
Xextern char number[]; /* Command numeric argument */
Xextern int pos_code; /* Command numeric position code */
Xextern token curr_token; /* Where to hold the scanned token */
X
X /* Global macro definitions
X */
X
X /* Global functions
X */
Xextern int scan(); /* The entry into the scanners */
Xextern void scan_init(); /* Reset the input for the scanner */
SHAR_EOF
$TOUCH -am 0707112690 scan.h &&
chmod 0644 scan.h ||
echo "restore of scan.h failed"
set `wc -c scan.h`;Wc_c=$1
if test "$Wc_c" != "3044"; then
echo original size 3044, current size $Wc_c
fi
# ============= trans.c ==============
echo "x - extracting trans.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > trans.c &&
X/* Program: lj2ps
X** File: transform.c
X**
X** Author: Christopher Lishka
X** Organization: Wisconsin State Laboratory of Hygiene
X** Data Processing Dept.
X**
X** Copyright (C) 1990 by Christopher Lishka.
X**
X** This program is free software; you can redistribute it and/or modify
X** it under the terms of the GNU General Public License as published by
X** the Free Software Foundation; either version 1, or (at your option)
X** any later version.
X**
X** This program is distributed in the hope that it will be useful,
X** but WITHOUT ANY WARRANTY; without even the implied warranty of
X** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
X** GNU General Public License for more details.
X**
X** You should have received a copy of the GNU General Public License
X** along with this program; if not, write to the Free Software
X** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X*/
X
Xstatic char * ModuleID = "Module transform: v1.0.1.2, production";
X
X /* Include files
X */
X#include <stdio.h>
X#include "trans.h"
X#include "scan.h"
X#include "lj2ps.h"
X#include "lj.h"
X
X /* External definitions
X */
X
X /* Global variables
X */
X
X /* Global function list
X */
Xextern void transform();
X
X /* Local constants
X */
X
X /* Local structures and types
X */
X
X /* Local variables
X */
X
X /* Local macro definitions
X */
X#define report(x) fprintf(output_file, "%s", x);
X
X /* Local function list
X */
X
X /* Function bodies
X */
X
X /* transform() reads text mixed with laserjet commands from its input
X ** and "magically" changes it to postscript on its output. The magic
X ** is performed in a tight while-loop which acts as a simple decision
X ** table: for each token type (command, text, parameter) the appropriate
X ** action is done (which usually involves writing to stdout or calling
X ** an emulation function).
X */
Xvoid
Xtransform(input_file, output_file)
X FILE *input_file, *output_file;
X{
X
X /* Reset the scanner to read from the input */
X scan_init(input_file);
X
X /* While the input stream still has tokens, handle each token through
X ** the switch() jump table.
X */
X scan_state = SS_TEXT; /* Set the initial scan state */
X while( scan() ){
X#ifdef DEBUG
X if( debug ) fprintf(stderr, "{TOKEN:%d}", curr_token.code);
X#endif
X switch( curr_token.code ){
X case TEXT_CHAR:
X if( (page_height - current_y) > (text_height + margin_top + LJ_ERROR) ){
X lj_page_end(output_file);
X lj_page_begin(output_file);
X }
X lj_text_add(output_file, text);
X break;
X case TEXT_NULL: /* Ignore nulls */
X warning("encountered a null; ignoring", "");
X break;
X case TEXT_lp:
X lj_text_add(output_file, "\\(");
X break;
X case TEXT_rp:
X lj_text_add(output_file, "\\)");
X break;
X case TEXT_bslash:
X lj_text_add(output_file, "\\\\");
X break;
X case TEXT_NEWLINE:
X if( (page_height - current_y) > (text_height + margin_top + LJ_ERROR) ){
X lj_page_end(output_file);
X lj_page_begin(output_file);
X }
X lj_nl(output_file); /* Write out a newline */
X current_line++;
X break;
X case TEXT_FORMFEED:
X lj_page_end(output_file);
X /* XXX insert page counting mechanism here! */
X lj_page_begin(output_file);
X break;
X case TEXT_TAB:
X /* XXX This should check for either font_p or font_s, and not assume
X ** font_p automatically!
X */
X if( font_p.spacing == LJ_SP_PROPORTIONAL )
X warning("a tab is being used with a proportional font!", "");
X lj_text_end(output_file);
X fputs("TAB ", output_file);
X lj_text_begin();
X break;
X case TEXT_SH_IN:
X warning("shift-in is not yet supported -- ignoring", "");
X break;
X case TEXT_SH_OUT:
X warning("shift-out is not yet supported -- ignoring", "");
X break;
X case CMD_UNDEF: ljcmd_undefined(input_file, output_file); break;
X case CMD_E: ljcmd_E(output_file); break;
X case CMD_Y: ljcmd_Y(output_file); break;
X case CMD_Z: ljcmd_Z(output_file); break;
X case CMD_9: ljcmd_9(output_file); break;
X case CMD_eq: ljcmd_eq(output_file); break;
X case CMD_lp: ljcmd_lp(input_file, output_file); break;
X case CMD_rp: ljcmd_rp(input_file, output_file); break;
X case CMD_lp_s: ljcmd_lp_s(input_file, output_file); break;
X case CMD_rp_s: ljcmd_rp_s(input_file, output_file); break;
X case CMD_amp_a: ljcmd_amp_a(input_file, output_file); break;
X case CMD_amp_d: ljcmd_amp_d(input_file, output_file); break;
X case CMD_amp_f: ljcmd_amp_f(input_file, output_file); break;
X case CMD_amp_k: ljcmd_amp_k(input_file, output_file); break;
X case CMD_amp_l: ljcmd_amp_l(input_file, output_file); break;
X case CMD_amp_p: ljcmd_amp_p(input_file, output_file); break;
X case CMD_amp_s: ljcmd_amp_s(input_file, output_file); break;
X case CMD_star_b: ljcmd_star_b(input_file, output_file); break;
X case CMD_star_c: ljcmd_star_c(input_file, output_file); break;
X case CMD_star_p: ljcmd_star_p(input_file, output_file); break;
X case CMD_star_r: ljcmd_star_r(input_file, output_file); break;
X case CMD_star_t: ljcmd_star_t(input_file, output_file); break;
X case PARAM_CONTINUE:
X case PARAM_END:
X internal_error("(end)parameter found in transform()", variable);
X break;
X default:
X internal_error("illegal token encountered in transform()", "");
X } /* switch(...) */
X } /* while(...) */
X
X} /* transform() */
X
X
X
SHAR_EOF
$TOUCH -am 0707112690 trans.c &&
chmod 0644 trans.c ||
echo "restore of trans.c failed"
set `wc -c trans.c`;Wc_c=$1
if test "$Wc_c" != "5585"; then
echo original size 5585, current size $Wc_c
fi
# ============= trans.h ==============
echo "x - extracting trans.h (Text)"
sed 's/^X//' << 'SHAR_EOF' > trans.h &&
X/*
X** Project: lj2ps
X** File: trans.h
X**
X** Author: Christopher Lishka
X** Organization: Wisconsin State Laboratory of Hygiene
X** Data Processing Dept.
X**
X** Copyright (C) 1990 by Christopher Lishka.
X**
X** This program is free software; you can redistribute it and/or modify
X** it under the terms of the GNU General Public License as published by
X** the Free Software Foundation; either version 1, or (at your option)
X** any later version.
X**
X** This program is distributed in the hope that it will be useful,
X** but WITHOUT ANY WARRANTY; without even the implied warranty of
X** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
X** GNU General Public License for more details.
X**
X** You should have received a copy of the GNU General Public License
X** along with this program; if not, write to the Free Software
X** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X*/
X
X /* Global constants
X */
X
X /* Global structure and type definitions
X */
X
X /* Global variables
X */
X
X /* Global macro definitions
X */
X
X /* Global functions
X */
Xextern void transform();
SHAR_EOF
$TOUCH -am 0707112690 trans.h &&
chmod 0644 trans.h ||
echo "restore of trans.h failed"
set `wc -c trans.h`;Wc_c=$1
if test "$Wc_c" != "1087"; then
echo original size 1087, current size $Wc_c
fi
rm -f @shar_seq_.tmp
echo "You have unpacked the last part"
exit 0
More information about the Comp.sources.misc
mailing list