⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readme.txt

📁 汇编语言源代码下载大全
💻 TXT
字号:
                --再论SPT图形文件处理技巧(SPT图形文件的打印)

    我们可以利用汇编语言的高效灵活以及与其他系统接口规范方便的特点来重编
此打印程序,同时利用foxbase与汇编的接口功能,使foxbase具有图形打印功能,
定能使我们编出的数据库管理系统增色不少。
    下面我们以LQ-1600K打印机为例来说明这个问题:
    其图形打印方式的指令格式为:
  ESC * m n1 n2
在这条指令中,m表示图象选择,而n1及n2表示图象需占用的列数。为确定n1
及n2,先用总列数除以256,所得商为n2,而余数为n1。
  在打印机接收了这个代码后,它将下一个数字翻译成打印针模式:其编码规则如下,
打印时以列为打印的基本单位,一列共24针,分为三个字节,依次送入打印机,某处
有点的则在此位为1,无点的置0。在送完所有的图形数据之后打印机自动回到文本
方式下。
  为了使打出来的图形在长和宽的比例上保持原样,应选用三倍密度打印(参数可以
从用户手册中找到)。
    打印机在打印图形时需要将点阵数据转换成打印机模式,即显示点阵正好与打印点
阵成转置关系。这可利用SPT所提供的左右翻转和版面旋转来达到目的,为了使打印
符合我们正常习惯还应将其反白显示后存盘,因为SPT规定0为黑色,1为白色,而
打印机1为黑色,0为白色,正好相反。

                实       例
;sptp.asm
;此程序为foxbase的一个图形函数
;使用LQ 1600K 作图形打印
;图形格式:Super Star.
;将SPT图形先左右翻转,再旋转90度,最后反白显示,即可打出正常
;的图形
.model tiny
.code
        org 00h
start:
        jmp bg
file    db 50 dup(0)
wth     dw 0
lenth   dw 0
handle  dw 0
mdv     db 0
hdv     db 0
npos    dw 0
buff    db 3 dup(0)
bg:
_cts proc far
        push cs
        pop es
        mov si,bx
        lea di,file
        mov cx,50
        cld
        repz movsb
;从Foxbase环境的with 参
;数中得到文件名
        xor si,si
        push cs
        pop ds
        mov ah,3dh
        mov al,0;只读
        lea dx,file
        int 21h;打开文件
        mov handle,ax
        ;保存文件句柄
        mov ah,42h
        mov al,0
        mov bx,handle
        xor cx,cx
        mov dx,22h
        int 21h
        ;设置当前文件位置
        mov ah,3fh
        mov bx,handle
        mov cx,2
        lea dx,wth
        int 21h
        ;读入图形的宽度
        mov ah,42h
        mov al,0
        mov bx,handle
        xor cx,cx
        mov dx,24h
        int 21h
        ;设置当前文件位置
        mov ah,3fh
        mov bx,handle
        mov cx,2
        lea dx,lenth
        int 21h
        ;读入图形的高度
        mov ah,42h
        mov al,0
        mov bx,handle
        xor cx,cx
        mov dx,40h
        int 21h
        ;设置当前文件位置
        xor dx,dx
        mov ax,lenth
        mov bx,256
        div bx
        mov mdv,dl;余数
        mov hdv,al;商
        xor dx,dx
        mov ax,wth
        mov bx,8
        div bx
        sub ax,3
        mov npos,ax;商
        mov ah,1
        xor dx,dx
        int 17h
print_bytes:
        xor dx,dx
        mov ax,wth
        mov bx,24
        div bx
        mov bp,ax;行数
rpt:
        mov bx,lenth;列数
        mov ah,0
        ;调用DOS的打印功能
        mov al,1bh;换码代码
        xor dx,dx
        int 17h
        ;发送这个码
        xor ah,ah
        mov al,2ah
        ;图形方式码
        int 17h
        xor ah,ah
        mov al,39
        ;设定三倍密度24针
        int 17h
        xor ah,ah
        mov al,mdv;列数(余数)
        int 17h
        xor ah,ah
        mov al,hdv;(商)
        int 17h
pt:
        push bx
        mov ah,3fh
        mov bx,handle
        mov cx,3
        lea dx,buff
        ;读入三个字节的内容
        int 21h
        mov ah,42h
        mov al,1
        mov bx,handle
        xor cx,cx
        mov dx,npos
        int 21h
        ;设置新位置
        mov ah,0
        mov al,buff
        xor dx,dx
        int 17h
        xor ah,ah
        mov al,buff+1
        int 17h
        xor ah,ah
        mov al,buff+2
        int 17h
        pop bx
        dec bx
        jnz pt
        xor ah,ah
        mov al,1bh
        int 17h
        xor ah,ah
        mov al,4ah
        int 17h
        xor ah,ah
        mov al,24
        int 17h;换行
        xor ah,ah
        mov al,13
        int 17h;回车
        mov ah,42h
        mov al,0
        mov bx,handle
        xor cx,cx
        mov dx,40h
        add si,3
        add dx,si
        int 21h
        ;设置当前文件位置
        dec bp
        jz cont2
        jmp far ptr rpt
cont2:
        mov ah,3eh
        mov bx,handle
        int 21h;关闭文件
        ret
_cts endp
ends
end start

     将此程序编译成sptp.com文件,再改名sptp.bin,使用load sptp这样便可以在
foxbase中使用call sptp with SPT图形文件名 来进行调用。
    注意:如果我们在使用引打印程序之前加载了汉字系统的打印驱动程序会因为
它截取了17号中断而使SPT图形打印不正常,可以在加载汉字系统之前先保留
17号中断向量,在调用此中断时直接跳到此地址即可。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -