home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG045.ARK / P_R140.BAS < prev    next >
BASIC Source File  |  1984-04-29  |  5KB  |  131 lines

  1.     REMARK    *****************************************\
  2.         *  P/R140.BAS     PAYROLL CHECK WRITER  *\
  3.         *    5/17/79        11:15 P.M.      *\
  4.         *****************************************
  5. %INCLUDE CURSOR
  6.  
  7.     DIM MONEY$(39),S(96),R$(5),R1(2),R2(5),G2$(5),G3(5)
  8.  
  9.     DATA "ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT"    REMARK  DATA TABLE FOR CHECK CALCULATION
  10.     DATA "NINE","TEN","ELEVEN","TWELVE","THIRTEEN","FOURTEEN","FIFTEEN"
  11.     DATA "SIXTEEN","SEVENTEEN","EIGHTEEN","NINETEEN","TWENTY","THIRTY"
  12.     DATA "FORTY","FIFTY","SIXTY","SEVENTY","EIGHTY","NINETY"
  13.     DATA "JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE","JULY","AUGUST"
  14.     DATA "SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER"
  15.     DEF FNR(Z1)=INT(Z1*100+.5)/100                    REMARK  ROUNDING FUNCTION
  16.     RESTORE
  17.     FOR I%=1 TO 39
  18.     READ MONEY$(I%)
  19.     NEXT I%
  20.     GOTO 6000
  21. %INCLUDE SUBS1
  22. %INCLUDE GENINFO
  23. %INCLUDE MSTRIN
  24. 5000    X4$=""                                REMARK  ROUTINE TO PRINT CHECK AMOUNT IN ENGLISH
  25.     IF A1<0 THEN RETURN                        REMARK  IF ZERO CHECK AMOUNT, RETURN
  26.     N1=INT(A1/1000)                            REMARK  DIVIDE AMOUNT BY 1000
  27.     IF N1>99 THEN RETURN                        REMARK  CHECK CAN BE NO GREATER THAN $99,999.99
  28.     IF N1=0 THEN 5005
  29.     GOSUB 5040                            REMARK  CONVERT THOUSANDS OF DOLLARS TO ENGLISH
  30.     X4$=X4$+" THOUSAND"
  31. 5005    A1=A1-N1*1000
  32.     N1=INT(A1/100)                            REMARK  DIVIDE AMOUNT BY 100
  33.     IF N1=0 THEN 5010
  34.     GOSUB 5040                            REMARK  CONVERT HUNDREDS OF DOLLARS TO ENGLISH
  35.     X4$=X4$+" HUNDRED"
  36. 5010    A1=A1-N1*100
  37.     N1=INT(A1)                            REMARK  REMAINING DOLLARS
  38.     IF N1 > 0 THEN GOSUB 5040
  39.     IF LEN(X4$)=0 THEN 5025
  40. 5020    X4$=X4$+" DOLLARS"
  41. 5025    A1=A1-N1                            REMARK  CALCULATE REMAINING CENTS
  42.     IF A1 < .01 THEN RETURN                        REMARK  IF NO CENTS, RETURN
  43.     IF LEN(X4$) > 0 THEN X4$=X4$+" AND"
  44. 5030    A1=A1*100
  45.     X4$=X4$+" "+STR$(A1)+" CENTS"
  46. 5035    RETURN
  47. 5040    IF N1 < 21 THEN X4$=X4$+" "+MONEY$(N1):RETURN            REMARK  CONVERT AMOUNT IN N1 TO ENGLISH IN X4$
  48.     X4$=X4$+" "+MONEY$(INT((N1-20)/10)+20)
  49.     A3=N1-INT(N1/10)*10
  50.     IF A3=0 THEN RETURN
  51.     X4$=X4$+"-"
  52. 5050    X4$=X4$+MONEY$(A3)
  53. 5055    RETURN
  54. 6000    A$="  ###.## #####.## ##.## ####.## #####.## ###.##"        REMARK  SET UP PRINT MASKS FOR CHECK WRITER
  55.     B$=" ##,  ##"
  56.     C$="###.## ###.## ###.## "
  57.     D$="####.## ####.##"
  58.     E$="-####.##"
  59.     Y9=3
  60.     OPEN "P/R0F110.DAT" RECL 1150 AS 1,\
  61.     "P/R0F030.DAT" RECL 38 AS 2,\
  62.     "G/I0F010.DAT" RECL 200 AS 3
  63.     GOSUB 700                            REMARK  READ GENERAL INFORMATION FILE
  64.     CONSOLE
  65.     PRINT CLEAR.SCREEN$;"CHECK WRITER"                REMARK DISPLAY PROGRAM I.D.
  66.     PRINT
  67.     PRINT
  68.     PRINT
  69.     PRINT "START EMPLOYEE NUMBER"
  70.     PRINT "END EMPLOYEE NUMBER"
  71. 6035    X1=279:X2=3:X3=0:X4=999:GOSUB 345                REMARK  ENTER FIRST EMPLOYEE TO WRITE PAYROLL CHECK FOR
  72.     IF X0=0 THEN 6320                        REMARK  END PROGRAM ON ZERO EMPLOYEE NUMBER
  73.     E1=X0
  74.     X1=343:X2=3:X3=E1:X4=999:GOSUB 345                REMARK  ENTER LAST EMPLOYEE NUMBER IN RANGE
  75.     E2=X0
  76.     IF E2 > MSTR.RECORDS THEN E2=MSTR.RECORDS            REMARK  RESET END EMPLOYEE ON DEFAULT ENTRY
  77.     X2=1:X3=0:X4=1:X2$="ENTRY CORRECT?"
  78.     GOSUB 665                            REMARK  VERIFY ENTRY: '1'=O.K., '0'=RETRY
  79.     IF X0 <> 1 THEN 6035
  80.     LPRINTER
  81.     FOR I2%=E1 TO E2
  82.     X0=I2%
  83.     GOSUB 745                            REMARK  READ MASTER RECORD FOR EMPLOYEE
  84.     IF S(1)=0 OR S(83)=0 OR R2(1)=99 THEN GOTO 6271            REMARK  IF EMPLOYEE RECORD IS DELETED, INACTIVE\
  85.                                             OR HAS NOT BEEN PAID, DO NOT WRITE A CHECK.
  86. 6100    PRINT TAB(16);R$(1);TAB(61);                    REMARK  PRINT EMPLOYEE NAME ON PAY STUB
  87.     X0=G3(2):GOSUB 680.5                        REMARK  PRINT PERIOD START DATE ON CHECK
  88.     PRINT " TO ";
  89.     X0=G3(3):GOSUB 680.5                        REMARK  PRINT PERIOD END DATE ON CHECK
  90.     PRINT:PRINT
  91.     PRINT USING A$; S(73),S(74),S(75),S(76),S(83),S(85);        REMARK  PRINT REGULAR HOURS, REGULAR PAY,\
  92.                                             O/T HOURS, O/T PAY, TOTAL PAY, FED W/H
  93.  
  94.     PRINT USING C$;S(87),S(88);S(86);                REMARK  PRINT FICA, SDI AND STATE W/H TAXES
  95.     PRINT USING D$; S(89),S(83)-S(90)                REMARK  PRINT OTHER DEDUCTIONS AND NET PAY
  96.     FOR I%=1 TO 7:PRINT:NEXT I%                    REMARK  SPACE DOWNWARD TO CHECK AMOUNT AREA
  97.     X0$=RIGHT$("000000"+STR$(G3(1)),6)
  98.     Z1=VAL(LEFT$(X0$,2))                        REMARK  Z1=MONTH
  99.     Z2=VAL(MID$(X0$,3,2))                        REMARK  Z2=DAY
  100.     Z3=VAL(RIGHT$(X0$,2))                        REMARK  Z3=YEAR
  101.     X4$=MONEY$(27+Z1)
  102.     PRINT TAB(69-LEN(X4$));X4$;                    REMARK  PRINT MONTH IN ENGLISH
  103.     PRINT USING B$;Z2,Z3
  104.     PRINT
  105.     PRINT
  106.     A1=S(83)-S(90)
  107.     GOSUB 5000                            REMARK  CREATE ENGLISH CHECK AMOUNT IN X4$
  108.     PRINT TAB(2); "**";X4$;"**";TAB(65);                REMARK  PRINT CHECK AMOUNT
  109.     PRINT USING "**#####.##";S(83)-S(90)
  110.     FOR I%=1 TO 6:PRINT:NEXT I%                    REMARK PRINT LINE FEEDS TO PAYEE SECTION
  111.     PRINT TAB(5);"**";R$(1);"**"                    REMARK  PRINT CHECK PAYEE
  112.     FOR I=1 TO 9:PRINT:NEXT I                    REMARK  SKIP TO CHECK STUB TO PRINT DEDUCTIONS
  113. 6200    IF D1 > S(1) THEN 6270
  114.     READ #2;D1,D2,D3,D4,D1$,D5,D6                    REMARK  READ DEDUCTION RECORD
  115.     IF END #2 THEN 6270
  116.     IF D1 < S(1) THEN 6200                        REMARK  SEARCH FOR DEDUCTION/MISC PAY FOR EMPLOYEE
  117.     IF D4 < 10 THEN 6200                        REMARK  IF RECORD IS UNUSED, GET NEXT
  118. 6255    IF D2 < 2 THEN 6260
  119.     X=-1
  120.     D6=D6*X
  121. 6260    PRINT TAB(54);D1$;TAB(67);                    REMARK  PRINT DESCRIPTION
  122.     PRINT USING E$;D6                        REMARK  PRINT AMOUNT ON CHECK STUB
  123.     GOTO 6200
  124. 6270    PRINT
  125.     PRINT
  126.     PRINT
  127. 6271    NEXT I2%
  128. 6320    CONSOLE
  129.     PRINT CLEAR.SCREEN$;"P/R CHECK WRITER LOADING MENU"
  130.     CHAIN "P/R000"
  131.