home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / progm / disam.zip / DISAMACC.SUB < prev    next >
Text File  |  1988-09-06  |  5KB  |  140 lines

  1. ;
  2. ;        DISAM assembler access subroutines
  3. ;        88009 Increased DSMRC to 2 bytes long
  4. ;
  5. ;
  6. ;ENTRY   SI = ADDRESS OF STRING BEING SENT TO DISAM TERMINATED W/ZERO
  7. ;EXIT    SI = ADDRESS OF STRING RECEIVED FROM DISAM TERMINATED W/ZERO
  8. ;USAGE
  9. ;        MOV DSMCHAN,'1'        ASCII BUFFER NUMBER (DEFAULT IS 1)
  10. ;        MOV SI,OFFSET STRING   FILE NAME | RECORD KEY | DATA RECORD
  11. ;        CALL  DSM...
  12. ;              ...OPN           OPEN FILE
  13. ;              ...CLS           CLOSE FILE
  14. ;              ...ADD           ADD RECORD
  15. ;              ...DEL           DELETE RECORD
  16. ;              ...GET           GET A RECORD
  17. ;              ...PUT           REPLACE A RECORD
  18. ;              ...IMM           SET IMMEDIATE UPDATE MODE
  19. ;              ...FRE           FREE AN OPEN BUFFER
  20. ;
  21. DSMOPN   PROC  NEAR             ;DISAM OPEN SUBROUTINE
  22.          CALL  DSMBSD
  23.          MOV   DSMFUNC,'O'      ;SET FUNCTION TO OPEN
  24.          JMP   DSMCOM
  25. DSMOPN   ENDP
  26.  
  27. DSMCLS   PROC  NEAR             ;DISAM CLOSE SUBROUTINE
  28.          CALL  DSMBSD
  29.          MOV   DSMFUNC,'C'      ;SET FUNCTION TO CLOSE
  30.          JMP   DSMCOM
  31. DSMCLS   ENDP
  32.  
  33. DSMADD   PROC  NEAR             ;DISAM ADD SUBROUTINE
  34.          CALL  DSMBSD
  35.          MOV   DSMFUNC,'A'      ;SET FUNCTION TO ADD
  36.          JMP   DSMCOM
  37. DSMADD   ENDP
  38.  
  39. DSMDEL   PROC  NEAR             ;DISAM DELETE SUBROUTINE
  40.          CALL  DSMBSD
  41.          MOV   DSMFUNC,'D'      ;SET FUNCTION TO DELETE
  42.          JMP   DSMCOM
  43. DSMDEL   ENDP
  44.  
  45. DSMGET   PROC  NEAR             ;DISAM GET SUBROUTINE
  46.          CALL  DSMBSD
  47.          MOV   DSMFUNC,'G'      ;SET FUNCTION TO GET
  48.          JMP   DSMCOM
  49. DSMGET   ENDP
  50.  
  51. DSMPUT   PROC  NEAR             ;DISAM PUT SUBROUTINE
  52.          CALL  DSMBSD
  53.          MOV   DSMFUNC,'P'      ;SET FUNCTION TO PUT
  54.          JMP   DSMCOM
  55. DSMPUT   ENDP
  56.  
  57. DSMIMM   PROC  NEAR             ;DISAM SET UPDATE IMMED SUBROUTINE
  58.          CALL  DSMBSD
  59.          MOV   DSMFUNC,'I'      ;SET FUNCTION TO IMM MODE
  60.          JMP   DSMCOM
  61. DSMIMM   ENDP
  62.  
  63. DSMFRE   PROC  NEAR             ;DISAM FREE BUFFER SUBROUTINE
  64.          CALL  DSMBSD
  65.          MOV   DSMFUNC,'F'      ;SET FUNCTION TO FREE
  66.          JMP   DSMCOM
  67. DSMFRE   ENDP
  68.  
  69. ;----------------------------------------------------------------------
  70.  
  71. DSMBSD   PROC  NEAR             ;BUILD STRING DESCRIPTOR
  72. ;ENTRY   SI = ADDRESS OF STRING
  73. ;EXIT    SI = ADDRESS OF STRING DESCRIPTOR
  74. ;
  75.          MOV   DSMRSDA,SI       ;STORE STRING ADDRESS IN STRING DESCRIP
  76.          MOV   AX,0             ;FIND THE STRING LENGTH
  77. DSMBSD1: CMP   BYTE PTR [SI],0
  78.          JZ    DSMBSD2
  79.          INC   SI
  80.          INC   AX
  81.          JMP   DSMBSD1
  82.  
  83. DSMBSD2: MOV   DSMRSDL,AX       ;PUT STRING LENGTH IN STRING DESCRIPTOR
  84.          MOV   SI,OFFSET DSMRSDL
  85.          RET
  86. DSMBSD   ENDP
  87.  
  88. ;----------------------------------------------------------------------
  89.  
  90. DSMCOM   PROC  NEAR             ;COMMON CODE USED BY ALL ROUTINES
  91.          MOV   BX,OFFSET DSMFUNCL
  92.          PUSH  BX               ;PUSH FIRST VARIABLE ON THE STACK
  93.          PUSH  SI               ;PUSH SECOND VARIABLE ON THE STACK
  94.          DB    1 DUP(9AH)       ;THIS IS A LONG CALL TO
  95.          DW    1 DUP(0)         ;0012:000 (DFH3)
  96.          DW    1 DUP(12H)
  97. ;
  98. ;        Here we are between us and the DISAM file handler
  99. ;
  100.          MOV   SI,DSMRSDA       ;CONVERT THE SD TO A STRING
  101.          PUSH  SI               ;ADDRESSED BY SI AND TERMINATED
  102.          ADD   SI,DSMRSDL       ;WITH A ZERO
  103.          MOV   BYTE PTR [SI],0
  104.          POP   SI
  105.          RET                    ;RETURN TO CALLING ROUTINE
  106. DSMCOM   ENDP
  107.  
  108. ;----------------------------------------------------------------------
  109.  
  110. DSMCHK   PROC  NEAR             ;SEE IF DFH3 IS LOADED
  111. ;ENTRY   NONE
  112. ;EXIT    'Z' SET, OKAY
  113. ;        'Z' NOTSET, ERROR
  114. ;
  115.          MOV   AX,0012H         ;SET ES:=0012
  116.          MOV   ES,AX
  117.          MOV   AL,ES:[0]        ;AL=[0012:0000]
  118.          CMP   AL,0EAH          ;EXPECT TO FIND A LONG CALL INSTRUCTION
  119.          RET
  120. DSMCHK   ENDP
  121.  
  122. ;----------------------------------------------------------------------
  123.                                 ;FUNCTION STRING DESCRIPTOR
  124. DSMFUNCL DW    1 DUP(3)         ;FUNCTION STRING LENGTH
  125.          DW    DSMFUNC          ;FUNCTION STRING ADDRESS
  126.  
  127. DSMFUNC  DB    0                ;FUNCTION
  128.          DB    ','              ;COMMA
  129. DSMCHAN  DB    '1'              ;DEFAULT CHANNEL
  130.          DB    0
  131.  
  132.  
  133.                                 ;RECORD/KEY/FILE-NAME STRING DESCRIPTOR
  134. DSMRSDL  DW    0                ;RECORD/KEY/FILE-NAME LENGTH
  135. DSMRSDA  DW    0                ;RECORD/KEY/FILE-NAME ADDRESS
  136.  
  137.                                 ;RETURN-CODE STRING (FOR USER'S USE)
  138. DSMRC    DB    'O ',0           ;DISAM RETURN-CODE FIELD          ;88009
  139.  
  140.