Files
harbour-core/contrib/hbnf/pchr.prg
vszakats 9687850865 2013-03-16 02:10 UTC+0100 Viktor Szakats (harbour syenar.net)
* (all files)
    * stripped svn header
    * minor cleanups
    ; use following command to find out the history of files:
       git log
       git log --follow
       git blame
       git annotate
2013-03-16 02:11:42 +01:00

143 lines
5.4 KiB
Plaintext

/*
* Author....: Jim Gale
* CIS ID....: 73670,2561
*
* This is an original work by Jim Gale and is placed in the
* public domain.
*
* Modification history:
* ---------------------
*
* Rev 1.2 17 Aug 1991 15:40:16 GLENN
* Don Caton fixed some spelling errors in the doc
*
* Rev 1.1 15 Aug 1991 23:06:00 GLENN
* Forest Belt proofread/edited/cleaned up doc
*
* Rev 1.0 12 Jun 1991 01:45:04 GLENN
* Initial revision.
*
*/
/* NOTE: In original NF, control codes were also accepted when
having extra characters (f.e. "/GRAPHICMODE" instead of "/GRAPHIC"),
but only if _SET_EXACT was set to .F., Harbour accepts them
that way regardless of _SET_EXACT setting. [vszakats] */
#define LEFTEQUAL( l, r ) ( Left( l, Len( r ) ) == r )
FUNCTION ft_PChr( c_nums )
LOCAL c_ret := "", c_st := 0, c_part, c_st2, c_hex := "0123456789ABCDEF"
LOCAL c_upper, c_t1, c_t2
IF Left( c_nums, 1 ) == "," .OR. RTrim( c_nums ) == ""
RETURN ""
ENDIF
c_nums := RTrim( c_nums ) + ",~,"
c_part := SubStr( c_nums, c_st + 1, At( ",", SubStr( c_nums, c_st + 2 ) ) )
DO WHILE ! ( c_part == "~" .OR. c_part == "" )
IF Left( c_part, 1 ) == '"'
c_st2 := At( '"', SubStr( c_part, 2 ) ) + 1
c_ret := c_ret + SubStr( c_part, 2, c_st2 - 2 )
ELSEIF Left( c_part, 1 ) == "&"
c_upper := Upper( c_part )
c_t1 := At( SubStr( c_upper, 2, 1 ), c_hex ) - 1
IF c_t1 > -1
c_t2 := At( SubStr( c_upper, 3, 1 ), c_hex ) - 1
IF c_t2 > -1
c_t1 := c_t1 * 16 + c_t2
ENDIF
c_ret := c_ret + Chr( c_t1 )
ENDIF
ELSEIF ( Val( c_part ) > 0 .AND. Val( c_part ) < 256 ) .OR. c_part == "0"
c_ret := c_ret + Chr( Val( c_part ) )
ELSE
IF Left( c_part, 1 ) == "/"
c_upper := Upper( c_part )
DO CASE
CASE LEFTEQUAL( c_upper, "/GRAPHIC" )
c_ret += hb_BChar( 27 ) + hb_BChar( 116 ) + hb_BChar( 1 )
CASE LEFTEQUAL( c_upper, "/ITALIC" )
c_ret += hb_BChar( 27 ) + hb_BChar( 116 ) + hb_BChar( 0 )
CASE LEFTEQUAL( c_upper, "/PICTURE" )
c_ret += ;
hb_BChar( 27 ) + hb_BChar( 116 ) + hb_BChar( 1 ) + ;
hb_BChar( 27 ) + hb_BChar( 120 ) + hb_BChar( 1 ) + ;
hb_BChar( 27 ) + hb_BChar( 107 ) + hb_BChar( 1 ) + ;
hb_BChar( 27 ) + hb_BChar( 77 ) + hb_BChar( 27 ) + "U"
CASE LEFTEQUAL( c_upper, "/COND" ) .OR. LEFTEQUAL( c_upper, "/SI" )
c_ret += hb_BChar( 15 )
CASE LEFTEQUAL( c_upper, "/ROMAN" )
c_ret += hb_BChar( 27 ) + hb_BChar( 107 ) + hb_BChar( 0 )
CASE LEFTEQUAL( c_upper, "/SANS" )
c_ret += hb_BChar( 27 ) + hb_BChar( 107 ) + hb_BChar( 1 )
CASE LEFTEQUAL( c_upper, "/NLQ" )
c_ret += hb_BChar( 27 ) + hb_BChar( 120 ) + hb_BChar( 1 )
CASE LEFTEQUAL( c_upper, "/DRAFT" )
c_ret += hb_BChar( 27 ) + hb_BChar( 120 ) + hb_BChar( 0 )
CASE LEFTEQUAL( c_upper, "/ELITE" )
c_ret += hb_BChar( 27 ) + hb_BChar( 77 )
CASE LEFTEQUAL( c_upper, "/PICA" )
c_ret += hb_BChar( 27 ) + hb_BChar( 80 )
CASE LEFTEQUAL( c_upper, "/EMPHOFF" )
c_ret += hb_BChar( 27 ) + hb_BChar( 70 )
CASE LEFTEQUAL( c_upper, "/EMPH" )
c_ret += hb_BChar( 27 ) + hb_BChar( 69 )
CASE LEFTEQUAL( c_upper, "/1/6" )
c_ret += hb_BChar( 27 ) + hb_BChar( 50 )
CASE LEFTEQUAL( c_upper, "/1/8" )
c_ret += hb_BChar( 27 ) + hb_BChar( 48 )
CASE LEFTEQUAL( c_upper, "/SKIPOFF" )
c_ret += hb_BChar( 27 ) + hb_BChar( 79 )
CASE LEFTEQUAL( c_upper, "/SKIP" )
c_ret += hb_BChar( 27 ) + hb_BChar( 78 )
CASE LEFTEQUAL( c_upper, "/FF" ) .OR. LEFTEQUAL( c_upper, "/EJECT" )
c_ret += hb_BChar( 12 )
CASE LEFTEQUAL( c_upper, "/INIT" ) .OR. LEFTEQUAL( c_upper, "/RESET" )
c_ret += hb_BChar( 27 ) + hb_BChar( 64 )
CASE LEFTEQUAL( c_upper, "/SPANISH" )
c_ret += hb_BChar( 27 ) + hb_BChar( 82 ) + hb_BChar( 12 )
CASE LEFTEQUAL( c_upper, "/USA" )
c_ret += hb_BChar( 27 ) + hb_BChar( 82 ) + hb_BChar( 0 )
CASE LEFTEQUAL( c_upper, "/ONE" )
c_ret += hb_BChar( 27 ) + "U" + hb_BChar( 1 )
CASE LEFTEQUAL( c_upper, "/TWO" )
c_ret += hb_BChar( 27 ) + "U" + hb_BChar( 0 )
CASE LEFTEQUAL( c_upper, "/FAST" )
c_ret += hb_BChar( 27 ) + "s" + hb_BChar( 0 )
CASE LEFTEQUAL( c_upper, "/SLOW" )
c_ret += hb_BChar( 27 ) + "s" + hb_BChar( 1 )
CASE LEFTEQUAL( c_upper, "/OFF" )
c_ret += hb_BChar( 19 )
CASE LEFTEQUAL( c_upper, "/ON" )
c_ret += hb_BChar( 17 )
CASE LEFTEQUAL( c_upper, "/BEEP" ) .OR. LEFTEQUAL( c_upper, "/BELL" )
c_ret += hb_BChar( 7 )
CASE LEFTEQUAL( c_upper, "/CAN" )
c_ret += hb_BChar( 24 )
ENDCASE
ENDIF
ENDIF
c_st := At( ",", SubStr( c_nums, c_st + 1 ) ) + c_st
c_part := SubStr( c_nums, c_st + 1, At( ",", SubStr( c_nums, c_st + 2 ) ) )
ENDDO
RETURN c_ret