LS-DOS 6.3.1 - LBPURGE 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/19/99 01:07:04 PURGE - LS-DOS 6.3           Page 00001 

              00001 ;LBPURGE/ASM - PURGE Command
              00003 ;
000A          00004 LF      EQU     10
000D          00005 CR      EQU     13
002C          00006 PAR_ERR EQU     44              ;Parameter Error
42E0          00007 PASSWORD        EQU     42E0H
              00008 ;
0000          00009 *GET    BUILDVER/ASM:3
              00010 ;
              00011 ;       Buildver/asm is a bit of a kludge since not all utilities can load
              00012 ;       equates from LDOS60 and still compile.  LOWCORE and everybody else
              00013 ;       relies on this setting, and it eventually ends up in LDOS60/EQU
              00014 ;       for programs that can use that.
              00015 ;
FFFF          00016 @BLD631         EQU     -1      ;<631>Build 631 distribution (LEVEL 1B)
              00017 ;       These switches activate patches made since the 1B release.
              00018 ;       It is important that all earlier patches be enabled when a higher
              00019 ;       patch is enabled.
              00020 ;       Patches C thru F were published in TMQ IV.iv, page 32 (NOTE: the
              00021 ;       patch addresses listed for SPOOL in SPOOL1/FIX are 19H high.)
FFFF          00022 @BLD631C        EQU     -1      ;<631>Apply 1C patches (SETKI)
FFFF          00023 @BLD631D        EQU     -1      ;<631>Apply 1D patches (DIR)
FFFF          00024 @BLD631E        EQU     -1      ;<631>Apply 1E patches (DIR & MEMDISK/DCT)
FFFF          00025 @BLD631F        EQU     -1      ;<631>Apply 1F patches (SPOOL)
              00026 ;       Patches G and H were published in TMQ V.i, pages 10 and 18/19.
FFFF          00027 @BLD631G        EQU     -1      ;<631>Apply 1G patches (//KEYIN,DIR,DO *)
FFFF          00028 @BLD631H        EQU     -1      ;<631>Apply 1H patches (MEMORY)
              00029 ;
              00030 ;End of BUILDVER/ASM
0000          00031 *GET    SVCMAC:3                ;SVC Macro equivalents
              00032 ;SVCMAC/ASM - LS-DOS Version VI
              00033 *LIST   OFF
              00425 *LIST   ON
              00427 ;
2400          00428         ORG     2400H
              00429 ;
2400          00430 PURGE   @@CKBRKC                ;Break key down?
2400+3E6A     00431         LD      A,106
2402+EF       00432         RST     40
2403 2804     00433         JR      Z,BEGINA        ;Ok if not
2405 21FFFF   00434         LD      HL,-1           ;  else abort
2408 C9       00435         RET
              00436 ;
2409 ED737428 00437 BEGINA  LD      (SAVESP+1),SP   ;Save stack pointer
240D E5       00438         PUSH    HL              ;Save cmdline ptr
240E          00439         @@FLAGS
240E+3E65     00440         LD      A,101
2410+EF       00441         RST     40
2411 FDE5     00442         PUSH    IY
2413 D1       00443         POP     DE              ;Flag base to DE
2414 211800   00444         LD      HL,'Y'-'A'      ;Year type flag
2417 19       00445         ADD     HL,DE
2418 22B627   00446         LD      (YFLAG1),HL
241B 223E26   00447         LD      (YFLAG2),HL     ;Save for date dsply
241E E1       00448         POP     HL              ;Restore cmdline ptr
241F 7E       00449 PURGE1  LD      A,(HL)          ;Bypass cmd line blanks
2420 23       00450         INC     HL
2421 FE20     00451         CP      ' '
2423 28FA     00452         JR      Z,PURGE1
2425 113929   00453         LD      DE,BLANKS       ;Pt to filespec area
2428 0608     00454         LD      B,8             ;Init for file name
242A FE2D     00455         CP      '-'             ;If -, set up flag
242C 2005     00456         JR      NZ,PUR0
242E 326C25   00457         LD      (MFLG+1),A
2431 7E       00458         LD      A,(HL)
2432 23       00459         INC     HL
2433 CD7927   00460 PUR0    CALL    PRSPEC
2436 FE2E     00461         CP      '.'             ;Also as extent
2438 2804     00462         JR      Z,PUR1A
243A FE2F     00463         CP      '/'             ;Ck on file EXT entered
243C 200A     00464         JR      NZ,PUR1         ;Jump if no extension
243E 114129   00465 PUR1A   LD      DE,BLANKS+8     ;Point to ext field
2441 0603     00466         LD      B,3             ;Max 3 chars
2443 7E       00467         LD      A,(HL)
2444 23       00468         INC     HL
2445 CD7927   00469         CALL    PRSPEC          ;Ck on EXT
2448 FE3A     00470 PUR1    CP      ':'             ;Drive entered?
244A 0E00     00471         LD      C,0             ;Init to drive 0
244C 2032     00472         JR      NZ,PRMERRA      ;Quit if no drive #
244E 7E       00473         LD      A,(HL)          ;P/u drive #
244F 23       00474         INC     HL              ;Bump to next field
              00475         IF      @BLD631
2450 D630     00476         SUB     '0'             ;<631>
2452 FE08     00477         CP      7+1             ;<631>Ck drive range 0-7
2454 D25C28   00478         JP      NC,PRMERR       ;<631>
2457 4F       00479         LD      C,A             ;<631>
              00480         ELSE
              00481         CALL    PATCH1          ;Ck drive range 0-7
              00482         ENDIF
2458 41       00483         LD      B,C             ;Set bit instruct
2459 04       00484         INC     B               ;Always once
245A 3E3F     00485         LD      A,47H-8
245C C608     00486 PUR2A   ADD     A,8
245E 10FC     00487         DJNZ    PUR2A
2460 32B927   00488         LD      (DVTEST1),A     ;This is bit x,a
2463 324126   00489         LD      (DVTEST2),A     ;  opcode
2466 79       00490         LD      A,C             ;Xfer drive to regA
2467 32CE26   00491         LD      (TSTMPW+1),A    ;  & stuff for later
246A          00492         @@CKDRV                 ;Ck if drive available
246A+3E21     00493         LD      A,33
246C+EF       00494         RST     40
246D 3E20     00495         LD      A,32            ;"drive not avail...
              00496         IF      @BLD631
246F C25E28   00497         JP      NZ,IOERR        ;<631>Go on CKDRV error
2472 3E0F     00498         LD      A,15            ;<631>Init WP error
2474 DA5E28   00499         JP      C,IOERR         ;<631>Exit if WP
              00500         ELSE
              00501         CALL    PATCH2          ;Ck WP or missing disk
              00502         ENDIF
2477          00503         @@GTDCT                 ;DCT to reg IY
2477+3E51     00504         LD      A,81
2479+EF       00505         RST     40
247A 116829   00506         LD      DE,PRMTBL$      ;Get parms
247D          00507         @@PARAM
247D+3E11     00508         LD      A,17
247F+EF       00509         RST     40
2480 C25C28   00510 PRMERRA JP      NZ,PRMERR       ;Jump on error
2483 210000   00511 DATPRM  LD      HL,0            ;P/u date="from-to"
2486 7C       00512         LD      A,H
2487 B5       00513         OR      L
2488 2835     00514         JR      Z,PUR3          ;Bypass if not entered
248A 7E       00515         LD      A,(HL)          ;Check for "-to"
248B FE2D     00516         CP      '-'
248D 2818     00517         JR      Z,CKTO
248F 3E80     00518         LD      A,80H           ;Set from bit
2491 324429   00519         LD      (FTFLG),A       ;Note from entered
2494 CDCE27   00520         CALL    PAKDAT          ;Pack the date entry
2497 C25E28   00521         JP      NZ,IOERR        ;Quit if bad date
249A ED434529 00522         LD      (FMPAKD),BC
249E 7E       00523         LD      A,(HL)
249F FE22     00524         CP      '"'
24A1 2810     00525         JR      Z,FRCTO
24A3 FE2D     00526         CP      '-'             ;Check for "-to"
24A5 2018     00527         JR      NZ,PUR3
24A7 23       00528 CKTO    INC     HL              ;Bypass the '-'
24A8 7E       00529         LD      A,(HL)          ;Ck for end of parm
24A9 FE22     00530         CP      '"'
24AB 2812     00531         JR      Z,PUR3          ;Go on parm end
24AD CDCE27   00532         CALL    PAKDAT          ;  else pack the date
24B0 C25E28   00533         JP      NZ,IOERR        ;Quit on bad date
24B3 3A4429   00534 FRCTO   LD      A,(FTFLG)
24B6 F601     00535         OR      1               ;Set TO bit
24B8 324429   00536         LD      (FTFLG),A
24BB ED434729 00537         LD      (TOPAKD),BC     ;Stuff for later
24BF 3ADE25   00538 PUR3    LD      A,(QPARM+1)     ;Query parm used?
24C2 B7       00539         OR      A
24C3 2806     00540         JR      Z,DOEVER        ;Go if not
24C5 CD6727   00541         CALL    CKINDO          ;Invalid command during
24C8 C25E28   00542         JP      NZ,IOERR        ;   processing
24CB CDCD26   00543 DOEVER  CALL    TSTMPW          ;Ck on master password
24CE C25E28   00544         JP      NZ,IOERR        ;Go if worng
24D1 3ACE26   00545         LD      A,(TSTMPW+1)    ;P/u drive
24D4 4F       00546         LD      C,A
24D5 FD5609   00547         LD      D,(IY+9)        ;Get DIR cylinder
24D8 1E01     00548         LD      E,1             ;Pt to HIT sector
24DA 21002C   00549         LD      HL,HITBUF
24DD          00550         @@FLAGS                 ;Pt IY => Flags
24DD+3E65     00551         LD      A,101
24DF+EF       00552         RST     40
24E0          00553         @@RDSSC                 ;Read the HIT
24E0+3E55     00554         LD      A,85
24E2+EF       00555         RST     40
24E3 3E16     00556         LD      A,16H           ;Init "HIT read error...
24E5 C25E28   00557         JP      NZ,IOERR        ;Abort on read error
24E8 1818     00558         JR      SCNH3
              00559 ;
              00560 ;       Major loop to scan HIT for files
              00561 ;
24EA E1       00562 SCNHIT  POP     HL
24EB C1       00563 SCNH1   POP     BC              ;Rcvr HIT ptr DEC
24EC 262C     00564         LD      H,HITBUF<-8     ;Pt to hi-order buffer
24EE 68       00565         LD      L,B             ;Set lo-order DEC
24EF 7D       00566 SCNH2   LD      A,L
24F0 C620     00567         ADD     A,32            ;Pt to next one in
24F2 6F       00568         LD      L,A             ;Same dir sector
24F3 300D     00569         JR      NC,SCNH3        ;Jump if still in sector
24F5 2C       00570         INC     L               ;Bump to next dir sector
24F6 FE1F     00571         CP      1FH             ;End of the line?
24F8 2008     00572         JR      NZ,SCNH3        ;Loop if not
24FA 0E0D     00573         LD      C,CR
24FC          00574         @@DSP                   ;Write new line & exit
24FC+3E02     00575         LD      A,2
24FE+EF       00576         RST     40
24FF C37928   00577         JP      EXIT
              00578 ;
              00579 ;       Routine to check on dir record in use
              00580 ;
2502 7D       00581 SCNH3   LD      A,L             ;Ignore BOOT & DIR
2503 E6FE     00582         AND     0FEH
2505 28E8     00583         JR      Z,SCNH2
2507 7E       00584         LD      A,(HL)          ;P/u HIT hash byte
2508 B7       00585         OR      A
2509 28E4     00586         JR      Z,SCNH2         ;Ignore if spare
250B 45       00587         LD      B,L             ;Save DEC
250C C5       00588         PUSH    BC
250D 7D       00589         LD      A,L             ;Get record # in L
250E E6E0     00590         AND     0E0H
2510 6F       00591         LD      L,A
2511 A8       00592         XOR     B               ;Get sector # in A
2512 FEFF     00593 SCNH3A  CP      0FFH            ;Same as what's in core?
2514 280D     00594         JR      Z,SCNH4         ;Bypass if same
2516 321325   00595         LD      (SCNH3A+1),A    ;Update indicator byte
2519          00596         @@DIRRD                 ;Read this directory
2519+3E57     00597         LD      A,87
251B+EF       00598         RST     40
251C C25E28   00599         JP      NZ,IOERR        ;Quit on read error
251F 7C       00600         LD      A,H             ;Set SBUFF pointer
2520 322425   00601         LD      (SCNH4+1),A
2523 2600     00602 SCNH4   LD      H,0             ;Pt to dir buf hi-order
2525 7E       00603         LD      A,(HL)          ;L set to lo-order
2526 CB67     00604         BIT     4,A             ;Ignore if not assigned
2528 28C1     00605         JR      Z,SCNH1
252A CB7F     00606         BIT     7,A             ;Ignore if it's an
252C 20BD     00607         JR      NZ,SCNH1        ;  extended dir record
252E CB77     00608         BIT     6,A             ;Jump if not a SYS file
2530 280A     00609         JR      Z,CKINV
2532 110000   00610 SPARM   LD      DE,0            ;P/u S-parm
2535 7A       00611         LD      A,D
2536 B3       00612         OR      E               ;Ignore this one if
2537 CAEB24   00613         JP      Z,SCNH1         ;  S-parm not entered
253A 180C     00614         JR      CKNAM
              00615 ;
              00616 ;       Non-SYS file
              00617 ;
253C CB5F     00618 CKINV   BIT     3,A             ;Jump if visible
253E 2808     00619         JR      Z,CKNAM
2540 110000   00620 IPARM   LD      DE,0            ;I-parm
2543 7A       00621         LD      A,D             ;Ignore if I-parm not
2544 B3       00622         OR      E               ;  entered as this file
2545 CAEB24   00623         JP      Z,SCNH1         ;  is invisible
              00624 ;
              00625 ;       Parms match, grab filename & check class
              00626 ;
2548 E5       00627 CKNAM   PUSH    HL              ;Save ptr to record
2549 7D       00628         LD      A,L             ;Pt to filename in dir
254A C605     00629         ADD     A,5
254C 6F       00630         LD      L,A
254D 113929   00631         LD      DE,BLANKS       ;Pt to parsed input
2550 060B     00632         LD      B,11            ;Ck name/ext (11-chars)
2552 1A       00633 SCNH5   LD      A,(DE)
2553 FE24     00634         CP      '$'             ;Wild char?
2555 2807     00635         JR      Z,SCNH6         ;Always a match
2557 BE       00636         CP      (HL)            ;Not global, char match?
2558 2804     00637         JR      Z,SCNH6         ;Ck more if match
255A FE20     00638         CP      ' '             ;Blank = end of ck
255C 200D     00639         JR      NZ,MFLG         ;If not blank, no match
255E 23       00640 SCNH6   INC     HL              ;Bump pointers
255F 13       00641         INC     DE
2560 10F0     00642         DJNZ    SCNH5           ;Loop for 11 chars
2562 3A6C25   00643         LD      A,(MFLG+1)      ;Bypass if a match but
2565 B7       00644         OR      A               ;  - exclude given
2566 C2EA24   00645         JP      NZ,SCNHIT
2569 1806     00646         JR      SCNH6A
256B 3E00     00647 MFLG    LD      A,0             ;Ignore if no match &
256D B7       00648         OR      A               ;  no exclude given
256E CAEA24   00649         JP      Z,SCNHIT
2571 E1       00650 SCNH6A  POP     HL              ;Rcvr ptr to DIR+0
2572 E5       00651         PUSH    HL
              00652 ;
              00653 ;       Now check if date matches
              00654 ;
2573 23       00655         INC     HL              ;Pt to date field
2574 CDA427   00656         CALL    UNPACK          ;Alter date for cpr
2577 3A4429   00657         LD      A,(FTFLG)
257A 07       00658         RLCA                    ;Tst fm bit
257B 3010     00659         JR      NC,SCNH6B
257D 7A       00660         LD      A,D             ;Ignore if no date
257E B3       00661         OR      E               ;  in DIR for file
257F CAEA24   00662         JP      Z,SCNHIT
2582 2A4529   00663         LD      HL,(FMPAKD)     ;P/u user entry
2585 EB       00664         EX      DE,HL
2586 CD5628   00665         CALL    CPHLDE          ;HL-DE
2589 EB       00666         EX      DE,HL
258A DAEA24   00667         JP      C,SCNHIT        ;Go if out of range
258D 3A4429   00668 SCNH6B  LD      A,(FTFLG)
2590 0F       00669         RRCA                    ;Tst TO bit
2591 300E     00670         JR      NC,MATCHES      ;Go if no TOPARM
2593 7A       00671         LD      A,D             ;  else ck if file is dated
2594 B3       00672         OR      E
2595 CAEA24   00673         JP      Z,SCNHIT        ;Go if no dir date
2598 2A4729   00674         LD      HL,(TOPAKD)     ;P/u user's packed date
259B CD5628   00675         CALL    CPHLDE          ;HL-DE
259E DAEA24   00676         JP      C,SCNHIT        ;Go if out of range
25A1 E1       00677 MATCHES POP     HL              ;Rcvr pointer to DIRREC
25A2 E5       00678 DONAM   PUSH    HL
25A3 7D       00679         LD      A,L             ;  & point to file name
25A4 C605     00680         ADD     A,5
25A6 6F       00681         LD      L,A
25A7 114D29   00682         LD      DE,FCB1$        ;Pt to name/ext buffer
25AA 0608     00683         LD      B,8             ;Max 8-char name
25AC 7E       00684 DONAM1  LD      A,(HL)          ;Move filename into
25AD FE20     00685         CP      ' '             ;  buffer until space
25AF 2805     00686         JR      Z,DONAME2       ;  or 8 characters
25B1 12       00687         LD      (DE),A
25B2 23       00688         INC     HL
25B3 13       00689         INC     DE
25B4 10F6     00690         DJNZ    DONAM1
25B6 7D       00691 DONAME2 LD      A,L             ;Point to file ext
25B7 80       00692         ADD     A,B
25B8 6F       00693         LD      L,A
25B9 7E       00694         LD      A,(HL)          ;Is there an extension?
25BA FE20     00695         CP      ' '
25BC 2810     00696         JR      Z,DONAM5        ;Bypass if not
25BE 3E2F     00697         LD      A,'/'
25C0 12       00698         LD      (DE),A          ;Stuff ext separator
25C1 13       00699         INC     DE
25C2 0603     00700         LD      B,3             ;Init 3-char ext max
25C4 7E       00701 DONAM4  LD      A,(HL)          ;Transfer up to space
25C5 FE20     00702         CP      ' '             ;  or 3 chars
25C7 2805     00703         JR      Z,DONAM5
25C9 12       00704         LD      (DE),A
25CA 23       00705         INC     HL
25CB 13       00706         INC     DE
25CC 10F6     00707         DJNZ    DONAM4
25CE 3E3A     00708 DONAM5  LD      A,':'           ;Add the drivespec
25D0 12       00709         LD      (DE),A
25D1 13       00710         INC     DE
25D2 3ACE26   00711         LD      A,(TSTMPW+1)    ;P/u drivespec
25D5 F630     00712         OR      '0'             ;Make it ASCII & stuff
25D7 12       00713         LD      (DE),A
25D8 13       00714         INC     DE
25D9 3E03     00715         LD      A,3             ;Terminate with ETX
25DB 12       00716         LD      (DE),A
25DC D5       00717         PUSH    DE              ;Save pointer
25DD 11FFFF   00718 QPARM   LD      DE,-1           ;Query each file?
25E0 7A       00719         LD      A,D
25E1 B3       00720         OR      E
25E2 CA8F26   00721         JP      Z,NOPRMPT       ;Not if not Q=N
              00722 ;
25E5          00723         @@DSPLY PRGFIL$         ;"Purge file?...
              00724         IFEQ    01H,1
25E5+21F828   00725         LD      HL,PRGFIL$
              00726         ENDIF
25E8+3E0A     00727         LD      A,10
25EA+EF       00728         RST     40
25EB D1       00729         POP     DE              ;Rcvr ptr to file buf ETX
25EC E1       00730         POP     HL              ;Rcvr ptr to 1st dir byte
25ED D5       00731         PUSH    DE
25EE 23       00732         INC     HL              ;Pt to MOD bit
25EF CB76     00733         BIT     6,(HL)          ;Test MOD flag
25F1 2808     00734         JR      Z,SCDAT1        ;Go if not mod'ed
25F3 3E20     00735         LD      A,' '           ;Put a space
25F5 12       00736         LD      (DE),A
25F6 13       00737         INC     DE
25F7 3E2B     00738         LD      A,'+'           ;  and the mod sign
25F9 12       00739         LD      (DE),A
25FA 13       00740         INC     DE
25FB 3E20     00741 SCDAT1  LD      A,' '           ;Write a space
25FD 12       00742         LD      (DE),A
25FE 13       00743         INC     DE
25FF 23       00744         INC     HL              ;Advance to date field
2600 EB       00745         EX      DE,HL
2601 367B     00746         LD      (HL),'{'        ;Stuff left brace
2603 23       00747         INC     HL
2604 EB       00748         EX      DE,HL
2605 7E       00749         LD      A,(HL)
2606 B7       00750         OR      A
2607 2861     00751         JR      Z,SCDAT4        ;Ignore if no date saved
2609 0F       00752         RRCA                    ;Has date, get day
260A 0F       00753         RRCA
260B 0F       00754         RRCA
260C E61F     00755         AND     1FH
260E 062F     00756         LD      B,2FH           ;Convert day to decimal
2610 04       00757 SCDAT2  INC     B               ;  by counting # of 10's
2611 D60A     00758         SUB     10              ;Sub 10 from day #
2613 30FB     00759         JR      NC,SCDAT2
2615 C63A     00760         ADD     A,3AH           ;Cvrt lo order to ASCII
2617 F5       00761         PUSH    AF              ;Save day low order
2618 78       00762         LD      A,B             ;Stuff day hi order
2619 12       00763         LD      (DE),A
261A 13       00764         INC     DE              ;Bump
261B F1       00765         POP     AF              ;Rcvr lo order day #
261C 12       00766         LD      (DE),A          ;Stuff low order
261D 13       00767         INC     DE              ;Bump pointer to msg
261E 3E2D     00768         LD      A,'-'           ;Init seperator
2620 12       00769         LD      (DE),A          ;  and stuff in buffer
2621 13       00770         INC     DE              ;Pt to month field
2622 E5       00771         PUSH    HL              ;Save DIR ptr
2623 2B       00772         DEC     HL              ;Pt to DIR+1 (month+)
2624 7E       00773         LD      A,(HL)          ;P/u month etc
2625 E60F     00774         AND     0FH             ;Strip off flags
2627 3D       00775         DEC     A               ;(mon-1)*3 indexes string
2628 4F       00776         LD      C,A             ;  conversion table
2629 07       00777         RLCA
262A 81       00778         ADD     A,C
262B 4F       00779         LD      C,A
262C 0600     00780         LD      B,0
262E 211529   00781         LD      HL,MONTBL
2631 09       00782         ADD     HL,BC           ;Add offset to tbl start
2632 0E03     00783         LD      C,3
2634 EDB0     00784         LDIR                    ;Move 3-char month
2636 3E2D     00785         LD      A,'-'           ;Suff separator char
2638 12       00786         LD      (DE),A
2639 13       00787         INC     DE              ;Advance to year field
263A E1       00788         POP     HL              ;Get ptr to dir+2
263B 0E38     00789         LD      C,'8'           ;Init 1980
263D 3A0000   00790         LD      A,($-$)         ;Year type flag
263E          00791 YFLAG2  EQU     $-2
2640 CB       00792         DB      0CBH
2641 47       00793 DVTEST2 DB      47H
2642 2005     00794         JR      NZ,NEWDT2       ;Using new style
2644 7E       00795         LD      A,(HL)          ;Get old date
2645 E607     00796         AND     7
2647 1818     00797         JR      THERE           ;Make for dsp
2649 7D       00798 NEWDT2  LD      A,L
264A C611     00799         ADD     A,17            ;Pt to new year
264C 6F       00800         LD      L,A
264D 7E       00801         LD      A,(HL)          ;get year
264E E61F     00802         AND     1FH
              00803         IF      @BLD631
              00804 L2650:
              00805         ENDIF
2650 FE0A     00806         CP      10              ;1980's
2652 380D     00807         JR      C,THERE         ;Go if so
              00808         IF      @BLD631
2654 0C       00809         INC     C               ;<631>
              00810         ELSE
              00811         LD      C,'9'
              00812         ENDIF
2655 D60A     00813         SUB     10              ;Sub off decade
2657 FE0A     00814         CP      10              ;Must be less
2659 3806     00815         JR      C,THERE
              00816         IF      @BLD631
265B D60A     00817         SUB     10              ;<631>
265D 0E30     00818         LD      C,'0'           ;<631>
265F 18EF     00819         JR      L2650           ;<631>
              00820         ELSE
              00821         LD      A,9             ;Else bogus, use 1999
              00822         ENDIF
2661 47       00823 THERE   LD      B,A             ;Save year
2662 79       00824         LD      A,C
2663 12       00825         LD      (DE),A          ;Stuff decade
2664 13       00826         INC     DE
2665 78       00827         LD      A,B
2666 C630     00828         ADD     A,'0'           ;Make ascii
2668 12       00829         LD      (DE),A          ;Stuff year
2669 13       00830         INC     DE
266A 3E03     00831 SCDAT4  LD      A,3             ;Show etx for display
266C 12       00832         LD      (DE),A
266D          00833         @@DSPLY FCB1$           ;Display filename
              00834         IFEQ    01H,1
266D+214D29   00835         LD      HL,FCB1$
              00836         ENDIF
2670+3E0A     00837         LD      A,10
2672+EF       00838         RST     40
2673          00839         @@DSPLY QMARK$          ;Display ???
              00840         IFEQ    01H,1
2673+210529   00841         LD      HL,QMARK$
              00842         ENDIF
2676+3E0A     00843         LD      A,10
2678+EF       00844         RST     40
2679 214929   00845         LD      HL,LILBUF$      ;Get response y,n
267C 010003   00846         LD      BC,3<8          ;For Yes, No
267F          00847         @@KEYIN
267F+3E09     00848         LD      A,9
2681+EF       00849         RST     40
2682 DA6D28   00850         JP      C,BREAK         ;Abort on 
2685 7E       00851         LD      A,(HL)          ;P/u response
2686 CBAF     00852         RES     5,A             ;Strip l/c if entered
2688 FE59     00853         CP      'Y'             ;Is it yes?
268A C2EA24   00854         JP      NZ,SCNHIT       ;Bypass if not
268D E3       00855         EX      (SP),HL         ;Place dummy HL below
268E E5       00856         PUSH    HL              ;  pointer
268F FDCB0A46 00857 NOPRMPT BIT     0,(IY+'K'-'A')  ;Ck if BREAK bit in
2693 C26D28   00858         JP      NZ,BREAK        ;  KFLAG is active
2696          00859         @@LOGOT PURGE$          ;Dsply "Purging: "
              00860         IFEQ    01H,1
2696+210B29   00861         LD      HL,PURGE$
              00862         ENDIF
2699+3E0C     00863         LD      A,12
269B+EF       00864         RST     40
269C E1       00865         POP     HL              ;Get pointer where ETX is
269D 360D     00866         LD      (HL),CR         ;  & replace with CR
269F          00867         @@LOGOT FCB1$           ;Dsply filename
              00868         IFEQ    01H,1
269F+214D29   00869         LD      HL,FCB1$
              00870         ENDIF
26A2+3E0C     00871         LD      A,12
26A4+EF       00872         RST     40
26A5 E1       00873         POP     HL              ;Pop dummy or DIRREC ptr
26A6 C1       00874         POP     BC              ;Get drive & DEC
26A7 C5       00875         PUSH    BC
26A8 78       00876         LD      A,B             ;P/u the DEC
26A9 329729   00877         LD      (FCB+7),A       ;  & stuff
26AC 3ACE26   00878         LD      A,(TSTMPW+1)    ;P/u drive
26AF 329629   00879         LD      (FCB+6),A       ;  & stuff
26B2 3E01     00880         LD      A,1             ;Set up FCB for remove
26B4 329129   00881         LD      (FCB+1),A
26B7 3E80     00882         LD      A,80H           ;Show FCB as open
26B9 329029   00883         LD      (FCB),A
26BC 119029   00884         LD      DE,FCB          ;Remove the file
26BF          00885         @@REMOV
26BF+3E39     00886         LD      A,57
26C1+EF       00887         RST     40
26C2 C25E28   00888         JP      NZ,IOERR        ;Jump on error
26C5 3EFF     00889         LD      A,0FFH          ;Show we don't have the
26C7 321325   00890         LD      (SCNH3A+1),A    ;  latest dir record
26CA C3EB24   00891         JP      SCNH1           ;Loop
              00892 ;
              00893 ;       Routine to get the master password & match it
              00894 ;
26CD 0E00     00895 TSTMPW  LD      C,$-$           ;Init to drive requested
26CF CD5627   00896         CALL    GATRD           ;Read GAT into GATBUF
26D2 C0       00897         RET     NZ              ;Back on error
26D3 2ACE2B   00898         LD      HL,(GATBUF+0CEH)
26D6 11E042   00899         LD      DE,PASSWORD     ;Password="PASSWORD" ?
26D9 AF       00900         XOR     A
26DA ED52     00901         SBC     HL,DE
26DC C8       00902         RET     Z               ;Back if PASSWORD
              00903 ;
              00904 ;       MPW is not "PASSWORD" - check entry match
              00905 ;
26DD 110000   00906 PWPARM  LD      DE,0            ;P/u MPW string addr
26E0 21AC28   00907         LD      HL,MPW$         ;Init prompt
26E3 CDF426   00908         CALL    GETMPW          ;Hash parm or entry
26E6 C0       00909         RET     NZ
26E7 EB       00910         EX      DE,HL           ;Xfer haashed MPW to DE
26E8 2ACE2B   00911         LD      HL,(GATBUF+0CEH)        ;Grab pack MPW &
26EB AF       00912         XOR     A               ;  check if user entered
26EC ED52     00913         SBC     HL,DE           ;  the pack MPW
26EE 21C428   00914         LD      HL,BADMPW$      ;Init error pointer
26F1 3E3F     00915         LD      A,63            ;Set extended error
26F3 C9       00916         RET                     ;Z or NZ
              00917 ;
              00918 ;       Routine to get 8-char password
              00919 ;
26F4 CDFB26   00920 GETMPW  CALL    GMPW1           ;Test if user entered MPW
26F7 C0       00921         RET     NZ
26F8 3EE4     00922         LD      A,0E4H          ;Hash password (DE) to HL
26FA EF       00923         RST     28H             ;Ret to what called
26FB 7A       00924 GMPW1   LD      A,D             ;Test if user entered MPW
26FC B3       00925         OR      E
26FD 281D     00926         JR      Z,GMPW3         ;Prompt if not
26FF 3C       00927         INC     A               ;  or no operand
2700 281A     00928         JR      Z,GMPW3
              00929 ;
              00930 ;       Place entered password into buffer
              00931 ;
2702 21002A   00932         LD      HL,BUFFER
2705 E5       00933         PUSH    HL
2706 0608     00934         LD      B,8             ;Max entry of 8 chars
2708 1A       00935 GMPW2   LD      A,(DE)          ;P/u pswd char
2709 FE0D     00936         CP      CR              ;End of the line?
270B 282F     00937         JR      Z,GMPW4         ;Space out if so
270D FE2C     00938         CP      ','             ;Comma separator?
270F 282B     00939         JR      Z,GMPW4
2711 FE22     00940         CP      '"'             ;Closing quote?
2713 2827     00941         JR      Z,GMPW4
2715 13       00942         INC     DE
2716 77       00943         LD      (HL),A          ;Xfer the char
2717 23       00944         INC     HL
2718 10EE     00945         DJNZ    GMPW2           ;Loop for 8
271A 1825     00946         JR      GMPW5
              00947 ;
              00948 ;       Not entered as parm, grab from keyboard
              00949 ;
271C CD6727   00950 GMPW3   CALL    CKINDO          ;Can't prompt in 
271F C0       00951         RET     NZ
2720          00952         @@DSPLY                 ;Display request
              00953         IFEQ    00H,1
              00954         LD      HL,
              00955         ENDIF
2720+3E0A     00956         LD      A,10
2722+EF       00957         RST     40
2723 C0       00958         RET     NZ
2724 010008   00959         LD      BC,8<8          ;Max 8 chars input
2727 21002A   00960         LD      HL,BUFFER       ;Pt to buffer
272A E5       00961         PUSH    HL
272B          00962         @@KEYIN                 ;Get parm input
272B+3E09     00963         LD      A,9
272D+EF       00964         RST     40
272E DA6D28   00965         JP      C,BREAK         ;Exit on Break
2731 EB       00966         EX      DE,HL           ;Buf start to DE
2732 2600     00967         LD      H,0             ;Buf len to HL
2734 68       00968         LD      L,B
2735 19       00969         ADD     HL,DE           ;Pt to 1st unused pos
2736 3E08     00970         LD      A,8             ;Calculate spaces needed
2738 90       00971         SUB     B
2739 2806     00972         JR      Z,GMPW5         ;Ret if none needed
273B 47       00973         LD      B,A             ;Set counter for spaces
273C 3620     00974 GMPW4   LD      (HL),' '        ;  & put them in
273E 23       00975         INC     HL
273F 10FB     00976         DJNZ    GMPW4
              00977 ;
              00978 ;       Convert (SP) through (SP)+7 to upper case
              00979 ;
2741 E1       00980 GMPW5   POP     HL              ;Rcvr pointer to buf
2742 E5       00981         PUSH    HL
2743 0608     00982         LD      B,8             ;Loop through field
2745 7E       00983 GMPW6   LD      A,(HL)
2746 FE61     00984         CP      'a'
2748 3806     00985         JR      C,GMPW7
274A FE7B     00986         CP      'z'+1
274C 3002     00987         JR      NC,GMPW7
274E CBAE     00988         RES     5,(HL)          ;L/c -> U/C
2750 23       00989 GMPW7   INC     HL
2751 10F2     00990         DJNZ    GMPW6
2753 D1       00991         POP     DE              ;Rcvr ptr to start
2754 AF       00992         XOR     A               ;Indicate no error
2755 C9       00993         RET
              00994 ;
              00995 ;       Routine to read the granule allocation table
              00996 ;
2756 D5       00997 GATRD   PUSH    DE
2757 E5       00998         PUSH    HL
2758 FD5609   00999         LD      D,(IY+9)        ;Dir cylinder
275B 21002B   01000         LD      HL,GATBUF
275E 5D       01001         LD      E,L             ;Set to sector 0
275F          01002         @@RDSSC
275F+3E55     01003         LD      A,85
2761+EF       01004         RST     40
2762 E1       01005         POP     HL
2763 D1       01006         POP     DE
2764 3E14     01007         LD      A,14H           ;Init "GAT read error
2766 C9       01008         RET                     ;Z or NZ
              01009 ;
              01010 ;       Routine to check if  active
              01011 ;
2767 FDE5     01012 CKINDO  PUSH    IY
2769          01013         @@FLAGS
2769+3E65     01014         LD      A,101
276B+EF       01015         RST     40
276C FDCB126E 01016         BIT     5,(IY+'S'-'A')  ;Set if DO active
2770 FDE1     01017         POP     IY
2772 C8       01018         RET     Z
2773 218528   01019         LD      HL,NOINDO$
2776 3E3F     01020         LD      A,63
2778 C9       01021         RET
              01022 ;
              01023 ;       Parse file name or ext on command line
              01024 ;
2779 FE2A     01025 PRSPEC  CP      '*'
277B 2008     01026         JR      NZ,PS4
277D 3E24     01027         LD      A,'$'           ;Wild card char
277F 12       01028 PS5     LD      (DE),A          ;Store it
2780 10FD     01029         DJNZ    PS5
2782 7E       01030         LD      A,(HL)          ;P/u terminator
2783 23       01031         INC     HL
2784 C9       01032         RET
              01033 ;
2785 FE24     01034 PS4     CP      '$'             ;Wild character?
2787 2814     01035         JR      Z,PRS2          ;Always a match
2789 FE41     01036         CP      'A'             ;Ck on filename entry
278B 3006     01037         JR      NC,PRS1         ;Jump if possible alpha
278D FE3A     01038         CP      '9'+1           ;Ck on 0-9
278F D0       01039         RET     NC              ;Bad if > 9 and < A
2790 FE30     01040         CP      '0'
2792 D8       01041         RET     C               ;Bad if < 0
2793 FE61     01042 PRS1    CP      'a'             ;Cvrt to UC if needed
2795 3806     01043         JR      C,PRS2
2797 FE7B     01044         CP      'z'+1
2799 3002     01045         JR      NC,PRS2
279B CBAF     01046         RES     5,A
279D 12       01047 PRS2    LD      (DE),A          ;Xfer char to buffer
279E 13       01048         INC     DE              ;Bump dest ptr
279F 7E       01049         LD      A,(HL)          ;Get next char
27A0 23       01050         INC     HL              ;Bump source ptr
27A1 10D6     01051         DJNZ    PRSPEC          ;Loop 8 max
27A3 C9       01052         RET
              01053 ;
              01054 ;       Routine to extract date from directory
              01055 ;
27A4 7E       01056 UNPACK  LD      A,(HL)          ;P/u DIR+1
27A5 E60F     01057         AND     0FH             ;Mask all but month
27A7 1E00     01058         LD      E,0
27A9 CB3F     01059         SRL     A
27AB CB1B     01060         RR      E
27AD 57       01061         LD      D,A             ;Month to DE
27AE 23       01062         INC     HL              ;Pt to day
27AF 7E       01063         LD      A,(HL)
27B0 E6F8     01064         AND     0F8H            ;Mask off year
27B2 0F       01065         RRCA                    ;Day to bits 2-6
27B3 B3       01066         OR      E
27B4 5F       01067         LD      E,A             ;Mon,day in E
27B5 3A0000   01068         LD      A,($-$)         ;Get YFLAG
27B6          01069 YFLAG1  EQU     $-2
27B8 CB       01070         DB      0CBH            ;Bit x,A
27B9 47       01071 DVTEST1 DB      47H
27BA 2009     01072         JR      NZ,NEWDT        ;Go if new style
27BC 7E       01073         LD      A,(HL)
27BD E607     01074         AND     7               ;Get old style date
27BF 07       01075 SHFTD   RLCA
27C0 07       01076         RLCA
27C1 07       01077         RLCA
27C2 B2       01078         OR      D               ;Merge year w/MSbits mon
27C3 57       01079         LD      D,A
27C4 C9       01080         RET
              01081 ;
27C5 7D       01082 NEWDT   LD      A,L             ;Pt to new year style
27C6 C611     01083         ADD     A,17
27C8 6F       01084         LD      L,A
27C9 7E       01085         LD      A,(HL)          ;Get year
27CA E61F     01086         AND     1FH             ;Mask mins
27CC 18F1     01087         JR      SHFTD           ;Store
              01088 ;
              01089 ;       Pack user date string
              01090 ;
27CE 7E       01091 PAKDAT  LD      A,(HL)
27CF 0E2F     01092         LD      C,'/'           ;Init separator
27D1 CD2328   01093         CALL    PARSDAT         ;Parse entry
27D4 2046     01094         JR      NZ,BADFMT       ;Jump on format error
27D6 EB       01095         EX      DE,HL
              01096         IF      @BLD631
27D7 7E       01097         LD      A,(HL)          ;<631>
27D8 FE0C     01098         CP      12              ;<631>
27DA 3003     01099         JR      NC,NOTLP        ;<631>
27DC C664     01100         ADD     A,64H           ;<631>
27DE 77       01101         LD      (HL),A          ;<631>
              01102 NOTLP:                          ;<631>
              01103         ELSE
              01104         LD      A,(LILBUF$)     ;Is year a leap year?
              01105         ENDIF
27DF E603     01106         AND     3
27E1 21DD28   01107         LD      HL,MAXDAYS+1    ;Set Feb to have 29 days
27E4 2001     01108         JR      NZ,$+3          ;  if so
27E6 34       01109         INC     (HL)
27E7 3A4B29   01110         LD      A,(LILBUF$+2)   ;P/u month
27EA 3D       01111         DEC     A               ;Range check
27EB FE0C     01112         CP      12
27ED 302D     01113         JR      NC,BADFMT       ;Go if 0 or >12
27EF 2B       01114         DEC     HL              ;Point to Jan entry
27F0 85       01115         ADD     A,L             ;Index the month
27F1 6F       01116         LD      L,A
27F2 7C       01117         LD      A,H
27F3 CE00     01118         ADC     A,0
27F5 67       01119         LD      H,A
27F6 3A4A29   01120         LD      A,(LILBUF$+1)   ;P/u day entry
27F9 3D       01121         DEC     A               ;Reduce for test (0->FF)
27FA BE       01122         CP      (HL)
27FB 301F     01123         JR      NC,BADFMT       ;Go if too large (or 0)
27FD 214B29   01124         LD      HL,LILBUF$+2    ;Pt to month
2800 46       01125         LD      B,(HL)          ;Get month
2801 0E00     01126         LD      C,0
2803 CB38     01127         SRL     B               ;Split month to BC
2805 CB19     01128         RR      C
2807 2B       01129         DEC     HL
2808 7E       01130         LD      A,(HL)          ;Get day
2809 07       01131         RLCA                    ;Shift into bits 2-6
280A 07       01132         RLCA
280B B1       01133         OR      C
280C 4F       01134         LD      C,A             ;Merge day into C
280D 2B       01135         DEC     HL
280E 7E       01136         LD      A,(HL)          ;Get year
280F D650     01137         SUB     80              ;Offset only
2811 3001     01138         JR      NC,GDATE        ;OK if >= 1980
2813 AF       01139         XOR     A               ;  else use 1980
2814 07       01140 GDATE   RLCA                    ;Shift into bits 3-7
2815 07       01141         RLCA
2816 07       01142         RLCA
2817 B0       01143         OR      B               ;  & merge with month
2818 47       01144         LD      B,A
2819 EB       01145         EX      DE,HL
281A AF       01146         XOR     A               ;Set Z, no error
281B C9       01147         RET
              01148 ;
281C 21E828   01149 BADFMT  LD      HL,BADFMT$      ;Init error pointer
281F 3E3F     01150         LD      A,63            ;Set extended error
2821 B7       01151         OR      A
2822 C9       01152         RET
              01153 ;
              01154 ;       Routine to parse DATE/TIME entry
              01155 ;
2823 114B29   01156 PARSDAT LD      DE,LILBUF$+2    ;Point to buf end
2826 0603     01157         LD      B,3             ;Process 3 fields
2828 D5       01158 PRSD1   PUSH    DE              ;Save pointer
2829 CD3828   01159         CALL    PRSD2           ;Get a digit pair
282C D1       01160         POP     DE              ;Recover pointer
282D C0       01161         RET     NZ              ;Ret if bad digit pair
282E 12       01162         LD      (DE),A          ;  else stuff the value
              01163         IF      @BLD631
282F 05       01164         DEC     B               ;<631>Loop countdown
2830 C8       01165         RET     Z               ;<631>
2831 1B       01166         DEC     DE              ;<631>Backup the pointer
              01167         ELSE
              01168         DEC     DE              ;Backup the pointer
              01169         DEC     B               ;Loop countdown
              01170         RET     Z
              01171         ENDIF
2832 7E       01172         LD      A,(HL)          ;Ck for valid separator
2833 23       01173         INC     HL              ;Bump pointer
2834 B9       01174         CP      C               ;Separator char required
2835 28F1     01175         JR      Z,PRSD1         ;Loop if match
2837 C9       01176         RET                     ;  else ret bad (NZ)
              01177 ;
              01178 ;       Routine to parse a digit pair
              01179 ;
2838 CD4F28   01180 PRSD2   CALL    PRS4            ;Get a digit
283B 3010     01181         JR      NC,PRSD3        ;Jump if bad digit
283D 5F       01182         LD      E,A             ;Multiply by ten
283E 07       01183         RLCA
283F 07       01184         RLCA
2840 83       01185         ADD     A,E
2841 07       01186         RLCA
2842 5F       01187         LD      E,A
2843 CD4F28   01188         CALL    PRS4            ;Get another digit
2846 3005     01189         JR      NC,PRSD3        ;Jump on bad digit
2848 83       01190         ADD     A,E             ;Accumulate new digit
2849 5F       01191         LD      E,A             ;Save 2-digit value
284A AF       01192         XOR     A               ;Clear flags
284B 7B       01193         LD      A,E             ;Xfer field value
284C C9       01194         RET
              01195 ;
284D B7       01196 PRSD3   OR      A               ;Set NZ
284E C9       01197         RET
284F 7E       01198 PRS4    LD      A,(HL)          ;P/u a digit &
2850 23       01199         INC     HL              ;  convert to binary
2851 D630     01200         SUB     '0'
2853 FE0A     01201         CP      10
2855 C9       01202         RET
              01203 ;
              01204 ;       Routine to compare DE to HL
              01205 ;
2856 7C       01206 CPHLDE  LD      A,H
2857 92       01207         SUB     D
2858 C0       01208         RET     NZ
2859 7D       01209         LD      A,L
285A 93       01210         SUB     E
285B C9       01211         RET
              01212 ;
              01213 ;       Error processing
              01214 ;
285C 3E2C     01215 PRMERR  LD      A,PAR_ERR       ;Parameter Error
285E FE3F     01216 IOERR   CP      63              ;Extended error?
2860 281E     01217         JR      Z,EXTERR
2862 6F       01218         LD      L,A
2863 2600     01219         LD      H,0
2865 F6C0     01220         OR      0C0H            ;Abbrev & return
2867 4F       01221         LD      C,A
2868          01222         @@ERROR
2868+3E1A     01223         LD      A,26
286A+EF       01224         RST     40
286B 1806     01225         JR      SAVESP
              01226 ;
              01227 ;       BREAK handler routine
              01228 ;
286D          01229 BREAK   @@CKBRKC                ;Clear Break Bit
286D+3E6A     01230         LD      A,106
286F+EF       01231         RST     40
2870 21FFFF   01232 ERREXIT LD      HL,-1
2873 310000   01233 SAVESP  LD      SP,$-$          ;Restore the stack
2876 227A28   01234         LD      (RETCOD),HL
2879          01235 EXIT    EQU     $               ;Exit clears Break
2879 210000   01236         LD      HL,0
287A          01237 RETCOD  EQU     $-2
287C          01238         @@CKBRKC
287C+3E6A     01239         LD      A,106
287E+EF       01240         RST     40
287F C9       01241         RET
              01242 ;
2880          01243 EXTERR  @@LOGOT
              01244         IFEQ    00H,1
              01245         LD      HL,
              01246         ENDIF
2880+3E0C     01247         LD      A,12
2882+EF       01248         RST     40
2883 18EB     01249         JR      ERREXIT
2885 49       01250 NOINDO$ DB      'Invalid command during  '
     6E 76 61 6C 69 64 20 63
     6F 6D 6D 61 6E 64 20 64
     75 72 69 6E 67 20 3C 44
     4F 3E 20 
28A1 70       01251         DB      'processing',CR
     72 6F 63 65 73 73 69 6E
     67 0D 
28AC 4D       01252 MPW$    DB      'Master password ?      ',3
     61 73 74 65 72 20 70 61
     73 73 77 6F 72 64 20 3F
     20 20 20 20 20 20 03 
28C4 49       01253 BADMPW$ DB      'Invalid master password',CR
     6E 76 61 6C 69 64 20 6D
     61 73 74 65 72 20 70 61
     73 73 77 6F 72 64 0D 
28DC 1F       01254 MAXDAYS DB      31,28,31,30,31,30,31,31,30,31,30,31
     1C 1F 1E 1F 1E 1F 1F 1E
     1F 1E 1F 
28E8 42       01255 BADFMT$ DB      'Bad date format',CR
     61 64 20 64 61 74 65 20
     66 6F 72 6D 61 74 0D 
              01256 ;
28F8 50       01257 PRGFIL$ DB      'Purge file: ',3
     75 72 67 65 20 66 69 6C
     65 3A 20 03 
2905 7D       01258 QMARK$  DB      '} ?  ',3
     20 3F 20 20 03 
290B 50       01259 PURGE$  DB      'Purging: ',3
     75 72 67 69 6E 67 3A 20
     03 
2915 4A       01260 MONTBL  DM      'JanFebMarAprMayJunJulAugSepOctNovDec'
     61 6E 46 65 62 4D 61 72
     41 70 72 4D 61 79 4A 75
     6E 4A 75 6C 41 75 67 53
     65 70 4F 63 74 4E 6F 76
     44 65 63 
2939 20       01261 BLANKS  DM      '           '
     20 20 20 20 20 20 20 20
     20 20 
2944 00       01262 FTFLG   DB      0
2945          01263 FMPAKD  DS      2
2947          01264 TOPAKD  DS      2
2949          01265 LILBUF$ DS      4
294D          01266 FCB1$   DS      27
              01267 ;
              01268 ;       Parameter table
              01269 ;
2968 80       01270 PRMTBL$ DB      80H
0080          01271 VAL     EQU     80H
0040          01272 SW      EQU     40H
0020          01273 STR     EQU     20H
0010          01274 SGL     EQU     10H
2969 53       01275         DB      SW!SGL!3,'INV',0
     49 4E 56 00 
296E 4125     01276         DW      IPARM+1
2970 53       01277         DB      SW!SGL!3,'SYS',0
     53 59 53 00 
2975 3325     01278         DW      SPARM+1
2977 73       01279         DB      SW!STR!SGL!3,'MPW',0
     4D 50 57 00 
297C DE26     01280         DW      PWPARM+1
297E 55       01281         DB      SW!SGL!5,'QUERY',0
     51 55 45 52 59 00 
2985 DE25     01282         DW      QPARM+1
2987 34       01283         DB      STR!SGL!4,'DATE',0
     44 41 54 45 00 
298D 8424     01284         DW      DATPRM+1
298F 00       01285         NOP
              01286 ;
2990          01287 FCB     DS      32
              01288         IF      @BLD631
              01289         ELSE
              01290 PATCH1  SUB     '0'             ;Cvrt to binary
              01291         CP      7+1
              01292         JP      NC,PRMERR
              01293         LD      C,A
              01294         RET
              01295 ;
              01296 PATCH2  JP      NZ,IOERR        ;Go on CKDRV error
              01297         LD      A,15            ;Init WP error
              01298         JP      C,IOERR         ;Exit if WP
              01299         RET
              01300         ENDIF
              01301 ;
2A00          01302         ORG     $<-8+1<+8
2A00          01303 BUFFER  DS      256
2B00          01304 GATBUF  DS      256
2C00          01305 HITBUF  DS      256
2CFF          01306 LAST    EQU     $-1
              01307 ;
2400          01308         END     PURGE
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!