This is hdshowany.m in view mode; [Download] [Up]
/*
* (a) (C) 1990 by Adobe Systems Incorporated. All rights reserved.
*
* (b) If this Sample Code is distributed as part of the Display PostScript
* System Software Development Kit from Adobe Systems Incorporated,
* then this copy is designated as Development Software and its use is
* subject to the terms of the License Agreement attached to such Kit.
*
* (c) If this Sample Code is distributed independently, then the following
* terms apply:
*
* (d) This file may be freely copied and redistributed as long as:
* 1) Parts (a), (d), (e) and (f) continue to be included in the file,
* 2) If the file has been modified in any way, a notice of such
* modification is conspicuously indicated.
*
* (e) PostScript, Display PostScript, and Adobe are registered trademarks of
* Adobe Systems Incorporated.
*
* (f) THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO
* CHANGE WITHOUT NOTICE, AND SHOULD NOT BE CONSTRUED
* AS A COMMITMENT BY ADOBE SYSTEMS INCORPORATED.
* ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY
* OR LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO
* WARRANTY OF ANY KIND (EXPRESS, IMPLIED OR STATUTORY)
* WITH RESPECT TO THIS INFORMATION, AND EXPRESSLY
* DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT
* OF THIRD PARTY RIGHTS.
*/
/*
filename : hdshowany.m
date created : 9-feb-90
last updated : 26-oct-90
author : ross a jeynes
porter : ken r fromm
purpose : showany routine for generic driver. This is the central text-setting
routine. Handles (font changes-temporarily removed), kerning,
underline, superscript, etc.
*/
#import "hdshowany.h"
#import "DrawingViewWraps.h"
#import <objc/Storage.h>
#import <dpsclient/dpsclient.h>
#import <dpsclient/wraps.h>
static void hd_showstr(int start, int end, ShowStruct *show, float spaceval, float trackval)
{
if (start == end)
return;
/*
* Decide wether to use show, ashow, widthshow or awidthshow
*/
if (spaceval == 0.0)
{
if (trackval == 0.0)
PSWShow((char *)((show->text)+start), (end-start));
else
PSWAshow(trackval, 0, (char *)((show->text)+start), (end-start));
}
else
{
if (trackval == 0.0)
PSWWidthshow(spaceval, 0, 32, (char *)((show->text)+start), (end-start));
else
PSWAwidthshow(spaceval, 0, 32, trackval, 0, (char *)((show->text)+start), (end-start));
}
}
void ShowAny(ShowStruct *show)
{
int lastshow=0; /* last "show" went from this point in show->text[] */
/* indexes into ShowStruct arrays */
int textptr =0; /* current character in show->text[] */
int prkernptr =0; /* pair kern */
int absmovptr =0; /* absolute moveto array index */
int spaceadjptr =0; /* space adjustment for justification */
int trackkernptr =0; /* track kern */
float spaceval =0.0;
float trackval =0.0;
while (textptr < show->textlen)
{
if (show->attr[textptr] == SA_NOATTR)
{
textptr++;
continue;
}
if (lastshow != textptr)
hd_showstr(lastshow, textptr, show, spaceval, trackval);
if (show->attr[textptr] & SA_ABSMOV)
{
PSmoveto(show->absmov[absmovptr].x, show->absmov[absmovptr].y);
absmovptr++;
}
if (show->attr[textptr] & SA_PRKERN)
PSrmoveto(show->prkern[prkernptr++], 0);
if (show->attr[textptr] & SA_TRACKADJ)
trackval = (show->trackkernlen ? show->trackkern[trackkernptr++] : 0.0);
if (show->attr[textptr] & SA_SPACEADJ)
spaceval = (show->spaceadjlen ? show->spaceadj[spaceadjptr++] : 0.0);
lastshow = textptr++; /* mark last show and increment show pointer */
}
hd_showstr(lastshow, textptr, show, spaceval, trackval);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.