[Back to SCREEN SWAG index] [Back to Main SWAG index] [Original]

    Procedure WriteP (DispStr : String; X,Y,Colr : Byte; FChar : Char;
                      Patrn : String);

                   (* DispStr   = non-formatted string to be output to the screen.
                                  ie: pass '4031234567', not '(403) 123-4567'.
                      X,Y       = location to begin writing string to screen.  If
                                  the pattern begins with an 'X', this WILL be
                                  taken into account and will advance one space.
                      Colr      = attribute of DispStr.
                      FChar     = Filler character for strings that don't complete
                                  the pattern.
                      Patrn     = Template for writing string to screen.
                                  Essentially, the only character required in this
                                  template is the 'X', to show where a character
                                  is NOT displayed.
                   *)

      (* This procedure will write DispStr to the screen, following the guidelines
         given in Patrn.  For example, calling

               WriteP ('40312345',10,11,7,'_','X###XX###X####');

         will display:

                403  123 45__
               ^advancing space

         on the screen.  Of course, the '(   )    -' would make it complete, but
         that's just an example.
      *)

      (* Standard disclaimer: I'm not liable for anything this procedure does
                              outside the original purpose of the procedure.  If
                              something bad happens, let me know, but that's all
                              I can do.
      *)

    Var
       Loc, PX                              : Integer;

    Begin
         Colr := CheckColor (Colr);
         Loc := ((X-1)*2)+((Y-1)*160);
         Loop := 1;
         PX := 1;
         While PX <= Length (Patrn) Do
         Begin
              If Patrn[PX] = 'X' Then
                 While Patrn[PX] = 'X' Do
                 Begin
                      Inc (Loc,2);
                      Inc (PX);
                 End
              Else
              Begin
                   If Loop <= Length (DispStr) Then
                   Begin
                        Mem[VidSeg:Loc] := Ord (DispStr[Loop]);
                        Mem[VidSeg:Loc+1] := Colr;
                   End
                   Else
                   Begin
                        Mem[VidSeg:Loc] := Ord (FChar);
                        Mem[VidSeg:Loc+1] := HiColr;
                   End;
                   Inc (Loop);
                   Inc (Loc,2);
                   Inc (PX);
              End;
         End;
    End;

[Back to SCREEN SWAG index] [Back to Main SWAG index] [Original]