home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload
/
ShartewareOverload.cdr
/
database
/
db3util.zip
/
PRINTDB.EXE
/
lha
/
PRINTDB.ASM
< prev
next >
Wrap
Assembly Source File
|
1985-12-11
|
4KB
|
148 lines
.LFCOND
PAGE 60,132
;
D3DR EQU 0 ;ASSEMBLE
;DEVELOPERS RELEASE
COM EQU 1
TRUE EQU 1 ;DEFINE SYMBOLS
FALSE EQU 0 ;for .t. and .f.
;***************************************
CODESEG SEGMENT BYTE PUBLIC 'CODE'
ASSUME CS:CODESEG,ES:CODESEG
;---------------------------------------
PRNTCHK PROC FAR
IF COM
ORG 100H ;ORG AT 100H
ENDIF
START: JMP NEXT_STEP ;SKIP PAST DATA
;
MESS1 DB 'PRINTER OFF-LINE - PLEASE ADJUST',0DH,0AH,'$'
MESS2 DB 'PRINTER NOT TURNED ON - PLEASE TURN IT ON',0DH,0AH,'$'
MESS3 DB 'PRINTER AVAILABLE FOR PRINTING',0DH,0AH,'$'
MESS4 DB 'PRESS ANY KEY TO CONTINUE',0DH,0AH,'$'
OK DB ?
;
NEXT_STEP:
PUSH AX ;SAVE REGISTERS
PUSH BX
PUSH DS
PUSH ES
PUSH CS
POP ES
MOV AX,40H ;POINT TO SYSTEM DATA SEGMENT.
MOV DS,AX
MOV SI,8 ;POINT TO LPT1 PORT ADDRESS
MOV DX,[SI] ;LOAD IT INTO DX.
INC DX ;POINT TO LPT1 STATUS PORT
IN AL,DX ;AND READ IT.
CMP AL,0DFH ;PRINTER OK?
JNE OFF_LINE ; NO, IS IT OFF-LINE?
MOV ES:OK,TRUE ;PLACE .T. IN TEMPORARY VARIABLE.
IF COM
MOV DX,OFFSET MESS3 ;PRINT REPORT IF .COM FILE.
CALL PRINTMESS
ENDIF
JMP SHORT EXIT ;RETURN TO DBASE.
OFF_LINE:
CMP AL,04FH
JNE TURNED_OFF ;NO, IT MUST BE TURNED OFF.
IF COM
MOV DX,OFFSET MESS1 ;PRINT REPORT IF .COM FILE.
CALL PRINTMESS
MOV DX,OFFSET MESS4
CALL PRINTMESS
CALL CRLF ;SKIP LINE.
POP ES
POP DS
POP BX
POP AX
CALL WAIT ;WAIT FOR KEYPRESS.
JMP NEXT_STEP ;GO BACK AND CHECK STATUS AGAIN.
ENDIF
JMP SHORT EXIT ;LEAVE IF OK.
TURNED_OFF:
MOV ES:OK,FALSE ;PLACE .F. IN TEMPORARY VARIABLE.
IF COM
MOV DX,OFFSET MESS2 ;PRINT REPORT IF .COM FILE
CALL PRINTMESS
MOV DX,OFFSET MESS4
CALL PRINTMESS
CALL CRLF ;SKIP LINE
POP ES
POP DS
POP BX
POP AX
CALL WAIT ;WAIT FOR KEYPRESS
JMP NEXT_STEP ;GO BACK AND CHECK STATUS AGAIN.
ENDIF
EXIT: POP ES ;RESTORE RIGISTERS
POP DS ;NOW DS AND BX ARE POINTING
POP BX ;TO VARIABLE PASSED BY DBASE III.
IF D3DR
MOV AL,ES:OK ;GET .T. OR .F. FROM TEMPORARY
;VARIABLE
MOV BYTE PTR [BX],AL ;PLACE IT IN DBASE VARIBLE.
ENDIF
POP AX ;RESTORE REMAINING REGISTERS.
IF COM
INT 20H ;INT 20H IF .COM FILE.
ELSE
RET ;FAR RETURN IF DEVELOPERS RELEASE.
ENDIF
;
PRNTCHK ENDP
;------------------------------------------
; SUBROUTINES
;------------------------------------------
CRLF PROC NEAR ;SKIPS LINE
PUSH AX ;SAVE REGISTERS
PUSH DX
MOV DL,0DH ;PRINT CARRIAGE RETURN
MOV AH,2
INT 21H
MOV DL,0AH ;PRINT LINE FEED.
MOV AH,2
INT 21H
POP DX ;RESTORE REGISTERS
POP AX
RET ;RETURN TO CALLER.
CRLF ENDP
;----------------------------------------------
PRINTMESS PROC NEAR ;PRINT MESSAGE
PUSH AX ;SAVE REGISTERS
PUSH DS
MOV AX,ES ;ES POINTS TO PRNTCHK'S
MOV DS,AX ;DATA.
XOR AX,AX ;ZERO AX.
MOV AH,9 ;CALL DOS PRINT STRING FUNCTION
INT 21H
POP DS ;RESTORE REGISTERS
POP AX
RET ;RETURN TO CALLER
PRINTMESS ENDP
;----------------------------------------------
WAIT PROC NEAR ;WAITS FOR KEYPRESS.
;DOES NOT CHECK FOR CTRL-BREAK.
PUSH AX ;SAVE REGISTERS
MOV AH,1 ;CALL DOS, WAIT FOR KEYPRESS.
INT 21H ;DON'T CHECK CTRL-BREAK FUNCTION.
POP AX ;RESTORE REGISTER
RET ;RETURN TO CALLER
WAIT ENDP
;--------------------------------------------
CODESEG ENDS
;*********************************************
END START