996
|
1 package Language::INTERCAL::GenericIO::OBJECT;
|
|
2
|
|
3 # Write/read data from/to Perl object
|
|
4
|
|
5 # This file is part of CLC-INTERCAL
|
|
6
|
|
7 # Copyright (c) 2006-2008 Claudio Calvelli, all rights reserved.
|
|
8
|
|
9 # CLC-INTERCAL is copyrighted software. However, permission to use, modify,
|
|
10 # and distribute it is granted provided that the conditions set out in the
|
|
11 # licence agreement are met. See files README and COPYING in the distribution.
|
|
12
|
|
13 use strict;
|
|
14 use vars qw($VERSION $PERVERSION);
|
|
15 ($VERSION) = ($PERVERSION = "CLC-INTERCAL/Base INTERCAL/GenericIO/OBJECT.pm 1.-94.-2") =~ /\s(\S+)$/;
|
|
16
|
|
17 use Carp;
|
|
18 use Language::INTERCAL::Exporter '1.-94.-2';
|
|
19 use Language::INTERCAL::Splats '1.-94.-2', qw(:SP);
|
|
20 use Language::INTERCAL::GenericIO '1.-94.-2';
|
|
21 use vars qw(@ISA);
|
|
22 @ISA = qw(Language::INTERCAL::GenericIO);
|
|
23
|
|
24 sub _new {
|
|
25 @_ == 3 or croak
|
|
26 "Usage: new Language::INTERCAL::GenericIO::OBJECT(MODE, OBJECT)";
|
|
27 my ($object, $mode, $data) = @_;
|
|
28 ref $data or croak "DATA must be a reference";
|
|
29 UNIVERSAL::isa($data, 'UNIVERSAL')
|
|
30 or croak "DATA must be an object";
|
|
31 $object->{filedata} = $data;
|
|
32 }
|
|
33
|
|
34 sub is_terminal { 0 }
|
|
35
|
|
36 sub read_binary {
|
|
37 @_ == 2 or croak "Usage: IO->read_binary(DATA)";
|
|
38 my ($object, $string) = @_;
|
|
39 $object->{filedata}->read($string);
|
|
40 }
|
|
41
|
|
42 sub _write_code {
|
|
43 my ($object, $size) = @_;
|
|
44 $object->{filedata}->write($size);
|
|
45 }
|
|
46
|
|
47 sub _write_text_code {
|
|
48 my ($object, $newline) = @_;
|
|
49 my $data = $object->{filedata};
|
|
50 my $line = $object->{filedata}->write(1);
|
|
51 defined $line && $line ne '' or return '';
|
|
52 my $index = index($line, $newline);
|
|
53 while ($index < 0) {
|
|
54 my $add = $object->{filedata}->write(1);
|
|
55 defined $add && $add ne '' or return '';
|
|
56 $line .= $add;
|
|
57 $index = index($line, $newline);
|
|
58 }
|
|
59 $line;
|
|
60 }
|
|
61
|
|
62 sub describe {
|
|
63 @_ == 1 or croak "Usage: IO->describe";
|
|
64 return 'OBJECT';
|
|
65 }
|
|
66
|
|
67 1;
|