home *** CD-ROM | disk | FTP | other *** search
- {-----------------------------}
- { SCREEN }
- { by Jeff Duntemann }
- { }
- { Screen input demo program }
- { }
- { Turbo Pascal V2.0 }
- { Last Update 3/9/85 }
- {-----------------------------}
-
-
- PROGRAM SCREEN;
-
- {$V-} { Allow length mismatch for string VAR parameters. See 23.4 }
-
- CONST CAPSLOCK = TRUE;
- NO_CAPSLOCK = FALSE;
- NUMERIC = TRUE;
- NON_NUMERIC = FALSE;
-
- TYPE STRING80 = STRING[80];
- STRING30 = STRING[30];
- STRING6 = STRING[6];
- STRING4 = STRING[4];
- STRING3 = STRING[3];
-
- NAPREC = RECORD
- NAME : STRING30;
- ADDRESS : STRING30;
- CITY : STRING30;
- STATE : STRING3;
- ZIP : STRING6
- END;
-
- GRAFREC = RECORD { For drawing boxes }
- UL_CORNER,
- UR_CORNER,
- LL_CORNER,
- LR_CORNER,
- H_BAR,
- V_BAR,
- LINE_CROSS,
- T_DOWN,
- T_UP,
- T_RIGHT,
- T_LEFT : STRING[4]
- END;
-
-
- VAR CH : CHAR;
- CURRENT_RECORD : NAPREC;
- GRAFCHARS : GRAFREC;
- EDIT : BOOLEAN;
- QUIT : BOOLEAN;
- ESCAPE : BOOLEAN;
- WIDTH,HEIGHT : INTEGER;
- I,J : INTEGER;
- R : REAL;
-
-
- PROCEDURE BEEP;
-
- BEGIN
- WRITE(CHR(7))
- END;
-
-
- FUNCTION YES : BOOLEAN; { Described in Section 17.2 }
-
- VAR CH : CHAR;
-
- BEGIN
- READ(CH);
- IF CH IN ['Y','y'] THEN YES := TRUE ELSE YES := FALSE
- END;
-
-
-
- PROCEDURE DEFINE_CHARS(VAR GRAFCHARS : GRAFREC);
-
- BEGIN
- WITH GRAFCHARS DO
- BEGIN
- UL_CORNER := CHR(201);
- UR_CORNER := CHR(187);
- LL_CORNER := CHR(200);
- LR_CORNER := CHR(188);
- H_BAR := CHR(205);
- V_BAR := CHR(186);
- LINE_CROSS := CHR(206);
- T_DOWN := CHR(203);
- T_UP := CHR(202);
- T_RIGHT := CHR(185);
- T_LEFT := CHR(204)
- END
- END;
-
-
- PROCEDURE MAKE_BOX(X,Y,WIDTH,HEIGHT : INTEGER;
- GRAFCHARS : GRAFREC);
-
- VAR I,J : INTEGER;
-
- BEGIN
- IF X < 0 THEN X := (80-WIDTH) DIV 2; { Negative X centers box }
- WITH GRAFCHARS DO
- BEGIN { Draw top line }
- GOTOXY(X,Y); WRITE(UL_CORNER);
- FOR I := 3 TO WIDTH DO WRITE(H_BAR);
- WRITE(UR_CORNER);
- { Draw bottom line }
- GOTOXY(X,(Y+HEIGHT)-1); WRITE(LL_CORNER);
- FOR I := 3 TO WIDTH DO WRITE(H_BAR);
- WRITE(LR_CORNER);
- { Draw sides }
- FOR I := 1 TO HEIGHT-2 DO
- BEGIN
- GOTOXY(X,Y+I); WRITE(V_BAR);
- GOTOXY((X+WIDTH)-1,Y+I); WRITE(V_BAR)
- END
- END
- END;
-
-
- {$I KEYSTAT.SRC } { Described in Section 20.6 }
-
- {$I GETSTRIN.SRC } { Described in Section 15.2 }
-
-
- PROCEDURE GET_SCREEN(VAR SCREEN_DATA : NAPREC;
- EDIT : BOOLEAN;
- VAR ESCAPE : BOOLEAN);
-
- BEGIN
- MAKE_BOX(1,1,79,20,GRAFCHARS); { Draw the screen box }
- IF NOT EDIT THEN WITH SCREEN_DATA DO { If not editing, clear record }
- BEGIN
- NAME := ''; ADDRESS := ''; CITY := ''; STATE := ''; ZIP := ''
- END;
- GOTOXY(23,2);
- WRITELN('<< Name / Address Entry Screen >>');
- WITH SCREEN_DATA DO
- BEGIN { First draw field frames: }
- GOTOXY(5,7);
- WRITE('>>Customer Name: |..............................|');
- GOTOXY(5,9);
- WRITE('>>Customer Address: |..............................|');
- GOTOXY(5,11);
- WRITE('>>Customer City: |..............................|');
- GOTOXY(5,13);
- WRITE('>>Customer State: |...|');
- GOTOXY(5,15);
- WRITE('>>Customer Zip: |......| ');
- IF EDIT THEN WITH SCREEN_DATA DO { If editing, show current values }
- BEGIN
- GOTOXY(26,7); WRITE(NAME);
- GOTOXY(26,9); WRITE(ADDRESS);
- GOTOXY(26,11); WRITE(CITY);
- GOTOXY(26,13); WRITE(STATE);
- GOTOXY(26,15); WRITE(ZIP)
- END; { Now input/edit field data: }
- GETSTRING(25,7,NAME,30,NO_CAPSLOCK,NON_NUMERIC,FALSE,R,I,J,ESCAPE);
- IF NOT ESCAPE THEN
- GETSTRING(25,9,ADDRESS,30,NO_CAPSLOCK,NON_NUMERIC,FALSE,R,I,J,ESCAPE);
- IF NOT ESCAPE THEN
- GETSTRING(25,11,CITY,30,NO_CAPSLOCK,NON_NUMERIC,FALSE,R,I,J,ESCAPE);
- IF NOT ESCAPE THEN
- GETSTRING(25,13,STATE,3,CAPSLOCK,NON_NUMERIC,FALSE,R,I,J,ESCAPE);
- IF NOT ESCAPE THEN
- GETSTRING(25,15,ZIP,6,CAPSLOCK,NON_NUMERIC,FALSE,R,I,J,ESCAPE);
- END
- END;
-
-
- BEGIN { SCREEN MAIN }
- DEFINE_CHARS(GRAFCHARS); { Load box drawing characters }
- EDIT := FALSE;
- REPEAT
- CLRSCR;
- GET_SCREEN(CURRENT_RECORD,EDIT,ESCAPE); { Input/edit a data screen }
- IF ESCAPE THEN QUIT := TRUE ELSE { Quit if ESC pressed }
- BEGIN { Otherwise summarize data }
- QUIT := FALSE; { and ask for approval }
- GOTOXY(1,22);
- WRITE('>>Summary: ');
- WITH CURRENT_RECORD DO
- BEGIN
- WRITE(NAME,'/',ADDRESS,'/',ZIP);
- GOTOXY(1,23); WRITE('>>OK? (Y/N): ');
- IF YES THEN EDIT := FALSE ELSE EDIT := TRUE
- END
- END
- UNTIL QUIT;
- GOTOXY(1,22)
- END.
-