0% found this document useful (0 votes)
32 views91 pages

Full Computer Science A Structured Approach Using C Behrouz A. Forouzan PDF All Chapters

The document promotes various computer science ebooks available for download on ebookgate.com, including titles like 'Computer Science: A Structured Approach Using C' by Behrouz A. Forouzan. It highlights the features of the third edition of the book, such as updates to the C language and the inclusion of software engineering principles. The document also emphasizes the pedagogical approach of the book, which includes structured programming techniques and visual aids to enhance learning.

Uploaded by

kregelgrift
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
32 views91 pages

Full Computer Science A Structured Approach Using C Behrouz A. Forouzan PDF All Chapters

The document promotes various computer science ebooks available for download on ebookgate.com, including titles like 'Computer Science: A Structured Approach Using C' by Behrouz A. Forouzan. It highlights the features of the third edition of the book, such as updates to the C language and the inclusion of software engineering principles. The document also emphasizes the pedagogical approach of the book, which includes structured programming techniques and visual aids to enhance learning.

Uploaded by

kregelgrift
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 91

Get the full ebook with Bonus Features for a Better Reading Experience on ebookgate.

com

Computer Science A Structured Approach Using C


Behrouz A. Forouzan

https://ebookgate.com/product/computer-science-a-structured-
approach-using-c-behrouz-a-forouzan/

OR CLICK HERE

DOWLOAD NOW

Download more ebook instantly today at https://ebookgate.com


Instant digital products (PDF, ePub, MOBI) available
Download now and explore formats that suit you...

Cryptography Network Security 1st Edition Behrouz Forouzan

https://ebookgate.com/product/cryptography-network-security-1st-
edition-behrouz-forouzan/

ebookgate.com

Computer Science A Concise Introduction 2nd Edition


Sinclair

https://ebookgate.com/product/computer-science-a-concise-
introduction-2nd-edition-sinclair/

ebookgate.com

101 Design Methods A Structured Approach for Driving


Innovation in Your Organization Vijay Kumar

https://ebookgate.com/product/101-design-methods-a-structured-
approach-for-driving-innovation-in-your-organization-vijay-kumar/

ebookgate.com

Practical programming An introduction to computer science


using Python Jennifer Campbell

https://ebookgate.com/product/practical-programming-an-introduction-
to-computer-science-using-python-jennifer-campbell/

ebookgate.com
Supply Chain Project Management A Structured Collaborative
and Measurable Approach 1st Edition James B. Ayers

https://ebookgate.com/product/supply-chain-project-management-a-
structured-collaborative-and-measurable-approach-1st-edition-james-b-
ayers/
ebookgate.com

Computer Networks A Systems Approach 3rd Edition Larry L.


Peterson

https://ebookgate.com/product/computer-networks-a-systems-
approach-3rd-edition-larry-l-peterson/

ebookgate.com

C for Computer Science and Engineering 4th Edition Vic


Broquard

https://ebookgate.com/product/c-for-computer-science-and-
engineering-4th-edition-vic-broquard/

ebookgate.com

Computer Ethics A Case based Approach 1st Edition Robert


N. Barger

https://ebookgate.com/product/computer-ethics-a-case-based-
approach-1st-edition-robert-n-barger/

ebookgate.com

Structured surfaces as optical metamaterials 1st Edition A


A Maradudin

https://ebookgate.com/product/structured-surfaces-as-optical-
metamaterials-1st-edition-a-a-maradudin/

ebookgate.com
COMPUTE R SCIENCE
A Structured Programming Approach Using C
Behrouz A . Forouzan & Richard F. Gilberg

— THIRD EDITION
Operator Description Example * Assoc Pr
Identifiers amount
3.14159 N N /A 16
' Constants
Parenthetical Expressions (a + b)
[ ]. Array Index ary[i] N
ninction Call doIt(x, y) Y
Direct Member Selection str.mem N Left - Right 16
-> Indirect Member Selection ptr >mem - N
++ Postfix Increment • Decrement a++ Y
++ Prefix Increment • Decrement ++a Y
sizeof Size in Bytes sizeof(int) N

!
Ones Complement
Not
-a
la
N
N Right - Left 15
+ Plus • Minus +a N
& Address &a N
* Dereference / Indirection *ptr N
( )Type Cast (int)ptr N Right -Left 14
* /% Multiply • Divide • Modulus a * b N Left - Right 13
+ - Addition • Subtraction a + b N Left - Right 12
« » Bit Shift Left • Bit Shift Right a << 3 N Left - Right 1 1
< <= > >= Comparison a < 5 N Left - Right 10
ss ! = Equal • Not Equal N Left - Right 9
a == b
& Bitwise And a & b N Left - Right 8
A
Bitwise Exclusive Or a
A
b N Left - Right 7
Bitwise Or a b N Left - Right 6
&& Logical And a b ScSc N Left - Right 5
Logical Or a b N Left - Right 4
? : Conditional a ? x • Y * N Right - Left 3
= + = -= a = 5
*= / = % =
Assignment a %= b
>> =
A
<< =
a &= c Y Right - Left 2
& = = a |= d
> Comma a, b, c N Left - Right 1 i
* Side Effects ( Yes / No )

Precedence Table
>H
' . '

i -t X .U 6
\/o
*+ - - M i | J, -
' X AH .v A f\ £ w \/ dUe
Computer Science:
A Structured Programming
Approach Using C,
Third Edition
DATE DUE

Nov o 5 rm
LI 2o / H
1ft
March
/tprt I a ao\ ( p

2-6 ^6
AA 3 Z7
^i y
Wt ~ 7 IS7 %
JW 3 0 2( 17 <15

i m 1 o : Qi8 Clb
DEC 17 BtS
fa
IAUG 0 ! 2012
»7

Singapore • Spam • United Kingdom •United States


Australia •Brazil • Japan • Korea •Mexico •

SAN JACIN1U COLLEGE LIBHAHY- SOUTH


Preface to Third Edition

basic principles ol program -


This text has two primary objectives: to teach the
_ curriculum for a CS 1 class and to teach the
ming as outlined in the ACM
of the C Language . Our text puts these objectives in the con -
basic constructs
have developed through
text of good software engineering concepts that
we
more than 30 years of experience in industry and academia .

Major Changes in Third Edition


This is a major change from the second edition . In addition to significant
changes in the presentation and material covered , it also updates the lan -
guage to the ISO / IEC 9899 ( 1999 ) , or as it is more commonly known , C 99 .
While we have made major changes, we have held true to our primary
objectives as outlined above. I he text remains a comprehensive introduction
to computer programming in a software engineering context.
The major changes are outlined in the following sections.

Standard C ( 1999 )
I he following topics, in alphabetical order, are explicitly discussed in the text .
• the Boolean type
• character set extensions ( including Unicode and wide-characters)
• complex arithmetic
• extended math library
• for statement declarations
• integer type extensions
• line comments

Extended Chapter Material


In addition to the changes required by the inclusion of the new C99 exten
sions , several chapters have been revised or reorganized .
-
-
A new section in Chapter 4, Inter Function Communication , ” provides a
better understanding of how functions communicate.

IV
Preface to Third Edition v

• The concept of “ incremental program development ’ is presented through


an example that starts in Chapter 4 and is extended in C hapter 5 . A sec -
ond example in Chapter 8 completes the discussion .
• The discussion of text and binary files has been reworked to present the
materials in a more logical, and less redundant, fashion .
• The presentation of structured types is changed to conform to C 99 and
common usage.
• Chapter 14 . “ Bitwise Operators , " has been extended and includes more
examples. In particular, we added several applications related to the
Internet and network programming.
• Chapter 15 , " Lists , " has also been extended . It now includes an overview
of the basic elements of data structures, including introductory discus-
sions of stack, queues, lists , trees , and graphs.
• Additional flowcharts and structure charts are included throughout the
text to provide better design considerations for some of the more complex
examples.
• Appendix D , " Numbering Systems," provides an expanded presentation of
the material.
• Appendix 1, " Pointers to void and to Functions ," has been expanded to
include a discussion of using pointer to void types.
• Appendix k . " Program Development , ” is a new discussion of program
deve lop men t co n cepts.
• Appendix L , “ Understanding Complex Declarations ," contains the discus-
sion on reading complex declarations, which has been removed from
Chapter 10.

A C Language Perspective
While C is a complex and professional language, our classroom experience
using the previous editions of this book has shown that beginning students can
easily understand it . We believe that if the language is put into a perspective
that allows the student to understand its design , C is not a difficult language.
There are two aspects of C that separate it from most other languages:
expressions and pointers. The concept of expressions, as used in C , is unique.
The first half of this text builds a firm understanding of expressions. We intro-
duce pointers only to the extent necessary to cover passing them to functions
7

in Chapter 4 and arrays in Chapter 8. Our experiences have shown that with
a firm grasp of the expression concept , much of the mystery of C disappears.
In Chapters 9 , we begin to develop the concept of pointers, which are
further developed in Chapter 10. Chapter 1 1 provides a discussion of C’s
approach to strings. Finally, Chapter 14 provides an extensive discussion of
bitwise operators, a subject that is needed to make the book complete.
The last chapter is a simple introduction to data structures. While not
all courses will have time to cover this chapter, those that do will give the
ce to Third Edition

students a head start into data structures


. Motivated students will find that
over the term break.
they can "get a leg up” on data structures
a rich set of references to
The appendices at the end of the text comprise
subjects required in the complete C language
. These will be of use to stu -
dents who go on to take other courses in the C language .

Features of the Book


Several features of this book make it unique and easy for beginning students
to understand .

Structure and Style


One of our basic tenets is that good habits are formed early. The corollary is
that bad habits are hard to break. Therefore, we consistently emphasize the
principles of structured programming and software engineering. Throughout
each chapter, short code snippets and programs are used to demonstrate
techniques.
Complete programs, generally found in the last section of the chapter,
are written in a well - document consistent style. As programs are analyzed,
style and standards are further explained . While we acknowledge that there
are many good styles, our experience has shown that if students are exposed
to one good style and adopt it , they will be better able to adapt to other
good styles.

Principle Before Practice


Whenever possible, we develop the principle ot a subject before we introduce
the language implementation . For example , in Chapter 5 we first introduce
the concept of logical data and selection and then we introduce the if . . . else
and suitch statements. This approach gives the student an understanding of
selection before introducing the nuances of the language.

Visual Approach
A brief scan of the hook will demonstrate that our approach is visual . 1 here
are more than 400 figures, plus more than 70 tables and 180 program exam -
pies. While this amount of material tends to create a large hook, the visual
approach makes it easy for students to follow the material .

Examples
While the programming examples vary in
style. Our experience
complexity, each uses a consistent
working with productional programs that live for 10 to
20 years convinced us that
readable and understandable programs are easier
to work with than programs
written in a terse, cryptic manner. For that reason ,
Preface to Third Edition vii

and to emphasize the structure of the language, we label the sections in a


function with comments. We consistently follow a style that places only one
declaration, definition, or statement on a line.
I he source code for these programs is available on the Course Technology
Web site ( see ’Web Site Support Materials” later in this Preface). Students are
able to run these programs and to explore related topics through modification
and experimentation.

Coding Techniques
Throughout the text we include coding techniques that make programs more
readable and often more efficient. For example, in the analyTsis of Program 5 - 4
you will find the following discussion:
Where do we check for greater than } The answer is that we
default the greater than condition to the outer else . . . . When cod -
ing a two - way selection statement , try to code the most probable
condition first; with nested selection statements, code the most
probable first and the least probable last.
These techniques are drawn from our extensive industry and classroom
experience.

Software Engineering
A discussion of software engineering principles concludes each chapter. Our
intent is not to replace a separate course in software engineering. Rather, we
firmly believe that by incorporating basic software engineering principles
early in their studies, students will be better prepared for a formal treatment
of the subject . Even more important, by writing well-engineered programs
from the beginning, students will not be forced to unlearn and relearn. I hey
will better understand software discussions in their subsequent classes.
While the software engineering sections are found at the end of each
chapter, they are most successfully taught by introducing them as the chapter
unfolds. Then, a short review at the end of the chapter summarizes the prin-
ciples that have been demonstrated during the lectures.
These sections are visually distinguishable from the rest of the chapter.
They have been set apart for several reasons. First, they are in reality a small
book within a book. While these sections contain important material, the book
stands on its own without them. You may, therefore, decide to cover the soft -
ware engineering sections as formal lecture topics or informally while the
chapter material is being covered. You may decide to assign them to the stu -
dent as additional reading, or, you may decide to exclude them entirely from
the course.
In general, software engineering sections directly or indirectly pertain to
the chapter material. Where they don’t, they discuss general software engi-
neering subjects, such as cohesion, coupling, and quality.
vjjj Preface to Third Edition

Pedagogical Material
first , it helps the stu -
End chapter material meets two pedagogical objectives:
dents to review or summarize what they have learned , and second , it tests the
students’ mastery of the chapter material .

Review Material
• Tips and Common Programming Errors points out helpful hints and
possible problem areas.
• Key Terms provides a list of the important terms introduced in the chapter.
• Summary contains a concise overview of the key points for students to
understand in the chapter.

Practice Sets
• Review Questions contain several multiple choice questions that are
similar to the questions found in the examination database. The answers
to the odd - numbered questions are included in the solutions on the
Course Technology web site .
• Exercises are short questions covering the material in the chapter. The
answers to the odd - numbered exercises are also included in the solutions
on the Course Technology web site.
• Problems are short coding problems, generally intended to be run on a
computer. They can usually be developed in two to three hours. Once
again , odd - numbered solutions are found on the web site .
• Projects are longer, major assignments that may take the average student
six to nine hours to develop.

Appendices and Cover Material


Ilu appendices are intended to provide quick reference material , such as the
Unicode Character Set , or to provide a review of material, such as numbering
systems , usually covered in a general computer class .
I he inside covers contain two important references
that are used con -
I / O Codes . —
tinually throughout the course the Precedence Table and the
Formatted

Web Site Support Materials


'1 <~ Hl" St lechn logy Web site ( http://www.course.com ) are
twn sets off materials
|
, one for the°professor and one for
the student .
1
Preface to Third Edition ix

Professor Materials
The professors materials include the solutions to all review questions, exer-
cises , and problems. Because the projects are more complex assignments lor
which there is no standard answer, we do not provide solutions for them .
In addition to the end - material solutions , there are three other sets ol
support materials: ( 1 ) Copies of all programs in the text. The programs have
been extensively tested on at least two different computers with different
operating systems. All of them conform to the C99 Standard.
( 2 ) PowerPoint materials covering objectives, figures, programs, impor -
tant points , and chapter summaries. The PowerPoint materials can be used as
is or edited to suit individual class needs. This flexibility allows professors to
argument the text materials with their own . It also allows them to rearrange
the materials to suit their individual needs and style .
( 3) New with the third edition is the availability of ExamView®. This
objective- based test generator lets the professor create paper, LAN , or Web-
based tests from testhanks designed specifically for this text . Using the
QuickTest Wizard , they can easily and quickly create true/false and multiple -
choice tests. It is also possible to add questions that cover supplemental
material provided by the professor.

Student Materials
I he student materials include the solutions to the odd - numbered review
questions , exercises , and problems. They also have access to the copies of the
programs used in the text

Acknowledgments
No book of this scope can he developed without the support ol many people.

Reviewers
To anyone who has not been through the process, the value ol peer reviews
cannot he appreciated enough . Writing a text rapidly becomes a myopic pro -
cess. The important guidance of reviewers who can stand hack and review the
text as a whole cannot be measured. We would especially like to acknowledge
the contributions of the reviewers of all three editions.
Stephen Allen , Utah State University
Mary Astone, / roy State University
Ali Behforooz, Towson State University
George Berrv, Wentworth Institute oj technology
Ernest Carey, Utah Valley State College
Ping Chu Chu , Fayetteville State University
Preface tojhird Edition
r
of San Francisco
Constance Conner, City College
Connecticut State University
John S. DaPonte, Southern University
Maurice L. Eggen , Trinity
/

Peter Gabrovsky, CSU Northridge


Robert Gann , Hartwick College
Henry Gordon , Kutztown University
Rick Graziani , Cabrillo College
Barbara Guillott , Louisiana State University
Jerzy Jaromczyk, University of Kentucky
John Kinio, Humber College
Roberta Klibaner, College of Staten Island
Joseph A. Konstan , University of Minnesota
Krishna Kulkarni, Rust College
John Lowther, Michigan Technological University
Mike Michaelson , Palomar College

Kara Nance, University of Alaska Fairbanks
Ali Nikzad , Huston -Tillotson College
Jo .Ann Parikh , Southern Connecticut State University
Mark Parker, Shoreline Community College
Savitha Pinnepalli, Louisiana State University
Oskar Reiksts, Kutztown University
Jim Roberts, Carnegie Mellon University
Ali Salenia, South Dakota State University
Larry Sells, Oklahoma City University
Shashi Shekhar, University of Minnesota
Robert Signorile, Boston College
Brenda Sonderegger, Montana State University
Deborah Sturm , College of Staten Island
Venkat Subramanian . University of Houston
John B. Iappen , University of Southern Colorado
Marc Thomasm , California State University, Bakersfield
John Irono, St . Michael 's College
K C. Wong, Fayetteville State University

Course Technology Staff


Our thanks to our editors , Alyssa Pratt , Senior Product Manager, and Mary
hranz , Senior Acquisitions Editor, for helping us produce the book. We are
also indebted to the Quality Assurance staff who diligently double checked
-
each c aP er anc program. Our thanks to Burt LaFountain , Serge Palladino,
^ ^ ’ .^
and Chris Sc river *
• ^^
W< U aS
? Mitchell
cially Sandra
° to diank the staff at GEX Publishing Services , espe-
, who ably guided the book through production .

BehrouzA. Forouzan
Richard F. Gilberg
1

Chapter 1 Introduction to Computers 1


1.1 Computer Systems 2
Computer Hardware 2
Computer Software 3
1.2 Computing Environments 5
Personal Computing Environment 5
Time-Sharing Environment 5
Client/Server Environment 6
Distributed Computing 7
1.3 Computer Languages 7
Machine Languages 8
Symbolic Languages 9
High-Level Languages 10
1.4 Creating and Running Programs 11
Writing and Editing Programs 12
Compiling Programs 12
Linking Programs 12
Executing Programs 13
1.5 System Development 13
System Development Life Cycle 13
Program Development 14
1.6 Software Engineering 22
1.7 Tips and Common Errors 24
1.8 Key Terms 24
1.9 Summary 25
1.10 Practice Sets 26
Review Questions 26
Exercises 28
Problems 28
29
Chapter 2 Introduction to the C Language
2.1 Background 30
2.2 C Programs 31
Structure of o C Program 31
Your First C Program 32
Comments 34
The Greeting Program 35
2.3 Identifiers 36
2.4 Types 38
Void Type 38
Integral Type 38
Floating-Point Types 41
Type Summary 42
2.5 Variables 42
Variable Declaration 43
Variable Initialization 44
2.6 Constants 4/
Constant Representation 47
Coding Constants 51
2.7 Input/Output 53
Streams 53
Formatting Input/Output 54
2.8 Programming Examples 68
2.9 Software Engineering 77
Program Documentation 77
Data Names 78
Data Hiding 79
2.10 Tips and Common Programming Errors 81
2.11 Key Terms 82
2.12 Summary 82
2.13 Practice Sets 84
Review Questions 84
Exercises 86
Problems 89
Projects 90

Chapter 3 Structure of a C Program 93


3.1 Expressions 94
Primary Expressions 95
Postfix Expressions 95
Prefix Expressions 97
1
Contents xiii

Unary Expressions 99
Binary Expressions 101
3.2 Precedence and Associativity 106
Precedence 107
Associativity 108
3.3 Side Effects 110
3.4 Evaluating Expressions 111
Expressions without Side Effects 111
Expressions with Side Effects 112
Warning 113
3.5 Type Conversion 114
Implicit Type Conversion 114
Explicit Type Conversion (Cast) 118
3.6 Statements 120
Statement Type 120
The Role of the Semicolon 124
Statements and Defined Constants 124
3.7 Sample Programs 125
3.8 Software Engineering 135
KISS 135
Parentheses 135
User Communication 136
3.9 Tips and Common Errors 138
3.10 Key Terms 138
3.11 Summary 139
3.12 Practice Sets 140
Review Questions 140
Exercises 142
Problems 144
Projects 146

Chapter 4 Functions 149


4.1 Designing Structured Programs 150
4.2 Functions in C 151
4.3 User -Defined functions 155
Basic Function Designs 156
Function Definition 162
Function Declaration 164
The Function Call 165
Function Examples 166
Contents xv
'
5.3 Multiway Selection 254
The switch Statement 255
The else-if 261
5.4 More Standard Functions 264
Standard Characters Functions 264
A Classification Program 266
Handling Major Errors 268
5.5 Incremental Development Part II 268
Calculator Design 269
Calculator Incremental Design 269
5.6 Software Engineering 280
Dependent Statements 280
Negative Logic 281
Rules for Selection Statements 282
Selection in Structure Charts 283
5.7 Tips and Common Programming Errors 285
5.8 Key Terms 286
5.9 Summary 286
5.10 Practice Sets 287
Review Questions 287
Exercises 289
Programs 294
Projects 295

Chapter 6 Repetition 303


6.1 Concept of a loop 304
6.2 Pretest and Post-test Loops 304
6.3 Initialization and Updating 306
Loop Initialization 306
Loop Update 306
6.4 Event- and Counter-Controlled Loops 308
Event-Controlled Loops 308
Counter-Controlled Loops 308
Loop Comparison 309
6.5 Loops in C 309
The while Loop 310
The for Loop 315
The do . ..while Loop 319
The Comma Expression 323
6.6 Loop Examples 325
for Loops 325
Contents xvii

7.3 Standard Library Input/Output Functions 397


File Open and Close 398
7.4 Formatting Input/Output Functions 403
Stream Pointer 404
Format Control Strings 404
Input Formatting ( scantand fsconf ) 406
Output Formatting ( printf and fprintf) 418
File Sample Programs 425
7.5 Character Input/Output Functions 432
Terminal Character I/O 433
Terminal and File Character I/O 434
Character Input/Output Examples 436
7.6 Software Engineering 442
Testing Files 442
Data Terminology 445
7.7 Tips and Common Programming Errors 447
7.8 Key Terms 448
7.9 Summary 448
7.10 Practice Sets 449
Review Questions 449
Exercises 451
Problems 453
Projects 455

Chapter 8 Arrays 459


8.1 Concepts 460
8.2 Using Arrays in C 463
Declaration and Definition 463
Accessing Elements in Arrays 464
Storing Values in Arrays 465
Precedence of Array References 469
Index Range Checking 470
8.3 Inter -Function Communication 473
Passing Individual Elements 473
Passing the Whole Array 475
8.4 Array Applications 481
Frequency Arrays 481
Histograms 482
Random Number Permutations 487
8.5 Sorting 490
Selection Sort 491
Bubble Sort 493
Insertion Sort 496
Testing Sorts 499
Sorts Compared 500
Sort Conclusions 500
8.6 Searching 501
Sequential Search 501
Binary Search 505
8.7 Two-Dimensional Arrays 509
Declaration 510
Passing a Two-Dimensional Array 516
8.8 Multidimensional Arrays 519
Declaring Multidimensional Arrays 520
8.9 Programming Example-Calculate Averages 522
First Increment: main 523
Second Increment: Get Data 524
Third Increment: Calculate Row Averages 526
Fourth Increment: Calculate Column Averages 528
Fifth Increment: Print Tables 528
8.10 Software Engineering 532
Testing Sorts 532
Testing Searches 532
Analyzing Sort Algorithms 533
Analyzing Search Algorithms 535
8.11 Tips ond Common Programming Errors 537
8.12 Key Terms 538
8.13 Summory 538
8.14 Practice Sets 540
Review Questions 540
Exercises 542
Problems 545
Projects 550

Chapter 9 Pointers 557


9.1 Introduction 558
Pointer Constants 558
Pointer Values 559
Pointer Variables 561
Accessing Variables Through Pointers 562
Pointer Declaration and Definition 563
Declaration versus Redirection S65
Initialization of Pointer Variables 566
9.2 Pointers for Inter-Function Communication 573
Passing Addresses 573
Functions Returning Pointers 575
Contents xix

9.3 Pointers to Pointers 576


9.4 Compatibility 578
Pointer Size Compatibility 579
Dereference Type Compatibility 580
Dereference Level Compatibility 583
9.5 Lvalue and Rvalue 583
Pointer Examples 585
9.6 Software Engineering 593
Quality Defined 593
Quality Factors 594
The Quality Circle 597
Conclusion 598
9.7 Tips and Common Programming Errors 599
9.8 Key Terms 600
9.9 Summary 600
9.10 Practice Sets 601
Review Questions 601
Exercises 604
Problems 607
Projects 608

Chapter 10 Pointer Applications 611


10.1 Arrays and Pointers 612
10.2 Pointer Arithmetic and Arrays 614
Pointers and One-Dimensional Arrays 614
Arithmetic Operations on Pointers 617
Using Pointer Arithmetic 618
Pointers and Two-Dimensional Arrays 621
10.3 Passing an Array to a Function 623
10.4 Memory Allocation Functions 627
Memory Usage 627
Static Memory Allocation 628
Dynamic Memory Allocation 628
Memory Allocation Functions 628
Reallocation Of Memory ( realloc) 631
Releasing Memory ( fee) 631
10.5 Array of Pointers 633
10.6 Programming Applications 634
Selection Sort Revisited 634
Dynamic Array 639
Contents xxi
1
String to Number 704
String Examples 707
11.6 String/Data Conversion 712
String to Data Conversion 713
Data to String Conversion 714
11.7 A Programming Example — Morse Code 718
11.8 Software Engineering 728
Program Design Concepts 728
Information Hiding 728
Cohesion 728
Summary 732
11.9 Tips and Common Programming Errors 733
11.10 Key Terms 734
11.11 Summary 734
11.12 Practice Sets 735
Review Questions 735
Exercises 737
Problems 740
Projects 742

Chapter 12 Enumerated, Structure, and Union Types 745


12.1 The Type Definition ( lypedef ) 746
12.2 Enumerated Types 746
Declaring an Enumerated Type 74 7
Operations on Enumerated Types 748
Enumeration Type Conversion 749
Initializing Enumerated Constants 749
Anonymous Enumeration: Constants 750
Input/Output Operations 752
12.3 Structure 752
Structure Type Declaration 753
Initialization 755
Accessing Structures 756
Operations on Structures 759
Complex Structures 764
Structures and Functions 774
Sending the Whole Structure 7 7 5
Passing Structures Through Pointers 7 7 8
12.4 Unions 782
Referencing Unions 782
Initializers 782
Contents xxiii

13.7 Key Terms 867


13.8 Summary 867
13.9 Practice Sets 868
Review Questions 868
Exercises 870
Problems 876
Projects 877

Chapter 14 Bitwise Operators 881


14.1 Exact Size Integer Types 882
14.2 Logical Bitwise Operators 882
Bitwise and Operator 882
Bitwise Inclusive or Operator 884
Bitwise Exclusive or Operator 885
One's Complement Operator 886
14.3 Shift Operators 889
Rotation 894
14.4 Masks 896
Creating Masks 896
Using Masks 898
14.5 Software Engineering 907
Payroll Case Study 907
Program Design Steps 908
Structure Chart Design 908
14.6 Tips and Common Programming Errors 914
14.7 Key Terms 915
14.8 Summary 915
14.9 Practice Sets 916
Review Questions 916
Exercises 917
Problems 920
Projects 921

Chapter 15 Lists 927


15.1 List Implementations 928
Array Implementation 928
Linked List Implementation 928
15.2 General Linear Lists 930
Insert a Node 930
Delete a Node 935
Locating Data in Linear Lists 938
Traversing linear Lists 941
Building a linear List 943
Build List 944
Remove a Node 945
Linear List Test Driver 946
15.3 Stacks 949
Stack Structures 950
Stack Algorithms 951
Stack Demonstration 954
15.4 Queues 958
Queue Operations 958
Queue Linked List Design 960
Queue Functions 961
Queue Demonstration 964
15.5 Trees 96 /
Basic Tree Concepts 96 /
Terminology 968
Binary Trees 969
Binary Search Trees 9 / 5
Binary Tree Example 9 / 8
15.6 Graphs 981
Graph Traversal 983
15. / Software Engineering 986
Atomic and Composite Data 986
Data Structure 98 /
Abstract Data Type 987
A Model for an Abstract Data Type 989
ADT Data Structure 990
15.7 Tips and Common Programming Errors 991
15.8 Key Terms 992
15.9 Summary 992
15.10 Practice Set 994
Review Questions 994
Exercises 996
Problems 1000
Projects 1002

Appendix A Character Sets 1005


A .l Unicode 1006
Planes 1006
A.2 ASCII 1009
Some Properties of ASCII 1014
A. 3 Universal Encoding in C 1015
Contents xxv

Appendix B Keywords 1017

Appendix C Flowcharting 1019


C.l Auxiliary Symbols 1019
Flow Lines 1020
Connectors 1021
C.2 Primary Symbols 1021
Sequence 1022
Selection Statements 1024
Looping Statements 1026

Appendix D Numbering Systems 1033


D.l Computer Numbering System 1033
Decimal Numbers ( Base 10) 1034
Binary Numbers (Base 2) 1034
Hexadecimal Numbers (Base 16) 1036
Base 256 1037
A Comparison 1038
Other Conversions 1039
D.2 Storing Integers 1040
Unsigned Integers 1040
Signed Integers 1041
Overflow 1047
D.3 Storing Real Numbers 1049
Normalization 1049
Sign, Exponent, and Mantissa 1051
IEEE Standards 1051
Storing and Retrieving Algorithm 1051

Appendix E Integer and Float Libraries 1055


E. l limits . h 1055
E .2 float .h 1056

Appendix F Function Libraries 1059


F.l Function Index 1059
F.2 Type Library 1062
F.3 Math Library 1063
F.4 Standard 1/0 Library 1065
General 1/0 1066
Formatted 1/0 1066
xxvi Contents

Character I/O 1066


File I/O 1067
String I/O 1067
System File Control 1067
F.5 Standard Library 1067
Math Functions 1067
Memory Functions 1068
Program Control 1068
System Communication 1068
Conversion Functions 1068
F.6 String Library 1068
Memory Functions 1068
String Functions 1069
F.7 Time Library 1069

Appendix G Preprocessor Commands 1071


G.l File Inclusion 1072
G.2 Macro Definition 1072
Coding Defined Constants 1073
Macros that Simulate Functions 1074
Nested Macros 1077
Undefining Macros 1078
Predefined Macros 1078
Operators Related to Macros 1079
G.3 Conditional Compilation 1080
Two-Way Commands 1081
Multi-Way Commands 1085
Summary of Conditional Commands 1086
G.4 Other Commands 1087
Line Command 1087
Error Command 1088
Pragma Command 1089
Null Command 1089

Appendix H Command-Line Arguments 1091


H.l Defining Command-Line Arguments 1091
H.2 Using Command-Line Arguments 1093

Appendix I Pointers to Void ond to Functions 1095


1.1 Pointer to void 1095
1.2 Pointer to Function 1097
Contents xxvii

Appendix J Storage Classes and Type Qualifiers 1103


J.l Storage Classes 1103
Object Storage Attributes 1103
Storage Class Specifiers 1105
J.2 Type Qualifiers 1111
Constants 1112
Volatile 1113
Restricted 1114

Appendix K Program Development 1115


K .l Process 1115
First Case: A Simple File 1115
Second Case: Two Functions 1117
Third Case: Two Source Files 1118
Case 4 : Separate Compilation of Function 1120
K.2 Coding 1121
UNIX 1121
Other Platforms 1124

Appendix L Understanding Complex Declarations 1125

Glossary 1129

Index 1145
t

I
Introduction to Computers
and
Welcome to computer science! You are about to explore a wonderful
exciting world — a world that offers many challengin g and
In this chapter, we introduce you to the concepts of computer
exciting careers .
science ,

especially as they pertain to computer programming . You will study the con -
cept of a computer system and how it relates to computer hardware
and soft -
ware. We will also present a short history of computer programmi ng
languages so that you understand how they have evolved and how the C lan -
guage fits into the picture.
We will then describe how to write a program , lirst with a review ot the
tools and steps involved , and then with a review of a system development
methodology.

Objectives
To review basic computer systems concepts
To be able to understand the different computing environments and
their
components
To review the history of computer languages
To be able to list and describe the classifications of computer language
s
To understand the steps in the development of a computer program
To review the system development life cycle

1
2 Section 1.1 Computer Systems

1.1 Computer Systems


everywhere. Computers have become
Today computer systems are found
. But what is a computer? A computer is a
almost as common as Ltelevisions
_
The com - .
components: hardware and software
system made of two major the collection of
puter hardware is the physical
equipment. The software is
the hardware to do its job . Figure I - 1 rep -
programs (instructions) that allow
resents a computer system .

Computer
System

Hardware Software

FIGURE 1 - 1 A Computer System

Computer Hardware
The hardware component of the computer system consists of five parts:
input devices, central processing unit (CPU ), primary storage, output
devices, and auxiliary storage devices (Figure 1 - 2 ).

Primary Monitor
Keyboard CPU
Storage
Input Devices

t
Printer
Auxiliary Storage Devices Output Devices

FIGURE 1 - 2 Basic Hardware Components

I he input device is usually a keyboard


where programs and data are
entered into the computer. Examples of other input
a pen or stylus, a touch screen, or an
devices include a mouse,
audio input unit.
The central processing unit (CPU) is
responsible for executing
instructions such as arithmetic calculations, comparisons among
data, and
Chapter 1 Introduction to Computers 3

one, tyvo ,
movement of data inside the system . Today’s computers may have
main memory is a place
or more CPUs. Primary storage , also known as
,

where the programs and data are stored temporarily during processing. The
data in primary storage are erased when we turn off a personal computer or
when we log off from a time -sharing computer.
The output device is usually a monitor or a printer to show output . If the
output is shown on the monitor, we say we have a soft copy. If it is printed
on
the printer, we say we have a hard copy .
Auxiliary storage, also known as secondary storage, is used for both
input and output. It is the place where the programs and data are stored per-
manently. When we turn off the computer, our programs and data remain in
the secondary storage, ready for the next time we need them .

Computer Software
Computer software is divided into two broad categories: system software and
application software. This is true regardless of the hardware system architec -
ture. System software manages the computer resources. It provides the inter-
face between the hardware and the users hut does nothing to directly serve
the users’ needs. Application software, on the other hand , is directly responsi -
ble for helping users solve their problems. Figure 1 - 3 shows this breakdown
of computer software .

Software

System Application
Software Software

Operating System System General Application


Systems Support Development Purpose Specific

FIGURE 1 - 3 Types of Software

System Software
System software consists of programs that manage the hardware resources
of a computer and perform required information processing tasks . These pro -
grams are divided into three classes: the operating system , system support
,
and system developme nt .
The operating system provides services such as a user interface, file and
database access, and interfaces to communication systems such as Internet
protocols. The primary purpose of this software is to keep the system operat -
.
ing in an efficient manner while allowing the users access to the system
System support software provides system utilities and other operating
services . Examples of system utilities are sort programs and disk format
4 Section 1.1 Computer Systems
perlormance
consist of programs that provide
programs. Operating services and security monitors to protect the system
statistics for the operational
staff
and data. software ,
, system development
The last system software category lan -
convert programs into machine
includes the language translators that ensure that the programs are error-
guage for execution , debugging tools
to
engineering ( CASE ) systems that
are
free , and computer-assisted software
beyond the scope of this hook .

Application Software
classes: general-purpose software
Application software is broken into two
purpose software is purchased
and application -specific software. General-
he used lor more than one application .
from a software developer and can
word processors , database
Examples of general - purpose software include
management systems, and computer-aided
design systems. I hey are labeled
computing problems.
general purpose because they can solve a variety of user
purpose.
Application -specific software can he used only for its intended
requirements
A general ledger system used by accountants and a material
are examples of
planning system used by a manufacturing organization
only for the task for which
application -specific software. They can he used
they were designed ; they cannot he used for other generaliz ed tasks .

The relationship between system and application software is seen in


Figure 1 - 4 . In this figure, each circle represents an interface point. The inner
core is the hardware . The user is represented by the outer layer. To work with
the system , the typical user uses some form of application software. The
application software in turn interacts with the operating system , which is a
part of the system software layer. The system software provides the direct
interaction with the hardware. Note the opening at the bottom of the fig ure .
This is the path followed hv the user who interacts directly with the operating
system when necessary.

User

Software
W

FIGURE 1 - 4 Relationship Between System and Application Software


Chapter 1 Introduction toComputers 5

If users cannot buy software that supports their needs , then a custom -
developed application must be built . In today’s computing environment , one
of the tools used to develop software is the C language that we will he study-
ing in this text .

1.2 Computing Environments


In the early days of computers , there was only one environment : the main -
frame computer hidden in a central computing department . With the advent
of minicomputers and personal computers, the environment changed , result -
ing in computers on virtually every desktop. In this section we describe sev -
eral different environments.

Personal Computing Environment


In 1971 , Marcian E. Hoff , working for Intel , combined the basic elements of
the central processing unit into the microprocessor. This first computer on a
chip was the Intel 4004 and was the grandparent many times removed of
Intel ’s current system .
If we are using a personal computer, all of the computer hardware com -
ponents are tied together in our personal computer ( or PC for short ) . In
1

this situation , we have the whole computer for ourself ; we can do whatever
we want . A typical personal computer is shown in Figure 1 - 5 .

Monitor
Hard Drive
(Internal)
DVD ^
CD
Keyboard Mouse

FIGURE 1 - 5 Personal Computing Environment

Time- Sharing Environment


Employees in large companies often work in what is know n as a time-sharing
environment . In the time-sharing environment , many users are connected to
one or more computers. These computers may be minicomputers or central
mainframes. The terminals they use are often nonprogrammable, although
today we see more and more microcomputers being used to simulate termi -
nals. Also, in the time sharing environment , the output devices ( such as
- ol the
printers ) and auxiliary storage devices (such as disks) are shared by all

operating
1 . PC is now generally accepted to mean any hardware using one of Microsoft s Windows

systems, as opposed to Apple ’s Macintosh. We use it in the original , generic


sense meaning any per -
sonal computer.
6 Section 1.2 Computing Environments
is shared by many stu -
in which a minicomputer
users. A typical college lab
dents is shown in Figure 1 -
6.

Central Computer
Central Storage

Shared Printers

FIGURE 1 - 6 Time- sharing Environment

In the time-sharing environment , all computing must he done


hy the cen -
the central computer has many duties : It must
tral computer. In other words ,
control the shared resources ; it must manage the shared data and printing;
and it must do the computin g. All of this work tends to keep the computer
busy. In fact , it is sometimes so busy that the user becomes frustrated hy the
computers slow responses.

Client/Server Environment
A client/server computing environment splits the computing function
between a central computer and users’ computers. The users are given per-
sonal computers or workstations so that some of the computation responsi -
bility can he moved Irom the central computer and assigned to the
workstations. In the client/server environment , the users’ microcomputers or
workstations are called the client . The central computer, which may be a
powerful microcomputer, minicomputer, or central mainframe system , is
known as the server. Because the work is now shared between the users
computers and the central computer, response time and monitor display are
aster and the users are more productive. Figure 1 - 7 shows a tvpical client /
server environment.
Chapter 1 Introduction to Computers 7

Server

Shared Printers
Central Storage

Clients

FIGURE 1 -7 The Client / Server Environment

Distributed Computing
A distributed computing environment provides a seamless integration of
computing I unctions between different servers and clients. The Internet pro-
vides connectivity to different servers throughout the world . For example ,
eBay uses several computers to provide its auction service. This environment
provides a reliable, scalable, and highly available network. Figure 1 -8 shows a
distributed computing system.

Server

Internet

Server Clients
(browsers)

FIGURE 1 - 8 Distributed Computing

1.3 Computer Languages


To write a program for a computer, we must use a computer language. Over
the years computer languages have evolved from machine languages to natural
languages. A summary of computer languages is seen in Figure 1 - 9 .
8 Section 1.3 Computer longuoges

1940s 1950s

FIGURE 1 - 9 Computer Language Evolution

Machine Languages
only programming languages available
In the earliest days of computers , the
computer has its own machine language ,
were machine languages. Each
1 - 1 shows an example of a
which is made of streams of Os and fs. Program
two numbers and prints the
machine language. This program multiplies
results.

PROGRAM 1 - 1 The Multiplication Program in Machine Language


1 00000000 00000100 0000000000000 000
2 01011110 00001100 11000010 0000000000000010
3 11101111 00010110 0000000000000101
4 11101111 10011110 0000000000001011
5 11111000 10101101 11011111 0000000000010010
6 01100010 11011111 0000000000010101
7 l i i o i n i ooooooio u n i o n oooooooooooiom
8 11110100 10101101 11011111 0000000000011110
9 00000011 10100010 11011111 0000000000100001
10 l i i o i n i ooooooio u n i o n ooooooooooiooio o
11 0 1 1 1 1 1 1 0 1 1 1 1 0 1 0 0 1 0 1 0 1 1 0 1
12 1 1 1 1 1 0 0 0 1 0 1 0 1 1 1 0 1 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1
13 ooooono IOIOOOIO u n i o n oooooooooonooo i
14 l i i o i n i ooooooio u n i o n oooooooooonoio o
15 01010000 11010100 0000000000111011
16 00000100 0000000000111101

The instructions in machine language must he in streams of O s and I s


because the internal circuits of a computer are made of switches, transistors,
and other electronic devices that can be in one ol two states: off or on . 1 he
off state is represented by 0; the on state is represented by 1 .

The only language understood by computer hardware is


machine language.
Chapter 1 Introduction to Computers 9

Symbolic Languages
It became obvious that few programs would be written if programmers contin-
.
ued to work in machine language In the early 1950s, Admiral Grace I topper, a
mathematician and naval officer, developed the concept of a special computer
program that would convert programs into machine language. I hese early
programming languages simply mirrored the machine languages using
symbols, or mnemonics, to represent the various machine language instructions.
Because they used symbols, these languages were known as symbolic
.
languages Program 1 - 2 shows the multiplication program in a symbolic
language. 2

PROGRAM 1 - 2 The Multiplication Program in Symbolic Language


1 entry main,~ m<r2>
2 subl 2 # 12 ,sp
3 jsb C$MAIN ARGS_
4 movab $CHAR STRING CON
5
6 pushal -8( fp)
7 pushal (r2)
8 calls # 2 ,SCANF
9 pushal -12( fp)
10 pushal 3( r2)
11 calls # 2 ,SCANF
12 mull3 - -
8( fp), 12( fp )
13 pusha 6( r 2 )
14 calls # 2 ,PRINTF
15 clrl rO
16 ret

Because a computer does not understand symbolic language, it must be


translated to the machine language. A special program called an assembler
translates symbolic code into machine language. Because symbolic languages
had to he assembled into machine language, they soon became known as
assembly languages. This name is still used today for symbolic languages
that closely represent the machine language of their computer.

Symbolic language uses symbols, or mnemonics, to represent the various


machine language instructions.

2. The symbolic language format is label , operators, and operands. There are no labels in this example,
so the left column is empty.
10 Section 1.3 Computer Languages

High- Level Languages


Although symbolic languages greatly improved programming efficiency, they
still required programmers to concentrate on the hardware that they were
using. Working with symbolic languages was also very tedious because each
machine instruction had to be individually coded . The desire to improve pro-
grammer efficiency and to change the focus from the computer to the prob-
lem being solved led to the development ol high - level languages .
High - level languages are portable to many different computers, allowing
the programmer to concentrate on the application problem at hand rather
than the intricacies of the computer. High -level languages are designed to
relieve the programmer from the details of the assembly language. High - level
languages share one thing with symbolic languages , however: I hey must be
converted to machine language. The process of converting them is known as
compilation .
I he first widely used high -level language, FORTRAN / was created by
John Backus and an IBM team in 1957; it is still widely used today in scien -
tific and engineering applications. Following soon after FORTRAN was
COBOL.4 Admiral Hopper was again a key figure in the development of the
COBOL business language.
C , with its standard libraries, is considered a high - level language used for
-
system software and new application code. Program 1 3 shows the multipli -
cation program as it would appear in the C language.

PROGRAM 1 - 3 The Multiplication Program in C


1 /* This program reads two integers from the
keyboard
2 and prints their product.
3 Written by:
4 Date:
5 */
6 # include <stdio.h >
7
8 int main ( void )
9 {
10 // Local Definitions
11 int numberl ;
12 int number2;
13 int result;
14
15 // Statements

continued
3. FORTRAN is an acronym for
4. COBOL is an acronym FORmula TRANslation.
for COmmon Business-Ori
rientcd Language.
Chapter 1 Introduction to Computers 11

PROGRAM 1 - 3 The Multiplication Program in C (continued )


16 scanf ( " %d " , & number 1 );
17 scanf ( "%d " , &number2);
18 result = numberl * number2;
19 printf ( " %d " , result );
20 return 0;
21 > // main

1.4 Creating and Running Programs


As we learned in the previous section, computer hardware understands a pro-
gram only it it is coded in its machine language. In this section, we explain
the procedure for turning a program written in C into machine language. The
process is presented in a straightforward, linear fashion, but you should rec -
ognize that these steps are repeated many times during development to cor -
rect errors and make improvements to the code.
It is the job of the programmer to write and test the program. There are
lour steps in this process: ( I ) writing and editing the program, ( 2 ) compiling
the program, ( 3 ) linking the program with the required library modules, and
( 4 ) executing the program . These steps are seen in Figure 1 - 10.

/tv ainclude < stdio.h>


Programmer int main ( void )
Text Editor {

} // main
Source

00110 100
10101 010
Compiler
01001 011
10110 100
is Object

/00110 1001 01010 io\


0011001101001001
Linker

Library h" ' \piooi 0111011010 oj Executable

Loader

Results

FIGURE 1 - 10 Building a C Program


12 Section 1.4 Creating and Running Programs

Writing and Editing Programs

reports, or write programs.


our system , we could use it to write letters create
,

text and program writing is that pro-


The main difference between processing
text processing is clone with
grams are written using lines of code, while most
characters and lines.
, but it is more
Our text editor could be a generalized word processor
often a special editor included with the compiler . Some of the features you
should look for in your editor are search commands to locate and replace
statements, copy and paste commands to copy or move statements
I mm one
part of a program to another, and formatting commands that allow you to set
tabs to align statements.
After we complete a program , we save our file to disk. I his file will be
input to the compiler ; it is known as a source file .

Compiling Programs
The code in a source file stored on the disk must he translated into machine
language . This is the job of the compiler. The C compiler is actually tw o sep -
arate programs: the preprocessor and the translator.
The preprocessor reads the source code and prepares it for the transla -
tor. While preparing the code , it scans for special instructions known as
preprocessor commands. These commands tell the preprocessor to look for
special code libraries, make substitutions in the code, and in other ways pre -
pare the code for translation into machine language . The result of prepro-
cessing is called the translation unit .
After the preprocessor has prepared the code for compilation , the trans-
lator does the actual work of converting the program into machine language.
I he translator reads the translation unit and writes the resulting object
module to a file that can then be combined with other precompiled units to
form the final program . An object module is the code in machine language .
Even though the output of the compiler is machine language
code, it is not
yet ready to run ; that is, it is not yet executable
because it does not have the
required C and other functions included .

Linking Programs
fomTofof theseSeVatT
omc th ’
functions
3
uam maJe UPof °f source> Unctions. However
C P 8
and?they
iS man ’ We write

processes^and m.them..icai
, are a part our program
W L , " ,T that " ."elsewhere
libra
°
functions
" T1' f •

^
exist and
The linker assembles be attached
must our program
to .
all of these functio ns, ours and
final executable program . the system s , into our
Chapter 1 Introduction to Computers 13

Executing Programs
Once our program has been linked , it is ready for execution . To execute a pro-
gram , we use an operating system command , such as run , to load the pro-
gram into primary memory and execute it . Getting the program into memory
is the function of an operating system program known as the loader. It
locates the executable program and reads it into memory. When everything is
loaded , the program takes control and it begins execution . In todays inte -
grated development environments, these steps are combined under one
mouse click or pull-down window.
In a typical program execution , the program reads data lor processing,
either from the user or from a file . After the program processes the data , it
prepares the output. Data output can he to the user ’s monitor or to a file .
When the program has finished its job, it tells the operating system , which
then removes the program from memory.

1.5 System Development


We ’ve now seen the steps that are necessary to build a program . In this sec -
tion , we discuss how we go about developing a program. I his critical process
determines the overall quality and success of our program . II we carefully
design each program using good structured development techniques , our pro-
grams will be efficient , error-free, "* and easy to maintain .

System Development Life Cycle


Today’s large -scale, modern programming projects are built using a series of
interrelated phases commonly referred to as the system development life
cycle . Although the exact number and names of the phases differ depend -
ing on the environment , there is general agreement as to the steps that
must he followed . Whatever the methodology, however, today ’s software
engineering concepts require a rigorous and systematic approach to soft -
ware development .6
One very popular development life cycle is the waterfall model . Depend -
ing on the company and the type of software being developed , this model
consists of between five and seven phases. Figure 1 - 1 I is one possible varia -
tion on the model .


5. Many computer scientists believe that all programs contain at least one hug an undetected error —
that is just waiting to cause problems, given the right set of circumstances. Programs have run for
years without problems only to fail when an unusual situation occurs. Perhaps the most famous bug
was the one known as Y 2 K because it caused programs to fail on January 1.20( H ).
6. For a discussion of various models, see Software Engineering : A Practitioner ' s Approach , 5 th. ed . by
Roger S . Pressman , ( New York . NY: McGraw- Hill , 2001 ).
/

14 Section 1.5 System Development

Systems
Requirements
Analysis

Design

Maintenance

FIGURE 1 - 11 Waterfall Model

The waterfall model starts with systems requirements . In this phase, the
systems analyst defines requirements that specif ) what the proposed system
is to accomplish. The requirements are usually stated in terms that the user
understands. The analysis phase looks at different alternatives from a system ’s
point of view, while the design phase determines how the system will be built .
In the design phase, the functions of the individual programs that will make
up the system are determined and the design of the liles and/or the databases
is completed . Finally, in the fourth phase, code , we write the programs. This
is the phase that is explained in this book. After the programs have been writ -
ten and tested to the programmer’s satisfaction , the project proceeds to sys -
tem test . All of the programs arc tested together to make sure the system
works as a whole . The final phase, maintenance , keeps the system working
once it has been put into production .
Although the implication of the waterfall approach is that the phases
( low in a continuous stream from the first
to the last, this is not really the
case. Note the iteration as indicated by the backward - flowing arrows in
Figure 1 - 1 1 . As each phase is developed , errors and omissions will often be
found in the previous work. When this happens, it is necessary to go back to
the previous phase to rework it lor consistency and to analyze the
impact
caused hv the changes. Hopefully, this is a short rework. We are aware of at
least three major projects, however, that were in the code
and test phases
when it was determined that they could not be implemented
and had to be
canceled. When this happens, millions of dollars and years
of development
are lost .

Program Development
Program Development is a multistep process
stand the problem , develop a solution , that requires that we under-
write the program , and then test it.
Chapter 1 Introduction to Computers 15

When we are given the assignment to develop a program, we will be given a


program requirements statement and the design of any program interfaces .
We should also receive an overview of the complete project so that we will
.
understand how our part fits in to the whole Our job is to determine how to
take the inputs we are given and convert them into the outputs that have
been specified. This is known as program design . To give us an idea of how
this process works, let s look at a simple problem: Calculate the square foot -
age of a house. I low do we go about doing this ?

Understand the Problem


The first step in solving any problem is to understand it. We begin by reading
the requirements statement carefully. When we think that we fully under -
stand it , we review our understanding with the user and the systems analyst.
Often this involves asking questions to confirm our understanding.
For example, after reading our simple requirements statement, we should
ask several clarifying questions.

What is the definition of square footage?


How is the square footage going to be used?
for insurance purposes?
to paint the inside or outside of the house?
to carpet the whole house?

Is the garage included?


Are closets and hallways included?

Each of these potential uses requires a different measure. II we don’t


clarify the exact purpose— that is, if we make assumptions about how the out -
put is going to be used—we could supply the wrong answer.
As this example shows, even the simplest problem statements need clarifi -
cation. Imagine how many questions must be asked for a programmer to write
a program that will contain hundreds or thousands of detailed statements.

Develop the Solution


Once we fully understand the problem and have clarified any questions we
.
may have, we need to develop our solution Three tools will help us in this
task: ( 1 ) structure charts, ( 2 ) pseudocode, and ( 3) flowcharts. Generally, we
will use only two of them—a structure chart and either pseudocode or a
flowchart.
The structure chart is used to design the whole program. Pseudocode
and flowcharts, on the other hand, are used to design the individual parts of
the program. These parts are known as modules in pseudocode or functions
in the C language.
16 Section 1.5 System Development

Structure Chart the functional


as a hierarchy chart , shows
A structure chart, also known structures consisting
flow through our program . Large
programs arc complex . I his task is
they must he carefully laid out
of many interrelated parts ; thus,
design engineer who is responsible lor the operational
similar to that of a
difference between the design built by
design of any complex item . The major programmers
a programmer and the design
built by an engineer is that the
the computer , whereas the engi -
product is software that exists only inside and touched .
neer’s product is something that can
be seen
going to break our program into
The structure chart shows how we are
logical steps; each step will he a separate module
. The structure chart shows
) of our program .
the interaction between all the parts ( modules
It is important to realize that the design
, as represented by the structure
. In this respect , it is like the archi-
chart, is done before we write our program
to build a house without a detailed set of
tect ’s blueprint . We would not start
and new pro-
plans. Yet one of the most common errors of both experienced
design is complete and
grammers alike is to start coding a program before the
fully documented . fully
This rush to start is due in part to programmers thinking they

understand the problem and also due to their excitement about solving new
a
problem . In the first case , what they find is that they did not fully understand
the problem. By taking the time to design the program , they will raise more
questions that must be answered and therefore will gain a better understand -
ing ol the problem .

An old programming proverb: Restet the temptation to code .


The second reason programmers code before completing the design is
just human nature. Programming is a tremendously exciting task , lo see our
design begin to take shape, to see our program creation working lor the lirst
time , brings a form of personal satisfaction that is a natural high .
In the business world , when we complete a structure chart design , we
-
will convene a review panel for a structured walk through of our program .
Such a panel usually consists of a representative from the user community,
one or two peer programmers, the systems analyst , and possibly a representa
live from the testing organization. In the review, we will walk our review team
through our structure chart to show how we plan to solve the objectives of
our program. The team will then offer constructive suggestions as to how to
improve our design.
The primary intent of the review is to increase quality and save time. The
earlier a mistake is detected , the easier it is to fix it . If we can
one or two problems with the structured walk- through ,
eliminate only
the time will he well
spent. Naturally, in a programming class, you will not
be able to convene a
lull panel and conduct a formal walk- through .
What you can do, how'ever, is
review your design with some of your classmates
and with your professor.
1
Chapter 1 Introduction to Computers 17

Looking again at our problem to calculate the square footage of a house,


let ’s assume the following answers to the questions raised in the previous
section.

.
1 The purpose of calculating the square footage is to install new floor cov-
ering.
. .
2 Only the living space will be carpeted The garage and closets will not he
considered.
.
3 The kitchen and bathrooms will he covered with linoleum; the rest ol the
house is to he carpeted.
With this understanding, we decide to write separate modules lor the
kitchen, bathroom( s), bedrooms, family room, and living room. We use sepa -
rate modules because the various rooms may require a dilferent quality ol lino-
leum and carpeting. The structure chart for our design is shown in Figure 1 - 12.

flooring
Cost

get print
calculate Report
Userlnfo

calc calc
Linoleum Carpeting

calc calc calc calc


Kitchen BathRooms BedRooms LivingAreas

calc calc
FamilyRoom DineLiving

FIGURE 1 - 1 2 Structure Chart for Calculating Square Footage

W hether you use a flowchart or pseudocode to complete the design ol


your program will depend on your experience, the difficulty ol the process you
are designing, and the culture and standards of the organization where you
.
are working We believe that new programmers should first learn program
design by flowcharting because a flowchart is a visual tool that is easier to
.
create than pseudocode On the other hand, pseudocode is more common
among professional programmers.
18 Section 1.5 System Development

Pseudocode . Its purpose is to describe, in


, part program logic
Pseudo code is part English designed is to do. I his
what the program being
precise algorithmic detail , accomplish the task in sufficient detail so that
requires defining the steps to excels at this
computer program Pseudocode
they can he converted into a for determini ng the linoleum for the
type of precise logic. The pseudo code
is shown in Algorithm 1 - 1
.
bathroom

Pseudocode
are used
a loosely defined syntax and
to
English-like statements that follow
convey the design of an algorithm.

are easy to understand. A


Most of the statements in the pseudocode
telling the user what data are to he
prompt is simply a displayed message
three statements that follow it
entered. The uhile is a loop that repeats the
t 2 to tell when to stop.
and uses the number of bathrooms read in statemen
allows us to repeat a block of code.
Looping is a programming concept that
6. In this case , it allows us to process the informa -
We will study it in Chapter
tion for one or more bathrooms.

ALGORITHM 1 - 1 Pseudocode for Calculate Bathrooms


Algorithm Calculate BathRooms
1 prompt user and read linoleum price
2 prompt user and read number of bathrooms
3 set total bath area and baths processed to zero
4 while ( baths processed < number of bathrooms )
1 prompt user and read bath length and width
2 total bath area =
3 total bath area + bath length * bath width
4 add 1 to baths processed
5 bath cost - total bath area * linoleum price
6 return bath cost
end Algorithm Calculate BathRooms

Flowchart
A flowchart is a program design tool in which standard graphical symbols arc
used to represent the logical flow of data through a function. Appendix C
contains complete instructions lor creating flowcharts. If you are not f amiliar
with flowcharts, we suggest you read Appendix C now.
I In flowchart in Figure 1 - 13 shows the design for
*
calculating the area
and cost for the bathrooms . A few points merit
comment here. This flow-
chart is basically the same as the pseudocode. We begin with
prompts for the
Pnce °f the bnoleum and the number of bathrooms and read these two
pieces of data. ( As a general rule ,
flowcharts do not explicitly show standard
1

Chapter 1 Introduction to Computers 19

concepts such as prompts ) The loop reads the dimensions for each bath -
.
.
room Finally, when we know the total area, we calculate the price and return
to calcLinoleum.

O
/ bathProc < \ no
f calcbathRooms ^\ numbath w

7
yes
READ

/
( linoPrice) READ
( bathLngth,
bathWdth )

bathArea
READ
( numbath )
/
-*— zero
bathArea
bathArea +
bathLngth * bathWdth

bathProc
bathProc zero bathProc + 1

o
»
linoCost ^
bathArea ‘ linoPrice

RETURN

FIGURE 1 - 13 Flowchart for Calculate Bathrooms

Write the Program


Now it ’s time to write the program! But first, let ’s review the steps that
we ’ve used.
.
1 Understand the problem .
2. Develop a solution.
a. Design the program—create the structure chart.
h. Design the algorithms lor the program using either flowcharting or
pseudocode or both.
.
3 Write the program.

When we write a program, we start with the top hox on the structure
chart and work our way to the bottom. This is known as top-down implemen -
tation. You will find that it is a very easy and natural way to write programs,
especially if you have done a solid job on your design.
For our first few programs, there will he only one module, representing
the top hox of the structure chart . The first programs are quite simple and do
20 Section 1.5 System Development

n . When .
we g f 4 however
rlumter
.
, we will begin to

subdivisio
.
tjme we wi
not require
write functions an our
struc urt
writing structured
^^
programs . In the
.
point out some more techn | d
good pseudocodede or flowchart s for the
meantime , concentrate on writing
main part of our programs.

Test the Program can be a


must test it. Program testing
After we’ve written our program, we developm ent . As the pro-
of program
very tedious and time-consuming part testing our program . In large
completel y
grammer, we are responsible for known as test engineers who
development projects, there are often specialist s
are responsible for testing the system
work together.

as a whole that is , for testing to make
sure all the programs
There are two types of testing: blackbox and
whitebox. Blackbox testing is
the user . Whitebox testing is the
done by the system test engineer and
responsibility of the programmer .

Blackbox Jesting
with -
Blackbox testing gets its name from the concept of testing the program
out knowing what is inside it
like a black

box
without
that we
knowing
can ’t see
how
into.
it works . In other words ,
the program is
Blackbox test plans are developed by looking only at the requirements
statement ( this is only one reason why it is so important to have a good set ol
requirements ) . The test engineer uses these requirements and his or her
knowledge of systems development and the user working environment to cre-
ate a test plan that will then he used when the system is tested as a whole. We
should ask to see this test plan before we write our program . The test engi -
neer 's plan will help us make sure we fully understand the requirements and
also help us create our own test plan .

Whitebox Jesting
Whereas blackbox testing assumes that the tester knows nothing about the
program , whitebox testing assumes that the tester knows everything about
the program . In this case , the program is like a glass house in which every -
thing is visible.
Whitebox testing is our responsibility. As the programmer, we know
exactly what is going on inside the program . We must make sure that every
instruction and even possible situation has been tested . That iis not a
simple task!

fmnf„ iTTi r, Wil' hClP” UuV g00d tCSt data but one thing we can do
f Witi S « ’P ans. We should star the,
st T ‘
n
ask oursetf
S gC
° " '
dt'sign stage. As we build your structure chart ,
““
and make a note of th m
hour later.
^^ WC eed l teSt f r
" °them an
we won ’t remember
°
Chapter 1 Introduction to Computers 21

When we are writing our flowcharts or pseudocode, we need to review


them with an eye toward test cases and make additional notes of the cases we
may need. Finally, while we are coding, we need to keep paper handy ( or a
test document open in our word processor ) to make notes about test cases
we need .

Except for the most simple program, one set of test data will not completely
validate a program.

When it is time to construct our test cases, we review our notes and orga -
nize them into logical sets. Except for very simple student programs, one set
of test data will never completely validate a program . For large -scale develop -
ment projects, 20, 30, or even more test cases may need to he run to validate
a program .
Finally, while we arc testing, we will think of more test cases. Again , write
them down and incorporate them into our test plan . After our program is fin -
ished and in production , we will need the test plan again when we make mod -
ifications to the program .
I low do we know when our program is completely tested ? In reality, there
is no way to know lor sure. But there are a few things we can do to help the
odds. While some of these concepts will not be clear until you have read
other chapters , we include them here for completeness.
1 . Verify that every line of code has been executed at least once . Fortu -
nately, there are programming tools on the market today that will do this
for us.
2. Verify that every conditional statement in our program has executed both
the true and false branches, even if one of them is null . ( See Chapter 5 . )
3. For every condition that has a range, make sure the tests include the first
and last items in the range, as well as items below the first and above the

last the most common mistakes in array range tests occur at the
extremes of the range. (See Chapter 8. )
4 . If error conditions are being checked , make sure all error logic is tested .
I bis may require us to make temporary modifications to our program to
force the errors. ( For instance, an input /output error usually cannot be

created it must he simulated . )
22 Section 1.6 Software Engineering

1.6 Software Engineering and use of sound engineering


ing is the establishment

.
Software engineer and that works on
methods and
*
principles
to obtain software that is reliable
, from the first interna
tional conference on
7 !
real machines This definition
was proposed 30 years
after the first computer
software engineering in 969 , art than a science. In
, software was more of
an
was built . During that period ing desenbes it as
treatments of programm
fact, one of the most authoritative . This three -volume senes, origi -
an art : The Art of Computer
Programming
1970 s , is con -
nally written by Donald E. Knuth in
the late 1960s and early
of many computer science concepts .
sidered the most complete discussion base for building reliable softwar e
Because the science and engineering 1960 s were a maze of
the 1950 s and
did not yet exist , programs written in
known as “ spaghet ti code .” It was not until Edsger Dijkstra wrote
complexity
a letter to the editor of the Communication
s of the ACM ( Association of Com -
Machinery ) 9 in 1968 that the concept
of structured programming
puting
began to emerge.
Dijkstra was working to develop algorithms
that would mathematically
d that any program could he \ \ i ittcn w ith
prove program accuracy. He propose
es, ( 2 ) the if ...else
only three constructs or types of instructions: 1 sequenc
( )
selection statement , and ( 3 ) the while loop . As we will
see , language develop -
and the switch in C . These
ers have added constructs, such as the for loop
ments to Dijkstra s basic constructs
additional statements are simply enhance
that make programming easier . Today , virtually all program ming languages
offer structure d program ming capabili ties.
Throughout this text we will he emphasizing the concepts of good soft -
ware engineering. Chief among them is the concept of structured program -
ming and a sound programming style. A section in each chapter will include a
discussion of these concepts with specific emphasis on the application of the
material in the chapter.
The tools of programming design have also changed over the years . In the
first generation of programming, one primary tool was a block diagram. This
tool provided boxes, diamonds, and other flowchart symbols to represent dif -
ferent instructions in a program . Each instruction was contained in a sepa -
rate symbol . Ibis concept allowed programmers to write a program on paper
and check its logic flow before they entered it in the computer.
With the advance of symbolic programming, the block diagram gave way
to the flowchart. Although the block diagram and flowchart look similar, the
flowchart does not contain the detail of the block diagram . Many instructions
are implied by the descriptive names put into the boxes ; for example, the read

7 . F. L Bauer, Technical University. Munich . Germany ( 1969).

1 r~
9 . Edsger W . Dijkstra , "Go To Slatemenl
no. 3 ( March 1968 ).
Considered Harmful r
Harmful ," Commun
'
,
2 < Third Edi ion '

ications of the ACM . vol . 11 ,


Exploring the Variety of Random
Documents with Different Content
Vissza az első szobába, ott vastáblák vannak az ablakon, a mik
meggátolják a tűz betörését. Köröskörül mindenfelé hangzott a
lázadók bőszült üvöltése, és köröskörül hangzott az a csendes
sziszegő ropogás, mit az égő nádkévék támasztának, és a lángok
fütyölése, és a száraz gerendák pattogása köröskörül és a feje fölött.
A két ablak vastáblája lassanként izzóvá kezde lenni, s mintha
valami átlátszó üvegtáblák volnának, melyek a kívüli lángtenger
sugarait keresztülbocsátják, irtóztató vérvilágot terjesztének a
szobában, mely vörösre festett minden tárgyat, minden árnyat.
A bezárt férfi félőrülten futkosott körül szobájában, mint egy
verembe hullt fenevad, a falakat döngeté öklével, s a fejszével a
gerendákat vagdalta.
Hasztalan, hasztalan, sem jobbra, sem balra, sem fölfelé nem
lehet menekülni!
Végre kétségbesetében elkezdé énekelni a zsoltárt:

A Sionnak hegyén úr Isten!!

És térdre rogyott a szoba közepén.


És ime az úr feleletet adott annak, ki végveszedelmében hozzá
kiálta. Az alatta döngő padlat egyszerre világos eszmét adott neki a
szabadulásra. Oldalt és fölfelé nincs menekülés, lehet alá felé; le a
pinczébe.
A pinczébe a ház külsejéről volt a bejárat s azon is vasajtó; de ha
a szoba alatti boltozatot, mely úgy visszhangzik a léptek alatt,
beszakítaná, azon keresztül lejuthatna oda.
Ah, mi jó hűs lehet ott. A lég oly forró volt már a szobában; az
izzadság minden tagján csorgott a férfinak a hőségtől és az
irtózattól; a vas ablaktáblák világa már fehérbe kezdett átmenni s
messziről sütött, hogy szinte kiégett a szem, ha rátekintett. Sietni
kelle.
Zudár hirtelen felszakítá a fejszével a pallókat; nem volt nehéz
azokon alul a pinczeboltozat zárköveire találni.
Azonban vigyáznia kellett, nehogy beszakítsa az egész boltozatot,
s a tűznek is útat nyisson maga után. Óvatosan kellett késsel
kivájnia a vakolatot a foglalvány közől, s egyik téglát a másik után
kiemelni.
Meg-megállt néha e munkában és hallgatózott.
Hallott mindenféle zűrzavaros hangokat, sziszegést, ordítást, vad
tánczdanát, vérszomjú szónoklatokat…
Vagy tán ez mind csak a feje fölött égő lángok tarka beszéde
volt?
Tovább ásott, – ásott, ásott.
Az első boltív után következett a másik. Jó erős boltozat volt,
kettős téglasorból rakva. A másodikat is oly óvatosan kelle kiemelni.
A gerendák itt-amott szétnyiladoztak már, véres szemü
tűzszörnyek kandikáltak le a padmalyról, kék füstöt fújva alá a
hasadékokon keresztül. Ezer meg ezer hang pörölt, czivódott
egymással, a tűzszellem apró fiai, kik a rablott zsindelyeken
veszekesznek, nagyot riasztott rájok olykor az öreg apjok, a gonosz
láng, a mint egy-egy szarufát dörögve szétpattantott, közbe úgy
zúgott, zsizsergett valami, mint a gyermekeit csitító boszorkány; a
parázszsá lett fában fütyült, döngött valami élesen, mint megfogott
méhecske, s a szorongatott szél ijedezve kiabált alá a kéményen:
«hu–hu–hu».
– Tánczolnak odakünn és dalolnak, mormogá magában a hóhér.
A második téglarakás is keresztül volt bontva, a résen át, mint a
rohanó szél tódult elő a pincze hideg levegője. Zudár Péter lehajolt a
nyílásra, s teleszítta mellét ez életadó friss levegővel. Ah, szinte
megittasult tőle!
A rés épen elég volt arra, hogy termetével keresztül csúszhassék
rajta.
Körülnézett még egyszer veszélyes kiváncsisággal a szobában. A
mestergerenda már meg volt hajolva középen a hőségtől, a füst
minden nyiláson tódult már alá a szobába s embermagasságnyira
betölté azt, rétegenkint szállva mindig alább, mint valami lejebb,
lejebb ereszkedő felhő.
A szürke felhőben apró libegő tűzfoszlányok repkedtek ide-oda,
mint fényes madárkák. A padlásnyílaton bekukucsáló rém úgy
kaczagott: «ha–ha–ha». Zudár Péter visszanevetett rá: «ha te
kaczagsz, én is kaczagok, kaczagjunk ketten».
Félig a nyíláson keresztül bútt már; onnan nézte, hogy
hajladoznak a gerendák a feje fölött; hogy ropognak, hogy
feketülnek.
Ekkor jutott valami eszébe.
Hirtelen kimászott megint a tört résből; egyenesen állva nem
lehetett már a szobában járni, mert a füstfelhők három lábnyira
leereszkedtek; négykézláb futott ládájához; felnyitá azt: egy kis
imakönyv, egy pár ruhafoszlány volt, a miket keblébe rejte onnan.
És azután egy hosszu bőrtokot vett elő, melyet kapcsainál fogva
kétfelé lehetett nyitni.
A kapcsokat egész nyugalommal fejté ki, csendesen kétfelé nyitá
a tokot.
A pallos volt abban…
A fényes, kétélű fegyver, mely a büntető törvény szavára
megvillan: az itélet fegyvere.
Midőn azt kezében érezé Zudár Péter, felmagasult roppant
termete egyszerre, a füst között, a láng között úgy állt, mint egy
bosszúálló dæmon, kört vágva villámló fegyverével, mintha azt

É
mondaná a füstnek, a lángnak: «féljetek én tőlem! Én vagyok a
bakó!»
E perczben csattanó dördülés hangzott háta mögött. A falnak
támasztott fegyver a hőségben magától elsült, a golyók befuródtak a
falba.
E csattanás eszére téríté Zudárt, ki már közel volt az őrület
pillanatához, hirtelen lebukott a földre, az ágyról lerántotta a párnát
s azt maga után vonva, a tört nyilásig csúszott; a párnát leveté
előre, s maga óvatosan utána ugrott.
A hűs pinczelég lassankint magához téríté, a forróság nyomása
elmult agyából, tűztől elvakult szemeire jótékonyan hatott e
félhomály, mit csak a nyiláson besütő tűzvilág deríte fel.
Eszébe jutott, hogy az a nyílás is fölösleges már most.
A pincze ászokain kisebb-nagyobb hordók voltak elhelyezve,
üresen, vagy tele sörrel, borral.
Egy üreset odahengerített a tört rés alá, s ott felállítá a fenekére.
Akkor beüté egy sörös hordó fenekét, s a párnát belemártotta,
míg az egészen teleszítta magát vele.
Azzal felállt az üres hordóra, s a nedves párnával betömte a
nyílást.
Most már sötét volt a pinczében, hanem azért Zudár Péter tudta
benne jól a járást. Értette, hol áll a legjobb sörös hordó csapra ütve,
a fülkében meglelte a vászonkorsót, teleereszté friss sörrel; leült a
hordó mellé az ászokra és ivott belőle szörnyű hosszút, azután
megmosta vele a fejét és orczáját, és azután újra töltött magának és
ivott.
Odafenn nagy recsegéssel, ropogással omlott össze a háztető; a
lángok népei úgy kaczagtak, úgy süvöltöttek örömükben, hogy
sikerült nekik ez a munka.
– Ezzel bevégeztük a számadást; szólt Zudárné odakívül; a
czimborák, a czinkosok kaczagtak és tomboltak odafenn.
A vén hóhér pedig odalenn a hűs menedékben éneklé buzgó
szívvel:

A Sionnak hegyén úr Isten, tied a dicséret!

És végig – végig hordozá ujjait a pallos mind két élén; jól ki volt
az köszörülve, sehol, sehol egy csorba rajta.
XIII. A BŐRHARANG.
Köznépünk igen adakozó czímek dolgában, s ez érdemben
túlmegy phantasiája a kelet-indiai fejedelmekén is, s czímei
találóbbak amazokéinál.
Bőrharang volt Hétfaluban egy sajátságos ember czíme, a kinek
más nevét nem igen szokta valaki eszében tartani. Igy csúfolták őt a
házi asszonyok, a kiknek hírül vitte, hogy ki halt meg ma? mikor
temetik? Kin van a sor a kastélyba menni hetesnek? ki főz ma a
rektor számára? Igy tisztelték a gazdák, a kiknek hivatalosan jelenté,
hogy ki lesz a soros forspontra menni? ki nem adta még meg a
papbért? ki tartozik a robottal? Igy nevezték őt a parochián, mikor
bejött jelenteni, hogy kinél lesz keresztelő, eskető, vagy temetés?
kinek van szüksége az utolsó vigaszra? mennyi bort ad az uraság az
úr asztalára? Igy fogadták a kastélyban, a hová híven bemondá: hol
kaphatni szegődő cselédet? kinek van eladó holmija? mi a piaczon a
búzának, baromfinak az ára? Félig az uraság szolgája volt, félig a
községé, egy kicsinyt a papé és azután minden jó emberé, a kinek
kinálni való pohár bora volt. Belevágott a hivatala egy kicsinyt a
kisbiróéba, jó nagyon az egyházfiéba; igen erősen a levélhordóéba;
feljebb állt az urasági hajdunál, összeköttetésben volt az
ispánsággal. Ebben a minőségben szüntelen házról házra járván, a
birólakból a piaczra, piaczról a kastélyba, a kastélyból a paplakra,
innen a malomba, a szeszgyárba, a csapszékbe, megint a mezőre,
azután ismét az udvarba: itt is hallott valamit, ott is valamit; a
haranglábnál ezt beszélték, a templomajtóban meg amazt; a heti
vásáros szekerek között megütötte valami a fülét, azt elmondta a
szárazmalom alatt. Mire a kocsmába ért, már akkor tulajdon
ujdonságát kibővítve, kiczifrázva hallotta elbeszéltetni, azzal futott a
kastélyba; útközben nem állhatta meg, hogy minden szemközt
találkozónak el ne mondja, nehány neki megtetsző változtatással;
ilyen formán igen szépen megérdemelte, hogy rajta hagyják a
«bőrharang» nevet, mint olyan szerszámét, mely a harang
szolgálatait végzi és csakugyan bőrbe van foglalva.
E viszontagságos estén nagy hévvel-lével rohant be a kastély
pitvarába a bőrharang, hol az öreg nagyságos úr lábbadozó
egészséggel üldögélt egy rácsos padon, magát úgy helyeztetve,
hogy a bágyadt naplementi eget bámulhassa.
A bőrharang magas ember lehetett valaha, de a sok
köszöngetésben annyira meggörbült már a háta, s a sok lótás-
futásban annyira előre ment a feje, hogy a ki először látja, nem
képzel egyebet róla, mint hogy ez most az asztal alatt akar
keresztülbujni. Egészen az alázatosság alakja; szinte tartja a hátát a
világnak, mintha mondaná, hogy üssön rá, a kinek tetszik.
Az öreg Hétfalusy örömest látja e furcsa embert. Minden
perczben szabad neki belépni hozzá; szabad neki mosolygó arczával
elmondani komoly eseményeket, s panaszló hangon mulatságos
kalandokat, a mik rendesen az ő rovására történtek meg.
– Csókolom kezeit, nagyságos uram, szólt a bőrharang, kalapját,
pálczáját letéve az ajtóban, csókolom kezeit, (meg is csókolá
igazán). Jaj de iszonyú nagy hőség van odakünn, milyen nagy a por!
Ezek a parasztok mind felverik az ökrös szekereikkel. Mind ezek
csinálják a port. Egészen a mellemre meg a torkomra szállott… oh
köszönöm alássan, ne tessék fárasztani magát, kedves nagyságos
uram, bizony nem iszom; nem azért mondtam; nem veszi be a
természetem ilyenkor délután a bort, azután meg hogy már
voltaképen volt is részem benne; mert hogy nem állhattam ki ezt a
rettentő melegséget, meg ezt az irtózatos port, hogy úgy a mellemre
szállott, kénytelen voltam betekinteni a Sámsihoz, oh bizony nem
azért, nem azért, hanem csak azért, hogy tán a biró komámat majd
ott találom, de biz az nem volt már ott, hanem a helyett ott ültek
már a Spletykó, meg a Hamza esküdtek, meg még egy pár paraszt,
a kik azonnal előfogtak és kináltak, hogy igyam pálinkát. Méltóztatik
tudni, én nem nagyon szeretem a pálinkát, nem veszi be a
természetem, meg aztán délután is volt, akkor az nem egészséges;
hát én csak azt mondtam, hogy köszönöm, nem iszom. Hát erre
mind valamennyi egyszerre rám támad: «úgy-e? úgy-e kend is meg
van már tanítva, hogy miből igyék, miből nem? úgy-e kendnek is
megmondták már, hogy a pálinkába mérget tettek». – «Micsoda?» –
«Mérget hát.» – «Kicsoda?» – «Kicsoda más, mint a nagyságos urak
maguk?» – «Ejnye, lánczos, lobogós.» kiálték elförmedve én is, s
elkeseredésemben rögtön kiittam valamennyi elől egyenkint a
poharakat. «No hát! méreg van ebben, méreg? Hát nem megiszom
én ezt? Hát meghaltam én ettől?» Az a sunyi Hamza megint
lekiabált: «No ha ebben nincs a méreg, akkor a másik hordóban van.
Hozz abból, Sámsi.» A Sámsi maga nem mert kijönni a szobából, azt
vetette, hogy a hideg leli, hanem a felesége szolgált helyette, az
lement a pinczébe mind a két esküdt jelenlétében s hozott
mindegyik hordóból kóstolót. Nagyságos uram! Nehezemre esett,
mert nem jár belém a pálinka; de nagyságod iránti háladatosságból
mind megittam azt is. Csoda, hogy most olyan részeg nem vagyok,
mint a ki az orrával turja a földet. «No hát meghaltam-e tőle, ha
méreg van benne?» már ekkor én kiáltottam jobban. A sunyi Hamza
nem tudott már egyebet mondani, mint hogy: ha még nincs benne,
hát majd benne lesz holnap. «No jól van, hát én eljövök holnap is,
holnapután is, eljövök mindennap; megmutatom, hogy sorba
kóstolom a kendtek italát mind és nem lesz tőle semmi bajom.» Ezt
mondtam nekik. És megteszem nagyságos uram, megteszem, bárha
nehezemre esik is, mert nem élek italfélével; de a nagyságod úri
familiáját, a kinek én annyi javával éltem, nem engedem holmi
bitang parasztok által rágalmaztatni.
Az öreg Hétfalusy hagyta szólni a harangot. Tán rá sem
hallgatott. Annyi volt előtte meséket mondani a bőrharangnak,
mintha a toronyban húznák a harangot. Még ez is több annál, mert
ebben az egyhangú, búskomoly bilimbalam szóban holtak beszédét
hallani, annyi mindenféle titkos szókat, a ki figyelmezni tud rá és ért
az emlékezéshez!
Megzavarta e jeles előadást doktor Sarkantyús megérkezése, ki
rossz csézájában, forspontos gebékkel hajtatott be az udvarra és
sietett rögtön fel a földesúrhoz.
A bőrharang törte magát a csézához, hogy a doktor úr holmiját
felhordja abból, s miután ambitiója volt a szolgálattevő hajduk
odaérkezte előtt valamennyi bundát és skatulyát összenyalábolni, azt
érte el a nagyravágyás által, hogy három skatulyát elejtett a földre,
az egyiknek felpattant a zárja, s végig ömlött belőle valami fehéres
por a folyosó márvány koczkáin.
Az orvos mérgesen támadt rá:
– Mondtam, hogy ne nyaláboljon kend fel annyit! ahol van ni:
kiszórta a viszmuth-porokat.
– Majd felszedem, kérem alássan, szólt a bőrharang
meghunyászkodva, s letérdelt, hogy majd összesepri a tenyerébe a
kihullottat s visszateszi a többihez.
Ezért megint majd megverte a doktor.
– A mi a porral összevegyült, azt visszatenni a tiszta közé!
Menjen kend az operencziákra.
– Hát kérem alássan, nem jó ez így a birkáknak? kérdé alázatos
mosolygással a kárttevő.
– Birkáknak? E biz azt gondolja, hogy birkaveszély ellen hordok
gyógyszert.
– Mert hogy olyan sok.
– Igy is kevés lesz ez a kendtek fejének. No most el kell a
kiszórtat seperni az útból.
Az orvos kivette mérgesen a sérült skatulyát az ember kezéből, s
maga vitte azt be a szobába.
A bőrharang elbámulva maradt ottan térden, s nézte ostoba
szemekkel a földre öntött porfélét. Azután megnyálazta a mutatóujja
hegyét, s belemártotta a porba, hozzá értette egy kicsinyt a nyelve
hegyéhez, s köpködött azután tőle mindenfelé; végre hevenyében
összekapargált belőle nehány csipetet, kivonta a zsebkendőjét a
mellénye zsebéből, annak egyik szegletébe belekötötte a gyanús
szert, s azzal körültekingetve, ha nem látta-e meg valaki, kiosont a
tornáczból, elkerült az udvarból a kertek alá s azzal rohant nagy
sebesen a faluvégi korcsma felé, a leggyorsabb veszély idejéni
lépésben. Ilyenkor a feje egy lépéssel előbb járt, mint a lába.
A mint benyitott a korcsmába, nem tünt fel neki, hogy ott milyen
szép rend és béke uralkodik ez órában. Csicseri Márton uram, a biró
ott ült az asztalfőn, és az asztalon végig volt fektetve a hosszú
mogyorófa-pálczája.
– Szerencsés jó estét kivánok, kedves biró uram, komám uram.
Ugyan jó, hogy kelmed is itt van. Hát a Hamza, meg a Spletykó
merre vannak?
A biró haragosan nézett rá:
– Jó helyt vannak. A kalodában.
– Úgy-e? No ott igazán jó helyen vannak. Kár, hogy most nem
lehetnek itten.
– No, komám uram, most már én is azt mondom, hogy végünk
van; szólt a bőrharang titkolózva a biróhoz.
– Hát hogyan van végünk? Kérdezé Csicseri Márton, két
könyökkel nehezkedve az asztalra.
– Oh, mindenképen végünk van, végünk, végünk! jajgatott a
bőrharang, s fel s alá szaladgált a korcsmaszobában és fejét két
kezébe fogta. Vége az egész falunak.
– Felelj hát, hogyan van végünk? te vén banya. Nem tudod, hogy
ennek a botnak is van vége, s majd a hátadra találom tenni?
Az ember úgy tett, mintha csak a birónak akarna felelni, azonban
addig tekintgetett félelmesen maga körül, míg öt-hat parasztot maga
körül csődített, akkor azután jó hangosan súgta oda:
– Megérkezett már a méreg…
– Bolond kend, szólt a biró visszahökkenve.
– Nem én. Láttam, kóstoltam, hoztam is belőle. Most érkezett
meg a doktor, a vármegye küldte egy nagy láda méreggel, hogy azt
itassa meg velünk. Kezemben volt a láda, én vettem le azt a hintóról.
Az isteni gondviselés rendelte, hogy kiejtettem a kezemből, erre
kidőlt belőle valami fehér por. Egészen tele volt olyan porral. A
doktor megijedt nagyon szörnyen, szidott a hibámért; láttam:
egészen elsárgult. Én csak annyit kérdeztem tőle, hogy talán a
birkáknak lesz ez az orvosság. Arra ő kikapta kezemből a ládát, s azt
felelte, hogy majd a mi fejünket fájdítja ő meg azzal.
– Igaz ez? kérdezé egy megrémült paraszt az asztalon keresztül.
– Olyan igaz, mint hogy élek. A doktor mindjárt megparancsolta a
házi cselédségnek, hogy a kidőlt port eltakarítsák, hogy valami állat
meg ne egye, mert mindjárt elveszne tőle, de én mégis eltettem
belőle egy csipetet, itt van a zsebkeszkenőmben.
A bőrharang kibontá a zsebkendőt, s kiönté a fehér port az
asztalra.
A parasztok szörnyűködő műértéssel nézték körül az idegen,
rémületgerjesztő port, melynek emberölés, népkiirtás rettentő
munkáját kelle végbevinni.
Valamelyik hallott valaha olyasmit, hogy a mérget lelketlen
állatokon szokás előbb megkisérteni. Egy darabka kenyeret
belehengerített a porba s az asztal alatt heverő komondort
megkinálta vele. A kutya megszagolta és ott hagyta a kenyeret.
– Méreg! méreg! zúgák elszörnyedve a körülállók.
– Mondtam úgy-e? szólt diadalmas arczczal a bőrharang, de
győzelmi öröme egyszerre megkeserítődött, mert mikor legkevésbbé
várt volna hasonló megtiszteltetést, azon vevé észre magát, hogy
biró uram hosszú mogyorófa pálczája elkezdi a hátát és a vállait
püfölni irgalmatlanul.
– Hát te semmirevaló, hazug szószátyár! Igy rágalmazod te a
tulajdon földesuradat? Te egész falu kutyája, a ki minden embert
megugatsz a háta mögött s mindenkinek megnyalod a kezét
szemben; ilyen mesékkel jösz te ide, mikor a nélkül is annyi
háborúság van már a nép között? Te semmire való betyár! Ugy-e azt
akarod, hogy a földesuradat agyonverjék, mi? hogy a kastélyát
felgyújtsák, kirabolják? Te gyalázatos lázító, akasztófára való. No
megállj! vasra verletlek, beküldelek a vármegyére, majd ülhetsz ott,
a míg rád kerül a sor. Te gyújtogató, te!
A bőrharang igazán megijedt, s elkezdett szabódni.
– Jaj, kedves, édes biró uram, komám uram. Ne haragudjék, az
Isten áldja meg. Nem akarom én a földesuramat agyonveretni. Az
Isten őrizzen meg attól.
– Hát kit?
– Nem én, senkit sem, a világért sem. Oh dehogy akarok. Csak
azért mondtam ezt, hogy a szegény ember fia tudja magát előre
őrizni.
– Mitől?
– Hát a veszedelemtől.
– Hát ki mondta neked, hogy itt veszedelem van? Az orvos úr
nagy körútat tesz, sok beteg embert gyógyít, sok orvosságot hord
magával. Te ügyetlen szamár, elejted az orvosságot, ellopsz belőle s
még ráfogod, hogy az méreg. Méreg az öreg apád lelke! Hisz az
bizonyos, hogy az orvosságot, ha egészséges ember beveszi, a
gyomra felháborodik tőle, de a beteget meg kigyógyítja. Hisz azt
tudja minden ember. A gyógyszer nem enni való.
Egy-két józanabb paraszt helyeslőleg morgott hátul. A bőrharang
meghunyászkodva állt a biró előtt s kalapjával olyan forma
legyintéseket tett, mintha szeretné az asztalra döntött port onnan
suttyomban elszelelni.
– Már most te, népháborító! ha ezeknek a becsületes
embereknek itten több eszük nem volna, mint neked, mi történnék
akkor? Ha elhinnék azt az irtózatos vádat, a mit egy pár zúgolódó
semmiházi költött rájuk veled egyetemben, s féltükben neki
mennének annak a te jámbor ifjuuradnak, a ki annyi jót tett veled, s
agyoncsapnák a szemed előtt, ha azt az ősz beteg nagyságos urat
kihúznák az ágyából pőrén s vinnék megégetni, mit csinálnál akkor?
Te semmire való! Tán még magad köszörülnéd a kést, a mivel torkát
messék?
A bőrharangnak a térdei verődtek egymáshoz, sopánkodva
rebegé, hogy ő nem gondolta, miszerint olyan rettenetes dolgok
következhetnek abból, a mit mondott, nem gondolta meg, hogy mit
beszél.
– No iszen majd meggondolhatja kend a vármegye tömlöczében.
A bőrharang szabódott, hogy csak oda ne küldjék, inkább
csukassa a kalodába, oda a Hamza mellé. Elismeri, hogy azt
megérdemli; még ha husz-harmincz botot rá olvasnak, azt sem
bánja; csak azután ne vallassák többet, mert ő nem akart semmi
rosszat mondani.
E közben senki sem vette észre, hogy az ivóterem lassankint
meggyült hallgatag marczona alakokkal, a kik közül egy figyelmesen
hallgatva a beszédre, az asztalról a gyanus port mind a markába
seperte.
Csicseri Márton biró uram a bőrharang sok rimánkodására
annyira alább hagyott a fenyegetéséből, hogy tehát nem vereti őt
vasra, mint lázítót s nem küldi a vármegye kezére; «de a kalodában
ott fogsz ülni reggelig, komám! Esküdtek! Kisérjék kendtek odáig.»
– De nem ezt az embert! szólt akkor a tömeg közül egy hang, s a
biró Bodza Tamást látta előlépni a hosszú asztal mellé.
– Hát kit? kérdé tőle.
– Hanem kendet magát! kiálta Numa Pompilius, igazi római
taglejtéssel kisérve szavait.
Biró uramnak eleinte az ötlött eszébe, hogy a jámbor rektort, ki
különben nem szokott szeszes italokkal élni, bizonyosan valaki
leitatta édes borral s elkezdett rajta nevetni.
Azonban megdöbbenve vevé észre, hogy két idegen ember
odaugrik mellé a mester intésére, s megragadják a kezeit.
Soha sem látta ez arczokat, nem e faluból való emberek.
– Mi dolog ez? hej! ordíta reájok: egyiket orron üté vitézül, a
másikat hanyattlökte, azonban erre tizen rohantak reája, elkapták
kezeit-lábait, leteperték a földre, megkötözték; egy-két ismerőse
védelmezni akarta, azokat félre taszigálták.
Bodza Tamás fennállt az asztalon, míg a tusa tartott, egy
capitoliumi szobor magatartásával, onnan vezényelt diktatori
hangon.
– Most én parancsolok.
A megkötözött biró szidta, fenyegette a lázadókat, míg száját be
nem tömték, a bőrharang elbujt a kemencze mellé, egyrészt az
ütlegektől, másrészt attól félve, hogy ebből még nagy baj
kerekedhetik, s a jelenlevőknek tanuságot kell vallani. Ő nem akart
sem látni, sem hallani semmit.
XIV. A HALÁLITÉLET.
A gyertyákat meggyujtották az asztalon, pedig még fényes
nappal volt; – a lélekharangot is megcsendítették, pedig még beteg
sem volt senki, a koporsót is elkészíték már, pedig még senki sem
halt meg.
A szegény bűnösre kimondták a kemény itéletet: meg kell neki
halni. Fejére szól a törvény. Ha egész nap könyörgene érte édes
apja, anyja, minden atyafia, azokat a betüket le nem könyöröghetné
onnan.
A kik ott a hosszú asztal mellett ülnek: főtisztek, altisztek,
közkatonák, mind úgy szánják, mind úgy szeretnék, ha nem kellene
azt a szót kimondani. Maga a tábornok is eltakarja arczát két
kezébe:
«Istennél van a kegyelem.»
Kezében tart egy kis pálczát, fehér pálczát, meg-megnézi: még
most egész; semmi törés nincsen rajta.
Odajön hozzá a vén őrmester; csákója fejében, még a viharszíj is
állára csatolva, egy keze a zsinóron, másik a csákó ernyőjén.
– Uram, tábornok úr, adj kegyelmet szegény elitéltnek.
«Istennél van a kegyelem.»
Másodszor is megemeli az őrmester tenyere hegyét a kalpag
ernyőjeig és újra könyörög:
– Uram, tábornok úr, adj kegyelmet szegény elitéltnek.
«Istennél van a kegyelem.»
Harmadszor is könyörög.
«Istennél van a kegyelem.»
A fehér pálcza ketté törve hull a földre; a bűnös felsóhajt,
megköszöni szépen a jelenvolt uraknak, hogy vele vesződtek, a jó
őrmesternek, hogy kegyelmet kért neki és a szigorú birónak, hogy a
törvény szavait kimondá fejére.
Azután elviszik a siralomházba, adnak reá tiszta fehér ruhát,
adnak neki ételt, italt, hogy egyék, igyék utoljára.
A vas ember félt hazamenni szállására.
Ha Kornélia kérdeni fogja, mi itéletet mondál ellenséged fiának
fejére?
Nem mert haza menni: félt.
A mint sokáig ott időzött, a porkoláb jő hozzá jelenteni, miszerint
az elitélt néhány szót kivánna a tábornokkal négy szem közt váltani.
Vértessy rögtön sietett hozzá:
– Ön rosszul védte magát, szólt, a mint belépett hozzá,
szemrehányólag. Ön lehetetlenné tette, hogy más itéletet
mondhassunk.
– Tudom. Akartam azt; szólt az ifju derült, nyugodt arczczal.
Ennek már vége van, tábornok úr: katonadolog volt. Három nap
mulva meghalok. Vegyük úgy, mintha nagy beteg volnék s az
orvosok előre megmondták volna, hogy csak három napig élek.
– Fel fogom küldeni az itéletet a felséghez.
– Eredménytelen lesz. Hiszen kegyed semmit sem tud
mentségemre felhozni. Én nem mondtam semmit.
– De én azért tudok. Védték önt mások. S ha daczos feleleteivel
be nem vágja útamat a hadtörvényszék előtt, tudtam volna önnek
megszabadítására valamit kigondolni.
– Csodálkozom, hogy engem védett valaki. Nem ismerek senkit, a
ki rólam megemlékezhetnék.
– De igen. Legelső volt tulajdon nőm.
– Ah, tábornok úr. Ez a tudat enyhíteni fogja halálomat.
– Második volt azon férfi, a kire ön rálőtt ostoba
szerelemféltésből.
– Tehát nem halt meg? kiálta fel öröm hangján az ifju. Ah, ez
megvigasztal.
– Ez önre nézve mindegy. Vétsége halálos.
– De lelkem megkönnyebbül. Nem nyomja oly nagyon.
Köszönöm. A halál órái rövidebbek lesznek ezáltal.
– A harmadik védő volt önnek édes atyja.
– Hogyan? rebegé az ifju reszkető ajakkal. Atyám? az én atyám?
– Tulajdon édes atyja. Ő irt azokkal a reszkető kezekkel hozzám,
miket a szél ütött meg. Tudja ön, mit jelent az? Én hozzám irt ő!
– Én értem irt? susogá az elitélt, lánczos kezeit összetéve és
nehéz szempilláit lecsukva nedves szemeire.
– A negyedik volt Kamienszki gróf, kinek nőtestvérére ön
bizonyosan fog emlékezni.
Az ifju bámulva tekinte föl.
– Nem emlékszem ilyen férfira. Neki nincs testvére.
Vértessy vállat vont.
– Ő maga mondta, hogy az: itt volt ma nálam.
Az ifju katona valami kinos gyanuval küzdött szorongó lelkében;
azután derült arczczal fordult ismét a tábornokhoz, könnyelmű ifju
tekintetével.
– Ezek mind enyhítik büntetésemet, tábornok úr, köszönöm, hogy
tudatta velem. Sajnálom, hogy balvégzetem másoknak könyeket fog
okozni, miket nem reméltem, miket nem érdemeltem, de
fájdalmamat enyhítik azok. Ön szive fenekén megbocsát nekem és
szegény családomnak; ugy-e bár, megbocsát nekik? Annak a
szegény öreg embernek, a kinek már most senkije nem lesz és
védeni fogja őt, ha valami nagy, igen nagy baj fenyegetné.
A tábornok megszorítá az ifjunak eléje nyujtott jobbját. A lánczok
úgy csörömpöltek a megrázott kézen.
– És most engedje meg tábornok úr, hogy egy igen komoly
ügyről szóljak önhöz. Lesz-e kegyes kihallgatni?
Beszéljen ön.
– És a miket mondok, nem fogja ön agyrémeknek tartani. Sok
embernek az agyát a halál közelléte lázba hozza; nem fogja ön hinni,
hogy én is lázban beszélek? Elhiszi ön, hogy bátor vagyok és józan,
és szivem, eszem helyén van?
A tábornok fejével intett.
– Legelőször arra akarom önt kérni, hogy kivégeztetésemet ne
halaszsza ön három napig. Tűzzön ki arra rövidebb határidőt; nem
én értem. Velem be van végezve a számadás. Én már nem létezek.
– Tehát miért?
– Elmondom. Azonkívül ne vitessen ön a városon kívül, itt a
kaszárnya belső udvarán is megtörténhetik az velem.
– Jó, ezt megigérem.
– És utoljára: hirdettesse ön e végrehajtást délutánra és tetesse
délelőtt, korán hajnalban, mielőtt valaki ébren volna.
– Mi okai vannak önnek ily különös kérelemre?
– Elmondom azokat, tábornok úr. Ön tudja, hogy e rendkívüli,
hirből sem ismert járvány miatt minő izgatott hangulat van az egész
országban. Alkalmam volt bizonyos rosszakaratú emberek tervét
véletlenül megismerhetni, kik e rémületes napokat valami borzalmas
munka kivitelére találják alkalmasnak. A néposztályok
legmiveletlenebb salakja fel van kavarodva s csak egy jelszóra vár,
hogy kiöntsön az egész országra. Nem meséket mondok, tábornok
úr. Hallottam a lázító suttogásokat, olvastam leveleiket, láttam a
nevek lajstromát, a kiknek legelébb kell esniök. Az én apám neve áll
a legelsők között. Jobbágyai annyira gyülölték mindig, a mennyire
szerettek engem. Ezen titkon forrongók egyik főnöke hajdan
katonatársam volt; onnan elbocsátották. A véletlen összehozott vele
Galicziában, hol ő titkos czéljai után járt. Azt igérte, hogy el fog
rejteni. És azután épen ő jelentett fel. Most az a pokoli terve van,
hogy a mint engem a városon kívül visznek, a mint a roppant nép
összecsoportosul, azt fellázítsa, a csekély számú katonaságot
szétverje, s engemet megszabadítva, mint egyszerre elhirhedett
hőst, ijesztő név gyanánt használjon fel egy pokoli gyujtogató
lázadáshoz… Tábornok úr, ön láthatja, hogy a legnagyobb irtózat fog
el, a midőn e tárgyról beszélek, hogy nem álmodtam, nem
képzeltem ezt a dolgot, hanem rettegek tőle, és siettetem
meghalásomat.
A tábornok pedig valóban azt hitte, hogy az ifju meg van
zavarodva.
Ez észre vette a tábornok arczán a hideg mosolyt, s kétségbeesve
ragadá meg lánczos kezeivel annak kezét és erőszakosan kiáltá:
– Tábornok úr! Meg akarják gyilkolni atyámat! Fel akarják
gyujtani hazámat, nemzetemet!
– Kik? kérdé a tábornok végtelen megvetéssel. Ezek a kalap alá
búvó emberek? Én nem akarom kétségbevonni, hogy a mit ön
mondott, az tervben létezhetik; valami bolondnak a feje
kigondolhatta. Nem gondolom azonban, hogy volna valaha olyan idő,
a mely alkalmatosnak látszanék egy ilyen terv megmozdítására. És
ha mégis meg találna mozdulni valaki, bizony mondom, hogy az első
kiáltása után némává fogom őt tenni!
És büszke önérzettel csapott kardjára.
E pillanatban sietve lépett be az ajtón a tábornok egyik segéde s
jelenté, hogy a vásártéreken és az utczákon gyanus forrongást lehet
észrevenni a nép között. Az urak és katonák ellen kiabálnak,
egymást lázítják izgató beszédekkel. A megyeház kapuit már
kénytelenek voltak előlök bezárni, s egy gyógyszertár ablakait mind
beverték. Úgy látszik, hogy leginkább a kaszárnya és a megyeház
felé tartanak.
A mint a tábornok a folyosóra kilépett, már jól hallatszott a közeli
utczákról az a határozatlan zaj, melynek zürzavaros hangjaitól
gyönge szivű ember annyira megretten: nem tudva, tűz van-e vagy
gyilkost kergetnek?
Most az egyszer tűz is volt, gyilkos is volt. Lázadás volt.
Valami távoli városrészben túlbuzgó hivek elkezdtek egy harangot
félreverni, melynek bántó félhangjai kikipendültek a csunya hangzűr
közől.
A tábornok az udvarra sietett. A katonaság fegyverben állt már.
Alig volt pár száz embere. A többi hosszadalmas határzár
fentartására volt kirendelve.
Hanem hiszen elég volt ez neki.
Ő félt volna tán, hogy ezek a jámbor kapa- s kaszaforgató
emberek, ezek a gyaluval, árral, vetélővel foglalkozó polgárok
erőszakkal támadhatnák meg őt? és kényszeríthetnék, hogy előlük
hátráljon.
Hirtelen, de a legnagyobb hidegvérrel tevé intézkedéseit.
Félszázad a kapun kívüli őrhelyt foglalja el s elzárja az utczát; a
többi az udvaron belül marad.
A kívül állók fegyverei töltetlenek maradnak.
Három dobütésre a többi csapatok is kivonulnak az utczára.
A többire nézve parancsszó fog határozni.
A szomszéd ház kapuit be kell zárni, s belül két őrt állítani töltött
fegyverrel.
Mindent a legnagyobb csendben, lárma, csörömpölés nélkül.
Azon szomszédházban lakott a tábornok neje; a kerten keresztül
a kaszárnyából át lehetett oda jutni.
Még végzé intézkedéseit Vértessy, a mint egy nőcselédje
Kornéliának sietve jő hozzá, s valamit súg fülébe.
A tábornok arczán az első pillanatra valami gyönyörteljes mosoly
villámlott át: hogy aztán annál sötétebb redőknek adjon ismét
helyet.
Hirtelen rábizta a parancsnokságot első századosára és sietett
lakására, igérve, hogy egy pillanat mulva visszajön.
Nagy dolognak kellett történni, hogy Vértessy elhagyja azt a
helyet, mely a katonát illeti, egy ily pillanatban!
Sietve futott át a szobákon, melyek neje hálószobájához
vezetnek.
A függönyök le voltak eresztve, a félhomályos alkovenben egy
halvány hölgy feküdt, egy halott, a ki az élet kínjait szenvedi.
Az ágy körül szolgálattevő nők álltak, az asztalnál orvos ült és irt.
Vértessy még ott künn letette kardját, hogy ne csörögjön vele.
Oda futott Kornéliához, megfogta annak reszkető, izzadó kezét s
ajkaihoz szorítva kérdezé:
– Hogy vagy?
– A halál küszöbén, felelt a nő és másik karjával odavonta férje
fejét, hogy megcsókolhassa őt.
Egész arcza oly fehér volt, mint a márvány és a hideg veríték
mint gyöngycsepp rajta.
– A jövő órának titkai vannak, Vértessy, szólt lihegve a hölgy,
kezével erősen szorítva Vértessy kezét. – Lehet jó, lehet rossz; lehet
öröm, lehet halál.
Vértessy az orvost kereste szemeivel, mintegy biztatást remélve
tőle.
Az orvos félreintette. Súgva mondá neki:
– Iszonyúan szenved, de nem akarja ön előtt mutatni.
– Hangjával titkolja; de én a lehelletén érzem. Nagy-e a veszély?
Az orvos vállat vonított.
– Szokás szerint. Nagyon idegzetes s valami nyugtalanítja.
– Mi lehet az?
– Jó lenne, ha megtudná tőle nagyságod. Ilyen esetben a
léleknyugalom élethalálkérdés, s a félelem, nehéz indulat lehet egy
új életre nézve rossz befolyással.
Az «egy új élet» szónál ismét megvillant Vértessy ajkai körül
amaz önkénytelen örömrándulat. Visszament nejéhez s odatérdelt a
szőnyegpárnára.
– Kornélia, hogy van ön?
– Az Isten kezében, susogá a hölgy, megdicsőülő szemeit felfelé
emelve. Isten kegyelmez, Isten büntet, – tetszése szerint.
Vértessy érzé a görcsös kézszorításról, mit kell szenvednie.
– Istennél a kegyelem… susogá azután halkan a hölgy.
Vértessy reszketni érzé szivét e szónál. Egy óra előtt ő is azt
mondá: «Istennél a kegyelem!» egy olyan embernek, ki magának
hosszú életet igért.
A nő bágyadt tekintettel fordult oda hozzá s két kezével keblére
vonva férje kezét és szemeivel annak szemeibe tekintve mélyen,
fájdalmasan, oly kérve kérdezé:
– Fog-e nekem kegyelmezni az Isten?
– Igen, oh igen, neked, angyalának; rebegé a tábornok.
– Kegyelmeztél-e te annak, a ki te hozzád könyörgött?
Vértessy nem állhatá ki e tekintetet, nem tudott felelni e
szavakra.
– Vértessy! A halál halálért jön. Az itélet itéletet hoz. A koporsó
szélén fekszem. Oh ne hagyj engem meghalni.
– Mit tegyek? mit tehetek? szólt rebegő hangon a férj.
– Látod, monda a nő, karjára fonva karjait, mint repkény az erős
fára; ha te ölsz, én is meghalok; a mi kínt e szomszédházban egy
halálra itélt szenved, azt én is mind kiállom. Annak a rettegését,
annak a kétségbeesését, annak a halálos tusáját! Oh szánj meg
engem, férjem. Légy irgalommal ebben az órában ahhoz, a ki vétett,
hogy úgy legyen én hozzám irgalommal az Isten!
Vértessy lelkében meg volt rendülve. Az orvos oda lépett hozzá s
komolyan mondá neki:
– Tábornok úr, én úgy hiszem, hogy ez nem példátlan eset,
miszerint halálra itélt raboknak hasonló szenvedők kérésére
kegyelmet adtak.
Vértessy érdekelten tekinte reá, mintha kérné tőle, hogy
folytassa.
É
– Én magam tudok hasonló esetet a komáromi várőrségnél
szolgáltomban, hol egy háromszor szökött ifju hasonló kérelemre
kegyelmet nyert.
– S hiszi ön, hogy ez segíteni fog?
– Uram, midőn az idegzet-erő ennyire hatványaira van emelve, a
képzelet mindenható, egy örömhir életet ad, egy ijedelem halált; egy
édes gondolat többet segít minden gyógyszernél.
Vértessy megcsókolá halvány, szenvedő szerelme homlokát s
biztató férfi-szóval mondá neki:
– Meg fogom őt menteni.
A hölgy égfelé emelte reszkető kezeit és halvány orczáját; szemei
lassan lecsukódtak és fehér arcza elkezdett mosolyogni szeliden.
… Odakünn hallatszott a hármas dobpördülés.
A tábornok hirtelen föleszmélt, sietett ki az ajtón, felkötötte
kardját és futott át a laktanyába.
A zaj, a lárma közelről hallatszott már és ő arról volt kénytelen
gondolkozni, hogy e zajos polgártársakat szép szavakkal rábeszélje,
hogy menjenek haza vásznat szőni, csizmát varrni, s más aféle; a
mikor e helyett kedve lett volna közéjök rontani és szétszelelni őket,
mint a polyvát!
XV. OLAJ A TENGERRE.
Az egész utczát, a milyen széles volt, ellepte a sok kalap.
Nem lehetett egyebet látni, mint a kalapokat. Itt-amott ugyan
kaszák és vasvillák is álltak ki a tömegből, de az emberek
legnagyobb része még fegyvertelen volt, nem számítva a gyarló
botok sokaságát.
A forrongó tömeg között lehetett látni tisztes polgárokat is, kik
bár egyenruha nélkül jöttek, de elhozták szuronyos puskáikat s
azokkal különös bátorságára szolgáltak a többi népnek, mely hasonló
esetekben azt képzeli, hogy a szuronyos nationalgarde tökéletesen
megfelel a katonaságnak.
«Megállj!» Hangzott a tolongó néptömeg elé.
Egy perczre elhallgatott e szóra a zaj. Megállt a népség.
«Fegyvert tölts!»
A katonaság, mint egyetlen sokkezű gép, egyszerre bocsátá
lábához fegyverét, hallatszott a vas puskavesszők koppanása a
fegyverek csöveiben. Azután megint egy zördülés: minden fegyver
kézben volt egyszerre.
A tolongók kezdtek egymásra nézni s az előljöttek gondolkoztak a
hátuljövőkről, hogy milyen jó azoknak ott kiabálni.
A tábornok a lármázó tömeg elé lovagolt s kemény hangon kiálta
rájok:
– Mit akarnak önök? Mi bajuk? Miért tolongnak az utczán?
Az emberek egymást taszigálták előre; végre egy elkiáltá magát:
– Itt van Mátyás mester. Beszéljen Mátyás mester.
– Éljen Mátyás mester.
A tömeg közől egyszerre egy bőrkötényes polgártárs emeltetett
ki, fején csákóval, kezében szuronyos puskával, ki a többiek vállain
át a tábornokig szállíttatott s ott letevődött.
Itt van Mátyás mester.
Ha kezei nem árulnák is el, miknek bötykei lemoshatatlanul be
voltak balzsamozva szurokkal, a bőrkötény mellett feledett kármentő
bizonyságot tenne róla, hogy a kérdéses férfiu azon érdemes
polgárok osztályához tartozik, a kik az emberiséget tyúkszemekkel
ellátják. Bajusza hetvenhét karikába volt sodorva szépen, s azonkívül
minden mondásnál szokott egyet rántani a fejével és a vállával,
mintegy nagyobb bizonyságul.
Mátyás mester hirhedett piaczi szónok, toasztivó czéhgyüléseken,
kitanult násznagy és elismert disznó-ölő, annálfogva szélesen
ismeretes az egész városban.
Nem is fél ő sem a várostól, sem a vármegyétől, még a
generálistól sem, a hogy azt most is megmutatja.
Oda áll bátran a tábornok elé, végig sodorintja kacskaringós
bajszát s olyakat csap a puskával a földre, mintha az volna szándéka,
hogy mentől hamarább letörje az agyát. Megköszörüli a torkát, s
nem egészen rekedt, hanem éles hangon tesz hozzá ilyetén
mondást:
– Nagyságos generális úr. Mivel hogy úgy lévén, és aképen
származván, hogy a mi emberi massánk ebben a comitivában (értsd
comitátus) rendkívüli módon elszaporodott; mindazonáltal a
tekintetes impostoratus (értsd compossessoratus) arra a causara
vetemedett, hogy ez így semmiképen sem jól vagyon, és abban
igaza is vagyon, mert a czéhbeliek már nagyon nagy qualicitással
vagynak, ellenben nincsen igaza, a szükséges legények számtalan
kevesen levén tehát. Elhatároztatott eképen, hogy miután minden
ember azt beszéli; nincsen is különben, a mi igaz is. Nagy az
ellenségnek az országba való impulsusra kivánatos óhajtása.
Mindamellett, hogy ennek eleje vétessék, és confirmáltassék, a
plenipotentiák mellett az határoztatott, hogy a patikárusok
készítsenek valami miasmát, a melynek decretuma által az emberek
üdvös korlátok között tartatódjanak. Immár pedig ez így lévén, és
ezt a nép megtudván, már is a szomszéd tractusokban és
sequestrumokban lakozó seculáris népség fellázadott és tudni akarja,
hogy hogyan és miképen? Ezt én meg nem mondhatom, nem
akarván magamat apprehendálni, de annyit bizonyosan mondhatok,
hogy már egy vásárra járó legényemnek összehúzta a lábait a görcs;
és én tudom, a mit tudok. Ha tehát a nagyságos generális úr kivánja
és helyesnek találja, hogy az emberek, az ország közhasználatára
megcsinálják a revolucziót, eziránt egészen alázattal és tisztelettel
megkéretik. És mi nem vagyunk bolond emberek.
Ez elmés és különösen értelmes dictio alatt azonban a népség
merészebb csoportjai egészen előre tolakodtak, s igen valószinű volt,
hogy a magyarázatot néhány pillanat mulva kézzelfoghatóbb tények
fogják megadni.
A tábornoknak pedig az általános emberiség és hazafiúság
érzelmein kívül még egy nagy oka volt a zajos és véres jelenet
elkerülésére.
Beteg neje tán épen a halál küszöbén van e perczben. Egy sor
lövés, egy órai utczai harcz annak bizonyos halála lenne.
Ez aggasztó helyzetben az utcza átelleni oldaláról egy lovas
látszott közelítni, ki nagy bajjal bírt keresztül törtetni a sűrű
néptömegen, mely csak azért nyitott előtte útat, mert a lovag egy
iratot lobogtatott kezében, szüntelen azt kiáltozva, hogy ez felszólítás
a néphez, ő a vezérrel akar szólani.
– Ki itt ez érdemes honfiak vezére?
Vértessy rejtélyes lengyelét ismeré meg a lovagban, kiben gyanút
kezdett vetni, azóta, hogy az elitélt nem akart emlékezni rá.
Az elitélt szavaiban mégis összefüggésnek kell lenni. Egy óra előtt
egészen őrült beszédnek tartotta azokat.
– Hol a nép vezére? kiálta Kamienszka, izzadt lovával a nyilt térig
vergődve.
Mátyás mester büszkén mutatott a bőrkötény alatt dobogó hő
keblére, hogy ő lesz az.
Kamienszka nagyszerű pathoszszal nyújtá át az érdemes
hazafinak Numa Pompilius felszólítását, melyben a székvárosi
csizmadiák, szabók és pékek azon bizalommal tiszteltetnek meg,
hogy a főhadiszállás számára bizonyos ezerekbe vágó csizmákat,
nadrágokat és megfelelő zsemlyéket süssenek, varrjanak és
öntsenek és azokat haladéktalanul átküldjék.
– Mit cselekszik ön? kiálta rá a tábornok franczia nyelven. Én az
első moczczanásra szétveretem az embereket.
– Olajat töltök a tengerre, felelt az ifjú lovag hasonlóul. Egy óra
alatt haza fog menni minden ember.
Mátyás mester két kézre fogta az írást, puskáját az alatt térdei
közé szorítva, s elolvasta azt figyelmesen.
Szemlátomást képzelhető volt, hogy egyenesedett ki a bajusza
ijedtében, a mint annak a végére jutott.
– Hatezer pár csizma!
Egy sovány, állig begombolt polgártárs nyújtogatta a nyakát
szörnyen, három közben álló ember háta mögül, szemeit előre
meresztve, a távoli irás felé; az Csihos mester volt, jellemére nézve
becsületes szabó.
– Itt van, olvassa kend is, – szólt Mátyás mester.
Az hosszú kezét kinyújtá három előtte álló emberen keresztül s
egy csomó szabó hitsorsos fejét oda csődítve magához, felolvasá a
proclamatiót fenhangon is.
– Háromezer nadrág.
Az oroszlánpék nem hallotta, mit beszélnek, de füleit megütötte a
kenyér és zsemlye.
A veszedelmes felhivás egy percz alatt megtette a körutat a
sokaság közt, lassankint eltűnve a hátul álló csőcselékben.
És a hol egyszer megfordult, ott bámulatra méltó módon kezdtek
hosszúra nyúlni az arczok, elcsendesülni a szájak; mozgás, zúgás lett
a zajból. Mátyás mester, Csihos mester, meg az oroszlánpék hült
pofákkal kezdtek értekezni. A hátrább állók húzódoztak a fal mellé,
mint a kik nem akarnak idetartozni.
Végre Mátyás mester neki támasztotta a puskáját valaki hátának,
maga levette a kalpagját, lesimitotta a bajuszát odalépett nagy
kételkedő ábrázattal a tábornok elé, elől, hátul vakarva a nyakát.
– Megkövetem nagyságos tábornok úr. Mert talán nem is tetszett
engemet egész voltaképen megérteni. Ámbátor én sem azt nem
mondottam, hogy így, vagy amúgy: ez, vagy amaz; azt pedig épen
nem akartam mondani, hogy talán s a többi; de mégis hanemha
netalántán tulajdonképen koránsem lehetett volna kivenni a dolgok
mivoltából, hogy az instantiák hová infestálnak? arra nézve bátor
vagyok kényteleníttetni azon szivességre, miszerint a nagyságos
tábornok urat az érdemes polgárság és az itteni lakosok részéről
azon nyilatkozatban szerencséltessem, hogy nem is mi akarjuk a
tekintetes vármegye urait és a nagyságos katonaságot deliberatum
elé vonni, sőt inkább præstanter arra akartuk kérni a nagyságos
tábornok urat, hogy ama gonosz országháborítókat, a kik tűzzel,
vassal közelednek békességes városunkhoz, ezt mi tőlünk távol
tartani méltóztassék: a mire való nézve, mi is és az összes fegyveres
polgárság a mi szolgálatainkat felajánlván, hogy a nagyságos
tábornok úr parancsolatjára a mi hazánkért, városunkért, a
tekintetes vármegyéért és a fölségért vérünket és életünket ontani
készek lehessünk. Akasztófára valók tudniillik. A kiknek még hatezer
pár csizma kellene!
Alázatos szegény szolgája.
A tábornok nem állhatá meg, hogy csendesen el ne mosolyodjék
e szerény köpönyegfordítási mondolatra.
Vértessy kivont kardjával inte a katonaságnak, hogy bocsássák le
fegyvereiket s a szokott őrségen kívül vonuljanak vissza a
laktanyába.
A lármás gyülekezet még egyszer hangos vivátot kiáltott a
tábornoknak, azután botjaival és ökleivel mindenféle távol eső
tárgyakat fenyegetve, nagy zúgással széjjeloszlott.
Az oroszlánpék maradt legutoljára, mint a kinek legjobban
megfeküdte a gyomrát bizonyos számú kenyér és zsemlye kivetése.
Csak akkor tért magához, midőn már a többiek mind eltávoztak;
akkor odament az ifjú lengyel lovaghoz, s kövér újjával szétpiszkálva
a levegőt, mondá neki:
– Nem lesz abból semmi, uram.
Azzal köszönt és futott haza.
Kamienszka a furcsa zendülés eloszlása után a tábornokkal
együtt belovagolt a kaszárnya udvarára, ott mindketten leszálltak
lovaikról és siettek a kihallgatási terembe.
Mindkettőnek volt valami sürgetős mondani valója, a mit nem
lehetett a közönség előtt tenni.
– Uram, sietett a tábornok elébb elmondani a magáét. Bárki
legyen ön, nekem igen kellemes szolgálatot tett, a mit én önnek
reménylek visszafizethetni.
– A veszély közepéből jövök, tábornok úr; felelt vissza gyorsan a
hős delnő, mint a kinek perczeivel gazdálkodni kell még a beszédben
is. A megye közepében gonosz szellemű lázadás ütött ki; melynek
legelső összetartó csomója kezembe jutott. Úgy jutottam hozzá,
hogy szinte a nyakamra hurkolódott az. A természeti csapás, mely
ránk közelg, alkalmat adott egy rég készítgetett terv végrehajtására
a legfélelmetesebb rajongóknak. Im itt a kiáltvány, mely egy nap
múlva az egész országot be fogja repkedni.
A tábornok bámulva olvasá az átnyújtott iratot.
– A rablásvágy, a bosszúállás, a nép butasága erős szövetségesei
ez őrült merényletnek, mely ha erőre kap, néhány hét alatt más
alakot adhat Európa térképének. Még most csekély a láng. Csupán
néhány faluban tört ki. Ez éjjel meg fogják rohanni a hétfalusi
kastélyt. Ez lesz a kezdet.
A tábornok arcza vonaglott. Az elitélt szava igaz volt.
– Ott urat és cselédet megölnek. Meg kell őket ölniök, hogy a
lázadás részeseinek lehetetlenné tegyék a visszatérésre való
gondolatot. Ez a kezdete a kétségbeesési harcznak.
A tábornok csengetett. Egy belépő hadsegéd fülébe néhány szót
sugott, azzal leült és írt nagy sebesen, intve Kamienszkának, hogy
folytassa.
– Tábornok úr! még most egy csapással elfojtható a tűz. Még
most egy merész tenyér, mely nem félti magát a megégéstől,
letakarhatja a vulkán száját, ha az rögtön cselekszik, nem várva a
napot, nem órát, nem perczet, hanem téve rögtön. Egy nap, egy
óra, egy percz alatt minden történhetik, a mi soha jóvá nem tehető.
Az ajtó előtt lánczcsörrenés volt hallható; két őr az elitéltet
vezeté be: a porkoláb utána jött.
A tábornok folyvást leveleket írva, beszélt hozzá.
– Ifjú ember, vetesse le kezeiről azokat a lánczokat. Kérjen
magának hadsegédemtől egy kardot. Azt kösse fel.
Az ifjú Hétfalusy bámulva mereszté szemeit maga elé, s hagyta
levétetni lánczait és hagyta oldalára köttetni a kardot, s nem vette
észre, hogy mellette két lépésnyire egy idegen ifjú áll, a kinek oly
nehezére esik könyekre nem fakadhatni, nyakába nem borulhatni,
midőn őt ily nyomorúnak látja.
A tábornok készen volt a levélírással; odafordult hozzá egészen:
– Fiatal ember, önt ezelőtt egy órával, méltó okoknál fogva,
halálra itélte a haditörvényszék. Én az itéletet vissza nem vonhatom,
de végrehajtását bízom az igazságos Isten kezeire. Olyan idők
vannak ránk mérve, a midőn a haza egy harczos fia kezeit sem
nélkülözheti. Én saját felelősségemre fölmentem önt a vesztőhelyi
halál alól. Önre más helyen vár Isten itélete. E perczben lázadás tört
ki az ország belsejében, ugyanazon helységben, a hol önnek családja
lakik.
Az ifju rettenve kapott kardjához.
– Hallgassa ön végig nyugodtan, a mit mondok. Vegye magához
e leveleket, válaszsza ki ólamból legjobb paripámat és siessen az
őrtanyákon elszórt cordon-vezetőkhöz. Csapatjainak felét mindenki
az önnel siető százados úr rendelkezésére fogja bocsátani. Mihelyt
félszázad együtt lesz, siessen vele Hétfaluba; a többi teendőkre
nézve irásbeli rendeletei vannak. Mit és hogyan cselekedjék? azt
önnek sugja meg szive. Ön családját megy megszabadítani és
családját oltalmazni. Ott Isten keze lesz ön felett. Ha ő neki tetszik
az itéletet végrehajtani ön felett, legyen meg akarata; ha élve tér ön
vissza, a multak feledve vannak.
Az ifjú nem tudott mit felelni, a hang elszorult torkában; csak
odaborult némán a tábornok elé, és annak kezét szorítá ajkaihoz és
könyeit hagyta ráhullani.
– Keljen ön, keljen innen. Ezt nem nekem köszönheti, hanem
Istennek, és ezen derék úrnak itt, ki önért oly sokat merészelt.
Az ifju csak most tekintett Kamienszkára, s úgy tetszék neki,
mintha könyes szemeinek ködfátyolán át egy idevarázsolt álomkép
állana előtte.
A lengyel nő odasietett hozzá s megölelte, és sietett fülébe sugni:
– Egy szót se hozzám! Még lesz idő.
– Tehát önök mégis ismerik egymást? szólt Vértessy; ez ifju
bizonyosan meg volt zavarodva, midőn barátját megtagadta.
Azzal derekasan megrázta a delnő kezét, kit még mindig oka volt
úrnak czímezni.
– Uram, úgy hiszem, nem teszek rossz ajánlatot önnek, ha azt
mondom, hogy siessen egy rövid reggelizést végezni ifjú barátjával,
s azután rendelkezzék szintén egy paripámmal és egy kardommal;
félre ismerném önt, ha kételkedném abban, hogy bajtársát követni
szándékozik a veszélybe.
Hétfalusy ijedten akart közbe szólani, de a hölgy visszarántotta s
villámló szemekkel inte neki hallgatást.
– Köszönöm, tábornok úr, felelt azután vissza bátran. Ez ajánlatot
vártam és elfogadom. A reggelizést végezhetjük lóháton is. Időnk
nincs pihenésre.
– Igaza van önnek, szólt Vértessy, megszorítva azt a gyöngéd
hamvas kezet, melynek aczél izmai nem árulák el a nőt; önöknek
sietniök kell. A mily váratlan jött e merénylet, oly hirtelen kell azt
torkon ragadnunk. Ha a megye több részében is kitörne e lázadás,
nem fog többé készületlen találni.
A paripákat ezalatt a kapu alá vezették. A megbizott százados
felkészülten lépett be, s Kamienszka számára is hozott egy kardot,
mit az sietett derekára csatolni.
A tábornok lekisérte őket a paripákig. A három lovag nyergébe
vetette magát. Vértessy még egyszer megszorítá a delnő kezét, és
katonás őszinteséggel mondá neki:
– Én igen nagyra becsülöm önt, Kamienszki úr.

– Csak Kamienszka,2) sugá a delnő halkan, azzal sarkantyút adott


lovának, s társai után nyargalt.
Vértessy előtt most világosult fel minden!
– Csodálatos asszony, szólt utána bámulva, mindaddig, míg a
házak el nem takarták szemei elől.
Az utczák csendesek voltak már, senki sem zajgott a téren, ezt a
csendet érezte a tábornok szive is. Valami jótékony nyugalom, mit a
legfőbb izgatottság szokott szülni, szállt szivére.
Most volt idő visszasietni a szomszéd csendes házba.
Valami előre sejtett örömtől úgy dobogott a szive, úgy vert
minden ér kezében, halántékain, a mint a csendes szobákon végig
haladt.
A hölgyszoba előtti teremben találkozott az orvossal.
Az orvos eléje mosolygott és kezét nyújtá felé.
– Öröm van a háznál.
– Mit mond ön? Kiálta Vértessy, kéjtől remegve; pedig hiszen
tudta jól, hogy mit mond?
– Egy kicsi kis angyalka van a háznál, suttogá az orvos, és hozzá
tevé mosolyogva: még pedig fiuangyal.
Vértessy a jövő perczben neje előtt térdelt; annak kezeit
szorongatva százszor, meg százszor forró ajkaihoz.
És a nő boldog, édes mosolygással tekinte le reá, minő azoké,
kiket szeretteik a túlvilágról imádkoztak vissza…
… «Istennél volt a kegyelem!»
XVI. JÓ, HOGY AZ ÉJ FEKETE.
A hétfalusi kastélyban csendesen aludt mindenki, nem is sejtve
azt a sötét rémet, mely ellensége mindennek, a mi él, mely
kényszeríti a ház őrebét, hogy kaparjon a fal mellett sirokat, mely
felhíja a kuvikot, hogy ijesztő szavával szólaljon meg a háztetőn,
odaülve a nyikorgó szélvitorla mellé; mely beküldözi az előcsarnokba
látogatójegyeit, a nagy fekete éji pillangókat, miknek hátára halvány
koponyák vannak festve, mint a ravatalokon; melynek léptei alatt
recsegnek, ropognak a butorok, s az a kis látatlan bogárka ott az ágy
deszkái között elkezd csengetni, tizenegyet egymásután, jelentve,
hogy «itt van ő!»
Oh e néma lények között olyan nagy egyetértés van!
A szél mogorva felhőket hajtott végig az égen, mik úgy siettek el
innen erről a tájról, úgy iparkodtak egymás alatt, fölött elsuhanni,
idomaikat változtatni, mintha félnének, hogy itt kapja őket valami.
Némelyiknek vörös volt még a szegélye távoli gyuladás lángjától. Az
úgy sietett a többi közé fúrni magát, azok pedig futottak előle, hogy
őket is meg ne gyújtsa.
A sötétben rendetlen csoportok látszanak az utczákon gyűlekezni,
a mik csendesen huzódnak a kastély felé.
A csárda szobájában gonosz tanácskozás foly a kastélyban alvók
megrontása felől.
Három külön nézet küzd egymással. Numa Pompilius nyilt, hősi
támadást kiván, mint illik a derék sarmaták epigonaihoz, kőfaltörő
kosokkal és balistákkal, s egyéb classicus harczi szerekkel, mell mell
ellenében, szemtől szemben az ellenséggel.
Welcome to Our Bookstore - The Ultimate Destination for Book Lovers
Are you passionate about books and eager to explore new worlds of
knowledge? At our website, we offer a vast collection of books that
cater to every interest and age group. From classic literature to
specialized publications, self-help books, and children’s stories, we
have it all! Each book is a gateway to new adventures, helping you
expand your knowledge and nourish your soul
Experience Convenient and Enjoyable Book Shopping Our website is more
than just an online bookstore—it’s a bridge connecting readers to the
timeless values of culture and wisdom. With a sleek and user-friendly
interface and a smart search system, you can find your favorite books
quickly and easily. Enjoy special promotions, fast home delivery, and
a seamless shopping experience that saves you time and enhances your
love for reading.
Let us accompany you on the journey of exploring knowledge and
personal growth!

ebookgate.com

You might also like