home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload
/
ShartewareOverload.cdr
/
progm
/
dpl.zip
/
DPL.MAC
< prev
next >
Wrap
Text File
|
1988-07-11
|
9KB
|
602 lines
; Doug's Programming Language -- DPL, Version 2.22
; Copyright (c) 1988 Douglas S. Cody, All rights reserved.
;
.XLIST
;
;------------------------====< DPL LANGUAGE MACROS >====-----------------------
;
PROG MACRO EXTNAM
NAME EXTNAM
PAGE 64,131
TITLE DPL 8086 MACRO, VERSION 2.22
;
DATA SEGMENT PUBLIC PARA 'DATA'
@@@DPLMAIN EQU 0FFH ;; DECLARES A MAIN PROGRAM
;
ENDM
;
;------------------------===============================-----------------------
;
SUBPGM MACRO EXTNAM
NAME EXTNAM
PAGE 64,131
TITLE DPL 8086 MACRO'S, VERSION 2.22
;
DATA SEGMENT PUBLIC PARA 'DATA'
@@@DPLSUB EQU 0FFH ;; DECLARES A SUBROUTINE
ENDM
;
;----------------
;
BEGIN MACRO EXTNAM
;
; DPL EXTERNAL DATA
;
IFNDEF @@@DPLDAT
EXTRN STATUS:WORD, ZERO:WORD, @CR_LF:BYTE
EXTRN NULL:BYTE, EJECT:BYTE, BEEP:BYTE
EXTRN CRTFLAG:BYTE, VIDPAGE:BYTE, @DPLVER:BYTE
EXTRN @@@DPLREC:WORD
ENDIF
;
DATA ENDS
;
IFDEF @@@DPLMAIN
STACK SEGMENT STACK 'DGROUP'
DW 256 DUP(?)
STACKD LABEL WORD
STACK ENDS
ENDIF
;
CODE SEGMENT PUBLIC PARA 'CODE'
IFDEF @@@DPLMAIN
ASSUME CS:CODE,DS:DATA,SS:STACK
ELSE
ASSUME CS:CODE,DS:DATA
ENDIF
;
IFDEF @@@DPLMAIN
PUBLIC EXTNAM
EXTNAM PROC FAR
EXTRN _DPLINIT:NEAR
CLI
MOV AX,OFFSET STACKD
MOV SP,AX
MOV AX,SEG DATA
MOV DS,AX
STI
CALL _DPLINIT
ELSE
PUBLIC EXTNAM
EXTNAM PROC NEAR
ENDIF
ENDM
;
;----------------
;
ENDPGM MACRO EXTNAM
;
EXTNAM ENDP
CODE ENDS
;
ZSEG SEGMENT PARA MEMORY
ZSEG ENDS
END EXTNAM
ENDM
;
;---------------====< DATA DECLARATIONS >====--------------
;
; B U F F E R MACRO
;
BUFFER MACRO LABL,LNGTH
LOCAL ENDBUF
LABL DW ENDBUF-$-4
DW 00
DB LNGTH DUP(?)
ENDBUF DB 00
ENDM
;
;----------------
; F I L E MACRO
;
@FFCLA EQU 0 ; 0 (2) FILE CLASS
@FFHAN EQU @FFCLA+2 ; 2 (2) FILE HANDLE
@FFPTRL EQU @FFHAN+2 ; 4 (2) FILE POINTER LOW WORD
@FFPTRH EQU @FFPTRL+2 ; 6 (2) FILE POINTER HIGH WORD
@FFBUF EQU @FFPTRH+2 ; 8 (2) BUFFER ADDRESS
@FFBPTR EQU @FFBUF+2 ; 10 (2) BUFFER POINTER
@FFSPEN EQU @FFBPTR+2 ; 12 (1) PENDING STATUS
@FFSTA EQU @FFSPEN+1 ; 13 (1) STATUS OF FILE
@FFOPN EQU @FFSTA+1 ; 14 (1) FILE OPEN STATE
@FFNAM EQU @FFOPN+1 ; 15 (2) FILE NAME
;
@FFKYW EQU @FFBPTR ; 10 (2) FILE KEY INTEGER OFFSET
;
; F I L E C L A S S VALUES
;
@FFASC EQU 0 ; ASCII DEVICE ACCESS
@FFASF EQU 2 ; ASCII STRING FILE ACCESS
@FFBIN EQU 4 ; BINARY/ASCII RECORD FILE ACCESS
@FFBIR EQU 6 ; RANDOM BINARY/ASCII RECORD FILE ACCESS
;
; FIOBUFFER WILL DOUBLE FOR RECORD SIZE IN 'R' FILES
;
FILE MACRO NAME,DES,CLASS,FIOBUFFER,FIOKEY
LOCAL FIOBUF
IFB <CLASS>
NAME LABEL WORD
DW @FFASC ;; CLASS
DW 6 DUP(00) ;; HANDLE,PTRL,PTRH
DB 0FFH ;; OPEN STATE
DB DES,0 ;; FILE NAME
ENDIF
;;
IFIDN <&CLASS>,<A>
NAME LABEL WORD
DW @FFASF ;; CLASS
DW 3 DUP(00) ;; HANDLE,PTRL,PTRH
IFB <FIOBUFFER>
DW OFFSET FIOBUF ;; BUFFER OFFSET
DW OFFSET FIOBUF+@RDAT ;; BUFFER DATA POINTER
ELSE
DW OFFSET FIOBUFFER ;; BUFFER OFFSET
DW OFFSET FIOBUFFER+@RDAT ;; BUFFER DATA POINTER
ENDIF
DW 00 ;; PENDING/STATUS
DB 0FFH ;; OPEN STATE
DB DES,0 ;; FILE NAME
IFB <FIOBUFFER>
BUFFER FIOBUF,256
ENDIF
ENDIF
;;
IFIDN <&CLASS>,<B>
NAME LABEL WORD
DW @FFBIN ;; CLASS
DW 3 DUP(0) ;; HANDLE,PTRL,PTRH
IFB <FIOBUFFER>
DW OFFSET FIOBUF ;; BUFFER OFFSET
DW OFFSET FIOBUF+@RDAT ;; BUFFER DATA POINTER
ELSE
DW OFFSET FIOBUFFER ;; BUFFER OFFSET
DW OFFSET FIOBUFFER+@RDAT ;; BUFFER DATA POINTER
ENDIF
DW 00 ;; PENDING/STATUS
DB 0FFH ;; OPEN STATE
DB DES,0 ;; FILE NAME
IFB <FIOBUFFER>
BUFFER FIOBUF,256
ENDIF
ENDIF
;;
IFIDN <&CLASS>,<R>
NAME LABEL WORD
DW @FFBIR ;; CLASS
DW 3 DUP(0) ;; HANDLE,PTRL,PTRH
DW 00 ;; NO BUFFER
DW FIOBUFFER ;; KEY OFFSET
DW 00 ;; PENDING/STATUS
DB 0FFH ;; OPEN STATE
DB DES,0 ;; FILE NAME
ENDIF
;;
ENDM
;
;----------------
;
INTEGER MACRO LABL
LABL DW 00
ENDM
;
;---------------
;
DEFINE MACRO LABL,STRNG
LABL DB STRNG
DB 0
ENDM
;
;---------------
;
ENDREC MACRO LABL
IFB <LABL>
ERROR -- ENDREC requires a record name
ELSE
ORG LABL+@RECSIZ+@RDAT
ENDIF
ENDM
;
;---------------
; RECORD MACRO
;
@RLEN EQU 0
@RCUR EQU 2
@RDAT EQU 4
;
REC MACRO LABL,LNGTH
LOCAL LAB
@RECSIZ = LNGTH
LABL DW LNGTH
DW 00
ENDM
;
;---------------
;
SET MACRO LABL,NUM
LABL DW NUM
ENDM
;
;---------------
;
STRING MACRO LABL,LNGTH
IFB <LENGTH>
ERROR - STRING needs a length
ELSE
LABL DB LNGTH DUP(?)
DB 0
ENDIF
ENDM
;
;-----------< REDEFINING MACROS >--------------
;
@FILEIO MACRO
EXTRN _FILEIO:NEAR,_FWRT:NEAR, _FREAD:NEAR, _FOPEN:NEAR
EXTRN _FCLOSE:NEAR,_FNOTE:NEAR, _FPOINT:NEAR
@FILEIO MACRO
ENDM
ENDM
;
@CRSR MACRO
EXTRN _CRSR:NEAR
@CRSR MACRO
ENDM
ENDM
;
@DEC MACRO
EXTRN _DEC:NEAR
@DEC MACRO
ENDM
ENDM
;
@DV1616 MACRO
EXTRN _DV1616:NEAR
@DV1616 MACRO
ENDM
ENDM
;
@ENC MACRO
EXTRN _ENC:NEAR
@ENC MACRO
ENDM
ENDM
;
@IFSTR MACRO
EXTRN _IFSEQ:NEAR, _IFSNE:NEAR
@IFSTR MACRO
ENDM
ENDM
;
@INKY MACRO
EXTRN _INKY:NEAR
@INKY MACRO
ENDM
ENDM
;
@ITOBS MACRO
EXTRN _ITOBS:NEAR
@ITOBS MACRO
ENDM
ENDM
;
@ITOHS MACRO
EXTRN _ITOHS:NEAR
@ITOHS MACRO
ENDM
ENDM
;
@HSTOI MACRO
EXTRN _HSTOI:NEAR
@HSTOI MACRO
ENDM
ENDM
;
@SCONCAT MACRO
EXTRN _SCONCAT:NEAR, _STREND:NEAR, _STRLEN:NEAR
@SCONCAT MACRO
ENDM
ENDM
;
;-----------< CODE MACROS >-----------
;
CLOSE MACRO FNAME
@FILEIO
MOV SI,OFFSET FNAME
CALL _FCLOSE
ENDM
;
;---------------
;
CURSOR MACRO X,Y
@CRSR
MOV AX,X
MOV DX,Y
CALL _CRSR
ENDM
;
;---------------
;
DECODE MACRO INTGR,STRNG
@DEC
MOV SI,OFFSET STRNG
CALL _DEC
MOV INTGR,AX
ENDM
;
;----------------
;
ENCODE MACRO STRNG,INTGR
@ENC
MOV AX,INTGR
MOV DI,OFFSET STRNG
CALL _ENC
ENDM
;
;---------------
;
GOTO MACRO LABL
JMP LABL
ENDM
;
;---------------
;
HSTOI MACRO INTGR,STRNG
@HSTOI
MOV SI,OFFSET STRNG
CALL _HSTOI
MOV INTGR,AX
ENDM
;
;---------------
;
INKEY MACRO STRNG,PAUS
@INKY
IFIDN <&PAUS>,<WAIT>
MOV DL,0FFH
ELSE
SUB DL,DL
ENDIF
CALL _INKY
IFNB <STRNG>
MOV WORD PTR [STRNG],AX
ENDIF
ENDM
;
;---------------
;
ITOBS MACRO STRNG,INTGR,LEN
@ITOBS
MOV AX,INTGR
IFNB <LEN>
MOV CX,LEN
ELSE
ERROR -- NO LENGTH DECLARED !!!
ENDIF
MOV DI,OFFSET STRNG
CALL _ITOBS
ENDM
;
;---------------
;
ITOHS MACRO STRNG,INTGR
@ITOHS
MOV BX,INTGR
MOV DI,OFFSET STRNG
CALL _ITOHS
ENDM
;
;---------------
;
; ADD integer
@ADD MACRO INTGR
ADD AX,WORD PTR INTGR
ENDM
;
; AND integer
@AND MACRO INTGR
IFIDN <&INTGR>,<1>
INC AX
ELSE
AND AX,WORD PTR INTGR
ENDIF
ENDM
;
; LOAD integer
@LOAD MACRO INTGR
MOV AX,WORD PTR INTGR
ENDM
;
; MULTIPLY integer
@MULT MACRO INTGR
MOV BX,WORD PTR INTGR
IMUL BX
ENDM
;
; OR integer
@OR MACRO INTGR
OR AX,WORD PTR INTGR
ENDM
;
; DIVIDE INTEGER
@DIV MACRO INTGR
@DV1616
MOV BX,WORD PTR INTGR
CALL _DV1616
ENDM
;
; MOD
@MOD MACRO INTGR
@DV1616
MOV BX,WORD PTR INTGR
CALL _DV1616
MOV AX,DX
ENDM
;
; SHIFT LEFT integer
@SHL MACRO INTGR
MOV CX,WORD PTR INTGR
SHL AX,CL
ENDM
;
; SHIFT RIGHT integer
@SHR MACRO INTGR
MOV CX,WORD PTR INTGR
SHR AX,CL
ENDM
;
; STORE integer
@STOR MACRO INTGR
MOV WORD PTR INTGR, AX
ENDM
;
; SUBTRACT integer
@SUB MACRO INTGR
IFIDN <&INTGR>,<1>
DEC AX
ELSE
SUB AX,INTGR
ENDIF
ENDM
;
; XOR integer
@XOR MACRO INTGR
XOR AX,WORD PTR INTGR
ENDM
;
;---------------
;
NOTE MACRO FNAME,PNTR
@FILEIO
MOV SI,OFFSET FNAME
MOV DI,OFFSET PNTR
CALL _FNOTE
ENDM
;
;---------------
;
OPEN MACRO ACC,LABL
@FILEIO
IFIDN <&ACC>,<INPUT>
MOV AL,00
ENDIF
IFIDN <&ACC>,<OUTPUT>
MOV AL,01
ENDIF
IFIDN <&ACC>,<IO>
MOV AL,02
ENDIF
MOV SI,OFFSET LABL
CALL _FOPEN
ENDM
;
;---------------
;
POINT MACRO FNAME,PNTR
@FILEIO
MOV SI,OFFSET FNAME
MOV DI,OFFSET PNTR
CALL _FPOINT
ENDM
;
;---------------
;
READ MACRO FNAME,STRNG,BYTES
@FILEIO
MOV SI,OFFSET FNAME
MOV DI,OFFSET STRNG
IFB <BYTES>
ERROR -- NO LENGTH DECLARED !!!
ELSE
MOV CX,BYTES
ENDIF
CALL _FREAD
ENDM
;
;---------------
;
READB MACRO FNAME,FREC
@FILEIO
MOV SI,OFFSET FNAME
MOV DI,OFFSET FREC
CALL _FREAD
ENDM
;
;---------------
;
RETURN MACRO X
RET
ENDM
;
;---------------
;
STOP MACRO VAL
MOV AH,4CH
IFNB <&VAL>
MOV AL,BYTE PTR VAL
ELSE
SUB AL,AL
ENDIF
INT 21H
ENDM
;
;---------------
;
; LOAD STRING & TERMINATE
@SMOV MACRO STRNG
MOV DI,OFFSET STRNG
MOV BYTE PTR [DI],00
ENDM
;
; CONCATENATE SOURCE STRING
@SCNCT MACRO STRNG
@SCONCAT
MOV SI,OFFSET STRNG
CALL _SCONCAT
ENDM
;
; MOVE TO END OF STRING
@SCATSME MACRO STRNG
@SCONCAT
MOV SI,OFFSET STRNG
CALL _STREND
MOV DI,SI
ENDM
;
;---------------
;
WRITE MACRO FNAME,STRNG,CRFLG
@FILEIO
MOV DI,OFFSET FNAME
IFNB <&STRNG>
MOV SI,OFFSET STRNG
ELSE
SUB SI,SI
ENDIF
IFIDN <&CRFLG>,<CR>
MOV AL,0FFH
ELSE
SUB AL,AL
ENDIF
CALL _FWRT
ENDM
;
;---------------
;
WRITEB MACRO FNAME,FREC
@FILEIO
MOV DI,OFFSET FNAME
MOV SI,OFFSET FREC
CALL _FWRT
ENDM
;
.LIST
.LALL