! EDTEXT - Text generator for EDWIN

!############################################################################
!#                                                                          #
!#  This is a module from the EDWIN Graphics Package, which was developed   #
!#  in the Department of Computer Science, at Edinburgh University, from    #
!#  1978 to the present day, release 5 of EDWIN in October 1984.            #
!#                                                                          #
!#  The principal author of the EDWIN Graphics Package was J Gordon Hughes, #
!#  while working for the Edinburgh University Computer Sceince Department. #
!#  Parts of EDWIN have been produced by many different people, too many    #
!#  too mention, working for different departments of Edinburgh and Leeds   #
!#  Universities.                                                           #
!#                                                                          #
!#  This module is regarded as being in the public domain, and the authors  #
!#  and accept no responsibility regarding the uses to which the software   #
!#  will be put.                                                            #
!#                                                                          #
!############################################################################

from Edwin include Specs
from Edwin include Iprocs
from Edwin include Icodes

own integer TEXT FONT ESC CHAR = DISABLED
own integer TEXT COLOUR ESC CHAR = DISABLED

external routine TEXT alias "EDWIN_TEXT" (string(255) ST)
   integer I, OC, OF, C  { OC = Original Colour & Font, C is Char }
   OC = DISABLED;   OF = DISABLED
   for I = 1, 1, LENGTH(ST) cycle
        C = CHARNO(ST,I)
        if C=TEXT COLOUR ESC CHAR start
            if LENGTH(ST)-I>1 and '0'<=CHARNO(ST,I+1)<='9' start
                C = CHARNO(ST,I+1) - '0';   I = I + 1
                if LENGTH(ST)-I>1 and '0'<=CHARNO(ST,I+1)<='9' start
                    C = C * 10 + CHARNO (ST, I+1) - '0';   I = I + 1
                finish
                GET ATTRIBUTE (ATT COLOUR, OC) if OC=DISABLED { Remember original }
                SET COLOUR (C)                                 { Set New colour }
                continue
            finish
        finish else if C=TEXT FONT ESC CHAR start
            if LENGTH(ST)-I>1 and '0'<=CHARNO(ST,I+1)<='9' start
                C = CHARNO(ST,I+1) - '0';   I = I + 1
                if LENGTH(ST)-I>1 and '0'<=CHARNO(ST,I+1)<='9' start
                    C = C * 10 + CHARNO (ST, I+1) - '0';   I = I + 1
                finish
                GET ATTRIBUTE (ATT CHAR FONT, OF) if OF=DISABLED { Remember original }
                SET CHAR FONT (C)                                 { Set New font }
                continue
            finish
        finish
        CHARACTER (C)
   repeat
   SET COLOUR (OC) if OC#DISABLED      { Restore original colour }
   SET CHAR FONT (OF) if OF#DISABLED   { Restore original font   }
end

external routine TEXT COLOUR ESCAPE alias "EDWIN_TEXT_COL_ESC" (integer CH)
   TEXT COLOUR ESC CHAR = CH
end

external routine TEXT FONT ESCAPE alias "EDWIN_TEXT_FONT_ESC" (integer CH)
   TEXT FONT ESC CHAR = CH
end

external routine INQUIRE TEXT SIZE  alias "EDWIN_INQ_TEXT_SIZE" (string (255) T, integer name X, Y)
   integer OX, OY, NX, NY, Device
   Inquire Position (OX, OY)
   Device = Device Data_Dev No
   Device Data_Dev No = -1
   Text (t)
   Inquire Position (NX, NY)
   X = NX - OX
   Y = NY - OY
   Move Abs (OX, OY)
   Device Data_Dev No = Device
end

end of file