GetCurrentLapConnection.c

/*
    Sample code to demonstrate use of the LAP Manager call to determine
    the current connection type i.e LocalTalk, EtherTalk phase 1/2, or
    TokenTalk phase 2.
    Rich Kubota 
    DTS
    
    Requires the following Assembler glue routine to make the LAP Manager call
;*******************
;File: CallLAPMgr.a
;*******************
; C prototype 
; pascal long CallLAPMgr(short selector);
; Pascal prototype
; Function CallLAPMgr(selector : integer): longint;
*******************
LAPMgrPtr   EQU         $B18        ; This points to our start (???ATalkHk2?)
LAPMgrCall  EQU         2           ; Offset to make LAP manager calls
 
CallLAPMgr  PROC    EXPORT
        LINK        A6,#0           ; set up stack frame
        MOVE.W      8(A6),D0        ; move selector parameter into D0
        MOVE.L      A2,-(A7)        ; store A2 on stack
        MOVEA.L     LAPMgrPtr,A2    ; Set A2 to address of LAP Mgr.
        JSR         LAPMgrCall(A2)  ; Call LAP Manager
        MOVE.L      D1,$A(A6)       ; Place result onto stack
        MOVE.L      (A7)+,A2        ; Restore A2
        UNLK        A6              ; restore stack frame
        MOVEA.L     (A7)+,A0        ; put return address into A0
        ADDQ.W      #$2,A7          ; clear off the parameter
        JMP         (A0)            ; return to caller
        RTS
        ENDP
        
        END
;*******************
;End of file
;*******************
 
*******************
Make Instructions
*******************
Asm -case off CallLAPMgr.a
C -r  'GetCurrentLAPConnection.c'
Link -d -c 'MPS ' -t MPST ¶
    CallLAPMgr.a.o GetCurrentLAPConnection.c.o ¶
    "{CLibraries}"StdClib.o ¶
    "{Libraries}"Stubs.o ¶
    "{Libraries}"Runtime.o ¶
    "{Libraries}"Interface.o ¶
    -o GetADEVType
*******************
    end of comments
*******************
*/
#include <Types.h>
#include <stdio.h>
 
#define LGetATalkInfo  0x09   /* Get AppleTalk info */
 
/* 'atlk' resource ID's of Apple supplied driver software. */
#define LTalk       0
#define ETalkPh1    2
#define TTalkPh2    5
#define ETalkPh2    10
 
pascal long CallLAPMgr( short selector);
 
main()
{
    long    result;
    char    adevType;
    char    slot;
    
    result = CallLAPMgr(LGetATalkInfo); 
    adevType = result & 0x000000FF;  /* atlk resource id is return in LSB */
    slot = result>>24;               /* card slot returned in MSB */
    
    switch (adevType) {
        case LTalk:
                printf("LocalTalk is the current connection.");
                break;
        case ETalkPh1:
                printf("EtherTalk phase 1 is the current connection in slot ");
                break;
        case ETalkPh2:
                printf("EtherTalk phase 2 is the current connection in slot ");
                break;
        case TTalkPh2:
                printf("TokenTalk is the current connection in slot ");
                break;
        default:
                printf("Unrecognized connection in slot ");
                break;
        }
    if (slot == 0)
        printf("\n");
    else
        printf("%d.\n", slot);
}