home *** CD-ROM | disk | FTP | other *** search
- /* DrawText.c © Paweî Marciniak <pmarciniak@lodz.home.pl>*/
- #include <string.h>
- #include <exec/types.h>
- #include <exec/memory.h>
- #include <graphics/text.h>
- #include <utility/tagitem.h>
- #include <proto/exec.h>
- #include <proto/graphics.h>
- #include <proto/utility.h>
-
- #include "/include/libraries/image.h"
-
-
- /**DrawText*************************************************************/
-
-
- /* DrawText() (c) 1997 Paweî Marciniak
- Modify date | Version | Comment
- ---------------+-----------+------------------------------
- 06-07-97 10:37 | 1.0 |
- 14-08-97 15:30 | 2.0 |
- */
- LONG __saveds __asm DrawTextA( register __a0 struct TagItem * Tags )
- {
- struct TagItem *ti, *TagsTmp=Tags;
-
- STRPTR texts=0;
- struct TextFont *TxFontA=0, *TxFontB=0;
- struct RastPort *RastPort=0;
- UWORD Top=0, Left=0, Width=0, Height=0;
-
- STRPTR text=NULL;
- STRPTR memory=NULL;
-
- char *TextTab[20];
- struct TextFont *TabFont[20];
- int TabStyle[20];
-
- int licznik=0;
- int loop=0, High=0;
-
- /* Tags */
- while ( ti = NextTagItem( &TagsTmp ) )
- {
- switch ( ti->ti_Tag )
- {
- case DT_FontA:
- TxFontA = ( struct TextFont * )ti->ti_Data;
- break;
-
- case DT_FontB:
- TxFontB = ( struct TextFont * )ti->ti_Data;
- break;
-
- case DT_Texts:
- texts = ( STRPTR )ti->ti_Data;
- break;
-
- case DT_Top:
- Top = ti->ti_Data;
- break;
-
- case DT_Left:
- Left = ti->ti_Data;
- break;
-
- case DT_Width:
- Width = ti->ti_Data;
- break;
-
- case DT_Height:
- Height = ti->ti_Data;
- break;
-
- case DT_RastPort:
- RastPort = (struct RastPort *)ti->ti_Data;
- break;
-
- default:
- break;
- }
- }
-
- /* Alokujemy pamiëê dla tekstu */
- if(!(memory=AllocVec( (strlen(texts)+1), MEMF_PUBLIC )))
- return FALSE;
- text=memory;
-
- /* Kopiujemy "texts" do naszej pamiëci "text" */
- strcpy(text, texts);
-
- /* Wpisujemy adres pierwszego tekstu do tablicy */
- if(*text == '1')
- {
- TabFont[licznik]=TxFontB;
- text++;
- }
- else
- TabFont[licznik]=TxFontA;
-
- switch(*text)
- {
- case 'b':
-
- TabStyle[licznik]=FSF_BOLD;
- text++;
- break;
-
- case 'i':
-
- TabStyle[licznik]=FSF_ITALIC;
- text++;
- break;
-
- case 'u':
-
- TabStyle[licznik]=FSF_UNDERLINED;
- text++;
- break;
-
- default:
-
- TabStyle[licznik]=FS_NORMAL;
- break;
- }
- TextTab[licznik]=text;
-
- /* Zamieniamy wszystkie znaki "\n" na "\0", */
- /* i wpisujemy ich adresy do tablicy adresy */
- /* Jeôli po '\n' wystâpi znak '1' to ta linia */
- /* tekstu zastanie narysowana czcionkâ TxFontB */
- /* w przeciwnym przeciwny przypadku TxFontA */
-
- while(*text != '\0')
- {
- if(*text == '\n')
- {
- *text='\0';
- licznik++;
- text++;
- if(*text == '1')
- {
- TabFont[licznik]=TxFontB;
- text++;
- }
- else
- TabFont[licznik]=TxFontA;
-
- switch(*text)
- {
- case 'b':
- TabStyle[licznik]=FSF_BOLD;
- text++;
- break;
-
- case 'i':
- TabStyle[licznik]=FSF_ITALIC;
- text++;
- break;
-
- case 'u':
- TabStyle[licznik]=FSF_UNDERLINED;
- text++;
- break;
-
- default:
- TabStyle[licznik]=FS_NORMAL;
- break;
- }
- TextTab[licznik]=text;
- }
- else
- text++;
- }
-
-
- SetDrMd( RastPort, JAM1 );
- while(loop <= licznik)
- {
- SetFont( RastPort, TabFont[loop] );
- SetSoftStyle( RastPort, TabStyle[loop], FSF_BOLD | FSF_ITALIC | FSF_UNDERLINED );
- Move( RastPort, Left+(Width-(TextLength(RastPort, TextTab[loop], strlen(TextTab[loop]))))/2,
- Top+( RastPort->TxBaseline+loop)+High );
- Text( RastPort, TextTab[loop], strlen(TextTab[loop]) );
-
- High+=(RastPort->TxHeight);
- loop++;
- }
-
- if(memory)
- FreeVec(memory);
- memory=NULL;
-
- return TRUE;
- }
-