home *** CD-ROM | disk | FTP | other *** search
- page 95,132
- ;§∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞§
- ;§ §
- ;§ マルチカラム コンパクト プリント ユーティリティ §
- ;§ §
- ;§ Multicolumn Compact PRint utility MCPR.EXE Ver1.40 §
- ;§ ~ ~ ~~ §
- ;§ Copyright (C) by 福地 邦雄 1989-1990. All rights reserved. §
- ;§∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞§
- public argv
- public argc
- public int24h
- public intflg
- public reprintflg
- extrn getarg:near
- extrn allocnambuf:near
- extrn options:near
- extrn allocprtbuf:near
- extrn prtinit:near
- extrn formprint:near
- extrn freeprtbuf:near
- extrn freenambuf:near
- extrn newfile:near
- extrn dosprint:near
- extrn dosstdout:near
- extrn abort:near
- ;
- CR equ 0dh
- LF equ 0ah
- ;
- data segment para public 'DATA'
- ;
- extrn nameptr:dword
- extrn nameptroff:word
- extrn nameptrseg:word
- extrn fhandle:word
- extrn errorno:word
- ;
- argv dd 32 dup(?)
- argc dw ?
- ;
- filecount dw 0
- ;
- psp label dword
- pspoff dw 0
- pspseg dw 0
- ;
- devinfo dw ?
- breakflag db ?
- ;
- brkterm db 0ch
- prtterm db 1ch,'$',22h,77h,1bh,'[; G',1ch,'(`',71h
- prtrmsiz equ $-prtterm
- brtrmsiz equ $-brkterm
- ;
- prtend db 9
- prtfilename db 40 dup(' ')
- db ' print end',CR,LF
- endmsgsz equ $-prtend
- ;
- helpmsg label byte
- db ' マルチカラム コンパクト プリント 1990/02/07 Ver1.40',CR,LF
- db ' Copyright (C) by 福地 邦雄 1989-1990. All rights reserved.',CR,LF
- db '使い方:MCPR <オプション> ファイル名・・・',CR,LF
- db ' -xx xxカラムのマルチカラム印刷を行う -Wxx 1ページの桁数',CR,LF
- db ' -Nxx xx桁の行番号を付ける -Kxx 1カラムの桁数',CR,LF
- db ' -H<タイトル> タイトルを付ける 無指定時はファイル情報 -Gxx カラム間の空白桁数',CR,LF
- db ' -P<A|B|C> ASM,BASIC,C のルールでカラム替えする -Txx タブサイズ',CR,LF
- db ' -C 改ページコードを改行コードとして扱う -Lxx 1ページの印刷行数',CR,LF
- db ' +xx-yy xxページからyyページまで印刷 -Rxx ページ替えを改行コードで行う',CR,LF
- db ' +xx,zz xxページからzzページ分を印刷 xxは1ページの物理行数',CR,LF
- db ' -Fx,y,<W|SL|SP|AP|AL|BP|BL> -Mxx,yy xxは左マージン yyは上マージン',CR,LF
- db ' xは桁ピッチ yは行ピッチ 以後は用紙指定',CR,LF
- db ' 1=136桁・10cpi 1=60行・6lpi ドットプリンタ W=136桁連帳 SL=80桁連帳 SP=A4縦',CR,LF
- db ' 2=204桁・15cpi 2=75行・7.5lpi ページプリンタ AP=A4縦 AL=A4横',CR,LF
- db ' 3=272桁・20cpi 3=90行・9lpi BP=B4縦 BL=B4横',CR,LF
- db '桁ピッチ=1or2の時 行ピッチ=3は指定できない 用紙によって印刷行桁の初期値は変わる',CR,LF
- db ' -? 標準書式の設定値を表示する -Ux ホッパーユニット指定',CR,LF
- db ' ',CR,LF
- hlpmsgsiz equ $-helpmsg
- ;
- paperemp db '用紙がありません.<書込み中> デバイス $'
- writing db '書込みができません. デバイス $'
- selectopt db '中止<A>, もう一度<R>, 無視<I>, ページ打ち直し<P>? $'
- newline db CR,LF,'$'
- data ends
- ;
- code segment para public 'CODE'
- assume cs:code,ds:data,ss:stack
- int24h dd 0
- intflg db 2 dup(0)
- reprintflg dw 0
- dataseg dw data
- db 6 dup(0)
- ;
- entry proc far
- ;
- mov ax,seg data
- mov es,ax
- mov es:pspseg,ds
- mov ax,ds:[12h]
- mov word ptr cs:int24h,ax
- mov ax,ds:[14h]
- mov word ptr cs:int24h+2,ax
- ;
- mov di,offset argv
- call getarg
- push es
- pop ds
- mov argc,ax
- jz noargs
- ;
- call allocnambuf
- call options
- jz noprint
- mov filecount,ax
- ;
- call allocprtbuf
- call sysalternate
- prtloop:
- sub filecount,1
- jb endprint
- ;
- mov ax,3d40h
- push ds
- lds si,nameptr
- lds dx,[si]
- int 21h
- pop ds
- jc nextfile
- ;
- call newfile
- call formprint
- ;
- mov ah,3eh
- mov bx,fhandle
- int 21h
- call prtendmsg
- nextfile:
- add nameptroff,4
- jmp short prtloop
- endprint:
- call sysrestore
- call freeprtbuf
- noprint:
- call freenambuf
- mov ax,4c00h
- int 21h
- ;
- noargs:
- mov errorno,0
- mov cx,hlpmsgsiz
- mov dx,offset helpmsg
- jmp abort
- ;
- entry endp
- ;
- sysalternate proc
- ;
- mov ax,3300h
- int 21h
- mov breakflag,dl
- ;
- mov ax,3301h
- mov dl,1
- int 21h
- ;
- mov ax,4400h
- mov bx,4
- int 21h
- mov dh,0
- mov devinfo,dx
- ;
- mov ax,4401h
- mov bx,4
- or dl,20h
- int 21h
- ;
- push ds
- mov ax,2523h
- mov dx,offset int23proc
- push cs
- pop ds
- int 21h
- ;
- mov ax,2524h
- mov dx,offset int24proc
- int 21h
- pop ds
- ;
- call prtinit
- ;
- ret
- ;
- sysalternate endp
- ;
- sysrestore proc
- ;
- mov ax,3301h
- mov dl,breakflag
- int 21h
- ;
- mov dx,offset prtterm
- mov cx,prtrmsiz
- call dosprint
- ;
- mov ax,4401h
- mov bx,4
- mov dx,devinfo
- int 21h
- ;
- ret
- ;
- sysrestore endp
- ;
- prtendmsg proc
- ;
- cld
- xor ax,ax
- mov cx,-1
- les di,nameptr
- les di,es:[di]
- mov si,di
- repne scasb
- not cx
- dec cx
- mov bx,40
- sub bx,cx
- jae nonameover
- mov bx,0
- mov cx,40
- nonameover:
- push es
- mov di,ds
- mov es,di
- pop ds
- mov di,offset prtfilename
- rep movsb
- mov al,' '
- mov cx,bx
- rep stosb
- mov di,es
- mov ds,di
- mov cx,endmsgsz
- mov dx,offset prtend
- call dosstdout
- ret
- ;
- prtendmsg endp
- ;
- int23proc proc
- ;
- test cs:intflg,1
- jz ctrlc
- iret
- ctrlc:
- or cs:intflg,1
- test cs:intflg,40h
- jnz fatalexit
- ;
- mov ds,cs:dataseg
- ;
- mov si,offset brkterm
- mov cx,brtrmsiz
- termoutloop:
- mov ah,5
- mov dl,[si]
- int 21h
- inc si
- loop termoutloop
- ;
- mov ax,4401h
- mov bx,4
- mov dx,devinfo
- int 21h
- fatalexit:
- mov ax,4c01h
- int 21h
- ;
- int23proc endp
- ;
- int24proc proc
- ;
- test cs:intflg,80h
- jnz int24old
- test ah,8
- jz int24old
- cmp di,9
- jb int24old
- cmp di,0ah
- ja int24old
- push bp
- mov bp,sp
- cmp byte ptr [bp+9],40h
- jne intdefault
- cmp word ptr [bp+0ah],4
- jne intdefault
- push ds
- mov ds,[bp]
- test byte ptr [si+5],80h
- pop ds
- jnz intfatal
- intdefault:
- pop bp
- int24old:
- or cs:intflg,80h
- jmp cs:int24h
- ;
- intfatal:
- pop bp
- or cs:intflg,0c0h
- push ax
- push bx
- push cx
- push dx
- push si
- push di
- push bp
- push ds
- push es
- mov bp,sp
- ;
- mov ds,cs:dataseg
- cmp di,9
- jne writeerr
- mov dx,offset paperemp
- jmp short guide1out
- writeerr:
- mov dx,offset writing
- guide1out:
- mov ah,9
- int 21h
- ;
- mov es,[bp+4]
- lea si,[si+10]
- mov cx,8
- devnameloop:
- mov ah,2
- mov dl,es:[si]
- test dl,dl
- jz newlines
- cmp dl,20h
- je newlines
- int 21h
- inc si
- loop devnameloop
- newlines:
- mov ah,9
- mov dx,offset newline
- int 21h
- questions:
- mov ah,9
- mov dx,offset selectopt
- int 21h
- ;
- mov ax,0c01h
- int 21h
- ;
- push ax
- mov ah,9
- mov dx,offset newline
- int 21h
- pop ax
- ;
- xor ah,ah
- cmp al,'I'
- je oprdefault
- cmp al,'i'
- je oprdefault
- inc ah
- cmp al,'R'
- je oprretry
- cmp al,'r'
- je oprretry
- inc ah
- cmp al,'A'
- je oprdefault
- cmp al,'a'
- je oprdefault
- inc ah
- cmp al,'P'
- je oprpagehead
- cmp al,'p'
- je oprpagehead
- ;
- jmp questions
- ;
- oprpagehead:
- mov cs:reprintflg,-1
- oprretry:
- and cs:intflg,03fh
- oprdefault:
- mov [bp+10h],ah
- ;
- pop es
- pop ds
- pop bp
- pop di
- pop si
- pop dx
- pop cx
- pop bx
- pop ax
- iret
- ;
- int24proc endp
- ;
- code ends
- ;
- stack segment para stack 'STACK'
- db 400h dup(?)
- stack ends
- end entry