..LIB = 1 ..L$$ = 1 .INCLUDE "QF.MAC" ; .PSECT .ASM ; .INCLUDE "QF.MAC" .mcall .ttyout .ttyin .print .macro crypt str .nchr n, .byte n .IRPC NUM, .BYTE ''NUM - n n = ''NUM .endm .endm .macro strmenu str .nchr n, .byte n .ascii `str` .endm .LASM PUTCH .LASM PRINT ASCIZ. .LASM EXTRB BYTE2. .LASM PUSB BYTE. .LASM PUSHB var. ;.LASM POPB var. ;.LASM ADDCB BYTE. ;.LASM PUSHCB BYTE. ;.LASM PUSHCW WORD. ;.LASM PUSHB BYTE. ;.LASM PUSHW BYTE. ;.LASM POPW RYTE. .LCOD EXTR0 .LCOD TTYOUT BYTE. Char baseY,0 Char baseX,0 char curdev,0 char operat,0 .asm putdup byte. movb (r5)+,r1 movb (r5)+,r0 1$: .ttyout sob r1,1$ END. .asm colon byte. movb (r5)+,r1 movb (r5)+,vc$ch mov #vc$ch,r0 1$: .print sob r1,1$ jmp (r4) .psect .strn vc$ch: .byte 0,32,35,200 .restore .asm addBS movb (r3)+,r0 movb (r3),r1 add r1,r0 movb r0,(r3) END. .COD CURSOR BYTE. PRINT .BYTE 33,'Y,200 pushb baseY EXTR0 addbs pusb 40 addbs PUTCH pushb baseX EXTR0 addbs pusb 40 addbs PUTCH END. .cod curoff print .byte esc,247,60,200 end. .asm curon .print #old$c end. .asm decod movb (r5)+,r1 mov r1,r4 1$: movb (r5)+,r0 add r4,r0 mov r0,r4 .ttyout sob r1,1$ jmp entry .restore isasm = true .asm p$par byte. movb curdev,r1 ; Выбранное устройство mul #recsiz,r1 add #pardev,r1 ; Указатель на структуру movb (r5)+,r0 ; Смещение к полю add r0,r1 ; Указатель на параметр movb (r1),r0 movb (r5)+,r4 call @lmas$(r4) jmp entry .restore isasm = true ; END. .asm do byte. movb (r5)+,r0 mov r5,-(sp) mov r0,-(sp) END. .asm enddo dec (sp) beq 2$ mov 2(sp),r5 jmp (r4) 2$: cmp (sp)+,(sp)+ END. .cod clr$R cursor <7.,30.> putdup <43.,265> cursor <16.,30.> putdup <43.,265> cursor <8.,29.> do 8. print .byte 267,esc,'K,35,32,200 enddo cursor <8.,74.> colon <8.,244> cursor <7.,48.> ttyout '║ end. .cod clr$D cursor <19.,5.> do 4. print .byte esc,'K,35,200 enddo cursor <19.,74.> colon <4.,244> end. .cod clr$M cursor <17.,5.> print .byte esc,'K,200 cursor <17.,74.> ttyout 244 end. .psect .strn one$: .ascii /Низ/<200> two$: .ascii /Обе/<200> .psect .data lmas$: .word putint,p$side,prisn .psect .prog p$side: mov #one$,r1 tstb r0 beq prir1 mov #two$,r1 prir1:: .print r1 return prisn: movb (r5)+,r4 1$: movb (r1)+,r0 beq 2$ .ttyout sob r4,1$ return 2$: trap 5 ; .ttyout #40 .word 40 sob r4,2$ return .cod invers print .byte esc,243,200 END. .cod noinvers print .byte esc,277,243,200 END. .cod subscr print .byte esc,244,200 END. .cod nosubscr print .byte esc,277,244,200 END. .cod show ; ╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣ cursor <2,9.> .quit ; bicb #^c3,curdev clr r2 2$: movb #$noinvers,1$ movb r2,-(r3) ; Номер привода cmpb curdev,r2 bne 3$ movb #$invers,1$ 3$: .forth 1$: .blkb 1 ; inverse или noinverse print < MZ> ; pusb '0 addbs putch ttyout ': noinvers putdup <4,40> .quit inc r2 cmpb r2,#4 ; 4 - кол. приводов blt 2$ .forth cursor <2,68.> p$par cursor <3,69.> p$par cursor <4,69.> p$par cursor <5,69.> p$par cursor <6,28.> ; putdup ; cursor <6,28.> p$par cursor <4,28.> ; putdup ; cursor <4,28.> p$par cursor <5,28.> ; putdup ; cursor <5,28.> p$par END. ;╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣╣ .psect .prog L$proc:: tst (pc)+ l..r:: .word -1 beq .1 decb curdev br .0 R$proc:: tst l..r beq .1 incb curdev .0: bicb #^c3,curdev .forth show .quit .1: return .cod author cursor <13.,44.> subscr decod crypt nosubscr cursor <9.,43.> decod crypt cursor <11.,38.> ; cursor <11.,41.> decod crypt <(c) F-Bit Ltd. 1991, 1993, 1994> cursor <15.,46.> decod crypt <(095) 535-22-22> end. .cod list$D clr$D cursor <19.,6.> ttyout 200 print .byte 40,201,200 cursor <19.,15.> print <Выбор пункта меню> cursor <20.,6.> print .byte 202,40,203,200 cursor <20.,15.> print <Выбор накопителя> cursor <21.,6.> ttyout 224 cursor <21.,15.> print <Выполнение текущего пункта> cursor <22.,6.> print <Упр/W> cursor <22.,15.> print <Обновление экрана> cursor <19.,13.> colon <4,'-> end. ramker:: mov #buf$wr,r3 trap 0 .forth print .byte 17,esc,'E,14,200 curoff cursor <0,4> ttyout 250 putdup <69.,272> ttyout 277 cursor <1,74.> colon <22.,244> cursor <1,4> colon <22.,244> ttyout 266 putdup <69.,272> ttyout 274 cursor <7.,4.> ; Средняя левая горизонталь ttyout 242 putdup <69.,265> ttyout 240 cursor <16.,4.> ; 1 Нижняя горизонталь ttyout 242 putdup <69.,265> ttyout 240 cursor <18.,4.> ; 2 Нижняя горизонталь ttyout 242 putdup <69.,265> ttyout 240 cursor <0,48.> colon <1,270> colon <6.,267> ttyout 241 cursor <3,4.> ; Верхняя левая горизонталь ttyout 242 putdup <43.,265> ttyout 256 cursor <4.,10.> print <Имя тома> cursor <5.,10.> print <Владелец> cursor <6.,10.> print <Диск/файл> cursor <4.,23.> colon <3,':> cursor <2,52.> print <Стороны> cursor <3,52.> print <Дорожек> cursor <4,52.> print <Тип разметки> cursor <5.,52.> print <Сегментов> cursor <2,65.> colon <4,':> author show cursor <7.,29.> colon <1,'╚> colon <8.,'╥> ttyout '║ list$D .quit return strmen:: ; Печать N-й строки из меню trap 0 ; r2 -> меню, r0 - N movb (r2)+,r1 add r0,r1 movb r1,$Y ; Координата Y movb (r2)+,$X ; Координата X movb (r2)+,$N ; Длина строк m$len bicb (r2)+,(r2) ; m$mask & m$choic - нормировка movb #$noinverse,in$s cmpb r0,(r2)+ bne 1$ movb #$inverse,in$s 1$: asl r0 11$: dec r0 bmi 3$ 2$: bitb #177,(r2)+ bne 2$ br 11$ 3$: .forth cursor $Y: .blkb 1 $X: .blkb 1 in$s: .blkb 1 ttyout 40 .quit .print r2 2$: decb $N bitb #177,(r2)+ bne 2$ mov r2,r1 3$: bitb #177,(r1)+ bne 3$ sub r2,r1 sub #69.+<5*2>,r1 ; Длина поля вывода neg r1 asr r1 ; X position movb r1,$O .forth $N = :.+1 putdup <1.,40> noinverse .quit cmpb in$s,#$inverse bne 1$ .forth cursor <17.,5.> print .byte esc,'K,200 cursor <17.,74.> ttyout 244 $O = :.+2 cursor <17.,5.> .quit .print r2 1$: return primen:: ; Распечатка меню trap 0 mov r0,r2 ; Указатель на меню add #m$mask,r0 movb (r0)+,r4 ; N последней строки movb (r0),r5 ; Альтернатива com r4 ; com + 1 10$: mov r4,r0 call strmen dec r4 bge 10$ ; .forth ; list$D ; .quit ccc return U$proc:: mov (pc)+,r1 decb (r4) br ud$p$ D$proc:: mov (pc)+,r1 incb (r4) ud$p$: mov r5,r4 add #m$choic,r4 movb (r4),r0 mov r1,(pc) .blkw 1 mov r5,r2 call strmen movb (r4),r0 jmp strmen .end