bsd386) osname=bsd386
osvers=`$uname -r`
;;
+ POSIX-BC | posix-bc ) osname=posix-bc
+ osvers="$3"
+ ;;
powerux | power_ux | powermax_os | powermaxos | \
powerunix | power_unix) osname=powerux
osvers="$3"
--- /dev/null
+This is a first ported perl for the POSIX subsystem in BS2000 VERSION
+'V121', OSD V3.1, POSIX Shell V03.1A55. It may work on other
+versions, but that's the one we've tested it on.
+
+You may need the following GNU programs in order to install perl:
+
+gzip:
+
+We used version 1.2.4, which could be installed out of the box with
+one failure during 'make check'.
+
+bison:
+
+The yacc coming with BS2000 POSIX didn't work for us. So we had to
+use bison. We had to make a few changes to perl in order to use the
+pure (reentrant) parser of bison. We used version 1.25, but we had to
+add a few changes due to EBCDIC.
+
+
+UNPACKING:
+==========
+
+To extract an ASCII tar archive on BS2000 POSIX you need an ASCII
+filesystem (we used the mountpoint /usr/local/ascii for this). Now
+you extract the archive in the ASCII filesystem without I/O-conversion:
+
+cd /usr/local/ascii
+export IO_CONVERSION=NO
+gunzip < /usr/local/src/perl.tar.gz | pax -r
+
+You may ignore the error message for the first element of the archive
+(this doesn't look like a tar archive / skipping to next file...),
+it's only the directory which will be made anyway.
+
+After extracting the archive you copy the whole directory tree to your
+EBCDIC filesystem. This time you use I/O-conversion:
+
+cd /usr/local/src
+IO_CONVERSION=YES
+cp -r /usr/local/ascii/perl5.005_02 ./
+
+
+COMPILING:
+==========
+
+There is a "hints" file for posix-bc that specifies the correct values
+for most things. The major problem is (of course) the EBCDIC character
+set.
+
+Configure did everything except the perl parser.
+
+Because of our problems with the native yacc we used GNU bison to
+generate a pure (=reentrant) parser for perly.y:
+
+echo %pure_parser > /tmp/perly.y
+cat perly.y >> /tmp/perly.y
+/usr/local/bin/bison --yacc -d perly.y
+cp y.tab.c perly.c
+cp y.tab.h perly.h
+
+We build perl using GNU make, but it should compile with the native
+make too.
+
+
+TESTING:
+========
+
+We still got a few errors during 'make test'. Most of them are the
+result of using bison. Bison prints 'parser error' instead of 'syntax
+error', so we may ignore them. One error in the test op/regexp (and
+op/regexp_noamp) seems a bit critical, the result was an 'Out of
+memory' (core dump with op/regexp_noamp). The following list shows
+our errors, your results may differ:
+
+comp/require........FAILED test 3
+op/misc.............FAILED tests 45-46
+op/pack.............FAILED tests 58-60
+op/regexp...........FAILED tests 402-485 (Out of memory!)
+op/regexp_noamp.....FAILED tests 402-485 (core dump)
+op/taint............FAILED test 73
+pragma/overload.....FAILED tests 152-153, 170-171
+pragma/subs.........FAILED tests 1-2
+lib/cgi-html........dubious, FAILED tests 1-17 (ALL)
+lib/complex.........FAILED tests 264, 484
+lib/dumper..........FAILED tests MANY
+lib/errno...........dubious (Errno.pm not found?)
+lib/searchdict......FAILED tests 1-2
+Failed 13/186 test scripts, 93.01% okay. 224/6242 subtests failed, 96.41%
+okay.
+
+
+INSTALLING:
+===========
+
+We have no nroff on BS2000 POSIX (yet), so we ignored any errors while
+installing the documentation.
+
+
+USING PERL:
+===========
+
+BS2000 POSIX doesn't support the shebang notation
+('#!/usr/local/bin/perl'), so you have to use the following lines
+instead:
+
+: # use perl
+ eval 'exec /usr/local/bin/perl -S $0 ${1+"$@"}'
+ if $running_under_some_shell;
--- /dev/null
+#! /usr/bin/bash -norc
+# hints/posix-bc.sh
+#
+# BS2000 (Posix Subsystem) hints by Thomas Dorner <Thomas.Dorner@start.de>
+#
+# thanks to the authors of the os390.sh
+#
+
+# To get ANSI C, we need to use c89, and ld doesn't exist
+cc='c89'
+ld='c89'
+
+# C-Flags:
+ccflags='-DPOSIX_BC -DUSE_PURE_BISON -D_XOPEN_SOURCE_EXTENDED'
+
+# Turning on optimization breaks perl (CORE-DUMP):
+optimize='none'
+
+# we don''t use dynamic memorys (yet):
+so='none'
+usedl='no'
+dlext='none'
+
+# On BS2000/Posix, libc.a doesn't really hold anything at all,
+# so running nm on it is pretty useless.
+usenm='no'
+
+# other Options:
+
+usemymalloc='no'
+
+archobjs=ebcdic.o
+
#ifdef __OPEN_VM
printf("VM/ESA port by Neale Ferguson, 1998\n");
#endif
+#ifdef POSIX_BC
+ printf("BS2000 (POSIX) port by Start Amadeus GmbH, 1998\n");
+#endif
#ifdef BINARY_BUILD_NOTICE
BINARY_BUILD_NOTICE;
#endif
%start prog
%{
-#if !defined(OEMVS) && !defined(__OPEN_VM)
+/* I sense a Big Blue pattern here... */
+#if !defined(OEMVS) && !defined(__OPEN_VM) && !defined(POSIX_BC)
%}
%union {
}
%{
-#endif /* !OEMVS && !__OPEN_VM*/
+#endif /* !OEMVS && !__OPEN_VM && !POSIX_BC */
+
+#ifdef USE_PURE_BISON
+#define YYLEX_PARAM (&yychar)
+#endif
%}
%token <ival> '{' ')'
VIRTUAL void watch _((char** addr));
VIRTUAL I32 whichsig _((char* sig));
VIRTUAL int yyerror _((char* s));
+#ifdef USE_PURE_BISON
+VIRTUAL int yylex _((YYSTYPE* lvalp, int* lcharp));
+#else
VIRTUAL int yylex _((void));
+#endif
VIRTUAL int yyparse _((void));
VIRTUAL int yywarn _((char* s));
BEGIN {
chdir 't' if -d 't';
@INC = '../lib' if -d '../lib';
+ require Config; import Config;
}
BEGIN {$| = 1; print "1..17\n"; }
-BEGIN {$eol = $^O eq 'VMS' ? "\n" : "\cM\cJ";
- $eol = "\r\n" if $^O eq 'os390' or $^O eq 'vmesa'; }
+BEGIN {$eol = "\n" if $^O eq 'VMS';
+ $eol = "\r\n" if $Config{ebcdic} eq 'define';
+ $eol = "\cM\cJ" unless defined $eol; }
END {print "not ok 1\n" unless $loaded;}
use CGI (':standard','-no_debug');
$loaded = 1;
:endofperl
EOT
}
- if ($^O eq 'os390' or $^O eq 'vmesa') { # no shebang
+ if ($^O eq 'os390' or $^O eq 'posix-bc' or $^O eq 'vmesa') { # no shebang
$headmaybe = <<EOH ;
eval 'exec ./perl -S \$0 \${1+"\$\@"}'
if 0;
# $RCSfile: pack.t,v $$Revision: 4.1 $$Date: 92/08/07 18:28:11 $
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib' if -d '../lib';
+ require Config; import Config;
+}
+
print "1..60\n";
$format = "c2 x5 C C x s d i l a6";
? "ok 6\n" : "not ok 6 $x\n";
my $sum = 129; # ASCII
-$sum = 103 if ($^O eq 'os390' or $^O eq 'vmesa'); # EBCDIC.
+$sum = 103 if ($Config{ebcdic} eq 'define');
print +($x = unpack("%32B*", "Now is the time for all good blurfl")) == $sum
? "ok 7\n" : "not ok 7 $x\n";
#!./perl
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib' if -d '../lib';
+ require Config; import Config;
+}
+
print "1..15\n";
-if ($^O eq 'os390' or $^O eq 'vmesa') { # EBCDIC.
+if ($Config{ebcdic} eq 'define') {
$_=join "", map chr($_), 129..233;
# 105 characters - 52 letters = 53 backslashes
#!./perl
-BEGIN { @INC = ('../lib') }
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib' if -d '../lib';
+ require Config; import Config;
+}
print "1..71\n";
print $_ eq 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' ? "ok 52\n" : "not ok 52\n";
# same as tr/A-Z/a-z/;
-if ($^O eq 'os390' or $^O eq 'vmesa') { # EBCDIC.
+if ($Config{ebcdic} eq 'define') { # EBCDIC.
no utf8;
y[\301-\351][\201-\251];
} else { # Ye Olde ASCII. Or something like it.
#undef ff_next
#endif
+#ifdef USE_PURE_BISON
+YYSTYPE* yylval_pointer = NULL;
+int* yychar_pointer = NULL;
+#ifdef EMBED
+#undef yylval
+#undef yychar
+#endif
+#define yylval (*yylval_pointer)
+#define yychar (*yychar_pointer)
+#define YYLEXPARAM yylval_pointer,yychar_pointer
+#else
+#define YYLEXPARAM
+#endif
+
#include "keywords.h"
#ifdef CLINE
if (PL_lex_casemods) { /* oops, we've got some unbalanced parens */
PL_lex_state = LEX_INTERPCASEMOD;
- return yylex();
+ return yylex(YYLEXPARAM);
}
/* Is there a right-hand side to take care of? */
if we already built the token before, use it.
*/
-int
-yylex(void)
+int yylex
+#ifdef USE_PURE_BISON
+(YYSTYPE* lvalp, int* lcharp)
+#else
+(void)
+#endif
{
dTHR;
register char *s;
GV *gv = Nullgv;
GV **gvp = 0;
+#ifdef USE_PURE_BISON
+ yylval_pointer = lvalp;
+ yychar_pointer = lcharp;
+#endif
+
/* check if there's an identifier for us to look at */
if (PL_pending_ident) {
/* pit holds the identifier we read and pending_ident is reset */
if (PL_bufptr != PL_bufend)
PL_bufptr += 2;
PL_lex_state = LEX_INTERPCONCAT;
- return yylex();
+ return yylex(YYLEXPARAM);
}
else {
s = PL_bufptr + 1;
Aop(OP_CONCAT);
}
else
- return yylex();
+ return yylex(YYLEXPARAM);
}
case LEX_INTERPPUSH:
s = PL_bufptr;
Aop(OP_CONCAT);
}
- return yylex();
+ return yylex(YYLEXPARAM);
case LEX_INTERPENDMAYBE:
if (intuit_more(PL_bufptr)) {
Aop(OP_CONCAT);
else {
PL_bufptr = s;
- return yylex();
+ return yylex(YYLEXPARAM);
}
}
- return yylex();
+ return yylex(YYLEXPARAM);
case LEX_FORMLINE:
PL_lex_state = LEX_NORMAL;
s = scan_formline(PL_bufptr);
if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
PL_bufptr = s;
PL_lex_state = LEX_FORMLINE;
- return yylex();
+ return yylex(YYLEXPARAM);
}
goto retry;
case '\r':
if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
PL_bufptr = s;
PL_lex_state = LEX_FORMLINE;
- return yylex();
+ return yylex(YYLEXPARAM);
}
}
else {
if (PL_lex_fakebrack) {
PL_lex_state = LEX_INTERPEND;
PL_bufptr = s;
- return yylex(); /* ignore fake brackets */
+ return yylex(YYLEXPARAM); /* ignore fake brackets */
}
if (*s == '-' && s[1] == '>')
PL_lex_state = LEX_INTERPENDMAYBE;
if (PL_lex_brackets < PL_lex_fakebrack) {
PL_bufptr = s;
PL_lex_fakebrack = 0;
- return yylex(); /* ignore fake brackets */
+ return yylex(YYLEXPARAM); /* ignore fake brackets */
}
force_next('}');
TOKEN(';');
#define Fflush(fp) fflush(fp)
#define Mkdir(path,mode) mkdir((path),(mode))
+/* these should be set in a hint file, not here */
#ifndef PERL_SYS_INIT
#ifdef PERL_SCO5
-/* this should be set in a hint file, not here */
# define PERL_SYS_INIT(c,v) fpsetmask(0); MALLOC_INIT
#else
-# define PERL_SYS_INIT(c,v) MALLOC_INIT
+# ifdef POSIX_BC
+# define PERL_SYS_INIT(c,v) sigignore(SIGFPE); MALLOC_INIT
+# else
+# define PERL_SYS_INIT(c,v) MALLOC_INIT
+# endif
#endif
#endif