home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / TURBOPAS / EDISK.ZIP / EDIT.INC < prev    next >
Encoding:
Text File  |  1985-12-22  |  5.4 KB  |  159 lines

  1. {  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> BEGIN INCLUDE >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  2.    Filename :  EDIT.INC
  3. }
  4. PROCEDURE EDIT;
  5. {  ***************************************************************************
  6.    Enter the Edit Mode
  7.    ***************************************************************************
  8. }
  9. VAR
  10.    HEXMODE    : BOOLEAN;
  11.    CHOICE     : CHAR;
  12.    HI_LO      : BYTE;
  13.  
  14.    PROCEDURE POSITION (IDX : BYTE; MODE : BOOLEAN);
  15.    {  ---------------------------------------------------------------------------
  16.       Positon cursor in buffer
  17.       ---------------------------------------------------------------------------
  18.    }
  19.    BEGIN
  20.       IF MODE THEN
  21.       BEGIN
  22.          GOTOXY (XHEXBASE + (IDX + (IDX) DIV 2) MOD (3 * 16),
  23.             (IDX DIV 32) + YBASE);
  24.       END
  25.       ELSE
  26.       BEGIN
  27.          GOTOXY (((IDX DIV 2) MOD 16) + XASCBASE,
  28.             ((IDX DIV 2) DIV 16) + YBASE);
  29.       END;
  30.    END; { POSITION }
  31.  
  32.  
  33.    PROCEDURE SHOW (MODE : BOOLEAN);
  34.    {  ---------------------------------------------------------------------------
  35.       Show the value of the nybble or byte according to MODE
  36.       ---------------------------------------------------------------------------
  37.    }
  38.    BEGIN
  39.       IF MODE THEN                         { hex }
  40.       BEGIN
  41.          POSITION (HI_LO AND $FE,MODE);    { cursor at hi-nybble }
  42.          WRITE (HEX (BUFF[HI_LO DIV 2]));
  43.          IF ODD (HI_LO) THEN POSITION (HI_LO,MODE);  { put cursor back }
  44.       END
  45.       ELSE
  46.       BEGIN                                { ASCII }
  47.          POSITION (HI_LO,MODE);
  48.          IF (BUFF[HI_LO DIV 2] >= $20) AND
  49.             (BUFF[HI_LO DIV 2] < $7F) THEN
  50.             WRITE (CHR(BUFF[HI_LO DIV 2]))
  51.          ELSE
  52.          BEGIN
  53.             LOWVIDEO;
  54.             WRITE ('.');
  55.             HIGHVIDEO;
  56.          END; { ELSE }
  57.       END;
  58.    END; { SHOW }
  59.  
  60.  
  61.    PROCEDURE MODIFY;
  62.    {  ---------------------------------------------------------------------------
  63.       Modify the nybble (hex mode) or byte (ASCII mode) at cursor position
  64.       ---------------------------------------------------------------------------
  65.    }
  66.    BEGIN
  67.       IF HEXMODE THEN
  68.       BEGIN
  69.          IF UPCASE (CHOICE) IN ['0'..'9','A'..'F'] THEN
  70.          BEGIN
  71.             IF ODD (HI_LO) THEN
  72.             BEGIN                           { lo-nybble }
  73.                BUFF[HI_LO DIV 2] :=
  74.                   (BUFF[HI_LO DIV 2] AND
  75.                   $F0) OR (BINARY (CHOICE));
  76.             END
  77.             ELSE
  78.             BEGIN                           { hi-nybble }
  79.                BUFF[HI_LO DIV 2] :=
  80.                   (BUFF[HI_LO DIV 2] AND
  81.                   $0F) OR (BINARY (CHOICE) SHL 4);
  82.             END;
  83.             SHOW (NOT HEXMODE);
  84.             SHOW (HEXMODE);
  85.             HI_LO := SUCC (HI_LO);
  86.          END
  87.          ELSE WRITE (#7);
  88.       END
  89.       ELSE
  90.       BEGIN                         { ASCII }
  91.          BUFF[HI_LO DIV 2] := ORD (CHOICE);
  92.          SHOW (HEXMODE);
  93.          SHOW (NOT HEXMODE);
  94.          HI_LO := HI_LO + 2;
  95.       END;
  96.       POSITION (HI_LO,HEXMODE);
  97.    END; { MODIFY }
  98.  
  99. {  ***************************************************************************
  100. }
  101.  
  102. BEGIN { EDIT }
  103.    HEXMODE := TRUE;
  104.    HI_LO := 0;                  { 2 x the record position }
  105.    LOWVIDEO;
  106.    WRITE (#13,'EDIT mode');
  107.    HIGHVIDEO;
  108.    POSITION (HI_LO,HEXMODE);
  109.    REPEAT
  110.       READ (KBD,CHOICE);
  111.       CASE CHOICE OF
  112.          LEFTKEY  : BEGIN                   { cursor left }
  113.                        IF HEXMODE THEN HI_LO := PRED (HI_LO)
  114.                        ELSE HI_LO := HI_LO - 2;
  115.                        POSITION (HI_LO,HEXMODE);
  116.                     END;
  117.          RIGHTKEY : BEGIN                   { cursor right }
  118.                        IF HEXMODE THEN HI_LO := SUCC (HI_LO)
  119.                        ELSE HI_LO := HI_LO + 2;
  120.                        POSITION (HI_LO,HEXMODE);
  121.                     END;
  122.          UPKEY    : BEGIN                   { cursor up }
  123.                        HI_LO := HI_LO - 32;
  124.                        POSITION (HI_LO,HEXMODE);
  125.                     END;
  126.          DOWNKEY  : BEGIN                   { cursor down }
  127.                        HI_LO := HI_LO + 32;
  128.                        POSITION (HI_LO,HEXMODE);
  129.                     END;
  130.          SWAPKEY  : BEGIN                   { swap hex/ASCII mode }
  131.                        IF HEXMODE THEN
  132.                        BEGIN
  133.                           HEXMODE := FALSE;
  134.                           HI_LO := HI_LO AND $FE; { make even }
  135.                        END
  136.                        ELSE HEXMODE := TRUE;
  137.                        POSITION (HI_LO,HEXMODE);
  138.                     END;
  139.          WRITEKEY : BEGIN                   { write the block to file }
  140.                        SEEK (DISKFILE,POINT);
  141.                        BLOCKWRITE (DISKFILE,BUFF,1);
  142.                        GOTOXY (XHOME,YHOME);
  143.                        CLREOL;
  144.                        WRITELN ('> Record Written to Disk');
  145.                     END;
  146.          EXITKEY  : BEGIN                   { exit the edit mode }
  147.                        GOTOXY (XHOME,YHOME);
  148.                        CLREOL;
  149.                        WRITELN;
  150.                     END;
  151.          ELSE MODIFY;                       { user wants to change a byte }
  152.       END; { CASE }
  153.    UNTIL CHOICE IN [WRITEKEY,EXITKEY];
  154.    CH := CHOICE;
  155. END; { EDIT }
  156.  
  157. {  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< END INCLUDE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  158. }
  159.