diff options
Diffstat (limited to 'devtools/tasmrecover/dreamweb/monitor.asm')
-rw-r--r-- | devtools/tasmrecover/dreamweb/monitor.asm | 1496 |
1 files changed, 1496 insertions, 0 deletions
diff --git a/devtools/tasmrecover/dreamweb/monitor.asm b/devtools/tasmrecover/dreamweb/monitor.asm new file mode 100644 index 0000000000..7cc1a5a4dd --- /dev/null +++ b/devtools/tasmrecover/dreamweb/monitor.asm @@ -0,0 +1,1496 @@ +;Copyright (c) 1990-2011 by Neil Dodwell +;Released with permission from Neil Dodwell under GPLv2 +;See LICENSE file for full license text +Usemon proc near + + mov lasttrigger,0 + + push cs ;start off with no file name + pop es + mov di,offset cs:currentfile+1 + mov cx,12 + mov al,32 + rep stosb + push cs ;start off with no file name + pop es + mov di,offset cs:operand1+1 + mov cx,12 + mov al,32 + rep stosb + + push cs ;clear all keys + pop es + mov di,offset cs:keys + mov byte ptr [es:di],1 + add di,26 + mov cx,3 +keyloop: mov byte ptr [es:di],0 + add di,26 + loop keyloop + + call createpanel + call showpanel + call showicon + call drawfloor + call getridofall ;reels + + mov dx,offset cs:mongraphicname + call loadintotemp + call loadpersonal + call loadnews + call loadcart + mov dx,offset cs:characterset2 + call loadtempcharset + + call printoutermon + call initialmoncols + call printlogo + call worktoscreen + call turnonpower + call fadeupyellows + call fadeupmonfirst + + mov monadx,76 + mov monady,141 + mov al,1 + call monmessage + mov cx,120 + call hangoncurs + mov al,2 + call monmessage + mov cx,60 + call randomaccess + mov al,3 + call monmessage + mov cx,100 + call hangoncurs + call printlogo + call scrollmonitor + mov bufferin,0 + mov bufferout,0 + +moreinput: mov di,monadx + mov bx,monady + push di bx + call input + pop bx di + mov monadx,di + mov monady,bx + call execcommand + cmp al,0 + jz moreinput + +endmon: call getridoftemp + call getridoftempcharset + mov es,textfile1 + call deallocatemem + mov es,textfile2 + call deallocatemem + mov es,textfile3 + call deallocatemem + mov getback,1 + mov al,26 + call playchannel1 + mov manisoffscreen,0 + call restoreall ;reels + call redrawmainscrn + call worktoscreenm + ret + + endp + + + + + + +Printoutermon proc near + + mov di,40 + mov bx,32 + mov ds,tempgraphics + mov al,1 + mov ah,0 + call showframe + mov di,264 + mov bx,32 + mov ds,tempgraphics + mov al,2 + mov ah,0 + call showframe + mov di,40 + mov bx,12 + mov ds,tempgraphics + mov al,3 + mov ah,0 + call showframe + mov di,40 + mov bx,164 + mov ds,tempgraphics + mov al,4 + mov ah,0 + call showframe + ret + + endp + + + + + + + +Loadpersonal proc near + + mov al,location + mov dx,offset cs:monitorfile1 + cmp al,0 + jz foundpersonal + cmp al,42 + jz foundpersonal + mov dx,offset cs:monitorfile2 + cmp al,2 + jz foundpersonal + +foundpersonal: call openfile + call readheader + mov bx,[es:di] + push bx + mov cl,4 + shr bx,cl + call allocatemem + mov textfile1,ax + mov ds,ax + pop cx + mov dx,0 + call readfromfile + call closefile + ret + + endp + + + + +Loadnews proc near ;textfile2 holds information + ;accessable by anyone + mov al,newsitem + mov dx,offset cs:monitorfile10 + cmp al,0 + jz foundnews + mov dx,offset cs:monitorfile11 + cmp al,1 + jz foundnews + mov dx,offset cs:monitorfile12 + cmp al,2 + jz foundnews + mov dx,offset cs:monitorfile13 +foundnews: call openfile + call readheader + mov bx,[es:di] + push bx + mov cl,4 + shr bx,cl + call allocatemem + mov textfile2,ax + mov ds,ax + pop cx + mov dx,0 + call readfromfile + call closefile + ret + + endp + + + + + + +Loadcart proc near + + call lookininterface + + mov dx,offset cs:monitorfile20 + cmp al,0 + jz gotcart + mov dx,offset cs:monitorfile21 + cmp al,1 + jz gotcart + mov dx,offset cs:monitorfile22 + cmp al,2 + jz gotcart + mov dx,offset cs:monitorfile23 + cmp al,3 + jz gotcart + mov dx,offset cs:monitorfile24 +gotcart: call openfile + call readheader + mov bx,[es:di] + push bx + mov cl,4 + shr bx,cl + call allocatemem + mov textfile3,ax + mov ds,ax + pop cx + mov dx,0 + call readfromfile + call closefile + ret + + endp + + + + + + +Lookininterface proc near + + mov al,"I" + mov ah,"N" + mov cl,"T" + mov ch,"F" + call findsetobject ;this bit searches set obs + ;until the interface is found + ;al holds object number + mov ah,1 ;ah holds type, 1=set object + call checkinside ;this searches for any extra + ;object inside the interface.. + cmp cl,numexobjects + jz emptyinterface + mov al,[es:bx+15] ;get the last letter of ID code + inc al + ret +emptyinterface: mov al,0 + ret + + endp + + + + + + + +Turnonpower proc near + + mov cx,3 +powerloop: push cx + call powerlighton + mov cx,30 + call hangon + call powerlightoff + mov cx,30 + call hangon + pop cx + loop powerloop + call powerlighton + ret + + endp + + + + + +Randomaccess proc near + +accessloop: push cx + call vsync + call vsync + call randomnum1 + and al,15 + cmp al,10 + jc off + call accesslighton + jmp chosenaccess +off: call accesslightoff +chosenaccess: pop cx + loop accessloop + call accesslightoff + ret + + endp + + + +Powerlighton proc near + + mov di,257+4 + mov bx,182 + mov ds,tempgraphics + mov al,6 + mov ah,0 + push di bx + call showframe + pop bx di + mov cl,12 + mov ch,8 + call multidump + ret + + endp + + + + +Powerlightoff proc near + + mov di,257+4 + mov bx,182 + mov ds,tempgraphics + mov al,5 + mov ah,0 + push di bx + call showframe + pop bx di + mov cl,12 + mov ch,8 + call multidump + ret + + endp + + + + +Accesslighton proc near + + mov di,74 + mov bx,182 + mov ds,tempgraphics + mov al,8 + mov ah,0 + push di bx + call showframe + pop bx di + mov cl,12 + mov ch,8 + call multidump + ret + + endp + + + + +Accesslightoff proc near + + mov di,74 + mov bx,182 + mov ds,tempgraphics + mov al,7 + mov ah,0 + push di bx + call showframe + pop bx di + mov cl,12 + mov ch,8 + call multidump + ret + + endp + + + + + +Locklighton proc near + + mov di,56 + mov bx,182 + mov ds,tempgraphics + mov al,10 + mov ah,0 + push di bx + call showframe + pop bx di + mov cl,12 + mov ch,8 + call multidump + ret + + endp + + + + +Locklightoff proc near + + mov di,56 + mov bx,182 + mov ds,tempgraphics + mov al,9 + mov ah,0 + push di bx + call showframe + pop bx di + mov cl,12 + mov ch,8 + call multidump + ret + + endp + + + + + + + + + + +Input proc near + + push cs + pop es + mov di,offset cs:inputline + mov cx,64 + mov al,0 + rep stosb + + mov curpos,0 + mov al,">" + mov di,monadx + mov bx,monady + mov ds,tempcharset + mov ah,0 + call printchar + mov di,monadx + mov bx,monady + mov cl,6 + mov ch,8 + call multidump + add monadx,6 + mov ax,monadx + mov curslocx,ax + mov ax,monady + mov curslocy,ax + +waitkey: call printcurs + call vsync + call delcurs + call readkey + mov al,currentkey + cmp al,0 + jz waitkey + cmp al,13 + jz endofinput + cmp al,8 + jnz notdel + cmp curpos,0 + jz waitkey + call delchar + jmp waitkey +notdel: cmp curpos,28 + jz waitkey + cmp currentkey,32 + jnz notleadingspace + cmp curpos,0 + jz waitkey +notleadingspace: call makecaps + push cs + pop es + mov si,curpos + add si,si + add si,offset cs:inputline + mov [es:si],al + + cmp al,"Z"+1 + jnc waitkey + + push ax es si + mov di,monadx + mov bx,monady + mov ds,mapstore + mov ax,curpos + xchg al,ah + mov si,ax + mov cl,8 + mov ch,8 + call multiget + pop si es ax + + push es si + mov di,monadx + mov bx,monady + mov ds,tempcharset + mov ah,0 + call printchar + pop si es + ;dec cx + mov [es:si+1],cl + mov ch,0 + add monadx,cx + inc curpos + add curslocx,cx + jmp waitkey + +endofinput: ret + + endp + + + + + + + + +Makecaps proc near + + cmp al,"a" + jc notupperc + sub al,32 +notupperc: ret + + endp + + + + + + + + + +Delchar proc near + + dec curpos + mov si,curpos + add si,si + push cs + pop es + add si,offset cs:inputline + mov byte ptr [es:si],0 + mov al,[es:si+1] + mov ah,0 + sub monadx,ax + sub curslocx,ax + mov di,monadx + mov bx,monady + mov ds,mapstore + mov ax,curpos + xchg al,ah + mov si,ax + mov cl,8 + mov ch,8 + call multiput + mov di,monadx + mov bx,monady + mov cl,al + mov ch,8 + call multidump + ret + + endp + + + + + + + +Execcommand proc near + + push cs + pop es + mov bx,offset cs:comlist + push cs + pop ds + mov si,offset cs:inputline + mov al,[si] + cmp al,0 + jnz notblankinp + call scrollmonitor + ret + +notblankinp: mov cl,0 +comloop: push bx si +comloop2: mov al,[si] + add si,2 + mov ah,[es:bx] + inc bx + cmp ah,32 + jz foundcom + cmp al,ah + jz comloop2 + pop si bx + add bx,10 + inc cl + cmp cl,6 + jnz comloop + call neterror + mov al,0 + ret +foundcom: pop si bx + cmp cl,1 + jz testcom + cmp cl,2 + jz directory + cmp cl,3 + jz accesscom + cmp cl,4 + jz signoncom + cmp cl,5 + jz keyscom + jmp quitcom + +directory: call dircom + mov al,0 + ret + +signoncom: call signon + mov al,0 + ret + +accesscom: call read + mov al,0 + ret + +keyscom: call showkeys + mov al,0 + ret + +testcom: mov al,6 + call monmessage + mov al,0 + ret + +quitcom: mov al,1 + ret + +comlist: db "EXIT " + db "HELP " + db "LIST " + db "READ " + db "LOGON " + db "KEYS " + +keys: db 1,0,"PUBLIC PUBLIC ",0 + db 0,0,"BLACKDRAGON RYAN ",0 + db 0,0,"HENDRIX LOUIS ",0 + db 0,0,"SEPTIMUS BECKETT ",0 + db 255,255 + +operand1: db " ",0 +rootdir: db 34,"ROOT ",0 +currentfile db 34," ",0 + + endp + + + + + + + +Neterror proc near + + mov al,5 + call monmessage + call scrollmonitor + ret + + endp + + + + + + + + + +Dircom proc near + + mov cx,30 + call randomaccess + call parser + cmp byte ptr [es:di+1],0 + jz dirroot + call dirfile + ret + +dirroot: mov logonum,0 + push cs + pop ds + mov si,offset cs:rootdir + inc si + push cs + pop es + mov di,offset cs:currentfile + inc di + mov cx,12 + rep movsb + call monitorlogo + call scrollmonitor + + mov al,9 + call monmessage + + mov es,textfile1 + call searchforfiles + mov es,textfile2 + call searchforfiles + mov es,textfile3 + call searchforfiles + + call scrollmonitor + ret + + endp + + + + + + +Searchforfiles proc near + + mov bx,textstart +directloop1: mov al,[es:bx] + inc bx + cmp al,"*" + jz endofdir + cmp al,34 + jnz directloop1 + call monprint + jmp directloop1 +endofdir: ret + + endp + + + + + + + + + + + + +Signon proc near + + call parser + inc di + push cs + pop ds + mov si,offset cs:keys + mov cx,4 +signonloop: push cx si di + add si,14 + mov cx,11 +signonloop2: lodsb + cmp al,32 + jz foundsign + call makecaps + mov ah,[es:di] + inc di + cmp al,ah + jnz nomatch + loop signonloop2 +nomatch: pop di si cx + add si,26 + loop signonloop + mov al,13 + call monmessage + ret + +foundsign: pop di si cx ;ds:si contains ad of key matched + mov bx,si + push ds + pop es ;now ds:si is in es:bx + + cmp byte ptr [es:bx],0 + jz notyetassigned + + mov al,17 + call monmessage + ret + +notyetassigned: push es bx + call scrollmonitor + mov al,15 + call monmessage + mov di,monadx + mov bx,monady + push di bx + call input + pop bx di + mov monadx,di + mov monady,bx + pop bx es + push es bx + + add bx,2 + push cs + pop ds + mov si,offset cs:inputline +checkpass: lodsw + mov ah,[es:bx] + inc bx + ;cmp al,0 + cmp ah,32 + jz passpassed + cmp al,ah + jz checkpass +passerror: pop bx es + call scrollmonitor + mov al,16 + call monmessage + ret + +passpassed: mov al,14 + call monmessage + pop bx es + push es bx + add bx,14 + call monprint + call scrollmonitor + pop bx es + mov byte ptr [es:bx],1 + ret + + endp + + + + + + + +Showkeys proc near + + mov cx,10 + call randomaccess + call scrollmonitor + mov al,18 + call monmessage + + push cs + pop es + mov bx,offset cs:keys + mov cx,4 +keysloop: push cx bx + cmp byte ptr [es:bx],0 + jz notheld + add bx,14 + call monprint +notheld: pop bx cx + add bx,26 + loop keysloop + call scrollmonitor + ret + + endp + + + + + + + + + + + +Read proc near + + mov cx,40 + call randomaccess + call parser + cmp byte ptr [es:di+1],0 + jnz okcom + call neterror + ret +okcom: push cs + pop es + mov di,offset cs:currentfile + mov ax,textfile1 + mov monsource,ax + mov ds,ax + mov si,textstart + call searchforstring + cmp al,0 + jz foundfile2 + mov ax,textfile2 + mov monsource,ax + mov ds,ax + mov si,textstart + call searchforstring + cmp al,0 + jz foundfile2 + mov ax,textfile3 + mov monsource,ax + mov ds,ax + mov si,textstart + call searchforstring + cmp al,0 + jz foundfile2 + mov al,7 + call monmessage + ret +foundfile2: call getkeyandlogo + cmp al,0 + jz keyok1 + ret +keyok1: push cs + pop es + mov di,offset cs:operand1 + mov ds,monsource + call searchforstring + cmp al,0 + jz findtopictext + mov al,oldlogonum + mov logonum,al + mov al,11 + call monmessage + ret + +findtopictext: inc bx + push es bx + call monitorlogo + call scrollmonitor + pop bx es +moretopic: call monprint + mov al,[es:bx] + cmp al,34 + jz endoftopic + cmp al,"=" + jz endoftopic + cmp al,"*" + jz endoftopic + push es bx + call processtrigger + mov cx,24 + call randomaccess + pop bx es + jmp moretopic + +endoftopic: call scrollmonitor + ret + + endp + + + + + + + + + +Dirfile proc near + + mov al,34 + mov [es:di],al + push es di ;save start point held in es:di + mov ds,textfile1 + mov si,textstart + call searchforstring + cmp al,0 + jz foundfile + pop di es + push es di + mov ds,textfile2 + mov si,textstart + call searchforstring + cmp al,0 + jz foundfile + pop di es + push es di + mov ds,textfile3 + mov si,textstart + call searchforstring + cmp al,0 + jz foundfile + + pop di es + mov al,7 + call monmessage + ret + +foundfile: pop ax ax ;discard old values of es:di + call getkeyandlogo + cmp al,0 + jz keyok2 + ret + +keyok2: push es bx + push cs + pop ds + mov si,offset cs:operand1+1 + push cs + pop es + mov di,offset cs:currentfile+1 + mov cx,12 + rep movsb + call monitorlogo + call scrollmonitor + mov al,10 + call monmessage + pop bx es + + +directloop2: mov al,[es:bx] + inc bx + cmp al,34 + jz endofdir2 + cmp al,"*" + jz endofdir2 + cmp al,"=" + jnz directloop2 + call monprint + jmp directloop2 + +endofdir2: call scrollmonitor + ret + + endp + + + + + + +Getkeyandlogo proc near + + inc bx + mov al,[es:bx] + sub al,48 + mov newlogonum,al + add bx,2 + mov al,[es:bx] + sub al,48 + mov keynum,al + inc bx + push es bx + mov al,keynum + mov ah,0 + mov cx,26 + mul cx + push cs + pop es + mov bx,offset cs:keys + add bx,ax + mov al,[es:bx] + cmp al,1 + jz keyok + push bx es + mov al,12 + call monmessage + pop es bx + add bx,14 + call monprint + call scrollmonitor + pop bx es + mov al,1 + ret + +keyok: pop bx es + mov al,newlogonum + mov logonum,al + mov al,0 + ret + + endp + + + + + + + + + +Searchforstring proc near ;finds string at es:di in + ;text at ds:si + + mov dl,[es:di] ;needs to know first character + ;if it's an equals then we must + ;stop at the next quotation mark + mov cx,di ;need to remember starting point + +restartlook: mov di,cx + mov bx,si + + mov dh,0 ;dh holds count of brackets + ;brackets are either " or = +keeplooking: lodsb + call makecaps + cmp al,"*" + jz notfound + cmp dl,"=" + jnz nofindingtopic ;are we looking for a topic? + cmp al,34 ;if YES, check we haven't reached + jz notfound ;the end of this file. +nofindingtopic: mov ah,[es:di] + cmp al,dl ;all searches bracketed by same thing + jnz notbracket + inc dh + cmp dh,2 + jz complete +notbracket: cmp al,ah + jnz restartlook + inc di + jmp keeplooking +complete: push ds ;es:bx returns found string + pop es + mov al,0 + mov bx,si + ret +notfound: mov al,1 + ret + + endp + + + + + + +Parser proc near + + push cs + pop es + mov di,offset cs:operand1 + mov cx,13 + mov al,0 + rep stosb + + mov di,offset cs:operand1 + mov al,"=" + stosb + + push cs + pop ds + mov si,offset cs:inputline + +notspace1: lodsw + cmp al,32 + jz stillspace1 + cmp al,0 + jnz notspace1 + jmp finishpars + +stillspace1: lodsw + cmp al,32 + jz stillspace1 + +copyin1: stosb + lodsw + cmp al,0 + jz finishpars + cmp al,32 + jnz copyin1 + +finishpars: mov di,offset cs:operand1 + ret + + endp + + + + + + +Scrollmonitor proc near + + push ax bx cx dx di si es ds + + call printlogo + mov di,monadx + mov bx,monady + call printundermon + mov ax,monady + call worktoscreen + mov al,25 + call playchannel1 + + pop ds es si di dx cx bx ax + ret + + endp + + + + + + + + + + + + + + +Lockmon proc near + + cmp lasthardkey,57 + jnz notlock + call locklighton +lockloop: cmp lasthardkey,57 + jz lockloop + call locklightoff +notlock: ret + + endp + + + + + +Monitorlogo proc near + + mov al,logonum + cmp al,oldlogonum + jz notnewlogo + mov oldlogonum,al + ;call fadedownmon + call printlogo + call printundermon + call worktoscreen + call printlogo + ;call fadeupmon + call printlogo + mov al,26 + call playchannel1 + mov cx,20 + call randomaccess + ret +notnewlogo: call printlogo + ret + + endp + + + + + + + + +Printlogo proc near + + mov di,56 + mov bx,32 + mov ds,tempgraphics + mov al,0 + mov ah,0 + call showframe + call showcurrentfile + ret + + endp + + + + + + +Showcurrentfile proc near + + mov di,178 ;99 + mov bx,37 + mov si,offset cs:currentfile+1 +curfileloop: mov al,[cs:si] + cmp al,0 + jz finishfile + inc si + push si + if foreign + call modifychar + endif + mov ds,tempcharset + mov ah,0 + call printchar + pop si + jmp curfileloop +finishfile: ret + + endp + + + + + + + + + +Monmessage proc near + + mov es,textfile1 + mov bx,textstart + mov cl,al + mov ch,0 +monmessageloop: mov al,[es:bx] + inc bx + cmp al,"+" + jnz monmessageloop + loop monmessageloop + call monprint + ret + + endp + + + + + + +Processtrigger proc near + + cmp lasttrigger,"1" + jnz notfirsttrigger + mov al,8 + call setlocation + mov al,45 + call triggermessage + ret + +notfirsttrigger: cmp lasttrigger,"2" + jnz notsecondtrigger + mov al,9 + call setlocation + mov al,55 + call triggermessage + ret + +notsecondtrigger: cmp lasttrigger,"3" + jnz notthirdtrigger + mov al,2 + call setlocation + mov al,59 + call triggermessage + +notthirdtrigger: ret + + endp + + + + +Triggermessage proc near + + push ax + mov di,174 + mov bx,153 + mov cl,200 + mov ch,63 + mov ds,mapstore + mov si,0 + call multiget + pop ax + call findpuztext + mov di,174 + mov bx,156 + mov dl,141 + mov ah,16 + call printdirect + mov cx,140 + call hangon + call worktoscreen + mov cx,340 + call hangon + mov di,174 + mov bx,153 + mov cl,200 + mov ch,63 + mov ds,mapstore + mov si,0 + call multiput + call worktoscreen + mov lasttrigger,0 + ret + + endp + + + + + + +Printcurs proc near + + push si di ds dx bx es + mov di,curslocx + mov bx,curslocy + mov cl,6 + mov ch,8 + if foreign + sub bx,3 + mov ch,11 + endif + mov ds,buffers + mov si,textunder + push di bx + call multiget + pop bx di + + push bx di + inc maintimer + mov ax,maintimer + and al,16 + jnz flashcurs + mov al,"/" + sub al,32 + mov ah,0 + mov ds,tempcharset + call showframe + +flashcurs: pop di bx + sub di,6 + mov cl,12 + if foreign + mov ch,11 + else + mov ch,8 + endif + call multidump + + pop es bx dx ds di si + ret + + endp + + + + + + +Delcurs proc near + + push es bx di ds dx si + mov di,curslocx + mov bx,curslocy + mov cl,6 + mov ch,8 + if foreign + sub bx,3 + mov ch,11 + endif + push di bx cx + mov ds,buffers + mov si,textunder + call multiput + pop cx bx di + call multidump +finishcurdel: + pop si dx ds di bx es + ret + + endp + + + + + +
\ No newline at end of file |