home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / turbo4 / auxinout.pas < prev    next >
Pascal/Delphi Source File  |  1987-12-08  |  3KB  |  147 lines

  1.  
  2. {           Copyright (c) 1985, 87 by Borland International, Inc.            }
  3.  
  4. { Demonstrations-Unit AuxInOut aus Kapitel 25 }
  5. unit AuxInOut;
  6.  
  7. interface
  8. uses Dos;
  9. procedure AssignAux(var F: Text; Port,Params: Word);
  10.  
  11. implementation
  12. {$S-,R-}
  13.  
  14. type
  15.   TextBuf = array[0..127] of Char;
  16.   TextRec = record
  17.               Handle: Word;
  18.               Mode: Word;
  19.               BufSize: Word;
  20.               Private: Word;
  21.               BufPos: Word;
  22.               BufEnd: Word;
  23.               BufPtr: ^TextBuf;
  24.               OpenProc: Pointer;
  25.               InOutProc: Pointer;
  26.               FlushProc: Pointer;
  27.               CloseProc: Pointer;
  28.               AuxPort, AuxParam: Word;  { zwei neue Felder }
  29.               UserFill: array[1..12] of Byte; { um 4 Bytes kleiner }
  30.               Name: array[0..79] of Char;
  31.               Buffer: TextBuf;
  32.             end;
  33.  
  34. const
  35.   fmClosed = $D7B0;
  36.   fmInput  = $D7B1;
  37.   fmOutput = $D7B2;
  38.   fmInOut  = $D7B3;
  39.  
  40. procedure AuxInit(Port,Params: Word);
  41. inline(
  42.   $58/          { POP   AX      ;  Parameter Params -> AX  }
  43.   $5A/          { POP   DX      ;  Portnummer  -> DX }
  44.   $B4/$00/      { MOV   AH,0    ;  Funktionscode: Initialisierung }
  45.   $CD/$14);     { INT   14H     ;  BIOS-Aufruf }
  46.  
  47. function AuxInchar(Port: Word): Char;
  48. inline(
  49.   $5A/          { POP   DX      ; Portnummer -> DX }
  50.   $B4/$02/      { MOV   AH,2    ; Funktionscode: Input }
  51.   $CD/$14);     { INT   14H     ; BIOS-Aufruf }
  52.  
  53. procedure AuxOutchar(Port: Word; Ch: Char);
  54. inline(
  55.   $58/          { POP   AX      ; auszugebendes Zeichen -> AX (AL) }
  56.   $5A/          { POP   DX      ; Portnummer -> DX }
  57.   $B4/$01/      { MOV   AH,1    ; Funktionscode: Output }
  58.   $CD/$14);     { INT   14H     ; BIOS-Aufruf }
  59.  
  60. function AuxInReady(Port: Word) : Boolean;
  61. inline(
  62.   $5A/          { POP   DX      ; Portnummer -> DX }
  63.   $B4/$03/      { MOV   AH,3    ; Funktionscode: Status }
  64.   $CD/$14/      { INT   14H     ; BIOS-Aufruf }
  65.   $88/$E0/      { MOV   AL,AH   ; Status -> AL }
  66.   $24/$01);     { AND   AL,1    ; Daten bereit? }
  67.  
  68. {$F+}
  69.  
  70. function AuxInput(var F : TextRec) : Integer;
  71. var
  72.   P : Integer;
  73. begin
  74.   with F do
  75.   begin
  76.     P := 0;
  77.     while AuxInReady(AuxPort) and (P<BufSize) do
  78.     begin
  79.       BufPtr^[P] := AuxInChar(AuxPort); Inc(P);
  80.     end;
  81.     BufPos := 0; BufEnd := P;
  82.   end;
  83.   AuxInput := 0;
  84. end;
  85.  
  86. function AuxOutput(var F: TextRec): Integer;
  87. var
  88.   P : Integer;
  89. begin
  90.   with F do
  91.   begin
  92.     for P  := 0 to BufPos-1 do AuxOutChar(AuxPort,BufPtr^[P]);
  93.     BufPos := 0;
  94.   end;
  95.   AuxOutput := 0;
  96. end;
  97.  
  98. function AuxIgnore(var F : TextRec) : Integer;
  99. begin
  100.   AuxIgnore := 0;
  101. end;
  102.  
  103. function AuxOpen(var F : TextRec) : Integer;
  104. begin
  105.   with F do
  106.   begin
  107.     AuxInit(AuxPort,AuxParam);
  108.     if Mode = fmInput then
  109.     begin
  110.       InOutProc := @AuxInput;
  111.       FlushProc := @AuxIgnore;
  112.     end else
  113.     begin
  114.       Mode     := fmOutput;
  115.       InOutProc:= @AuxOutput;
  116.       FlushProc:= @AuxOutput;
  117.     end;
  118.     CloseProc := @AuxIgnore;
  119.   end;
  120.   AuxOpen := 0;
  121. end;
  122.  
  123. {$F-}
  124.  
  125. procedure AssignAux;
  126. begin
  127.   with TextRec(F) do
  128.   begin
  129.     Handle    := $FFFF;
  130.     Mode      := fmClosed;
  131.     BufSize   := SizeOf(Buffer);
  132.     BufPtr    := @Buffer;
  133.     OpenProc  := @AuxOpen;
  134.     AuxPort   := Port;
  135.     AuxParam  := Params;
  136.     Name[0]   := #0;
  137.   end;
  138. end;
  139.  
  140. end.
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.