(******************************************************************* Variables for demo data. Can be changed to any type without modifying the EXECHK code, (up to a limit of 65519 bytes), because the ExeRead/Write procedures use VAR parameters. *******************************************************************) CONST MaxLines = 4 ; NameLength = 30 ; Ok : boolean = FALSE ; TYPE NameType = array [ 1..MaxLines ] of string [ NameLength ] ; VAR Data : NameType ; DataLabel : NameType ; (******************************************************************* Data entry and display screens. *******************************************************************) function LabelLength : byte ; var Len , B : byte ; begin Len := 0 ; for B := 1 to MaxLines do if length ( DataLabel [ B ] ) > Len then Len := length ( DataLabel [ B ] ) ; LabelLength := Len ; end ; (******************************************************************* Display Data *******************************************************************) procedure MyDataOutput ; var B : byte ; begin ClrScr ; writeln ( 'This software is licensed to:' ) ; writeln ( '-----------------------------' ) ; for B := 1 to MaxLines do begin write ( DataLabel [ B ] : LabelLength , #178 ) ; write ( Data [ B ] ) ; writeln ; end ; writeln ( '=============================' ) ; end ; (******************************************************************* INPUT *******************************************************************) procedure MyDataInput ; (******************************************************************* Only allow [Y]es, [N]o or [E]sc *******************************************************************) function YesNoEsc : char ; var junk , Ch : char ; begin writeln ( 'Press Y to continue, N to re-enter name, or ESC to cancel' ) ; while TRUE do begin Ch := ReadKey ; if KeyPressed then Junk := ReadKey ; Ch := UpCase ( Ch ) ; if ( Ch = 'Y' ) or ( Ch = 'N' ) or ( Ch = #27 ) then begin YesNoEsc := Ch ; EXIT ; end ; end ; end ; procedure GetUserInfo ; var B : byte ; begin for B := 1 to MaxLines do begin write ( DataLabel [ B ] : LabelLength , #178 ) ; readln ( Data [ B ] ) ; end ; end ; begin while TRUE do begin GetUserInfo ; MyDataOutput ; writeln ( 'Everything OK?' ) ; case YesNoEsc of 'Y' : begin Ok := TRUE ; EXIT ; end ; #27 : begin Ok := FALSE ; EXIT ; end ; 'N' : ; (* Loop *) end ; end ; end ; (******************************************************************* Initialize demo fields, labels, etc. *******************************************************************) procedure MyDataInit ; begin FillChar ( Data , SizeOf ( Data ) , #0 ) ; DataLabel [ 1 ] := 'Name' ; DataLabel [ 2 ] := 'Company' ; DataLabel [ 3 ] := 'City, State' ; DataLabel [ 4 ] := 'Serial #' ; end ;