;;; -*- MODE:common-LISP; BASE:10; PACKAGE:IMAGEN;  -*-

;;;                           RESTRICTED RIGHTS LEGEND

;;;Use, duplication, or disclosure by the Government is subject to
;;;restrictions as set forth in subdivision (c)(1)(ii) of the Rights in
;;;Technical Data and Computer Software clause at 52.227-7013.
;;;
;;;                     TEXAS INSTRUMENTS INCORPORATED.
;;;                              P.O. BOX 2909
;;;                           AUSTIN, TEXAS 78769
;;;                                 MS 2151
;;;
;;; Copyright (C) 1984-1989 Texas Instruments Incorporated. All rights reserved.
;;;
;;; This file contains the functions that return as strings all the imPRESS
;;; command sequences.  They are defined in the order of their presentation
;;; in Chapter 5 of the imPRESS manual.  The function and argument names are
;;; those used in that manual.  All arguments are of type &KEY, so the caller
;;; must use the imPRESS name for each argument in his invocation.
;;;


(DEFUN IMPRESS-ENDPAGE ()
  (princ-to-string (int-char 219))) 


(DEFUN IMPRESS-EOF ()
  (princ-to-string (int-char 255))) 


(DEFUN IMPRESS-NO-OP ()
  (princ-to-string (int-char 254))) 


(DEFUN IMPRESS-SET-HV-SYSTEM (&KEY ORIGIN AXES ORIENTATION)
  (STRING-APPEND 205
		 (+ (LSH (LOGAND ORIGIN 3) 5) (LSH (LOGAND AXES 3) 3) (LOGAND ORIENTATION 7)))) 


(DEFUN IMPRESS-SET-ABS-H (&KEY NEW-H)
  (STRING-APPEND 135 (IMPRESS-OUTPUT-16 NEW-H))) 


(DEFUN IMPRESS-SET-ABS-V (&KEY NEW-V)
  (STRING-APPEND 137 (IMPRESS-OUTPUT-16 NEW-V))) 


(DEFUN IMPRESS-SET-REL-H (&KEY DELTA-H)
  (STRING-APPEND 136 (IMPRESS-OUTPUT-16 DELTA-H))) 


(DEFUN IMPRESS-SET-REL-V (&KEY DELTA-V)
  (STRING-APPEND 138 (IMPRESS-OUTPUT-16 DELTA-V))) 


(DEFUN IMPRESS-PAGE ()
  (princ-to-string  (int-char 213))) 


(DEFUN IMPRESS-SET-ADV-DIRS (&KEY MAIN-DIRECTION SECONDARY-DIRECTION)
  (STRING-APPEND 206 (+ (LSH (LOGAND MAIN-DIRECTION 3) 1) (LOGAND SECONDARY-DIRECTION 1)))) 


(DEFUN IMPRESS-MMOVE (&KEY DELTA-M)
  (STRING-APPEND 133 (IMPRESS-OUTPUT-16 DELTA-M))) 


(DEFUN IMPRESS-SMOVE (&KEY DELTA-S)
  (STRING-APPEND 134 (IMPRESS-OUTPUT-16 DELTA-S))) 


(DEFUN IMPRESS-SET-SP (&KEY SPACE-SIZE)
  (STRING-APPEND 210 (IMPRESS-OUTPUT-16 SPACE-SIZE))) 


(DEFUN IMPRESS-SP ()
  (princ-to-string (int-char 128))) 


(DEFUN IMPRESS-SP1 ()
  (princ-to-string (int-char 129))) 


(DEFUN IMPRESS-MPLUS ()
  (princ-to-string (int-char 131))) 


(DEFUN IMPRESS-MMINUS ()
  (princ-to-string (int-char 132))) 


(DEFUN IMPRESS-CRLF ()
  (princ-to-string (int-char 197))) 


(DEFUN IMPRESS-SET-BOL (&KEY LINE-BEGIN)
  (STRING-APPEND 209 (IMPRESS-OUTPUT-16 LINE-BEGIN))) 


(DEFUN IMPRESS-SET-IL (&KEY INTER-LINE)
  (STRING-APPEND 208 (IMPRESS-OUTPUT-16 INTER-LINE))) 


;;;
;;; DECLARE-A-GLYPH ROUTINE...
;;;

(DEFUN IMPRESS-BGLY-PREFIX (&KEY FAMILY MEMBER)
  (STRING-APPEND 199 (IMPRESS-OUTPUT-16 (+ (LSH (LOGAND FAMILY 127) 7) (LOGAND MEMBER 127))))) 


;;;
;;; FONT MAP & FAMILY COMMANDS...
;;;


(DEFUN IMPRESS-CREATE-MAP (&KEY MAP-NAME N-TRIPLES &REST TRIPLES-LIST &AUX (X (STRING-APPEND 222 MAP-NAME N-TRIPLES)))
 ;;  Each element of triples-list is '(starting-member starting-symbol count). 
  (LOOP FOR TRIPLE IN TRIPLES-LIST DO
     (SETQ X (STRING-APPEND X (FIRST TRIPLE) (IMPRESS-OUTPUT-16 (SECOND TRIPLE)) (LAST TRIPLE)))
     FINALLY (RETURN X))) 


(DEFUN IMPRESS-CREATE-FAMILY-TABLE (&KEY FAMILY FONT-NAME)
  "Defines a single-font family using map 0.
        family    is an integer between 0 and 95. naming the family
        font-name is a string naming an imPRESS font."
  (STRING-APPEND 221 FAMILY 1 0 FONT-NAME 0)) 


(DEFUN IMPRESS-SET-FAMILY (&KEY FAMILY)
  (STRING-APPEND 207 FAMILY)) 


(DEFUN IMPRESS-BRULE (&KEY WIDTH HEIGHT TOP-OFFSET)
  (STRING-APPEND 193 (IMPRESS-OUTPUT-16 WIDTH) (IMPRESS-OUTPUT-16 HEIGHT)
		 (IMPRESS-OUTPUT-16 TOP-OFFSET))) 

;;;
;;; GRAPHICS ROUTINES...
;;;


(DEFUN IMPRESS-CREATE-PATH (&KEY VERTEX-COUNT &REST H-V-COORD-LIST &AUX
  (X (STRING-APPEND 230 (IMPRESS-OUTPUT-16 VERTEX-COUNT))))
 ;;  Each element in h-v-coord-list is '(x-coord y-coord).
  (LOOP FOR X-Y IN H-V-COORD-LIST DO
     (SETQ X (STRING-APPEND (IMPRESS-OUTPUT-16 (FIRST X-Y)) (IMPRESS-OUTPUT-16 (LAST X-Y))))
     FINALLY (RETURN X))) 
 

(DEFUN IMPRESS-SET-PUM (&KEY MODE)
  (STRING-APPEND 225 (LOGAND MODE 1))) 


(DEFUN IMPRESS-SET-TEXTURE (&KEY FAMILY MEMBER)
  (STRING-APPEND 231 (IMPRESS-OUTPUT-16 (+ (LSH (LOGAND FAMILY 127) 7) (LOGAND MEMBER 127))))) 


(DEFUN IMPRESS-SET-PEN (&KEY DIAMETER)
  (STRING-APPEND 232 DIAMETER)) 


(DEFUN IMPRESS-DRAW-PATH (&KEY OPERATION-TYPE)
  (STRING-APPEND 234 OPERATION-TYPE)) 


(DEFUN IMPRESS-FILL-PEN (&KEY OPERATION-TYPE)
  (STRING-APPEND 233 OPERATION-TYPE)) 

;;;
;;; BIT-MAP ROUTINES...
;;;


(DEFUN IMPRESS-BITMAP (&KEY OPERATION-TYPE HSIZE VSIZE)
  (STRING-APPEND 235 OPERATION-TYPE HSIZE VSIZE)) 



(DEFUN IMPRESS-SET-MAGNIFICATION (&KEY POWER)
  (STRING-APPEND 236 POWER)) 


(DEFUN IMPRESS-PUSH ()
  (princ-to-string (int-char 211))) 


(DEFUN IMPRESS-POP ()
  (princ-to-string (int-char 212))) 

(DEFUN IMPRESS-DEFINE-MACRO (&KEY MACRO-NAME BODY-LENGTH BODY)
  (STRING-APPEND 242 MACRO-NAME (IMPRESS-OUTPUT-16 BODY-LENGTH) BODY)) 
;;;
;;; The following functions are not imPRESS commands.  Rather, they are utility 
;;; functions used by the functions which do represent imPRESS commands.
;;;

(DEFUN IMPRESS-OUTPUT-16 (WORD)
  (STRING-APPEND (LDB (BYTE 8 8) WORD) (LDB (BYTE 8 0) WORD))) 

