*/
Stuck? Need help? Ask questions on our forums.
*/

View \FARGO.PAS

Full Source Code To Vision Bbs System

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


Program Wells_Fargo;

Uses Dos,CRT,ExecSwap,FastTTT5,WinTTT5,MenuTTT5,PullTTT5,ReadTTT5;

Type WFRecord=Record
      Description   :String[40];
      Path          :String[35];
      ProgramName   :String[12];
      Password      :String[20];
      UseEMS        :Boolean;
     End;

Const PassChar    = #15;
    CursorRight = #205;
    CursorLeft  = #203;
    CursorDown  = #208;
    CursorUp    = #200;
    EnterKey    = #13;
    EscKey      = #27;
    EndKey      = #207;
    HomeKey     = #199;
    DelKey      = #211;
    Backspace   = #8;
    InsKey      = #210;
    Zap         = #160;      {Alt D to delete the field}
    MinInt              = -32768;
    MaxLongInt:longint  =  2147483647;
    MinLongInt:longint  = -2147483647;
    MaxWord             =  65535;
    MinWord             =  0;

Var wffile:file of WFRecord;
    num:integer;
    r,ar:WFRecord;
    Main_Choice,Choice,Error:integer;
    X,Y,ScanTop,ScanBot:byte;
    M1,MM:Menu_record;
    Ch:char;
    Done:Boolean;
    Cursor_X,
    Cursor_Y:byte;
    temp:String;

  Procedure Clang;
  begin
   sound(1500);
   delay(50);
   nosound;
  end;

Procedure Read_Line(X,Y,L,F,B,Format:byte; Text:String);

{
X is X coord of first character in field
Y is Y coord of field
L is the maximum length of the input field
F is the foreground color
B is the background color
Fornat Codes:      1   Any String
                   2   Force Upper String
                   3   Yes/No
                   4   Alphabetics only
                   5   Integer
                   6   LongInteger
                   7   Real
                   8   Word
                   (*   Maybe
                   9   Date    (MM/DD/YY)
                   10  Date    (DD/MM/YY)
                   *)
                   11  Echo a Password
Text is a string updated with the string equivalent of user input
}

var
    TempText : string;
    CursorPos : byte;
    InsertMode,
    Password,
    Alldone : boolean;
    FirstCharPress: boolean;
    Ch : char;

    Procedure Check_Parameters;
    begin
        TempText := Text;
        If length(TempText) > L then
           Delete(Temptext,L+1,length(TempText)-L);
        If not X in [1..80] then
           X := 1;
        If X + L - 1 > 80 then X := 81 - L;
        If not Y in [1..25] then
           Y := 1;
        If RTTT.BegCursor then
           CursorPos := 1
        else
        begin
            If length(TempText) < L then
               CursorPos := length(TempText) + 1
            else
               CursorPos := length(TempText);
        end;
        InsertMode  := RTTT.Insert;
        Alldone := False;
        If Format = 11 then
        begin
            Password := true;
            Format := 1;
        end
        else
           Password := false;
    end{sub Proc Check_Parameters}

    Function FillWhiteSpace(Str:string):string;
    var I : integer;
    begin
        If Password then
           Str := replicate(length(Str),PassChar);
        while length(Str) < L do
              Str := Str + RTTT.WhiteSpace;
        FillWhiteSpace := Str;
    end; {sub Func FillWhiteSpace}

    Procedure MoveTheCursor;
    begin
        GotoXY(X+CursorPos-1,Y);
    end{sub Proc MoveTheCursor}

    Procedure Write_String;
    begin
        Fastwrite(X,Y,attr(F,B),FillWhiteSpace(TempText));
        MoveTheCursor;
    end;

    Procedure Erase_Field;
    begin
        TempText := '';
        CursorPos := 1;
        Write_String;
    end;

    Procedure Char_Backspace;
    begin
        If CursorPos > 1 then
        begin
            CursorPos := Pred(CursorPos);
            Delete(TempText,CursorPos,1);
            Write_String;
       end;
    end;   {sub Proc Char_Backspace}

    Procedure Char_Del;
    begin
        If CursorPos <= length(TempText) then
        begin
            Delete(TempText,CursorPos,1);
            Write_String;
        end;
    end;   {sub Proc Char_Del}

    Procedure Add_Char(Ch:char);
    begin
        If InsertMode then
        begin
            If length(TempText) < L then
            begin
                Insert(Ch,TempText,CursorPos);
                If CursorPos < L then
                   CursorPos := Succ(CursorPos);
           end;
        end
        else {not insertmode}
        begin
            Delete(TempText,CursorPos,1);
            Insert(Ch,TempText,CursorPos);
            If CursorPos < L then
               CursorPos := Succ(CursorPos);
        end;   {if insert}
        Write_String;
    end;   {sub proc Add_Char}


begin                  {main Procedure Read_Line}
    Check_Parameters;
    R_Null := false;
(*    FindCursor(Cursor_X,Cursor_Y,ScanTop,ScanBot); *)
    If RTTT.Insert then
       HalfCursor
    else
       OnCursor;
    Write_String;
    FirstCharPress := true;
    Repeat
         Ch := ReadKey; (* Getkey; *)
         If Format in [2,3] then
            Ch := upcase(Ch);
         If Ch in RTTT.End_Chars then
         begin
            AllDone := True;
            If Ch <> #027 then Text := TempText;
         end
         else
         Case Ch of
         #131,              {mouseright}
         CursorRight   :  begin
                              If (CursorPos < L)
                              and (CursorPos <= length(TempText)) then
                              begin
                                  CursorPos := Succ(CursorPos);
                                  MoveTheCursor;
                              end;
                          end;
         #130,               {mouseleft}
         CursorLeft    :  begin
                              If CursorPos > 1 then
                              begin
                                  CursorPos := Pred(CursorPos);
                                  MoveTheCursor;
                              end;
                          end;
         HomeKey       :  begin
                              CursorPos := 1;
                              MoveTheCursor;
                          end;
         EndKey        :  begin
                              If CursorPos < L then
                              If length(TempText) < L then
                                  CursorPos := length(TempText) + 1
                              else
                                  CursorPos := L;
                              MoveTheCursor;
                          end;
        InsKey        :  If Format <> 3 then   {don't allow insert on Y/N!}
                         begin
                             InsertMode := not InsertMode;
                             If InsertMode then
                                HalfCursor
                             else
                                OnCursor;
                         end;
        DelKey        :  Char_Del;
        BackSpace     :  Char_Backspace;
        Zap           :  Erase_Field;
        #132,
        EscKey        :  If RTTT.AllowEsc then
                             Alldone := true;
        #133,
        EnterKey      :  begin
                             Alldone := true;
                             Text := TempText;
                             temp:=TempText;
                         end;
       #33 .. #42,                                 {! to *}
       #44,#47,                                    {, /}
       #58 .. #64,                                 {: to @}
       #91 .. #96,                                 {[ to '}
       #123 .. #126   :  If (Format in [1,2]) then {{ to ~}
                         begin
                             If FirstCharPress and RTTT.EraseDefault then
                                Erase_Field;
                             Add_Char(Ch);
                         end
                         else
                             Clang;
       #43, #45       : If (Format in [1,2])       { + - }
                        or ( (CursorPos=1) and (Format in [5,6,7])) then
                        begin
                            If FirstCharPress and RTTT.EraseDefault then
                                Erase_Field;
                            Add_Char(Ch);
                        end
                        else
                           Clang;
       #46            : If (Format in [1,2])       {.}
                        or ( (Pos('.',TempText)=0) and (Format = 7)) then
                        begin
                            If FirstCharPress and RTTT.EraseDefault then
                                Erase_Field;
                            Add_Char(Ch);
                        end
                        else
                           Clang;
       #48..#57       : If (Format in [1..2,5..8]) then {0 to 9}
                        begin
                            If FirstCharPress and RTTT.EraseDefault then
                                Erase_Field;
                            Add_Char(Ch);
                        end
                        else
                           Clang;
       #32,                                              {space}
       #65..#77,                                         {A to M}
       #79..#88,                                         {O to X}
       #90,                                              {Z}
       #97..#122      : If (Format in [1,2,4]) then      {a to z}
                        begin
                            If FirstCharPress and RTTT.EraseDefault then
                                Erase_Field;
                            Add_Char(Ch);
                        end
                        else
                           Clang;
       #78,#89        : If (Format in [1..4]) then        {N Y}
                        begin
                            Add_Char(Ch);
                            If Format = 3 then
                            begin
                                Alldone := true;
                                Text := TempText;
                            end;
                        end
                        else
                           Clang;
      #128,#129       :;    {absorb stray mouse movement to avoid Clang'n}
      else Clang;
      end; {case}
      FirstCharPress := false;
      Until Alldone;
      R_Char := Ch;
      If  RTTT.RightJustify
      and (Format > 4) then
      begin
          Fastwrite(X,Y,attr(F,B),replicate(L,RTTT.Whitespace));
          Fastwrite(X+L-Length(TempText),Y,attr(F,B),Text);
      end
      else
        Fastwrite(X,Y,attr(F,B),FillWhiteSpace(Text));
      GotoXY(Cursor_X,Cursor_Y);
      SizeCursor(ScanTop,ScanBot);
end;

function exist (n:string):boolean;
var f:file;
    i:integer;
begin
  assign (f,n);
  reset (f);
  i:=ioresult;
  exist:=i=0;
  close (f);
  i:=ioresult
end;

 function numentry:integer;
  begin
    numentry:=filesize(WFfile)
  end;

  procedure seekwffile (n:integer);
  begin
    seek (WFfile,n-1)
  end;

  procedure openwffile;
  var n:integer;
  begin
    n:=ioresult;
    assign (WFfile,'FARGO.DAT');
    reset (WFfile);
    if ioresult<>0 then begin
      close (WFfile);
      n:=ioresult;
      rewrite (WFfile)
    end
  end;

  Procedure Grand_Opening;
  Begin
   FillScreen(1,1,80,25,white,blue,chr(176));
   GrowFBox(25,10,55,17,yellow,blue,4);
   WriteCenter(12,15,1,'Wells Fargo Quick Menus');
   WriteCenter(13,15,1,'Written By: Josh Ham');
   WriteCenter(14,15,1,'Requested By: Larry Ham');
   WriteCenter(16,11,1,'Quick Menus (c)1991');
   Delay(3000);
  End;

  Procedure Entry_Box;
  Begin
   FillScreen(1,1,80,25,white,blue,char(176));
   TextAttr:=1;
   GrowFBox(15,5,65,20,blue,blue,4);
   TextAttr:=8;
   For x:=17 to 66 Do Begin Gotoxy(x,21); Write(char(219)); End;
   For y:=6 to 21 Do Begin Gotoxy(66,y); Write(char(219)+Char(219)); End;
  End;

  Procedure EC;
  Begin
   Textbackground(7);
   Textcolor(0);
  End;

  Procedure EF;
  Begin
   Textbackground(1);
   Textcolor(11);
  End;

  Procedure Add_An_Entry;
  var ch:Char;
      a,b,c,d:string;
  Begin
   Entry_Box;
   Textbackground(1);
   TextColor(14);
   Gotoxy(22,6);
   Write('Wells Fargo Quick Menus - Add an Entry');
   TextColor(9);
   For x:=15 to 65 Do Begin gotoxy(x,7); Write(char(196)); End;
   TextColor(11);
   OpenWfFile;
   num:=numentry;
   Gotoxy(17,9)Write('Enter Filename To Execute'); ec;
   Gotoxy(17,10); Write('????????????'); ef;
   Gotoxy(17,12); Write('Enter Full Path To The Above File'); ec;
   Gotoxy(17,13); Write('????????????????????????????????????'); ef;
   Gotoxy(17,15); Write('Enter a Description Of This Entry'); ec;
   gotoxy(17,16); Write('?????????????????????????????????????????'); ef;
   gotoxy(17,18); Write('Enter a Password To Load This (Enter=None)'); ec;
   gotoxy(17,19); Write('?????????????????????');
   clang;
   r.programname:='';
   Gotoxy(17,10);ReadLine(17,10,12,0,7,r.programname);
   r.programname:=temp;
   r.path:='';
   gotoxy(17,13);ReadLine(17,13,35,0,7,r.path);
   r.path:=temp;
   r.description:='';
   gotoxy(17,16);ReadLine(17,16,40,0,7,r.description);
   r.description:=temp;
   r.password:='';
   gotoxy(17,19);ReadLine(17,19,20,0,7,r.password);
   r.password:=temp;
   GrowFBox(25,1,53,3,lightblue,blue,4);
   Clang; ef;
   textcolor(15);
   Gotoxy(27,2); Write('Save This To Disk? [Y/N]');
   Repeat
   Ch:=ReadKey;
   Until (ch='Y') or (ch='y') or (ch='N') or (ch='n');
   If (ch='Y') or (ch='y') Then Begin
   if not exist ('FARGO.DAT') then rewrite (WFfile);
   seekwffile(num+1);
   write (WFfile,r);
   End;
   ef;
   FillScreen(1,1,80,25,white,blue,chr(176));
   Close(Wffile);
   End;

   Procedure Edit_Entry;
   var howmany:integer;
   Begin
    FillScreen(1,1,80,25,white,blue,chr(176));
     GrowFBox(25,1,53,3,lightblue,blue,4);
     Clang; ef;
     textcolor(15);
     OpenWffile;
     howmany:=numentry;
     Gotoxy(27,2); Write('Edit Which Entry? [1-',howmany,']:');
     gotoxy(51,2); ReadLn(howmany);
     seekwffile(howmany+1);
     read(wffile,r);
    FillScreen(30,5,75,15,blue,blue,chr(219)); ef;
    GotoXy(42,6); Write('Wells Fargo Quick Menu Editor'); ec;
    Gotoxy(32,8); Write('????????????');
    Gotoxy(32,10); Write('????????????????????????????????????');
    gotoxy(32,12); Write('?????????????????????????????????????????');
    gotoxy(32,14); Write('?????????????????????');
    gotoxy(32,8); Write(r.programname);
    gotoxy(32,10);Write(r.path);
    gotoxy(32,12);Write(r.description);
    gotoxy(32,14);If r.password='' then Write ('N/A') Else write(r.password);
    readln;
    Close(WfFile);
   End;

   Procedure Utilitys;
   Begin
    Menu_Set(M1);
    With M1 do
    begin
        Heading1 := '- Wells Fargo Quick Menu Utilitys -';
        Heading2 := 'Quick Menus (c)1991';
        Topic[1] := '   Add a new entry';
        Topic[2] := '   Edit an existing entry';
        Topic[3] := '   Delete an existing entry ';
        Topic[4] := '   Quit Utility Section';
        TotalPicks := 4;
        PicksPerLine := 1;
        Addprefix := 0;
        TopleftXY[1] := 0;
        TopleftXY[2] := 8;
        Boxtype := 5;
        If ColorScreen then
        begin
            Colors[1] := white;
            Colors[2] := blue;
            Colors[3] := lightgray;
            Colors[4] := red;
            Colors[5] := lightgray;
        end
        else
        begin
            Colors[1] := white;
            Colors[2] := black;
            Colors[3] := black;
            Colors[4] := lightgray;
            Colors[5] := white;
        end;
        AllowEsc := false;
        Margins := 5;
end{with M1 do}
end; {Define_Menu1}

Procedure Utility_Menu;
Var Quit:Boolean;
Begin
    Quit:=False;
    Findcursor(X,Y,ScanTop,ScanBot);
    Main_Choice := 1;
    Done:=False;
    FillScreen(1,1,80,25,white,blue,chr(176));
    repeat
     Utilitys;
     DisplayMenu(M1,false,Main_Choice,Error);
     Case Main_Choice of
     1:Add_An_Entry;
     2:Edit_Entry;
     3:Begin End;{Delete_An_Entry;}
     4:Quit:=True;
     end;
until Quit;
FillScreen(1,1,80,24,white,blue,chr(176));
main_choice:=1;
End;

Begin
Grand_Opening;
Utility_Menu;
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.