home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a016 / 1.ddi / ASM / BLERRPRG.ASM next >
Encoding:
Assembly Source File  |  1992-03-15  |  7.4 KB  |  141 lines

  1.  
  2. PAGE      60,132
  3.  
  4. ; █████████████████████████████████████████████████████████████████████████████████████████████████
  5. ; ██                                                                                             ██
  6. ; ██      92.03.14            BLINKER                                                            ██
  7. ; ██                                                                                             ██
  8. ; █████████████████████████████████████████████████████████████████████████████████████████████████
  9.  
  10. .model    large
  11.  
  12. title     BLERRPRG.ASM        BLINKER overlay manager error handler for ASM
  13.  
  14. extrn     _BLIERRNUM:far                          ; Get error number procedure
  15.  
  16.  
  17. ; █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
  18. ; █                 Constant data                                                                 █
  19. ; █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█
  20.  
  21. .data             
  22.  
  23. ovlerrmsg db        'BLINKER ' 
  24. ovlerrnum db        '0000 : $'
  25.  
  26. ovler1201 db        'unable to find overlay file in the current PATH$'
  27. ovler1202 db        'DOS read error in overlay file$'
  28. ovler1203 db        '.EXE file is not a valid .EXE file$'
  29. ovler1204 db        'overlay file does not match the .EXE file$'
  30. ovler1205 db        'not enough memory to load procedure$'
  31. ovler1206 db        'maximum procedure nesting depth exceeded$'
  32. ovler1207 db        'demonstration calls limit exceeded$'
  33. ovler1208 db        'demonstration date limit exceeded$'
  34. ovler1209 db        'demonstration time limit exceeded$'
  35. ovler1210 db        'overlay has been prematurely freed$'
  36. ovler1211 db        'overlay manager stack overflow$'
  37. ovler1212 db        'Overlay Opsize exceeded - increase Opsize$'
  38. ovler1213 db        'attempt to call DEFINED routine$'
  39. ovler1214 db        'error accessing EMS overlay cache$'
  40. ovler1215 db        'error accessing XMS overlay cache$'
  41. ovler1216 db        'overlay manager unable to resume$'
  42. ovler1217 db        'overlay vector corrupted during execution$'
  43.  
  44. ovlercrlf db        0dh,0ah,'$'
  45.  
  46. ovlerrtbl dw        offset DGROUP:ovler1201
  47.           dw        offset DGROUP:ovler1202
  48.           dw        offset DGROUP:ovler1203
  49.           dw        offset DGROUP:ovler1204
  50.           dw        offset DGROUP:ovler1205
  51.           dw        offset DGROUP:ovler1206
  52.           dw        offset DGROUP:ovler1207
  53.           dw        offset DGROUP:ovler1208
  54.           dw        offset DGROUP:ovler1209
  55.           dw        offset DGROUP:ovler1210
  56.           dw        offset DGROUP:ovler1211
  57.           dw        offset DGROUP:ovler1212
  58.           dw        offset DGROUP:ovler1213
  59.           dw        offset DGROUP:ovler1214
  60.           dw        offset DGROUP:ovler1215
  61.           dw        offset DGROUP:ovler1216
  62.           dw        offset DGROUP:ovler1217
  63.  
  64.  
  65. ; █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
  66. ; █                 Code segment                                                                  █
  67. ; █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█
  68.  
  69. .code        
  70.  
  71. public    _BLERRPRG                               ; Error handler
  72.  
  73.  
  74. ; █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
  75. ; █                 ASM error handler                                                             █
  76. ; █                 -----------------                                                             █
  77. ; █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█
  78.  
  79. _BLERRPRG proc      far
  80.           call      _BLIERRNUM                    ; Get the error number
  81.           mov       bx,DGROUP                     ; Default data segment
  82.           mov       ds,bx                         ; Set it up
  83.           mov       es,bx                         ; Set it up as destination
  84.           mov       bx,ax                         ; Save error number here
  85.           mov       di,offset DGROUP:ovlerrnum    ; Temporary buffer
  86.           mov       cx,3                          ; Width 4
  87.           call      strfmtdec                     ; Format the decimal number
  88.           mov       ah,9                          ; Display a string
  89.           mov       dx,offset DGROUP:ovlerrmsg    ; Point to the string
  90.           int       21h                           ; Display it
  91.           sub       bx,1201d                      ; Relative to zero
  92.           shl       bx,1                          ; Word offset
  93.           mov       dx,ovlerrtbl [bx]             ; Get offset of error message
  94.           mov       ah,9                          ; Display a string
  95.           int       21h                           ; Display it
  96.           mov       ah,9                          ; Display a string
  97.           mov       dx,offset DGROUP:ovlercrlf    ; Carriage return, line feed
  98.           int       21h                           ; Display it
  99.           mov       ax,4cffh                      ; Terminate with error code -1
  100.           int       21h                           ; The end
  101. _BLERRPRG endp
  102.  
  103.  
  104. ; █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
  105. ; █                 Format a decimal number                                                       █
  106. ; █                 -----------------------                                                       █
  107. ; █       P :                                                                                     █
  108. ; █                 AX    =  Number                                                               █
  109. ; █                 CX    =  Field width                                                          █
  110. ; █                 ES:DI -> Destination field                                                    █
  111. ; █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█
  112.  
  113. strfmtdec proc      near
  114.           cmp       ax,0Ah                        ; Is it less than 10
  115.           jb        fmtdec010                     ; Yes - the last digit
  116.           push      dx                            ; Save DX
  117.           push      bx                            ; Save BX
  118.           mov       bx,0Ah                        ; Base 10
  119.           sub       dx,dx                         ; Clear high part
  120.           div       bx                            ; Divide by 10
  121.           pop       bx                            ; Restore BX
  122.           dec       cx                            ; One less position
  123.           call      strfmtdec                     ; Display the result
  124.           mov       ax,dx                         ; Remainder
  125.           pop       dx                            ; Restore DX
  126.           jmp       short fmtdec020               ; And finish
  127. fmtdec010:
  128.           cmp       cx,0                          ; Leading zeros
  129.           jle       fmtdec020                     ; No
  130.           push      ax                            ; Save remainder
  131.           mov       al,'0'                        ; Leading zero
  132.           rep       stosb                         ; Write leading zeros
  133.           pop       ax                            ; Restore remainder
  134. fmtdec020:
  135.           add       al,'0'                        ; Convert to ASCII
  136.           stosb                                   ; Save it
  137.           ret                                     ; Done
  138. strfmtdec endp
  139.  
  140.           end
  141.