home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d6xx
/
d658
/
view.lha
/
View
/
Source
/
Blocks.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-05-15
|
4KB
|
168 lines
/*-- AutoRev header do NOT edit!
*
* Program : Blocks.c
* Copyright : Copyright © 1991-92 Jaba Development
* Author : Jan van den Baard
* Creation Date : 04-Apr-92
* Current version : 2.0
* Translator : Dice v2.06.40
*
* REVISION HISTORY
*
* Date Version Comment
* --------- ------- ------------------------------------------
* 04-Apr-92 2.0 Text block routines. (rewrite)
*
*-- REV_END --*/
#include "View.h"
Prototype void SetMark( UWORD );
Prototype void UnSetMark( UWORD );
Prototype void JumpMark( UWORD );
Prototype void SaveBlock( WORD );
Prototype long CheckBlock( UWORD );
extern struct TextBlock vwBlocks[ 10 ];
extern struct AsciiText *vwText;
extern struct Window *vwWindow;
extern struct Line *vwFirst, *vwLast;
extern UBYTE ClearStr[], vwFile[], vwPath[], vwPatt[], vwName[];
#ifndef __DETACH
extern ULONG vwArgs[];
#else
extern ULONG *vwArgs;
#endif
extern ULONG vwShown;
extern __far struct Custom custom;
long CheckBlock( UWORD mark )
{
UBYTE errl[ 31 ];
if ( ! vwBlocks[ mark ].TopLine || ! vwBlocks[ mark].BottomLine ) {
sprintf(( char * )&errl[ 0 ], "Block %-2.2ld not marked !", mark + 1 );
Error( errl );
return( FALSE );
}
return( TRUE );
}
void SetMark( UWORD mark )
{
struct Line *line, *lt;
UBYTE errl[ 31 ];
if ( ! vwText ) return;
if ( ! vwBlocks[ mark ].TopLine) {
vwBlocks[ mark ].TopLine = vwFirst;
return;
} else if ( ! vwBlocks[ mark ].BottomLine ) {
vwBlocks[ mark ].BottomLine = vwLast;
for( line = vwText->First; line->Next; line = line->Next ) {
if ( line == vwBlocks[ mark ].TopLine) break;
else if ( line == vwBlocks[ mark ].BottomLine) {
lt = vwBlocks[ mark ].TopLine;
vwBlocks[ mark ].TopLine = line->Prev;
vwBlocks[ mark ].BottomLine = lt->Next;
break;
}
}
sprintf(( char * )&errl[ 0 ], "Block %-2.2ld marked !", mark + 1 );
ErrorLine( errl );
return;
} else {
sprintf(( char * )&errl[ 0 ], "Block %-2.2ld already marked !", mark + 1 );
Error( errl );
return;
}
}
void UnSetMark( UWORD mark )
{
UBYTE errl[ 31 ];
if ( ! vwText ) return;
vwBlocks[ mark ].TopLine = vwBlocks[ mark ].BottomLine = NULL;
sprintf(( char * )&errl[ 0 ], "Block %-2.2ld unmarked !", mark + 1 );
ErrorLine( errl );
}
void JumpMark( UWORD mark )
{
struct Line *line;
if ( ! vwText ) return;
if ( ! CheckBlock( mark ))
return;
vwFirst = vwBlocks[ mark ].TopLine;
Inform( ClearStr );
DisplayText();
vwShown = 0L;
for ( line = vwText->First; line != vwLast; line = line->Next )
vwShown += line->Size;
Percentage();
}
void SaveBlock( WORD mark )
{
struct BuffIO *ofile = NULL;
struct Line *f, *t;
ULONG ret;
UBYTE *title;
if ( mark >= 0 ) {
if ( ! CheckBlock( mark ))
return;
} else {
if ( ! vwText )
return;
}
if( mark >= 0 ) title = "Save textblock as...";
else title = "Save text as...";
if( vwArgs[ 11 ] ) ON_SPRITE;
ret = FileRequest( vwWindow, title, vwFile, vwPath, vwPatt, FR_SAVE );
if ( vwArgs[ 11 ] ) OFF_SPRITE;
if ( ! ret ) {
InfoLine();
return;
}
Busy();
if ( ofile = BOpen( vwName, MODE_NEWFILE )) {
ErrorLine( "Writing..." );
if ( mark >= 0 ) {
f = vwBlocks[ mark ].TopLine;
t = vwBlocks[ mark ].BottomLine;
} else {
f = vwText->First;
t = vwText->Last->Next;
}
for( ; f != t; f = f->Next )
BPutS( ofile, f );
if( BClose( ofile ) != ASE_OK)
Error( "Write Error." );
} else
Error( "Can't open write file." );
Ready();
InfoLine();
}