810 lines
14 KiB
C++
810 lines
14 KiB
C++
/* BePascal - A pascal wrapper around the BeOS API
|
|
Copyright (C) 2003 Olivier Coursiere
|
|
Eric Jourde
|
|
Oscar Lesta
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Library General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public
|
|
License along with this library; if not, write to the Free
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
#ifndef _BITMAP_CPP
|
|
#define _BITMAP_CPP
|
|
|
|
#include "Bitmap.h"
|
|
|
|
#include "view.h"
|
|
#include <archivable.h>
|
|
#include <beobj.h>
|
|
|
|
/*----------------------------------------------------------------*/
|
|
/*----- BBitmap class --------------------------------------------*/
|
|
class BPBitmap : public BBitmap, public BPArchivable
|
|
{
|
|
public:
|
|
BPBitmap(TPasObject PasObject,
|
|
BRect bounds,
|
|
uint32 flags,
|
|
color_space depth,
|
|
int32 bytesPerRow=B_ANY_BYTES_PER_ROW,
|
|
screen_id screenID=B_MAIN_SCREEN_ID);
|
|
BPBitmap(TPasObject PasObject,
|
|
BRect bounds,
|
|
color_space depth,
|
|
bool accepts_views = false,
|
|
bool need_contiguous = false);
|
|
BPBitmap(TPasObject PasObject,
|
|
const BBitmap* source,
|
|
bool accepts_views = false,
|
|
bool need_contiguous = false);
|
|
BPBitmap(TPasObject PasObject, BMessage *data);
|
|
|
|
//virtual ~BBitmap();
|
|
|
|
/* Archiving */
|
|
static BArchivable *Instantiate(BMessage *data);
|
|
//virtual status_t Archive(BMessage *data, bool deep = true) const;
|
|
|
|
status_t InitCheck() const;
|
|
bool IsValid() const;
|
|
|
|
status_t LockBits(uint32 *state=NULL);
|
|
void UnlockBits();
|
|
|
|
area_id Area() const;
|
|
void * Bits() const;
|
|
int32 BitsLength() const;
|
|
int32 BytesPerRow() const;
|
|
color_space ColorSpace() const;
|
|
BRect Bounds() const;
|
|
|
|
void SetBits(const void *data,
|
|
int32 length,
|
|
int32 offset,
|
|
color_space cs);
|
|
|
|
status_t GetOverlayRestrictions(overlay_restrictions *restrict) const;
|
|
|
|
/* to mimic a BWindow */
|
|
virtual void AddChild(BView *view);
|
|
virtual bool RemoveChild(BView *view);
|
|
int32 CountChildren() const;
|
|
BView *ChildAt(int32 index) const;
|
|
BView *FindView(const char *view_name) const;
|
|
BView *FindView(BPoint point) const;
|
|
bool Lock();
|
|
void Unlock();
|
|
bool IsLocked() const;
|
|
|
|
virtual status_t Perform(perform_code d, void *arg);
|
|
|
|
/*----- Private or reserved -----------------------------------------*/
|
|
private:
|
|
/*
|
|
friend class BView;
|
|
friend class BApplication;
|
|
friend void _IMPEXP_BE _get_screen_bitmap_(BBitmap *,BRect,bool);
|
|
|
|
virtual void _ReservedBitmap1();
|
|
virtual void _ReservedBitmap2();
|
|
virtual void _ReservedBitmap3();
|
|
|
|
BBitmap(const BBitmap &);
|
|
BBitmap &operator=(const BBitmap &);
|
|
|
|
char *get_shared_pointer() const;
|
|
void set_bits(long offset, char *data, long length);
|
|
void set_bits_24(long offset, char *data, long length);
|
|
void set_bits_24_local_gray(long offset, char *data, long len);
|
|
void set_bits_24_local_256(long offset, uchar *data, long len);
|
|
void set_bits_24_24(long offset, char *data, long length,
|
|
bool big_endian_dst);
|
|
void set_bits_8_24(long offset, char *data, long length,
|
|
bool big_endian_dst);
|
|
void set_bits_gray_24(long offset, char *data, long length,
|
|
bool big_endian_dst);
|
|
int32 get_server_token() const;
|
|
void InitObject( BRect frame, color_space depth,
|
|
uint32 flags, int32 bytesPerRow, screen_id screenID);
|
|
void AssertPtr();
|
|
|
|
void *fBasePtr;
|
|
int32 fSize;
|
|
color_space fType;
|
|
BRect fBound;
|
|
int32 fRowBytes;
|
|
BWindow *fWindow;
|
|
int32 fServerToken;
|
|
int32 fToken;
|
|
uint8 unused;
|
|
area_id fArea;
|
|
area_id fOrigArea;
|
|
uint32 fFlags;
|
|
status_t fInitError;
|
|
*/
|
|
};
|
|
/*-------------------------------------------------------------*/
|
|
/*-------------------------------------------------------------*/
|
|
|
|
BPBitmap::BPBitmap(TPasObject PasObject,
|
|
BRect bounds,
|
|
uint32 flags,
|
|
color_space depth,
|
|
int32 bytesPerRow = B_ANY_BYTES_PER_ROW,
|
|
screen_id screenID = B_MAIN_SCREEN_ID)
|
|
: BBitmap(bounds, flags, depth, bytesPerRow, screenID),
|
|
BPArchivable(PasObject)//,
|
|
// BPasObject(PasObject)
|
|
{
|
|
|
|
}
|
|
|
|
BPBitmap::BPBitmap(TPasObject PasObject,
|
|
BRect bounds,
|
|
color_space depth,
|
|
bool accepts_views = false,
|
|
bool need_contiguous = false)
|
|
: BBitmap(bounds, depth, accepts_views, need_contiguous),
|
|
BPArchivable(PasObject)//,
|
|
// BPasObject(PasObject)
|
|
{
|
|
|
|
}
|
|
|
|
BPBitmap::BPBitmap(TPasObject PasObject,
|
|
const BBitmap* source,
|
|
bool accepts_views = false,
|
|
bool need_contiguous = false)
|
|
: BBitmap(source, accepts_views, need_contiguous),
|
|
BPArchivable(PasObject)//,
|
|
// BPasObject(PasObject)
|
|
{
|
|
|
|
}
|
|
|
|
BPBitmap::BPBitmap(TPasObject PasObject, BMessage *data)
|
|
: BBitmap(data),
|
|
BPArchivable(PasObject)//,
|
|
// BPasObject(PasObject)
|
|
{
|
|
|
|
}
|
|
|
|
status_t
|
|
BPBitmap::InitCheck(void) const
|
|
{
|
|
return BBitmap::InitCheck();
|
|
}
|
|
|
|
bool
|
|
BPBitmap::IsValid(void) const
|
|
{
|
|
return BBitmap::IsValid();
|
|
}
|
|
|
|
status_t
|
|
BPBitmap::LockBits(uint32 *state=NULL)
|
|
{
|
|
return BBitmap::LockBits(state);
|
|
}
|
|
|
|
void
|
|
BPBitmap::UnlockBits(void)
|
|
{
|
|
BBitmap::UnlockBits();
|
|
}
|
|
|
|
area_id
|
|
BPBitmap::Area(void) const
|
|
{
|
|
return BBitmap::Area();
|
|
}
|
|
|
|
void *
|
|
BPBitmap::Bits(void) const
|
|
{
|
|
return BBitmap::Bits();
|
|
}
|
|
|
|
int32
|
|
BPBitmap::BitsLength(void) const
|
|
{
|
|
return BBitmap::BitsLength();
|
|
}
|
|
|
|
int32
|
|
BPBitmap::BytesPerRow(void) const
|
|
{
|
|
return BBitmap::BytesPerRow();
|
|
}
|
|
|
|
color_space
|
|
BPBitmap::ColorSpace(void) const
|
|
{
|
|
return BBitmap::ColorSpace();
|
|
}
|
|
|
|
BRect
|
|
BPBitmap::Bounds(void) const
|
|
{
|
|
return BBitmap::Bounds();
|
|
}
|
|
|
|
void
|
|
BPBitmap::SetBits(const void *data, int32 length, int32 offset, color_space cs)
|
|
{
|
|
BBitmap::SetBits(data, length, offset, cs);
|
|
}
|
|
|
|
status_t
|
|
BPBitmap::GetOverlayRestrictions(overlay_restrictions *restrict) const
|
|
{
|
|
return BBitmap::GetOverlayRestrictions(restrict);
|
|
}
|
|
|
|
void
|
|
BPBitmap::AddChild(BView *view)
|
|
{
|
|
BBitmap::AddChild(view);
|
|
}
|
|
|
|
bool
|
|
BPBitmap::RemoveChild(BView *view)
|
|
{
|
|
BBitmap::RemoveChild(view);
|
|
}
|
|
|
|
int32
|
|
BPBitmap::CountChildren(void) const
|
|
{
|
|
return BBitmap::CountChildren();
|
|
}
|
|
|
|
bool
|
|
BPBitmap::Lock(void)
|
|
{
|
|
return BBitmap::Lock();
|
|
}
|
|
|
|
void
|
|
BPBitmap::Unlock(void)
|
|
{
|
|
BBitmap::Unlock();
|
|
}
|
|
|
|
bool
|
|
BPBitmap::IsLocked(void) const
|
|
{
|
|
return BBitmap::IsLocked();
|
|
}
|
|
|
|
status_t
|
|
BPBitmap::Perform(perform_code d, void *arg)
|
|
{
|
|
return BBitmap::Perform(d, arg);
|
|
}
|
|
|
|
/*-------------------------------------------------------------*/
|
|
|
|
#if defined(__cplusplus)
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*
|
|
* Method: BBitmap::BBitmap
|
|
* Descr:
|
|
*/
|
|
TCPlusObject BBitmap_Create(TPasObject PasObject, BRect bounds, uint32 flags, color_space depth, int32 bytesPerRow, screen_id screenID)
|
|
{
|
|
return new BPBitmap(PasObject, bounds, flags, depth, bytesPerRow, screenID);
|
|
}
|
|
|
|
/*
|
|
* Method: BBitmap::BBitmap
|
|
* Descr:
|
|
*/
|
|
TCPlusObject BBitmap_Create_1
|
|
(TPasObject PasObject, BRect bounds, color_space depth, bool accepts_views, bool need_contiguous)
|
|
{
|
|
return new BPBitmap(PasObject, bounds, depth, accepts_views, need_contiguous);
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::BBitmap
|
|
* Descr:
|
|
*/
|
|
TCPlusObject BBitmap_Create_2
|
|
(TPasObject PasObject, const BBitmap *source, bool accepts_views, bool need_contiguous)
|
|
{
|
|
return new BPBitmap(PasObject, source, accepts_views, need_contiguous);
|
|
}
|
|
|
|
|
|
/* BBitmap(BMessage *data);
|
|
* Method: BBitmap::BBitmap
|
|
* Descr:
|
|
*/
|
|
TCPlusObject BBitmap_Create_3(TPasObject PasObject, BMessage *data)
|
|
{
|
|
return new BPBitmap(PasObject, data);
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::~BBitmap
|
|
* Descr:
|
|
*/
|
|
void BBitmap_Free(BBitmap *Bitmap)
|
|
{
|
|
delete Bitmap;
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::Instantiate
|
|
* Descr:
|
|
*/
|
|
BArchivable *
|
|
BBitmap_Instantiate(BBitmap *Bitmap, BMessage *data)
|
|
{
|
|
return Bitmap->Instantiate(data);
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::Archive
|
|
* Descr:
|
|
*/
|
|
status_t
|
|
BBitmap_Archive(BBitmap *Bitmap, BMessage *data, bool deep)
|
|
{
|
|
return Bitmap->Archive(data, deep);
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::InitCheck
|
|
* Descr:
|
|
*/
|
|
status_t
|
|
BBitmap_InitCheck(BBitmap *Bitmap)
|
|
{
|
|
return Bitmap->InitCheck();
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::IsValid
|
|
* Descr:
|
|
*/
|
|
bool
|
|
BBitmap_IsValid(BBitmap *Bitmap)
|
|
{
|
|
return Bitmap->IsValid();
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::LockBits
|
|
* Descr:
|
|
*/
|
|
status_t
|
|
BBitmap_LockBits(BBitmap *Bitmap, uint32 *state)
|
|
{
|
|
return Bitmap->LockBits(state);
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::UnlockBits
|
|
* Descr:
|
|
*/
|
|
void
|
|
BBitmap_UnlockBits(BBitmap *Bitmap)
|
|
{
|
|
Bitmap->UnlockBits();
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::Area
|
|
* Descr:
|
|
*/
|
|
area_id
|
|
BBitmap_Area(BBitmap *Bitmap)
|
|
{
|
|
return Bitmap->Area();
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::Bits
|
|
* Descr:
|
|
*/
|
|
void *
|
|
BBitmap_Bits(BBitmap *Bitmap)
|
|
{
|
|
Bitmap->Bits();
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::BitsLength
|
|
* Descr:
|
|
*/
|
|
int32
|
|
BBitmap_BitsLength_1
|
|
(BBitmap *Bitmap)
|
|
{
|
|
return Bitmap->BitsLength();
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::BytesPerRow
|
|
* Descr:
|
|
*/
|
|
int32
|
|
BBitmap_BytesPerRow(BBitmap *Bitmap)
|
|
{
|
|
return Bitmap->BytesPerRow();
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::ColorSpace
|
|
* Descr:
|
|
*/
|
|
color_space
|
|
BBitmap_ColorSpace(BBitmap *Bitmap)
|
|
{
|
|
return Bitmap->ColorSpace();
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::Bounds
|
|
* Descr:
|
|
*/
|
|
BRect
|
|
BBitmap_Bounds(BBitmap *Bitmap)
|
|
{
|
|
return Bitmap->Bounds();
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::SetBits
|
|
* Descr:
|
|
*/
|
|
void
|
|
BBitmap_SetBits(BBitmap *Bitmap, const void *data, int32 length, int32 offset, color_space cs)
|
|
{
|
|
Bitmap->SetBits(data, length, offset, cs);
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::GetOverlayRestrictions
|
|
* Descr:
|
|
*/
|
|
status_t
|
|
BBitmap_GetOverlayRestrictions(BBitmap *Bitmap, overlay_restrictions *restrict)
|
|
{
|
|
return Bitmap->GetOverlayRestrictions(restrict);
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::AddChild
|
|
* Descr:
|
|
*/
|
|
void
|
|
BBitmap_AddChild(BBitmap *Bitmap, BView *view)
|
|
{
|
|
Bitmap->AddChild(view);
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::RemoveChild
|
|
* Descr:
|
|
*/
|
|
bool
|
|
BBitmap_RemoveChild(BBitmap *Bitmap, BView *view)
|
|
{
|
|
return Bitmap->RemoveChild(view);
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::CountChildren
|
|
* Descr:
|
|
*/
|
|
int32
|
|
BBitmap_CountChildren(BBitmap *Bitmap)
|
|
{
|
|
return Bitmap->CountChildren();
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::ChildAt
|
|
* Descr:
|
|
*/
|
|
BView *
|
|
BBitmap_ChildAt(BBitmap *Bitmap, int32 index)
|
|
{
|
|
return Bitmap->ChildAt(index);
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::FindView
|
|
* Descr:
|
|
*/
|
|
BView *
|
|
BBitmap_FindView(BBitmap *Bitmap, const char *view_name)
|
|
{
|
|
return Bitmap->FindView(view_name);
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::FindView
|
|
* Descr:
|
|
*/
|
|
BView *
|
|
BBitmap_FindView_1
|
|
(BBitmap *Bitmap, BPoint point)
|
|
{
|
|
return Bitmap->FindView(point);
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::Lock
|
|
* Descr:
|
|
*/
|
|
bool
|
|
BBitmap_Lock(BBitmap *Bitmap)
|
|
{
|
|
return Bitmap->Lock();
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::Unlock
|
|
* Descr:
|
|
*/
|
|
|
|
void
|
|
BBitmap_Unlock(BBitmap *Bitmap)
|
|
{
|
|
Bitmap->Unlock();
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::IsLocked
|
|
* Descr:
|
|
*/
|
|
|
|
bool
|
|
BBitmap_IsLocked(BBitmap *Bitmap)
|
|
{
|
|
return Bitmap->IsLocked();
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::Perform
|
|
* Descr:
|
|
*/
|
|
|
|
status_t
|
|
BBitmap_Perform(BBitmap *Bitmap, perform_code d, void *arg)
|
|
{
|
|
return Bitmap->Perform(d, arg);
|
|
}
|
|
|
|
|
|
/*
|
|
* Method: BBitmap::_ReservedBitmap1
|
|
* Descr:
|
|
*/
|
|
/*
|
|
void
|
|
BBitmap__ReservedBitmap1(BBitmap *Bitmap)
|
|
{
|
|
Bitmap->_ReservedBitmap1();
|
|
}
|
|
*/
|
|
|
|
/*
|
|
* Method: BBitmap::_ReservedBitmap2
|
|
* Descr:
|
|
*/
|
|
/*
|
|
void
|
|
BBitmap__ReservedBitmap2(BBitmap *Bitmap)
|
|
{
|
|
Bitmap->_ReservedBitmap2();
|
|
}
|
|
*/
|
|
|
|
/*
|
|
* Method: BBitmap::_ReservedBitmap3
|
|
* Descr:
|
|
*/
|
|
/*
|
|
void
|
|
BBitmap__ReservedBitmap3(BBitmap *Bitmap)
|
|
{
|
|
Bitmap->_ReservedBitmap3();
|
|
}
|
|
*/
|
|
|
|
/*
|
|
* Method: BBitmap::operator=
|
|
* Descr:
|
|
*/
|
|
/*
|
|
BBitmap &
|
|
BBitmap_operator=(BBitmap *Bitmap, const BBitmap &)
|
|
{
|
|
return Bitmap->operator=();
|
|
}
|
|
*/
|
|
|
|
/*
|
|
* Method: BBitmap::get_shared_pointer
|
|
* Descr:
|
|
*/
|
|
/*
|
|
char *
|
|
BBitmap_get_shared_pointer(BBitmap *Bitmap) const
|
|
{
|
|
return Bitmap->get_shared_pointer();
|
|
}
|
|
*/
|
|
|
|
/*
|
|
* Method: BBitmap::set_bits
|
|
* Descr:
|
|
*/
|
|
/*
|
|
void
|
|
BBitmap_set_bits(BBitmap *Bitmap, long offset, char *data, long length)
|
|
{
|
|
Bitmap->set_bits(offset, data, length);
|
|
}
|
|
*/
|
|
|
|
/*
|
|
* Method: BBitmap::set_bits_24
|
|
* Descr:
|
|
*/
|
|
/*
|
|
void
|
|
BBitmap_set_bits_24_1
|
|
(BBitmap *Bitmap, long offset, char *data, long length)
|
|
{
|
|
Bitmap->set_bits_24(offset, data, length);
|
|
}
|
|
*/
|
|
|
|
/*
|
|
* Method: BBitmap::set_bits_24_local_gray
|
|
* Descr:
|
|
*/
|
|
/*
|
|
void
|
|
BBitmap_set_bits_24_local_gray_2
|
|
(BBitmap *Bitmap, long offset, char *data, long len)
|
|
{
|
|
Bitmap->set_bits_24_local_gray(offset, data, len);
|
|
}
|
|
*/
|
|
|
|
/*
|
|
* Method: BBitmap::set_bits_24_local_256
|
|
* Descr:
|
|
*/
|
|
/*
|
|
void
|
|
BBitmap_set_bits_24_local_256(BBitmap *Bitmap, long offset, uchar *data, long len)
|
|
{
|
|
Bitmap->set_bits_24_local_256(offset, data, len);
|
|
}
|
|
*/
|
|
|
|
/*
|
|
* Method: BBitmap::set_bits_24_24
|
|
* Descr:
|
|
*/
|
|
/*
|
|
void
|
|
BBitmap_set_bits_24_24(BBitmap *Bitmap, long offset, char *data, long length, bool big_endian_dst)
|
|
{
|
|
Bitmap->set_bits_24_24(offset, data, length, big_endian_dst);
|
|
}
|
|
*/
|
|
|
|
/*
|
|
* Method: BBitmap::set_bits_8_24
|
|
* Descr:
|
|
*/
|
|
/*
|
|
void
|
|
BBitmap_set_bits_8_24(BBitmap *Bitmap, long offset, char *data, long length, bool big_endian_dst)
|
|
{
|
|
Bitmap->set_bits_8_24(offset, data, length, big_endian_dst);
|
|
}
|
|
*/
|
|
|
|
/*
|
|
* Method: BBitmap::set_bits_gray_24
|
|
* Descr:
|
|
*/
|
|
/*
|
|
void
|
|
BBitmap_set_bits_gray_24(BBitmap *Bitmap, long offset, char *data, long length, bool big_endian_dst)
|
|
{
|
|
Bitmap->set_bits_gray_24(offset, data, length, big_endian_dst);
|
|
}
|
|
*/
|
|
|
|
/*
|
|
* Method: BBitmap::get_server_token
|
|
* Descr:
|
|
*/
|
|
/*
|
|
int32
|
|
BBitmap_get_server_token(BBitmap *Bitmap) const
|
|
{
|
|
return Bitmap->get_server_token();
|
|
}
|
|
*/
|
|
|
|
/*
|
|
* Method: BBitmap::InitObject
|
|
* Descr:
|
|
*/
|
|
/*
|
|
void
|
|
BBitmap_InitObject(BBitmap *Bitmap, BRect frame, color_space depth, uint32 flags, int32 bytesPerRow, screen_id screenID)
|
|
{
|
|
Bitmap->InitObject(frame, depth, flags, bytesPerRow, screenID);
|
|
}
|
|
*/
|
|
|
|
/*
|
|
* Method: BBitmap::AssertPtr
|
|
* Descr:
|
|
*/
|
|
/*
|
|
void
|
|
BBitmap_AssertPtr(BBitmap *Bitmap)
|
|
{
|
|
Bitmap->AssertPtr();
|
|
}
|
|
*/
|
|
|
|
#if defined(__cplusplus)
|
|
}
|
|
#endif
|
|
|
|
#endif /* _BITMAP_H */
|