home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magazyn Exec 3
/
CD_Magazyn_EXEC_nr_3.iso
/
Recent
/
misc
/
edu
/
WhirlDisc.lha
/
WhirlDisc
/
Source
/
paragraph.c
< prev
next >
Wrap
C/C++ Source or Header
|
2000-08-11
|
2KB
|
104 lines
/*
File: paragraph.c
Author: Neil Cafferkey
Copyright (C) 2000 Neil Cafferkey
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA.
*/
#include "viewer.h"
#include <exec/memory.h>
#include "paragraph_protos.h"
#include "general_protos.h"
/* Function: CreateParagraph
* =========================
* Creates a Paragraph.
*/
Paragraph CreateParagraph(UBYTE *raw_paragraph,UWORD length)
{
Paragraph paragraph;
if((paragraph=(Paragraph)AllocMem(sizeof(Paragraph_imp),MEMF_ANY))!=NULL)
{
paragraph->text=raw_paragraph;
paragraph->length=length;
}
else
{
ReportError(NULL,ERROR_REPORT_MEM,NULL,0);
}
return paragraph;
}
/* Function: FitParagraphLine
* ==========================
* Calculates the number of characters that will fit on a line of a given
* pixel width.
*/
UWORD FitParagraphLine(Paragraph paragraph,struct Window *window,
UWORD offset)
{
struct TextExtent temp_extent;
ULONG char_count;
UBYTE *p,*q=paragraph->text;
char_count=TextFit(window->RPort,paragraph->text+offset,
paragraph->length-offset,&temp_extent,NULL,1,window->GZZWidth
-MARGIN_WIDTH*2,32767);
/*
printf("FitParagraphLine:offset=%u\n",offset);
printf("FitParagraphLine:paragraph->length=%u\n",paragraph->length);
printf("FitParagraphLine:window->Width=%u\n",window->Width);
*/
/* Find the last space in the fitted substring */
if(offset+char_count!=paragraph->length)
{
for(p=paragraph->text+offset+char_count;(p>q)&&(*p!=' ');p--)
char_count--;
}
/*printf("FitParagraphLine:char_count=%u\n",char_count);*/
return char_count;
}
/* Function: KillParagraph
* =======================
* Destroys a paragraph.
*/
VOID KillParagraph(Paragraph paragraph)
{
FreeMem(paragraph,sizeof(Paragraph_imp));
}