home *** CD-ROM | disk | FTP | other *** search
-
- /* *** main.c ***************************************************************
- *
- * XText -- Example Program
- * from Book 1 of the Amiga Programmers' Suite by RJ Mical
- *
- * Copyright (C) 1986, 1987, Robert J. Mical
- * All Rights Reserved.
- *
- * Created for Amiga developers.
- * Any or all of this code can be used in any program as long as this
- * entire notice is retained, ok? Thanks.
- *
- * HISTORY NAME DESCRIPTION
- * ----------- -------------- --------------------------------------------
- * 27 Oct 86 RJ Add XText buffer stuff, prepare for release
- * March 86 RJ Incorporated this code in Sidecar
- * 26 Jan 86 RJ Mical Created this file (on my birthday!)
- *
- * *********************************************************************** */
-
-
- #include "xtext.h"
-
- extern struct Window *OpenWindow();
- extern struct XTextSupport *MakeXTextSupport();
- extern UBYTE *MakeXTextFont();
-
-
-
- /* Define XTEXTING if you want to see XText(), comment it out if you want
- * to see normal Amiga Text() processing.
- */
- #define XTEXTING
-
- /* If you have asked to see XText() (by defined XTEXTING above), then
- * define SHOW_SLIM_XTEXTING to see the slower, slimmer version of XText().
- * Comment out this definition if you want to see the faster, fatter XText().
- */
- /* #define SHOW_SLIM_XTEXTING */
-
- /* If you have asked to see XText() (by defined XTEXTING above), then
- * define TOPAZ11_XTEXTING to see the Topaz-11 disk-based font used.
- * Comment out this definition if you want to see normal Topaz-8 XText.
- */
- /* #define TOPAZ11_XTEXTING */
-
-
-
-
- struct NewWindow NewXTextWindow =
- {
- 0, 0, /* LeftEdge, TopEdge */
- 640, 200, /* Width, Height */
- -1, -1, /* Detail/BlockPens */
- CLOSEWINDOW, /* IDCMP Flags */
- WINDOWDEPTH | WINDOWCLOSE | SMART_REFRESH | ACTIVATE | BORDERLESS
- | NOCAREREFRESH,
- /* Window Specification Flags */
- NULL, /* FirstGadget */
- NULL, /* Checkmark */
- (UBYTE *)"XText Window", /* WindowTitle */
- NULL, /* Screen */
- NULL, /* SuperBitMap */
- 96, 30, /* MinWidth, MinHeight */
- 640, 200, /* MaxWidth, MaxHeight */
- WBENCHSCREEN,
- };
-
-
- UBYTE buffer[23][80];
-
-
- struct TextAttr DiskFont =
- {
- (UBYTE *)"topaz.font",
- 11,
- FS_NORMAL, /* equal 0 */
- FPB_DISKFONT,
- };
-
-
- VOID myAddFont();
- VOID infoLine();
- VOID advancePens();
-
-
-
- VOID main()
- {
- struct Window *window;
- struct XTextSupport *xtext;
- SHORT line, nextchar, i, i2, lineindex;
- LONG count;
- struct TextAttr *testfont;
-
- IntuitionBase = (struct IntuitionBase *)
- OpenLibrary("intuition.library", 0);
- GfxBase = (struct GfxBase *)OpenLibrary("graphics.library", 0);
- if ((IntuitionBase == NULL) || (GfxBase == NULL)) goto DONE;
-
- if ((window = OpenWindow(&NewXTextWindow)) == NULL) goto DONE;
-
- SetAPen(window->RPort, 1);
- RectFill(window->RPort, 28, 0, 586, 9);
- SetWindowTitles(window,
- " XText Demonstration Window", -1);
- Move(window->RPort, 216, 32);
- Text(window->RPort, "Please wait a moment ...", 24);
-
-
- #ifdef TOPAZ11_XTEXTING
- testfont = &DiskFont;
- #else
- testfont = NULL;
- #endif
-
-
- #ifdef SHOW_SLIM_XTEXTING
- xtext = MakeXTextSupport(window->RPort, testfont, 80, SLIM_XTEXT);
- #else
- xtext = MakeXTextSupport(window->RPort, testfont, 80, NULL);
- #endif
- if (xtext == NULL) goto DONE;
-
-
- #ifdef XTEXTING /* Do you want to see an example of XText() ? */
- myAddFont(xtext, FSF_BOLD, BOLD_FONT, testfont);
- myAddFont(xtext, FSF_UNDERLINED, ULINE_FONT, testfont);
- myAddFont(xtext, FSF_UNDERLINED | FSF_BOLD, ULINE_BOLD_FONT, testfont);
- myAddFont(xtext, FSF_ITALIC, ITALIC_FONT, testfont);
- myAddFont(xtext, FSF_ITALIC | FSF_BOLD, ITALIC_BOLD_FONT, testfont);
- myAddFont(xtext, FSF_ITALIC | FSF_UNDERLINED,
- ITALIC_ULINE_FONT, testfont);
- myAddFont(xtext, FSF_ITALIC | FSF_UNDERLINED | FSF_BOLD,
- ITALIC_ULINE_BOLD_FONT, testfont);
- #endif
-
- nextchar = 32;
- for (i = 0; i < 23; i++)
- for (i2 = 0; i2 < 80; i2++)
- {
- buffer[i][i2] = nextchar++;
- if (nextchar >= 256) nextchar = 0;
- }
-
- line = 12;
- lineindex = 0;
- count = 0;
-
- while (NOT GetMsg(window->UserPort))
- {
- #ifdef XTEXTING
- if (lineindex == 2) infoLine(xtext, line);
- else XText(xtext, &buffer[lineindex][0], 80, 0, line);
- #else
- Move(window->RPort, 0, line);
- Text(window->RPort, &buffer[lineindex][0], 80);
- #endif
-
- line += xtext->CharHeight;
- lineindex++;
-
- if (line > 192)
- {
- count++;
- sprintf(&buffer[3][33], "- %ld -", count);
- line = 12;
- lineindex = 0;
-
- xtext->FontSelect++;
- if (xtext->FontSelect >= 8)
- {
- xtext->FontSelect = 0;
- advancePens(xtext);
- }
- #ifndef XTEXTING
- SetAPen(window->RPort, xtext->FrontPen);
- SetBPen(window->RPort, xtext->BackPen);
- SetSoftStyle(window->RPort, xtext->FontSelect, -1);
- #endif
- }
- }
-
-
-
- DONE:
-
- if (xtext) UnmakeXTextSupport(xtext);
- if (window) CloseWindow(window);
- if (IntuitionBase) CloseLibrary(IntuitionBase);
- if (GfxBase) CloseLibrary(GfxBase);
- }
-
-
-
- VOID myAddFont(xtext, style, index, font)
- struct XTextSupport *xtext;
- SHORT style, index;
- struct TextAttr *font;
- {
- if (font == NULL) font = &SafeFont;
- font->ta_Style = style;
-
- /* I could check if the next routine returned NULL, but since it
- * doesn't hurt anything if it fails, I just won't bother. It's ok.
- */
- MakeXTextFont(font, xtext, index);
- }
-
-
-
- VOID infoLine(xtext, line)
- struct XTextSupport *xtext;
- SHORT line;
- {
- SHORT selectsave, pen;
-
- selectsave = xtext->FontSelect;
-
- pen = xtext->FrontPen;
- xtext->FrontPen = xtext->BackPen;
- xtext->BackPen = pen;
-
- xtext->FontSelect = NORMAL_FONT;
- XText(xtext,
- "- Every time the color changes the text has been entirely redrawn ",
- 66, 0, line);
- xtext->FontSelect = BOLD_FONT;
- XText(xtext, "eight times! -", -1, 66 * 8, line);
-
- pen = xtext->FrontPen;
- xtext->FrontPen = xtext->BackPen;
- xtext->BackPen = pen;
- xtext->FontSelect = selectsave;
- }
-
-
-
- VOID advancePens(xtext)
- struct XTextSupport *xtext;
- {
- SHORT frontpen, backpen;
-
- frontpen = xtext->FrontPen;
- backpen = xtext->BackPen;
-
- backpen++;
- if (backpen == frontpen) backpen++;
- if (backpen > 3)
- {
- backpen = 0;
- frontpen++;
- if (frontpen > 3)
- {
- frontpen = 0;
- backpen = 1;
- }
- }
- xtext->FrontPen = frontpen;
- xtext->BackPen = backpen;
- }
-
-
-