;
;
;* - - - - - - - - - - - - - - - - - - - - - *
;*                                           *
;*               - CPM-PEN -                 *
;*                                           *
;*    ROUTINE TO TRANSLATE  CP/M FILES TO    *
;*         TO ELECTRIC PENCIL FORMAT         *
;*            (C) COPYRIGHT 1979             *
;* ROD HALLEN  BOX 73  TOMBSTONE, AZ  85638  *
;*               26 JULY 1979                *
;*    THIS PROGRAM MAY BE USED FREELY BY     *
;*   COMPUTER HOBBYISTS FOR NON-COMMERCIAL   *
;*   APPLICATIONS.  IT MAY NOT BE USED FOR   *
;*    COMMERCIAL PURPOSES OR SOLD WITHOUT    *
;*     WRITTEN PERMISSION OF  THE AUTHOR.    *
;*                                           *
;*    ASSEMBLE WITH DIGITAL RESEARCH  "MAC"  *
;*     ASSEMBLER AND SEQIO LIBRARY.  INPUT   *
;*     FORMAT IS  "CPM-PEN X.Y" AND OUTPUT   *
;*         FILE WILL ALWAYS BE "X.PCL".      *
;*                                           *
;* - - - - - - - - - - - - - - - - - - - - - *
;
;
;
        ORG     100H
;
        MACLIB  SEQIO   ;SEQUENTIAL I/O LIBRARY
;
        LXI     H,0     ;SAVE OLD SP
        DAD     SP      ;AND SET UP NEW SP
        SHLD    OLDSP
        LXI     SP,NEWSP
;
FILE    INFILE,INF,,1,,1024     ;SETUP PENCIL INPUT FILE
;
FILE    OUTFILE,OUTF,,1,PCL,1024   ;SETUP CPM OUTPUT FILE
;
        MESS    MES1    ;PRINT ACTIVITY MESSAGE
;
CPMPN   XRA     A       ;CLEAR ACCUMULATOR
        STA     CPOS    ;CLEAR CHAR POS COUNTER
CPMP1   GET     INF     ;GET CHAR FROM INPUT FILE
        CPI     1AH     ;CPM END OF FILE ?
        JZ      DONE    ;IF SO, TIME TO EXIT
        CPI     0AH     ;IS IT END OF LINE ?
        JZ      CPMPN   ;IF SO, IGNORE AND START NEW LINE
        CPI     9       ;IS IT HORIZ TAB ?
        JZ      EXTAB   ;GOTO EXPANSION
        CALL    OUTPT   ;SEND IT
        LDA     CPOS    ;GET CHAR POS
        INR     A       ;INCREMENT IT
        STA     CPOS    ;STORE IT
        JMP     CPMP1   ;NEXT CHARACTER
;
DONE    XRA     A       ;CLEAR ACCUMULATER
        CALL    OUTPT   ;SEND PENCIL EOF
        MESS    MES2    ;PRINT COMPLETION MESSAGE
        FINIS   OUTF    ;CLOSE OUTPUT FILE
        LHLD    OLDSP   ;GET OLD STACK POINTER
        SPHL            ;AND RESTORE IT
        RET             ;RETURN TO CPM
;
EXTAB   MVI     A,20H     ;LOAD SPACE
        CALL    OUTPT   ;SEND IT
        LDA     CPOS    ;GET CHAR POSITION
        INR     A       ;INCREMENT IT
        STA     CPOS    ;STORE IT
        ANI     7       ;TAB COLUMN?
        JZ      CPMP1   ;NEXT CHARACTER
        JMP     EXTAB   ;MORE SPACE
;
OUTPT   PUT     OUTF    ;SEND CHAR TO OUTPUT FILE
        RET
;
OLDSP   DS      2       ;STORAGE FOR OLD STACK POINTER
        DS      40H     ;NEW STACK LOCATION
NEWSP                   ;NEW STACK POINTER
CPOS    DB      0       ;CHARACTER POSITION STORAGE
;
MES1    DB      CR,LF,'CONVERTING CP/M FILE TO ELECTRIC PENCIL '
        DB      'FORMAT . . . . .',CR,CR,LF,'$'
MES2    DB      CR,LF,'<--- CONVERSION COMPLETE --->',CR,LF,'$'
;
BUFFERS
;
        END
