[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x

Pascal

Pascal is an influential imperative and procedural programming language, largely (but not exclusively) intended to teach students structured programming and data structuring. Pasca was implemented on a wide range of architectures, from early PCs to mainframes. Pascal derivatives include OOP-based Object Pascal (used in Delphi and Lazarus/Free Pascal). Pascal is a purely procedural language and includes control statements with reserved words, but has many data structuring facilities and other abstractions like type definitions, records, pointers, enumerations, and sets.

Share tech news, updates, or what's on your mind.

Sign up to Post

I'm trying to chop up an ansi string with the Delete function.  I'm getting a compiler error on that line.

program textProcess6;
uses sysutils;
{$H+}
var
  namein,nameout: string[255];
  raw_text,processed_text: ansistring;
  textin,textout: text;
begin
  namein := 'input_file.txt';
  nameout := 'output_file.txt';
  assign(textin,namein);
  reset(textin);
  assign(textout,nameout);
  rewrite(textout);
  while not eof(textin) do begin
    readln(textin,raw_text);
	processed_text := Delete(raw_text,1,5);
    writeln(textout,processed_text);
  end;
  close(textout);
end.

Open in new window

0
HTML5 and CSS3 Fundamentals
LVL 12
HTML5 and CSS3 Fundamentals

Build a website from the ground up by first learning the fundamentals of HTML5 and CSS3, the two popular programming languages used to present content online. HTML deals with fonts, colors, graphics, and hyperlinks, while CSS describes how HTML elements are to be displayed.

I am going to be doing some simple text processing with Free Pascal.  I will have to read in a text file, chop the text up a bit, and then write to a new file.  I looked for a sample program online and it talked about a dat file.  I don't remember how this relates to a txt file.  My input file is a txt file.

Years ago I was working in a unix environment, and I vaguely remember doing things with < or > to tell the operating system what input file to use and what output file to use.  How do you tell Free Pascal what your input and output files are?
0
I have a need to write some Pascal programs, after several decades' hiatus.  I downloaded a free version of Pascal from www.freepascal.org.  I also found https://www.freepascal.org/docs-html/current/user/user.html#userch2.html.  

My helloworld program is working nicely, but it was stored to an awkward location: C:\FPC\3.0.4\bin\i386-win32.  Is it possible to save my files to a subdirectory?

When I start the program, I get a very old-fashioned kind of window.  I can't figure out how to close a program after I've saved it (except for killing Pascal entirely).

I would rather use notepad++ for editing my programs.

There is mention of Lazarus but I don't have any experience with that.  I have downloaded and installed it but am not sure what to do next with it.
0
So I am trying to create a program that takes a list of integers typed in by the user, puts them into order and prints them to the screen. However, my compiler just shows nothing after I type in the list. No output whatsoever.
I get the following hint: Variable "RefListe" does not seem to be initialized. But I cannot make sense of that right now.

Can anyone tell me why this doesn't work?

program TesteSortiereListe(input, output);

  type
  tNatZahl = 0..maxint;
  tRefListe = ^tListe;
  tListe = record
             info : tNatZahl;
             next : tRefListe;
           end;

  var
  RefListe : tRefListe;


procedure SortiereListe (var ioRefListe:tRefListe);
{ Sorts a linked list in ascending order }

  var
  RefAnfang,
  Vorgaenger,
  aktuell:tRefListe;

begin
  RefAnfang := ioRefListe;
  while ioRefListe <> nil do
  {Go through the entire list}
  begin
  vorgaenger := ioRefListe;
  ioRefListe := ioRefListe^.next;
  aktuell := ioRefListe;
    if aktuell^.info < RefAnfang^.info then
    {Element is the smallest element found so far}
      begin
      Vorgaenger^.next := aktuell^.next;
      aktuell^.next := RefAnfang;
      RefAnfang := aktuell;
      end
    else if ioRefListe^.info > aktuell^.info then
    { Element is the biggest element in the list so far, we don't have to change its position}
      begin
      aktuell:=ioRefListe;
      end
    else
        if aktuell^.info < vorgaenger^.info then
        {The number is smaller than the previous one, they

Open in new window

0
I had this question after viewing Pascal Helo.

i had this script
unit hospital;
interface

implementation
uses crt;
Var
name:string;
typeofroom,tp,tv,nory1,nory2:char;
month, day, year, daysstayed,roomcharge,tpcharge,tvcharge,totalcharge:integer;

const
pc=125;
sc=95;
Wc=75;
Tvc=3.50;
Tpc=1.75;
begin
//prompting
writeln('please enter the patients''s name':44);
readln(name);
writeln('please enter the number of days stayed in the hospital':63);
readln(daysstayed);
writeln('please write the month':31);
readln(month);
writeln('please write the day':29);
readln(day);
writeln('pelase enter the year':30);
readln(year);
writeln('please enter y or n for which typeofroom you used. P for private, S for semi private, and W for ward':57);
readln(typeofroom);
Case typeofroom of 'P':roomcharge:=(pc*daysstayed);
                   's':roomcharge:=(sc*daysstayed);
                   'w':roomcharge:=(wc*daysstayed);
end;
writeln('enter y or n for yes or no if they used the telephone':62);
readln(nory1);
Case nory1 of 'Y':tpcharge:=(tpc*daysstayed);
                 'N':tpcharge:=0;
end;

writeln('enter y or n for yes or no if they used the television':63);
readln(nory2);
Case nory2 of 'Y':tvcharge:=Tvc*daysstayed;
                 'N':tvcharge:=0;
end;
//computing
Totalcharge:=roomcharge+tvcharge+tpcharge;


end.
and the error Error: Incompatible types: got "S80REAL" expected "LONGINT"
2 times
plz help me fix it
thanx
0
And the image url f remote location is given in json response...how do i parse and display that in list view...parsing is done andvi cud display the text and details which s so fast over the network...but how do i retrieve the images and display it in list view imagelist appearence
0
Hi, I've been banging my head with trying to come up with a way on Pascal on how to create a function that saves an array of byte to file while keeping its integrity from the fist to the last byte.

I came up with two ideas, either I save the data to the file in its binary form or I convert the binary to hex then save.
When I need to load, if its hex I can decode and convert it to an array of bytes again.

I'm really stuck, because I looked over alot on the past days and didnt find anything remotely close to it. I've began recently working with Pascal so I'm not that experienced with it.
Going C++ would solve me issue but that is not an option here, I need to do it on Pascal.

So if anyone could come up with a way for me to save the array of bytes then load it again later on I would be really thankful.

I could also use a function to encode/decode the bytes, but i have no clue on how would that work.

This is the array I need to save

hmm: array [0..18954] of BYTE;

I have pretty much no base code cause everything I came up with brings error on the IDE, sorry.
0
Hello Guys I'm new with Delphi which uses pascal language.
I'm trying to create simple application which loaded all values in sMemo.Text. All Strings were working fine except with Boolean values "CheckBox and radio Buttons"
here is the line I'm using
sMemo1.Lines.Add(sCheckBox1.Create );
it gives me an error
[DCC Error] Unit1.pas(44): E2035 Not enough actual parameters.

here is my whole code

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, sCheckBox, sRadioButton, sGroupBox, sButton, sEdit, sMemo,
  sLabel;

type
  TForm1 = class(TForm)
    sMemo1: TsMemo;
    sEdit1: TsEdit;
    sEdit2: TsEdit;
    sEdit3: TsEdit;
    sButton1: TsButton;
    sButton2: TsButton;
    sGroupBox1: TsGroupBox;
    sRadioButton1: TsRadioButton;
    sRadioButton2: TsRadioButton;
    sCheckBox1: TsCheckBox;
    sMemo2: TsMemo;
    sLabel1: TsLabel;
    procedure sButton1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.sButton1Click(Sender: TObject);
begin
sMemo1.Clear;
sMemo1.Lines.Add(sEdit1.Text);
sMemo1.Lines.Add(sEdit2.Text);
sMemo1.Lines.Add(sEdit3.Text);
sMemo1.Lines.Add(sCheckBox1.Create);
end;
end.


Anyone here knows that. My main purpose with this app is to load all configuration into memo instead of an ini file wich is easy to …
0
i am using this function to find node in treeview

function TFORM1.lookingTreeView(name: String): PVirtualNode;
var
Node: PVirtualNode;
Data: PUserData;
begin
Result := nil;
Node := VDT1.GetFirst;
while ((Node <> nil) and (Result = nil)) do
begin
Data := VDT1.GetNodeData(Node);
if (Data.FObject.name= name) then
begin
Result := Node;
break;
end
else
Node := VDT1.GetNext(Node);
end;
end;

Open in new window


and i use it like so
Node := lookingTreeView(namedata);

if Node <> nil then
begin
// then stop execute the code 
exit;
end;
// if its nil then do execute the rest of code

Open in new window


so this code search for node in Vst and if the node exits stop the code execution and if does not exits do the rest  

but some times this function got bypassed i mean when a node is already exits the if statement of node <> nil does not detect that its not nil and continue executing the code.
0
Good day.

My aim to to design a form similar to the one in the attached image. My problem is that i would like to place forms all over the form but i am unable to do this bacuse my design time form is not as big as the run time maximised form. Is there any solution to this that will allow me to design my GUI using the enitire form, or atleast be able to place components properly on the form.
Screenshot--30-.png
0
Rowby Goren Makes an Impact on Screen and Online
LVL 12
Rowby Goren Makes an Impact on Screen and Online

Learn about longtime user Rowby Goren and his great contributions to the site. We explore his method for posing questions that are likely to yield a solution, and take a look at how his career transformed from a Hollywood writer to a website entrepreneur.

How do I use idhttp to login to instagram also add functionality to like and follow ?
0
Hello,

I have different shortcuts in my program but I want to let the users change the shortcuts, just like in Notepad++ Shortcut mapper.

I like help in following:

- How to implement this in Delphi easily (attaching shortcuts to buttons and actions)
- Directions what is the best method to save and load the users shortcuts in/from database (each user of the same program would have separate shortcut settings).

Thank you in advance.
0
i have this code to insert some node inside Tvirtuailstringtree it works but some time strange behavior happened

this Tvirtuailstringtree  are inside a Tpanel called pnlmc

here is the code


function AddMCVDTMIC(AVST: TCustomVirtualStringTree; ANode: PVirtualNode; AObject: TUMICX): PVirtualNode;
    var
      Data: PUserONMIC;
    begin
      Result := AVST.AddChild(ANode);
      Data := AVST.GetNodeData(Result);
      AVST.ValidateNode(Result, false);
      Data^.FObject := AObject;
    end;

procedure Tform1.Talkin;
var
Node: PVirtualNode;
Data: PUserData;
UMICX : TUMICX;
begin
Node := lookingTreeView(LineToid);
Data := VDT1.GetNodeData(Node);
if (Node <> nil) then
begin
VDT1.IsVisible[Node] := False;
vstmca.BeginUpdate;
try
vstmca.Clear;
UMICX := TUMICX.Create;
try Data.FObject.istalking := '12'; except end;
umicx.Username :=  Data.FObject.Username;
umicx.userUid := Data.FObject.userUid;
umicx.istalking := Data.FObject.istalking;
umicx.color := Data.FObject.color;
umicx.image := Data.FObject.image;

try AddMCVDTMIC(vstmca, nil, umicx);  except end;

finally
  vstmca.EndUpdate;
end;
end;

//

if (recorder.Active = True) and (LineToid = IntToStr(UniqueID)) then
begin
try button1.Visible := false; except end;
try stop1.Visible := True; except end;
end
else if (recorder.Active = false) then // enrecorder check
begin
try button1.Enabled := false; except end;
try button1.Caption := 'streamin'; except end;
end;


try pnlmc.Height := Data.FObject.iHeigh; 

Open in new window

0
i have combobox that have items  like
1
2
3
4

i want to add items based on number so if last item = 4 then add new item with

5
6
7
8

and so on

function Tpnlsettings.findTheme(tName : string): Integer;
var
  I: Integer;
begin
  Result := -1;
  for I := 0 to cmbThemes.Items.Count - 1 do
  begin
    if cmbThemes.Items.Strings[i] = tName then
    begin
      Result := i;
      Break;
    end;
  end;
end;

procedure Tpnlsettings.btnAddThemeClick(Sender: TObject);
var
  I: Integer;
begin
  i := findTheme(intTostr(cmbThemes.items.Count));
  if i <> -1 then
  begin
    cmbThemes.ItemIndex := i;
  end else
  begin
    cmbThemes.Items.Add(intTostr(cmbThemes.items.Count+1));
    cmbThemes.ItemIndex := cmbThemes.items.Count-1;
  end;

  objectEnabled(btnThemeChange,True);
end;

Open in new window


current code fail to add with same approach i needed
0
i have two tvirtualstringtree in a form i wanted to invalidate them using timers

but i stuck with problems it seems that only 1 VST got invalidated and the other one ignored any idear why ?

i use invalidate with current code within timer

procedure Tform1.Timerval1Timer(Sender: TObject);
{$J+}
Const
iCount: Cardinal = 0;
{$J-}
begin
Inc(iCount);
if (iCount * TTimer(Sender).Interval) > 500 then
begin
xbool := NOT xbool;
iCount := 0;
end;
VDT1.Invalidate;
end;

procedure Tform1.Timerval2Timer(Sender: TObject);
{$J+}
Const
iCount: Cardinal = 0;
{$J-}
begin
Inc(iCount);
if (iCount * TTimer(Sender).Interval) > 500 then
begin
xbool := NOT xbool;
iCount := 0;
end;
VDT2.Invalidate;
end;

Open in new window


issue happens when i use beforecellpaint on each VSt

procedure Tform1.VDT1BeforeCellPaint(Sender: TBaseVirtualTree;
  TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
  CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
var
Data: PUserdataon;
NewRect: TRect;
xOff, yOff: Integer;

begin
GradientFillCanvas(TargetCanvas, clred, clWhite, CellRect, gdHorizontal); // GraphUtil

if not Assigned(Node) then
begin
exit;
end;

Data := vdt1.GetNodeData(Node);

begin
NewRect := CellRect;
NewRect.Left := NewRect.Left + 2;
NewRect.Width := 24;
NewRect.Top := NewRect.Top;
NewRect.Bottom := NewRect.Bottom;
xOff := CellRect.Left + 70;
yOff := CellRect.Top +((30 - TargetCanvas.TextHeight('H')) div 2);
if xbool or (Data.FObject.bool= false) then

Open in new window

0
i have this code to grab node from vst

function form1.lookingTreeView(name: String): PVirtualNode;
var
Node: PVirtualNode;
Data: PUserData;
begin
Result := nil;
Node := VDT1.GetFirst;
while ((Node <> nil) and (Result = nil)) do
begin
Data := VDT1.GetNodeData(Node);
if (Data.FObject.userUid = name) then
begin
Result := Node;
break;
end
else
Node := VDT1.GetNext(Node);
end;
end;

Open in new window


and i use it like so

var
Node: PVirtualNode;
Data: PUserData;
begin
Node := lookingTreeView('123456');
Data := VDT1.GetNodeData(Node);

Open in new window


i want to add this node to another vst list after i find it

lets say my other vst list called VDT2

i want to add the node thet i find from VDT1 To VDT2 and hide it from VDT1

what should i do ?
0
in my previous question i asked for the same question that i am asking now

https://www.experts-exchange.com/questions/28943546/how-do-i-use-on-compare-node-correctly-in-TVirtualStringTree.html

thats my old question. sadly answers did not solve the main issue i have

here is the current code

procedure Tform1.VDT1CompareNodes(Sender: TBaseVirtualTree; Node1, Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer);
var
Data1, Data2: PUserData;
begin
Data1 := VDT1.GetNodeData(Node1);
Data2 := VDT1.GetNodeData(Node2);

      if (not Assigned(Data1)) or (not Assigned(Data2)) then
      begin //
        Result := 0;
        exit;
      end;


      //hand check  less than

      if (Data1.FObject.Userhand < Data2.FObject.Userhand) and (istalkon=True) then
      begin
        Result := -1;
        memo1.Lines.Add('is old date');
      end
      else
      if (Data1.FObject.Userhand < Data2.FObject.Userhand) and (istalkon=False) then
      begin
      Result := 1;
      end else

       // hand check greater than
      if (Data1.FObject.Userhand > Data2.FObject.Userhand) and (istalkon=True) then
      begin
        Result := -1;
        memo1.Lines.Add('is New date');
      end
      else
      if (Data1.FObject.Userhand > Data2.FObject.Userhand) and (istalkon=False) then
      begin
      Result := 1;
      end else

      //hand check  less than

      if (Data2.FObject.Userhand < Data1.FObject.Userhand) and (istalkon=True) then
      begin
        Result

Open in new window

0
i am using following code to send text data that saved inside memory stream
MS := TMemoryStream(OutboundCmds.Objects[I]);
        if MS <> nil then
        begin
          AContext.Connection.IOHandler.LargeStream := true;
          AContext.Connection.IOHandler.Write(MS, 0, true);
        end;
      end;

Open in new window


its sends text data correctly if its in english

but if its in other language like arabic it comes questions marks like this "?????" what could be the issue ?

here is how i add text to memory stream

procedure TConnection.sendData;
var
  I: integer;
  SL: TStringList;
  MS: TMemoryStream;
begin
  MS := TMemoryStream.Create;
  try
      SL := TStringList.Create;
      try
    begin
        SL.Add('مرحبا');
      end;

       if (SL.Count > 0) then
        begin
          SL.SaveToStream(MS);
          MS.Position := 0;
        end;
      finally
        SL.Free;
      end;
  finally
    MS.Free;
  end;

end;

Open in new window

0
I am using Threads programming for the first time.
Can use the below mentioned Private variable 'sysAbort' as done below ?
Can I use sysNum Local Variable as done below ?
(I will be running only one instance of the thread at a time)


  private
    { Private declarations }
    sysAbort:Boolean ;

procedure TForm3.button_StartClick(Sender: TObject);
var
  sysNum:Integer ;
begin
  sysAbort:=False ;
  sysNum:=0 ;
  memo1.lines.add('Starting') ;
  with TThread.CreateAnonymousThread(
    procedure
    var
      MaxValue:Int64 ;
      I: Integer;
      Total: Integer;
    begin
      MaxValue:=1000 ;
      for I := 1 to MaxValue do
      begin
        if sysAbort then  // Can I use thus ?
          break ;
        sysNum:=I ;  // Can I use local variable
        // memo1.lines.Add('Violated  ' + Inttostr(sysNum)) ;  // This works too !
        if (I * 10 mod MaxValue) = 0 then
          TThread.Synchronize (TThread.CurrentThread,
            procedure ()
            begin
              memo1.lines.Add('Progress : ' + Inttostr(I)) ;
            end);

        sleep(10) ;   // just for delay
      end;

      TThread.Synchronize (TThread.CurrentThread,
        procedure ()
        begin
          memo1.lines.Add('End of process : ' + IntToStr(sysNum));
        end);
    end

  ) do
  begin
    OnTerminate := ThreadFinished ;
    Start;
  end;
end;

procedure TForm3.ThreadFinished(Sender: TObject);
begin
  if TThread(Sender).FatalException = nil then begin
    

Open in new window

1
Starting with Angular 5
LVL 12
Starting with Angular 5

Learn the essential features and functions of the popular JavaScript framework for building mobile, desktop and web applications.

i have this function that detect fast click

  function IsFlood:Boolean;
  var
  i, x : integer;
  begin
    Result := False;
    i := trunc(GetTickCount/2);
    x := trunc((i - LastFloodTime)/4);
    Result := False;
    if x < 180 then Result := True;
    LastFloodTime := i;
  end;

Open in new window


this function uses GetTickCount i want to use Tstopwatch instead any one can convert this function to Tstopwatch ?
1
i have this idhttp code that download images to memory stream and save it on disk

i want to convert jpeg images and png to GIF then save them to disk

if (itsimage = 'image/jpeg') or (itsimage = 'image/png') or (itsimage = 'image/gif') then
begin
try
aIdHttp.Get(trim(FURL), aMs);
except
end;
aMs.SaveToFile(path);
end;

try
if aIdHttp.Connected then
aIdHttp.Disconnect;

except // do not care about any errors yet, maybe log them later

end;

Open in new window

1
You can tell I'm a newbie. But everyhthing I've read tells me this should work.

unit AdvertisingAnalysisU;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, pngimage, StdCtrls, jpeg, ExtCtrls, ComCtrls;

type
  TForm19 = class(TForm)
    Button1: TButton;
    Procedure GetAdvertisingSpend;


     private
    { Private declarations }

  public
    { Public declarations }

  end;

var
  Form19: TForm19;

implementation

{$R *.dfm}

Procedure GetAdvertisingSpend;
var a: integer;
begin
  a:=1;
end;
end.


So I get the message unsatisfied forward or external declaration on the GetAdvertisingSpend procedure.
1
i have a server that client connect To .   each client on server have its own mydac TMyConnection. but every time new client connect to server old clients have the new client data base which is wrong step here is my server code

type
  TConnection = class(TIdServerContext)
  private
    // WriteLock: TCriticalSection;
    dbconnect: TMyConnection;

  public
    OutboundCache: TIdThreadSafeStringList;
    Name: String;
    Databasename : string;

    constructor Create(AConnection: TIdTCPConnection; AYarn: TIdYarn;
      AList: TIdContextThreadList = nil); override;
    destructor Destroy; override;


constructor TConnection.Create(AConnection: TIdTCPConnection; AYarn: TIdYarn;
  AList: TIdContextThreadList = nil);
begin
  inherited;
  // WriteLock := TCriticalSection.Create;
  OutboundCache := TIdThreadSafeStringList.Create;
  dbconnect := TMyConnection.Create(nil);
  dbconnect.Pooling := true;
  dbconnect.PoolingOptions.Validate := true;
  dbconnect.Server := 'localhost';
  dbconnect.username := 'root';
  dbconnect.Password := 'password';
  dbconnect.ConnectionTimeout := 0;
  connectionmo.userslq.Connection := dbconnect;
end;

destructor TConnection.Destroy;
var
  Cache: TStringList;
  I: integer;
begin
  // WriteLock.Free;
  if OutboundCache <> nil then
  begin
    Cache := OutboundCache.Lock;
    try
      for I := 0 to Cache.Count - 1 do
        Cache.Objects[I].Free;
    finally
      OutboundCache.Unlock;
    end;
    OutboundCache.Free;
  end;
  inherited;
end;

Open in new window


Server execute



Open in new window

0
i have this code that send data to each client connected where client value equals to something

procedure TConnection.BroadCastTextMessage(const TextMessage: String;
const FromUniqueID: Dword; const FromName: string);
var
  List: TList;
  I, J: integer;
  Connection: TConnection;
  Channel: string;
begin
  List := Server.Contexts.LockList;
  try
    for I := 0 to List.Count - 1 do
    begin
      Connection := TConnection(List.Items[I]);
      if Connection.UniqueID = FromUniqueID then
      begin
        Channel := Connection.Channel;
        for J := 0 to List.Count - 1 do
        begin
          Connection := TConnection(List.Items[J]);
          if (Connection <> Self) and (Connection.Channel= Channel) then
          begin
            try
              Connection.SendCommandWithParams('TEXTMESSAGE',
                FromName + Sep + TextMessage + Sep);
            except
            end;
          end;
        end;
        Exit;
      end;
    end;
  finally
    Server.Contexts.UnlockList;
  end;
end;

Open in new window


this code brodcats  a text to each client connected where this client channle variable equals to sender is this the best way to do  ? also i want to add more stuff like if (Connection <> Self) and (Connection.Channel= Channel)  and connection.otherdata = same data to each client connected should i use self.otherdata then ?
0
is this bad setting in delphi ide ? or some mistake of mine ? my exe application get too long to be able to right click on it and my processor gets to hiegh if  try to move it from folder to another or even right click to copy

this issue happend with each exe project i made with Delphi even empty projects . the Antimalware execute on windows 8 takes to long and high process to verify the exe that maded with delphi

other exe on disk never hang on what could be the issue ?
0

Pascal

Pascal is an influential imperative and procedural programming language, largely (but not exclusively) intended to teach students structured programming and data structuring. Pasca was implemented on a wide range of architectures, from early PCs to mainframes. Pascal derivatives include OOP-based Object Pascal (used in Delphi and Lazarus/Free Pascal). Pascal is a purely procedural language and includes control statements with reserved words, but has many data structuring facilities and other abstractions like type definitions, records, pointers, enumerations, and sets.

Top Experts In
Pascal
<
Monthly
>

No Top Experts for this time period. Answer questions to earn the title!