'===========================================================================
' Subject: No Frills Calculator               Date: 12-22-02 (  :  )       
'  Author: Fred Buffington                    Code: PBWIN,PBDLL            
'  Origin: oasys@sbcglobal.net              Packet: PBDLL.ABC
'===========================================================================
'Fred Buffington
'oasys@sbcglobal.net
'
'No Frills Calculator
'PBWIN
'----------------------------------------------------------- 
'Name: calcsm.bas no frills calculator (calculator small). * 
'Section:PBdll.abc                                         * 
'Author:Fred Buffington 9/2002.                            * 
'                                                          * 
'can be compiled as an exe or as a dll (or in another dll) * 
'see notes about remming certain statements                * 
'exit by using exit button or Esc key.                     * 
'                                                          * 
'Pressing Enter assume ADD (+). use number plus function   * 
'i.e. 123+ adds 123 to total 123- subtracts 123 from total * 
'+ - * /. Check for divide by 0.                           * 
'Returns the total to calling program. (when comp as dll)  * 
'See items to be remmed/changed for dll/exe use.           * 
'Author: <c> Fred Buffington 2002. all rights reserved     * 
'designed to be used with keypad entry of values for quick * 
'calculations where a total is needed.                     * 
'Pbdll 6.x, pbwin 7, probably works with pbdll 5 also      * 
'although some dialog statements may need to be changed for* 
'pbdll 5.0                                                 * 
'hInstance& is designed to be the handle of the calling    * 
'program in order to more easily display this on top       * 
'----------------------------------------------------------- 
'For dll use unrem below and rem $compile exe 
'#COMPILE DLL 
$COMPILE EXE 
'#DIM ALL 
#INCLUDE  "Win32Api.Inc" 
GLOBAL hDlg AS LONG 
GLOBAL total AS CUX 
GLOBAL amount AS CUX 
GLOBAL UserName AS STRING 
GLOBAL Test$ 
GLOBAL hFont& 
'_______________________________________________________________________ ________________________ 
 
CALLBACK FUNCTION CalcDlgProc 
 LOCAL cid& 
 LOCAL test1$ 
 LOCAL x$ 
 LOCAL denom@@ 
 SELECT CASE CBMSG 
    CASE %WM_COMMAND 
      SELECT CASE LOWRD(CBWPARAM) 
 
        'Process Enter key 
 
        CASE %IDOK 
          IF CBCTLMSG = %BN_CLICKED THEN 
             x$=LEFT$(test$,1) 
             SELECT CASE x$ 
               CASE "+","-" 
                 total=total+VAL(test$) 
               CASE "*","x","X" 
                 total=total*VAL(MID$(test$,2)) 
               CASE "/" 
                 denom@@=VAL(MID$(test$+SPACE$(2),2)) 
                 IF denom@@<>0 THEN 
                   total=total/denom@@ 'VAL(MID$(test$,2)) 
                 END IF 
               CASE ELSE 
                 x$=RIGHT$(test$,1) 
                 SELECT CASE x$ 
                   CASE "+","-" 
                     total=total+VAL(test$) 
                   CASE "*" 
                     total=total*VAL(MID$(test$,2)) 
                   CASE "/" 
                     denom@@=VAL(MID$(test$+SPACE$(2),2)) 
                     IF denom@@<>0 THEN 
                       total=total/denom@@ 'VAL(MID$(test$,2)) 
                     END IF 
                   CASE "x","X" 
                     total=total*VAL(MID$(test$,2)) 
 
                   CASE ELSE 
                     IF INSTR(test$,"^")>0 AND INSTR(test$,"^")<LEN(test$) THEN 
                        L%=INSTR(test$,"^") 
                        total=total+VAL(MID$(test$,1,L%-1))^VAL(MID$(test$,L%+1)) 
                     ELSE 
                        total=total+VAL(test$) 
                     END IF 
                 END SELECT 
             END SELECT 
             CONTROL SET TEXT hDlg,102,FORMAT$(total,"###,###,###.##") 
             Test$="" 
             CONTROL SET TEXT hDlg,101,test$ 
             EXIT FUNCTION 
          END IF 
 
        'Process Escape key 
        CASE %IDCANCEL 
          IF CBCTLMSG = %BN_CLICKED THEN 
            'MSGBOX "Escape pressed." 
            DIALOG END CBHNDL, 0 
          END IF 
      END SELECT 
'Process number entry, or exit button 
      CID&=CBCTL 
      SELECT CASE CID& 
          CASE 101 'testbox 
             CONTROL GET TEXT CBHNDL, 101 TO UserName 
             test$=UserName 
             IF LEN(test$)>1 THEN 
               IF RIGHT$(test$,1)="+" OR RIGHT$(test$,1)="-" OR RIGHT$(test$,1)="*" OR RIGHT$(test$,1)="/" OR RIGHT$(UCASE$(test$),1)="X" THEN 
                 test1$=RIGHT$(test$,1) 
                 IF test1$="+" THEN 
                   Total=Total+VAL(MID$(test$,1,LEN(test$)-1)) 
                   CONTROL SET TEXT hDlg,102,FORMAT$(total,"###,###,###.##") 
                   Test$="" 
                   CONTROL SET TEXT hDlg,101,test$ 
                   CONTROL SET FOCUS hdlg, 101 
                 ELSEIF test1$="-" THEN 
                   Total=Total-VAL(MID$(test$,1,LEN(test$)-1)) 
                   CONTROL SET TEXT hDlg,102,FORMAT$(total,"###,###,###.##") 
                   Test$="" 
                   CONTROL SET TEXT hDlg,101,test$ 
                   CONTROL SET FOCUS hdlg, 101 
 
                 ELSEIF test1$="*" THEN 
                   Total=Total*VAL(MID$(test$,1,LEN(test$)-1)) 
                   CONTROL SET TEXT hDlg,102,FORMAT$(total,"###,###,###.##") 
                   Test$="" 
                   CONTROL SET TEXT hDlg,101,test$ 
                   CONTROL SET FOCUS hdlg, 101 
                 ELSEIF UCASE$(test1$)="X" THEN 
                   Total=Total*VAL(MID$(test$,1,LEN(test$)-1)) 
                   CONTROL SET TEXT hDlg,102,FORMAT$(total,"###,###,###.##") 
                   Test$="" 
                   CONTROL SET TEXT hDlg,101,test$ 
                   CONTROL SET FOCUS hdlg, 101 
 
                 ELSEIF test1$="/" OR test1$="\" THEN 
                   IF VAL(MID$(test$,1,LEN(test$)-1))<>0 THEN 
                      Total=Total/VAL(MID$(test$,1,LEN(test$)-1)) 
                   END IF 
                   CONTROL SET TEXT hDlg,102,FORMAT$(total,"###,###,###.##") 
                   Test$="" 
                   CONTROL SET TEXT hDlg,101,test$ 
                   CONTROL SET FOCUS hdlg, 101 
                 END IF 
               END IF 
             END IF 
'           CASE 201 'exit button pressed no longer used 
'             DIALOG END CBHNDL, 0 
           CASE 201 'Decimal 
               test$=test$+"." 
               CONTROL SET TEXT hDlg,101,test$ 
               CONTROL SET FOCUS hdlg, 101 
 
           CASE 202 'C button i.e. Clear 
               Total=0 
               Test$="" 
               CONTROL SET TEXT hDlg,102,FORMAT$(total,"###,###,###.##") 
               CONTROL SET TEXT hDlg,101,test$ 
               CONTROL SET FOCUS hdlg,101 
           CASE 301 
               test$=test$+"7" 
               CONTROL SET TEXT hDlg,101,test$ 
               CONTROL SET FOCUS hdlg, 101 
           CASE 302 
               test$=test$+"8" 
               CONTROL SET TEXT hDlg,101,test$ 
               CONTROL SET FOCUS hdlg, 101 
           CASE 303 
               test$=test$+"9" 
               CONTROL SET TEXT hDlg,101,test$ 
               CONTROL SET FOCUS hdlg, 101 
           CASE 304 
               test$=test$+"4" 
               CONTROL SET TEXT hDlg,101,test$ 
               CONTROL SET FOCUS hdlg, 101 
           CASE 305 
               test$=test$+"5" 
               CONTROL SET TEXT hDlg,101,test$ 
               CONTROL SET FOCUS hdlg, 101 
           CASE 306 
               test$=test$+"6" 
               CONTROL SET TEXT hDlg,101,test$ 
               CONTROL SET FOCUS hdlg, 101 
           CASE 307 
               test$=test$+"1" 
               CONTROL SET TEXT hDlg,101,test$ 
               CONTROL SET FOCUS hdlg, 101 
           CASE 308 
               test$=test$+"2" 
               CONTROL SET TEXT hDlg,101,test$ 
               CONTROL SET FOCUS hdlg, 101 
           CASE 309 
               test$=test$+"3" 
               CONTROL SET TEXT hDlg,101,test$ 
               CONTROL SET FOCUS hdlg, 101 
           CASE 310 
               test$=test$+"0" 
               CONTROL SET TEXT hDlg,101,test$ 
               CONTROL SET FOCUS hdlg, 101 
           CASE 311 
               test$=test$+"+" 
               CONTROL SET TEXT hDlg,101,test$ 
               CONTROL SET FOCUS hdlg, 101 
           CASE 312 
               test$=test$+"-" 
               CONTROL SET TEXT hDlg,101,test$ 
               CONTROL SET FOCUS hdlg, 101 
           CASE 313 
               test$=test$+"*" 
               CONTROL SET TEXT hDlg,101,test$ 
               CONTROL SET FOCUS hdlg, 101 
           CASE 314 
               test$=test$+"/" 
               CONTROL SET TEXT hDlg,101,test$ 
               CONTROL SET FOCUS hdlg, 101 
      END SELECT 
 END SELECT 
 
END FUNCTION 
'_______________________________________________________________________ __________________________ 
 
'for dll use unrem below and rem pbmain 
'FUNCTION calcit(hInstance&) EXPORT AS STRING 
'rem above and use PBMAIN for exe use or for testing. 
FUNCTION PBMAIN AS LONG 
'unrem below when using pbmain rem if using as dll 
  DIM hInstance& 
 ' LOCAL hFont& 
 
  total=0 
 
  DIALOG NEW hInstance&, "Quick-Calc", , ,  123,  120, %WS_POPUP  OR %WS_CAPTION OR %WS_MINIMIZEBOX _ 
             OR %WS_SYSMENU OR %DS_CENTER TO hDlg 
  CONTROL ADD TEXTBOX,hDlg,101,"",10,30,100,14 
  CONTROL ADD LABEL,hDlg,102,"",65,12,48,12,%SS_RIGHT 
  CONTROL ADD LABEL,hDlg,103,"Total",10,12,50,12 
  CONTROL ADD FRAME, hDlg,104,"Calculator",5,2,112,25 
  CONTROL ADD FRAME, hDlg,104,"",5,24,112,90 
  CONTROL ADD BUTTON, hDlg,202,"C",62,95,20,14 
  CONTROL ADD BUTTON,hDlg,301,"7",20,50,20,14 
  CONTROL ADD BUTTON,hDlg,302,"8",41,50,20,14 
  CONTROL ADD BUTTON,hDlg,303,"9",62,50,20,14 
  CONTROL ADD BUTTON,hDlg,304,"4",20,65,20,14 
  CONTROL ADD BUTTON,hDlg,305,"5",41,65,20,14 
  CONTROL ADD BUTTON,hDlg,306,"6",62,65,20,14 
  CONTROL ADD BUTTON,hDlg,307,"1",20,80,20,14 
  CONTROL ADD BUTTON,hDlg,308,"2",41,80,20,14 
  CONTROL ADD BUTTON,hDlg,309,"3",62,80,20,14 
  CONTROL ADD BUTTON,hDlg,201,".",20,95,20,14 
  CONTROL ADD BUTTON,hDlg,310,"0",41,95,20,14 
  CONTROL ADD BUTTON,hDlg,311,"+",83,50,20,14 
  CONTROL ADD BUTTON,hDlg,312,"-",83,65,20,14 
  CONTROL ADD BUTTON,hDlg,313,"x",83,80,20,14 
  CONTROL ADD BUTTON,hDlg,314,"/",83,95,20,14 
  hFont& = GetStockObject(%SYSTEM_FIXED_FONT) 
  CONTROL SEND hDlg, 311, %WM_SETFONT, hFont&, %TRUE 
  CONTROL SEND hDlg, 312, %WM_SETFONT, hFont&, %TRUE 
  CONTROL SEND hDlg, 313, %WM_SETFONT, hFont&, %TRUE 
  CONTROL SEND hDlg, 314, %WM_SETFONT, hFont&, %TRUE 
  CONTROL SEND hDlg, 201, %WM_SETFONT, hFont&, %TRUE 
  CONTROL SEND hDlg, 101, %WM_SETFONT, hFont&, %TRUE 
  CONTROL SET FOCUS hdlg,101 
  DIALOG SHOW MODAL hDlg CALL CalcDlgProc 
 
REM below when USING PBMAIN TO RETURN total TO caller 
'  FUNCTION =STR$(total) 
END FUNCTION 
