Print itself: Difference between revisions

From Rosetta Code
Content added Content deleted
No edit summary
Line 7: Line 7:
:* [[Entropy/Narcissist]].
:* [[Entropy/Narcissist]].
<br>
<br>
{{omit from|Delphi}}

=={{header|Batch File}}==
=={{header|Batch File}}==
<lang dos>
<lang dos>

Revision as of 19:27, 26 August 2020

Print itself is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.

Create a program, which prints its source code to the stdout!

Related tasks


Batch File

<lang dos> @echo off for /f "tokens=*" %%s in (%~n0%~x0) do (echo %%s) </lang>

Furor

<lang Furor> 1 argv getfile dup sprint free end </lang>

Go

<lang go>package main

import (

   "fmt"
   "io/ioutil"
   "log"
   "os"
   "path"

)

func main() {

   self := path.Base(os.Args[0]) + ".go"
   bytes, err := ioutil.ReadFile(self)
   if err != nil {
       log.Fatal(err)
   }
   fmt.Print(string(bytes))

}</lang>

Output:

Just the invoking line as remainder is, of course, as above.

$ go run self_print.go

Phix

You can drop the substitute() if you plan to interpret rather than compile it.
It will not work, obviously, if you compile it (say test.exw) to test.exe and then either rename the executable or move it to some directory where there is no test.exw <lang Phix>puts(1,get_text(substitute(command_line()[2],".exe",".exw")))</lang>

Output:
>p test ;; or p -c test
puts(1,get_text(substitute(command_line()[2],".exe",".exw")))

PowerShell

<lang PowerShell> Write-Host $MyInvocation.MyCommand </lang>

Raku

Works with: Rakudo version 2020.05

Not really sure what the point of this task is.

Is it supposed to be a quine? <lang perl6>my &f = {say $^s, $^s.raku;}; f "my \&f = \{say \$^s, \$^s.raku;}; f " </lang>

Or just a program that when executed echoes its source to STDOUT? (Here's probably the simplest valid program that when executed, echoes its source to STDOUT. It is exceptionally short: zero bytes; and when executed echoes zero bytes to STDOUT.)

<lang perl6></lang>

Or are we supposed to demonstrate how to locate the currently executing source code file and incidentally, print it.

<lang perl6>print $*PROGRAM.slurp</lang>

Whatever. Any of these satisfy the rather vague specifications.

REXX

<lang rexx>/*REXX program prints its own multi─line source to the standard output (stdout). */

   do j=1  for sourceline()
   call lineout , sourceline(j)
   end   /*j*/                                  /*stick a fork in it,  we're all done. */</lang>

Ring

<lang ring> fileName = filename() fp = fopen(fileName,"r") ? read(filename()) fclose(fp) </lang>

Output:
fileName = filename()
fp = fopen(fileName,"r")
? read(filename())
fclose(fp)

Wren

<lang ecmascript>import "os" for Process import "io" for File

var args = Process.allArguments System.write(File.read(args[1]))</lang>

Output:

Just the invoking line as remainder is, of course, as above.

$ wren self_print.wren