Sign in Join
Wiki copytemporary

Console Mode Pascal: what changed

Revision 2 to 3. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11## Console-Mode Pascal Programming
22
3-Many of us were writing [[Pascal]] [[Program|programs]] long before [[Graphical User Interface|Graphical User Interfaces]] (GUIs) and [[IDE|Integrated Development Environments (IDEs)]] became fashionable. Many others are beginners at Pascal programming and need to be able to try out the basic tools of the language. Still others need to write [[Command-line interface|console]]- or [[Text User Interface|text-mode]] applications in order to perform complex system control tasks.
3+Many of us were writing [[Pascal]] [[Program|programs]] long before [[Graphical User Interface|Graphical User Interfaces]] (GUIs) and [[IDE|Integrated Development Environments (IDEs)]] became fashionable. Many others are beginners at Pascal programming and need to be able to try out the basic tools of the language. Still others need to write [[Command-line interface|console]]\- or [[Text User Interface|text-mode]] applications in order to perform complex system control tasks.
44
55### Console mode programming without Lazarus
66
7-Even though many prefer to use the [[Lazarus IDE]] to write console mode programs, you can also write them with any text editor and compile them yourself by calling the [[FPC]] [[Compiler|compiler]], e.g. this for a program in example.pas:
8-
9-``` bash
7+Even though many prefer to use the [[Lazarus IDE]] to write console mode programs, you can also write them with any text editor and compile them yourself by calling the [[FPC]] [[Compiler|compiler]], e.g. this for a program in example.pas:
8+```
109fpc example.pas
1110```
1211
13-Also, the text mode *fp* IDE (looks a bit like old [[Turbo Pascal]]) is available. In the next sections we will focus on programming with [[Lazarus]].
12+Also, the text mode _fp_ IDE (looks a bit like old [[Turbo Pascal]]) is available. In the next sections we will focus on programming with [[Lazarus]].
1413
1514### Console mode programming with Lazarus
1615
17-Lazarus provides an ideal environment for learning Pascal, and for developing text-mode programs. All the functionality of the Integrated Development Environment can be used, including the Source Editor with its [[Syntax highlighting|syntax highlighting]], access to the libraries, complex searching and code completion tools, and syntax checking. If you do not want a [[TForm|Form]] with its visual components, you do not need one, but the Lazarus Source Editor is still a great environment for program development. You can compile and run your program during development, without ever leaving the Editor.
16+Lazarus provides an ideal environment for learning Pascal, and for developing text-mode programs. All the functionality of the Integrated Development Environment can be used, including the Source Editor with its [[Syntax highlighting|syntax highlighting]], access to the libraries, complex searching and code completion tools, and syntax checking. If you do not want a [[TForm|Form]] with its visual components, you do not need one, but the Lazarus Source Editor is still a great environment for program development. You can compile and run your program during development, without ever leaving the Editor.
1817
19-To start a console-mode program, go to the Main Menu and select Project -\> New Project and then select either **Program** or **Console Application**. The IDE will not generate all the extra files associated with a full graphic application, and will not open an Object Inspector box, but will open the Source Editor with a skeleton program structure and await your programming input.
18+To start a console-mode program, go to the Main Menu and select Project -> New Project and then select either **Program** or **Console Application**. The IDE will not generate all the extra files associated with a full graphic application, and will not open an Object Inspector box, but will open the Source Editor with a skeleton program structure and await your programming input.
2019
21-> **Note:** Under Windows a GUI application has no console and thus can not **writeln** or **readln**. You will get *File not open* errors. Disable under *Project Options / Compiler Options / Linking / Target specific options / Win32 GUI application* to create a console application. In Lazarus IDE 1.4, this is under *Project(menu) / Project Options / Compiler Options / Config and Target / Target specific options / Win32 GUI application*.
20+![Light bulb](https://upload.wikimedia.org/wikipedia/commons/d/d8/Nuvola_apps_ktip.png) **Note:** Under Windows a GUI application has no console and thus can not **writeln** or **readln**. You will get _File not open_ errors. Disable under _Project Options / Compiler Options / Linking / Target specific options / Win32 GUI application_ to create a console application. In Lazarus IDE 1.4, this is under _Project(menu) / Project Options / Compiler Options / Config and Target / Target specific options / Win32 GUI application_.
2221
23-> **Note:** Lazarus has some functionality for command line programs, such as [[CopyFile|copyfile]]. To use these, add a project requirement for LazUtils, which will not pull in the entire LCL. Then add the relevant unit to your uses clause.
22+![Light bulb](https://upload.wikimedia.org/wikipedia/commons/d/d8/Nuvola_apps_ktip.png) **Note:** Lazarus has some functionality for command line programs, such as [[CopyFile|copyfile]]. To use these, add a project requirement for LazUtils, which will not pull in the entire LCL. Then add the relevant unit to your uses clause.
2423
2524#### Project type: Console Application
2625
27-Selecting this project type in Lazarus creates a program with a new class derived from TCustomApplication. TCustomApplication provides a lot of the common things and makes programming command line utilities easy. For example checking command line options, writing help, checking [[Command line parameters and environment variables|environment variables]] and [[Exceptions|exception]] handling. All [[LCL]] programs use this automatically.
26+Selecting this project type in Lazarus creates a program with a new class derived from TCustomApplication. TCustomApplication provides a lot of the common things and makes programming command line utilities easy. For example checking command line options, writing help, checking [[Command line parameters and environment variables|environment variables]] and [[Exceptions|exception]] handling. All [[LCL]] programs use this automatically.
2827
2928#### Project type: Program
3029
31-As a demonstration, we will write a very minimalistic Pascal program. In the IDE, select the 'Program' project type and let the IDE helps you a bit. For example when you add another [[Unit|unit]] the IDE will automatically add the unitname to the program [[Uses|uses]] section. This behavior is defined in the project options. So you can go between 'Program' and 'Custom Program' at any time.
32-
33-An example for complete beginners:
30+As a demonstration, we will write a very minimalistic Pascal program. In the IDE, select the 'Program' project type and let the IDE helps you a bit. For example when you add another [[Unit|unit]] the IDE will automatically add the unitname to the program [[Uses|uses]] section. This behavior is defined in the project options. So you can go between 'Program' and 'Custom Program' at any time.
3431
35-``` Pascal
32+An example for complete beginners:
33+```
3634program Project1;
37-{$mode objfpc}{$H+}
38-uses
39- {$IFDEF UNIX}{$IFDEF UseCThreads}
40- cthreads,
41- {$ENDIF}{$ENDIF}
42- Classes;
43-begin
44- WriteLn('Hello World!');
45- ReadLn;
46-end.
35+ {$mode objfpc}{$H+}
36+ uses
37+ {$IFDEF UNIX}{$IFDEF UseCThreads}
38+ cthreads,
39+ {$ENDIF}{$ENDIF}
40+ Classes;
41+ begin
42+ WriteLn('Hello World!');
43+ ReadLn;
44+ end.
4745```
4846
4947### Pascal scripts
5048
51-Additionally, it is possible to write scripts that are dynamically compiled by [[InstantFPC]], a cross-platform solution to run (small) Pascal programs as scripts. The shebang
52-
53- #!/usr/bin/env instantfpc
49+Additionally, it is possible to write scripts that are dynamically compiled by [[InstantFPC]], a cross-platform solution to run (small) Pascal programs as scripts. The shebang
50+```
51+#!/usr/bin/env instantfpc
52+```
5453
55-permits to start the script like a stand-alone program.
54+permits to start the script like a stand-alone program.
5655
57-> **Note:** Though it is used to run Pascal scripts, InstantFPC uses regular Object Pascal, not the PascalScript script language. So "**PascalScript**" and **Pascal script** are not the same.
56+![Light bulb](https://upload.wikimedia.org/wikipedia/commons/d/d8/Nuvola_apps_ktip.png) **Note:** Though it is used to run Pascal scripts, InstantFPC uses regular Object Pascal, not the PascalScript script language. So "**PascalScript** " and **Pascal script** are not the same.
5857
5958## Running a Program
6059
6160#### Compile
6261
63-When you have finished your program (or program fragment) you can compile and run it by selecting Run -\> Build (or Quick Compile) from the Main Menu or clicking on the Green (Run) triangle symbol ![](/wiki-images/b/b8/Start.png) in the Button Bar. Any compiler messages (warnings, progress reports or error messages) will appear in the Message Box, and hopefully there will eventually be a message to say
62+When you have finished your program (or program fragment) you can compile and run it by selecting Run -> Build (or Quick Compile) from the Main Menu or clicking on the Green (Run) triangle symbol [![Start.png](/wiki-images/b/b8/Start.png)](</File:Start.png>) in the Button Bar. Any compiler messages (warnings, progress reports or error messages) will appear in the Message Box, and hopefully there will eventually be a message to say
6463
65-'Project "Project1" successfully built.:)'.
64+'Project "Project1" successfully built.:)'.
6665
67-But where is the program??!!
66+But where is the program??!!
6867
69-If you have *not* yet saved the program, then the IDE put it into the *temporary* directory (e.g. /tmp under linux, C:\temp under windows, see Environment Options / Files / Directory for building test projects).
68+If you have _not_ yet saved the program, then the IDE put it into the _temporary_ directory (e.g. /tmp under linux, C:\temp under windows, see Environment Options / Files / Directory for building test projects).
7069
71-If you already saved the project, then the program was created in the same directory, where you saved the project1.lpi file.
70+If you already saved the project, then the program was created in the same directory, where you saved the project1.lpi file.
7271
7372#### Run in Console
7473
75-You can execute the program by going to a console (terminal) window, then use **cd** to change to the directory and typing the name of the program. On Unix/Linux, if it is in the current directory you will have to start with ./ as the program will probably not be found in the PATH.
76-
77-Example for Linux/Unix where a program is stored in /tmp:
74+You can execute the program by going to a console (terminal) window, then use **cd** to change to the directory and typing the name of the program. On Unix/Linux, if it is in the current directory you will have to start with ./ as the program will probably not be found in the PATH.
7875
79-``` bash
76+Example for Linux/Unix where a program is stored in /tmp:
77+```
8078cd /tmp
81-./Project1
79+ ./Project1
8280```
8381
84-However, it can be very inconvenient to keep skipping out of the Lazarus Editor and into a terminal window and back again. Fortunately, there is a mechanism that allows a terminal window to be opened from within the Lazarus environment.
82+However, it can be very inconvenient to keep skipping out of the Lazarus Editor and into a terminal window and back again. Fortunately, there is a mechanism that allows a terminal window to be opened from within the Lazarus environment.
8583
8684#### Run in IDE
8785
88-In internal console: show in the terminal output window.
89-
90-In redirect output.
86+In internal console: show in the terminal output window.
9187
92-From the Main Menu, select Run -\> Run Parameters, then check the box for "Use launching application". The first time you do this and try the Compile/Run sequence, you will probably get a rude message saying:
88+In redirect output.
9389
94-```text
95-"xterm: Can't execvp /usr/share/lazarus//tools/runwait.sh: Permission denied".
90+From the Main Menu, select Run -> Run Parameters, then check the box for "Use launching application". The first time you do this and try the Compile/Run sequence, you will probably get a rude message saying:
9691```
92+"xterm: Can't execvp /usr/share/lazarus//tools/runwait.sh: Permission denied".
93+```
9794
98-If this happens, you need to change the permissions on the appropriate file (for example using chmod +x filename, or using the Windows utility for changing permissions); you might have to do this as root. After this, each time you launch your program, a console box will appear and all your text I/O (readln, writeln etc) will appear in it.
95+If this happens, you need to change the permissions on the appropriate file (for example using chmod +x filename, or using the Windows utility for changing permissions); you might have to do this as root. After this, each time you launch your program, a console box will appear and all your text I/O (readln, writeln etc) will appear in it.
9996
100-After your program has finished execution, a message "Press enter" appears on the screen. Thus any output your program generated will remain on the screen until you have had a chance to read it; after you press 'enter' the console window closes.
97+After your program has finished execution, a message "Press enter" appears on the screen. Thus any output your program generated will remain on the screen until you have had a chance to read it; after you press 'enter' the console window closes.
10198
102-On Linux, if the above message "xterm: Can't execvp /usr/share/lazarus//tools/runwait.sh: Permission denied" does not appear after checking the box for "Use launching application", type `/usr/bin/xterm $(TargetCmdLine)` and check `Use launching application` (xterm is installed on almost all Linux systems).
99+On Linux, if the above message "xterm: Can't execvp /usr/share/lazarus//tools/runwait.sh: Permission denied" does not appear after checking the box for "Use launching application", type `/usr/bin/xterm $(TargetCmdLine)` and check `Use launching application` (xterm is installed on almost all Linux systems).
103100
104-Unfortunately, this method does not allow you to use the integrated debugger.
101+Unfortunately, this method does not allow you to use the integrated debugger.
105102
106103#### Run in IDE with redirected output
107104
108-If you want to see what is written to stdout and want to use the integrated debugger as well, stdout can be redirected to a file with the following code:
109-
110-``` Pascal
105+If you want to see what is written to stdout and want to use the integrated debugger as well, stdout can be redirected to a file with the following code:
106+```
111107uses
112- baseunix;
113-
114-var
115- OutputFile: text;
116-
117-begin
118- Assign(OutputFile, 'Output.txt');
119- if FileExists(Filename) then begin
120- Append(OutputFile);
121- end
122- else begin
123- Rewrite(OutputFile); { open file for writing, destroying contents, if any }
124- end;
125-
126- ResultCode := fpdup(OutputFile, output);
127-
128- if ResultCode < 0 then begin
129- raise Exception.CreateFmt('dup failed: %s', [ResultCode]);
130- end;
131- Close(OutputFile);
132-end.
108+ baseunix;
109+
110+ var
111+ OutputFile: text;
112+
113+ begin
114+ Assign(OutputFile, 'Output.txt');
115+ if FileExists(Filename) then begin
116+ Append(OutputFile);
117+ end
118+ else begin
119+ Rewrite(OutputFile); { open file for writing, destroying contents, if any }
120+ end;
121+
122+ ResultCode := fpdup(OutputFile, output);
123+
124+ if ResultCode < 0 then begin
125+ raise Exception.CreateFmt('dup failed: %s', [ResultCode]);
126+ end;
127+ Close(OutputFile);
128+ end.
133129```
134130
135-Output.txt can then be viewed with 'tail -f output.txt' or viewed with an editor if 'tail' is not available on your [[Operating System|os]].
131+Output.txt can then be viewed with 'tail -f output.txt' or viewed with an editor if 'tail' is not available on your [[Operating System|os]].
136132
137-Alternatively, using Lazarus 0.9.31 or up (on Linux only): In the "View" menu, under "Debug Windows" there is an entry for a "console output" to view stdout
133+Alternatively, using Lazarus 0.9.31 or up (on Linux only): In the "View" menu, under "Debug Windows" there is an entry for a "console output" to view stdout
138134
139135## Unicode (UTF8) output
140136
141-If you want your console mode program to show Unicode ([[UTF-8|UTF8]]) output on Windows Vista and higher (and perhaps on earlier versions, too), you can use the **SetConsoleOutputCP** command to set the console to the UTF8 character set.
142-
143-> **Note:** you will need to make sure the font of the console can show the letters you want to output (e.g. Greek, Cyrillic, Korean).
137+If you want your console mode program to show Unicode ([[UTF-8|UTF8]]) output on Windows Vista and higher (and perhaps on earlier versions, too), you can use the **SetConsoleOutputCP** command to set the console to the UTF8 character set.
144138
145-> **Note:** you will need to include the Windows unit.
139+![Light bulb](https://upload.wikimedia.org/wikipedia/commons/d/d8/Nuvola_apps_ktip.png) **Note:** you will need to make sure the font of the console can show the letters you want to output (e.g. Greek, Cyrillic, Korean).
146140
147-See [[LCL Unicode Support]] for more details on Unicode support in Lazarus and FPC.
141+![Light bulb](https://upload.wikimedia.org/wikipedia/commons/d/d8/Nuvola_apps_ktip.png) **Note:** you will need to include the Windows unit.
148142
149-Example program:
143+See [[LCL Unicode Support]] for more details on Unicode support in Lazarus and FPC.
150144
151-``` Pascal
145+Example program:
146+```
152147program uniconsole;
153-
154-{$mode objfpc}{$H+}
155-{$APPTYPE CONSOLE}
156-
157-uses
158- {$IFDEF UNIX}
159- {$IFDEF UseCThreads}
160- cthreads,
148+
149+ {$mode objfpc}{$H+}
150+ {$APPTYPE CONSOLE}
151+
152+ uses
153+ {$IFDEF UNIX}
154+ {$IFDEF UseCThreads}
155+ cthreads,
156+ {$ENDIF}
157+ {Widestring manager needed for widestring support}
158+ cwstring,
159+ {$ENDIF}
160+ {$IFDEF WINDOWS}
161+ Windows, {for setconsoleoutputcp}
162+ {$ENDIF}
163+ Classes
164+ ;
165+
166+ var
167+ UTF8TestString: string;
168+
169+ begin
170+ {$IFDEF WINDOWS}
171+ SetConsoleOutputCP(CP_UTF8);
161172 {$ENDIF}
162- {Widestring manager needed for widestring support}
163- cwstring,
164- {$ENDIF}
165- {$IFDEF WINDOWS}
166- Windows, {for setconsoleoutputcp}
167- {$ENDIF}
168- Classes
169- ;
173+ UTF8TestString:= 'rosé, водка and ούζο';
174+ writeln ('plain: ' + UTF8TestString);
175+ {Apparently we do not need UTF8ToConsole for this
176+ UTF8ToConsole did not do anything for me in fact.}
177+ end.
178+```
170179
171-var
172-UTF8TestString: string;
180+### Output CJK text in Windows console
173181
174-begin
175-{$IFDEF WINDOWS}
176-SetConsoleOutputCP(CP_UTF8);
177-{$ENDIF}
178-UTF8TestString:= 'rosé, водка and ούζο';
179-writeln ('plain: ' + UTF8TestString);
180-{Apparently we do not need UTF8ToConsole for this
181-UTF8ToConsole did not do anything for me in fact.}
182-end.
182+This example from forum member **Thaddy** shows how to properly setup Windows console to support CJK text.
183183```
184+{$mode delphiunicode}{$H+}
185+ {$codepage utf8}
186+ uses Windows, SysUtils;
187+ var
188+ s3, s1, s2: string;
189+ var
190+ cfi: CONSOLE_FONT_INFOEX;
191+ begin
192+ cfi.cbSize := SizeOf(cfi);
193+ cfi.nFont := 0;
194+ cfi.dwFontSize.X := 0;
195+ cfi.dwFontSize.Y := 20;
196+ cfi.FontFamily := FF_DONTCARE;
197+ cfi.FontWeight := FW_NORMAL;
198+ // two fonts that support Chinese etc.
199+ cfi.Facename := 'NSimSun';
200+ // cfi.FaceName := 'SimSun-extB'; // this is a raster font.
201+
202+ SetTextCodePage(Output, CP_UTF8);
203+ SetConsoleOutputCP(CP_UTF8);
204+ SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), False, @cfi);
205+
206+ s1 := '春夏';
207+ s2 := '秋冬';
208+ s3 := s1+s2;
209+ Writeln('s1=', s1,' s2=', s2, ' s3=', s3);
210+ Readln;
211+ end.
212+```
184213
185214## Examples
186215
187-You can use the Lazarus editor to try out all the examples in the standard Pascal textbooks, or you can write your own. Some of the most useful procedures are those for executing system commands or for running other programs (whether written in Pascal, C or Perl, or shell or batch scripts).
216+You can use the Lazarus editor to try out all the examples in the standard Pascal textbooks, or you can write your own. Some of the most useful procedures are those for executing system commands or for running other programs (whether written in Pascal, C or Perl, or shell or batch scripts).
188217
189218#### Execute shell command
190219
191-Here is an example for a *Custom Program* or *Program*... that is Linux/Unix/macOS specific though:
192-
193-``` Pascal
220+Here is an example for a _Custom Program_ or _Program_... that is Linux/Unix/macOS specific though:
221+```
194222program TryShell;
195-uses
196- Classes, Unix;
197-var
198- S: LongInt;
199-begin
200- S := fpsystem('/bin/ls -la *.p*'); //lists .pp, .pas, .php, .png etc in current directory
201- WriteLn('Program exited with status : ', S)
202-end.
223+ uses
224+ Classes, Unix;
225+ var
226+ S: LongInt;
227+ begin
228+ S := fpsystem('/bin/ls -la *.p*'); //lists .pp, .pas, .php, .png etc in current directory
229+ WriteLn('Program exited with status : ', S)
230+ end.
203231```
204232
205233#### Example: update FPC and Lazarus
206234
207-Rather more complex commands can be executed. For example, if you have already checked out the SVN repositories for FPC and Lazarus (see [[buildfaq]]) you could keep your FPC and Lazarus source files up-to-date by retrieval from the SVN repository with the following sequence of calls:
208-
209-``` Pascal
235+Rather more complex commands can be executed. For example, if you have already checked out the SVN repositories for FPC and Lazarus (see [[buildfaq]]) you could keep your FPC and Lazarus source files up-to-date by retrieval from the SVN repository with the following sequence of calls:
236+```
210237program LazUpdate;
211-uses
212- Classes, Unix;
213-var
214- S: LongInt;
215-begin
216- S := fpsystem('cd /usr/local/src/fpc/devel/fpc ; make clean');
217- S := fpsystem('cd /usr/local/src/fpc/devel/lazarus ; make clean');
218- S := fpsystem('cd /usr/local/src/fpc/devel ; svn update fpc >& ~/cvscheckout.log');
219- S := fpsystem('cd /usr/local/src/fpc/devel ; svn update lazarus >& ~/cvslaz.log' );
220-end.
238+ uses
239+ Classes, Unix;
240+ var
241+ S: LongInt;
242+ begin
243+ S := fpsystem('cd /usr/local/src/fpc/devel/fpc  ; make clean');
244+ S := fpsystem('cd /usr/local/src/fpc/devel/lazarus  ; make clean');
245+ S := fpsystem('cd /usr/local/src/fpc/devel  ; svn update fpc >& ~/cvscheckout.log');
246+ S := fpsystem('cd /usr/local/src/fpc/devel  ; svn update lazarus >& ~/cvslaz.log' );
247+ end.
221248```
222249
223-Note that issuing the command
224-
225-``` Pascal
250+Note that issuing the command
251+```
226252fpsystem('cd /somedirectory');
227253```
228254
229-followed by
230-
231-``` Pascal
255+followed by
256+```
232257fpsystem ('do something in that subdirectory');
233258```
234259
235-does not work, because after each **fpsystem()** [[Function|function]] call the execution of the program returns to the directory it started in; so we need to include multiple statements per line within our calls to shell via **fpsystem()**. \[Rather: it always starts in . \]
236-
237-One does not have to enter every command as a separate line of Pascal; one could create a **bash** script file like this (from [[buildfaq]]):
260+does not work, because after each **fpsystem()** [[Function|function]] call the execution of the program returns to the directory it started in; so we need to include multiple statements per line within our calls to shell via **fpsystem()**. [Rather: it always starts in . ]
238261
239-``` bash
262+One does not have to enter every command as a separate line of Pascal; one could create a **bash** script file like this (from [[buildfaq]]):
263+```
240264#!/bin/sh
241-cd /usr/local/src/fpc/devel
242-cd fpc
243-make clean
244-cd ..
245-cd lazarus
246-make clean
247-cd ..
248-svn up fpc >& ~/cvscheckout.log
249-svn up lazarus >& ~/cvslaz.log
265+ cd /usr/local/src/fpc/devel
266+ cd fpc
267+ make clean
268+ cd ..
269+ cd lazarus
270+ make clean
271+ cd ..
272+ svn up fpc >& ~/cvscheckout.log
273+ svn up lazarus >& ~/cvslaz.log
250274```
251275
252-Name it **updatelaz.sh**, and then instead of using **bash** to execute it directly, call it from a Pascal program thus:
253-
254-``` Pascal
276+Name it **updatelaz.sh** , and then instead of using **bash** to execute it directly, call it from a Pascal program thus:
277+```
255278(* This can be compiled or used as a Pascal script *)
256-program LazUpdate1;
257-uses
258- Classes, Unix;
259-var
260- S: LongInt;
261-begin
262- S := fpsystem('updatelaz.sh')
263-end.
279+ program LazUpdate1;
280+ uses
281+ Classes, Unix;
282+ var
283+ S: LongInt;
284+ begin
285+ S := fpsystem('updatelaz.sh')
286+ end.
264287```
265288
266289## See also
267290
268-- [[Command line parameters and environment variables]]
269-- [[Executing External Programs]]
270-- [[Debugger Console App|Debugging console applications]]
271-- [[InstantFPC]]
291+ * [[Command line parameters and environment variables]]
292+ * [[Executing External Programs]]
293+ * [[Debugger Console App|Debugging console applications]]
294+ * [[InstantFPC]]
272295
273296---
274-*From the Free Pascal wiki, page "Console Mode Pascal", as it stood on 2023-05-02 after a change by Thierrybo, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
297+*From the Free Pascal wiki, page "Console Mode Pascal", as the Internet Archive kept it on 2025-01-22, last changed on 2024-09-22. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history