BREAK MACRO
INT 2
%OUT HARD BREAK INSERTED
ENDM
PAGE 66,132
; Copyright 1992, Alfred J. Heyman and Spectrum Research, Inc.
;--------------
vid segment
assume cs:vid,ds:vid,es:vid,ss:vid
;Initial Defaults
MONOCHROME = 7
ULX = 0
LRX = 79
ULY = 0
LRY = 24
;SCN_BACKGND = 1 ;Screen Background color.
;SCN_FOREGND = 7 ;Screen Foreground color.
;HDR_BACKGND = 7 ;Header Background color.
;HDR_FOREGND = 4 ;Header Foreground color.
SCN_BACKGND = 0 ;Screen Background color.
SCN_FOREGND = 7 ;Screen Foreground color.
HDR_BACKGND = 7 ;Header Background color.
HDR_FOREGND = 0 ;Header Foreground color.
org 100h
start: jmp install
cldata:
cl_count db 3
cl_hdr db "/C "
cl_command: db 80 dup (0)
cl_cmd_src: db "MAINMENU.BAT",0DH
ulx_spot db ULX ;Upper left X location of main screen.
uly_spot db ULY ;Upper left Y locatoin of main screen.
lrx_spot db LRX ;Lower right X spot.
lry_spot db LRY ;Lower right Y spot.
scn_back db SCN_BACKGND ;Main screen background.
scn_fore db SCN_FOREGND ;Main screen foreground.
hdr_back db HDR_BACKGND ;Header/footer screen background.
hdr_fore db HDR_FOREGND ;Header/footer screen foreground.
vid_page db 0 ;Default video page.
ext_enable db 1 ;0 or 1 for extensions enabled.
io_supress db 0 ;0 or 1 for crt io suppression.
script db 0
scriptseg dw 0
scripthandle dw 0
vid_mode db 0
f10keymsg: db "Main Menu",0
f10sig: db "Enter selection: ",0
f2watchbuf: db 80 dup (0)
f2w_ptr dw 0
o10o dw 0
o10s dw 0
o21o dw 0
o21s dw 0
copystored db 0 ;1=Copyright stored. 0=Not.
copyline0: db 8, 4,17h,80 dup (0)
copyline1: db 8, 5,17h,80 dup (0)
copyline2: db 8, 6,17h,80 dup (0)
copyline3: db 8, 7,17h,80 dup (0)
copyline4: db 8, 8,17h,80 dup (0)
copyline5: db 8, 9,17h,80 dup (0)
release11 db 0 ;0=R9,10 1=R11
autopersonal db 0 ;0=AutoEDMS, 1=PersonalEDMS
highoption dw 0
leftright db 10,10,11,12,12,12,13,13,13,13,0,2,5,8 ;L to R Xlation.
highdata: db 6, 6,30 ;ACAD Option 0.
db 6, 8,30 ;ACAD Option 1.
hd2: db 6,10,30 ;ACAD Option 2.
db 6,12,30 ;ACAD Option 3.
db 6,13,30 ;ACAD Option 4.
db 6,15,30 ;ACAD Option 5.
db 6,16,30 ;ACAD Option 6.
db 6,18,30 ;ACAD Option 7.
db 6,20,30 ;ACAD Option 8.
db 6,21,30 ; <------ ACAD Option 9.
db 41,6 ,33 ;ACS Option 10.
db 41,10,33 ;ACS Option 11.
db 41,14,33 ;ACS Option 12.
db 41,20,33 ;ACS Option 13.
db 0
; int&cls / ext&leave
; 0 / 1
op_chars: db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 1
db 1
db 1
db 1
oldpsp dw 0 ;Storage for previous PSP.
stuff_buff: db 80 dup (0) ;Keyboard stuff buffer.
cmdname: db 128 dup (0) ;Command processor name.
parmblock:
environ dw 0
commandline dw offset cldata
thisseg1 dw ?
dw offset fcb1
thisseg2 dw ?
dw offset fcb2
thisseg3 dw ?
fcb1: db 0," ",0,0,0,0
fcb2: db 0," ",0,0,0,0
;--------------------------------------------------------------------------
commandcom: call commonsegs
mov ax,ds
mov thisseg1,ax
mov thisseg2,ax
mov thisseg3,ax
mov cx,0000h
mov dx,184fh ;Clear the screen BLUE.
mov bh,7
mov ax,600h
call vid_bios
mov ah,2
mov dx,0
mov bh,vid_page
call vid_bios
mov saved_sp,sp
mov saved_ss,ss
mov ax,5100h
call dos
mov oldpsp,bx
mov ax,5000h
mov bx,cs
call dos
mov bx,offset parmblock ;Point to parms to send.
mov dx,offset cmdname ;Point to name.
mov ax,4b00h ;EXEC - RUN.
call dos ;Call Dos.
cli
mov sp,cs:saved_ss ;Restore Registers.
mov ss,sp
mov sp,cs:saved_sp
sti
call commonsegs
pushf
push ax
push bx
mov ax,5000h
mov bx,cs:oldpsp
call dos
pop bx
pop ax
call scr_menu
popf
jc exec_failure
ret
exec_failure: push ax
mov ah,9
mov dx,offset exec_msg
call dos
pop ax
ret
exec_msg: db "$"
saved_sp dw 0
saved_ss dw 0
;------------------------------------------------------------------------
scoot_buff: push si
push di
push cx
pushf
push ds
push es
mov si,cs
mov ds,si
mov es,si
mov si,offset stuff_buff + 1
mov di,offset stuff_buff
mov cx,80
rep movsb
pop es
pop ds
popf
pop cx
pop di
pop si
ret
;------------------------------------------------------------------------
highlight: mov dl,[si]
mov dh,[si+1]
mov cl,[si+2]
xor ch,ch
nxthigh: push cx
push dx
push si
mov ah,2
mov bh,vid_page ;Move cursor.
call vid_bios
mov ah,8
mov bh,vid_page ;Get character.
call vid_bios
cmp ah,70h
jnz not70
mov bl,1fh
jmp was70
not70: mov bl,70h
was70: mov ah,9
mov bh,vid_page
push cx
mov cx,1
call vid_bios
pop cx
pop si
pop dx
pop cx
inc si
inc dx
loop nxthigh
ret
;------------------------------------------------------------------------
run_menu: mov si,offset hd2
mov highoption,2
call highlight
cmp script,0 ;Is script running?
jnz menu_int ;Dump out of menu.
keyloop: mov ah,0
int 16h ;Keyboard IO.
rmgo: push ax
mov si,offset highdata
add si,highoption
add si,highoption
add si,highoption
call highlight
pop ax
cmp ax,5000h ;Down Arrow?
jz dnarrow
cmp ax,4800h ;Up Arrow?
jz uparrow
cmp ax,4b00h ;Left Arrow?
jz lrarrow
cmp ax,4d00h ;Right Arrow?
jz lrarrow
cmp al,0dh ;Return?
jz menuf2
cmp al,"0"
jz qmenu
cmp al,"1"
jz qmenu
cmp al,"2"
jz qmenu
cmp al,"3"
jz qmenu
cmp al,"4"
jz qmenu
cmp al,"5"
jz qmenu
cmp al,"6"
jz qmenu
cmp al,"7"
jz qmenu
cmp al,"8"
jz qmenu
cmp al,"9" ;Release 11 info
jz qmenu
jmp goodmenu
qmenu: sub al,'0'
xor ah,ah
mov highoption,ax
jmp goodmenu
dnarrow: inc highoption
cmp release11,0
jnz nof9
cmp highoption,9 ;KNOCK OUT OPTION 9 in RELEASE 11.
jz dnarrow
nof9:
cmp highoption,14
jc goodmenu
mov highoption,0
jmp goodmenu
;---------------
uparrow: dec highoption
cmp release11,0
jnz nof9d
cmp highoption,9 ;KNOCK OUT OPTION 9 in RELEASE 11.
jz uparrow
nof9d:
cmp highoption,14
jc goodmenu
mov highoption,13
jmp goodmenu
;---------------
lrarrow: mov si,highoption
add si,offset leftright
mov al,[si] ;Get left right translation.
xor ah,ah
mov highoption,ax
jmp goodmenu
;---------------
goodmenu: mov si,offset highdata
add si,highoption
add si,highoption
add si,highoption
call highlight
jmp keyloop
menuf2: mov si,offset op_chars
add si,highoption
cmp byte ptr [si],0
jz menu_int
jmp menu_ext
menu_int: mov io_supress,0
mov cx,0
mov dx,184fh ;Clear the screen.
mov ax,600h
mov bh,17h
call vid_bios
mov si,offset acfnct
call spec_print
cmp script,0
jz ns_go
mov script,0 ;Zap indicator.
;jmp menu_exit
ret
ns_go: cld
mov ax,highoption
add al,"0"
mov di,offset stuff_buff
stosb
mov ax,0dh
stosw
jmp menu_exit
menu_ext: mov ax,500h
mov ch,0
mov cx,highoption ;Stuff the option number into keyboard.
int 16h
call commandcom ;Do the shell Here.
jmp goodmenu
menu_exit: ret
acfnct: db 0,5,17h,"AutoCAD Function: ",0
;------------------------------------------------------------------------
store_print: cmp copystored,1
jz sp2
mov copystored,1
mov di,offset copyline0 + 3
mov dx,0000h
mov cx,60
call storeline
mov di,offset copyline1 + 3
mov dx,0100h
mov cx,60
call storeline
mov di,offset copyline2 + 3
mov dx,0200h
mov cx,60
call storeline
mov di,offset copyline3 + 3
mov dx,0300h
mov cx,60
call storeline
mov di,offset copyline4 + 3
mov dx,0400h
mov cx,60
call storeline
mov di,offset copyline5 + 3
mov dx,0500h
mov cx,60
call storeline
sp2: ret
putprint: mov si,offset copyline0
call spec_print
mov si,offset copyline1
call spec_print
mov si,offset copyline2
call spec_print
mov si,offset copyline3
call spec_print
mov si,offset copyline4
call spec_print
mov si,offset copyline5
call spec_print
ret
;------------------------------------------------------------------------
storeline:
push cx
push dx
push di
mov ah,2
mov bh,vid_page ;Move cursor.
call vid_bios
mov ah,8
mov bh,vid_page ;Get character.
call vid_bios
pop di ;Store in buffer.
mov [di],al
pop dx
pop cx
inc di
inc dx
loop storeline
ret
;------------------------------------------------------------------------
acs_int10: cmp cs:ext_enable,0 ;1 if extensions are enabled.
jz acs_int10x ;Jump out if not enabled.
cmp ax,0600h ;Clear screen?
jnz acsi10f2
cmp ch,dh ;Ansi Clear EOL?
jz acs_int10x ;Jump out if looks like an EOL.
mov cs:io_supress,0 ;Turn suppression off.
jmp cls
acsi10f2: cmp cs:io_supress,0 ;1 if supress.
jz activeio
iret
activeio: cmp ah,02h ;Move cursor?
jnz acsi10f9
jmp move
acsi10f9: cmp ah,09h ;Write char and attribute?
jnz acsi10fe
jmp writeca
acsi10fe: cmp ah,0eh ;Teletype emulation?
jnz acsi10fx
jmp teletype
acsi10fx:
acs_int10x: jmp dword ptr cs:o10o
;------------------------------------------------------------------------
writeca: push cx
mov bl,cs:scn_back
mov cl,4
shl bl,cl
or bl,cs:scn_fore
pop cx
jmp acs_int10x
;------------------------------------------------------------------------
cls: ;Clear lines 1 - 25 special.
push ds ;Save segment registers.
push es
cld ;direction forward.
call commonsegs
mov ax,600h ;Clear black screen.
mov bh,7h
mov cx,0
mov dx,194fh
call vid_bios
;------ Clear mid screen ------
mov ax,0600h ;Clear screen.
mov bh,scn_back ;Get text foreground.
mov cl,4
shl bh,cl
or bh,scn_fore
mov dh,lry_spot ;Lower Right Y
mov ch,uly_spot ;Upper Left Y
mov cl,ulx_spot ;Upper Left X
mov dl,lrx_spot ;Lower Right X
call vid_bios ;Do the call.
mov ah,2
mov cx,0
mov bh,vid_page
call vid_bios
pop es
pop ds
iret ;Return to caller.
;------------------------------------------------------------------------
;------------------------------------------------------------------------
move: cmp dh,0
jnz notop
mov dh,cs:uly_spot
notop: cmp dl,0
jnz noleft
mov dl,cs:ulx_spot
noleft: cmp dh,cs:lry_spot
jle nobottom
call scrlup
nobottom: cmp dl,cs:lrx_spot
jle movex
mov dh,cs:lry_spot
inc dh
mov dl,cs:ulx_spot
call scrlup
movex: jmp acs_int10x
;------------------------------------------------------------------------
;------------------------------------------------------------------------
teletype: push ax
push bx
push cx
push dx
cmp al,0dh ;Is it a carriage return?
jz t_cr ;Yes? Then Jump.
cmp al,0ah ;Is it a line feed?
jz t_lf ;Yes? Then Jump.
cmp al,7 ;Is it a bell?
jz t_bl ;Yes? Then Jump to bell.
cmp al,8 ;Is it a back space?
jz t_bs ;Yes? Then Jump to back space.
mov ah,9 ;Write character and attribute.
mov bh,cs:vid_page ;Get video page.
mov bl,cs:scn_back ;Get screen background.
mov cl,4
shl bl,cl
or bl,cs:scn_fore
mov cx,1 ;Repeat count is ONE.
call vid_bios ;Call video bios.
call inc_cursor ;Increment cursor position.
ttxit: pop dx
pop cx
pop bx
pop ax
iret ;Return to caller.
;---------------
;Handle carriage return.
;---------------
t_cr: mov ah,3
mov bh,cs:vid_page
call vid_bios
mov dl,cs:ulx_spot ;CR returns cursor to ULX,curnty.
mov ah,2
call vid_bios
jmp ttxit
;---------------
;Handle line feed.
;---------------
t_lf: mov ah,3
mov bh,cs:vid_page ;Get cursor location on current page.
call vid_bios
inc dh
cmp dh,cs:lry_spot ;Did we just move cursor out of area?
jle t_cont
call scrlup ;Scroll screen area up by one.
jmp ttxit
t_cont: mov ah,2 ;Set cursor postion.
mov bh,cs:vid_page ;Get video page.
call vid_bios ;Call video bios.
jmp ttxit
;---------------
t_bs: ;Handle back space.
t_bl: ;Handle bell character.
pop dx
pop cx
pop bx
pop ax
jmp acs_int10x
;------------------------------------------------------------------------
;------------------------------------------------------------------------
inc_cursor: mov ah,3 ;Get cursor position.
mov bh,cs:vid_page
call vid_bios ;Call bios to get it, like now already.
inc dl ;Increment Relative X position.
cmp dl,cs:lrx_spot ;Check Relative X for bounds.
jle incexit ;If X is out of range, do a CRLF.
crlf: mov dl,cs:ulx_spot ;Move cursor to left.
inc dh ;Move cursor down one.
cmp dh,cs:lry_spot ;Past bottom?
jle incexit ;No? Do Normal.
scrlup: push dx
push cx
push ax
mov ah,6 ;Scroll up.
mov bh,cs:scn_back ;And the attribute is.....
mov cl,4
shl bh,cl
or bh,cs:scn_fore
mov cl,cs:ulx_spot ;X scroll starting location.
mov ch,cs:uly_spot ;Y scroll starting location.
mov dl,cs:lrx_spot ;X scroll ending location.
mov dh,cs:lry_spot ;Y scroll ending location.
mov al,1 ;Scroll up one line.
call vid_bios
pop ax
pop cx
pop dx
dec dh ;Left on Last Line.
incexit: mov bh,cs:vid_page ;Get video page again.
mov ah,2 ;Set cursor location.
call vid_bios ;DO IT...
ret
;------------------------------------------------------------------------
vid_bios: cmp cs:vid_mode,MONOCHROME
jnz ctxx
cmp ah,9
jz txf09
cmp ah,6
jz txf06
jmp ctxx
;-------------- Translate Function 06
txf06: cmp bh,70h ;MONO Color Translation.
jc ctx1
mov bh,70h ;INVERSE is Black on White.
jmp ctxx
ctx1: mov bh,7 ;NON-INVERSE is White on Black.
jmp ctxx
;-------------- Translate Function 09
txf09: cmp bl,70h ;MONO Color Translation.
jc ctx2
mov bl,70h ;INVERSE is Black on White.
jmp ctxx
ctx2: mov bl,7 ;NON-INVERSE is White on Black.
;---------------
ctxx: pushf ;Do a simulated INT 10 call.
cli
call dword ptr cs:o10o
ret
;------------------------------------------------------------------------
commonsegs: push ax
mov ax,cs
mov ds,ax
mov es,ax
pop ax
ret
;------------------------------------------------------------------------
acs_int21: cmp ah,2 ;Is it function 2?
jz acs_i21f2
cmp ah,9 ;Is it function 9?
jz acs_i21f9
cmp ah,6
jz acs_i21f6 ;Is it function 6?
cmp ah,0fh ;Open FCB? (script R10 maybe?)
jz acs_i21f0f
cmp ah,10h
jz acs_i21f10 ;Close file FCB?
cmp ah,3dh ;Open file? (script maybe?)
jz acs_i21f3d
cmp ah,3eh ;Close file (script maybe?)
jz acs_i21f3e
jmp acs_i21x ;No? Then Jump out.
acs_i21f9: push ds
push es
push si
push di
push ax
push cx
push dx
push cs
pop es ;ES=CS
call store_pline
push cs ;DS=CS
pop ds
call p10test
jnz acsi21f9a ;No? Then Jump.
call zap_watch
call scr_copy ;Display copyright Screen.
call _delay
call _delay
call _delay
mov io_supress,1 ;Suppress all ACAD CRT IO.
call dispf10 ;Display ACS function 10.
jmp acsi21f9x ;Get out.
acsi21f9a: call f10sigtest
jnz acsi21f9x
call zap_watch
call run_menu
acsi21f9x: call zap_watch
pop dx
pop cx
pop ax
pop di
pop si
pop es
pop ds
jmp acs_i21x
;---------------
acs_i21f2: push ds
push es
push si
push di
push ax
push cx
push dx
call commonsegs ;Common segments. CS=DS=ES.
call store_pchar ;Store character to be printed.
cmp dl," "
jz acsstest
cmp dl,0dh ;Was it a carriage return?
jnz acsi211 ;No? Jump over comparison.
acsrunm: call p10test ;Call print f 10 test.
call zap_watch ;Returns ZR=Print NZ=Not.
jnz acsstest ;Print it? FFFF=Jump.
call scr_copy ;Do copyright screen.
call _delay
call _delay
call _delay
mov io_supress,1 ;Supress all acad crt io.
call dispf10 ;Display ACS function 10.
acsstest: call f10sigtest ;Test for menu signal.
jnz acsi211
call zap_watch
call run_menu ;Perform ACS menu procedure.
acsi211: pop dx
pop cx
pop ax
pop di
pop si
pop es
pop ds
jmp acs_i21x
;------------------------------------------------------------------------
acs_i21f6: cmp dl,0ffh ;Read a character?
jnz acs_i21x ;No? Then jump.
cmp byte ptr cs:stuff_buff,0 ;Any keys to get?
jz acs_i21x ;No? Then Jump.
mov al,byte ptr cs:stuff_buff
call scoot_buff
PUSH BP ;Get previous flags off of stack.
PUSH AX
MOV BP,SP
MOV AX,[BP+8]
PUSH AX
POPF ;Put them in place IN FLAGS.
POP AX
POP BP
or al,al
retf 2
;------------------------------------------------------------------------
acs_i21f0f: push si
mov si,dx
add si,9 ;Point to extension in FCB open.
jmp cfn ;Jump to common code.
;------------------------------------------------------------------------
; Close file FCB
;------------------------------------------------------------------------
acs_i21f10: push si
mov si,dx
add si,9
fcfn: cmp byte ptr [si],"S" ;Is it ".s"
jz ffzy ;Yes? Jump over to next test.
cmp byte ptr [si],"s" ;Is it ".s"
jnz ffzx ;No? Jump out.
ffzy: inc si
cmp [si],"RC" ;Yes? Jump over.
jz ffzz
cmp [si],"rc" ;No? Jump out.
jnz ffzx
ffzz: mov cs:script,0 ;Mark script file closed.
mov cs:scripthandle,0 ;Clear any handle.
mov cs:scriptseg,0 ;Clear any psp.
ffzx: pop si
jmp acs_i21x
;------------------------------------------------------------------------
; Open file function.
;------------------------------------------------------------------------
acs_i21f3d: push si ;Open file...
mov si,dx
ofz: inc si
cmp byte ptr [si],0 ;Find string terminator.
jnz ofz
sub si,3 ;Look at beginning of extension.
cfn: cmp byte ptr [si],"S" ;Is it ".s"
jz fzy ;Yes? Jump over to next test.
cmp byte ptr [si],"s" ;Is it ".s"
jnz fzx ;No? Jump out.
fzy: inc si
cmp [si],"RC" ;Yes? Jump over.
jz fzz
cmp [si],"rc" ;No? Jump out.
jnz fzx
fzz: mov cs:script,1 ;Mark script file opened.
push ax
push bx
mov ah,51h
call dos
mov cs:scriptseg,bx ;Save script segment.
pop bx
pop ax
pop si
PUSH BP ;Get previous flags off of stack.
PUSH AX
MOV BP,SP
MOV AX,[BP+8]
PUSH AX
POPF ;Put them in place IN FLAGS.
POP AX
POP BP
pushf
cli
call dword ptr cs:o21o ;Call DOS.
jc nssh ;If CY, don't save handle.
mov cs:scripthandle,bx ;Save script handle.
nssh: retf 2
fzx: pop si
jmp acs_i21x
;------------------------------------------------------------------------
; Close file function.
;------------------------------------------------------------------------
acs_i21f3e: cmp cs:script,1 ;Is script running?
jnz i21f3x ;No? Jump to handle normal.
cmp cs:scripthandle,bx ;Is it script handle?
jnz i21f3x ;No? Jump to handle normal.
push ax
push bx
mov ah,51h ;Get current PSP.
call dos
cmp cs:scriptseg,bx ;Is it script PSP?
pop bx
pop ax
jnz i21f3x ;No? Then Jump out.
mov cs:script,0 ;Yes? Clear script flag.
mov cs:scriptseg,0 ;Clear script segment.
mov cs:scripthandle,0 ;Clear script handle.
i21f3x: jmp acs_i21x ;Jump to call normal.
;------------------------------------------------------------------------
acs_i21x: jmp dword ptr cs:o21o
;------------------------------------------------------------------------
zap_watch: pushf
mov di,offset f2watchbuf
mov al,0
mov cx,80
cld
rep stosb
mov f2w_ptr,0 ;Zap pointer.
popf
ret
;------------------------------------------------------------------------
p10test: mov si,offset f10keymsg
mov di,offset f2watchbuf
mov cx,9
cmn_srch: cld
repz cmpsb
mov ax,0
jz p10found
mov ax,0ffffh
p10found: or ax,ax
ret
;------------------------------------------------------------------------
f10sigtest: mov si,offset f10sig
mov di,offset f2watchbuf
mov cx,17
jmp cmn_srch
;------------------------------------------------------------------------
dispf10: push ax
push bx
push cx
push dx
push si
push di
call scr_menu
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
;------------------------------------------------------------------------
store_pchar: cmp f2w_ptr,80 ;Is buffer size exceeded?
jnc sp1 ;Yes? Then jump over data put.
mov di,offset f2watchbuf ;Get offset of buffer.
add di,f2w_ptr ;Add in index.
mov [di],dl ;Store the character.
inc f2w_ptr ;Increment the index.
sp1: cmp dl,0ah
jnz sp2x
mov f2w_ptr,0 ;Zap pointer.
mov word ptr f2watchbuf,0 ;Zap some data.
sp2x: ret
;------------------------------------------------------------------------
store_pline: mov di,offset f2watchbuf
mov si,dx
mov cs:f2w_ptr,0 ;Zap the pointer.
mov cx,78 ;Maximum character transfer.
sploop: lodsb
stosb
inc cs:f2w_ptr ;Increment the pointer.
cmp al,"$"
loopnz sploop
ret
;------------------------------------------------------------------------
dos: pushf
cli
call dword ptr cs:o21o ;Call it.
ret
;------------------------------------------------------------------------
acs_shell: mov dx,offset shellmsgx
mov ah,9
call dos
ret
shellmsgx: db 0dh,0ah,0dh,0ah,"ACS SHELL HERE",7,7,"$"
;------------------------------------------------------------------------
scr_copy: call store_print
mov ah,2 ;GOTOXY 0,0
mov bh,vid_page
mov dx,0000h
call vid_bios
mov ah,9
mov al,178 ;Print character 178 ALL over screen.
mov cx,2000
mov bh,vid_page
mov bl,10h
call vid_bios
mov cx,0306h
mov dx,1649h ;Clear the Center screen BLUE.
mov bh,10h
mov ax,600h
call vid_bios
mov si,offset copy_l1 ;Print "Copyright and Trademark Notices"
call spec_print
call sideprint ;Clear sides
mov si,offset copy_l2
call spec_print
mov si,offset copy_l3
call spec_print
mov si,offset copy_l4
call spec_print
mov si,offset copy_l5
call spec_print
mov si,offset copy_l6
call spec_print
mov si,offset copy_l7
call spec_print
mov si,offset copy_l8
call spec_print
mov si,offset copy_l9
call spec_print
mov si,offset copy_l10
call spec_print
mov si,offset copy_l11
call spec_print
call putprint ;Display stored copyright.
ret
copy_l1: db 6, 2,70h," Copyright and Trademark Notices ",0
copy_l2: db 8,11,17h,"AutoEDMS,MultiMedia Mail,10View Copyright (C) 1990 ACS Telecom",0
copy_l3: db 8,12,17h,"EDMS,SPS Copyright (C) 1988,89,89 ACS Telecom",0
copy_l4: db 8,13,17h,"Artificial intelligence functions and portions of MultiMedia",0
copy_l5: db 8,14,17h,"Mail Copyright (C) 1988,89,89 Peter Immarco",0
;copy_l6: db 8,15,17h,"Portions of SPS and Shell, Copyright (C) 1989,90 Alfred Heyman",0
copy_l6: db 8,15,17h,"SPS Engine, Queue, and 10Menu Copyright (C) 1989-92 Alfred Heyman",0
copy_l7: db 8,17,17h,"AutoCAD, Autodesk and the Autodesk logo are U.S. registered",0
copy_l8: db 8,18,17h,"trademarks of Autodesk, Inc. Autodesk Animator, AutoSolid, AUI,",0
copy_l9: db 8,19,17h,"ADI and DXF are additional trademarks of Autodesk, Inc.",0
copy_l10: db 8,20,17h,"ACS Telecom, EDMS, SPS, AutoEDMS, MultiMedia Mail, 10View, 10CAD",0
copy_l11: db 8,21,17h,"and related logos are trademarks of ACS Telecom",0
;------------------------------------------------------------------------
scr_menu: mov ah,2 ;GOTOXY 0,0
mov bh,vid_page
mov dx,0
call vid_bios
mov ah,9
mov al,178 ;Print character 178 ALL over screen.
mov cx,2000
mov bh,vid_page
mov bl,10h
call vid_bios
mov cx,0405h
mov dx,1524h ;Clear the LEFT screen BLUE.
mov bh,10h
mov ax,600h
call vid_bios
mov cx,0428h
mov dx,154ah ;Clear the RIGHT screen BLUE.
mov bh,10h
mov ax,600h
call vid_bios
call sideprint ;Clear sides.
cmp autopersonal,1
jz apx1
mov si,offset menu_l01a
call spec_print
jmp apx1j
apx1: mov si,offset menu_l01b
call spec_print
apx1j:
mov si,offset menu_l02
call spec_print
cmp autopersonal,1
jz apx4
mov si,offset menu_l03a
call spec_print
jmp apx4j
apx4: mov si,offset menu_l03b
call spec_print
apx4j:
mov si,offset menu_l04
call spec_print
mov si,offset menu_l05
call spec_print
mov si,offset menu_l06
call spec_print
mov si,offset menu_l07
call spec_print
mov si,offset menu_l08
call spec_print
mov si,offset menu_l09
call spec_print
mov si,offset menu_l10
call spec_print
mov si,offset menu_l11
call spec_print
mov si,offset menu_l12
call spec_print
cmp release11,1
jnz noopt9
mov si,offset menu_l12a ;display option 9.
call spec_print
noopt9:
cmp autopersonal,1
jz apx3
mov si,offset menu_l13a
call spec_print
jmp apx3x
apx3: mov si,offset menu_l13b
call spec_print
apx3x:
mov si,offset menu_l14
call spec_print
mov si,offset menu_l15
call spec_print
mov si,offset menu_l16
call spec_print
mov si,offset menu_l17
call spec_print
mov si,offset menu_l18
call spec_print
mov si,offset menu_l19
call spec_print
;;; mov si,offset menu_l20
;;; call spec_print
;;; mov si,offset menu_l21
;;; call spec_print
;;; mov si,offset menu_l22
;;; call spec_print
;;; mov si,offset menu_l23
;;; call spec_print
cmp autopersonal,1
jz apx2
mov si,offset menu_l24a
call spec_print
jmp apx2x
apx2: mov si,offset menu_l24b
call spec_print
apx2x:
ret
menu_l01a: db 23, 2,1fh," AutoCAD with AutoEDMS ",0
menu_l01b: db 20, 2,1fh," AutoCAD with Personal EDMS ",0
menu_l02: db 5, 4,70h," AutoCAD Menu ",0
menu_l03a: db 40, 4,70h," AutoEDMS Menu ",0
menu_l03b: db 40, 4,70h," Personal EDMS Menu ",0
menu_l04: db 7, 6,1fh,"0. Exit",0
menu_l05: db 7, 8,1fh,"1. Begin a NEW drawing",0
menu_l06: db 7,10,1fh,"2. Edit an EXISTING drawing",0
menu_l07: db 7,12,1fh,"3. Plot a drawing",0
menu_l08: db 7,13,1fh,"4. Printer Plot a drawing",0
menu_l09: db 7,15,1fh,"5. Configure AutoCAD",0
menu_l10: db 7,16,1fh,"6. File Utilities",0
menu_l11: db 7,18,1fh,"7. Compile shape/font file",0
menu_l12: db 7,20,1fh,"8. Convert old drawing file",0
menu_l12a: db 7,21,1fh,"9. Recover damaged drawing",0
menu_l13a: db 42, 6,1fh,"10. AutoEDMS System",0
menu_l13b: db 42, 6,1fh,"10. Personal EDMS System",0
menu_l14: db 42, 7,17h," View, track and search for",0
menu_l15: db 42, 8,17h," your AutoCAD drawing files",0
menu_l16: db 42,10,1fh,"11. 10CAD Shared Plotter system",0
menu_l17: db 42,11,17h," Send AutoCAD plot files to",0
menu_l18: db 42,12,17h," shared plotters/printers",0
menu_l19: db 42,14,1fh,"12. Miscellaneous",0
;menu_l20: db 42,15,17h," Send/receive mail, with",0
;menu_l21: db 42,16,17h," AutoCAD drawing images,",0
;menu_l22: db 42,17,17h," documents, faxes, photos",0
;menu_l23: db 42,18,17h," and voice messages",0
menu_l24a: db 42,20,1fh,"13. Change Plotter Settings",0
menu_l24b: db 42,20,1fh,"13. Change Plotter Settings",0
;menu_l24a: db 42,20,1fh,"13. Extended AutoEDMS Options",0
;menu_l24b: db 42,20,1fh,"13. Extended Personal EDMS Optns",0
menu_l25: db 0, 0,9 ,"ß ",0
menu_l26: db 78, 0,9 ," ß",0
menu_l27: db 0,24,9 ,"Ü ",0
menu_l28: db 78,24,9 ," Ü",0
spec_print: mov dl,[si] ;Get column.
mov dh,[si+1] ;Get row.
mov bl,[si+2] ;Get color.
add si,3 ;Point at first character.
ploop: mov al,[si] ;Get character.
or al,al ;Is it 0?
jnz pnow ;No? Then continue - Jump.
ret ;Return.
pnow: push si
push dx
push bx
push ax
push dx
push bx
mov ah,2
mov bh,vid_page ;Set cursor position.
call vid_bios
pop bx
pop dx
pop ax
mov ah,9
mov bh,vid_page ;Get video page.
mov cx,1
call vid_bios ;Print the character.
pop bx
pop dx
pop si
inc dl
inc si
jmp ploop
;-------------------------------------------------------------------------
sideprint: mov cx,1800h
mov dx,184fh ;Clear the BOTTOM screen BLACK.
mov bh,10h
mov ax,600h
call vid_bios
mov cx,0000h
mov dx,004fh ;Clear the TOP screen BLACK.
mov bh,10h
mov ax,600h
call vid_bios
mov cx,004eh
mov dx,184fh ;Clear the LEFT screen BLACK.
mov bh,10h
mov ax,600h
call vid_bios
mov cx,0000h
mov dx,1801h ;Clear the RIGHT screen BLACK.
mov bh,10h
mov ax,600h
call vid_bios
mov si,offset menu_l25
call spec_print
mov si,offset menu_l26
call spec_print
mov si,offset menu_l27
call spec_print
mov si,offset menu_l28
call spec_print
ret
;-------------------------------------------------------------------------
_delay proc
push ds
push di
pushf
sti
mov cx,9
mov di,0
mov ds,di
mov di,46ch ;Offset of LSW of timer.
waitstart: mov ax,[di] ;Get initial value.
waitspot: mov bx,[di]
cmp ax,bx
jz waitspot ;Wait here until they are diff.
loop waitstart
popf
pop di
pop ds
ret
_delay endp
;
;------------------------------------------------------------------------
install: mov ah,0fh;
int 10h
mov vid_mode,al ;Save video mode.
call get_comspec
call cmdline ;Process cmd line for /P and /9.
call get_bat_name
mov ax,600h ;Clear black screen.
mov bh,7h
mov cx,0
mov dx,194fh
int 10h
mov ah,2 ;GOTOXY 0,0
mov cx,0
mov bx,0
int 10h
mov ax,3510h ;Get vector for INT 10.
int 21h
mov o10o,bx
mov o10s,es
mov ax,3521h ;Get vector for INT 21.
int 21h
mov o21o,bx
mov o21s,es
mov ax,2510h ;Set our INT 10 handler in place.
mov dx,offset acs_int10
int 21h
mov ax,2521h ;Set our INT 21 handler in place.
mov dx,offset acs_int21
int 21h
pushf
cli
push cs
call cls
;
;BETA MESSAGE
;
;mov si,offset beta1
;call spec_print
;mov si,offset beta2
;call spec_print
;mov si,offset beta3
;call spec_print
;
mov dx,offset install ;Figure number of paragraphs.
add dx,15
mov cl,4
shr dx,cl
mov ax,31f0h
int 21h
mov dx,offset install
int 27h
;beta1: db 0,0,1fh,"10MENU Version 1.03 - Internal 12/11/90"
;beta2: db 0,1,1fh,"Not For Resale"
;beta3: db 0,2,1fh," ",0
;-----------------------------------------------------------------------
;-----------------------------------------------------------------------
cmdline: mov si,81h ;Point at command line.
mov cl,[si] ;mov character count into CL.
and cx,00ffh ;Fix up CX for looping.
jz clxit ;Jump out if no switches.
cmdloop: mov ax,[si] ;Get command line letters.
cmp ax,"9/" ;turn on option 9?
jnz nonine
mov release11,1 ;Set release 11 option 9 to ON.
nonine: cmp ax,"P/" ;Turn on "Personal EDMS"?
jz predms ;Yes? Then Jump out and turn on.
cmp ax,"p/"
jz predms
inc si
loop cmdloop
jmp clxit
predms: mov autopersonal,1
clxit: ret
;-----------------------------------------------------------------------
; This routine searches the environment for "COMSPEC",0dh,0ah,"="
; and ABORTS the run if found.
;-----------------------------------------------------------------------
get_comspec: push ds
push es
push cs
pop es
mov si,2ch
mov si,[si] ;Get SEGMENT of environment.
mov environ,si
mov ds,si
mov si,0ffffh ;DS:SI+1 point to environment.
cfnd_end: inc si
mov ax,[si]
cmp ax,0
jnz cfnd_end
mov dx,si ;DS:DX points to end of environ.
mov si,0ffffh ;DS:SI points to start of environ.
mov di,offset cacad_env ;ES:DI points to search string.
cfind_loop: inc si ;Increment search location.
cmp si,dx ;Have we exceeded limit?
jnc csrch_end ;Yes?, exit this routine.
push si
push di
mov cx,8
repz cmpsb ;Compare until found.
pop di
pop si
jnz cfind_loop ;Not found? Then Loop Up.
cmp cx,0 ;String Exausted?
jnz cfind_loop
add si,8 ;DS:SI point to command.com path.
mov di,offset cmdname
call strcpy ;Copy name of processor to us.
csrch_end: pop es
pop ds
ret
cacad_env: db "COMSPEC=",0 ;String to look for in environ.
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
STRCPY: push si
push di
push cx
push di
mov di,si ;Point ES:DI to source string.
push es
push ds
pop es ;ES:DI point to string
push di
push ax
mov cx,0ffffh
xor al,al
repnz scasb ;STRLEN
not cx
pop ax
pop di
pop es
pop di
rep movsb ;Move source to destination.
pop cx ;Restore all registers.
pop di
pop si
RET
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
get_bat_name: mov ds,ds:[002ch] ;Get segment of environ.
mov si,0
get_again: lodsb ;Get a letter out of env.
cmp al,0 ;Was it a ZERO?
jnz get_again ;No? Get again.
lodsb ;Get Next.
cmp al,0 ;Two Zeros in a row?
jnz get_again ;No? Jump up...
find_rname: lodsb ;Jump past this parm.
cmp al,0
jnz find_rname
;DS:SI points at RUN-NAME.
mov di,offset cl_command ;Store the Name in this seg.
move_the_name: lodsb
stosb
inc cs:cl_count
cmp al,0
jnz move_the_name
push cs ;Home sweet Home...
pop ds
mov si,di ;Point at end of Run-Name.
cli ;Lets cool it for a few secs.
std ;We want to search BACKWARDS.
find_slash: lodsb
dec cs:cl_count
cmp al,"\"
jnz find_slash ;Keep going back until found.
inc cs:cl_count
cld ;Foward again.
sti ;All is OK back on the farm.
add si,2 ;SI points at last slash + 1
mov di,si ;Move the name into place.
mov si,offset cl_cmd_src
batname: lodsb
stosb
inc cs:cl_count
cmp al,0
jnz batname
ret
vid ends
end start