! EDTEXT - Text generator for EDWIN

!%include "edwin:specs.inc"
!%include "EDWIN.DD"

%own %integer TEXT FONT ESC CHAR = -1
%own %integer TEXT COLOUR ESC CHAR = -1

%external %routine TEXT %alias "EDWIN_TEXT" (%string(255) ST)
   %integer I, OC, OF, C  { OC = Original Colour & Font, C is Char }
   OC = -1;   OF = -1
   %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=-1 { 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=-1 { Remember original }
                SET CHAR FONT (C)                           { Set New font }
                %continue
            %finish
        %finish
        CHARACTER (C)
   %repeat
   SET COLOUR (OC) %if OC#-1      { Restore original colour }
   SET CHAR FONT (OF) %if OF#-1   { 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

%end %of %file
