Modulinos: Difference between revisions
m
→{{header|Wren}}: Minor tidy
m (note security holes around empty argv) |
m (→{{header|Wren}}: Minor tidy) |
||
(8 intermediate revisions by 3 users not shown) | |||
Line 14:
=={{header|11l}}==
<
F meaning_of_life()
Line 20:
:start:
print(‘Main: The meaning of life is ’meaning_of_life())</
<
print(‘Life means ’life:meaning_of_life()‘.’)
print(‘Death means nothing.’)</
=={{header|AppleScript}}==
Line 31:
AppleScript's equivalent of a main() function is a <tt>run</tt> handler, which can be either implicit or explicit:
<
or
<
display dialog "Hello"
end run</
A <tt>run</tt> handler's only executed when the script containing it is explicity ''run'', either from another script or application or as an application in its own right. It's not executed when a script's simply loaded as a library, although it can subsequently be so in the unlikely event of this being desirable. Scripts saved as applications aren't recognised by the "Libraries" system introduced in Mac OS X 10.9, but can be loaded and/or run using the older <tt>load script</tt> and <tt>run script</tt> commands. Script code can tell if it's running in its own application or being executed by an external agent by comparing its file path with that of the agent:
<
if ((path to me) = (path to current application)) then
display dialog "I'm running in my own application."
Line 45:
display dialog "I'm being run from another script or application."
end if
end run</
=={{header|Arturo}}==
Line 51:
===Library===
<
meaningOfLife: function [][
Line 58:
if standalone? ->
print ~"Library: The meaning of life is |meaningOfLife|"</
{{out}}
Line 66:
===Main===
<
print ~"Life means |meaningOfLife|."
print "Death means invisible scary skeletons."</
{{out}}
Line 84:
Example
<
./scriptedmain
Main: The meaning of life is 42
./test
Test: The meaning of life is</
Makefile
<
./scriptedmain
./test
Line 106:
-rm test
-rm scriptedmain.exe
-rm test.exe</
scriptedmain.h
<syntaxhighlight lang
scriptedmain.c
<
int meaning_of_life() {
Line 128:
}
#endif</
test.c
<
#include <stdio.h>
Line 140:
printf("Test: The meaning of life is %d\n", meaning_of_life());
return 0;
}</
=={{header|C++}}==
Line 147:
Example
<
./scriptedmain
Main: The meaning of life is 42
./test
Test: The meaning of life is 42</
Makefile
<
./scriptedmain
./test
Line 169:
-rm test
-rm scriptedmain.exe
-rm test.exe</
scriptedmain.h
<syntaxhighlight lang
scriptedmain.cpp
<
using namespace std;
Line 192:
}
#endif</
test.cpp
<
#include <iostream>
Line 206:
cout << "Test: The meaning of life is " << meaning_of_life() << endl;
return 0;
}</
=={{header|Clojure}}==
Line 212:
scriptedmain.clj:
<
":";exit
Line 224:
(when (.contains (first *command-line-args*) *source-path*)
(apply -main (rest *command-line-args*)))</
test.clj:
<
":";exit
Line 239:
(when (.contains (first *command-line-args*) *source-path*)
(apply -main (rest *command-line-args*)))</
=={{header|CoffeeScript}}==
scriptedmain.coffee:
<
meaningOfLife = () -> 42
Line 252:
console.log "Main: The meaning of life is " + meaningOfLife()
if not module.parent then main()</
test.coffee:
<
sm = require "./scriptedmain"
console.log "Test: The meaning of life is " + sm.meaningOfLife()</
=={{header|Common Lisp}}==
Line 268:
~/.clisprc.lisp
<
(set-dispatch-macro-character #\# #\!
(lambda (stream character n)
(declare (ignore character n))
(read-line stream nil nil t)
nil))</
scriptedmain.lisp
<
#|
exec clisp -q -q $0 $0 ${1+"$@"}
Line 307:
args
:test #'(lambda (x y) (search x y :test #'equalp)))
(main args)))</
test.lisp
<
#|
exec clisp -q -q $0 $0 ${1+"$@"}
Line 318:
(load "scriptedmain.lisp")
(format t "Test: The meaning of life is ~a~%" (meaning-of-life))</
=={{header|D}}==
Line 326:
scriptedmain.d:
<
module scriptedmain;
Line 340:
writeln("Main: The meaning of life is ", meaningOfLife());
}
}</
test.d:
<
import scriptedmain;
Line 353:
writeln("Test: The meaning of life is ", meaningOfLife());
}
}</
Example:
<
Main: The meaning of life is 42
$ ./test.d
Line 366:
$ dmd test.d scriptedmain.d -version=test
$ ./test
Test: The meaning of life is 42</
=={{header|Dart}}==
scriptedmain.dart:
<
#library("scriptedmain");
Line 380:
main() {
print("Main: The meaning of life is ${meaningOfLife()}");
}</
test.dart:
<
#import("scriptedmain.dart", prefix: "scriptedmain");
Line 389:
main() {
print("Test: The meaning of life is ${scriptedmain.meaningOfLife()}");
}</
Example:
<
Main: The meaning of life is 42
$ ./test.dart
Test: The meaning of life is 42</
=={{header|Emacs Lisp}}==
Line 402:
scriptedmain.el
<
;;; Shebang from John Swaby
Line 410:
(defun main ()
(message "Main: The meaning of life is %d" (meaning-of-life)))</
test.el
<
;;; Shebang from John Swaby
Line 422:
(setq load-path (cons default-directory load-path))
(load "scriptedmain.el" nil t)
(message "Test: The meaning of life is %d" (meaning-of-life)))</
=={{header|EMal}}==
{{trans|Wren}}
<syntaxhighlight lang="emal">
^|We have created a module named ModulinosPart.emal.
|^
in Org:RosettaCode
type ModulinosPart
fun meaningOfLife = int by block do return 42 end
fun main = void by block do writeLine("The meaning of life is " + meaningOfLife() + ".") end
if Runtime.direct() do main() end
</syntaxhighlight>
{{out}}
<pre>
emal.exe Org\RosettaCode\ModulinosPart.emal
The meaning of life is 42.
<syntaxhighlight lang="emal">
^|Then we create a new module named Modulinos.emal,
|this imports the previous module.
|^
in Org:RosettaCode
load :ModulinosPart
type Modulinos
fun main = int by List args
writeLine("Who says the meaning of life is " + ModulinosPart.meaningOfLife() + "?")
return 0
end
exit main(Runtime.args)
</syntaxhighlight>
{{out}}
<pre>
emal.exe Org\RosettaCode\Modulinos.emal
Who says the meaning of life is 42?
=={{header|Erlang}}==
Line 428 ⟶ 463:
Makefile:
<
t: scriptedmain.beam test.beam
Line 441 ⟶ 476:
clean:
-rm *.beam</
scriptedmain.erl:
<
-export([meaning_of_life/0, start/0]).
Line 451 ⟶ 486:
start() ->
io:format("Main: The meaning of life is ~w~n", [meaning_of_life()]),
init:stop().</
test.erl:
<
-export([start/0]).
-import(scriptedmain, [meaning_of_life/0]).
Line 460 ⟶ 495:
start() ->
io:format("Test: The meaning of life is ~w~n", [meaning_of_life()]),
init:stop().</
=={{header|F Sharp|F#}}==
Line 474 ⟶ 509:
Example:
<
fsharpc --out:scriptedmain.exe ScriptedMain.fs
fsharpc --out:test.exe ScriptedMain.fs Test.fs
Line 480 ⟶ 515:
Main: The meaning of life is 42
$ mono test.exe
Test: The meaning of life is 42</
Makefile:
<
scriptedmain.exe: ScriptedMain.fs
Line 493 ⟶ 528:
clean:
-rm *.exe</
ScriptedMain.fs:
<
module ScriptedMain =
Line 503 ⟶ 538:
let main =
printfn "Main: The meaning of life is %d" meaningOfLife</
Test.fs:
<
open ScriptedMain
let main =
printfn "Test: The meaning of life is %d" ScriptedMain.meaningOfLife</
=={{header|Factor}}==
Line 518 ⟶ 553:
Example:
<
Main: The meaning of life is 42
$ ./test.factor
Test: The meaning of life is 42</
~/.factor-rc:
<
USING: kernel vocabs.loader parser sequences lexer vocabs.parser ;
Line 532 ⟶ 567:
: include-vocab ( vocab -- ) dup ".factor" append parse-file append use-vocab ;
SYNTAX: INCLUDING: ";" [ include-vocab ] each-token ;</
scriptedmain.factor:
<
USING: io math.parser ;
Line 545 ⟶ 580:
: main ( -- ) meaning-of-life "Main: The meaning of life is " write number>string print ;
MAIN: main</
test.factor:
<
INCLUDING: scriptedmain ;
Line 557 ⟶ 592:
: main ( -- ) meaning-of-life "Test: The meaning of life is " write number>string print ;
MAIN: main</
=={{header|Forth}}==
Line 563 ⟶ 598:
Given this awful running reference:
<
: go ( -- )
." The meaning of life is " Douglas-Adams . cr ;</
The bulk of Forth systems provide a way to generate an executable that enters GO (ar any word) on start.
Line 572 ⟶ 607:
{{works with|SwiftForth|SwiftForth|4.0}}
<
program douglas-adams</
Which creates a file named 'douglas-adams' that you can then run. If this is all in the same file, you can load the file, test parts of it, and then exit (or shell out) to run the executable.
Line 581 ⟶ 616:
{{works with|gforth}}
<
42 constant Douglas-Adams
.( The meaning of life is ) Douglas-Adams . cr bye</
Adding #! as a comment, as gforth does, is trivial. For a means by which this script could distinguish between 'scripted execution' and otherwise, a symlink like 'forthscript' could easily be used, and the zeroth OS argument tested for, but there's no convention.
Line 590 ⟶ 625:
{{works with|gforth}}
<
42 constant Douglas-Adams
Line 598 ⟶ 633:
[THEN]
cr .( Why aren't you running this as a script? It only provides a constant.)</
=={{header|FreeBASIC}}==
{{trans|Ring}}
<
Function meaningoflife() As Byte
Dim As Byte y = 42
Line 615 ⟶ 650:
main()
Sleep
</syntaxhighlight>
▲</lang>
{{out}}
<pre>
Line 628 ⟶ 663:
First create these two files in the 'modulino' directory:
<
package main
Line 639 ⟶ 674:
func libMain() {
fmt.Println("The meaning of life is", MeaningOfLife())
}</
<
package main
func main() {
libMain()
}</
To emulate a modulino:
Line 657 ⟶ 692:
Now create this file in the 'mol' directory:
<
package main
Line 664 ⟶ 699:
func main() {
fmt.Println("The meaning of life is still", MeaningOfLife())
}</
and copy modulino.go to the 'mol' directory. The library can then be used in the 'normal' way:
{{out}}
Line 677 ⟶ 712:
Example:
<
Main: The meaning of life is 42
$ ./Test.groovy
Test: The meaning of life is 42</
ScriptedMain.groovy:
<
class ScriptedMain {
Line 692 ⟶ 727:
println "Main: The meaning of life is " + meaningOfLife
}
}</
Test.groovy:
<
println "Test: The meaning of life is " + ScriptedMain.meaningOfLife</
=={{header|Haskell}}==
Haskell has scripted main, but getting scripted main to work with compiled scripts is tricky.
<
Main: The meaning of life is 42
$ runhaskell test.hs
Line 712 ⟶ 747:
$ ghc -fforce-recomp -o test -main-is Test test.hs scriptedmain.hs
$ ./test
Test: The meaning of life is 42</
scriptedmain.hs
<
-- Compile:
Line 728 ⟶ 763:
main :: IO ()
main = putStrLn $ "Main: The meaning of life is " ++ show meaningOfLife</
test.hs
<
-- Compile:
Line 743 ⟶ 778:
main :: IO ()
main = putStrLn $ "Test: The meaning of life is " ++ show meaningOfLife</
=={{header|Io}}==
Line 749 ⟶ 784:
ScriptedMain.io:
<
ScriptedMain := Object clone
Line 756 ⟶ 791:
if( isLaunchScript,
"Main: The meaning of life is #{ScriptedMain meaningOfLife}" interpolate println
)</
test.io:
<
"Test: The meaning of life is #{ScriptedMain meaningOfLife}" interpolate println</
<
Main: The meaning of life is 42
$ ./test.io
Test: The meaning of life is 42</
=={{header|J}}==
Line 773 ⟶ 808:
modulinos.ijs:
<
meaningOfLife =: 42
Line 788 ⟶ 823:
)
shouldrun 0</
test.j:
<
load 'modulinos.ijs'
Line 798 ⟶ 833:
echo 'Test: The meaning of life is ',": meaningOfLife
exit ''</
Example:
<
Main: The meaning of life is 42
$ ./test.j
Test: The meaning of life is 42</
=={{header|Java}}==
Line 812 ⟶ 847:
ScriptedMain.java
<
public static int meaningOfLife() {
return 42;
Line 820 ⟶ 855:
System.out.println("Main: The meaning of life is " + meaningOfLife());
}
}</
Test.java
<
public static void main(String[] args) {
System.out.println("Test: The meaning of life is " + ScriptedMain.meaningOfLife());
}
}</
=={{header|JavaScript}}==
Line 835 ⟶ 870:
scriptedmain.js
<
function meaningOfLife() { return 42; }
Line 845 ⟶ 880:
}
if (!module.parent) { main(); }</
test.js
<
var sm = require("./scriptedmain");
console.log("Test: The meaning of life is " + sm.meaningOfLife());</
=={{header|Julia}}==
Line 858 ⟶ 893:
<br />
In module file Divisors.jl:
<
using Primes
Line 899 ⟶ 934:
Divisors.interactiveDivisors()
end
</syntaxhighlight>
▲</lang>
In a user file getdivisors.jl:
<
using .Divisors
Line 907 ⟶ 942:
n = 708245926330
println("The proper divisors of $n are ", properdivisors(n))
</syntaxhighlight>
</lang>▼
=={{header|LLVM}}==
LLVM can have scripted main a la C, using the weak attribute.
<
llvm-as scriptedmain.ll
llc scriptedmain.bc
Line 922 ⟶ 957:
gcc -o test test.s scriptedmain.s
./test
Test: The meaning of life is 42</
Makefile
<
EXECUTABLE_TEST=test
Line 947 ⟶ 982:
-rm test.bc
-rm scriptedmain.s
-rm scriptedmain.bc</
scriptedmain.ll
<
declare i32 @printf(i8* noalias nocapture, ...)
Line 965 ⟶ 1,000:
ret i32 0
}</
test.ll
<
declare i32 @printf(i8* noalias nocapture, ...)
Line 981 ⟶ 1,016:
ret i32 0
}</
=={{header|Lua}}==
Line 988 ⟶ 1,023:
scriptedmain.lua
<
function meaningoflife()
Line 1,002 ⟶ 1,037:
else
module(..., package.seeall)
end</
test.lua
<
sm = require("scriptedmain")
print("Test: The meaning of life is " .. sm.meaningoflife())</
=={{header|Make}}==
Example
<
The meaning of life is 42
(Main)
$ make -f test.mf
The meaning of life is 42
(Test)</
scriptedmain.mf
<
meaning-of-life:
Line 1,028 ⟶ 1,063:
scriptedmain: meaning-of-life
@echo "(Main)"
</syntaxhighlight>
</lang>▼
test.mf
<
test:
@make -f scriptedmain.mf meaning-of-life
@echo "(Test)"
</syntaxhighlight>
=={{header|Mathematica}}/{{header|Wolfram Language}}==
scriptedmain.ma
<
MeaningOfLife[] = 42
Line 1,056 ⟶ 1,091:
If[StringMatchQ[Program, ".*scriptedmain.*"],
Print["Main: The meaning of life is " <> ToString[MeaningOfLife[]]]
]</
test.ma:
<
Get["scriptedmain.ma"]
Print["Test: The meaning of life is " <> ToString[MeaningOfLife[]]]</
Example:
<
Main: The meaning of life is 42
$ ./test.ma
Test: The meaning of life is 42</
In Mac and Windows, the output will be surrounded by spurious quotes.
Line 1,075 ⟶ 1,110:
=={{header|Mozart/Oz}}==
Makefile:
<
run: scriptedmain test
Line 1,095 ⟶ 1,130:
-rm *.ozf
-rm *.exe
</syntaxhighlight>
scriptedmain.oz:
<
export
meaningOfLife: MeaningOfLife
Line 1,116 ⟶ 1,151:
end
end
</syntaxhighlight>
test.oz:
<
import
ScriptedMain
Line 1,133 ⟶ 1,168:
end
end
end</
=={{header|newLISP}}==
Line 1,140 ⟶ 1,175:
scriptedmain.lsp
<
(context 'SM)
Line 1,152 ⟶ 1,187:
(if (find "scriptedmain" (main-args 1)) (main))
(context MAIN)</
test.lsp
<
(load "scriptedmain.lsp")
(println (format "Test: The meaning of life is %d" (SM:meaning-of-life)))
(exit)</
=={{header|Nim}}==
Nim provides the predicate <code>isMainModule</code> to use with conditional compilation. Here is an example:
<syntaxhighlight lang="Nim">proc p*() =
## Some exported procedure.
echo "Executing procedure"
# Some code to execute to initialize the module.
echo "Initializing the module"
when isMainModule:
# Some code to execute if the module is run directly, for instance code to test the module.
echo "Running tests"
</syntaxhighlight>
{{out}}
When run directly, the result of execution is:
<pre>Initializing the module
Running tests
If we call “p” from another module, we get:
<pre>Initializing the module
Executing procedure
=={{header|Objective-C}}==
Line 1,166 ⟶ 1,226:
scriptedmain.h:
<
@interface ScriptedMain: Object {}
Line 1,172 ⟶ 1,232:
+ (int)meaningOfLife;
@end</
scriptedmain.m:
<
#import <Foundation/Foundation.h>
Line 1,195 ⟶ 1,255:
return 0;
}</
test.m:
<
#import <Foundation/Foundation.h>
Line 1,210 ⟶ 1,270:
return 0;
}</
<
$ gcc -o test -lobjc -framework foundation test.m scriptedmain.m
$ ./scriptedmain
Main: The meaning of life is 42
$ ./test
Test: The meaning of life is 42</
=={{header|OCaml}}==
Line 1,223 ⟶ 1,283:
scriptedmain.ml
<
let main () =
Line 1,231 ⟶ 1,291:
let () =
if not !Sys.interactive then
main ()</
Invoked as a script:
<
Main: The meaning of life is 42</
Loaded into an ocaml toplevel/utop:
<syntaxhighlight lang="text">$ ocaml
...
# #use "scriptedmain.ml";;
Line 1,247 ⟶ 1,307:
# meaning_of_life;;
- : int = 42
# </
The limit of this technique is "avoiding running something when loading a script interactively". It's not applicable to other uses, like adding an example script to a file normally used as a library, as that code will also fire when users of the library are run.
Line 1,256 ⟶ 1,316:
meaningoflife.m
<
function y = meaningoflife()
Line 1,266 ⟶ 1,326:
endfunction
main();</
test.m
<
printf("Test: The meaning of life is %d", meaningoflife());</
=={{header|Pascal}}==
Line 1,278 ⟶ 1,338:
Makefile:
<
scriptedmain: scriptedmain.pas
Line 1,290 ⟶ 1,350:
-rm scriptedmain
-rm *.o
-rm *.ppu</
scriptedmain.pas:
<
program ScriptedMain;
{$ELSE}
Line 1,311 ⟶ 1,371:
writeln(MeaningOfLife())
{$ENDIF}
end.</
test.pas:
<
uses
ScriptedMain;
Line 1,321 ⟶ 1,381:
write('Test: The meaning of life is: ');
writeln(MeaningOfLife())
end.</
Example:
<
$ ./scriptedmain
Main: The meaning of life is: 42
$ make test
$ ./test
Test: The meaning of life is: 42</
=={{header|Perl}}==
Perl has scripted main. The code inside <tt>unless(caller) { ... }</tt> only runs when <tt>Life.pm</tt> is the main program.
<
# Life.pm
Line 1,349 ⟶ 1,409:
unless(caller) {
print "Main: The meaning of life is " . meaning_of_life() . "\n";
}</
<
# death.pl
Line 1,360 ⟶ 1,420:
print "Life means " . Life::meaning_of_life . ".\n";
print "Death means invisible scary skeletons.\n";</
=={{header|Phix}}==
There is a builtin for this, which can even be asked to skip an arbitrary number of stack frames and that way find out exactly where it was effectively called from.
<!--<
<span style="color: #008080;">without</span> <span style="color: #008080;">js</span> <span style="color: #000080;font-style:italic;">-- (includefile)</span>
<span style="color: #004080;">string</span> <span style="color: #000000;">mori</span> <span style="color: #0000FF;">=</span> <span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">include_file</span><span style="color: #0000FF;">()=</span><span style="color: #000000;">1</span><span style="color: #0000FF;">?</span><span style="color: #008000;">"main"</span><span style="color: #0000FF;">:</span><span style="color: #008000;">"an include"</span><span style="color: #0000FF;">)</span>
<!--</
=={{header|PHP}}==
Line 1,374 ⟶ 1,434:
scriptedmain.php
<
function meaning_of_life() {
return 42;
Line 1,386 ⟶ 1,446:
main($argv);
}
?></
test.php
<
require_once("scriptedmain.php");
echo "Test: The meaning of life is " . meaning_of_life() . "\n";
?></
=={{header|PicoLisp}}==
PicoLisp normally does it the other way round: It calls main from the command line with the '-' syntax if desired. Create an executable file (chmod +x) "life.l":
<
(de meaningOfLife ()
Line 1,404 ⟶ 1,464:
(de lifemain ()
(prinl "Main: The meaning of life is " (meaningOfLife))
(bye) )</
and an executable file (chmod +x) "test.l":
<
(load "life.l")
(prinl "Test: The meaning of life is " (meaningOfLife))
(bye)</
Test:
<pre>$ ./life.l -lifemain
Line 1,422 ⟶ 1,482:
Python has scripted main.
<
# life.py
Line 1,430 ⟶ 1,490:
if __name__ == "__main__":
print("Main: The meaning of life is %s" % meaning_of_life())</
<
# death.py
Line 1,439 ⟶ 1,499:
print("Life means %s." % meaning_of_life())
print("Death means invisible scary skeletons.")</
=={{header|R}}==
A way to check if code is running at "top level" is to check <code>length(sys.frames())</code>. This value will be zero for a file being run with <code>Rscript</code>, the <code>--file=</code> argument, or at the command line, and will be greater than 0 in all other conditions (such as package loading or code being sourced from another file.)
<
meaningOfLife <- function() {
Line 1,458 ⟶ 1,518:
main(args)
q("no")
}</
test.R
<
source("scriptedmain.R")
Line 1,468 ⟶ 1,528:
cat("Test: The meaning of life is", meaningOfLife(), "\n")
q("no")</
=={{header|Racket}}==
scriptedmain.rkt:
<
#lang racket
Line 1,479 ⟶ 1,539:
(define (meaning-of-life) 42)
(module+ main (printf "Main: The meaning of life is ~a\n" (meaning-of-life)))</
test.rkt:
<
#lang racket
(module+ main
(require "scriptedmain.rkt")
(printf "Test: The meaning of life is ~a\n" (meaning-of-life)))</
=={{header|Raku}}==
(formerly Perl 6)
Raku automatically calls MAIN on direct invocation, but this may be a multi dispatch, so a library may have multiple "scripted mains".
<syntaxhighlight lang="raku"
has $.answer = 42;
}
Line 1,502 ⟶ 1,562:
multi MAIN ('methods') {
say ~LUE.^methods;
}</
=={{header|REXX}}==
<
parse source . howInvoked @fn /*query REXX how this pgm got invoked. */
Line 1,522 ⟶ 1,582:
/*────────────────────────────── The main code follows here ... ────────────────────────*/
say
say '(from' @fn"): and away we go ···"</
=={{header|Ring}}==
<
# Project : Modulinos
Line 1,534 ⟶ 1,594:
func main()
see "Main: The meaning of life is " + meaningoflife() + nl
</syntaxhighlight>
Output:
<pre>
Line 1,543 ⟶ 1,603:
Ruby has scripted main.
<
def meaning_of_life
Line 1,551 ⟶ 1,611:
if __FILE__ == $0
puts "Main: The meaning of life is #{meaning_of_life}"
end</
<
require 'life'
puts "Life means #{meaning_of_life}."
puts "Death means invisible scary skeletons."</
=={{header|Rust}}==
Line 1,564 ⟶ 1,624:
Makefile:
<
scriptedmain: scriptedmain.rs
Line 1,577 ⟶ 1,637:
-rm -rf *.dylib
-rm scriptedmain
-rm -rf *.dSYM</
scriptedmain.rs:
<
use std;
Line 1,590 ⟶ 1,650:
fn main() {
std::io::println("Main: The meaning of life is " + core::int::to_str(meaning_of_life(), 10u));
}</
test.rs:
<
use std;
fn main() {
std::io::println("Test: The meaning of life is " + core::int::to_str(scriptedmain::meaning_of_life(), 10u));
}</
Example:
<
$ make test
$ ./scriptedmain
Main: The meaning of life is 42
$ ./test
Test: The meaning of life is 42</
=={{header|SAC}}==
Makefile:
<
scriptedmain: ScriptedMain.sac
Line 1,626 ⟶ 1,686:
-rm libScriptedMainMod.a
-rm scriptedmain
-rm scriptedmain.c</
ScriptedMain.sac:
<
module ScriptedMain;
#endif
Line 1,646 ⟶ 1,706:
return(0);
}
#endif</
test.sac:
<
use Array: all;
use ScriptedMain: all;
Line 1,656 ⟶ 1,716:
printf("Test: The meaning of life is %d\n", meaning_of_life());
return(0);
}</
Example:
<
$ make test
$ ./scriptedmain
Main: The meaning of life is 42
$ ./test
Test: The meaning of life is 42</
=={{header|Scala}}==
Line 1,672 ⟶ 1,732:
===Unix shell script===
This code must be stored as a shell script.
<
exec scala "$0" "$@"
!#
Line 1,682 ⟶ 1,742:
println(s"Use the routine to show that the hailstone sequence for the number: $nr.")
println(collatz.toList)
println(s"It has ${collatz.length} elements.")</
===Windows Command Script===
This code must be stored as a Windows Command Script e.g. Hailstone.cmd
<
@echo off
call scala %0 %*
Line 1,700 ⟶ 1,760:
println(collatz.toList)
println(s"It has ${collatz.length} elements.")
</syntaxhighlight>
{{out}}
<pre>C:\>Hailstone.cmd 42
Line 1,713 ⟶ 1,773:
scriptedmain.scm
<
#|
exec csi -ss $0 ${1+"$@"}
Line 1,737 ⟶ 1,797:
(if (equal? (car (program)) 'compiled)
(main (cdr (argv))))</
test.scm
<
#|
exec csi -ss $0 ${1+"$@"}
Line 1,749 ⟶ 1,809:
(load "scriptedmain.scm")
(display (format "Test: The meaning of life is ~a\n" (meaning-of-life)))
(exit))</
=={{header|Sidef}}==
<
func meaning_of_life {
Line 1,760 ⟶ 1,820:
if (__FILE__ == __MAIN__) {
say "Main: The meaning of life is #{meaning_of_life()}"
}</
<
include Life
say "Test: The meaning of life is #{Life::meaning_of_life()}."</
=={{header|Smalltalk}}==
Line 1,774 ⟶ 1,834:
Example
<
$ ./scriptedmain.st
Line 1,780 ⟶ 1,840:
$ ./test.st
Test: The meaning of life is 42</
package.xml
<
<package>
<name>ScriptedMain</name>
Line 1,790 ⟶ 1,850:
<file>scriptedmain.st</file>
</package>
</packages></
scriptedmain.st
<
"exit"
Line 1,809 ⟶ 1,869:
(((Smalltalk getArgc) > 0) and: [ ((Smalltalk getArgv: 1) endsWith: 'scriptedmain.st') ]) ifTrue: [
main value.
].</
test.st
<
"exit"
Line 1,819 ⟶ 1,879:
PackageLoader fileInPackage: 'ScriptedMain'.
Transcript show: 'Test: The meaning of life is ', ((ScriptedMain meaningOfLife) printString); cr.</
=={{header|Swift}}==
Line 1,827 ⟶ 1,887:
Example
<
mkdir -p bin/
swiftc -D SCRIPTEDMAIN -o bin/ScriptedMain ScriptedMain.swift
Line 1,836 ⟶ 1,896:
Main: The meaning of life is 42
bin/Test
Test: The meaning of life is 42</
Makefile
<
bin/ScriptedMain
bin/Test
Line 1,860 ⟶ 1,920:
-rm *.swiftdoc
-rm *.dylib
</syntaxhighlight>
ScriptedMain.swift
<
public class ScriptedMain {
Line 1,885 ⟶ 1,945:
}
#endif
</syntaxhighlight>
Test.swift
<
import ScriptedMain
Line 1,907 ⟶ 1,967:
}
#endif
</syntaxhighlight>
=={{header|Tcl}}==
<
puts "Directory: [pwd]"
puts "Program: $::argv0"
Line 1,919 ⟶ 1,979:
if {$::argv0 eq [info script]} {
main {*}$::argv
}</
=={{header|UNIX Shell}}==
Line 1,926 ⟶ 1,986:
scriptedmain.sh
<
meaning_of_life() {
Line 1,940 ⟶ 2,000:
then
main
fi</
test.sh
<
path=$(dirname -- "$0")
Line 1,951 ⟶ 2,011:
meaning_of_life
echo "Test: The meaning of life is $?"
</syntaxhighlight>
=={{header|Wren}}==
Line 1,959 ⟶ 2,019:
First we create a module for our modulino:
<
var MeaningOfLife = Fn.new { 42 }
Line 1,969 ⟶ 2,029:
// Check if it's being used as a library or not.
import "os" for Process
if (Process.allArguments[1] == "
main.call()
}</
and run it to make sure it works OK when run directly:
Line 1,980 ⟶ 2,040:
Next we create another module which imports the modulino:
<
import "./
var main = Fn.new {
Line 1,988 ⟶ 2,048:
}
main.call()</
and run this to make sure the modulino's ''main()'' function doesn't run:
Line 2,000 ⟶ 2,060:
On the ZX Spectrum, there is no main function as such, however a saved program can be made to start running from a particular line number by providing the line number as a parameter to save command. If the program is being merged as a module, then it does not run automatically. The following example will save the program in memory so that it starts running from line 500:
<
{{omit from|Ada}}
|