home *** CD-ROM | disk | FTP | other *** search
- { >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> BEGIN INCLUDE >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- Filename : EDIT.INC
- }
- PROCEDURE EDIT;
- { ***************************************************************************
- Enter the Edit Mode
- ***************************************************************************
- }
- VAR
- HEXMODE : BOOLEAN;
- CHOICE : CHAR;
- HI_LO : BYTE;
-
- PROCEDURE POSITION (IDX : BYTE; MODE : BOOLEAN);
- { ---------------------------------------------------------------------------
- Positon cursor in buffer
- ---------------------------------------------------------------------------
- }
- BEGIN
- IF MODE THEN
- BEGIN
- GOTOXY (XHEXBASE + (IDX + (IDX) DIV 2) MOD (3 * 16),
- (IDX DIV 32) + YBASE);
- END
- ELSE
- BEGIN
- GOTOXY (((IDX DIV 2) MOD 16) + XASCBASE,
- ((IDX DIV 2) DIV 16) + YBASE);
- END;
- END; { POSITION }
-
-
- PROCEDURE SHOW (MODE : BOOLEAN);
- { ---------------------------------------------------------------------------
- Show the value of the nybble or byte according to MODE
- ---------------------------------------------------------------------------
- }
- BEGIN
- IF MODE THEN { hex }
- BEGIN
- POSITION (HI_LO AND $FE,MODE); { cursor at hi-nybble }
- WRITE (HEX (BUFF[HI_LO DIV 2]));
- IF ODD (HI_LO) THEN POSITION (HI_LO,MODE); { put cursor back }
- END
- ELSE
- BEGIN { ASCII }
- POSITION (HI_LO,MODE);
- IF (BUFF[HI_LO DIV 2] >= $20) AND
- (BUFF[HI_LO DIV 2] < $7F) THEN
- WRITE (CHR(BUFF[HI_LO DIV 2]))
- ELSE
- BEGIN
- LOWVIDEO;
- WRITE ('.');
- HIGHVIDEO;
- END; { ELSE }
- END;
- END; { SHOW }
-
-
- PROCEDURE MODIFY;
- { ---------------------------------------------------------------------------
- Modify the nybble (hex mode) or byte (ASCII mode) at cursor position
- ---------------------------------------------------------------------------
- }
- BEGIN
- IF HEXMODE THEN
- BEGIN
- IF UPCASE (CHOICE) IN ['0'..'9','A'..'F'] THEN
- BEGIN
- IF ODD (HI_LO) THEN
- BEGIN { lo-nybble }
- BUFF[HI_LO DIV 2] :=
- (BUFF[HI_LO DIV 2] AND
- $F0) OR (BINARY (CHOICE));
- END
- ELSE
- BEGIN { hi-nybble }
- BUFF[HI_LO DIV 2] :=
- (BUFF[HI_LO DIV 2] AND
- $0F) OR (BINARY (CHOICE) SHL 4);
- END;
- SHOW (NOT HEXMODE);
- SHOW (HEXMODE);
- HI_LO := SUCC (HI_LO);
- END
- ELSE WRITE (#7);
- END
- ELSE
- BEGIN { ASCII }
- BUFF[HI_LO DIV 2] := ORD (CHOICE);
- SHOW (HEXMODE);
- SHOW (NOT HEXMODE);
- HI_LO := HI_LO + 2;
- END;
- POSITION (HI_LO,HEXMODE);
- END; { MODIFY }
-
- { ***************************************************************************
- }
-
- BEGIN { EDIT }
- HEXMODE := TRUE;
- HI_LO := 0; { 2 x the record position }
- LOWVIDEO;
- WRITE (#13,'EDIT mode');
- HIGHVIDEO;
- POSITION (HI_LO,HEXMODE);
- REPEAT
- READ (KBD,CHOICE);
- CASE CHOICE OF
- LEFTKEY : BEGIN { cursor left }
- IF HEXMODE THEN HI_LO := PRED (HI_LO)
- ELSE HI_LO := HI_LO - 2;
- POSITION (HI_LO,HEXMODE);
- END;
- RIGHTKEY : BEGIN { cursor right }
- IF HEXMODE THEN HI_LO := SUCC (HI_LO)
- ELSE HI_LO := HI_LO + 2;
- POSITION (HI_LO,HEXMODE);
- END;
- UPKEY : BEGIN { cursor up }
- HI_LO := HI_LO - 32;
- POSITION (HI_LO,HEXMODE);
- END;
- DOWNKEY : BEGIN { cursor down }
- HI_LO := HI_LO + 32;
- POSITION (HI_LO,HEXMODE);
- END;
- SWAPKEY : BEGIN { swap hex/ASCII mode }
- IF HEXMODE THEN
- BEGIN
- HEXMODE := FALSE;
- HI_LO := HI_LO AND $FE; { make even }
- END
- ELSE HEXMODE := TRUE;
- POSITION (HI_LO,HEXMODE);
- END;
- WRITEKEY : BEGIN { write the block to file }
- SEEK (DISKFILE,POINT);
- BLOCKWRITE (DISKFILE,BUFF,1);
- GOTOXY (XHOME,YHOME);
- CLREOL;
- WRITELN ('> Record Written to Disk');
- END;
- EXITKEY : BEGIN { exit the edit mode }
- GOTOXY (XHOME,YHOME);
- CLREOL;
- WRITELN;
- END;
- ELSE MODIFY; { user wants to change a byte }
- END; { CASE }
- UNTIL CHOICE IN [WRITEKEY,EXITKEY];
- CH := CHOICE;
- END; { EDIT }
-
- { <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< END INCLUDE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- }