/* Demonstrate direct update capability Allow access by master key (Transaction) or by Salesman code, for which a secondary index has been created. */ "",a,1 input (sales.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 '(T)ransaction (R)ecord (S)alesman '; display '(P)revious (N)ext (Q)uit: '; enteru 0,1; switch 0,1 case 'T': call transaction; /* read by transaction */ 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 */ call writerecord; goto loop; /* enter a key and get the record */ transaction: F = 1; /* read from master index */ curse 18,1; clearln; display 'Transaction #: '; enter 1,1; kread 1; if error 1 /* oops! */ goto transaction; else return; endif salesman: /* read from file 2, salesman index */ 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; /* rewrite the record */ writerecord: if F != 1 /* if the updated record is in file 2 buffer, */ rmove 1,2; endif kwrite 1; /* find and overwrite the record. */ return; /* 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;