home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / BBS_UTIL / BM0406_A.ZIP / BMASM.ZIP / PC-NET.ASM < prev    next >
Assembly Source File  |  1992-08-02  |  4KB  |  106 lines

  1. ;
  2. ; Changes made by Scott McNay (1:395/11) July 26, 1992, to allow routine to be
  3. ; used with code compiled with BC's /Fs option.  (Most) changes marked with
  4. ; ;BCFS0726.  May have optimized some code also.  This is a plug-in replacement
  5. ; for the original code.
  6. ;
  7.  
  8. ;BCFS0801: Standardized code format.  Made sure that DI, SI, BP, and DS are
  9. ;  saved to meet requirements of BC 7.x.
  10.  
  11.      Extrn  StringAddress:far                          ;BCFS0726
  12.  
  13. CSEG    SEGMENT BYTE PUBLIC 'CODE'
  14.     ASSUME  CS:CSEG,DS:CSEG,ES:CSEG,SS:CSEG
  15.     PUBLIC  LPLKIT
  16.     PUBLIC  LOKIT
  17.     PUBLIC  UNLOKIT
  18. LOOPLCK    EQU    0
  19. NETLOCK    EQU    1
  20. UNLOCK    EQU    2
  21. DRIVE    DB    ?        ; INPUT DRIVE NUMBER
  22. REQUEST    DB    ?        ; TYPE OF REQUEST
  23. LENLOK    DW    ?        ; LENGTH OF LOCK NAME
  24. POINTER    DW    ?        ; POINTER TO LOCK NAME
  25. LCKNAME    DB    64 DUP(?)    ; INPUT LOCK NAME
  26. NEWNAME    DB    '\'        ; REBUILT LOCK NAME WITH PATH
  27. CURPATH    EQU    $        ; CURRENT PATH FOR INPUT DRIVE
  28.     DB    64 DUP(?)    ; REBUILT LOCK NAME WITH PATH
  29. LENPATH    EQU    $-CURPATH
  30.  
  31. LPLKIT    PROC    FAR
  32.     MOV    CS:REQUEST,LOOPLCK
  33.     JMP    PROCESS
  34. LPLKIT    ENDP
  35.  
  36. LOKIT    PROC    FAR
  37.     MOV    CS:REQUEST,NETLOCK
  38.     JMP    PROCESS
  39. LOKIT    ENDP
  40.  
  41. UNLOKIT    PROC    FAR
  42.     MOV    CS:REQUEST,UNLOCK
  43.  
  44. PROCESS:
  45. INT    3    ;For debugging.  Remove when operation verified
  46.     PUSH    BP        ; SAVE BP
  47.     MOV    BP,SP        ; SAVE SP INTO BP FOR PARM ADDRESSING
  48.     PUSH    DS        ; SAVE BASIC'S DATA SEGMENT
  49.     PUSH    ES        ; SAVE BASIC'S EXTRA SEGMENT
  50.     PUSH    DI                                  ;BCFS0801
  51.     PUSH    SI                                  ;BCFS0801
  52.     MOV    BX,[BP+10]    ; GET ADDRESS OF DRIVE NUMBER
  53.     MOV    AL,[BX]        ; GET LOW ORDER BYTE OF DRIVE ADDRESS
  54.     MOV    CS:DRIVE,AL    ; SAVE THE DRIVE NUMBER
  55.     PUSH    [BP+8]        ; GET A$ STRING DESCRIPTOR ADDRESS          ;BCFS0726
  56.     CALL    StringAddress                              ;BCFS0726
  57.     MOV    CS:LENLOK,CX    ; GET LENGTH OF STRING A$ IN CX REGISTER      ;BCFS0726
  58.     MOV    CS:POINTER,AX                              ;BCFS0726
  59.     MOV    SI,AX        ; OFFSET OF BASIC'S STRING              ;BCFS0726
  60.     MOV    DS,DX                                  ;BCFS0726
  61.     PUSH    CS        ; MOV CS TO ES VIA STACK
  62.     POP    ES        ; TARGET IS IN OUR CSEG
  63.     MOV    DI,OFFSET LCKNAME ; OFFSET OF WORK AREA
  64.     CLD            ; START FROM THE BOTTOM
  65.     REP    MOVSB        ; COPY BASIC'S STRING TO OUR WORK AREA
  66.     PUSH    CS        ; MOV CS TO DS VIA STACK
  67.     POP    DS        ; OUR CSEG SEGMENT INTO DS
  68.     MOV    DI,OFFSET CURPATH ; ADDRESS OF AREA TO BLANK
  69.     MOV    CX,LENPATH    ; LENGTH OF AREA TO BLANK
  70.     MOV    AL,' '        ; A BLANK (NATURALLY)
  71.     REP    STOSB        ; BLANK THE AREA OUT
  72.     MOV    SI,OFFSET CURPATH ; SET UP FOR CURRENT PATH CALL
  73.     MOV    AH,47H        ; ASK FOR CURRENT PATH
  74.     MOV    DL,DRIVE    ; REQUEST PATH FOR INDICATED DRIVE
  75.     INC    DL        ; 1 ORIGIN FOR PATH CALL
  76.     INT    21H        ; CALL DOS
  77.     MOV    DI,OFFSET CURPATH ; START SCAN FOR ZERO BYTE AT START OF PATH
  78.     CMP    BYTE PTR [DI],0    ; SEE IF WE ARE IN THE BASE DIRECTORY
  79.     JE    ROOT        ; IF [DI]=0 THEN WE ARE IN THE BASE DIR
  80.     MOV    CX,LENPATH    ; ONLY GO FOR LENGTH OF PATH
  81.     XOR    AL,AL        ; SCANNING FOR THE 0 BYTE              ;BCFS0801
  82.     REPNE    SCASB        ; SCAN THE STRING WHILE [DI] <> 00H
  83.     DEC    DI
  84.     MOV    BYTE PTR [DI],'\' ; PUT IN THE ENDING '\' BEFORE FILE NAME
  85.     INC    DI        ; DI NOW POINTS TO THE ENDING 0
  86. ROOT:
  87.     MOV    SI,OFFSET LCKNAME+2 ; START MOVE AFTER THE ':'
  88.     MOV    CX,LENLOK    ; LENGTH OF STRING
  89.     DEC    CX        ; MINUS 1
  90.     DEC    CX        ; MINUS 1
  91.     REP    MOVSB        ; COPY FILENAME AFTER PATH NAME
  92.     MOV    DX,OFFSET NEWNAME ; POINT TO NEW NAME
  93.     MOV    AX,WORD PTR DRIVE ; GET DRIVE FOR LOCK
  94.     INT    67h        ; CALL LOCK MANAGER
  95.     POP    SI                                  ;BCFS0801
  96.     POP    DI                                  ;BCFS0801
  97.     POP    ES        ; GET BACK BASIC'S EXTRA SEGMENT
  98.     POP    DS        ; GET BACK BASIC'S DATA SEGMENT
  99.     MOV    DI,[BP+6]    ; GET ADDRESS OF RESULT VARIABLE
  100.     MOV    [DI],AL        ; STORE RETURN CODE FROM LOCK MANAGER
  101.     POP    BP
  102.     RET    6
  103. UNLOKIT    ENDP
  104. CSEG    ENDS
  105.     END
  106.