There are many ways to do this.
If you control X and Y and move to the position. Control the cylinder movement with a Z axis to bring down the hydraulic cyclinder. STOP. Manually punch the hole. START. Move the cylinder back up. Move to the next position - the code will look like this -
G0 X10Y10 - move to position 10,10
G0 Z0 - move the hydraulic cylinder down to the punching position.
M1 - wait for the hole to be punched
Z10 - move the cylinder up, out of the way
G0 X35Y35 - move to position 35,35
G0 Z0 - move the hydraulic cylinder down to the punching position
M1 - wait for the hole to be punched.
The computer will not move the table until it has moved the cylinder up out of the way.
If you only do X and Y then you only need
G0 X35Y35 - move to 35,35
M1 - wait for cylinder to be moved down and the hole to be punched.
G0 X47Y53 - move to the next hole
M1 - wait for cylinder to be moved down and the hole to be punched.
Here the "Resume" button can be in series with a switch on your punch, so that you cannot move the table if the cylinder is not fully "up" out of the way.
If you do the whole thing -
G0 X35Y35 - move to the next hole
G0 X0 - bring the cylinder down
M3 - punch the hole
M5 - if needed to retract the punch
G0 X10 - move the cylinder up, out of the way
G0 X25Y50 - move to the next hole
Here M3 operates a relay to start the pumps on the hydraulic cylinder. M5 stops it, or releases a pressure valve retracting the punch.
The table WILL NOT move until each line is completed. You can put a "pause" in to delay, say 10 seconds, to allow the cylinder to fully retract. You could have a safety switch connected, so that the computer would not advance until the cylinder was fully "home"