Execute CopyPasta Language: Difference between revisions

Added FreeBASIC
(Added Wren)
(Added FreeBASIC)
 
(6 intermediate revisions by 5 users not shown)
Line 16:
|}
<br>
 
=={{header|11l}}==
{{trans|Python}}
 
<syntaxhighlight lang="11l">:start:
V source = File(:argv[1]).read()
 
V lines = source.split("\n")
 
V clipboard = ‘’
 
V loc = 0
L loc < lines.len
V command = lines[loc].trim(‘ ’)
 
X.try
I (command == ‘Copy’)
clipboard ‘’= lines[loc + 1]
E I (command == ‘CopyFile’)
I (lines[loc + 1] == ‘TheF*ckingCode’)
clipboard ‘’= source
E
V filetext = File(lines[loc + 1]).read()
clipboard ‘’= filetext
E I (command == ‘Duplicate’)
clipboard ‘’= clipboard * ((Int(lines[loc + 1])) - 1)
E I (command == ‘Pasta!’)
print(clipboard)
L.break
E
exit(‘unknown command '’command‘' encountered on line ’(loc + 1))
X.catch
exit(‘error while executing command '’command‘' on line ’(loc + 1))
 
loc += 2</syntaxhighlight>
 
=={{header|C++}}==
{{trans|Nanoquery}}
<langsyntaxhighlight lang="cpp">#include <fstream>
#include <iostream>
#include <sstream>
Line 151 ⟶ 186:
// return in case we never hit a 'Pasta!' statement
return 0;
}</langsyntaxhighlight>
 
The following files were used for testing:
Line 213 ⟶ 248:
usage: ./copypasta [filename.cp]
</pre>
 
=={{header|FreeBASIC}}==
Building on Python and Phix solution
<syntaxhighlight lang="vbnet">' Rosetta Code problem: https://rosettacode.org/wiki/Execute_CopyPasta_Language
' by Jjuanhdez, 05/2024
 
#define isNumeric(s) Iif(Val(s) = 0 And s <> "0", False, True)
 
Const As String prog1_cp = "Copy" & Chr(10) & "Rosetta Code" & Chr(10) & "Duplicate" & Chr(10) & "2" & Chr(10) & "Pasta!" & Chr(10) & "La Vista"
Const As String prog2_cp = "CopyFile" & Chr(10) & "pasta.txt" & Chr(10) & "Duplicate" & Chr(10) & "1" & Chr(10) & "Pasta!"
Const As String prog3_cp = "Copy" & Chr(10) & "Invalid" & Chr(10) & " Duplicate" & Chr(10) & "1" & Chr(10) & "Goto" & Chr(10) & "3" & Chr(10) & "Pasta!"
Const As String prog4_cp = "CopyFile" & Chr(10) & "TheF*ckingCode" & Chr(10) & "Duplicate" & Chr(10) & "2" & Chr(10) & "Pasta!"
Const As String prog5_cp = "Copy" & Chr(10) & "Rosetta Code" & Chr(10) & "Duplicate" & Chr(10) & "A" & Chr(10) & "Pasta!"
Const As String doesntexist_cp = ""
Const As String pasta_txt = "The pasta.txt file."
 
Dim Shared As String prog
Dim Shared As String fake_files(1 To 7)
Dim Shared As String fake_texts(1 To 7)
fake_files(1) = "prog1.cp"
fake_files(2) = "prog2.cp"
fake_files(3) = "prog3.cp"
fake_files(4) = "prog4.cp"
fake_files(5) = "prog5.cp"
fake_files(6) = "doesntexist.cp"
fake_files(7) = "pasta.txt"
 
fake_texts(1) = prog1_cp
fake_texts(2) = prog2_cp
fake_texts(3) = prog3_cp
fake_texts(4) = prog4_cp
fake_texts(5) = prog5_cp
fake_texts(6) = doesntexist_cp
fake_texts(7) = pasta_txt
 
Function GetFileLines(Byval filename As String) As String
Dim As String lines, source, linea
Dim As Integer i = 0, k
For k = Lbound(fake_files) To Ubound(fake_files)
If filename = fake_files(k) Then
source = Iif(Command() = "", fake_texts(k), prog)
lines = ""
While i <= Len(source)
linea = ""
While i <= Len(source) And Mid(source, i, 1) <> Chr(10)
linea &= Mid(source, i, 1)
i += 1
Wend
lines &= Trim(linea) & Chr(10)
i += 1
Wend
Exit For
End If
Next
Return lines
End Function
 
Sub Interpret(Byval filename As String)
Dim As String linea, tmp, cmd, arg
Dim As String pgm = GetFileLines(filename)
Dim As String clipboard = ""
Dim As Integer pc = 1, l = 0
Print "interpret(" & filename & "):"
Do
If pc >= Len(pgm) Then
Print "No Pasta! Sucha mistaka to maka"
Exit Sub
End If
cmd = Trim(Mid(pgm, pc, Instr(pc, pgm, Chr(10)) - pc))
arg = Mid(pgm, pc + Len(cmd) + 1, Instr(pc + Len(cmd) + 1, pgm, Chr(10)) - pc - Len(cmd) - 1)
Select Case cmd
Case "Copy"
clipboard &= arg
l += 4
Case "CopyFile"
Dim As Integer fileNumber = Freefile
If arg = "TheF*ckingCode" Then
Open filename For Input As #fileNumber
Else
Open arg For Input As #fileNumber
If Err > 0 Then Print "Error: Could not open file "; arg
End If
Do While Not Eof(fileNumber)
Line Input #fileNumber, linea
tmp &= linea & Chr(10)
Loop
Close #fileNumber
clipBoard &= tmp
l += 2
Case "Duplicate"
If Not isNumeric(arg) Then
Print "Line " & l & ": wrong number of repetitions."
Exit Do
End If
tmp = ""
For i As Integer = 1 To Val(arg)
tmp &= clipboard
Next
clipboard &= tmp
l += 2
Case "Pasta!"
Print clipboard
Exit Sub
Case ""
pc -= 1
Case Else
Print "Line " & l & ": unknown command """ & cmd & """"
Exit Sub
End Select
pc += Len(cmd) + Len(arg) + 2
Loop
End Sub
 
Sub Main()
Dim As String cad, cl = Command()
Dim As Integer ff = Freefile
 
If cl <> "" Then
If Open(cl For Input As #ff) = 0 Then
While Not Eof(ff)
Line Input #ff, cad
prog &= Trim(cad) & Chr(10)
Wend
Close #ff
Else
Print "Error: Could not open file "; cl
Exit Sub
End If
Interpret(cl)
Else
For i As Integer = Lbound(fake_files) To Ubound(fake_files)-1
Interpret("prog" & (i) & ".cp")
Print
Next
End If
End Sub
 
Main()
Sleep</syntaxhighlight>
{{out}}
<pre>interpret(prog1.cp):
Rosetta CodeRosetta CodeRosetta Code
 
interpret(prog2.cp):
I'm the pasta.txt file.
I'm the pasta.txt file.
 
interpret(prog3.cp):
Line 6: unknown command "Goto"
 
interpret(prog4.cp):
CopyFile
TheF*ckingCode
Duplicate
2
Pasta!
CopyFile
TheF*ckingCode
Duplicate
2
Pasta!
CopyFile
TheF*ckingCode
Duplicate
2
Pasta!
 
interpret(prog5.cp):
Line 4: wrong number of repetitions.
 
interpret(prog6.cp):
Error: Could not open file doesntexist.cp</pre>
 
=={{header|Go}}==
Line 236 ⟶ 447:
 
8. When the program is about to end and the contents of the clipboard have (when appropriate) been printed out, the clipboard should be cleared.
<langsyntaxhighlight lang="go">// copypasta.go
package main
 
Line 325 ⟶ 536:
err = clipboard.WriteAll("") // clear clipboard
check(err)
}</langsyntaxhighlight>
 
{{out}}
Line 379 ⟶ 590:
=={{header|Java}}==
{{trans|Nanoquery}}
<langsyntaxhighlight Javalang="java">import java.io.File;
import java.nio.file.Files;
import java.util.ArrayList;
Line 463 ⟶ 674:
}
}
}</langsyntaxhighlight>
 
The following files were used for testing:
Line 527 ⟶ 738:
 
=={{header|Julia}}==
<langsyntaxhighlight lang="julia">
function interpretCopyPasta()
clipboard = String[]
Line 566 ⟶ 777:
 
interpretCopyPasta()
</langsyntaxhighlight>{{out}}
If run on the following CopyPasta "code" file:
<pre>
Line 608 ⟶ 819:
 
=={{header|Nanoquery}}==
<langsyntaxhighlight Nanoquerylang="nanoquery">// a function to handle fatal errors
def fatal_error(errtext)
println "%" + errtext
Line 661 ⟶ 872:
// increment past the command and the next line
loc += 2
end</langsyntaxhighlight>
 
The following files were used for testing:
Line 723 ⟶ 934:
usage: copypasta.nq [filename.cp]
</pre>
 
=={{header|Nim}}==
<syntaxhighlight lang="nim">import os, strutils
 
type CopyPastaError = object of CatchableError
 
template raiseError(message: string, linenum = 0) =
let prefix = if linenum != 0: "Line $1: ".format(linenum) else: ""
raise newException(CopyPastaError, prefix & message)
 
 
proc copyPasta() =
## Load and execute a program.
 
var clipboard: string
 
if paramCount() != 1:
echo "usage: ", getAppFilename().lastPathPart, " filename.cp"
quit QuitFailure
 
let path = paramStr(1)
let code = try: path.readFile()
except IOError: raiseError("Unable to read file “$1”.".format(path))
 
let lines = code.splitLines()
 
var linenum = 1 # Starting at index one for line number.
while linenum <= lines.len:
let command = lines[linenum - 1].strip()
case command
 
of "Copy":
if linenum == lines.len: raiseError("missing string to copy.", linenum)
clipboard.add lines[linenum]
 
of "CopyFile":
if linenum == lines.len: raiseError("missing file to copy from.", linenum)
let fpath = lines[linenum]
if fpath == "TheF*ckingCode":
clipboard.add code
else:
let text = try: fpath.readFile()
except IOError: raiseError("unable to read file “$1”.".format(fpath), linenum)
clipboard.add text
 
of "Duplicate":
if linenum == lines.len: raiseError("missing number of repetitions.", linenum)
let n = try: lines[linenum].parseInt()
except: raiseError("wrong number of repetitions.", linenum + 1)
clipboard.add repeat(clipboard, n)
 
of "Pasta!":
stdout.write clipboard
break
 
of "": # Empty mine: skip.
inc linenum
continue
 
else:
raiseError("unknown command “$1”.".format(command), linenum)
 
inc linenum, 2
 
try:
copyPasta()
except CopyPastaError:
quit getCurrentExceptionMsg(), QuitFailure</syntaxhighlight>
 
{{out}}
<strong>File “prog1.cp”:</strong>
<pre>Copy
Rosetta Code
Duplicate
2
Pasta!</pre>
Result:
<pre>Rosetta CodeRosetta CodeRosetta Code</pre>
<strong>File “prog2.cp”:</strong>
<pre>CopyFile
pasta.txt
Duplicate
1
Pasta!</pre>
Result:
<pre>I'm the pasta.txt file.
I'm the pasta.txt file.</pre>
<strong>File “prog3.cp”:</strong>
<pre>Copy
Invalid
Duplicate
1
 
Goto
3
Pasta!</pre>
Result:
<pre>Line 6: unknown command “Goto”.</pre>
<strong>File “prog4.cp”:</strong>
<pre>CopyFile
TheF*ckingCode
Pasta!</pre>
Result:
<pre>CopyFile
TheF*ckingCode
Pasta!</pre>
<strong>File “prog5.cp”:</strong>
<pre>Copy
Rosetta code
Duplicate
A
Pasta!</pre>
Result:
<pre>Line 4: wrong number of repetitions.</pre>
 
=={{header|Perl}}==
<langsyntaxhighlight lang="perl">use strict;
use warnings;
use feature 'say';
Line 760 ⟶ 1,085:
}
 
unlink 'pasta.txt';</langsyntaxhighlight>
{{out}}
<pre>Rosetta Code
Line 778 ⟶ 1,103:
If run without command-line parameters it fakes four runs.<br>
Assumes if clipboard is "hello ", Duplicate 2 should leave it as "hello hello hello ".
<!--<syntaxhighlight lang="phix">(phixonline)-->
<lang Phix>constant prog1_cp = """
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
Copy
<span style="color: #008080;">constant</span> <span style="color: #000000;">prog1_cp</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"""
Rosetta Code
Copy
Duplicate
Rosetta Code
2
Duplicate
Pasta!
2
La Vista
Pasta!
""",
La Vista
prog2_cp = """
"""</span><span style="color: #0000FF;">,</span>
CopyFile
<span style="color: #000000;">prog2_cp</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"""
pasta.txt
CopyFile
Duplicate
pasta.txt
1
Duplicate
Pasta!
1
""",
Pasta!
prog3_cp = """
"""</span><span style="color: #0000FF;">,</span>
Copy
<span style="color: #000000;">prog3_cp</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"""
Invalid
Copy
Duplicate
Invalid
1
Duplicate
 
1
Goto
3
Goto
Pasta!
3
""",
Pasta!
pasta_txt = """
"""</span><span style="color: #0000FF;">,</span>
I'm the pasta.txt file.
<span style="color: #000000;">pasta_txt</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"""
""",
I'm the pasta.txt file.
fake_files = {"prog1.cp","prog2.cp","prog3.cp","pasta.txt"},
"""</span><span style="color: #0000FF;">,</span>
fake_texts = { prog1_cp , prog2_cp , prog3_cp , pasta_txt }
<span style="color: #000000;">fake_files</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">"prog1.cp"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"prog2.cp"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"prog3.cp"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"pasta.txt"</span><span style="color: #0000FF;">},</span>
 
<span style="color: #000000;">fake_texts</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span> <span style="color: #000000;">prog1_cp</span> <span style="color: #0000FF;">,</span> <span style="color: #000000;">prog2_cp</span> <span style="color: #0000FF;">,</span> <span style="color: #000000;">prog3_cp</span> <span style="color: #0000FF;">,</span> <span style="color: #000000;">pasta_txt</span> <span style="color: #0000FF;">}</span>
function get_file_lines(string filename)
sequence lines
<span style="color: #008080;">function</span> <span style="color: #000000;">get_file_lines</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span> <span style="color: #000000;">filename</span><span style="color: #0000FF;">)</span>
integer k = find(filename,fake_files)
<span style="color: #004080;">sequence</span> <span style="color: #000000;">lines</span>
if k then
<span style="color: #004080;">integer</span> <span style="color: #000000;">k</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">(</span><span style="color: #000000;">filename</span><span style="color: #0000FF;">,</span><span style="color: #000000;">fake_files</span><span style="color: #0000FF;">)</span>
lines = split(fake_texts[k],"\n")
<span style="color: #008080;">if</span> <span style="color: #000000;">k</span> <span style="color: #008080;">then</span>
elsif get_file_type(filename)!=FILETYPE_FILE then
<span style="color: #000000;">lines</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">split</span><span style="color: #0000FF;">(</span><span style="color: #000000;">fake_texts</span><span style="color: #0000FF;">[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">],</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">,</span><span style="color: #004600;">false</span><span style="color: #0000FF;">)</span>
crash("file not found:%s",{filename})
<span style="color: #008080;">elsif</span> <span style="color: #7060A8;">platform</span><span style="color: #0000FF;">()=</span><span style="color: #004600;">JS</span>
else
<span style="color: #008080;">or</span> <span style="color: #7060A8;">get_file_type</span><span style="color: #0000FF;">(</span><span style="color: #000000;">filename</span><span style="color: #0000FF;">)!=</span><span style="color: #004600;">FILETYPE_FILE</span> <span style="color: #008080;">then</span>
lines = get_text(filename,GT_LF_STRIPPED)
<span style="color: #7060A8;">crash</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"file not found:%s"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">filename</span><span style="color: #0000FF;">})</span>
end if
<span style="color: #008080;">else</span>
return lines
<span style="color: #000000;">lines</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">get_text</span><span style="color: #0000FF;">(</span><span style="color: #000000;">filename</span><span style="color: #0000FF;">,</span><span style="color: #004600;">GT_LF_STRIPPED</span><span style="color: #0000FF;">)</span>
end function
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
 
<span style="color: #008080;">return</span> <span style="color: #000000;">lines</span>
procedure interpret(string filename)
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
printf(1,"\ninterpret(%s):\n",{filename})
sequence pgm = get_file_lines(filename)&{""}
<span style="color: #008080;">procedure</span> <span style="color: #000000;">interpret</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span> <span style="color: #000000;">filename</span><span style="color: #0000FF;">)</span>
string clipboard = ""
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\ninterpret(%s):\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">filename</span><span style="color: #0000FF;">})</span>
integer pc = 1
<span style="color: #004080;">sequence</span> <span style="color: #000000;">pgm</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">get_file_lines</span><span style="color: #0000FF;">(</span><span style="color: #000000;">filename</span><span style="color: #0000FF;">)&{</span><span style="color: #008000;">""</span><span style="color: #0000FF;">}</span>
while true do
<span style="color: #004080;">string</span> <span style="color: #000000;">clipboard</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">""</span>
if pc>=length(pgm) then crash("No Pasta! Sucha mistaka to maka") end if
<span style="color: #004080;">integer</span> <span style="color: #000000;">pc</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span>
string cmd = trim(pgm[pc]), arg = pgm[pc+1]
<span style="color: #008080;">while</span> <span style="color: #004600;">true</span> <span style="color: #008080;">do</span>
switch cmd do
<span style="color: #008080;">if</span> <span style="color: #000000;">pc</span><span style="color: #0000FF;">>=</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">pgm</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span> <span style="color: #7060A8;">crash</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"No Pasta! Sucha mistaka to maka"</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
case "Copy": clipboard &= arg&"\n"
<span style="color: #004080;">string</span> <span style="color: #000000;">cmd</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">trim</span><span style="color: #0000FF;">(</span><span style="color: #000000;">pgm</span><span style="color: #0000FF;">[</span><span style="color: #000000;">pc</span><span style="color: #0000FF;">]),</span> <span style="color: #000000;">arg</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">pgm</span><span style="color: #0000FF;">[</span><span style="color: #000000;">pc</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span>
case "CopyFile": clipboard &= join(iff(arg="TheF*ckingCode"?pgm:get_file_lines(arg)),"\n")
<span style="color: #008080;">switch</span> <span style="color: #000000;">cmd</span> <span style="color: #008080;">do</span>
case "Duplicate": clipboard &= join(repeat(clipboard,to_integer(arg)),"")
<span style="color: #008080;">case</span> <span style="color: #008000;">"Copy"</span><span style="color: #0000FF;">:</span> <span style="color: #000000;">clipboard</span> <span style="color: #0000FF;">&=</span> <span style="color: #000000;">arg</span><span style="color: #0000FF;">&</span><span style="color: #008000;">"\n"</span>
case "Pasta!": puts(1,clipboard); return
<span style="color: #008080;">case</span> <span style="color: #008000;">"CopyFile"</span><span style="color: #0000FF;">:</span> <span style="color: #000000;">clipboard</span> <span style="color: #0000FF;">&=</span> <span style="color: #7060A8;">join</span><span style="color: #0000FF;">(</span><span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #000000;">arg</span><span style="color: #0000FF;">=</span><span style="color: #008000;">"TheF*ckingCode"</span><span style="color: #0000FF;">?</span><span style="color: #000000;">pgm</span><span style="color: #0000FF;">:</span><span style="color: #000000;">get_file_lines</span><span style="color: #0000FF;">(</span><span style="color: #000000;">arg</span><span style="color: #0000FF;">)),</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">)</span>
case "": pc -= 1; break -- (skip blank lines [w/o arg])
<span style="color: #008080;">case</span> <span style="color: #008000;">"Duplicate"</span><span style="color: #0000FF;">:</span> <span style="color: #000000;">clipboard</span> <span style="color: #0000FF;">&=</span> <span style="color: #7060A8;">join</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #000000;">clipboard</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">to_integer</span><span style="color: #0000FF;">(</span><span style="color: #000000;">arg</span><span style="color: #0000FF;">)),</span><span style="color: #008000;">""</span><span style="color: #0000FF;">)</span>
else crash("unknown command: %s on line %d",{cmd,pc})
<span style="color: #008080;">case</span> <span style="color: #008000;">"Pasta!"</span><span style="color: #0000FF;">:</span> <span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">clipboard</span><span style="color: #0000FF;">);</span> <span style="color: #008080;">return</span>
end switch
<span style="color: #008080;">case</span> <span style="color: #008000;">""</span><span style="color: #0000FF;">:</span> <span style="color: #000000;">pc</span> <span style="color: #0000FF;">-=</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">;</span> <span style="color: #008080;">break</span> <span style="color: #000080;font-style:italic;">-- (skip blank lines [w/o arg])</span>
pc += 2
<span style="color: #008080;">else</span> <span style="color: #7060A8;">crash</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"unknown command: %s on line %d"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">cmd</span><span style="color: #0000FF;">,</span><span style="color: #000000;">pc</span><span style="color: #0000FF;">})</span>
end while
<span style="color: #008080;">end</span> <span style="color: #008080;">switch</span>
end procedure
<span style="color: #000000;">pc</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">2</span>
 
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
procedure main()
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
sequence cl = command_line()
if length(cl)=2 then
<span style="color: #008080;">procedure</span> <span style="color: #000000;">main</span><span style="color: #0000FF;">()</span>
for i=1 to 4 do
<span style="color: #004080;">sequence</span> <span style="color: #000000;">cl</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">command_line</span><span style="color: #0000FF;">()</span>
try
<span style="color: #008080;">if</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cl</span><span style="color: #0000FF;">)=</span><span style="color: #000000;">2</span> <span style="color: #008080;">then</span>
interpret(sprintf("prog%d.cp",i))
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">4</span> <span style="color: #008080;">do</span>
catch e
<span style="color: ?e[E_USER]#008080;">try</span>
<span style="color: #000000;">interpret</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"prog%d.cp"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">i</span><span style="color: #0000FF;">))</span>
end try
<span style="color: #008080;">catch</span> <span style="color: #000000;">e</span>
end for
<span style="color: #0000FF;">?</span><span style="color: #000000;">e</span><span style="color: #0000FF;">[</span><span style="color: #004600;">E_USER</span><span style="color: #0000FF;">]</span>
elsif length(cl)=3 then
<span style="color: #008080;">end</span> <span style="color: #008080;">try</span>
interpret(cl[3])
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
else
<span style="color: #008080;">elsif</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cl</span><span style="color: #0000FF;">)=</span><span style="color: #000000;">3</span> <span style="color: #008080;">then</span>
crash("usage: CopyPasta filename")
<span style="color: #000000;">interpret</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cl</span><span style="color: #0000FF;">[</span><span style="color: #000000;">3</span><span style="color: #0000FF;">])</span>
end if
<span style="color: #008080;">else</span>
end procedure
<span style="color: #7060A8;">crash</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"usage: CopyPasta filename"</span><span style="color: #0000FF;">)</span>
main()</lang>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
<span style="color: #000000;">main</span><span style="color: #0000FF;">()</span>
<!--</syntaxhighlight>-->
{{out}}
<pre>
Line 879 ⟶ 1,208:
=={{header|Python}}==
{{trans|Nanoquery}}
<langsyntaxhighlight Pythonlang="python">import sys
 
# a function to handle fatal errors
Line 929 ⟶ 1,258:
# increment past the command and the next line
loc += 2
</syntaxhighlight>
</lang>
 
The following files were used for testing:
Line 994 ⟶ 1,323:
=={{header|Raku}}==
(formerly Perl 6)
<syntaxhighlight lang="raku" perl6line>sub CopyPasta ($code) {
my @code = $code.split("\n")>>.trim.grep: *.so;
return "Program never ends!" unless grep { $_ eq 'Pasta!' }, @code;
Line 1,022 ⟶ 1,351:
"Copy\nRosetta Code\nDuplicate\n2\n\nPasta";
 
unlink 'pasta.txt';</langsyntaxhighlight>
{{out}}
<pre>Rosetta Code
Line 1,038 ⟶ 1,367:
=={{header|Wren}}==
{{trans|Go}}
<langsyntaxhighlight ecmascriptlang="wren">import "os" for Platform, Process
import "io" for File
 
Line 1,091 ⟶ 1,420:
}
var s = File.read(args[0])
interpret.call(s)</langsyntaxhighlight>
 
{{out}}
Line 1,099 ⟶ 1,428:
 
=={{header|zkl}}==
<langsyntaxhighlight lang="zkl">var clipBoard=Data(), srcNm=vm.arglist[0];
pasta:=File(srcNm).read().howza(11); // zkl pastaprog.cp, stripped lines
foreach line in (pasta){
Line 1,130 ⟶ 1,459:
}catch(TheEnd){ error(w,"Error: End of file: ") }
catch{ error(w,wantInt and "Not an int: " or "Error: ") }
}</langsyntaxhighlight>
Input programs:
<pre style="height:15ex">
2,169

edits