home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol090 / systest6.mac < prev    next >
Encoding:
Text File  |  1984-04-29  |  4.1 KB  |  212 lines

  1. ;
  2. ;  PROGRAM:  SYSTEST6
  3. ;  AUTHOR:  Richard Conn
  4. ;  PURPOSE:  To illustrate the ZCPR2-specific routines in SYSLIB
  5. ;
  6.  
  7. ;
  8. ;  Externals
  9. ;
  10.     EXT    ZCPRSET        ; Set DMA, et al
  11.     EXT    ZINIEXT        ; Set External Path Address
  12.     EXT    ZPFIND        ; Find File Along Path
  13.     EXT    ZFSTAT        ; Return Status of File
  14.     EXT    ZFNAME        ; Extended File Name Parser
  15.  
  16.     EXT    RETUD        ; Return Current User/Disk
  17.     EXT    CRLF        ; New Line
  18.     EXT    BBLINE        ; Input Line Editor
  19.     EXT    PRINT        ; Print String
  20.     EXT    PSTR        ; Another Print String
  21.     EXT    CIN        ; Char in
  22.     EXT    COUT        ; Char out
  23.     EXT    CAPS        ; Capitalize char
  24.     EXT    PADC        ; Print A as decimal
  25.     EXT    BDOS        ; BDOS Call
  26.     EXT    PHL4HC        ; Print HL as 4 Hex chars
  27.     EXT    CODEND        ; End of code/beginning of buffer
  28.  
  29. ;
  30. ;  Constants
  31. ;
  32. CR    EQU    0DH
  33. LF    EQU    0AH
  34.  
  35. ;
  36. ;  THIS INITIALIZATION MUST BE DONE WHENEVER THE ZCPR-ORIENTED ROUTINES
  37. ;    ARE TO BE USED WITH THE USER'S EXTERNAL PATH
  38. ;
  39.     LXI    H,40H        ; BASE OF EXTERNAL PATHS
  40.     CALL    ZINIEXT        ; SET BASE ADDRESS
  41.  
  42. ;
  43. ;  THIS INITIALIZATION NEED NOT ALWAYS BE DONE, ESPECIALLY WHEN THE
  44. ;    DEFAULTS ARE USED, BUT I'M DOING IT HERE FOR PURPOSE OF EXAMPLE
  45. ;
  46.     MVI    A,'$'    ; CURRENT INDICATOR
  47.     LXI    H,80H    ; DMA ADDRESS
  48.     CALL    ZCPRSET    ; SET THESE VALUES FOR ZCPR ROUTINES
  49.  
  50. ;
  51. ;  SINCE I AM PLAYING WITH DISKS AND USER AREAS, GET THE CURRENT DISK/USER
  52. ;
  53.     CALL    RETUD    ; GET CURRENT USER AND DISK
  54.     MOV    A,B    ; SAVE DISK
  55.     STA    CDISK
  56.     MOV    A,C    ; SAVE USER
  57.     STA    CUSER
  58.  
  59. ;
  60. ;  TEST LOOP
  61. ;
  62. LOOP:
  63.     CALL    PRINT
  64.     DB    CR,LF,'Current Disk is ',0
  65.     LDA    CDISK    ; GET DISK
  66.     PUSH    PSW    ; SAVE IF
  67.     ADI    'A'    ; CONVERT TO ASCII
  68.     CALL    COUT
  69.     POP    PSW    ; GET DISK
  70.     MOV    E,A
  71.     MVI    C,14    ; SELECT DISK
  72.     CALL    BDOS
  73.     CALL    PRINT
  74.     DB    ', and Current User is ',0
  75.     LDA    CUSER    ; GET USER
  76.     CALL    PADC    ; PRINT AS DECIMAL
  77.     MOV    E,A    ; SELECT USER
  78.     MVI    C,32
  79.     CALL    BDOS
  80.     CALL    PRINT
  81.     DB    CR,LF,'Name of File to Search For (<CR>=Done)? ',0
  82.     XRA    A    ; NO CAP
  83.     CALL    BBLINE    ; GET LINE FROM USER
  84.     ORA    A    ; ANY INPUT?
  85.     RZ
  86.     CALL    PRINT
  87.     DB    CR,LF,'File Name: ',0
  88.     PUSH    H    ; SAVE HL, SINCE MODIFIED BY PSTR
  89.     CALL    PSTR
  90.     CALL    CODEND    ; GET ADDRESS OF SCRATCH AREA FOR ZFNAME
  91.     MOV    B,H    ; ... IN BC
  92.     MOV    C,L
  93.     POP    H
  94.     LXI    D,FCB    ; PT TO FCB
  95.     CALL    ZFNAME    ; CONVERT TO FCB FORM
  96.     JZ    UDERR    ; USER OR DISK ERROR?
  97.     CALL    PRINT
  98.     DB    CR,LF,'Selected Disk is ',0
  99.     MOV    A,B    ; GET DISK NUMBER
  100.     CPI    0FFH    ; CURRENT?
  101.     JNZ    DN1
  102.     CALL    PRINT
  103.     DB    'Current',0
  104.     JMP    DN2
  105. DN1:
  106.     DCR    A    ; CONVERT TO 0-15
  107.     ADI    'A'    ; CONVERT TO LETTER
  108.     CALL    COUT
  109.     SUI    'A'    ; CONVERT BACK
  110.     MOV    E,A    ; IN E
  111.     PUSH    B    ; SAVE BC
  112.     MVI    C,14    ; SELECT DISK
  113.     CALL    BDOS
  114.     POP    B    ; GET BC
  115. DN2:
  116.     CALL    PRINT
  117.     DB    ', and Selected User is ',0
  118.     MOV    A,C    ; GET USER
  119.     CPI    0FFH    ; CURRENT?
  120.     JNZ    DN3
  121.     CALL    PRINT
  122.     DB    'Current',0
  123.     JMP    DN4
  124. DN3:
  125.     CALL    PADC    ; PRINT AS DECIMAL
  126.     MOV    E,A    ; USER IN E
  127.     MVI    C,32    ; SELECT USER
  128.     CALL    BDOS
  129. DN4:
  130.     CALL    PRINT
  131.     DB    CR,LF,'Selected User and Disk Now Logged In'
  132.     DB    CR,LF,'File Name from FCB: ',0
  133.     LXI    H,FCB+1
  134.     MVI    C,8    ; PRINT 8 CHARS
  135.     CALL    PCH
  136.     MVI    A,'.'
  137.     CALL    COUT
  138.     MVI    C,3    ; PRINT 3 MORE CHARS
  139.     CALL    PCH
  140.     CALL    CRLF
  141.     LXI    D,FCB    ; PT TO FCB
  142.     MVI    B,0    ; DON'T SEARCH CURRENT
  143.     CALL    ZPFIND    ; SEARCH FOR FILE ALONG PATH (DE PTS TO FCB)
  144.     JZ    FNF    ; FILE NOT FOUND IF A=0 AND ZERO FLAG SET
  145.     CALL    PRINT
  146.     DB    CR,LF,'File Found on Disk ',0
  147.     MOV    A,B    ; GET DISK NUMBER
  148.     ADI    'A'    ; CONVERT TO LETTER
  149.     CALL    COUT
  150.     CALL    PRINT
  151.     DB    ' in User ',0
  152.     MOV    A,C    ; GET USER NUMBER
  153.     CALL    PADC    ; PRINT AS DECIMAL
  154.     PUSH    D    ; SAVE FCB PTR
  155.     PUSH    B    ; SAVE USER/DISK
  156.     MOV    E,B    ; SELECT DISK
  157.     MVI    C,14    ; BDOS FCT
  158.     CALL    BDOS    ; SELECT USER
  159.     POP    B    ; GET USER
  160.     MOV    E,C
  161.     MVI    C,32    ; BDOS FCT
  162.     CALL    BDOS    ; SELECT USER
  163.     POP    D    ; GET FCB PTR
  164.     CALL    ZFSTAT    ; GET STATUS OF FILE
  165.     JNZ    FNF1    ; FILE NOT FOUND?  SHOULD NOT HAPPEN
  166.     CALL    PRINT
  167.     DB    CR,LF,'File is ',0
  168.     MOV    A,C    ; GET R/O FLAG
  169.     ORA    A    ; 0=NOT R/O
  170.     JNZ    LOOP1
  171.     CALL    PRINT
  172.     DB    'NOT ',0
  173. LOOP1:
  174.     CALL    PRINT
  175.     DB    'Read/Only, and File is ',0
  176.     MOV    A,B    ; GET SYSTEM FLAG
  177.     ORA    A    ; 0=NOT SYSTEM
  178.     JNZ    LOOP2
  179.     CALL    PRINT
  180.     DB    'Non-',0
  181. LOOP2:
  182.     CALL    PRINT
  183.     DB    'System',0
  184.     JMP    LOOP
  185. FNF1:
  186.     CALL    PRINT
  187.     DB    CR,LF,'This should not happen',0
  188. FNF:
  189.     CALL    PRINT
  190.     DB    CR,LF,'File Not Found',0
  191.     JMP    LOOP
  192. UDERR:
  193.     CALL    PRINT
  194.     DB    CR,LF,'Error in User or Disk Numbers',0
  195.     JMP    LOOP
  196. PCH:
  197.     MOV    A,M    ; GET CHAR
  198.     CALL    COUT    ; PRINT CHAR
  199.     INX    H    ; PT TO NEXT
  200.     DCR    C    ; COUNT DOWN
  201.     JNZ    PCH
  202.     RET
  203.  
  204. CDISK:
  205.     DS    1    ; CURRENT DISK
  206. CUSER:
  207.     DS    1    ; CURRENT USER
  208. FCB:
  209.     DS    36
  210.  
  211.     END
  212.