home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 15 / CDACTUAL15.iso / cdactual / program / pascal / JMICK11.ZIP / UNREAD.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1989-11-15  |  3.3 KB  |  68 lines

  1. Unit Unread;
  2.  
  3. INTERFACE
  4.   Procedure UnreadChar(X : Char);
  5.  
  6. IMPLEMENTATION
  7.  
  8. CONST
  9.   IPCSEG = $0040;
  10.   BUFFHEADOFF = $001A;
  11.   BUFFTAILOFF = $001C;
  12.   KEYBUFFSTART= $001E;
  13.   KEYBUFFEND  = $003E;
  14.   Scan_Table : array [0..255] of Word = ( { Note that Some Converted to spaces }
  15.         $3920, $3920, $3920, $3920, $3920, $3920, $3920, $3920, { 0-7    IG}
  16.         $3920, $3920, $3920, $3920, $3920, $1C0D, $3920, $3920, { 8-15   IG}
  17.         $3920, $3920, $3920, $3920, $3920, $3920, $3920, $3920, { 16-23  IG}
  18.         $3920, $3920, $3920, $3920, $3920, $3920, $3920, $3920, { 24-31  IG}
  19.         $3920, $0221, $2822, $0423, $0524, $0625, $0826, $3920, { 32-39    }
  20.         $0A28, $0B29, $3920, $0D2B, $3920, $0C2D, $3920, $3920, { 40-47    }
  21.         $0B30, $0231, $0332, $0433, $0534, $0635, $0736, $0837, { '0'-'7'  }
  22.         $0938, $0A39, $3920, $3920, $3920, $3920, $3920, $3920, { '8','9' IG}
  23.         $3920, $1E41, $3042, $2E43, $2044, $1245, $2146, $2247, {IG 'A'..'G'}
  24.         $2348, $1749, $244A, $254B, $264C, $324D, $314E, $184F, {'H'..'O'}
  25.         $1950, $1051, $1352, $1F53, $1454, $1655, $2F56, $1157, {'P'..'W'}
  26.         $2D58, $1559, $2C5A, $3920, $3920, $3920, $3920, $0C5F, {'X'..'Z', IG... '_'}
  27.         $3920, $1E61, $3062, $2E63, $2064, $1265, $2166, $2267, {IG 'a'..'g'}
  28.         $2368, $1769, $246A, $256B, $266C, $326D, $316E, $186F, {'h'..'o'}
  29.         $1970, $1071, $1372, $1F73, $1474, $1675, $2F76, $1177, {'p'..'w'}
  30.         $2D78, $1579, $2C7A, $3920, $3920, $3920, $3920, $3920, {'x'..'z', IG}
  31.         $3920, $3920, $3920, $3920, $3920, $3920, $3920, $3920, { ig }
  32.         $3920, $3920, $3920, $3920, $3920, $3920, $3920, $3920, { Ig }
  33.         $3920, $3920, $3920, $3920, $3920, $3920, $3920, $3920,
  34.         $3920, $3920, $3920, $3920, $3920, $3920, $3920, $3920,
  35.         $3920, $3920, $3920, $3920, $3920, $3920, $3920, $3920,
  36.         $3920, $3920, $3920, $3920, $3920, $3920, $3920, $3920,
  37.         $3920, $3920, $3920, $3920, $3920, $3920, $3920, $3920,
  38.         $3920, $3920, $3920, $3920, $3920, $3920, $3920, $3920,
  39.         $3920, $3920, $3920, $3920, $3920, $3920, $3920, $3920,
  40.         $3920, $3920, $3920, $3920, $3920, $3920, $3920, $3920,
  41.         $3920, $3920, $3920, $3920, $3920, $3920, $3920, $3920,
  42.         $3920, $3920, $3920, $3920, $3920, $3920, $3920, $3920,
  43.         $3920, $3920, $3920, $3920, $3920, $3920, $3920, $3920,
  44.         $3920, $3920, $3920, $3920, $3920, $3920, $3920, $3920,
  45.         $3920, $3920, $3920, $3920, $3920, $3920, $3920, $3920,
  46.         $3920, $3920, $3920, $3920, $3920, $3920, $3920, $3920);
  47.  
  48. Procedure UnreadChar(X : Char);
  49.   Var
  50.     HeadPtr, TailPtr, CurrPtr : ^Word;  { Pointers to Locations }
  51.     HeadIndx, TailIndx : Word;
  52.     ScanValue : Word;
  53.   Begin
  54.     HeadPtr := Ptr(IPCSEG,BUFFHEADOFF); { Make pointer to head }
  55.     TailPtr := Ptr(IPCSEG,BUFFTAILOFF); { Make pointer to tail }
  56.     HeadIndx := Word(HeadPtr^); { Get the HEad Value }
  57.     TailIndx := Word(TailPtr^); { Get the Tail Value }
  58.     CurrPtr := Ptr(IPCSEG,TailIndx); { Make a pointer to the actual buffer }
  59.     ScanValue := Scan_Table[Ord(X)]; { Get the scan }
  60.     CurrPtr^ := ScanValue; { Place it into the buffer }
  61.     Inc(TailIndx,2); { Add 2 to the address tail }
  62.     If (TailIndx = KEYBUFFEND) Then TailIndx := KEYBUFFSTART;
  63.     TailPtr^ := TailIndx;
  64.   End;
  65.  
  66. Begin { Initialization }
  67. End.
  68.