[Back to COMM SWAG index] [Back to Main SWAG index] [Original]

    {
    ³    Does anyone have a few minutes to help a novice?   I'm new to Pascal
    ³  and have just added a new dimension to my Programming interests
    ³  through the purchase of Borland's Pascal With Objects 7.0 and as I
    ³  struggle through the 3000 odd pages of documentation I find I'm
    ³  missing some of the basics.   For example, I'm trying to Write a
    ³  little phone dialer as an exercise in using OOP and am having trouble
    ³  talking to the modem With the following:
    ³  Assign(Port,COM1);   ReWrite(Port);    Write(Port,ATDT);
    ³    This works fine only if I run my dialer Program after having using
    ³  another comms Program With my modem. if I try to run it cold I  get
    ³  Error 160: Device Write fault.  There is obviously some initialization
    ³  I need to do to "WAKEUP" the modem.

    ...Here's some routines to initialize/manipulates the RS-232 port.
    }

    Procedure InitCommPort(IniStr      : Byte;
                           CommPort    : Word;
                       Var LineStatus
                           ModemStatus  : Byte);
    (****************************************************************************
      Parameters:

            InitStr   -   Initialization paramter

                          Bits 7654321     Meaning
                               000           110 baud
                               001           150 baud
                               010           300 baud
                               011           600 baud
                               100          1200 baud
                               101          2400 baud
                               110          4800 baud
                               111          9600 baud
                                  00        no parity
                                  01        odd parity
                                  10        no parity
                                  11        even parity
                                    0       1 stop bit
                                    1       2 stop bit
                                     10     7-bit data length
                                     11     8-bit data length

                          ie: For 1200/N/8/1 use InitStr = 10000011b

            CommPort  -   Communication port (0=com1, 1=com2, 2=com3 etc)

            LineStatus    Bits 76543210        Meaning
                               1            time-out error
                                1           transfer shift register empty
                                 1          transfer holding register empty
                                  1         break interrupt detected
                                   1        framing error
                                    1       parity error
                                     1      overrun error
                                      1     data ready

            ModemStatus   Bits 76543210         Meaning
                               1            receive line signal detect
                                1           ring indicator
                                 1          data set ready (DSR)
                                  1         clear to send (CTS)
                                   1        delta receive line signal detect
                                    1       trailing edge ring detector
                                     1      delta data set ready (DDSR)
                                      1     delta clear to send  (DCTS)

    *****************************************************************************)

    Var
      regs : Registers;         (* Uses Dos Unit *)
    begin
      regs.AH := $00;
      regs.AL := InitStr;
      regs.DX := CommPort;
      Intr($14, regs);          (* initialize comm port *)
      LineStatus := regs.AH;
      ModemStatus := regs.AL;
    end;  (* InitCommPort *)

    Procedure TransmitChar(Ch: Byte;            (* Character to send *)
                           CommPort: Word;      (* comm port to use  *)
                       Var Code: Byte)          (* return code       *)
    (****************************************************************************

      notE:   BeFore calling this routine, the port must be first initialized
              by InitCommPort.

    ****************************************************************************)
    Var
      regs : Registers;
    begin
      regs.AH := $01;
      regs.AL := Ch;
      regs.DX := CommPort;          (* 0=com1, etc    *)
      Intr($14, regs);              (* send Character *)
      Code := regs.AH               (* return code    *)
    end;  (* TransmitChar *)

[Back to COMM SWAG index] [Back to Main SWAG index] [Original]