home *** CD-ROM | disk | FTP | other *** search
- {
- Copyright (c) 1988 BittWare Computing, ALL RIGHTS RESERVED
- }
- unit inp_var;
- {$v-}
- interface
-
- uses
- beepkey4,
- menuvars,
- menucode,
- crt;
-
- procedure GetMenuNum(var RtnNum,Special:longint;MenuNumber:MenuPtr);
- procedure ChgVar(vl:VarListPtr;var vc:byte);
- procedure InpVars(MenuName:MenuPtr;var RtnCode:integer;VarAddr:pointer);
-
- implementation
-
- procedure InpVars(MenuName:MenuPtr;var RtnCode:integer;VarAddr:pointer);
- var
- li :longint;
- x :integer;
- w :byte;
- menuw :byte;
- r :real;
- i :integer;
- vp :InpStrPtr;
- OldTA :byte;
- tb :byte;
- rc :byte;
- ts :linestrg;
- NewString :linestrg;
-
- begin
- UnHideCurs;
- vp := MenuName^.VarPtr;
- OldTA := TextAttr;
- TextColor(VarInpFg);
- TextBackGround(VarInpBg);
- menuw := MenuName^.Width - MenuName^.TxtLen - 2;
- if MenuW > MaxMenuVarWidth then MenuW := MaxMenuVarWidth;
- w := vp^[MenuName^.sel].VarWidth;
-
- tb := vp^[MenuName^.sel].typ;
- ts := vp^[MenuName^.sel].str;
-
- if w <= menuw then begin
- x := MenuW - w;
- gotoxy(MenuName^.TxtLen+2+x,MenuName^.Sel);
- InputString(ts,w,NewString,rc);
- end
- else begin
- if tb = StringCode then begin
- OpenIoWindow(SkinnyIO);
- write(MenuName^.str[MenuName^.sel],' : ');
- TextColor(VarInpFg);
- TextBackGround(VarInpBg);
- ts := linestring(VarAddr^);
- InputString(ts,w,NewString,rc);
- CloseIoWindow(SkinnyIO);
- end
- else rc := InputError;
- end;
-
- if rc = InputOk then begin
- ConvertString(NewString,w,tb,rc,VarAddr);
- case rc of
- InputOk :begin
- {
- if length(NewString) > MenuW then begin
- Delete(NewString,MenuW+1,80);
- NewString[MenuW-1] := ' ';
- NewString[MenuW] := '>';
- end;
- }
- vp^[MenuName^.sel].str := NewString;
- end;
- InputError :begin
- ErrorNum := InvalidInput;
- ErrorMessage;
- end;
- end; {case rc of}
- RtnCode := rc;
- end
- else RtnCode := NoInput;
-
- HideCurs;
- TextAttr := OldTA;
- end;
-
- procedure ChgVar(vl:VarListPtr;var vc:byte);
- begin
- if vc = vl^.max then vc := 1
- else inc(vc);
- end;
-
- procedure GetMenuNum(var RtnNum,Special:longint;MenuNumber:MenuPtr);
- var
- x :integer;
- li :longint;
- ok :boolean;
- SpclNumLoc :byte;
- Menu3 :byte;
- begin
- SpclNumLoc := MenuNumber^.max;
- x := MenuNumber^.Width - MenuNumber^.TxtLen - 2;
- OpenPullDownMenu(MenuNumber);
- ok := false;
- repeat
- UpdateMenu(MenuNumber);
- menu3 := PullDownMenu(MenuNumber);
- if menu3 = 0 then ok := true
- else begin
- if menu3 < SpclNumLoc then begin
- val(MenuNumber^.Str[menu3],RtnNum,x);
- ok := true;
- end
- else begin
- InpVars(MenuNumber,x,@Special);
- Case x of
- 0 :begin
- ok := true;
- RtnNum := Special;
- end;
- 1 :ok := false;
- 2 :ok := false;
- end;
- end;
- end;
- until ok;
- ClosePullDownMenu(MenuNumber);
- end;
-
- end.
-
-