LS-DOS 6.3.1 - LBREMOVE Assembly Listing (HTML format version)

[Copyright 1999,2002 Frank Durda IV, All Rights Reserved.
Mirroring of any material on this page in any form is expressly prohibited.
The official web site for this material is:  http://nemesis.lonestar.org
Contact this address for use clearances: clearance at nemesis.lonestar.org
Comments and queries to this address: web_software_2011 at nemesis.lonestar.org]
MISOSYS EDAS-4.3 04/11/99 02:14:23 REMOVE - LS-DOS 6.2          Page 00001 

              00001 ;LBREMOVE/ASM - REMOVE command
              00003 ;
0000          00004 *GET    BUILDVER:3
              00005 ;
              00006 ;       Buildver/asm is a bit of a kludge since not all utilities can load
              00007 ;       equates from LDOS60 and still compile.  LOWCORE and everybody else
              00008 ;       relies on this setting, and it eventually ends up in LDOS60/EQU
              00009 ;       for programs that can use that.
              00010 ;
FFFF          00011 @BLD631         EQU     -1      ;<631>Build 631 distribution (LEVEL 1B)
              00012 ;       These switches activate patches made since the 1B release.
              00013 ;       It is important that all earlier patches be enabled when a higher
              00014 ;       patch is enabled.
              00015 ;       Patches C thru F were published in TMQ IV.iv, page 32 (NOTE: the
              00016 ;       patch addresses listed for SPOOL in SPOOL1/FIX are 19H high.)
FFFF          00017 @BLD631C        EQU     -1      ;<631>Apply 1C patches (SETKI)
FFFF          00018 @BLD631D        EQU     -1      ;<631>Apply 1D patches (DIR)
FFFF          00019 @BLD631E        EQU     -1      ;<631>Apply 1E patches (DIR & MEMDISK/DCT)
FFFF          00020 @BLD631F        EQU     -1      ;<631>Apply 1F patches (SPOOL)
              00021 ;       Patches G and H were published in TMQ V.i, pages 10 and 18/19.
FFFF          00022 @BLD631G        EQU     -1      ;<631>Apply 1G patches (//KEYIN,DIR,DO *)
FFFF          00023 @BLD631H        EQU     -1      ;<631>Apply 1H patches (MEMORY)
              00024 ;
              00025 ;End of BUILDVER/ASM
0000          00026 *GET    SVCMAC:3                ;SVC Macro equivalents
              00027 ;SVCMAC/ASM - LS-DOS Version VI
              00028 *LIST   OFF
              00420 *LIST   ON
0000          00422 *GET    VALUES:3                ;Misc. equates
              00423 ;VALUES/ASM - Version 6
              00424 *LIST OFF
              00451 *LIST ON
              00452 ;
2400          00453         ORG     2400H
              00454 ;
              00455 REMOVE
              00456         IF      @BLD631
2400 ED731024 00457         LD      (SAVESP+1),SP   ;<631>Save Stack
              00458         ENDIF
2404          00459         @@CKBRKC                ;Break key down?
2404+3E6A     00460         LD      A,106
2406+EF       00461         RST     40
              00462         IF      @BLD631
2407 200D     00463         JR      NZ,BRKABT       ;<631>else abort
              00464         ELSE
              00465         JR      Z,BEGINA        ;Ok if not
              00466         LD      HL,-1           ;  else abort
              00467         RET
              00468         ENDIF
              00469 ;
              00470 BEGINA
              00471         IF      @BLD631
              00472         ELSE
              00473         LD      (SAVESP+1),SP   ;Save Stack
              00474         ENDIF
2409 CD2E24   00475         CALL    REMOV           ;Do the removing
              00476         IF      @BLD631
              00477         ELSE
              00478         JR      EXIT
              00479 ;
              00480 ;       Exit Routine - Clear any  & return
              00481 ;
              00482 BRKABT
              00483         LD      HL,-1
              00484         JR      SAVESP          ;Abort with error
              00485         ENDIF
              00486 ;
240C 210000   00487 EXIT    LD      HL,0            ;Set retcod if exiting
240F 310000   00488 SAVESP  LD      SP,$-$          ;P/u stack
2412          00489         @@CKBRKC                ;Clear  if entered
2412+3E6A     00490         LD      A,106
2414+EF       00491         RST     40
2415 C9       00492         RET                     ;  and Return
              00493         IF      @BLD631
              00494 ;
              00495 ;       Exit Routine - Clear any  & return
              00496 ;
              00497 BRKABT                          ;<631>
2416 21FFFF   00498         LD      HL,-1           ;<631>
2419 18F4     00499         JR      SAVESP          ;<631>Abort with error
              00500         ENDIF
              00501 ;
              00502 ;       Special Message Exit
              00503 ;
241B 212325   00504 SPCREQ  LD      HL,SPCREQ$
241E          00505         @@LOGOT
              00506         IFEQ    00H,1
              00507         LD      HL,
              00508         ENDIF
241E+3E0C     00509         LD      A,12
2420+EF       00510         RST     40
              00511         IF      @BLD631
2421 18F3     00512 ERREXIT JR      BRKABT          ;<631>Get stack & RET
              00513         ELSE
              00514 ERREXIT LD      HL,-1
              00515         JR      SAVESP          ;Get stack & RET
              00516         ENDIF
              00517 ;
              00518 ;       I/O Error Exit
              00519 ;
2423 6F       00520 IOERR   LD      L,A             ;Error # to HL
2424 2600     00521         LD      H,0
2426 F6C0     00522         OR      0C0H            ;Abbrev, return
2428 4F       00523         LD      C,A             ;Error code to reg C
2429          00524         @@ERROR
2429+3E1A     00525         LD      A,26
242B+EF       00526         RST     40
242C 18E1     00527         JR      SAVESP          ;P/u stack & return
              00528 ;
              00529 ;       REMOV - Remove file(s) or device(s)
              00530 ;
242E E5       00531 REMOV   PUSH    HL              ;Save INBUF$ pointer
242F AF       00532 REMOV0  XOR     A               ;Set Z-flag for loop
2430 E1       00533 REMOV1  POP     HL
2431 C22324   00534         JP      NZ,IOERR
              00535 ;
              00536 ;       Skip leading spaces - exit on terminator
              00537 ;
2434          00538         @@CKBRKC                ;Check for break
2434+3E6A     00539         LD      A,106
2436+EF       00540         RST     40
2437 20DD     00541         JR      NZ,BRKABT       ;  abort if so
              00542 ;
2439 2B       00543         DEC     HL
243A 23       00544 REMOV2  INC     HL              ;Skip past spaces
243B 7E       00545         LD      A,(HL)
243C FE20     00546         CP      ' '
243E 28FA     00547         JR      Z,REMOV2
2440 D8       00548         RET     C               ;Return on terminator
              00549 ;
              00550 ;       Hit a non-space char - is this a filespec ?
              00551 ;
2441 115225   00552 REMOV3  LD      DE,FCB          ;Fetch the filespec
2444          00553         @@FSPEC
2444+3E4E     00554         LD      A,78
2446+EF       00555         RST     40
2447 C21B24   00556         JP      NZ,SPCREQ       ;Jump on spec error
244A E5       00557         PUSH    HL              ;Save INBUF$ pointer
              00558 ;
              00559 ;       Transfer Filespec to buff without password
              00560 ;
244B D5       00561         PUSH    DE              ;Save FCB ptr
244C EB       00562         EX      DE,HL           ;Pt HL => FCB
244D 114325   00563         LD      DE,FILESPC      ;DE => Filespec
2450 CD0225   00564         CALL    MOVSPC          ;Move filespec
2453 3E0D     00565         LD      A,CR            ;End spec with C/R
2455 12       00566         LD      (DE),A
2456 D1       00567         POP     DE              ;Recover FCB
              00568 ;
              00569 ;       Are we Removing a Device ?
              00570 ;
2457 1A       00571         LD      A,(DE)          ;Is it a device?
2458 FE2A     00572         CP      '*'
245A 2843     00573         JR      Z,RMVDVC
              00574 ;
              00575 ;       Removing a File - Does it exist ?
              00576 ;
245C          00577         @@OPEN                  ;Open the file
245C+3E3B     00578         LD      A,59
245E+EF       00579         RST     40
245F 2804     00580         JR      Z,GOODOPN       ;Z - it does exist
2461 FE2A     00581         CP      42              ;LRL Open Fault ?
2463 20CB     00582         JR      NZ,REMOV1       ;No - abort
              00583 ;
              00584 ;       Successful Open - Can we Remove the file ?
              00585 ;
2465 3A5325   00586 GOODOPN LD      A,(FCB+1)       ;P/u access level
2468 E607     00587         AND     7
246A FE02     00588         CP      2               ;REMOVE access ?
246C 3E25     00589         LD      A,37            ;No - "Illegal access
246E D22324   00590         JP      NC,IOERR        ;  attempted to ..."
              00591 ;
              00592 ;       Is there a drivespec in the filespec ?
              00593 ;
2471 214325   00594         LD      HL,FILESPC      ;HL => Filespec
2474 7E       00595 FLOOP   LD      A,(HL)          ;P/u char
2475 FE0E     00596         CP      CR+1            ;End of Filespec ?
2477 300E     00597         JR      NC,CHKDSPC
              00598 ;
              00599 ;       Drivespec wasn't specified - put it on
              00600 ;
2479 363A     00601         LD      (HL),':'        ;Append drivespec onto
247B 23       00602         INC     HL              ;  end of filespec
247C 3A5825   00603         LD      A,(FCB+6)       ;Xfer drive # to A
247F C630     00604         ADD     A,'0'           ;Convert to ASCII
2481 77       00605         LD      (HL),A
2482 23       00606         INC     HL              ;Bump
2483 360D     00607         LD      (HL),CR         ;End of filespec
2485 1805     00608         JR      SHOWFIL         ;Dsply name & remove it
              00609 ;
              00610 ;       Stop when ":" hit or terminator
              00611 ;
2487 FE3A     00612 CHKDSPC CP      ':'             ;Already have one ?
2489 23       00613         INC     HL
248A 20E8     00614         JR      NZ,FLOOP
              00615 ;
              00616 ;       Display "Removing Filespec" & remove it
              00617 ;
248C CD9424   00618 SHOWFIL CALL    SHOWIT          ;"Removing:"
248F          00619         @@REMOV                 ;Remove the file
248F+3E39     00620         LD      A,57
2491+EF       00621         RST     40
2492 189C     00622         JR      REMOV1          ;Loop for more
              00623 ;
              00624 ;       Display Filespec or Devspec
              00625 ;
2494 213925   00626 SHOWIT  LD      HL,SHOW$        ;Show what we are
2497 D5       00627         PUSH    DE              ;Save FCB ptr
2498          00628         @@DSPLY                 ;  removing
              00629         IFEQ    00H,1
              00630         LD      HL,
              00631         ENDIF
2498+3E0A     00632         LD      A,10
249A+EF       00633         RST     40
249B D1       00634         POP     DE
249C 2092     00635         JR      NZ,REMOV1       ;NZ - abort
249E C9       00636         RET                     ;  else RETurn Z
              00637 ;
              00638 ;       Routine to Remove a device
              00639 ;
249F D5       00640 RMVDVC  PUSH    DE              ;Xfer FCB ptr to IX
24A0 DDE1     00641         POP     IX
24A2 DD5E01   00642         LD      E,(IX+1)        ;P/u device name
24A5 DD5602   00643         LD      D,(IX+2)
              00644 ;
              00645 ;       Routine to find a device in the device tables
              00646 ;
24A8          00647         @@GTDCB                 ;Find this DCB
24A8+3E52     00648         LD      A,82
24AA+EF       00649         RST     40
24AB 2083     00650         JR      NZ,REMOV1       ;Abort if not found
              00651 ;
              00652 ;       Found device in tables, is it killable?
              00653 ;
24AD ED533725 00654 DEV4    LD      (RENDEV+1),DE   ;Try to rename it
24B1 E5       00655         PUSH    HL              ;Save address pointer
24B2 213625   00656         LD      HL,RENDEV       ;New & old names same
24B5 5D       00657         LD      E,L
24B6 54       00658         LD      D,H
24B7          00659         @@RENAM
24B7+3E38     00660         LD      A,56
24B9+EF       00661         RST     40
24BA E1       00662         POP     HL              ;Rcvr address pointer
24BB FE13     00663         CP      19              ;If not "illegal name"
24BD C23024   00664         JP      NZ,REMOV1       ;  error, is protected
              00665 ;
              00666 ;       Device not system device - is it in use?
              00667 ;
24C0 CB5E     00668 CKNILL  BIT     3,(HL)          ;Test NIL device
24C2 2006     00669         JR      NZ,REMOVIT      ;OK if NIL (not in use)
24C4 3E27     00670         LD      A,27H           ;  else "device in use"
24C6 B7       00671         OR      A
24C7 C33024   00672         JP      REMOV1          ;  and return error
              00673 ;
              00674 ;       Remove the device
              00675 ;
24CA CDFA24   00676 REMOVIT CALL    SCND4           ;Zero 8-byte DCB area
              00677 ;
              00678 ;       Any other device routes to the removed one?
              00679 ;
24CD 114B49   00680 SCNDCB  LD      DE,'IK'         ;Point to begin of area
24D0          00681         @@GTDCB
24D0+3E52     00682         LD      A,82
24D2+EF       00683         RST     40
24D3 CB66     00684 SCND1   BIT     4,(HL)          ;Routed device?
24D5 2811     00685         JR      Z,SCND2         ;Jump if not
24D7 E5       00686         PUSH    HL              ;Save DCB pointer
24D8 2C       00687         INC     L               ;Bypass TYPE code
24D9 7E       00688         LD      A,(HL)          ;P/u route vector
24DA 2C       00689         INC     L               ;  lo-order
24DB 66       00690         LD      H,(HL)          ;P/u vector hi-order
24DC 6F       00691         LD      L,A
24DD 7E       00692         LD      A,(HL)          ;P/u TYPE code of nest
24DE E1       00693         POP     HL              ;Rcvr DCB pointer
24DF B7       00694         OR      A               ;If TYPE=0, we killed
24E0 2006     00695         JR      NZ,SCND2        ;  the routed device
24E2 3E08     00696         LD      A,8
24E4 B6       00697         OR      (HL)            ;Convert to NIL if so
24E5 77       00698         LD      (HL),A
24E6 18E5     00699         JR      SCNDCB
              00700 ;
              00701 ;       Point to next device
              00702 ;
24E8 7D       00703 SCND2   LD      A,L             ;Advance to next DCB area
24E9 C608     00704         ADD     A,8             ;Loop through all
24EB 6F       00705         LD      L,A             ;  devices while checking
24EC 20E5     00706         JR      NZ,SCND1        ;Loop until table end
              00707 ;
              00708 ;       Device table cleared, now zero the DCB/FCB
              00709 ;
24EE DDE5     00710         PUSH    IX              ;Xfer vector to HL
24F0 E1       00711         POP     HL
24F1 CDFA24   00712         CALL    SCND4
24F4 CD9424   00713         CALL    SHOWIT          ;Show "Removing:"
24F7 C32F24   00714         JP      REMOV0          ;Next ...
              00715 ;
24FA 0608     00716 SCND4   LD      B,8             ;Clear 8 bytes
24FC AF       00717         XOR     A
24FD 77       00718 SCND5   LD      (HL),A          ;Go for it
24FE 23       00719         INC     HL
24FF 10FC     00720         DJNZ    SCND5
2501 C9       00721         RET
              00722 ;
              00723 ;       Transfer a filespec from HL to DE
              00724 ;
2502 7E       00725 MOVSPC  LD      A,(HL)          ;P/u a spec character
2503 FE2F     00726         CP      '/'             ;Extension ?
2505 2008     00727         JR      NZ,CKSPACE      ;No - check if space
2507 23       00728         INC     HL              ;Is the next character
2508 7E       00729         LD      A,(HL)          ;  valid ?
2509 FE41     00730         CP      'A'
250B 3802     00731         JR      C,CKSPACE       ;No - don't output it
250D 2B       00732         DEC     HL              ;Back one
250E 7E       00733         LD      A,(HL)          ;P/u slash
250F FE20     00734 CKSPACE CP      ' '
2511 D8       00735         RET     C               ;Stop on space or less
2512 FE2E     00736         CP      '.'             ;Password ?
2514 2009     00737         JR      NZ,MOVSPC1
2516 23       00738 SKIPPW  INC     HL
2517 7E       00739         LD      A,(HL)
2518 FE20     00740         CP      ' '
251A D8       00741         RET     C               ;Back on terminator
251B FE3A     00742         CP      ':'
251D 20F7     00743         JR      NZ,SKIPPW
251F EDA0     00744 MOVSPC1 LDI                     ;Move the char
2521 18DF     00745         JR      MOVSPC
              00746 ;
2523 46       00747 SPCREQ$ DB      'File spec required',CR
     69 6C 65 20 73 70 65 63
     20 72 65 71 75 69 72 65
     64 0D 
              00748         IF      @BLD631
2536 2A       00749 RENDEV  DB      '*RS'                   ;<631>
     52 53 
              00750         ELSE
              00751 RENDEV  DB      '*LS'
              00752         ENDIF
2539 52       00753 SHOW$   DB      'Removing: '
     65 6D 6F 76 69 6E 67 3A
     20 
2543          00754 FILESPC DS      15
2552 00       00755 FCB     DB      0
2553          00756         DS      31
              00757 ;
2400          00758         END     REMOVE
2400 is the transfer address
00000 Total errors


[Copyright 1999,2002 Frank Durda IV, All Rights Reserved.
Mirroring of any material on this page in any form is expressly prohibited.
The official web site for this material is:  http://nemesis.lonestar.org
Contact this address for use clearances: clearance at nemesis.lonestar.org
Comments and queries to this address: web_software_2011 at nemesis.lonestar.org]


Valid HTML 4.01!