MODULE Printer_Control
! =======================================================================
! True BASIC, Inc
! 12 Commerce Avenue
! West Lebanon, New Hampshire 03784-9758
! (800) 872-2742,  (603) 298-8517
! =======================================================================
! Author: Paul Castonguay
! =======================================================================
!
! PURPOSE: To allow you to take advantage of certain custom features of
!          your printer.
!
!
! REQUIRED REFERENCE:
!
!       LIBRARY "{AmigaTools}PrinterLib*"
!
!    To find out more about how libraries are used in True BASIC, refer
!    to your True BASIC reference book, or any of a number of texts
!    available from True BASIC, Inc.
!
!
! DESCRIPTION:
!
!    This MODULE consists of a variety of functions and subroutines
!    that allow you to use certain custom features of your printer.
!    It works by specifying for you the generic AmigaDOS escape
!    sequences that are provided by Commodore for that purpose.
!    To use the features of this MODULE you must first install the
!    correct printer driver on your system using the AmigaDOS
!    preferences program.  See your Amiga documentation.
!
!
!    LIBRARY ROUTINES
!    ----------------
!    FUNCTION Boldface_OFF$
!    FUNCTION Boldface_ON$
!    FUNCTION Doublestrike_OFF$
!    FUNCTION Doublestrike_ON$
!    FUNCTION Italics_OFF$
!    FUNCTION Italics_ON$
!    FUNCTION NLQ_OFF$
!    FUNCTION NLQ_ON$
!    FUNCTION Shadow_OFF$
!    FUNCTION Shadow_ON$
!    FUNCTION Subscript_OFF$
!    FUNCTION Subscript_ON$
!    FUNCTION Superscript_OFF$
!    FUNCTION Superscript_ON$
!    FUNCTION Underline_OFF$
!    FUNCTION Underline_ON$
!    SUB Condensed_OFF(#n)
!    SUB Condensed_ON(#n)
!    SUB Elite_OFF(#n)
!    SUB Elite_ON(#n)
!    SUB Enlarged_OFF(#n)
!    SUB Enlarged_ON(#n)
!    SUB Form_Length(#999, Length)
!    SUB InitializePrinter(#n)
!    SUB LRMargins(#n, Left, Right)
!    SUB New_Page(#999)
!    SUB NormalPitch(#n)
!
!
! FUNCTIONS:
! ----------
! To use any FUNCTION, place its name withing a print expression:
!
!    PRINT NLQ_ON$; "Hello"; NLQ_OFF$
!
!
! WARNING about FUNCTIONS:
!
! Be careful when building up a single line using several PRINT
! instructions that you do not forget the semi-colon after each
! line, except for the last:
!
!    PRINT NLQ_ON$;
!    PRINT Italics_ON$;
!    PRINT "HELLO";
!    PRINT Italics_OFF$;
!    PRINT NLQ_OFF$
!
! Be careful to DECLARE each FUNCTION before using it, otherwise BASIC
! will treat the name as a variable.
!
!
! SUBROUTINES:
! ------------
! To use any SUBROUTINE, call it using the proper number of arguments:
!
!    CALL LRMargins(#1, 10, 70)
!
! Note that the subroutine call sends the required codes to the printer
! and does not send a carriage return.
!
! Feel free to add more routines to this MODULE as you see fit.
! ========================================================================

SHARE ESC$
SHARE Left_Margin
SHARE Right_Margin

LET Left_Margin = 1
LET Right_Margin = 80

LET ESC$ = CHR$(27)

FUNCTION Boldface_OFF$
   LET Boldface_OFF$ = ESC$ & CHR$(91) & CHR$(50) & CHR$(50) & CHR$(109)   
END FUNCTION

FUNCTION Boldface_ON$
   LET Boldface_ON$ = ESC$ & CHR$(91) & CHR$(49) & CHR$(109)   
END FUNCTION

FUNCTION Doublestrike_OFF$
   LET Doublestrike_OFF$ = ESC$ & CHR$(91) & CHR$(51) & CHR$(34) & CHR$(122)   
END FUNCTION

FUNCTION Doublestrike_ON$
   LET Doublestrike_ON$ = ESC$ & CHR$(91) & CHR$(52) & CHR$(34) & CHR$(122)   
END FUNCTION

FUNCTION Italics_OFF$
   LET Italics_OFF$ = ESC$ & CHR$(91) & CHR$(50) & CHR$(51) & CHR$(109)   
END FUNCTION

FUNCTION Italics_ON$
   LET Italics_ON$ = ESC$ & CHR$(91) & CHR$(51) & CHR$(109)   
END FUNCTION

FUNCTION NLQ_OFF$
   LET NLQ_OFF$ = ESC$ & CHR$(91) & CHR$(49) & CHR$(34) & CHR$(122)   
END FUNCTION

FUNCTION NLQ_ON$
   LET NLQ_ON$ = ESC$ & CHR$(91) & CHR$(50) & CHR$(34) & CHR$(122)   
END FUNCTION

FUNCTION Shadow_OFF$
   LET Shadow_OFF$ = ESC$ & CHR$(91) & CHR$(53) & CHR$(34) & CHR$(122)   
END FUNCTION

FUNCTION Shadow_ON$
   LET Shadow_ON$ = ESC$ & CHR$(91) & CHR$(54) & CHR$(34) & CHR$(122)   
END FUNCTION

FUNCTION Subscript_OFF$
   LET Subscript_OFF$ = ESC$ & CHR$(91) & CHR$(51) & CHR$(118)   
END FUNCTION

FUNCTION Subscript_ON$
   LET Subscript_ON$ = ESC$ & CHR$(91) & CHR$(52) & CHR$(118)   
END FUNCTION

FUNCTION Superscript_OFF$
   LET Superscript_OFF$ = ESC$ & CHR$(91) & CHR$(49) & CHR$(118)   
END FUNCTION

FUNCTION Superscript_ON$
   LET Superscript_ON$ = ESC$ & CHR$(91) & CHR$(50) & CHR$(118)   
END FUNCTION

FUNCTION Underline_OFF$
   LET Underline_OFF$ = ESC$ & CHR$(91) & CHR$(50) & CHR$(52) & CHR$(109)   
END FUNCTION

FUNCTION Underline_ON$
   LET Underline_ON$ = ESC$ & CHR$(91) & CHR$(52) & CHR$(109)   
END FUNCTION


SUB Elite_OFF(#999)
   PRINT #999 : ESC$ & CHR$(91) & CHR$(49) & CHR$(119);   
END SUB

SUB Elite_ON(#999)
   PRINT #999 : ESC$ & CHR$(91) & CHR$(50) & CHR$(119);
END SUB

SUB Condensed_ON(#999)
   PRINT #999 : ESC$ & CHR$(91) & CHR$(52) & CHR$(119);   
END SUB

SUB Condensed_OFF(#999)
   PRINT #999 : ESC$ & CHR$(91) & CHR$(51) & CHR$(119);   
END SUB

SUB Enlarged_OFF(#999)
   PRINT #999 : ESC$ & CHR$(91) & CHR$(53) & CHR$(119);   
END SUB

SUB Enlarged_ON(#999)
   PRINT #999 : ESC$ & CHR$(91) & CHR$(54) & CHR$(119);   
END SUB

SUB Form_Length(#999, Length)
   PRINT #999 : ESC$ & CHR$(91) & STR$(Length) & CHR$(116);
END SUB

SUB InitializePrinter(#999)
   SET #999 : MARGIN 160
   PRINT #999 : ESC$ & CHR$(35) & CHR$(49);
END SUB

SUB LRMargins(#999, Left, Right)
   IF Left < Right AND Left > 0 AND Right <= 160 THEN
      LET Left_Margin = Left
      LET Right_Margin = Right
      PRINT #999 : ESC$ & CHR$(91) & STR$(Left) & CHR$(59);
      PRINT #999 : STR$(Right) & CHR$(115);
   END IF
END SUB

SUB New_Page(#999)
   PRINT #999 : CHR$(12);  
END SUB

SUB NormalPitch(#999)
   PRINT #999 : ESC$ & CHR$(91) & CHR$(48) & CHR$(119);
END SUB

END MODULE
