Changeset 14885
- Timestamp:
- 12/13/06 11:12:45 (2 years ago)
- Location:
- misc/runpugs
- Files:
-
- 9 added
- 13 modified
-
README (modified) (3 diffs)
-
TODO (modified) (1 diff)
-
bin/termdispatcher2.pl (modified) (2 diffs)
-
bin/termserv2.pl (modified) (2 diffs)
-
cgi-bin/runpugs (modified) (8 diffs)
-
cgi-bin/runpugs3 (modified) (3 diffs)
-
cgi-perl (added)
-
cgi-perl/runpugs (added)
-
cgi-perl/test.pl (added)
-
data/runpugs.html (modified) (5 diffs)
-
data/runpugs2.html (modified) (2 diffs)
-
data/runpugs_async.html (added)
-
htdocs/runpugs/index.html (modified) (4 diffs)
-
htdocs/runpugs/mp.html (added)
-
lib/Web/Terminal/Dispatcher.pm (modified) (3 diffs)
-
lib/Web/Terminal/Server.pm (modified) (12 diffs)
-
lib/Web/Terminal/Server/Session.pm (modified) (10 diffs)
-
lib/Web/Terminal/Settings.pm (modified) (3 diffs)
-
lib/startup.pl (added)
-
perl (added)
-
perl/runpugs.pl (added)
-
perl/test.pl (added)
Legend:
- Unmodified
- Added
- Removed
-
misc/runpugs/README
r14299 r14885 1 1 ============================================================================== 2 2006/1 0/12 Release of version 0.1.0 of runpugs/WebTerminal2 2006/12/12 Release of version 0.2.0 of runpugs/WebTerminal 3 3 ============================================================================== 4 4 5 5 NAME 6 6 runpugs: a web teminal for interactive pugs 7 Web Terminal: library for building a web terminal for interactive shells7 Web/Terminal: library for building a web terminal for interactive shells 8 8 9 9 INSTALLATION … … 11 11 (e.g. ~/apache on feather, or /var/www elsewhere) 12 12 Rename html folder if required (e.g. htdocs -> html or public_html) 13 * To run, simply point your browser at it. To avoid a wait, you might start 14 * the terminal server script (bin/termserv.pl) manually. If you don't, the cgi script will take care of it, but it takes a bit longer. 13 * Start the terminal server script (bin/termserv2.pl) 14 * To run, simply point your browser to /cgi-bin/runpugs (stable CGI 15 version) or just /runpugs/ (unstable version with asynchronous 16 JavaScript interface, running under mod_perl) 15 17 16 18 DESCRIPTION 17 19 runpugs has two main components: 18 20 -a cgi script (cgi-bin/runpugs) which uses an html template 19 (data/runpugs.html). The latter calls the runpugs.c cstylesheet from21 (data/runpugs.html). The latter calls the runpugs.css stylesheet from 20 22 htdocs/runpugs.css 21 -a server (bin/termserv .pl) which handles the interactive pugs sessions and communicates with23 -a server (bin/termserv2.pl) which handles the interactive pugs sessions and communicates with 22 24 the cgi script. The pugs sessions stay alive for some time (currently 10') if 23 25 left inactive. 24 26 25 The underlying library, WebTerminal, can in principle be used for any 26 interactive shell, not just pugs. But I'll have to do some refactoring and 27 cleaning-up first. Then we can have Python :-) 28 See the (currently non-exisiting) POD for more info. 27 The unstable version has some AJAX-like goodness and runs under mod_perl. 28 The entrypoint is /htdocs/runpugs/index.html, which calls /perl/runpugs.pl 29 30 The underlying library, Web/Terminal, can in principle be used for any 31 interactive shell, not just pugs. So we could have runpython :-) 32 See the POD for more info. 29 33 30 34 AUTHOR … … 40 44 ============================================================================== 41 45 42 CHANGES IN VERSION 0.1.0 43 none (initial version) 46 CHANGES IN VERSION 0.2.0 47 -Web/Terminal replaces the original WebTerminal modules. This 48 implementation is much more generic and configurable. 49 -The user interface is much improved, esp. in the unstable version. 44 50 45 51 ============================================================================== -
misc/runpugs/TODO
r14299 r14885 1 runpugs version 0. 1.0 TODO:1 runpugs version 0.2.0 TODO: 2 2 3 2006/1 0/123 2006/12/06 4 4 * Unicode: hack Net::Telnet so it handles Unicode 5 * Refactor to make more generic 6 -prompt handling should be in cgi-bin/runpugs, not in Dispatcher.pm 7 -Various configuration variables should be in a Config.pm module, 8 and be overriden from the scripts. 9 -let Dispatcher::send() return reply and prompt separately 10 * add POD 5 * Improve POD 11 6 * Add proper copyright & licensing info, in particular to Msg.pm 12 * use async JavaScript for front-end? cfr. tryruby.hobix.com 7 * Put more functionality in JS (clear, timeout, history) 8 * Use true AJAX for front-end (prototype.js) 9 * Convert to Perl: this is a nice long-term goal. 10 Perl 5 Modules to be ported: 11 - IO::Pty (xs based) 12 - Proc::Daemon 13 - A stripped-down Net::Telnet, purely to manage communication via IO::Pty 14 - YAML::Syck (xs based) 15 - The Perl 6 equivalents of POSIX, Errno, IO::Select, Carp 16 Of course we can use the Perl 5 implementations for the time being. 17 * Test mod_perl; tailor code for mod_perl? -
misc/runpugs/bin/termdispatcher2.pl
r14512 r14885 8 8 use Web::Terminal::Settings; 9 9 use Web::Terminal::Dispatcher; 10 $Web::Terminal::Settings::port=2058;10 #$Web::Terminal::Settings::port=2058; 11 11 12 12 … … 21 21 my $ip="127.0.0.1"; 22 22 (my $reply,my $prompt,my $histref) = 23 &Web::Terminal::Dispatcher::send($id,$ip,0, 0,$cmd);23 &Web::Terminal::Dispatcher::send($id,$ip,0,1,$cmd); 24 24 print $reply; 25 25 print "\nHistory\n"; -
misc/runpugs/bin/termserv2.pl
r14374 r14885 1 1 #!/usr/bin/perl 2 use strict; 3 use warnings; 2 4 BEGIN { 3 5 $ENV{PERLIO}= ":utf8"; … … 10 12 use Web::Terminal::Server; 11 13 use Web::Terminal::Settings; 12 $Web::Terminal::Settings::port=2058;14 #$Web::Terminal::Settings::port=2058; 13 15 $ENV{PUGS_SAFEMODE}=1; 16 my $v=1-$Web::Terminal::Settings::daemon; 17 print "Starting server\n" if $v; 14 18 &Web::Terminal::Server::run(); 15 19 -
misc/runpugs/cgi-bin/runpugs
r14850 r14885 21 21 use utf8; 22 22 use lib '../lib/'; 23 #use WebTerminal::Settings;24 use Web Terminal::Dispatcher;25 23 use Web::Terminal::Settings; 24 use Web::Terminal::Dispatcher; 25 #$Web::Terminal::Settings::port=2058; 26 26 #push (@INC, "$wwwpath$htmlpath$project"); 27 27 … … 30 30 if ($MAX_SIZE_UPLOAD) { $CGI::POST_MAX=1024 * $MAX_SIZE_UPLOAD; } 31 31 use CGI::Carp qw(fatalsToBrowser); 32 33 CGI::nph(); # Treat script as a non-parsed-header script 32 use HTML::Entities; 33 34 #CGI::nph(); # Treat script as a non-parsed-header script 34 35 $ENV{PATH} = ""; # no PATH should be needed 35 36 $ENV{SAFE_MODE}=1; … … 38 39 39 40 my $sessionid=$query->param("sessionid"); 40 my $motd=""; 41 42 my $motd=''; 41 43 if (not $sessionid) { 42 44 my $nid=crypt(rand(),'WV'); … … 45 47 my $now=time()-1159056000; # 36 year, 275 days offset 46 48 $sessionid=$nid.$now; 47 48 49 $motd=' 49 <p class="warning">Please test the <em>development version</em> of <tt>runpugs</tt>: try the <a 50 href="http://feather.perl6.nl:8080/runpugs/">interactive session</a> 51 with <em>command history</em> or <a 52 href="http://feather.perl6.nl:8080/cgi-bin/runpugs2?ia=0">run a full Perl 6 script</a>.</p> 50 <p class="warning">Please test the <em><a 51 href="http://feather.perl6.nl:8080/runpugs/">development version</a></em> of 52 <tt>runpugs</tt>, now with AJAX and mod_perl.</p> 53 53 '; 54 #or <a 55 #href="http://feather.perl6.nl:8080/cgi-bin/runpugs2?ia=0">run a full Perl 6 56 #script</a>.</p> 57 #'; 58 54 59 } 55 60 … … 68 73 #$ip='127.'.int(rand(100)).'.'.int(rand(100)).'.'.int(rand(100)); 69 74 #} 75 my $prompt=$Web::Terminal::Settings::prompt; 76 my $allinone=1; 70 77 ######### MAIN SITEMANAGER PROGRAM ################### 71 78 72 79 if ( $query->param()) { # an action has been chosen 73 my $cmd=$query->param("cmd"); 80 81 my $cmd=''; 82 if ($allinone==1) { 83 $cmd=$query->param("cmd"); 84 my @cmdlines=split("\n",$cmd); 85 for my $cmdline (reverse @cmdlines) { 86 $cmdline=~/^\s*$/ && next; 87 $cmdline=~/$Web::Terminal::Settings::prompt_pattern/ 88 && do { 89 $cmd=$cmdline; 90 $cmd=~s/$Web::Terminal::Settings::prompt_pattern//; 91 chomp $cmd; 92 last; 93 }; 94 } 95 } else { 96 $cmd=$query->param("cmdline"); 97 } 74 98 my $action = $query->param("action")||'runpugs'; 75 99 if ($action =~ /^(\w+)$/) { … … 101 125 my $sessionid=shift; 102 126 my $ip=shift; 103 my $reply='pugs> ';104 my $testing=$query->param('testing')||1;105 127 my $dev=$query->param('reldev')||0; 106 128 $dev=$dev*1; 107 if (not $testing) {108 $reply = "Sorry, runpugs is not available at the moment.";109 } else {110 $cmd=~s/^.+?pugs([\>\.])/pugs$1/s;111 #NO UNICODE!112 # $cmd=tr/\0-\x{10ffff}/\0-\xff_/;113 if ($cmd=~/clear/) {114 $cmd='';115 } elsif ($cmd!~/^\p{IsASCII}*$/) {116 $cmd='';117 $reply = "Sorry, Unicode is not yet supported.\npugs> ";118 } else {119 if ($cmd=~/>\s+(\:*help)\b/) {120 $cmd=~s/$1/:h/;121 } elsif ($cmd=~/>\s+(\:*(quit|bye))\b/) {122 $cmd=~s/$1/:q/;123 }124 $reply = &WebTerminal::Dispatcher::send($sessionid,$ip,$dev,$cmd);125 $reply="\n".$reply;126 }127 }128 #$reply.="\n$ip\n$sessionid\n";129 129 my $devc=''; 130 130 my $relc='checked'; … … 132 132 $devc='checked'; 133 133 $relc=''; 134 } 134 } 135 my $ia=$query->param('ia'); 136 if (not defined $ia) {$ia=1} 137 my $interactive=$ia*1; 135 138 my $html=''; 136 open(HTML,"<../data/runpugs.html"); 139 if ($interactive==1) { 140 my $clear=0; 141 my $nprompt=$query->param('prompt')||$prompt; 142 my $preply=''; 143 if($allinone==0 and $query->param('output')) { 144 $preply=$query->param('output'); 145 } elsif ($allinone==1 and $query->param('cmd')) { 146 $preply=$query->param('cmd'); 147 } 148 my $reply=$Web::Terminal::Settings::prompt; 149 my @history=(); 150 my $prevcmd=''; 151 my $testing=0; 152 if ($testing==1) { 153 $reply = "Sorry, runpugs is not available at the moment."; 154 } else { 155 if(not $query->param('history') or ($query->param('history') eq '')) { 156 # $cmd=~s/^.+?${Web::Terminal::Settings::prompt_pattern}/$1/s; 157 } else { 158 # $cmd=$Web::Terminal::Settings::prompt; 159 # $cmd.=$query->param('history'); 160 $cmd=$query->param('history'); 161 } 162 if ($cmd=~/clear/) { 163 $clear=1; 164 $cmd=''; 165 $preply=''; 166 } elsif ($cmd!~/^\p{IsASCII}*$/) { #NO UNICODE! 167 $cmd=''; 168 $reply = "Sorry, Unicode is not yet supported.\n".$Web::Terminal::Settings::prompt; 169 } else { 170 if ($cmd=~/>\s+(\:*help)\b/) { 171 $cmd=~s/$1/:h/; 172 } elsif ($cmd=~/>\s+(\:*(quit|bye))\b/) { 173 $cmd=~s/$1/:q/; 174 } 175 ($reply, $nprompt, my $histref) = &Web::Terminal::Dispatcher::send($sessionid,$ip,$dev,$interactive,$cmd); 176 if (defined $histref) { 177 @history=@{$histref}; 178 $prevcmd=$history[-1]; 179 } 180 #$cmd=$prompt.$history[-1]; 181 $prompt=$nprompt; 182 #$reply="\n".$reply.$prompt; 183 } 184 } 185 my $npromptw=HTML::Entities::encode_entities($nprompt); 186 my $replyw="$preply$prompt$prevcmd\n$reply"; 187 if($allinone==1){ 188 $replyw="$preply\n$reply"; 189 } 190 if($clear==1) { 191 $replyw=''; 192 } 193 my $nrows=scalar split("\n",$replyw); 194 # $nrows++; 195 ($replyw=~/^\s*$/) && ($nrows=1); 196 if ($nrows>20) {$nrows=20;} 197 my $historylist="\n"; 198 for my $entry (@history) { 199 my $entryw=HTML::Entities::encode_entities($entry); 200 $historylist.='<option value="'.$entryw.'">'.$entryw.'</option>'."\n"; 201 } 202 if ($allinone==1) { 203 $replyw.=$nprompt; 204 } 205 open(HTML,"<../data/runpugs2.html"); 137 206 while(<HTML>) { 138 s/_TESTING_/$testing/; 207 /_HIST_/ && do { 208 $html.=$historylist; 209 next; 210 }; 211 /_SKIPT_/ && ($allinone==1) && next; 212 /_SKIPC_/ && ($allinone==0) && next; 139 213 /_MOTD_/ && do { 140 $html.=$motd; 141 next; 142 }; 143 s/_DEV_/$devc/; 144 s/_REL_/$relc/; 145 /input.*name=\"sessionid\"/ && do {$html.='<input type="hidden" name="sessionid" value="'.$sessionid.'">'."\n";next }; 146 /(pugs\>\;\ \;)/ && do {$html.=$cmd.$reply;next}; 147 148 /([^\`\\]+$)/ && do {$html.=$1}; 149 150 } 214 $html.=$motd; 215 next; 216 }; 217 s/_DEV_/$devc/; 218 s/_REL_/$relc/; 219 /input.*name=\"sessionid\"/ && do { 220 $html.='<input type="hidden" name="sessionid" value="'.$sessionid.'">'."\n"; 221 next; 222 }; 223 s/_PROMPTW_/$npromptw/; 224 =not_now 225 /_PREPLYW_/ && do { 226 # $html.=$preplyw; 227 next; 228 }; 229 /_CMDW_/ && do { 230 # chomp $html; 231 # $html.=$prevcmdw."\n\n"; 232 next; 233 }; 234 /_BSKIP_/ && do { 235 # ($replyw=~/^\s*$/) && ($html.='<!--'); 236 next; 237 }; 238 /_ESKIP_/ && do { 239 # ($replyw=~/^\s*$/) && ($html.='-->'); 240 next; 241 }; 242 =cut 243 (/_REPLYW_/ && ($allinone==0))|| 244 (/_ALL_/ && ($allinone==1)) 245 and do { 246 chomp $html; 247 $html.=$replyw; 248 next; 249 }; 250 /_NPROMPTW_/ && ($allinone==0) && do { 251 chomp $html; 252 $html.=$npromptw; 253 next; 254 }; 255 s/_NROWS_/$nrows/; 256 /([^\`\\]+$)/ && do {$html.=$1}; 257 } 151 258 close HTML; 259 260 } else { #not-interactive 261 my $script=$query->param('script')||''; 262 (my $reply,my $nprompt, my $histref) = 263 &Web::Terminal::Dispatcher::send($sessionid,$ip,$dev,$interactive,$script); 264 my $nrows=scalar split("\n",$reply); 265 # $nrows++; 266 ($reply=~/^\s*$/) && ($nrows=1); 267 if ($nrows>20) {$nrows=20;} 268 open(HTML,"<../data/runpugs2s.html"); 269 while(<HTML>) { 270 s/_DEV_/$devc/; 271 s/_REL_/$relc/; 272 s/_NROWS_/$nrows/; 273 /_REPLYW_/ && do { 274 chomp $html; 275 $html.=$reply; 276 next; 277 }; 278 /_SCRIPT_/ && do { 279 chomp $html; 280 $html.=$script; 281 next; 282 }; 283 /([^\`\\]+$)/ && do {$html.=$1}; 284 } 285 close HTML; 286 } 152 287 &printhttpheader(); 153 288 print $html; … … 157 292 ################### PRINTHTTPHEADER ####################### 158 293 sub printhttpheader { 159 # my $cookie;160 294 unless ($headerprinted) { 161 162 # if ($sessionid) { 163 # $cookie = $query->cookie( -name => 'sessionid', 164 # -"value" => $sessionid, 165 # -path => '/' ); 166 # } 167 168 $headerprinted=1; 169 170 # if ($sessionid) { 171 # print $query->header(-pragma=>'no-cache', 172 # -cookie=>$cookie, 173 # -charset=>$lang_charset, 174 # ); 175 # } else { 295 $headerprinted=1; 176 296 print $query->header(-pragma=>'no-cache', 177 297 -charset=>$lang_charset, 178 298 ); 179 # }180 299 } 181 300 } -
misc/runpugs/cgi-bin/runpugs3
r14850 r14885 23 23 use Web::Terminal::Settings; 24 24 use Web::Terminal::Dispatcher; 25 $Web::Terminal::Settings::port=2058;25 #$Web::Terminal::Settings::port=2058; 26 26 #push (@INC, "$wwwpath$htmlpath$project"); 27 27 … … 32 32 use HTML::Entities; 33 33 34 CGI::nph(); # Treat script as a non-parsed-header script34 #CGI::nph(); # Treat script as a non-parsed-header script 35 35 $ENV{PATH} = ""; # no PATH should be needed 36 36 $ENV{SAFE_MODE}=1; … … 204 204 next; 205 205 }; 206 s/_PROMPTW_/$npromptw/; 206 207 /_ALL_/ && ($allinone==1) 207 208 and do { -
misc/runpugs/data/runpugs.html
r14733 r14885 7 7 <link rel="stylesheet" type="text/css" href="/runpugs.css"> 8 8 <script language="JavaScript"> 9 var nchars=0; 10 function getnchars() { 11 return document.terminal.cmd.value.length 12 } 9 13 14 function getcursorpos() { 15 var obj=document.terminal.cmd; 16 if(document.selection) { 17 obj.focus(); 18 var rng=document.selection.createRange(); 19 rng.moveStart('character',-nchars); 20 return rng.text.length; 21 } else if(obj.selectionStart>=0) { // FireFox 22 var start = obj.selectionStart; 23 var end = obj.selectionEnd; 24 if (start<=end) { 25 return start; 26 } else { 27 return end; 28 } 29 } 30 } 31 32 function catchbackspace(myfield,e) 33 { 34 var keycode; 35 if (window.event) {keycode = window.event.keyCode; 36 } 37 else if (e) { 38 keycode = e.which; 39 } 40 else return true; 41 42 if (keycode == 13) 43 { 44 document.terminal.submit(); 45 return false; 46 } 47 if (keycode==38) { 48 return false; 49 } 50 if ((keycode==8)||(keycode==37)||(keycode==46)) { 51 if ((getnchars()>nchars) && (getcursorpos() > nchars)) { 52 return true; 53 } else { 54 return false; 55 } 56 } else { 57 return true; 58 } 59 } 60 61 // onkeypress="return catchbackspace(this,event)" onkeydown="return catchbackspace(this,event)" 10 62 function submitenter(myfield,e) 11 63 { … … 19 71 return false; 20 72 } 73 else { 74 if (keycode == 8) { 75 if (getnchars()>nchars) { 76 return true; 77 } else { 78 return false; 79 } 80 } else { 81 return true; 82 } 83 } 84 } 85 86 function select_enter() 87 { 88 /* _SKIPC_ 89 document.terminal.cmdline.value=document.terminal.hist.options[document.terminal.hist.selectedIndex].value; 90 document.terminal.hist.selectedIndex=0; 91 document.terminal.cmdline.focus(); 92 _SKIPC_ */ 93 /* _SKIPT_ 94 document.terminal.cmd.value+=document.terminal.hist.options[document.terminal.hist.selectedIndex].value; 95 document.terminal.hist.selectedIndex=0; 96 document.terminal.cmd.focus(); 97 document.terminal.cmd.scrollTop =document.terminal.cmd.scrollHeight; 98 _SKIPT_ */ 99 } 100 101 function select_enter_OFF(myfield,e) 102 { 103 var keycode; 104 if (window.event) keycode = window.event.keyCode; 105 else if (e) keycode = e.which; 106 else return true; 107 if (keycode == 13) 108 { 109 document.terminal.cmdline.value=document.terminal.hist.options[document.terminal.hist.selectedIndex].value; 110 return false; 111 } 21 112 else 22 113 return true; … … 27 118 <div id="mainwindow"> 28 119 <h1>Run Perl 6 now -- in your browser!</h1> 29 30 <form id="term" name="terminal" action="/cgi-bin/runpugs" method="POST"> 31 <input type="hidden" name="testing" value="_TESTING_"> 120 <form id="term" name="terminal" action="/cgi-perl/runpugs" method="POST"> 121 <input type="hidden" name="prompt" value="_PROMPTW_"> 32 122 <input type="hidden" name="sessionid" value=""> 123 <input type="hidden" name="ia" value="1"> 33 124 <input type="hidden" name="action" value="runpugs"> 34 <h2>Interactive Pugs Session</h2>35 <!-- _MOTD_ -->36 125 <input type="radio" id="rel" value="0" name="reldev" _REL_ ><label 37 126 for="rel">Release version</label> … … 39 128 for="dev">Development version</label> 40 129 <div id="termwindow"> 41 <textarea id="cmd" name="cmd" rows="23" cols="80" wrap="virtual" onKeyPress="return submitenter(this,event)"> 42 pugs> 130 <select name="history" id="hist" onChange="select_enter()"> 131 <option value="">--- Recent commands ---</option> 132 _HIST_ 133 </select> 134 <br> 135 <!-- _SKIPT_ 136 <textarea id="cmd" name="cmd" rows="20" cols="80" wrap="virtual" onkeypress="return catchbackspace(this,event)" onkeydown="return catchbackspace(this,event)"> 137 _ALL_ 43 138 </textarea> 139 _SKIPT_ --> 140 <!--_SKIPC_ 141 <textarea readonly id="output" name="output" rows="_NROWS_" cols="80" wrap="virtual"> 142 _REPLYW_ 143 </textarea> 144 <br> 145 <label for="cmdline"><span class="prompt"> 146 _NPROMPTW_ 147 </span> 148 <input type="text" size="74" id="cmdline" name="cmdline" value="" 149 onKeyPress="return submitenter(this,event)"> 150 </label> 151 _SKIPC_ --> 44 152 </div> 45 153 <input id="enter" type="submit" value="Submit"> … … 47 155 <script language="JavaScript"> 48 156 document.terminal.enter.style.display='none'; 49 document.terminal.cmd.focus(); 50 document.terminal.cmd.scrollTop =document.terminal.cmd.scrollHeight; 157 document.terminal.cmdline.focus() // _SKIPT_ 158 document.terminal.cmd.focus() // _SKIPC_ 159 document.terminal.output.scrollTop =document.terminal.output.scrollHeight; // _SKIPT_ 160 document.terminal.cmd.scrollTop =document.terminal.cmd.scrollHeight; // _SKIPC_ 161 //if (document.terminal.output.rows==1) { 162 //document.terminal.output.style.height="2ex"; 163 //} 164 nchars=document.terminal.cmd.value.length; 51 165 </script> 52 <p>This live web terminal runs the <a href="http://www.pugscode.org"> Pugs</a> interpreter for <a53 href="http://dev.perl.org/perl 6/">Perl 6</a>. Please <a166 <p>This live web terminal runs the <a href="http://www.pugscode.org">pugs</a> interpreter for <a 167 href="http://dev.perl.org/perl 6/">Perl 6</a>. Please <a 54 168 href="http://feather.perl6.nl/~andara/runpugs/">read the documentation</a>. 55 169 </p> -
misc/runpugs/data/runpugs2.html
r14743 r14885 125 125 </p> 126 126 --> 127 <form id="term" name="terminal" action="/cgi-bin/runpugs2" method="POST"> 127 <!-- _MOTD_ --> 128 <form id="term" name="terminal" action="/cgi-bin/runpugs" method="POST"> 128 129 <input type="hidden" name="prompt" value="_PROMPTW_"> 129 130 <input type="hidden" name="sessionid" value=""> … … 134 135 <input type="radio" id="dev" value="1" name="reldev" _DEV_ ><label 135 136 for="dev">Development version</label> 136 <!--137 <br><br>138 <span class="tabon">Interactive Pugs Session</span>139 <a class="taboff" href="/cgi-bin/runpugs2?ia=0">Run a Perl 6 Script</a>140 -->141 137 <div id="termwindow"> 142 138 <select name="history" id="hist" onChange="select_enter()"> -
