*/
Written some cool source code? Upload it to Programmer's Heaven.
*/

View \SCRNCNTL.PAS

Build Program is a simple but flexible way to build a screen

Submitted By: Unknown
Rating: (Not rated) (Rate It)


UNIT SCRNCNTL;
INTERFACE
USES CRT, RAPSVARS;
Procedure ENTERDATA;
Procedure FindFldseq;
Implementation

Procedure FindFldseq;
Begin

    IF Fldseq < Frstdatafld Then Fldseq := Frstdatafld;

    IF Skip_Prev Then
    Begin
      While (Mapattr[Fldseq] = 'P')
      And   (Fldseq > Frstdatafld) DO
        Fldseq := Fldseq - 1;
    End;

    IF (Fldseq = Frstdatafld)
    And (Mapattr[Fldseq] = 'P') Then
    Begin
      Fldseq := Fldseq + 1;
      Skip_Prev := False;
    End;

    IF (Fldseq = Lastdatafld)
    And (Mapattr[Fldseq] = 'P') Then
    Begin
      Fldseq := Fldseq - 1;
      Skip_Prev := True;
    End;

    While (Mapattr[Fldseq] = 'P')
    And (Fldseq > Frstdatafld)
    And (Fldseq < Lastdatafld) DO
      Fldseq := Fldseq + 1;

    Case Mapcolr[Fldseq] of
      'B' : Textcolor(Blue);
      'R' : Textcolor(Red);
      'G' : Textcolor(Green);
      'C' : Textcolor(Cyan);
      'K' : Textcolor(Black);
      'Y' : Textcolor(Yellow);
      'W' : Textcolor(White);
      'M' : TextColor(Magenta);
    End;

End;

Procedure Enterdata;
Begin
  Skip_Prev := False;
  Continue  := True;
  Fldseq    := HldFldseq;
  FindFldseq;
  Gotoxy(Mappos[Fldseq], Mapln[Fldseq]);


  While Continue DO
  Begin
    Fkey := False;
    Skip_prev := False;
    Keychar := Readkey;
    Hldchar := Keychar;
   Case Keychar Of
   #0 :
      Begin
        Fkey := True;
        Keychar := Readkey;
        CASE Keychar OF
          #15 : Begin
                  IF Fldseq > Frstdatafld Then
                  Begin
                    Fldseq := Fldseq - 1;
                    Skip_Prev := True;
                    FindFldseq;
                  End;
                End;
          #71 : Begin
                  Fldseq := Frstdatafld;
                  FindFldseq;
                  Xpos := Mappos[Fldseq];
                  Ypos := Mapln[Fldseq];
                  Gotoxy(Xpos, Ypos);
                End;
          #72 : Gotoxy(Wherex,Wherey-1);
          #75 : Gotoxy(Wherex-1,Wherey);
          #77 : Gotoxy(Wherex+1,Wherey);
          #79 : Begin
                  Fldseq := Lastdatafld;
                  Skip_Prev := True;
                  FindFldseq;
                  Xpos := Mappos[Fldseq];
                  Ypos := Mapln[Fldseq];
                  Gotoxy(Xpos, Ypos);
                  Fldseq := Lastdatafld;
                End;
          #80 : Gotoxy(Wherex,Wherey+1);
          #59, #60, #61, #62, #63, #64, #65, #66, #67,
          #68, #73, #81 : Continue := False;
        End;
      End;
    #9  : Begin
            IF Fldseq < Lastdatafld Then
            Begin
              Skip_Prev := False;
              Fldseq := Fldseq + 1;
              FindFldseq;
            End;
          End;
    #13 : Continue := False;
    #27 : Continue := False;
    ELSE
      Scrnln[Wherey, Wherex] := Keychar;
      If MapAttr[FldSeq] <> 'N' Then
      Begin
        WRITE(Keychar);
      End
      Else
      Begin
        Write(' ');
      End;
      Keychar := ' ';
      IF Mappos[Fldseq] > Wherex Then
      Begin
        IF Fldseq > Frstdatafld Then
        Begin
          Fldseq := Fldseq - 1;
          Skip_Prev := True;
          FindFldseq;
        End;
        Xpos := Mappos[Fldseq];
        Ypos := Mapln[Fldseq];
        Gotoxy(Xpos, Ypos);
      End;
      IF Mappos[Fldseq] +
        Maplen[Fldseq] - 1 < Wherex Then
      Begin
        IF Fldseq < Lastdatafld Then
        Begin
          Fldseq := Fldseq + 1;
          FindFldseq;
        End;
        Xpos := Mappos[Fldseq];
        Ypos := Mapln[Fldseq];
        Gotoxy(Xpos, Ypos);
      End;
    End;

    IF Fldseq < Frstdatafld Then
    Begin
      Fldseq := Frstdatafld;
      FindFldseq;
    End;

    IF Fldseq > Lastdatafld Then
    Begin
      Fldseq := Lastdatafld;
      FindFldseq;
    End;
    IF ((Keychar = #77)
    And (Mappos[Fldseq]+Maplen[Fldseq]-1
    < Wherex))
    OR (Keychar = #9) OR (Keychar = #80) Then
    Begin
      IF (Keychar = #77) OR (Keychar = #80)  Then
      Begin
        IF Fldseq < Lastdatafld Then
        Begin
          Fldseq := Fldseq + 1;
          FindFldseq;
        End;
      End;

      Xpos  := Mappos[Fldseq];
      Ypos  := Mapln[Fldseq];
      Gotoxy(Xpos, Ypos);
    End;

    IF ((Keychar = #75)
    And (Mappos[Fldseq] > Wherex))
    OR (Keychar = #15) OR (Keychar = #72) Then
    Begin
      IF (Keychar = #72) OR (Keychar = #75) Then
      Begin
        IF Fldseq > Frstdatafld Then
        Begin
          Fldseq := Fldseq - 1;
          Skip_Prev := True;
          FindFldseq;
        End;
      End;
      Xpos  := Mappos[Fldseq];
      Ypos  := Mapln[Fldseq];
      Gotoxy(Xpos, Ypos);
    End;

    Xpos := Wherex;
    Ypos := Wherey;

    Function_Key := Keychar;
    Keychar      := Hldchar;
    HldFldseq := Fldseq;

    CASE Keychar OF
      #4, #13, #27 : Continue := False;
    End;

  End;

End;

END.

corner
© 1996-2008 CommunityHeaven LLC. All rights reserved. Reproduction in whole or in part, in any form or medium without express written permission is prohibited.
Violators of this policy may be subject to legal action. Please read our Terms Of Use and Privacy Statement for more information.
North American business development: Nicolai Wadstrom. Publisher: Lars Hagelin.