/* Demonstrate direct update capability Version 2 - using Flush Allow access by department or by Salesman code, for which secondary indices have been created. */ "",a,1 input (dept.idx; salesmn.idx) output () call setup; /* set up the screen */ F = 1; /* keep track of which file we're reading */ loop: curse 20,1; display '(D)epartment (R)ecord (S)alesman '; display '(P)revious (N)ext (Q)uit: '; enteru 0,1; switch 0,1 case 'D': call department; break; case 'S': call salesman; break; case 'R': call number; /* record number read */ break; case 'P': nread prev F; /* read from most recent file */ if error F goto loop; endif break; case 'N': nread next F; if error F goto loop; endif break; case 'Q': clear; stop; default: goto loop; /* invalid entry */ endswitch curse 20,1; clearln; call show data; call changes; /* get any changes */ rewrite F; /* whichever buffer it's in */ goto loop; /* enter a key and get the record */ department: if F != 1 /* if changing buffers ... */ flush F; endif F = 1; /* read from master index */ curse 18,1; clearln; display 'Department #: '; enter 1,2; kread 1; if error 1 /* oops! */ goto department; else return; endif salesman: /* read from file 2, salesman index */ if F != 2 flush F; endif F = 2; curse 18,1; clearln; display 'Salesman code: '; enter 2,3; kread 2; if error 2 goto salesman; endif return; /* enter a record number and read record */ number: curse 18,1; clearln; display 'Record #: '; enter N; nread F N; if error F goto number; else return; endif /* get changes, if any */ changes: curse 18,1; clearln; display 'Field to change or RETURN : '; enter C; if C < 1 curse 18,1; clearln; return; endif if C > 6 goto changes; endif /* else ... */ L = C + 1; /* line = choice + 1 */ curse L,23; enterr F,L; /* line # = field # */ goto changes; /* set up the screen */ setup: clear; curse 1,3; display H(1,1); /* transaction # */ L = 2; /* Line */ setloop: if L > 6 return; endif curse L,1; C = L - 1; /* choice # */ display C H(1,L); /* Field # = Line # */ L = L + 1; goto setloop; /* display the data */ show data: L = 1; /* line number, and field number */ showloop: if L > 6 return; endif curse L,23; clearln; display F,L; L = L + 1; goto showloop; end;