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 >
C/C++ Source or Header  |  1992-05-15  |  4KB  |  168 lines

  1. /*-- AutoRev header do NOT edit!
  2. *
  3. *   Program         :   Blocks.c
  4. *   Copyright       :   Copyright © 1991-92 Jaba Development
  5. *   Author          :   Jan van den Baard
  6. *   Creation Date   :   04-Apr-92
  7. *   Current version :   2.0
  8. *   Translator      :   Dice v2.06.40
  9. *
  10. *   REVISION HISTORY
  11. *
  12. *   Date          Version         Comment
  13. *   ---------     -------         ------------------------------------------
  14. *   04-Apr-92     2.0             Text block routines. (rewrite)
  15. *
  16. *-- REV_END --*/
  17.  
  18. #include "View.h"
  19.  
  20. Prototype void SetMark( UWORD );
  21. Prototype void UnSetMark( UWORD );
  22. Prototype void JumpMark( UWORD );
  23. Prototype void SaveBlock( WORD );
  24. Prototype long CheckBlock( UWORD );
  25.  
  26. extern struct TextBlock          vwBlocks[ 10 ];
  27. extern struct AsciiText         *vwText;
  28. extern struct Window            *vwWindow;
  29. extern struct Line              *vwFirst, *vwLast;
  30. extern UBYTE                     ClearStr[], vwFile[], vwPath[], vwPatt[], vwName[];
  31. #ifndef __DETACH
  32. extern ULONG                     vwArgs[];
  33. #else
  34. extern ULONG                    *vwArgs;
  35. #endif
  36. extern ULONG                     vwShown;
  37.  
  38. extern __far struct Custom       custom;
  39.  
  40. long CheckBlock( UWORD mark )
  41. {
  42.     UBYTE       errl[ 31 ];
  43.  
  44.     if ( ! vwBlocks[ mark ].TopLine || ! vwBlocks[ mark].BottomLine ) {
  45.         sprintf(( char * )&errl[ 0 ], "Block %-2.2ld not marked !", mark + 1 );
  46.         Error( errl );
  47.         return( FALSE );
  48.     }
  49.     return( TRUE );
  50. }
  51.  
  52. void SetMark( UWORD mark )
  53. {
  54.     struct Line     *line, *lt;
  55.     UBYTE            errl[ 31 ];
  56.  
  57.     if ( ! vwText )    return;
  58.  
  59.     if ( ! vwBlocks[ mark ].TopLine) {
  60.         vwBlocks[ mark ].TopLine = vwFirst;
  61.         return;
  62.     } else if ( ! vwBlocks[ mark ].BottomLine ) {
  63.         vwBlocks[ mark ].BottomLine = vwLast;
  64.  
  65.         for( line = vwText->First; line->Next; line = line->Next ) {
  66.             if ( line == vwBlocks[ mark ].TopLine) break;
  67.             else if ( line == vwBlocks[ mark ].BottomLine) {
  68.                 lt = vwBlocks[ mark ].TopLine;
  69.                 vwBlocks[ mark ].TopLine    = line->Prev;
  70.                 vwBlocks[ mark ].BottomLine = lt->Next;
  71.                 break;
  72.             }
  73.         }
  74.         sprintf(( char * )&errl[ 0 ], "Block %-2.2ld marked !", mark + 1 );
  75.         ErrorLine( errl );
  76.         return;
  77.     } else {
  78.         sprintf(( char * )&errl[ 0 ], "Block %-2.2ld already marked !", mark + 1 );
  79.         Error( errl );
  80.         return;
  81.     }
  82. }
  83.  
  84. void UnSetMark( UWORD mark )
  85. {
  86.     UBYTE   errl[ 31 ];
  87.  
  88.     if ( ! vwText )    return;
  89.  
  90.     vwBlocks[ mark ].TopLine = vwBlocks[ mark ].BottomLine = NULL;
  91.  
  92.     sprintf(( char * )&errl[ 0 ], "Block %-2.2ld unmarked !", mark + 1 );
  93.     ErrorLine( errl );
  94. }
  95.  
  96. void JumpMark( UWORD mark )
  97. {
  98.     struct Line *line;
  99.  
  100.     if ( ! vwText )    return;
  101.  
  102.     if ( ! CheckBlock( mark ))
  103.         return;
  104.  
  105.     vwFirst = vwBlocks[ mark ].TopLine;
  106.     Inform( ClearStr );
  107.     DisplayText();
  108.  
  109.     vwShown = 0L;
  110.  
  111.     for ( line = vwText->First; line != vwLast; line = line->Next )
  112.         vwShown += line->Size;
  113.  
  114.     Percentage();
  115. }
  116.  
  117. void SaveBlock( WORD mark )
  118. {
  119.     struct BuffIO       *ofile = NULL;
  120.     struct Line         *f, *t;
  121.     ULONG                ret;
  122.     UBYTE               *title;
  123.  
  124.     if ( mark >= 0 ) {
  125.         if ( ! CheckBlock( mark ))
  126.             return;
  127.     } else {
  128.         if ( ! vwText )
  129.             return;
  130.     }
  131.  
  132.     if( mark >= 0 ) title = "Save textblock as...";
  133.     else            title = "Save text as...";
  134.  
  135.     if( vwArgs[ 11 ] ) ON_SPRITE;
  136.  
  137.     ret = FileRequest( vwWindow, title, vwFile, vwPath, vwPatt, FR_SAVE );
  138.  
  139.     if ( vwArgs[ 11 ] ) OFF_SPRITE;
  140.  
  141.     if ( ! ret ) {
  142.         InfoLine();
  143.         return;
  144.     }
  145.  
  146.     Busy();
  147.     if ( ofile = BOpen( vwName, MODE_NEWFILE )) {
  148.         ErrorLine( "Writing..." );
  149.         if ( mark >= 0 ) {
  150.             f = vwBlocks[ mark ].TopLine;
  151.             t = vwBlocks[ mark ].BottomLine;
  152.         } else {
  153.             f = vwText->First;
  154.             t = vwText->Last->Next;
  155.         }
  156.  
  157.         for( ; f != t; f = f->Next )
  158.             BPutS( ofile, f );
  159.  
  160.         if( BClose( ofile ) != ASE_OK)
  161.             Error( "Write Error." );
  162.     } else
  163.         Error( "Can't open write file." );
  164.  
  165.     Ready();
  166.     InfoLine();
  167. }
  168.