home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / progm / dpl.zip / DPL.MAC < prev    next >
Text File  |  1988-07-11  |  9KB  |  602 lines

  1. ; Doug's Programming Language  -- DPL, Version 2.22
  2. ; Copyright (c) 1988 Douglas S. Cody, All rights reserved.
  3. ;
  4.     .XLIST
  5. ;
  6. ;------------------------====< DPL LANGUAGE MACROS >====-----------------------
  7. ;
  8. PROG    MACRO    EXTNAM
  9.     NAME    EXTNAM
  10.     PAGE    64,131
  11.     TITLE    DPL 8086 MACRO, VERSION 2.22
  12. ;
  13. DATA    SEGMENT PUBLIC PARA 'DATA'
  14. @@@DPLMAIN    EQU    0FFH    ;; DECLARES A MAIN PROGRAM
  15. ;
  16.     ENDM
  17. ;
  18. ;------------------------===============================-----------------------
  19. ;
  20. SUBPGM    MACRO    EXTNAM
  21.     NAME    EXTNAM
  22.     PAGE    64,131
  23.     TITLE    DPL 8086 MACRO'S, VERSION 2.22
  24. ;
  25. DATA    SEGMENT PUBLIC PARA 'DATA'
  26. @@@DPLSUB    EQU    0FFH    ;; DECLARES A SUBROUTINE
  27.     ENDM
  28. ;
  29. ;----------------
  30. ;
  31. BEGIN    MACRO    EXTNAM
  32. ;
  33. ; DPL EXTERNAL DATA
  34. ;
  35.     IFNDEF    @@@DPLDAT
  36.     EXTRN    STATUS:WORD, ZERO:WORD, @CR_LF:BYTE
  37.     EXTRN    NULL:BYTE, EJECT:BYTE, BEEP:BYTE
  38.     EXTRN    CRTFLAG:BYTE, VIDPAGE:BYTE, @DPLVER:BYTE
  39.     EXTRN    @@@DPLREC:WORD
  40.     ENDIF
  41. ;
  42. DATA    ENDS
  43. ;
  44.     IFDEF    @@@DPLMAIN
  45. STACK    SEGMENT    STACK 'DGROUP'
  46.     DW    256 DUP(?)
  47. STACKD    LABEL    WORD
  48. STACK    ENDS
  49.     ENDIF
  50. ;
  51. CODE    SEGMENT    PUBLIC PARA 'CODE'
  52.     IFDEF    @@@DPLMAIN
  53.     ASSUME    CS:CODE,DS:DATA,SS:STACK
  54.     ELSE
  55.     ASSUME    CS:CODE,DS:DATA
  56.     ENDIF
  57. ;
  58.     IFDEF    @@@DPLMAIN
  59.     PUBLIC    EXTNAM
  60. EXTNAM    PROC    FAR
  61.     EXTRN    _DPLINIT:NEAR
  62.     CLI
  63.     MOV    AX,OFFSET STACKD
  64.     MOV    SP,AX
  65.     MOV    AX,SEG DATA
  66.     MOV    DS,AX
  67.     STI
  68.     CALL    _DPLINIT
  69.     ELSE
  70.     PUBLIC    EXTNAM
  71. EXTNAM    PROC    NEAR
  72.     ENDIF
  73.     ENDM
  74. ;
  75. ;----------------
  76. ;
  77. ENDPGM    MACRO    EXTNAM
  78. ;
  79. EXTNAM    ENDP
  80. CODE    ENDS
  81. ;
  82. ZSEG    SEGMENT    PARA MEMORY
  83. ZSEG    ENDS
  84.     END    EXTNAM
  85.     ENDM
  86. ;
  87. ;---------------====< DATA DECLARATIONS >====--------------
  88. ;
  89. ; B U F F E R   MACRO
  90. ;
  91. BUFFER    MACRO    LABL,LNGTH
  92.     LOCAL    ENDBUF
  93. LABL    DW    ENDBUF-$-4
  94.     DW    00
  95.     DB    LNGTH DUP(?)
  96. ENDBUF    DB    00
  97.     ENDM
  98. ;
  99. ;----------------
  100. ; F I L E   MACRO
  101. ;
  102. @FFCLA    EQU    0        ; 0  (2) FILE CLASS
  103. @FFHAN    EQU    @FFCLA+2    ; 2  (2) FILE HANDLE
  104. @FFPTRL    EQU    @FFHAN+2    ; 4  (2) FILE POINTER LOW WORD
  105. @FFPTRH    EQU    @FFPTRL+2    ; 6  (2) FILE POINTER HIGH WORD
  106. @FFBUF    EQU    @FFPTRH+2    ; 8  (2) BUFFER ADDRESS
  107. @FFBPTR EQU    @FFBUF+2    ; 10 (2) BUFFER POINTER
  108. @FFSPEN    EQU    @FFBPTR+2    ; 12 (1) PENDING STATUS
  109. @FFSTA    EQU    @FFSPEN+1    ; 13 (1) STATUS OF FILE
  110. @FFOPN    EQU    @FFSTA+1    ; 14 (1) FILE OPEN STATE
  111. @FFNAM    EQU    @FFOPN+1    ; 15 (2) FILE NAME
  112. ;
  113. @FFKYW    EQU    @FFBPTR        ; 10  (2) FILE KEY INTEGER OFFSET
  114. ;
  115. ; F I L E   C L A S S   VALUES
  116. @FFASC    EQU    0    ; ASCII DEVICE ACCESS
  117. @FFASF    EQU    2    ; ASCII STRING FILE ACCESS
  118. @FFBIN    EQU    4    ; BINARY/ASCII RECORD FILE ACCESS
  119. @FFBIR    EQU    6    ; RANDOM BINARY/ASCII RECORD FILE ACCESS
  120. ;
  121. ; FIOBUFFER WILL DOUBLE FOR RECORD SIZE IN 'R' FILES
  122. ;
  123. FILE    MACRO    NAME,DES,CLASS,FIOBUFFER,FIOKEY
  124. LOCAL    FIOBUF
  125.     IFB    <CLASS>
  126. NAME    LABEL    WORD
  127.     DW    @FFASC            ;; CLASS
  128.     DW    6 DUP(00)        ;; HANDLE,PTRL,PTRH
  129.     DB    0FFH            ;; OPEN STATE
  130.     DB    DES,0            ;; FILE NAME        
  131.     ENDIF
  132. ;;
  133.     IFIDN    <&CLASS>,<A>
  134. NAME    LABEL    WORD
  135.     DW    @FFASF            ;; CLASS
  136.     DW    3 DUP(00)        ;; HANDLE,PTRL,PTRH
  137.     IFB    <FIOBUFFER>
  138.     DW    OFFSET FIOBUF        ;; BUFFER OFFSET
  139.     DW    OFFSET FIOBUF+@RDAT    ;; BUFFER DATA POINTER
  140.     ELSE
  141.     DW    OFFSET FIOBUFFER    ;; BUFFER OFFSET
  142.     DW    OFFSET FIOBUFFER+@RDAT    ;; BUFFER DATA POINTER
  143.     ENDIF
  144.     DW    00            ;; PENDING/STATUS
  145.     DB    0FFH            ;; OPEN STATE
  146.     DB    DES,0            ;; FILE NAME        
  147.     IFB    <FIOBUFFER>
  148. BUFFER    FIOBUF,256
  149.     ENDIF
  150.     ENDIF
  151. ;;
  152.     IFIDN    <&CLASS>,<B>
  153. NAME    LABEL    WORD
  154.     DW    @FFBIN            ;; CLASS
  155.     DW    3 DUP(0)        ;; HANDLE,PTRL,PTRH
  156.     IFB    <FIOBUFFER>
  157.     DW    OFFSET FIOBUF        ;; BUFFER OFFSET
  158.     DW    OFFSET FIOBUF+@RDAT    ;; BUFFER DATA POINTER
  159.     ELSE
  160.     DW    OFFSET FIOBUFFER    ;; BUFFER OFFSET
  161.     DW    OFFSET FIOBUFFER+@RDAT    ;; BUFFER DATA POINTER
  162.     ENDIF
  163.     DW    00            ;; PENDING/STATUS
  164.     DB    0FFH            ;; OPEN STATE
  165.     DB    DES,0            ;; FILE NAME        
  166.     IFB    <FIOBUFFER>
  167. BUFFER    FIOBUF,256
  168.     ENDIF
  169.     ENDIF
  170. ;;
  171.     IFIDN    <&CLASS>,<R>
  172. NAME    LABEL    WORD
  173.     DW    @FFBIR            ;; CLASS
  174.     DW    3 DUP(0)        ;; HANDLE,PTRL,PTRH
  175.     DW    00            ;; NO BUFFER
  176.     DW    FIOBUFFER        ;; KEY OFFSET
  177.     DW    00            ;; PENDING/STATUS
  178.     DB    0FFH            ;; OPEN STATE
  179.     DB    DES,0            ;; FILE NAME        
  180.     ENDIF
  181. ;;
  182.     ENDM
  183. ;
  184. ;----------------
  185. ;
  186. INTEGER    MACRO    LABL
  187. LABL    DW    00
  188.     ENDM
  189. ;
  190. ;---------------
  191. ;
  192. DEFINE    MACRO    LABL,STRNG
  193. LABL    DB    STRNG
  194.     DB    0
  195.     ENDM
  196. ;
  197. ;---------------
  198. ;
  199. ENDREC    MACRO    LABL
  200.     IFB    <LABL>
  201.     ERROR -- ENDREC requires a record name
  202.     ELSE
  203.     ORG    LABL+@RECSIZ+@RDAT
  204.     ENDIF
  205.     ENDM
  206. ;
  207. ;---------------
  208. ; RECORD MACRO
  209. ;
  210. @RLEN    EQU    0
  211. @RCUR    EQU    2
  212. @RDAT    EQU    4
  213. ;
  214. REC    MACRO    LABL,LNGTH
  215.     LOCAL    LAB
  216. @RECSIZ =    LNGTH
  217. LABL    DW    LNGTH
  218.     DW    00
  219.     ENDM
  220. ;
  221. ;---------------
  222. ;
  223. SET    MACRO    LABL,NUM
  224. LABL    DW    NUM
  225.     ENDM
  226. ;
  227. ;---------------
  228. ;
  229. STRING    MACRO    LABL,LNGTH
  230.     IFB    <LENGTH>
  231.     ERROR - STRING needs a length
  232.     ELSE
  233. LABL    DB    LNGTH DUP(?)
  234.     DB    0
  235.     ENDIF
  236.     ENDM
  237. ;
  238. ;-----------< REDEFINING MACROS >--------------
  239. ;
  240. @FILEIO    MACRO
  241.     EXTRN    _FILEIO:NEAR,_FWRT:NEAR,   _FREAD:NEAR, _FOPEN:NEAR
  242.     EXTRN    _FCLOSE:NEAR,_FNOTE:NEAR, _FPOINT:NEAR
  243. @FILEIO    MACRO
  244.     ENDM
  245.     ENDM
  246. ;
  247. @CRSR    MACRO
  248.     EXTRN    _CRSR:NEAR
  249. @CRSR    MACRO
  250.     ENDM
  251.     ENDM
  252. ;
  253. @DEC    MACRO
  254.     EXTRN    _DEC:NEAR
  255. @DEC    MACRO
  256.     ENDM
  257.     ENDM
  258. ;
  259. @DV1616    MACRO
  260.     EXTRN    _DV1616:NEAR
  261. @DV1616    MACRO
  262.     ENDM
  263.     ENDM
  264. ;
  265. @ENC    MACRO
  266.     EXTRN    _ENC:NEAR
  267. @ENC    MACRO
  268.     ENDM
  269.     ENDM
  270. ;
  271. @IFSTR    MACRO
  272.     EXTRN    _IFSEQ:NEAR,  _IFSNE:NEAR
  273. @IFSTR    MACRO
  274.     ENDM
  275.     ENDM
  276. ;
  277. @INKY    MACRO
  278.     EXTRN    _INKY:NEAR
  279. @INKY    MACRO
  280.     ENDM
  281.     ENDM
  282. ;
  283. @ITOBS    MACRO
  284.     EXTRN    _ITOBS:NEAR
  285. @ITOBS    MACRO
  286.     ENDM
  287.     ENDM
  288. ;
  289. @ITOHS    MACRO
  290.     EXTRN    _ITOHS:NEAR
  291. @ITOHS    MACRO
  292.     ENDM
  293.     ENDM
  294. ;
  295. @HSTOI    MACRO
  296.     EXTRN    _HSTOI:NEAR
  297. @HSTOI    MACRO
  298.     ENDM
  299.     ENDM
  300. ;
  301. @SCONCAT MACRO
  302.     EXTRN    _SCONCAT:NEAR, _STREND:NEAR, _STRLEN:NEAR
  303. @SCONCAT MACRO
  304.     ENDM
  305.     ENDM
  306. ;
  307. ;-----------< CODE MACROS >-----------
  308. ;
  309. CLOSE    MACRO    FNAME
  310.     @FILEIO
  311.     MOV    SI,OFFSET FNAME
  312.     CALL    _FCLOSE
  313.     ENDM
  314. ;
  315. ;---------------
  316. ;
  317. CURSOR    MACRO    X,Y
  318.     @CRSR
  319.     MOV    AX,X
  320.     MOV    DX,Y
  321.     CALL    _CRSR
  322.     ENDM
  323. ;
  324. ;---------------
  325. ;
  326. DECODE    MACRO    INTGR,STRNG
  327.     @DEC
  328.     MOV    SI,OFFSET STRNG
  329.     CALL    _DEC
  330.     MOV    INTGR,AX
  331.     ENDM
  332. ;
  333. ;----------------
  334. ENCODE    MACRO    STRNG,INTGR
  335.     @ENC
  336.     MOV    AX,INTGR
  337.     MOV    DI,OFFSET STRNG
  338.     CALL    _ENC
  339.     ENDM
  340. ;
  341. ;---------------
  342. ;
  343. GOTO    MACRO    LABL
  344.     JMP    LABL
  345.     ENDM
  346. ;    
  347. ;---------------
  348. ;
  349. HSTOI    MACRO    INTGR,STRNG
  350.     @HSTOI
  351.     MOV    SI,OFFSET STRNG
  352.     CALL    _HSTOI
  353.     MOV    INTGR,AX
  354.     ENDM
  355. ;
  356. ;---------------
  357. ;
  358. INKEY    MACRO    STRNG,PAUS
  359.     @INKY
  360.     IFIDN    <&PAUS>,<WAIT>
  361.     MOV    DL,0FFH
  362.     ELSE
  363.     SUB    DL,DL
  364.     ENDIF
  365.     CALL    _INKY
  366.     IFNB    <STRNG>
  367.     MOV    WORD PTR [STRNG],AX
  368.     ENDIF
  369.     ENDM
  370. ;
  371. ;---------------
  372. ;
  373. ITOBS    MACRO    STRNG,INTGR,LEN
  374.     @ITOBS
  375.     MOV    AX,INTGR
  376.     IFNB    <LEN>
  377.     MOV    CX,LEN
  378.     ELSE
  379.     ERROR -- NO LENGTH DECLARED !!!
  380.     ENDIF
  381.     MOV    DI,OFFSET STRNG
  382.     CALL    _ITOBS
  383.     ENDM
  384. ;
  385. ;---------------
  386. ;
  387. ITOHS    MACRO    STRNG,INTGR
  388.     @ITOHS
  389.     MOV    BX,INTGR
  390.     MOV    DI,OFFSET STRNG
  391.     CALL    _ITOHS
  392.     ENDM
  393. ;
  394. ;---------------
  395. ;
  396. ; ADD integer
  397. @ADD    MACRO    INTGR
  398.     ADD    AX,WORD PTR INTGR
  399.     ENDM
  400. ;
  401. ; AND integer
  402. @AND    MACRO    INTGR
  403.     IFIDN    <&INTGR>,<1>
  404.     INC    AX
  405.     ELSE
  406.     AND    AX,WORD PTR INTGR
  407.     ENDIF
  408.     ENDM
  409. ;
  410. ; LOAD integer
  411. @LOAD    MACRO    INTGR
  412.     MOV    AX,WORD PTR INTGR
  413.     ENDM
  414. ;
  415. ; MULTIPLY integer
  416. @MULT    MACRO    INTGR
  417.     MOV    BX,WORD PTR INTGR
  418.     IMUL    BX
  419.     ENDM
  420. ;
  421. ; OR integer
  422. @OR    MACRO    INTGR
  423.     OR    AX,WORD PTR INTGR
  424.     ENDM
  425. ;
  426. ; DIVIDE INTEGER
  427. @DIV    MACRO    INTGR
  428.     @DV1616
  429.     MOV    BX,WORD PTR INTGR
  430.     CALL    _DV1616
  431.     ENDM
  432. ;
  433. ; MOD
  434. @MOD    MACRO    INTGR
  435.     @DV1616
  436.     MOV    BX,WORD PTR INTGR
  437.     CALL    _DV1616
  438.     MOV    AX,DX
  439.     ENDM
  440. ;
  441. ; SHIFT LEFT integer
  442. @SHL    MACRO    INTGR
  443.     MOV    CX,WORD PTR INTGR
  444.     SHL    AX,CL
  445.     ENDM
  446. ;
  447. ; SHIFT RIGHT integer
  448. @SHR    MACRO    INTGR
  449.     MOV    CX,WORD PTR INTGR
  450.     SHR    AX,CL
  451.     ENDM
  452. ;
  453. ; STORE    integer
  454. @STOR    MACRO    INTGR
  455.     MOV    WORD PTR INTGR, AX
  456.     ENDM
  457. ;
  458. ; SUBTRACT integer
  459. @SUB    MACRO    INTGR
  460.     IFIDN    <&INTGR>,<1>
  461.     DEC    AX
  462.     ELSE
  463.     SUB    AX,INTGR
  464.     ENDIF
  465.     ENDM
  466. ;
  467. ; XOR integer
  468. @XOR    MACRO    INTGR
  469.     XOR    AX,WORD PTR INTGR
  470.     ENDM
  471. ;
  472. ;---------------
  473. ;
  474. NOTE    MACRO    FNAME,PNTR
  475.     @FILEIO
  476.     MOV    SI,OFFSET FNAME
  477.     MOV    DI,OFFSET PNTR
  478.     CALL    _FNOTE
  479.     ENDM
  480. ;
  481. ;---------------
  482. ;
  483. OPEN    MACRO    ACC,LABL
  484.     @FILEIO
  485.     IFIDN    <&ACC>,<INPUT>
  486.     MOV    AL,00
  487.     ENDIF
  488.     IFIDN    <&ACC>,<OUTPUT>
  489.     MOV    AL,01
  490.     ENDIF
  491.     IFIDN    <&ACC>,<IO>
  492.     MOV    AL,02
  493.     ENDIF
  494.     MOV    SI,OFFSET LABL
  495.     CALL    _FOPEN
  496.     ENDM
  497. ;
  498. ;---------------
  499. ;
  500. POINT    MACRO    FNAME,PNTR
  501.     @FILEIO
  502.     MOV    SI,OFFSET FNAME
  503.     MOV    DI,OFFSET PNTR
  504.     CALL    _FPOINT
  505.     ENDM
  506. ;
  507. ;---------------
  508. ;
  509. READ    MACRO    FNAME,STRNG,BYTES
  510.     @FILEIO
  511.     MOV    SI,OFFSET FNAME
  512.     MOV    DI,OFFSET STRNG
  513.     IFB    <BYTES>
  514.     ERROR -- NO LENGTH DECLARED !!!
  515.     ELSE
  516.     MOV    CX,BYTES
  517.     ENDIF
  518.     CALL    _FREAD
  519.     ENDM
  520. ;
  521. ;---------------
  522. ;
  523. READB    MACRO    FNAME,FREC
  524.     @FILEIO
  525.     MOV    SI,OFFSET FNAME
  526.     MOV    DI,OFFSET FREC
  527.     CALL    _FREAD
  528.     ENDM
  529. ;
  530. ;---------------
  531. ;
  532. RETURN    MACRO    X
  533.     RET
  534.     ENDM
  535. ;
  536. ;---------------
  537. ;
  538. STOP    MACRO    VAL
  539.     MOV    AH,4CH
  540.     IFNB    <&VAL>
  541.     MOV    AL,BYTE PTR VAL
  542.     ELSE
  543.     SUB    AL,AL
  544.     ENDIF
  545.     INT    21H
  546.     ENDM
  547. ;
  548. ;---------------
  549. ;
  550. ; LOAD STRING & TERMINATE
  551. @SMOV    MACRO    STRNG
  552.     MOV    DI,OFFSET STRNG
  553.     MOV    BYTE PTR [DI],00
  554.     ENDM
  555. ;
  556. ; CONCATENATE SOURCE STRING
  557. @SCNCT    MACRO    STRNG
  558.     @SCONCAT
  559.     MOV    SI,OFFSET STRNG
  560.     CALL    _SCONCAT
  561.     ENDM
  562. ;
  563. ; MOVE TO END OF STRING
  564. @SCATSME MACRO    STRNG
  565.     @SCONCAT
  566.     MOV    SI,OFFSET STRNG
  567.     CALL    _STREND
  568.     MOV    DI,SI
  569.     ENDM
  570. ;
  571. ;---------------
  572. ;
  573. WRITE    MACRO    FNAME,STRNG,CRFLG
  574.     @FILEIO
  575.     MOV    DI,OFFSET FNAME
  576.     IFNB    <&STRNG>
  577.     MOV    SI,OFFSET STRNG
  578.     ELSE
  579.     SUB    SI,SI
  580.     ENDIF
  581.     IFIDN    <&CRFLG>,<CR>
  582.     MOV    AL,0FFH
  583.     ELSE
  584.     SUB    AL,AL
  585.     ENDIF
  586.     CALL    _FWRT
  587.     ENDM
  588. ;
  589. ;---------------
  590. ;
  591. WRITEB    MACRO    FNAME,FREC
  592.     @FILEIO
  593.     MOV    DI,OFFSET FNAME
  594.     MOV    SI,OFFSET FREC
  595.     CALL    _FWRT
  596.     ENDM
  597. ;
  598.     .LIST
  599.     .LALL
  600.