Following John Reid's wish list, the following hack may be of some use... --Bill
*--------------------------------------------------------------------------- --- *R0 Bill Brutzman Jul.2008 prompt '' equate AM to char(254) equate VM to char(253) equate true to 1, false to 0 Red = @(-5) Grn = @(-6) Width = 6 *--------------------------------------------------------------------------- --- Main.Program: gosub Access.Check gosub First.Screen gosub Prompt.Fields.To.Show gosub Displayer go Main.Program *--------------------------------------------------------------------------- --- *--------------------------------------------------------------------------- --- First.Screen: crt @(-1) crt crt crt crt crt crt crt crt crt ' ______ ' crt ' / \ ' crt ' \ DD / Data.Displayer ' crt ' \____/ ' crt @(2,18) : @(-4) : ' <File> [X] ' : input Ans.1, 1 : Ans.1 = upcase(Ans.1) begin case case Ans.1 = 'X' ; go The.End end case input Ans.2 Ans.2 = upcase(Ans.2) File.Name = Ans.1 : Ans.2 open File.Name to F.File else null *--------------------------------------------------------------------------- --- crt @(2,20) : ' <Record> <X> ' : input Record Record = upcase(Record) begin case case Record = 'X' ; return to Main.Program end case *-------------------------------------- read R.File from F.File, Record else go Error.Not.On.File return *--------------------------------------------------------------------------- --- Prompt.Fields.To.Show: crt @(-1) Field.Array = '' for This.Field.Count = 1 to 200 crt @(4, This.Field.Count) : @(-4) : ' <Field.#> <X> ' : input Field.Nbr Field.Nbr = upcase(Field.Nbr) begin case case Field.Nbr = 'X' ; exit end case Field.Array<-1> = Field.Nbr next This.Field.Count Next.This.Field.Count: return *--------------------------------------------------------------------------- --- Displayer: crt @(-1) print print ' ' : File.Name : ' ' : Record print Field.1 = Field.Array<1> This.Field = R.File<Field.1> Total.Nbr.Entries = dcount(This.Field, VM) Total.Nbr.Fields = dcount(Field.Array, AM) Field.Last = Field.Array<Total.Nbr.Fields> for This.Field = Field.1 to Field.Last print This.Field 'R#2' : Red : ':' : Grn : for This.Count = 1 to Total.Nbr.Entries begin case case Width = 1 ; print R.File<This.Field, This.Count> 'L#1' : Red : '_' : Grn : case Width = 2 ; print R.File<This.Field, This.Count> 'L#2' : Red : '_' : Grn : case Width = 3 ; print R.File<This.Field, This.Count> 'L#3' : Red : '_' : Grn : case Width = 4 ; print R.File<This.Field, This.Count> 'L#4' : Red : '_' : Grn : case Width = 5 ; print R.File<This.Field, This.Count> 'L#5' : Red : '_' : Grn : case Width = 6 ; print R.File<This.Field, This.Count> 'L#6' : Red : '_' : Grn : case Width = 7 ; print R.File<This.Field, This.Count> 'L#7' : Red : '_' : Grn : case Width = 8 ; print R.File<This.Field, This.Count> 'L#8' : Red : '_' : Grn : case Width = 9 ; print R.File<This.Field, This.Count> 'L#9' : Red : '_' : Grn : case Width = 10 ; print R.File<This.Field, This.Count> 'L#10' : Red : '_' : Grn : case Width = 11 ; print R.File<This.Field, This.Count> 'L#11' : Red : '_' : Grn : case Width = 12 ; print R.File<This.Field, This.Count> 'L#12' : Red : '_' : Grn : case Width = 13 ; print R.File<This.Field, This.Count> 'L#13' : Red : '_' : Grn : case Width = 14 ; print R.File<This.Field, This.Count> 'L#14' : Red : '_' : Grn : case Width = 15 ; print R.File<This.Field, This.Count> 'L#15' : Red : '_' : Grn : case Width = 16 ; print R.File<This.Field, This.Count> 'L#16' : Red : '_' : Grn : case Width = 17 ; print R.File<This.Field, This.Count> 'L#17' : Red : '_' : Grn : case Width = 18 ; print R.File<This.Field, This.Count> 'L#18' : Red : '_' : Grn : case Width = 19 ; print R.File<This.Field, This.Count> 'L#19' : Red : '_' : Grn : case Width = 20 ; print R.File<This.Field, This.Count> 'L#20' : Red : '_' : Grn : case 1 ; print R.File<This.Field, This.Count> 'L#6' : Red : '_' : Grn : end case next This.Count print next This.Field gosub Bottom.Prompt return *--------------------------------------------------------------------------- --- Bottom.Prompt: crt crt ' [<] <Width.##> [XX]' : input Ans, 2 Ans = upcase(Ans) begin case case Ans = 'XX' ; go The.End case 1 ; Width = Ans ; return to Displayer end case *--------------------------------------------------------------------------- -- Access.Check: Access.Depts = ' ' : VM *Access.Depts := 'Acct' : VM *Access.Depts := 'Cust' : VM *Access.Depts := 'Dock' : VM *Access.Depts := 'Eng' : VM *Access.Depts := 'Est' : VM Access.Depts := 'Exec' : VM *Access.Depts := 'Packing' : VM *Access.Depts := 'Prod.Mgr' : VM *Access.Depts := 'Prod' : VM *Access.Depts := 'Purch' : VM *Access.Depts := 'Qual.Mgr' : VM *Access.Depts := 'Quality' : VM *Access.Depts := 'Sales' : VM *Access.Depts := 'Tool.Mgr' call *ACCESS.CHECK.R9(Access.Depts, Access.Status) if Access.Status # 'Granted' then go The.End return *--------------------------------------------------------------------------- --- Error.Not.On.File: crt @(-1) crt crt crt crt crt crt crt crt crt crt crt '__________ ' crt '\ \ ' crt ' \ Error \ Record Not On File ' crt ' \_________\ ' crt ' [X] ' crt ' ' : input Ans.Error, 1 Ans.Error = upcase(Ans.Error) return to Main.Program *--------------------------------------------------------------------------- --- The.End: crt @(-1) END -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Behalf Of john reid Sent: Tuesday, July 29, 2008 8:38 AM To: u2-users@listserver.u2ug.org Subject: Re: [U2] Data Editor A nice multivalue subroutine for interactive screens, that takes row and column start points and headings for associated attributes, conversion and formatting of same, number of data rows displayed, and (A)dd, (I)nsert, (D)elete, (P)age, (E)nter (for next or field), and (S)ave prompts would be a nice gift for the group. Can someone fork one over to the group? john ------- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/