home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GEMini Atari
/
GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso
/
zip
/
mint
/
atarimgr.lzh
/
LIB
/
TEXT.C
< prev
next >
Wrap
C/C++ Source or Header
|
1990-10-20
|
2KB
|
72 lines
/* Copyright (c) 1987 Bellcore
* All Rights Reserved
* Permission is granted to copy or use this program, EXCEPT that it
* may not be sold for profit, the copyright notice must be reproduced
* on copies, and credit should be given to Bellcore where it is due.
* BELLCORE MAKES NO WARRANTY AND ACCEPTS NO LIABILITY FOR THIS PROGRAM.
*/
/* $Header: text.c,v 4.1 88/06/21 13:41:05 bianchi Exp $
$Source: /tmp/mgrsrc/lib/RCS/text.c,v $
*/
static char RCSid_[] = "$Source: /tmp/mgrsrc/lib/RCS/text.c,v $$Revision: 4.1 $";
#include "term.h"
#define TRUE 1
#define FALSE 0
int
text(s,x,y,font,angle,size_x, size_y)
register char *s; /* string to be printed */
register int x, y; /* starting coordinates */
int font; /* font #, from 0-4 --- 0: line font, 1: seriff type, */
/* 2: Greek, 3: cursive, 4: old English */
int angle; /* string rotation in degrees */
int size_x; /* character size 1000 ~= full window sized character */
int size_y; /* character size 1000 ~= full window sized character */
{
register char ch; /* the character being printed */
register int i; /* the "workin' man" of variables */
register int xc,yc; /* current character coordinates */
register int penup; /* a flag */
short xmax, xmin; /* maximum character extent */
short pts[250]; /* vector points */
int npts; /* number of vector points */
int isin(), icos(); /* integer sin, cosine functions */
/* compute scaled x-form data */
int sinx = size_x *isin(angle);
int cosx = size_x *icos(angle);
int siny = size_y *isin(angle);
int cosy = size_y *icos(angle);
if (font > 4 || font < 0)
font = 0;
while(ch = *s++){
if(font == 0)
sfont(0,ch,&xmin,&xmax,&npts,pts);
else
scribe(font-1,ch,&xmin,&xmax,&npts,pts);
penup = TRUE; /* pen starts up on each letter */
for(i=0; i < npts; i += 2)
if(pts[i] == 31)
penup = TRUE;
else{
xc = (pts[i]*cosx - pts[i+1]*siny)>>14;
yc = (pts[i]*sinx + pts[i+1]*cosy)>>14;
if(penup) /* go to the new point */
m_go(x + xc, y - yc);
else /* draw to the next point */
m_draw(x + xc,y - yc);
penup = FALSE;
}
x += ((xmax-xmin)*cosx)>>14;
y -= ((xmax-xmin)*sinx)>>14;
}
}