This file describes the layout of the L.sys and L-devices files. Here's my interpretation of L.sys: Site When Caller Class CallCode Login The nominal value for Caller is ACU, but it can be the code for any device that places calls, e.g., micom, datakit, ethernet, etc. The CallCode field contains the dope needed by the caller to complete the connection, e.g., for an ACU, CallCode is the phone number, while for, say, a micom, CallCode is the micom code for Site. Class is nominally speed, but circumstances sometimes make it necessary to encode other information here. E.g., at Bell Labs many sites distinguish centrex and dimension. Some use it to identify sites that answer vadic only. For ACU Callers, this is the old interpretation. Some examples: lento Any ACU D1200 MHd7464 ... lento Any ACU C1200 MH2057 ... lento Any MICOM 9600 lento ... lento Any DK unused mh/tempo/lento ... lento Any UNET lento 33 ... lento Any DIR 9600 tty42 ... lento Any DIR 2400 tty43 ... i.e., to get to lento, dial on an ACU, or open a micom port and whisper "lento" down it, or open a datakit port and shout "mh/tempo/lento" down it, or open Unet server 33 on Unet host 'lento', or call on tty42. Here's my interpretation of L-devices: Caller Line Useful Class Dialer Caller and Class are as above. Line identifies the device on which the call is placed. The Useful field is a place to identify something else needed to dial, e.g., the name of a dialing device, or a code to get past a sentry. The (new) Dialer field identifies the type of dialer being used so that the right dialing function can be called. Some examples: ACU cul0 cua0 1200 dn11 ACU cul1 cua1 1200 dn11 ACU tty49 unused 1200 ventel ACU tty49 unused 300 ventel ACU tty48 unused V1200 vadic ACU tty47 unused 1200 hayes ACU tty47 unused 300 hayes MICOM micom unused 9600 micom DIR tty42 unused 9600 direct If you wish to add another dialer/caller type, you must add a line to the condevs structure definded in condevs.c. There is a line in the condevs table for each device type listed in the L-devices file. The condev structure looks like: struct condev { char *CU_meth; /* method, such as "ACU" or "DIR" */ char *CU_brand; /* brand, such as "vadic" or "ventel" */ int (*CU_gen)(); /* what to call to search for brands */ int (*CU_open)(); /* what to call to open brand */ int (*CU_clos)(); /* what to call to close brand */ } condevs[]; The line for the Ventel might look like: { "ACU", "ventel", Acuopn, ventopn, ventcls }, While the line for the UNET interface might look like: { "UNET", "unet", unetopn, nulldev, unetcls }, There can be many 'brands' of the same kind of device, such as auto-dialers. The condevs array is searched for a method that matches the one in the L.sys file. The string comparison is done without regard to case, so "Acu" will match "ACU". Once a match is found, the routine pointed to by CU_gen is called. It is passed a pointer to the flds array, the array of pointers to strings derived from the L.sys entry. Typically, the CU_gen vector goes through the L-device table looking for a entry that is available, then trys to connect on that brand via the CU_open vector. If that fails, it might go on to the next brand. When it succeeds in opening a line, it should assign the brand closing vector (CU_clos) to the global symbol CU_end (i.e. CU_end = cd->CU_clos). The routine pointed to by CU_end is called when the line is to be shutdown. It is passed a file descriptor which it is to close. Another ACU can be added by writing the code for the CU_open and CU_clos and adding a line in the condevs[] table. The routine pointed to by CU_open is passed a pointer to the phone number; a pointer to the flds array; and a pointer to the dev structure, which contains the information from the L-devices entry. It should return a file descriptor that can be used to communicate with the other machine, or CF_DIAL if the connection was not made.