473,783 Members | 2,352 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Pascal - C (2)

Hallo allemaal,
During the conversion of my program from Pascal to C, I was more or
less able to find the C equivalent of most Pascal functions so far.
Only four gave me some real trouble. I solved them but it could be I
overlooked something.

1) In Pascal you can declare functions inside a function. AFAIK this
is not possible with C. Or am I wrong?

2) In Pascal there exists the "in" function. Example:

if (c in ['A'..'F', '0'..'9']) then { c is hexadecimal }

This can be translated like:

if ( ((c >= 'A') && (c <= 'Z'))
|| ((c >= '0') && (c <= '9'))) .... // c is hexadecimal

I just wonder if there is a more simpler solution.

3) In Pascal I can "add" lines:

Line1 = 'File size:' + sSize + ' bytes.';

My solution:

strcpy(Line1, "File size:");
strcat(Line1, sSize);
strcat(Line1, " bytes.);

Again, I just wonder if there is a more simpler solution.

4) In Pascal I can "add" just one character of another string:

Str1 = Str2 + Str3[5];

Unfortunately strcat(Str1, Str3[5]); doesn't work, I get an error
message. My solution:

Str4[0] = Str3[5];
Str4[1] = 0;
strcpy(Str1, Str2};
strcat(Str1, Str4};

It works but in this case I'm certainly not happy with the solution.
Is there a better way?

Many thanks for any comment!
--
___
/ __|__
/ / |_/ Groetjes, Ruud Baltissen
\ \__|_\
\___| http://Ruud.C64.org
Nov 1 '08
54 3182
On Sun, 02 Nov 2008 06:54:51 +0000, Richard Heathfield wrote:
>If you are doing a lot of string manipulation, C might not be your best
choice. Scripting language like Perl are designed for string processing
and might be a better option.

ROTFL! If you are doing a shedload of string manipulation, C is a far
better choice than Perl. That is, if you want it to finish some time.
I remember what Leroy said about pascal. Now that Leroy is a big and rich
star, his criticism remains.

I think the dealbreaker is whether one plays fast and loose with data.

That's been popular. There has, however, been the anti-phenomenon of data
mining, which plays fast and loose with data until the *right one* comes
up.
--
George

Freedom itself was attacked this morning by a faceless coward, and freedom
will be defended.
George W. Bush

Picture of the Day http://apod.nasa.gov/apod/
Nov 2 '08 #21
On 1 Nov 2008 at 23:07, jacob navia wrote:
Antoninus Twink wrote:
>Yes. In fact, many implementations also provide an asprintf() function
in their standard library, which allocates memory for Line1 with malloc,
saving you the trouble of working out the size of the buffer needed and
eliminating possible overflows if you miscalculate.

Yes, that would be an even better alternative.

I answered so quickly because I was astonished that somebody could answer

"Not in C"

to such elemntary question!
Yes, it's simply amazing what nonsense they talk.

Nov 2 '08 #22
On Sat, 01 Nov 2008 23:26:37 +0100, jacob navia <ja***@nospam.c om>
wrote:
>Ruud wrote:
>Hallo allemaal,
During the conversion of my program from Pascal to C, I was more or
less able to find the C equivalent of most Pascal functions so far.
Only four gave me some real trouble. I solved them but it could be I
overlooked something.

1) In Pascal you can declare functions inside a function. AFAIK this
is not possible with C. Or am I wrong?

2) In Pascal there exists the "in" function. Example:

if (c in ['A'..'F', '0'..'9']) then { c is hexadecimal }

This can be translated like:

if ( ((c >= 'A') && (c <= 'Z'))
|| ((c >= '0') && (c <= '9'))) .... // c is hexadecimal

I just wonder if there is a more simpler solution.

That one is simple enough
Except for the fact that it doesn't work on an EBCDIC system.
--
Remove del for email
Nov 2 '08 #23
Barry Schwarz wrote:
On Sat, 01 Nov 2008 23:26:37 +0100, jacob navia <ja***@nospam.c om>
wrote:
>Ruud wrote:
>>Hallo allemaal,
During the conversion of my program from Pascal to C, I was more or
less able to find the C equivalent of most Pascal functions so far.
Only four gave me some real trouble. I solved them but it could be I
overlooked something.

1) In Pascal you can declare functions inside a function. AFAIK this
is not possible with C. Or am I wrong?

2) In Pascal there exists the "in" function. Example:

if (c in ['A'..'F', '0'..'9']) then { c is hexadecimal }

This can be translated like:

if ( ((c >= 'A') && (c <= 'Z'))
|| ((c >= '0') && (c <= '9'))) .... // c is hexadecimal

I just wonder if there is a more simpler solution.
That one is simple enough

Except for the fact that it doesn't work on an EBCDIC system.

yes. A better solution is ishexdigit()...
--
jacob navia
jacob at jacob point remcomp point fr
logiciels/informatique
http://www.cs.virginia.edu/~lcc-win32
Nov 2 '08 #24
jacob navia wrote, On 02/11/08 09:56:
Barry Schwarz wrote:
>On Sat, 01 Nov 2008 23:26:37 +0100, jacob navia <ja***@nospam.c om>
wrote:
>>Ruud wrote:
Hallo allemaal,
During the conversion of my program from Pascal to C, I was more or
less able to find the C equivalent of most Pascal functions so far.
Only four gave me some real trouble. I solved them but it could be I
overlooked something.

1) In Pascal you can declare functions inside a function. AFAIK this
is not possible with C. Or am I wrong?

2) In Pascal there exists the "in" function. Example:

if (c in ['A'..'F', '0'..'9']) then { c is hexadecimal }

This can be translated like:

if ( ((c >= 'A') && (c <= 'Z'))
|| ((c >= '0') && (c <= '9'))) .... // c is hexadecimal

I just wonder if there is a more simpler solution.

That one is simple enough

Except for the fact that it doesn't work on an EBCDIC system.

yes. A better solution is ishexdigit()...
You means isxdigit(). This, in my opinion, is simpler than the Pascal
solution.

The OP should note that whilst '0' to '9' are guaranteed to be in
sequence (allowing "c - '0'" to work as expected) there is no such
guarantee with letters in C. Since I'm guessing there will be a
conversion from character to number for a fully portable solution strchr
could well be useful.
static const char *xdigits = "0123456789ABCD EF";
char *pos = strchr("0123456 789ABCDEF",toup per((unsigned char)c));
if (pos) { /* character found so was a hex digit */
digit = pos - xdigits;
}
else { /* not a hex digit */
}

In my opinion, for characters strchr is very close to "in" in Pascal.
--
Flash Gordon
If spamming me sent it to sm**@spam.cause way.com
If emailing me use my reply-to address
See the comp.lang.c Wiki hosted by me at http://clc-wiki.net/
Nov 2 '08 #25
Hallo allemaal,
Many thanks for the massive response!
jacob navia wrote:
If you do not know enough C please do not use this group.
Then please be a good man and tell me what level I should have before
I can attend this group?
Chuck wrote:
Ruud, go ahead and ask questions.
Thank you very much for your support, Chuck!

A good book, such as K&R II, would be helpful.
The book isn't the problem, see next.
Richard wrote:
Why not at least tell him about:

if(isupper(c) || isdigit(c))

and

if(strchr("ABCD EFGHIJKLMNOPQRS TUVWXYZ01234567 89", c) != NULL)
The problem is not knowing all those available functions. And knowing
another language is a disavantage as well: instead of reading the book
line by line, one tends to look just at "how is this done in C".
And even reading the book line by line isn't a guarantee for success:
I justed searched the book "C in 21 days" for 'isdigit' and only found
one source file using this function. OTOH, this source file also
mentioned the function 'isspace' and this function does exactly what
one of my own made function does; detecting white space.

sprintf
Not mentioned at all "C in 21 days" :( Because 'printf' was well
explained, I never used the help function of Borland C to give it a
better look. I wish I had because I just did: I learned nothing new
about 'printf' but the page also mentioned 'sprintf' and many more
other functions.
Trent wrote:
strncat(Str1, &Str3[5], 1);
Here I have no excuse, it is mentioned very clearly in the book.
--
___
/ __|__
/ / |_/ Groetjes, Ruud Baltissen
\ \__|_\
\___| http://Ruud.C64.org

Nov 2 '08 #26
Ruud wrote:
Hallo allemaal,
Many thanks for the massive response!
jacob navia wrote:
>If you do not know enough C please do not use this group.
Then please be a good man and tell me what level I should have before
I can attend this group?
As you can see from my quotes, I do not told YOU that but to Ian
Collins. Please try to understand how quoting works.

--
jacob navia
jacob at jacob point remcomp point fr
logiciels/informatique
http://www.cs.virginia.edu/~lcc-win32
Nov 2 '08 #27
On Sun, 02 Nov 2008 01:28:00 -0700, Barry Schwarz wrote:
On Sat, 01 Nov 2008 23:26:37 +0100, jacob navia <ja***@nospam.c om>
wrote:
>>Ruud wrote:
>>2) In Pascal there exists the "in" function. Example:

if (c in ['A'..'F', '0'..'9']) then { c is hexadecimal }

This can be translated like:

if ( ((c >= 'A') && (c <= 'Z'))
|| ((c >= '0') && (c <= '9'))) .... // c is hexadecimal

I just wonder if there is a more simpler solution.

That one is simple enough

Except for the fact that it doesn't work on an EBCDIC system.
It will (after fixing 'Z' so that it reads 'F') work on ASCII end EBCDIC
systems. In theory, there could be other systems where it will fail. I
doubt there are any such systems in practise, though.
Nov 2 '08 #28
Ruud wrote:
Hallo allemaal,
During the conversion of my program from Pascal to C, I was more or
less able to find the C equivalent of most Pascal functions so far.
Only four gave me some real trouble. I solved them but it could be I
overlooked something.

1) In Pascal you can declare functions inside a function. AFAIK this
is not possible with C. Or am I wrong?
Inside a C function you can *declare* another function
but you cannot *define* one.
2) In Pascal there exists the "in" function. Example:

if (c in ['A'..'F', '0'..'9']) then { c is hexadecimal }

This can be translated like:

if ( ((c >= 'A') && (c <= 'Z'))
|| ((c >= '0') && (c <= '9'))) .... // c is hexadecimal

I just wonder if there is a more simpler solution.
There are no built-in "set membership" facilities in C.
It's assumed that different kinds of sets call for different
kinds of representations -- bit mask, array of elements, array
of ranges, whatever -- and that you will code according to the
representation chosen rather than to the set abstraction.

For classifying characters, though, the Standard library
offers some functions you may find useful. In particular, the
<ctype.hheade r declares two functions you can combine to make
the test shown in your example:

#include <ctype.h>
...
int ch = (unsigned char)(...);
if (isxdigit(ch) && !islower(ch)) ...
3) In Pascal I can "add" lines:

Line1 = 'File size:' + sSize + ' bytes.';

My solution:

strcpy(Line1, "File size:");
strcat(Line1, sSize);
strcat(Line1, " bytes.);

Again, I just wonder if there is a more simpler solution.
That works, assuming sSize is a string and Line1 is a
char[] array of sufficient size. An alternative that can be
convenient (especially if some of the data are not already
in string form) is to use sprintf().
4) In Pascal I can "add" just one character of another string:

Str1 = Str2 + Str3[5];

Unfortunately strcat(Str1, Str3[5]); doesn't work, I get an error
message. My solution:

Str4[0] = Str3[5];
Str4[1] = 0;
strcpy(Str1, Str2};
strcat(Str1, Str4};

It works but in this case I'm certainly not happy with the solution.
Is there a better way?
"Better" is a slippery word. There are certainly "other"
ways, such as

strcpy(Str1, Str2);
Str1[ strlen(Str2) ] = Str3[5];
Str1[ strlen(Str2) ] = '\0';

or

sprintf (Str1, "%s%c", Str2, Str3[5]);

--
Eric Sosman
es*****@ieee-dot-org.invalid
Nov 2 '08 #29
Ruud wrote, On 02/11/08 12:11:
Hallo allemaal,
<snip>
>A good book, such as K&R II, would be helpful.

The book isn't the problem, see next.
Ah, but it could be! You would be well advised to get K&R2.
<snip>
I justed searched the book "C in 21 days" for 'isdigit' and only found
<snip>
Not mentioned at all "C in 21 days" :( Because 'printf' was well
<snip>

"C in 21 days" is *a* book, but what makes you think it is a *good*
book? K&R2 is an excellent (but not perfect) book and there are a few
others that generally get recommended here, but the book you have is not
one of them.
--
Flash Gordon
If spamming me sent it to sm**@spam.cause way.com
If emailing me use my reply-to address
See the comp.lang.c Wiki hosted by me at http://clc-wiki.net/
Nov 2 '08 #30

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

4
4393
by: Chris Gordon-Smith | last post by:
I am tying to call a Pascal function from C++, and vice versa. Does anyone know how to do this, or where detailed information on this topic can be found? For the C++ to Pascal call I have tried declaring the Pascal function as:- extern "C" void PASCALTESTFUNC1(); within my C++ code. However, the linker is giving me an unresolved
24
3481
by: Faith Dorell | last post by:
I really don´t like C.You can write better programs in BASIC than in C, if you don´t like this language. I don´t understand how C became so popular, although much better programming languages existed in the 70s or 80s or 90s. Pascal is much better.
14
23437
by: digital | last post by:
hello anyone... pls explain me , how different between function and procedure for C/C++ and Pascal. Thankx......
28
2279
by: Skybuck Flying | last post by:
Hi, I think I understand now a bit better what the difference is between a c compiler and a pascal compiler. For example: When compiling source code with a pascal compiler. The pascal compiler will simply stop when it is missing an implementation for a procedure or whatever.
17
4378
by: David Scemama | last post by:
Hi, I'm writing a program using VB.NET that needs to communicate with a DOS Pascal program than cannot be modified. The communication channel is through some file databases, and I have a huge problem writing VB Double values to the file so as the Pascal program can read them as Pascal Real values. I've managed to find the algorithm to read the Pascal Real format and convert it to a VB Double, but I cannot figure out the opposite...
6
6913
by: kkrish | last post by:
hi, I am working on an old program written in c.The program uses a function like this "unsigned long int far pascal ReadFile(char *buff,unsigned long int *size)" . Is this a PASCAL function CALL from C?Do I need to have Pascal installed in my system.This has been written in Turbo C 2.0 under
15
1743
by: jacob navia | last post by:
Programming languages come and go. Still is amazing that in this survey from http://www.devsource.com/article2/0,1895,2016936,00.asp the C language comes second, right after Java. Java # What it is: An object-oriented programming language developed by James Gosling and colleagues at Sun Microsystems in the early 1990s. # Job availabilities: 14,408
0
1583
by: dhruba.bandopadhyay | last post by:
Am using Borland C++ 4.5 for the old dos.h APIs. It appears that newer versions of compilers stop support for the oldskool DOS routines. Am trying to convert/port an oldskool Pascal program that uses registers/ interrupts into C/C++. 1. What are the inline($FA); & inline($FB); Pascal functions? What is the C/C++ equivalent? inline($CD / $1C); inline($9C);
7
5971
by: SMALLp | last post by:
Hy! I desperately need help! I need to make application that would accept Pascal code and check if it returns good results. My idea is (from a beginner point of view) to make application in python that would send code (text) to pascal compiler (Free pascal compiler that can be used from command prompt in windows) and it would return result and then application would show that result.
0
9643
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look ! Part I. Meaning of...
0
10313
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
1
10081
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
9946
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
0
8968
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
1
7494
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
6735
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
0
5378
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
2
3643
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.