home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol157 / fcbfn.a86 < prev    next >
Text File  |  1985-03-14  |  2KB  |  99 lines

  1.     TITLE    'FORM FILE STRING FROM FCB'
  2.  
  3.  
  4.     PAGEWIDTH 110
  5.  
  6.     CSEG
  7.  
  8.     PUBLIC    FCBFN,FFCBFN
  9.  
  10. FNLEN    EQU    8
  11. FEXTL    EQU    3
  12.  
  13. ;THIS SUBROUTINE FORMS A FILE NAME STRING FROM THE FIRST 12
  14. ;BYTES OF AN FCB.  ITS MAIN USE IS TO ISSUE AN ERROR MESSAGE
  15. ;ABOUT A FILE PROPERLY FORMATTED.  THE FILE STRING IS CONSTRUCTED
  16. ;IN THE USER BUFFER AND THE FIRST BYTE CONTAINS THE NUMBER OF
  17. ;BYTES IN THE FILE STRING.
  18.  
  19. ;PROGRAMMED BY A. L. BENDER, M. D.
  20. ;NEUROLOGICAL SERVICES, INC.
  21. ;336 CENTER AVENUE
  22. ;WESTWOOD NJ 07675
  23. ;THIS IS IN PUBLIC DOMAIN AND MAY BE USED BY ALL BUT NEVER SOLD
  24. ;OR INCORPORATED IN SOFTWARE TO BE SOLD OR DISRIBUTED FOR PROFIT.
  25. ;
  26.  
  27. ;
  28. ;CALL:
  29. ;    BX-->ADDRESS OF USER BUFFER TO STORE FILE NAME
  30. ;    DX-->ADDRESS OF USER'S FCB
  31. ;    CALL    FCBFN    ;NEAR CALL
  32. ;OR    CALL    FFCBFN    ;FAR CALL
  33. ;
  34. ;    IN EITHER CASE DS: MUST BE SET TO DATA SEGMENT OF BOTH
  35. ;    ON EXIT:
  36. ;    THE STRING IS IN THE USER'S BUFFER.
  37. ;    THE NUMBER OF BYTES IN THE STRING IS IN THE FIRST BYTE OF THE BUFFER
  38. ;    BX->UNDISTURBED
  39. ;    DX->UNDISTURBED
  40. ;    ALL OTHER REGISTERS UNCHANGED
  41. ;
  42.  
  43. FFCBFN:    CALL    FCBFN    ;CALL NEAR PROCEDURE
  44.     RETF        ;RETURN FAR
  45.  
  46. FCBFN:    PUSH    ES
  47.     PUSH    SI
  48.     PUSH    DI
  49.     PUSH    CX
  50.     PUSH    AX
  51.     PUSHF
  52.     
  53.     MOV    AX,DS
  54.     MOV    ES,AX    ;SET ES: TO DS:
  55.     MOV    SI,0
  56.     MOV    DI,DX
  57.     MOV    BYTE PTR 0 [BX],0
  58.  
  59.     MOV    AL,[DI]
  60.     TEST    AL,AL
  61.     JZ    FN
  62.     ADD    AL,'A'-1
  63.     MOV    BYTE PTR 1 [BX],AL
  64.     MOV    BYTE PTR 2 [BX],':'
  65.     ADD    SI,2
  66.  
  67. FN:    MOV    CX,FNLEN
  68. FN1:    MOV    AL, 1 [DI]    ;FILE NAME
  69.     CMP    AL,' '        ;CHECK FOR BLANK
  70.     JZ    FX        ;FILE EXTENSION
  71.     INC    SI
  72.     MOV    BYTE PTR 0 [BX+SI],AL
  73.     INC    DI
  74.     LOOP    FN1
  75. FX:    MOV    CX,FEXTL
  76.     INC    SI
  77.     MOV    BYTE PTR 0 [BX+SI],'.'
  78.     MOV    DI,FNLEN    ;GET TO EXTENSION
  79.     ADD    DI,DX        ;POINT TO IT
  80.  
  81. FX1:    MOV    AL, 1 [DI]    ;FILE EXTENSION
  82.     CMP    AL,' '
  83.     JZ    DONE
  84.     INC    SI
  85.     INC    DI
  86.     MOV    BYTE PTR 0 [BX+SI],AL
  87.     LOOP    FX1
  88. DONE:    MOV    CX,SI
  89.     MOV    BYTE PTR 0 [BX],CL
  90.  
  91.     POPF
  92.     POP    AX
  93.     POP    CX
  94.     POP    DI
  95.     POP    SI
  96.     POP    ES
  97.     RET
  98.     END
  99.