; labelib.asm 2/22/2012 dwg - label library function implementation ; label.asm 2/11/2012 dwg - make ident compliant ; label.asm 2/11/2012 dwg - begin 1.6 enhancements ; label.asm 2/04/2012 dwg - use new macros for benefits ; label.asm 1/20/2012 dwg - label a drive or slice ; ; Copyright (C) 2011-2012 Douglas Goodall Licensed under GPL Ver 3. ; ; This file is part of NuBiosDWG and is free software: you can ; redistribute it and/or modify it under the terms of the GNU ; General Public License as published by the Free Software Foundation, ; either version 3 of the License, or (at your option) any later version. ; This file is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; You should have received a copy of the GNU General Public License ; along with it. If not, see . ; maclib portab maclib globals maclib cpmbios maclib cpmbdos maclib bioshdr maclib hardware maclib z80 maclib memory ; maclib applvers ; maclib cpmappl maclib printers maclib metadata ; maclib banner maclib stdlib ; maclib ffhaslu ; maclib identity cseg public x$label x$label: 0000 79 mov a,c 0001 323E01 sta drive$num get$off 0004+F5 PUSH PSW 0005+C5 PUSH B 0006+D5 PUSH D 0007+CD1BE6 CALL BISELDSK 000A+110A00 LXI D,DPB$OFS 000D+19 DAD D 000E+5E MOV E,M 000F+23 INX H 0010+56 MOV D,M 0011+EB XCHG 0012+110D00 LXI D,OFF$OFS 0015+19 DAD D 0016+5E MOV E,M 0017+23 INX H 0018+56 MOV D,M 0019+EB XCHG 001A+D1 POP D 001B+C1 POP B 001C+F1 POP PSW 001D 7C mov a,h 001E B5 ora l 001F C26E00 jnz off$ok printf 'Sorry, you can only label drives with reserved tracks' 0022+F5 PUSH PSW 0023+C5 PUSH B 0024+D5 PUSH D 0025+E5 PUSH H 0026+0E09 MVI C,PRINTSTR 0028+113500 LXI D,??0002 002B+CD0500 CALL BDOS 002E+E1 POP H 002F+D1 POP D 0030+C1 POP B 0031+F1 POP PSW 0032+C36B00 JMP ??0001 0035+536F727279??0002 DB 'Sorry, you can only label drives with reserved tracks' 006A+24 DB '$' 006B C3A901 jmp main$exit off$ok: 006E 3A3E01 lda drive$num 0071 4F mov c,a 0072 215101 lxi h,buffer 0075 CD0000 call x$g$meta 0078 3A80004F lda DEFBUF ! mov c,a 007C FE00C2FA00 cpi 0 ! jnz x$lab2 ; ; Interactive label functionality here... prompt: ; signature exists so label should be displayable print old$lbl 0081+F5 PUSH PSW 0082+C5 PUSH B 0083+D5 PUSH D 0084+E5 PUSH H 0085+0E09 MVI C,PRINTSTR 0087+11DE00 LXI D,OLD$LBL 008A+CD0500 CALL BDOS 008D+E1 POP H 008E+D1 POP D 008F+C1 POP B 0090+F1 POP PSW ; print label 0091 215101 lxi h,buffer 0094 116700 lxi d,meta$label 0097 19 dad d 0098 E5 push h 0099 D1 pop d 009A 0E09 mvi c,PRINTSTR 009C CD0500 call BDOS print crlf 009F+F5 PUSH PSW 00A0+C5 PUSH B 00A1+D5 PUSH D 00A2+E5 PUSH H 00A3+0E09 MVI C,PRINTSTR 00A5+113B01 LXI D,CRLF 00A8+CD0500 CALL BDOS 00AB+E1 POP H 00AC+D1 POP D 00AD+C1 POP B 00AE+F1 POP PSW print new$lbl 00AF+F5 PUSH PSW 00B0+C5 PUSH B 00B1+D5 PUSH D 00B2+E5 PUSH H 00B3+0E09 MVI C,PRINTSTR 00B5+11EA00 LXI D,NEW$LBL 00B8+CD0500 CALL BDOS 00BB+E1 POP H 00BC+D1 POP D 00BD+C1 POP B 00BE+F1 POP PSW 00BF 0E0A mvi c,READ$CON$BUF 00C1 113F01 lxi d,rcbuff 00C4 CD0500 call BDOS 00C7 3A4001 lda rclen 00CA FE00 cpi 0 00CC C2D200 jnz length$ok 00CF C3A901 jmp main$exit length$ok: 00D2 3C inr a 00D3 328000 sta DEFBUF 00D6 3E20 mvi a,' ' 00D8 328100 sta DEFBUF+1 00DB 4F mov c,a 00DC 0600 mvi b,0 00DE 214101 lxi h,rcdata 00E1 118200 lxi d,DEFBUF+2 ldir 00E4+EDB0 DB 0EDH,0B0H print crlf 00E6+F5 PUSH PSW 00E7+C5 PUSH B 00E8+D5 PUSH D 00E9+E5 PUSH H 00EA+0E09 MVI C,PRINTSTR 00EC+113B01 LXI D,CRLF 00EF+CD0500 CALL BDOS 00F2+E1 POP H 00F3+D1 POP D 00F4+C1 POP B 00F5+F1 POP PSW 00F6 3A3E01 lda drive$num 00F9 4F mov c,a ; fall through to code below ;;; not$interactive: public x$lab2 x$lab2: ; This routine can be used interactively or non-interactively. ; You can set up the default buffer at 80h and call x$lab2, ; or you can call x$label and it will interactively redo the label. ; 00FA 79 mov a,c 00FB 323E01 sta drive$num 00FE 215101 lxi h,buffer 0101 116700 lxi d,meta$label 0104 19 dad d 0105 3E20 mvi a,' ' 0107 011000 lxi b,meta$label$len ; max length of label 010A CD0000 call x$memset 010D 3A8000 lda DEFBUF ; pick up length of command tail 0110 FE12 cpi 18 ; compare with max size of label 0112 DA1A01 jc lenok ; jump if size is within limits 0115 3E11 mvi a,17 ; specify maximum size 0117 328000 sta DEFBUF ; and poke into default buffer size byte 011A 3A8000 lenok: lda DEFBUF ; pick up command tail size byte 011D 3D dcr a ; decrement 011E 4F mov c,a ; move to c reg as counter 011F 0600 mvi b,0 0121 215101 lxi h,buffer 0124 116700 lxi d,meta$label 0127 19 dad d 0128 EB xchg 0129 218200 lxi h,DEFBUF+2 ; set source index for move ldir 012C+EDB0 DB 0EDH,0B0H 012E 215101 lxi h,buffer 0131 117700 lxi d,meta$term 0134 19 dad d 0135 3E24 mvi a,'$' 0137 77 mov m,a 0138 3A3E01 lda drive$num 013B 4F mov c,a 013C 215101 lxi h,buffer 013F CD0000 call x$u$meta 0142 FE01 cpi FAILURE 0144 CA6001 jz write$prot$err 0147 215101 lxi h,buffer 014A CD0000 call x$p$meta print suc$msg 014D+F5 PUSH PSW 014E+C5 PUSH B 014F+D5 PUSH D 0150+E5 PUSH H 0151+0E09 MVI C,PRINTSTR 0153+110000 LXI D,SUC$MSG 0156+CD0500 CALL BDOS 0159+E1 POP H 015A+D1 POP D 015B+C1 POP B 015C+F1 POP PSW 015D C3A901 jmp main$exit write$prot$err: print wr$prot$msg 0160+F5 PUSH PSW 0161+C5 PUSH B 0162+D5 PUSH D 0163+E5 PUSH H 0164+0E09 MVI C,PRINTSTR 0166+115C00 LXI D,WR$PROT$MSG 0169+CD0500 CALL BDOS 016C+E1 POP H 016D+D1 POP D 016E+C1 POP B 016F+F1 POP PSW 0170 C3A901 jmp main$exit readerr: print rd$err$msg 0173+F5 PUSH PSW 0174+C5 PUSH B 0175+D5 PUSH D 0176+E5 PUSH H 0177+0E09 MVI C,PRINTSTR 0179+111B00 LXI D,RD$ERR$MSG 017C+CD0500 CALL BDOS 017F+E1 POP H 0180+D1 POP D 0181+C1 POP B 0182+F1 POP PSW 0183 C3A901 jmp main$exit writeerr: print wr$err$msg 0186+F5 PUSH PSW 0187+C5 PUSH B 0188+D5 PUSH D 0189+E5 PUSH H 018A+0E09 MVI C,PRINTSTR 018C+113B00 LXI D,WR$ERR$MSG 018F+CD0500 CALL BDOS 0192+E1 POP H 0193+D1 POP D 0194+C1 POP B 0195+F1 POP PSW 0196 C3A901 jmp main$exit dontboth: print usage$msg 0199+F5 PUSH PSW 019A+C5 PUSH B 019B+D5 PUSH D 019C+E5 PUSH H 019D+0E09 MVI C,PRINTSTR 019F+117F00 LXI D,USAGE$MSG 01A2+CD0500 CALL BDOS 01A5+E1 POP H 01A6+D1 POP D 01A7+C1 POP B 01A8+F1 POP PSW main$exit: 01A9 C9 ret dseg 0000 4C6162656Csuc$msg db 'Label Written Successfully$' 001B 536F727279rd$err$msg db 'Sorry, cannot read label sector$' 003B 536F727279wr$err$msg db 'Sorry, cannot write label sector$' 005C 536F727279wr$prot$msg db 'Sorry, metadata is write protected$' 007F 7573616765usage$msg db 'usage - label