home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / enterprs / cpm / utils / f / freebase.ark / ENTER.PRN < prev    next >
Encoding:
Text File  |  1988-02-05  |  7.6 KB  |  181 lines

  1.                 ;************************************************************
  2.                 ;            ENTER.ASM
  3.                 ;
  4.                 ;
  5.                 ;          A PROGRAM TO STORE TEXT IN A FILE.
  6.                 ;       ENTER ONE AND A HALF LINES OF TEXT, 
  7.                 ;          TERMINATED BY A CR, PER RECORD.  
  8.                 ;       TO EXIT, TYPE TWO RETURNS.  
  9.                 ;
  10.                 ; THIS FILE IS BASED HEAVILY ON A
  11.                 ;  PROGRAM TAKEN FROM THE SOLE OF CP/M
  12.                 ;  BY DAVID BROWN, STUDIO CITY, CA
  13.                 ;
  14.                 ;    TERMINAL SPECIFIC STUFF FOR FREEDOM 50
  15.                 ;
  16.                 ;
  17.                 ;
  18.                 ;
  19.                 ;
  20.  000F =             OPENF    EQU    0FH    ;OPEN FILE
  21.  0016 =             MAKEF    EQU    16H    ;READ STRING
  22.  000A =             READS    EQU    0AH    ;WRITE SEQUENTIAL RECORD
  23.  0015 =             WRITER    EQU    15H    ;WRITES SEQUENTIAL RECORD
  24.  0014 =                 READR   EQU     14H     ;READ SEQUENTIAL RECORD
  25.  0009 =             PRINTS    EQU    9H    ;PRINT STRING
  26.  0010 =             CLOSEF    EQU    10H    ;CLOSE FILE
  27.  0002 =             CONOUT    EQU    2H    ;CONSOLE OUT
  28.  0005 =             BDOS    EQU    5H    ;OPERATING SYSTEM ENTRY
  29.  005C =             FCB    EQU    5CH    ;FILE CONTROL BLOCK
  30.  0080 =             DMA    EQU    80H    ;DMA BUFFER
  31.  00FF =             DEL    EQU    0FFH    ;DELETE CHARACTER
  32.  000A =             LF    EQU    0AH    ;LINEFEED
  33.  000D =             CR    EQU    0DH    ;CARRIAGE RETURN
  34.                 ;
  35.                 ;
  36.  0100                   ORG    100H
  37.                 ;
  38.                 ;TRY TO OPEN FILE (NAME MUST ALREADY BE IN FCB)
  39.  0100 0E0F          MVI    C,OPENF    ;OPEN FILE
  40.  0102 115C00        LXI    D,FCB
  41.  0105 CD0500        CALL    BDOS
  42.  0108 3C            INR    A    ;IF A WAS FF, NOW IT'S 0
  43.  0109 C25D01        JNZ    ALEX    ; NOT 0, SO FILE EXISTS
  44.                 ;
  45.                 ;FILE DOES NOT ALREADY EXIST, SO WE'LL CREATE IT
  46.  010C 0E16          MVI    C,MAKEF
  47.  010E 115C00        LXI    D,FCB
  48.  0111 CD0500        CALL     BDOS
  49.                 ;
  50.                 ;FILL THE DMA BUFFER WITH DELETE MARKS
  51.  0114 218000    NEWRC    LXI    H,DMA    ;PUT DMA ADDRESS IN HL
  52.  0117 0680          MVI    B,128D    ;PUT COUNT IN B
  53.  0119 36FF      LOOP    MVI    M,DEL    ;STORE DELETE IN MEMORY
  54.                 ;
  55.                 ;            
  56.  011B 23            INX    H    ;INCREMENT HL POINTER
  57.  011C 05            DCR    B    ;DECREMENT COUNT
  58.  011D C21901        JNZ    LOOP
  59.                 ;
  60.                 ;PRINT A LINEFEED
  61.  0120 0E02          MVI    C,CONOUT
  62.  0122 1E0A          MVI    E,LF
  63.  0124 CD0500        CALL    BDOS
  64.                 ;
  65.                 ;READ CHARACTERS INTO BUFFER FROM KEYBOARD
  66.  0127 3E80          MVI    A,128D    ;SET COUNT TO 128 CHARACTERS
  67.  0129 327E00        STA    DMA-2    ; (STRING BUFFER STARTS 2
  68.  012C 0E0A          MVI    C,READS    ;  BYTES BEFORE DMA
  69.  012E 117E00        LXI    D,DMA-2    ;  BUFFER, TO LEAVE ROOM FOR
  70.  0131 CD0500        CALL    BDOS    ;  MAX-COUNT AND COUNT)  
  71.                 ;
  72.                 ;FIND OUT IF BUFFER IS EMPTY-IF SO, EXIT
  73.  0134 3A7F00        LDA    DMA-1    ;GET NUMBER OF CHAR INPUT
  74.  0137 B7            ORA    A    ;IS IT 0?
  75.  0138 CA5201        JZ    FINITO    ; YES
  76.                 
  77.                 ;
  78.                 ;INSERT CR AND LF IN BUFFER FOLLOWING TEXT
  79.  013B 5F            MOV    E,A    ;CHARACTER COUNT IN DE
  80.  013C 1600          MVI    D,0    ;
  81.  013E 218000        LXI    H,DMA    ;DMA ADDRESS IN HL
  82.  0141 19            DAD    D    ;ADD COUNT TO ADDR, PUT IN HL
  83.  0142 360D          MVI    M,CR    ;STORE CARRIAGE RETURN
  84.  0144 23            INX    H    ;INCREMENT POINTER
  85.  0145 360A          MVI    M,LF    ;STORE LINEFEED
  86.                 
  87.                 ;
  88.                 ;WRITE RECORD TO DISK
  89.  0147 0E15          MVI    C,WRITER    ;WRITE IT
  90.  0149 115C00        LXI    D,FCB
  91.  014C CD0500        CALL    BDOS
  92.  014F C37401            JMP     NECCH   ;GO TO NECCH; CLEAR SCRN AND SIGNON W/BANNER*
  93.                 ;
  94.                 ;CLOSE FILEL BEFORE EXITING
  95.  0152 0E10      FINITO    MVI    C,CLOSEF
  96.  0154 115C00        LXI    D,FCB
  97.  0157 CD0500        CALL    BDOS
  98.  015A C38701        JMP     CLEARIT  ;GOTO CLEAR SCREEN BEFORE RET
  99.                 ;
  100.                 ;FILE ALREADY EXITS, SO READ TILL EOF
  101.                 ;
  102.                 ;
  103.  015D 0E09      ALEX    MVI    C,PRINTS ;PRINT MESSAGE
  104.  015F 119001        LXI    D,ALMESS
  105.  0162 CD0500        CALL    BDOS
  106.  0165 0E14      READ2    MVI    C,READR    ;READ RECORD
  107.  0167 115C00        LXI     D,FCB
  108.  016A CD0500        CALL    BDOS
  109.  016D B7            ORA    A    ;END-O-FILE (A NOT 0) ?
  110.  016E CA6501        JZ    READ2    ;NO, SO READ NEXT RECORD
  111.  0171 C31401        JMP    NEWRC     ;YES, SO WRITE THE BASTARD!
  112.                 ;
  113.                 ;
  114.                 ;NECCH 
  115.  0174 0E10      NECCH   MVI     C,CLOSEF 
  116.  0176 115C00            LXI     D,FCB
  117.  0179 CD0500            CALL    BDOS
  118.  017C 0E09              MVI     C,PRINTS ; PRINTS MESSAGE
  119.  017E 119001            LXI     D,ALMESS
  120.  0181 CD0500            CALL    BDOS
  121.  0184 C36501            JMP     READ2
  122.                 
  123.                 ;
  124.                 ;CLEARIT 
  125.  0187 0E09      CLEARIT MVI     C,PRINTS  ;PRINTS MESSAGE
  126.  0189 115604            LXI     D,CLEARSN
  127.  018C CD0500            CALL    BDOS
  128.  018F C9                RET               ;DROP BACK TO CPM
  129.                 
  130.                 ;
  131.                 ;
  132.  0190 1B2A      ALMESS    DB     27,42    ;BLOW AWAY SCREEN
  133.  0192 1B77          DB    27,119  ; SET UP FOR SETTING INTENSITY PER CHAR
  134.  0194 1B5D38            DB      27,93,56 ;ROW 1, COL 25 -- TO CENTER, I HOPE
  135.  0197 1B4734            DB      27,71,52 ; SET INTENSITY TO FULL BLAST
  136.  019A 4620722065    DB    'F r e e  B a s e  II'
  137.  01AE 1B4730            DB      27,71,48 ; SHUT OFF INTENSITY
  138.  01B1 0D0A          DB    CR,LF
  139.  01B3 0D0A              DB      CR,LF
  140.  01B5 1B5D38            DB      27,93,56 ;SAME AS ABOVE -- TO CENTER
  141.  01B8 2044415441        DB      ' DATA ENTRY PROGRAM'    
  142.  01CB 0D0A0D0A          DB      CR,LF,CR,LF
  143.  01CF 0D0A              DB      CR,LF
  144.  01D1 1B5D38            DB      27,93,56 ;ROW 1, COL 25, TOO
  145.  01D4 0D0A              DB      CR,LF
  146.  01D6 5479706520    DB    'Type whatever you like, in any order you wish -- '
  147.  0207 757020746F    DB      'up to a line '
  148.  0214 0D0A616E64    DB    CR,LF,'and a half -- or 127 characters.'
  149.  0236 0D0A              DB      CR,LF
  150.  0238 0D0A              DB      CR,LF
  151.  023A 0D0A              DB      CR,LF
  152.  023C 1B5B29        DB    27,91,41       ; 8TH LINE, COL 1
  153.  023F 1B71              DB      27,113
  154.  0241 7C5F5F5F5F        DB      '|__________________________________________________________'
  155.  027C 5F5F5F5F5F        DB      '_____________________'
  156.  0291 0D0A              DB      CR,LF
  157.  0293 2D2D2D2D2D        DB      '--------------------------------------------->|'
  158.  02C2 0D0A              DB      CR,LF
  159.  02C4 1B72              DB      27,114
  160.  02C6 07                DB      7
  161.  02C7 2020202020        DB      '                            End 2nd line Here ^'
  162.  02F6 0D0A              DB      CR,LF
  163.  02F8 0D0A              DB      CR,LF
  164.  02FA 2020202020        DB      '              ============================================='
  165.  0335 0D0A0D0A          DB      CR,LF,CR,LF
  166.  0339 2020202020        DB      '                 Press  {RETURN} After Record is Entered'
  167.  0371 0D0A              DB      CR,LF
  168.  0373 2020202020        DB      '                      Press  {Return) Twice to Exit'
  169.  03A6 0D0A0D0A          DB      CR,LF,CR,LF
  170.  03AA 2020202020        DB      '                    To Search for Information, Enter: '
  171.  03E0 0D0A              DB      CR,LF  
  172.  03E2 2020202020        DB      '                         A>SEARCH  [D:] File.Type'
  173.  0413 0D0A              DB      CR,LF    
  174.  0415 2020202020        DB      '              ============================================='
  175.  0450 1B5B27        DB    27,91,39     ;RETURN TO SCENE OF CRIME...
  176.  0453 0D0A24            DB      CR,LF,'$'
  177.                 ;
  178.  0456 1B2A24    CLEARSN DB      27,42,'$'
  179.                 ;
  180.  0459           END
  181.