; File CKERMOD.INI, Sample C-Kermit 7.0 customization file.
;
; This file, which is ONLY A SAMPLE, should be called:
;
;   .mykermrc   (UNIX, OS-9, Aegis, BeBox, Plan 9)
;   CKERMOD.INI (VMS, OpenVMS, AOS/VS, OS/2, Amiga, Atari ST)
;   ckermod.ini (Stratus VOS)
;
; This file is executed automatically by the standard C-Kermit initialization
; file, CKERMIT.INI (or .kermrc).  This file is not executed by C-Kermit itself
; unless the initialization file is not found.
;
; MODify this file to suit your needs and preferences, and install it in your
; home directory.  Or replace it entirely with a new file.
;
; The design of this sample customization file lets you fill in a section for
; each different operating system where you run C-Kermit.
;
; In UNIX, if you give this file execute permission and make sure the top
; line indicates the full path of the C-Kermit 7.0-or-later executable, you
; can execute this file directly, as if it was a shell script, except it is
; interpreted by Kermit rather than the shell.  This lets you have as many
; different startup files as you like, each suited to a particular purpose.
;
; Authors:  Christine Gianone, Frank da Cruz, Jeffrey Altman,
;           The Kermit Project, Columbia University.
; Creation: 23 November 1992 for C-Kermit 5A(188).
; Modified: 30 June 1993 for edit 189.
;           04 October 1994 for edit 190.
;           17 April 1995 for edit 191.
;            6 September 1996 for version 6.0, edit 192.
;            1 January 2000 for version 7.0, edit 196.
;           14 October 2001 for version 8.0, edit 200.

ECHO
ECHO Executing SAMPLE C-Kermit customization file \v(cmdfile) for \v(system)...
ECHO { Please edit this file to reflect your needs and preferences.}
ECHO
;
; ... and then remove the ECHO commands above.

COMMENT - Settings that apply to all the systems I use:
;
set delay 1                  ; I escape back quickly
set dial display on          ; I like to watch C-Kermit dial

; Dialing locale and method
;
; SET DIAL COUNTRY-CODE 1    ; Uncomment and replace with yours
; SET DIAL AREA-CODE 000     ; Uncomment and replace with yours
; SET DIAL LD-PREFIX 1       ; Uncomment and replace with yours
; SET DIAL INTL-PREFIX 011   ; Uncomment and replace with yours
; SET DIAL METHOD TONE       ; Uncomment and replace with PULSE if necessary
; SET DIAL DIRECTORY ... ... ; List dialing directory files here

if < \v(version) 600192 -
  stop 1 \v(cmdfile): C-Kermit 6.0.192 or later required.

set take error on            ; Make errors fatal temporarily
check if                     ; Do we have an IF command?
set take error off           ; Yes we do, back to normal

; The ON_EXIT macro is executed automatically when C-Kermit exits.
; Define as desired.
;
define ON_EXIT echo Returning you to \v(system) now.

; System-independent quick dialing macro.  Depends on having the
; macros MYMODEM, MYPORT, and (optionally) MYSPEED defined in the
; system-dependent sections below.
;
define MYDIAL {
    if not defined MYMODEM end 1 {\%0: Modem type not defined.}
    set modem type \m(MYMODEM)
    if fail end 1 {\%0: \m(MYMODEM): Unsupported modem type.}
    if not defined MYPORT end 1 {\%0: Communication port not defined.}
    set port \m(MYPORT)
    if fail end 1 {\%0: SET PORT \m(MYPORT) failed.}
    if defined MYFLOW set flow \m(MYFLOW)
    if fail end 1 {\%0: SET FLOW \m(MYFLOW) failed.}
    if defined MYSPEED set speed \m(MYSPEED)
    if fail end 1 {\%0: SET SPEED \m(MYSPEED) failed.}
    dial \%1\%2\%3\%4\%5\%6\%7\%8\%9
    end \v(status)
}

forward \v(system)              ; Go execute system-dependent commands

:UNIX                           ; UNIX, all versions...
define MYPORT /dev/cua          ; My dialing environment
define MYMODEM usr              ; Replace these by what you actually have
define MYSPEED 57600
;
; If you want all your downloads to go to the same directory, no matter
; what your current directory is, uncomment and edit the following command:
;
;   set file download-directory ~/download ; Download directory for UNIX

; Put other UNIX-specific commands here...
end                             ; End of UNIX section

:VMS                            ; VMS and OpenVMS
define MYPORT TXA0:             ; My dialing environment
define MYMODEM usr              ; Replace these by what you actually have
define MYSPEED 57600
; set file download-directory [\$(USER).DOWNLOAD] ; Download directory for VMS
; Put other VMS-specific commands here...
end                             ; End of VMS section

:WIN32                          ; Windows and OS/2 customizations...
:OS/2
define MYPORT COM1              ; My dialing environment
define MYMODEM usr              ; Replace these by what you actually have
define MYSPEED 57600
set command byte 8              ; Use 8 bits between Kermit and console
set xfer char latin1            ; Use Latin-1 for text file transfer
set term char latin1            ; And use Latin-1 during CONNECT mode
; set file download-directory C:\DOWNLOADS
end

:OS9/68K                        ; OS-9/68000
define MYPORT /t3               ; My dialing environment
define MYMODEM usr              ; Replace these by what you actually have
define MYSPEED 9600
; set file download-directory ~/downloads
end                             ; End of OS-9 section

:AOS/VS                         ; Data General AOS/VS
define MYPORT @con3             ; My dialing environment
define MYMODEM usr              ; Replace these by what you actually have
define MYSPEED 9600
; set file download-directory \v(home)DOWNLOADS
end

; And so on, you get the idea...
; Fill in the sections that apply to you.

:Stratus_VOS			; Stratus VOS
:Amiga                          ; Commodore Amiga
:Atari_ST                       ; Atari ST
:Macintosh                      ; Apple Macintosh
:unknown                        ; Others

; (End of CKERMOD.INI)
